Annotation of rpl/lapack/blas/dznrm2.f, revision 1.1.1.1

1.1       bertrand    1:       DOUBLE PRECISION FUNCTION DZNRM2(N,X,INCX)
                      2: *     .. Scalar Arguments ..
                      3:       INTEGER INCX,N
                      4: *     ..
                      5: *     .. Array Arguments ..
                      6:       DOUBLE COMPLEX X(*)
                      7: *     ..
                      8: *
                      9: *  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: *  Further Details
                     18: *  ===============
                     19: *
                     20: *  -- This version written on 25-October-1982.
                     21: *     Modified on 14-October-1993 to inline the call to ZLASSQ.
                     22: *     Sven Hammarling, Nag Ltd.
                     23: *
                     24: *  =====================================================================
                     25: *
                     26: *     .. Parameters ..
                     27:       DOUBLE PRECISION ONE,ZERO
                     28:       PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
                     29: *     ..
                     30: *     .. Local Scalars ..
                     31:       DOUBLE PRECISION NORM,SCALE,SSQ,TEMP
                     32:       INTEGER IX
                     33: *     ..
                     34: *     .. Intrinsic Functions ..
                     35:       INTRINSIC ABS,DBLE,DIMAG,SQRT
                     36: *     ..
                     37:       IF (N.LT.1 .OR. INCX.LT.1) THEN
                     38:           NORM = ZERO
                     39:       ELSE
                     40:           SCALE = ZERO
                     41:           SSQ = ONE
                     42: *        The following loop is equivalent to this call to the LAPACK
                     43: *        auxiliary routine:
                     44: *        CALL ZLASSQ( N, X, INCX, SCALE, SSQ )
                     45: *
                     46:           DO 10 IX = 1,1 + (N-1)*INCX,INCX
                     47:               IF (DBLE(X(IX)).NE.ZERO) THEN
                     48:                   TEMP = ABS(DBLE(X(IX)))
                     49:                   IF (SCALE.LT.TEMP) THEN
                     50:                       SSQ = ONE + SSQ* (SCALE/TEMP)**2
                     51:                       SCALE = TEMP
                     52:                   ELSE
                     53:                       SSQ = SSQ + (TEMP/SCALE)**2
                     54:                   END IF
                     55:               END IF
                     56:               IF (DIMAG(X(IX)).NE.ZERO) THEN
                     57:                   TEMP = ABS(DIMAG(X(IX)))
                     58:                   IF (SCALE.LT.TEMP) THEN
                     59:                       SSQ = ONE + SSQ* (SCALE/TEMP)**2
                     60:                       SCALE = TEMP
                     61:                   ELSE
                     62:                       SSQ = SSQ + (TEMP/SCALE)**2
                     63:                   END IF
                     64:               END IF
                     65:    10     CONTINUE
                     66:           NORM = SCALE*SQRT(SSQ)
                     67:       END IF
                     68: *
                     69:       DZNRM2 = NORM
                     70:       RETURN
                     71: *
                     72: *     End of DZNRM2.
                     73: *
                     74:       END

CVSweb interface <joel.bertrand@systella.fr>