Statistiques
| Révision :

root / src / blas / scnrm2.f @ 2

Historique | Voir | Annoter | Télécharger (1,78 ko)

1 1 equemene
      REAL FUNCTION SCNRM2(N,X,INCX)
2 1 equemene
*     .. Scalar Arguments ..
3 1 equemene
      INTEGER INCX,N
4 1 equemene
*     ..
5 1 equemene
*     .. Array Arguments ..
6 1 equemene
      COMPLEX X(*)
7 1 equemene
*     ..
8 1 equemene
*
9 1 equemene
*  Purpose
10 1 equemene
*  =======
11 1 equemene
*
12 1 equemene
*  SCNRM2 returns the euclidean norm of a vector via the function
13 1 equemene
*  name, so that
14 1 equemene
*
15 1 equemene
*     SCNRM2 := sqrt( conjg( x' )*x )
16 1 equemene
*
17 1 equemene
*
18 1 equemene
*
19 1 equemene
*  -- This version written on 25-October-1982.
20 1 equemene
*     Modified on 14-October-1993 to inline the call to CLASSQ.
21 1 equemene
*     Sven Hammarling, Nag Ltd.
22 1 equemene
*
23 1 equemene
*
24 1 equemene
*     .. Parameters ..
25 1 equemene
      REAL ONE,ZERO
26 1 equemene
      PARAMETER (ONE=1.0E+0,ZERO=0.0E+0)
27 1 equemene
*     ..
28 1 equemene
*     .. Local Scalars ..
29 1 equemene
      REAL NORM,SCALE,SSQ,TEMP
30 1 equemene
      INTEGER IX
31 1 equemene
*     ..
32 1 equemene
*     .. Intrinsic Functions ..
33 1 equemene
      INTRINSIC ABS,AIMAG,REAL,SQRT
34 1 equemene
*     ..
35 1 equemene
      IF (N.LT.1 .OR. INCX.LT.1) THEN
36 1 equemene
          NORM = ZERO
37 1 equemene
      ELSE
38 1 equemene
          SCALE = ZERO
39 1 equemene
          SSQ = ONE
40 1 equemene
*        The following loop is equivalent to this call to the LAPACK
41 1 equemene
*        auxiliary routine:
42 1 equemene
*        CALL CLASSQ( N, X, INCX, SCALE, SSQ )
43 1 equemene
*
44 1 equemene
          DO 10 IX = 1,1 + (N-1)*INCX,INCX
45 1 equemene
              IF (REAL(X(IX)).NE.ZERO) THEN
46 1 equemene
                  TEMP = ABS(REAL(X(IX)))
47 1 equemene
                  IF (SCALE.LT.TEMP) THEN
48 1 equemene
                      SSQ = ONE + SSQ* (SCALE/TEMP)**2
49 1 equemene
                      SCALE = TEMP
50 1 equemene
                  ELSE
51 1 equemene
                      SSQ = SSQ + (TEMP/SCALE)**2
52 1 equemene
                  END IF
53 1 equemene
              END IF
54 1 equemene
              IF (AIMAG(X(IX)).NE.ZERO) THEN
55 1 equemene
                  TEMP = ABS(AIMAG(X(IX)))
56 1 equemene
                  IF (SCALE.LT.TEMP) THEN
57 1 equemene
                      SSQ = ONE + SSQ* (SCALE/TEMP)**2
58 1 equemene
                      SCALE = TEMP
59 1 equemene
                  ELSE
60 1 equemene
                      SSQ = SSQ + (TEMP/SCALE)**2
61 1 equemene
                  END IF
62 1 equemene
              END IF
63 1 equemene
   10     CONTINUE
64 1 equemene
          NORM = SCALE*SQRT(SSQ)
65 1 equemene
      END IF
66 1 equemene
*
67 1 equemene
      SCNRM2 = NORM
68 1 equemene
      RETURN
69 1 equemene
*
70 1 equemene
*     End of SCNRM2.
71 1 equemene
*
72 1 equemene
      END