Statistiques
| Révision :

root / src / blas / srotm.f @ 10

Historique | Voir | Annoter | Télécharger (3,63 ko)

1 1 pfleura2
      SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM)
2 1 pfleura2
*     .. Scalar Arguments ..
3 1 pfleura2
      INTEGER INCX,INCY,N
4 1 pfleura2
*     ..
5 1 pfleura2
*     .. Array Arguments ..
6 1 pfleura2
      REAL SPARAM(5),SX(1),SY(1)
7 1 pfleura2
*     ..
8 1 pfleura2
*
9 1 pfleura2
*  Purpose
10 1 pfleura2
*  =======
11 1 pfleura2
*
12 1 pfleura2
*     APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX
13 1 pfleura2
*
14 1 pfleura2
*     (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN
15 1 pfleura2
*     (DX**T)
16 1 pfleura2
*
17 1 pfleura2
*     SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE
18 1 pfleura2
*     LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY.
19 1 pfleura2
*     WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS..
20 1 pfleura2
*
21 1 pfleura2
*     SFLAG=-1.E0     SFLAG=0.E0        SFLAG=1.E0     SFLAG=-2.E0
22 1 pfleura2
*
23 1 pfleura2
*       (SH11  SH12)    (1.E0  SH12)    (SH11  1.E0)    (1.E0  0.E0)
24 1 pfleura2
*     H=(          )    (          )    (          )    (          )
25 1 pfleura2
*       (SH21  SH22),   (SH21  1.E0),   (-1.E0 SH22),   (0.E0  1.E0).
26 1 pfleura2
*     SEE  SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM.
27 1 pfleura2
*
28 1 pfleura2
*
29 1 pfleura2
*  Arguments
30 1 pfleura2
*  =========
31 1 pfleura2
*
32 1 pfleura2
*  N      (input) INTEGER
33 1 pfleura2
*         number of elements in input vector(s)
34 1 pfleura2
*
35 1 pfleura2
*  SX     (input/output) REAL array, dimension N
36 1 pfleura2
*         double precision vector with 5 elements
37 1 pfleura2
*
38 1 pfleura2
*  INCX   (input) INTEGER
39 1 pfleura2
*         storage spacing between elements of SX
40 1 pfleura2
*
41 1 pfleura2
*  SY     (input/output) REAL array, dimension N
42 1 pfleura2
*         double precision vector with N elements
43 1 pfleura2
*
44 1 pfleura2
*  INCY   (input) INTEGER
45 1 pfleura2
*         storage spacing between elements of SY
46 1 pfleura2
*
47 1 pfleura2
*  SPARAM (input/output)  REAL array, dimension 5
48 1 pfleura2
*     SPARAM(1)=SFLAG
49 1 pfleura2
*     SPARAM(2)=SH11
50 1 pfleura2
*     SPARAM(3)=SH21
51 1 pfleura2
*     SPARAM(4)=SH12
52 1 pfleura2
*     SPARAM(5)=SH22
53 1 pfleura2
*
54 1 pfleura2
*  =====================================================================
55 1 pfleura2
*
56 1 pfleura2
*     .. Local Scalars ..
57 1 pfleura2
      REAL SFLAG,SH11,SH12,SH21,SH22,TWO,W,Z,ZERO
58 1 pfleura2
      INTEGER I,KX,KY,NSTEPS
59 1 pfleura2
*     ..
60 1 pfleura2
*     .. Data statements ..
61 1 pfleura2
      DATA ZERO,TWO/0.E0,2.E0/
62 1 pfleura2
*     ..
63 1 pfleura2
*
64 1 pfleura2
      SFLAG = SPARAM(1)
65 1 pfleura2
      IF (N.LE.0 .OR. (SFLAG+TWO.EQ.ZERO)) GO TO 140
66 1 pfleura2
      IF (.NOT. (INCX.EQ.INCY.AND.INCX.GT.0)) GO TO 70
67 1 pfleura2
*
68 1 pfleura2
      NSTEPS = N*INCX
69 1 pfleura2
      IF (SFLAG) 50,10,30
70 1 pfleura2
   10 CONTINUE
71 1 pfleura2
      SH12 = SPARAM(4)
72 1 pfleura2
      SH21 = SPARAM(3)
73 1 pfleura2
      DO 20 I = 1,NSTEPS,INCX
74 1 pfleura2
          W = SX(I)
75 1 pfleura2
          Z = SY(I)
76 1 pfleura2
          SX(I) = W + Z*SH12
77 1 pfleura2
          SY(I) = W*SH21 + Z
78 1 pfleura2
   20 CONTINUE
79 1 pfleura2
      GO TO 140
80 1 pfleura2
   30 CONTINUE
81 1 pfleura2
      SH11 = SPARAM(2)
82 1 pfleura2
      SH22 = SPARAM(5)
83 1 pfleura2
      DO 40 I = 1,NSTEPS,INCX
84 1 pfleura2
          W = SX(I)
85 1 pfleura2
          Z = SY(I)
86 1 pfleura2
          SX(I) = W*SH11 + Z
87 1 pfleura2
          SY(I) = -W + SH22*Z
88 1 pfleura2
   40 CONTINUE
89 1 pfleura2
      GO TO 140
90 1 pfleura2
   50 CONTINUE
91 1 pfleura2
      SH11 = SPARAM(2)
92 1 pfleura2
      SH12 = SPARAM(4)
93 1 pfleura2
      SH21 = SPARAM(3)
94 1 pfleura2
      SH22 = SPARAM(5)
95 1 pfleura2
      DO 60 I = 1,NSTEPS,INCX
96 1 pfleura2
          W = SX(I)
97 1 pfleura2
          Z = SY(I)
98 1 pfleura2
          SX(I) = W*SH11 + Z*SH12
99 1 pfleura2
          SY(I) = W*SH21 + Z*SH22
100 1 pfleura2
   60 CONTINUE
101 1 pfleura2
      GO TO 140
102 1 pfleura2
   70 CONTINUE
103 1 pfleura2
      KX = 1
104 1 pfleura2
      KY = 1
105 1 pfleura2
      IF (INCX.LT.0) KX = 1 + (1-N)*INCX
106 1 pfleura2
      IF (INCY.LT.0) KY = 1 + (1-N)*INCY
107 1 pfleura2
*
108 1 pfleura2
      IF (SFLAG) 120,80,100
109 1 pfleura2
   80 CONTINUE
110 1 pfleura2
      SH12 = SPARAM(4)
111 1 pfleura2
      SH21 = SPARAM(3)
112 1 pfleura2
      DO 90 I = 1,N
113 1 pfleura2
          W = SX(KX)
114 1 pfleura2
          Z = SY(KY)
115 1 pfleura2
          SX(KX) = W + Z*SH12
116 1 pfleura2
          SY(KY) = W*SH21 + Z
117 1 pfleura2
          KX = KX + INCX
118 1 pfleura2
          KY = KY + INCY
119 1 pfleura2
   90 CONTINUE
120 1 pfleura2
      GO TO 140
121 1 pfleura2
  100 CONTINUE
122 1 pfleura2
      SH11 = SPARAM(2)
123 1 pfleura2
      SH22 = SPARAM(5)
124 1 pfleura2
      DO 110 I = 1,N
125 1 pfleura2
          W = SX(KX)
126 1 pfleura2
          Z = SY(KY)
127 1 pfleura2
          SX(KX) = W*SH11 + Z
128 1 pfleura2
          SY(KY) = -W + SH22*Z
129 1 pfleura2
          KX = KX + INCX
130 1 pfleura2
          KY = KY + INCY
131 1 pfleura2
  110 CONTINUE
132 1 pfleura2
      GO TO 140
133 1 pfleura2
  120 CONTINUE
134 1 pfleura2
      SH11 = SPARAM(2)
135 1 pfleura2
      SH12 = SPARAM(4)
136 1 pfleura2
      SH21 = SPARAM(3)
137 1 pfleura2
      SH22 = SPARAM(5)
138 1 pfleura2
      DO 130 I = 1,N
139 1 pfleura2
          W = SX(KX)
140 1 pfleura2
          Z = SY(KY)
141 1 pfleura2
          SX(KX) = W*SH11 + Z*SH12
142 1 pfleura2
          SY(KY) = W*SH21 + Z*SH22
143 1 pfleura2
          KX = KX + INCX
144 1 pfleura2
          KY = KY + INCY
145 1 pfleura2
  130 CONTINUE
146 1 pfleura2
  140 CONTINUE
147 1 pfleura2
      RETURN
148 1 pfleura2
      END