File:  [local] / rpl / lapack / blas / dnrm2.f
Revision 1.14: download - view: text, annotated - select for diffs - revision graph
Tue May 29 07:19:41 2018 UTC (5 years, 11 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_35, rpl-4_1_34, rpl-4_1_33, rpl-4_1_32, rpl-4_1_31, rpl-4_1_30, rpl-4_1_29, rpl-4_1_28, HEAD
Mise à jour de Blas.

    1: *> \brief \b DNRM2
    2: *
    3: *  =========== DOCUMENTATION ===========
    4: *
    5: * Online html documentation available at
    6: *            http://www.netlib.org/lapack/explore-html/
    7: *
    8: *  Definition:
    9: *  ===========
   10: *
   11: *       DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX)
   12: *
   13: *       .. Scalar Arguments ..
   14: *       INTEGER INCX,N
   15: *       ..
   16: *       .. Array Arguments ..
   17: *       DOUBLE PRECISION X(*)
   18: *       ..
   19: *
   20: *
   21: *> \par Purpose:
   22: *  =============
   23: *>
   24: *> \verbatim
   25: *>
   26: *> DNRM2 returns the euclidean norm of a vector via the function
   27: *> name, so that
   28: *>
   29: *>    DNRM2 := sqrt( x'*x )
   30: *> \endverbatim
   31: *
   32: *  Arguments:
   33: *  ==========
   34: *
   35: *> \param[in] N
   36: *> \verbatim
   37: *>          N is INTEGER
   38: *>         number of elements in input vector(s)
   39: *> \endverbatim
   40: *>
   41: *> \param[in] X
   42: *> \verbatim
   43: *>          X is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
   44: *> \endverbatim
   45: *>
   46: *> \param[in] INCX
   47: *> \verbatim
   48: *>          INCX is INTEGER
   49: *>         storage spacing between elements of DX
   50: *> \endverbatim
   51: *
   52: *  Authors:
   53: *  ========
   54: *
   55: *> \author Univ. of Tennessee
   56: *> \author Univ. of California Berkeley
   57: *> \author Univ. of Colorado Denver
   58: *> \author NAG Ltd.
   59: *
   60: *> \date November 2017
   61: *
   62: *> \ingroup double_blas_level1
   63: *
   64: *> \par Further Details:
   65: *  =====================
   66: *>
   67: *> \verbatim
   68: *>
   69: *>  -- This version written on 25-October-1982.
   70: *>     Modified on 14-October-1993 to inline the call to DLASSQ.
   71: *>     Sven Hammarling, Nag Ltd.
   72: *> \endverbatim
   73: *>
   74: *  =====================================================================
   75:       DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX)
   76: *
   77: *  -- Reference BLAS level1 routine (version 3.8.0) --
   78: *  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
   79: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
   80: *     November 2017
   81: *
   82: *     .. Scalar Arguments ..
   83:       INTEGER INCX,N
   84: *     ..
   85: *     .. Array Arguments ..
   86:       DOUBLE PRECISION X(*)
   87: *     ..
   88: *
   89: *  =====================================================================
   90: *
   91: *     .. Parameters ..
   92:       DOUBLE PRECISION ONE,ZERO
   93:       PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
   94: *     ..
   95: *     .. Local Scalars ..
   96:       DOUBLE PRECISION ABSXI,NORM,SCALE,SSQ
   97:       INTEGER IX
   98: *     ..
   99: *     .. Intrinsic Functions ..
  100:       INTRINSIC ABS,SQRT
  101: *     ..
  102:       IF (N.LT.1 .OR. INCX.LT.1) THEN
  103:           NORM = ZERO
  104:       ELSE IF (N.EQ.1) THEN
  105:           NORM = ABS(X(1))
  106:       ELSE
  107:           SCALE = ZERO
  108:           SSQ = ONE
  109: *        The following loop is equivalent to this call to the LAPACK
  110: *        auxiliary routine:
  111: *        CALL DLASSQ( N, X, INCX, SCALE, SSQ )
  112: *
  113:           DO 10 IX = 1,1 + (N-1)*INCX,INCX
  114:               IF (X(IX).NE.ZERO) THEN
  115:                   ABSXI = ABS(X(IX))
  116:                   IF (SCALE.LT.ABSXI) THEN
  117:                       SSQ = ONE + SSQ* (SCALE/ABSXI)**2
  118:                       SCALE = ABSXI
  119:                   ELSE
  120:                       SSQ = SSQ + (ABSXI/SCALE)**2
  121:                   END IF
  122:               END IF
  123:    10     CONTINUE
  124:           NORM = SCALE*SQRT(SSQ)
  125:       END IF
  126: *
  127:       DNRM2 = NORM
  128:       RETURN
  129: *
  130: *     End of DNRM2.
  131: *
  132:       END

CVSweb interface <joel.bertrand@systella.fr>