root / src / blas / srotm.f @ 5
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 |