|
- *> \brief \b DNRM2
- *
- * =========== DOCUMENTATION ===========
- *
- * Online html documentation available at
- * http://www.netlib.org/lapack/explore-html/
- *
- * Definition:
- * ===========
- *
- * DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX)
- *
- * .. Scalar Arguments ..
- * INTEGER INCX,N
- * ..
- * .. Array Arguments ..
- * DOUBLE PRECISION X(*)
- * ..
- *
- *
- *> \par Purpose:
- * =============
- *>
- *> \verbatim
- *>
- *> DNRM2 returns the euclidean norm of a vector via the function
- *> name, so that
- *>
- *> DNRM2 := sqrt( x'*x )
- *> \endverbatim
- *
- * Arguments:
- * ==========
- *
- *> \param[in] N
- *> \verbatim
- *> N is INTEGER
- *> number of elements in input vector(s)
- *> \endverbatim
- *>
- *> \param[in] X
- *> \verbatim
- *> X is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
- *> \endverbatim
- *>
- *> \param[in] INCX
- *> \verbatim
- *> INCX is INTEGER
- *> storage spacing between elements of DX
- *> \endverbatim
- *
- * Authors:
- * ========
- *
- *> \author Univ. of Tennessee
- *> \author Univ. of California Berkeley
- *> \author Univ. of Colorado Denver
- *> \author NAG Ltd.
- *
- *> \date November 2017
- *
- *> \ingroup double_blas_level1
- *
- *> \par Further Details:
- * =====================
- *>
- *> \verbatim
- *>
- *> -- This version written on 25-October-1982.
- *> Modified on 14-October-1993 to inline the call to DLASSQ.
- *> Sven Hammarling, Nag Ltd.
- *> \endverbatim
- *>
- * =====================================================================
- DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX)
- *
- * -- Reference BLAS level1 routine (version 3.8.0) --
- * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
- * November 2017
- *
- * .. Scalar Arguments ..
- INTEGER INCX,N
- * ..
- * .. Array Arguments ..
- DOUBLE PRECISION X(*)
- * ..
- *
- * =====================================================================
- *
- * .. Parameters ..
- DOUBLE PRECISION ONE,ZERO
- PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
- * ..
- * .. Local Scalars ..
- DOUBLE PRECISION ABSXI,NORM,SCALE,SSQ
- INTEGER IX
- * ..
- * .. Intrinsic Functions ..
- INTRINSIC ABS,SQRT
- * ..
- IF (N.LT.1 .OR. INCX.LT.1) THEN
- NORM = ZERO
- ELSE IF (N.EQ.1) THEN
- NORM = ABS(X(1))
- ELSE
- SCALE = ZERO
- SSQ = ONE
- * The following loop is equivalent to this call to the LAPACK
- * auxiliary routine:
- * CALL DLASSQ( N, X, INCX, SCALE, SSQ )
- *
- DO 10 IX = 1,1 + (N-1)*INCX,INCX
- IF (X(IX).NE.ZERO) THEN
- ABSXI = ABS(X(IX))
- IF (SCALE.LT.ABSXI) THEN
- SSQ = ONE + SSQ* (SCALE/ABSXI)**2
- SCALE = ABSXI
- ELSE
- SSQ = SSQ + (ABSXI/SCALE)**2
- END IF
- END IF
- 10 CONTINUE
- NORM = SCALE*SQRT(SSQ)
- END IF
- *
- DNRM2 = NORM
- RETURN
- *
- * End of DNRM2.
- *
- END
|