01:       DOUBLE PRECISION FUNCTION DZNRM2(N,X,INCX)
02: *     .. Scalar Arguments ..
03:       INTEGER INCX,N
04: *     ..
05: *     .. Array Arguments ..
06:       DOUBLE COMPLEX X(*)
07: *     ..
08: *
09: *  Purpose
10: *  =======
11: *
12: *  DZNRM2 returns the euclidean norm of a vector via the function
13: *  name, so that
14: *
15: *     DZNRM2 := sqrt( conjg( x' )*x )
16: *
17: *
18: *  -- This version written on 25-October-1982.
19: *     Modified on 14-October-1993 to inline the call to ZLASSQ.
20: *     Sven Hammarling, Nag Ltd.
21: *
22: *
23: *     .. Parameters ..
24:       DOUBLE PRECISION ONE,ZERO
25:       PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
26: *     ..
27: *     .. Local Scalars ..
28:       DOUBLE PRECISION NORM,SCALE,SSQ,TEMP
29:       INTEGER IX
30: *     ..
31: *     .. Intrinsic Functions ..
32:       INTRINSIC ABS,DBLE,DIMAG,SQRT
33: *     ..
34:       IF (N.LT.1 .OR. INCX.LT.1) THEN
35:           NORM = ZERO
36:       ELSE
37:           SCALE = ZERO
38:           SSQ = ONE
39: *        The following loop is equivalent to this call to the LAPACK
40: *        auxiliary routine:
41: *        CALL ZLASSQ( N, X, INCX, SCALE, SSQ )
42: *
43:           DO 10 IX = 1,1 + (N-1)*INCX,INCX
44:               IF (DBLE(X(IX)).NE.ZERO) THEN
45:                   TEMP = ABS(DBLE(X(IX)))
46:                   IF (SCALE.LT.TEMP) THEN
47:                       SSQ = ONE + SSQ* (SCALE/TEMP)**2
48:                       SCALE = TEMP
49:                   ELSE
50:                       SSQ = SSQ + (TEMP/SCALE)**2
51:                   END IF
52:               END IF
53:               IF (DIMAG(X(IX)).NE.ZERO) THEN
54:                   TEMP = ABS(DIMAG(X(IX)))
55:                   IF (SCALE.LT.TEMP) THEN
56:                       SSQ = ONE + SSQ* (SCALE/TEMP)**2
57:                       SCALE = TEMP
58:                   ELSE
59:                       SSQ = SSQ + (TEMP/SCALE)**2
60:                   END IF
61:               END IF
62:    10     CONTINUE
63:           NORM = SCALE*SQRT(SSQ)
64:       END IF
65: *
66:       DZNRM2 = NORM
67:       RETURN
68: *
69: *     End of DZNRM2.
70: *
71:       END
72: