# dnrm2.f

          DOUBLE PRECISION FUNCTION DNRM2 (N, DX, INCX)
    C***BEGIN PROLOGUE  DNRM2
    C***PURPOSE  Compute the Euclidean length (L2 norm) of a vector.
    C***LIBRARY   SLATEC (BLAS)
    C***CATEGORY  D1A3B
    C***TYPE      DOUBLE PRECISION (SNRM2-S, DNRM2-D, SCNRM2-C)
    C***KEYWORDS  BLAS, EUCLIDEAN LENGTH, EUCLIDEAN NORM, L2,
    C             LINEAR ALGEBRA, UNITARY, VECTOR
    C***AUTHOR  Lawson, C. L., (JPL)
    C           Hanson, R. J., (SNLA)
    C           Kincaid, D. R., (U. of Texas)
    C           Krogh, F. T., (JPL)
    C***DESCRIPTION
    C
    C                B L A S  Subprogram
    C    Description of parameters
    C
    C     --Input--
    C        N  number of elements in input vector(s)
    C       DX  double precision vector with N elements
    C     INCX  storage spacing between elements of DX
    C
    C     --Output--
    C    DNRM2  double precision result (zero if N .LE. 0)
    C
    C     Euclidean norm of the N-vector stored in DX with storage
    C     increment INCX.
    C     If N .LE. 0, return with result = 0.
    C     If N .GE. 1, then INCX must be .GE. 1
    C
    C     Four phase method using two built-in constants that are
    C     hopefully applicable to all machines.
    C         CUTLO = maximum of  SQRT(U/EPS)  over all known machines.
    C         CUTHI = minimum of  SQRT(V)      over all known machines.
    C     where
    C         EPS = smallest no. such that EPS + 1. .GT. 1.
    C         U   = smallest positive no.   (underflow limit)
    C         V   = largest  no.            (overflow  limit)
    C
    C     Brief outline of algorithm.
    C
    C     Phase 1 scans zero components.
    C     move to phase 2 when a component is nonzero and .LE. CUTLO
    C     move to phase 3 when a component is .GT. CUTLO
    C     move to phase 4 when a component is .GE. CUTHI/M
    C     where M = N for X() real and M = 2*N for complex.
    C
    C     Values for CUTLO and CUTHI.
    C     From the environmental parameters listed in the IMSL converter
    C     document the limiting values are as follows:
    C     CUTLO, S.P.   U/EPS = 2**(-102) for  Honeywell.  Close seconds are
    C                   Univac and DEC at 2**(-103)
    C                   Thus CUTLO = 2**(-51) = 4.44089E-16
    C     CUTHI, S.P.   V = 2**127 for Univac, Honeywell, and DEC.
    C                   Thus CUTHI = 2**(63.5) = 1.30438E19
    C     CUTLO, D.P.   U/EPS = 2**(-67) for Honeywell and DEC.
    C                   Thus CUTLO = 2**(-33.5) = 8.23181D-11
    C     CUTHI, D.P.   same as S.P.  CUTHI = 1.30438D19
    C     DATA CUTLO, CUTHI /8.232D-11,  1.304D19/
    C     DATA CUTLO, CUTHI /4.441E-16,  1.304E19/
    C
    C***REFERENCES  C. L. Lawson, R. J. Hanson, D. R. Kincaid and F. T.
    C                 Krogh, Basic linear algebra subprograms for Fortran
    C                 usage, Algorithm No. 539, Transactions on Mathematical
    C                 Software 5, 3 (September 1979), pp. 308-323.
    C***ROUTINES CALLED  (NONE)
    C***REVISION HISTORY  (YYMMDD)
    C   791001  DATE WRITTEN
    C   890531  Changed all specific intrinsics to generic.  (WRB)
    C   890831  Modified array declarations.  (WRB)
    C   890831  REVISION DATE from Version 3.2
    C   891214  Prologue converted to Version 4.0 format.  (BAB)
    C   920501  Reformatted the REFERENCES section.  (WRB)
    C***END PROLOGUE  DNRM2