Go to the documentation of this file.00001 DOUBLE PRECISION FUNCTION DZNRM2(N,X,INCX)
00002
00003 INTEGER INCX,N
00004
00005
00006 DOUBLE COMPLEX X(*)
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 DOUBLE PRECISION ONE,ZERO
00028 PARAMETER (ONE=1.0D+0,ZERO=0.0D+0)
00029
00030
00031 DOUBLE PRECISION NORM,SCALE,SSQ,TEMP
00032 INTEGER IX
00033
00034
00035 INTRINSIC ABS,DBLE,DIMAG,SQRT
00036
00037 IF (N.LT.1 .OR. INCX.LT.1) THEN
00038 NORM = ZERO
00039 ELSE
00040 SCALE = ZERO
00041 SSQ = ONE
00042
00043
00044
00045
00046 DO 10 IX = 1,1 + (N-1)*INCX,INCX
00047 IF (DBLE(X(IX)).NE.ZERO) THEN
00048 TEMP = ABS(DBLE(X(IX)))
00049 IF (SCALE.LT.TEMP) THEN
00050 SSQ = ONE + SSQ* (SCALE/TEMP)**2
00051 SCALE = TEMP
00052 ELSE
00053 SSQ = SSQ + (TEMP/SCALE)**2
00054 END IF
00055 END IF
00056 IF (DIMAG(X(IX)).NE.ZERO) THEN
00057 TEMP = ABS(DIMAG(X(IX)))
00058 IF (SCALE.LT.TEMP) THEN
00059 SSQ = ONE + SSQ* (SCALE/TEMP)**2
00060 SCALE = TEMP
00061 ELSE
00062 SSQ = SSQ + (TEMP/SCALE)**2
00063 END IF
00064 END IF
00065 10 CONTINUE
00066 NORM = SCALE*SQRT(SSQ)
00067 END IF
00068
00069 DZNRM2 = NORM
00070 RETURN
00071
00072
00073
00074 END