LAPACK  3.4.1
LAPACK: Linear Algebra PACKage
dznrm2.f
Go to the documentation of this file.
00001 *> \brief \b DZNRM2
00002 *
00003 *  =========== DOCUMENTATION ===========
00004 *
00005 * Online html documentation available at 
00006 *            http://www.netlib.org/lapack/explore-html/ 
00007 *
00008 *  Definition:
00009 *  ===========
00010 *
00011 *       DOUBLE PRECISION FUNCTION DZNRM2(N,X,INCX)
00012 * 
00013 *       .. Scalar Arguments ..
00014 *       INTEGER INCX,N
00015 *       ..
00016 *       .. Array Arguments ..
00017 *       COMPLEX*16 X(*)
00018 *       ..
00019 *  
00020 *
00021 *> \par Purpose:
00022 *  =============
00023 *>
00024 *> \verbatim
00025 *>
00026 *> DZNRM2 returns the euclidean norm of a vector via the function
00027 *> name, so that
00028 *>
00029 *>    DZNRM2 := sqrt( x**H*x )
00030 *> \endverbatim
00031 *
00032 *  Authors:
00033 *  ========
00034 *
00035 *> \author Univ. of Tennessee 
00036 *> \author Univ. of California Berkeley 
00037 *> \author Univ. of Colorado Denver 
00038 *> \author NAG Ltd. 
00039 *
00040 *> \date November 2011
00041 *
00042 *> \ingroup double_blas_level1
00043 *
00044 *> \par Further Details:
00045 *  =====================
00046 *>
00047 *> \verbatim
00048 *>
00049 *>  -- This version written on 25-October-1982.
00050 *>     Modified on 14-October-1993 to inline the call to ZLASSQ.
00051 *>     Sven Hammarling, Nag Ltd.
00052 *> \endverbatim
00053 *>
00054 *  =====================================================================
00055       DOUBLE PRECISION FUNCTION DZNRM2(N,X,INCX)
00056 *
00057 *  -- Reference BLAS level1 routine (version 3.4.0) --
00058 *  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
00059 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
00060 *     November 2011
00061 *
00062 *     .. Scalar Arguments ..
00063       INTEGER INCX,N
00064 *     ..
00065 *     .. Array Arguments ..
00066       COMPLEX*16 X(*)
00067 *     ..
00068 *
00069 *  =====================================================================
00070 *
00071 *     .. Parameters ..
00072       DOUBLE PRECISION ONE,ZERO
00073       PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
00074 *     ..
00075 *     .. Local Scalars ..
00076       DOUBLE PRECISION NORM,SCALE,SSQ,TEMP
00077       INTEGER IX
00078 *     ..
00079 *     .. Intrinsic Functions ..
00080       INTRINSIC ABS,DBLE,DIMAG,SQRT
00081 *     ..
00082       IF (N.LT.1 .OR. INCX.LT.1) THEN
00083           NORM = ZERO
00084       ELSE
00085           SCALE = ZERO
00086           SSQ = ONE
00087 *        The following loop is equivalent to this call to the LAPACK
00088 *        auxiliary routine:
00089 *        CALL ZLASSQ( N, X, INCX, SCALE, SSQ )
00090 *
00091           DO 10 IX = 1,1 + (N-1)*INCX,INCX
00092               IF (DBLE(X(IX)).NE.ZERO) THEN
00093                   TEMP = ABS(DBLE(X(IX)))
00094                   IF (SCALE.LT.TEMP) THEN
00095                       SSQ = ONE + SSQ* (SCALE/TEMP)**2
00096                       SCALE = TEMP
00097                   ELSE
00098                       SSQ = SSQ + (TEMP/SCALE)**2
00099                   END IF
00100               END IF
00101               IF (DIMAG(X(IX)).NE.ZERO) THEN
00102                   TEMP = ABS(DIMAG(X(IX)))
00103                   IF (SCALE.LT.TEMP) THEN
00104                       SSQ = ONE + SSQ* (SCALE/TEMP)**2
00105                       SCALE = TEMP
00106                   ELSE
00107                       SSQ = SSQ + (TEMP/SCALE)**2
00108                   END IF
00109               END IF
00110    10     CONTINUE
00111           NORM = SCALE*SQRT(SSQ)
00112       END IF
00113 *
00114       DZNRM2 = NORM
00115       RETURN
00116 *
00117 *     End of DZNRM2.
00118 *
00119       END
 All Files Functions