root / src / blas / drotmg.f @ 8
Historique | Voir | Annoter | Télécharger (4,77 ko)
1 | 1 | equemene | SUBROUTINE DROTMG(DD1,DD2,DX1,DY1,DPARAM) |
---|---|---|---|
2 | 1 | equemene | * .. Scalar Arguments .. |
3 | 1 | equemene | DOUBLE PRECISION DD1,DD2,DX1,DY1 |
4 | 1 | equemene | * .. |
5 | 1 | equemene | * .. Array Arguments .. |
6 | 1 | equemene | DOUBLE PRECISION DPARAM(5) |
7 | 1 | equemene | * .. |
8 | 1 | equemene | * |
9 | 1 | equemene | * Purpose |
10 | 1 | equemene | * ======= |
11 | 1 | equemene | * |
12 | 1 | equemene | * CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS |
13 | 1 | equemene | * THE SECOND COMPONENT OF THE 2-VECTOR (DSQRT(DD1)*DX1,DSQRT(DD2)* |
14 | 1 | equemene | * DY2)**T. |
15 | 1 | equemene | * WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS.. |
16 | 1 | equemene | * |
17 | 1 | equemene | * DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0 |
18 | 1 | equemene | * |
19 | 1 | equemene | * (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0) |
20 | 1 | equemene | * H=( ) ( ) ( ) ( ) |
21 | 1 | equemene | * (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0). |
22 | 1 | equemene | * LOCATIONS 2-4 OF DPARAM CONTAIN DH11, DH21, DH12, AND DH22 |
23 | 1 | equemene | * RESPECTIVELY. (VALUES OF 1.D0, -1.D0, OR 0.D0 IMPLIED BY THE |
24 | 1 | equemene | * VALUE OF DPARAM(1) ARE NOT STORED IN DPARAM.) |
25 | 1 | equemene | * |
26 | 1 | equemene | * THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE |
27 | 1 | equemene | * INEXACT. THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE |
28 | 1 | equemene | * OF DD1 AND DD2. ALL ACTUAL SCALING OF DATA IS DONE USING GAM. |
29 | 1 | equemene | * |
30 | 1 | equemene | * |
31 | 1 | equemene | * Arguments |
32 | 1 | equemene | * ========= |
33 | 1 | equemene | * |
34 | 1 | equemene | * DD1 (input/output) DOUBLE PRECISION |
35 | 1 | equemene | * |
36 | 1 | equemene | * DD2 (input/output) DOUBLE PRECISION |
37 | 1 | equemene | * |
38 | 1 | equemene | * DX1 (input/output) DOUBLE PRECISION |
39 | 1 | equemene | * |
40 | 1 | equemene | * DY1 (input) DOUBLE PRECISION |
41 | 1 | equemene | * |
42 | 1 | equemene | * DPARAM (input/output) DOUBLE PRECISION array, dimension 5 |
43 | 1 | equemene | * DPARAM(1)=DFLAG |
44 | 1 | equemene | * DPARAM(2)=DH11 |
45 | 1 | equemene | * DPARAM(3)=DH21 |
46 | 1 | equemene | * DPARAM(4)=DH12 |
47 | 1 | equemene | * DPARAM(5)=DH22 |
48 | 1 | equemene | * |
49 | 1 | equemene | * ===================================================================== |
50 | 1 | equemene | * |
51 | 1 | equemene | * .. Local Scalars .. |
52 | 1 | equemene | DOUBLE PRECISION DFLAG,DH11,DH12,DH21,DH22,DP1,DP2,DQ1,DQ2,DTEMP, |
53 | 1 | equemene | + DU,GAM,GAMSQ,ONE,RGAMSQ,TWO,ZERO |
54 | 1 | equemene | INTEGER IGO |
55 | 1 | equemene | * .. |
56 | 1 | equemene | * .. Intrinsic Functions .. |
57 | 1 | equemene | INTRINSIC DABS |
58 | 1 | equemene | * .. |
59 | 1 | equemene | * .. Data statements .. |
60 | 1 | equemene | * |
61 | 1 | equemene | DATA ZERO,ONE,TWO/0.D0,1.D0,2.D0/ |
62 | 1 | equemene | DATA GAM,GAMSQ,RGAMSQ/4096.D0,16777216.D0,5.9604645D-8/ |
63 | 1 | equemene | * .. |
64 | 1 | equemene | |
65 | 1 | equemene | IF (.NOT.DD1.LT.ZERO) GO TO 10 |
66 | 1 | equemene | * GO ZERO-H-D-AND-DX1.. |
67 | 1 | equemene | GO TO 60 |
68 | 1 | equemene | 10 CONTINUE |
69 | 1 | equemene | * CASE-DD1-NONNEGATIVE |
70 | 1 | equemene | DP2 = DD2*DY1 |
71 | 1 | equemene | IF (.NOT.DP2.EQ.ZERO) GO TO 20 |
72 | 1 | equemene | DFLAG = -TWO |
73 | 1 | equemene | GO TO 260 |
74 | 1 | equemene | * REGULAR-CASE.. |
75 | 1 | equemene | 20 CONTINUE |
76 | 1 | equemene | DP1 = DD1*DX1 |
77 | 1 | equemene | DQ2 = DP2*DY1 |
78 | 1 | equemene | DQ1 = DP1*DX1 |
79 | 1 | equemene | * |
80 | 1 | equemene | IF (.NOT.DABS(DQ1).GT.DABS(DQ2)) GO TO 40 |
81 | 1 | equemene | DH21 = -DY1/DX1 |
82 | 1 | equemene | DH12 = DP2/DP1 |
83 | 1 | equemene | * |
84 | 1 | equemene | DU = ONE - DH12*DH21 |
85 | 1 | equemene | * |
86 | 1 | equemene | IF (.NOT.DU.LE.ZERO) GO TO 30 |
87 | 1 | equemene | * GO ZERO-H-D-AND-DX1.. |
88 | 1 | equemene | GO TO 60 |
89 | 1 | equemene | 30 CONTINUE |
90 | 1 | equemene | DFLAG = ZERO |
91 | 1 | equemene | DD1 = DD1/DU |
92 | 1 | equemene | DD2 = DD2/DU |
93 | 1 | equemene | DX1 = DX1*DU |
94 | 1 | equemene | * GO SCALE-CHECK.. |
95 | 1 | equemene | GO TO 100 |
96 | 1 | equemene | 40 CONTINUE |
97 | 1 | equemene | IF (.NOT.DQ2.LT.ZERO) GO TO 50 |
98 | 1 | equemene | * GO ZERO-H-D-AND-DX1.. |
99 | 1 | equemene | GO TO 60 |
100 | 1 | equemene | 50 CONTINUE |
101 | 1 | equemene | DFLAG = ONE |
102 | 1 | equemene | DH11 = DP1/DP2 |
103 | 1 | equemene | DH22 = DX1/DY1 |
104 | 1 | equemene | DU = ONE + DH11*DH22 |
105 | 1 | equemene | DTEMP = DD2/DU |
106 | 1 | equemene | DD2 = DD1/DU |
107 | 1 | equemene | DD1 = DTEMP |
108 | 1 | equemene | DX1 = DY1*DU |
109 | 1 | equemene | * GO SCALE-CHECK |
110 | 1 | equemene | GO TO 100 |
111 | 1 | equemene | * PROCEDURE..ZERO-H-D-AND-DX1.. |
112 | 1 | equemene | 60 CONTINUE |
113 | 1 | equemene | DFLAG = -ONE |
114 | 1 | equemene | DH11 = ZERO |
115 | 1 | equemene | DH12 = ZERO |
116 | 1 | equemene | DH21 = ZERO |
117 | 1 | equemene | DH22 = ZERO |
118 | 1 | equemene | * |
119 | 1 | equemene | DD1 = ZERO |
120 | 1 | equemene | DD2 = ZERO |
121 | 1 | equemene | DX1 = ZERO |
122 | 1 | equemene | * RETURN.. |
123 | 1 | equemene | GO TO 220 |
124 | 1 | equemene | * PROCEDURE..FIX-H.. |
125 | 1 | equemene | 70 CONTINUE |
126 | 1 | equemene | IF (.NOT.DFLAG.GE.ZERO) GO TO 90 |
127 | 1 | equemene | * |
128 | 1 | equemene | IF (.NOT.DFLAG.EQ.ZERO) GO TO 80 |
129 | 1 | equemene | DH11 = ONE |
130 | 1 | equemene | DH22 = ONE |
131 | 1 | equemene | DFLAG = -ONE |
132 | 1 | equemene | GO TO 90 |
133 | 1 | equemene | 80 CONTINUE |
134 | 1 | equemene | DH21 = -ONE |
135 | 1 | equemene | DH12 = ONE |
136 | 1 | equemene | DFLAG = -ONE |
137 | 1 | equemene | 90 CONTINUE |
138 | 1 | equemene | GO TO IGO(120,150,180,210) |
139 | 1 | equemene | * PROCEDURE..SCALE-CHECK |
140 | 1 | equemene | 100 CONTINUE |
141 | 1 | equemene | 110 CONTINUE |
142 | 1 | equemene | IF (.NOT.DD1.LE.RGAMSQ) GO TO 130 |
143 | 1 | equemene | IF (DD1.EQ.ZERO) GO TO 160 |
144 | 1 | equemene | ASSIGN 120 TO IGO |
145 | 1 | equemene | * FIX-H.. |
146 | 1 | equemene | GO TO 70 |
147 | 1 | equemene | 120 CONTINUE |
148 | 1 | equemene | DD1 = DD1*GAM**2 |
149 | 1 | equemene | DX1 = DX1/GAM |
150 | 1 | equemene | DH11 = DH11/GAM |
151 | 1 | equemene | DH12 = DH12/GAM |
152 | 1 | equemene | GO TO 110 |
153 | 1 | equemene | 130 CONTINUE |
154 | 1 | equemene | 140 CONTINUE |
155 | 1 | equemene | IF (.NOT.DD1.GE.GAMSQ) GO TO 160 |
156 | 1 | equemene | ASSIGN 150 TO IGO |
157 | 1 | equemene | * FIX-H.. |
158 | 1 | equemene | GO TO 70 |
159 | 1 | equemene | 150 CONTINUE |
160 | 1 | equemene | DD1 = DD1/GAM**2 |
161 | 1 | equemene | DX1 = DX1*GAM |
162 | 1 | equemene | DH11 = DH11*GAM |
163 | 1 | equemene | DH12 = DH12*GAM |
164 | 1 | equemene | GO TO 140 |
165 | 1 | equemene | 160 CONTINUE |
166 | 1 | equemene | 170 CONTINUE |
167 | 1 | equemene | IF (.NOT.DABS(DD2).LE.RGAMSQ) GO TO 190 |
168 | 1 | equemene | IF (DD2.EQ.ZERO) GO TO 220 |
169 | 1 | equemene | ASSIGN 180 TO IGO |
170 | 1 | equemene | * FIX-H.. |
171 | 1 | equemene | GO TO 70 |
172 | 1 | equemene | 180 CONTINUE |
173 | 1 | equemene | DD2 = DD2*GAM**2 |
174 | 1 | equemene | DH21 = DH21/GAM |
175 | 1 | equemene | DH22 = DH22/GAM |
176 | 1 | equemene | GO TO 170 |
177 | 1 | equemene | 190 CONTINUE |
178 | 1 | equemene | 200 CONTINUE |
179 | 1 | equemene | IF (.NOT.DABS(DD2).GE.GAMSQ) GO TO 220 |
180 | 1 | equemene | ASSIGN 210 TO IGO |
181 | 1 | equemene | * FIX-H.. |
182 | 1 | equemene | GO TO 70 |
183 | 1 | equemene | 210 CONTINUE |
184 | 1 | equemene | DD2 = DD2/GAM**2 |
185 | 1 | equemene | DH21 = DH21*GAM |
186 | 1 | equemene | DH22 = DH22*GAM |
187 | 1 | equemene | GO TO 200 |
188 | 1 | equemene | 220 CONTINUE |
189 | 1 | equemene | IF (DFLAG) 250,230,240 |
190 | 1 | equemene | 230 CONTINUE |
191 | 1 | equemene | DPARAM(3) = DH21 |
192 | 1 | equemene | DPARAM(4) = DH12 |
193 | 1 | equemene | GO TO 260 |
194 | 1 | equemene | 240 CONTINUE |
195 | 1 | equemene | DPARAM(2) = DH11 |
196 | 1 | equemene | DPARAM(5) = DH22 |
197 | 1 | equemene | GO TO 260 |
198 | 1 | equemene | 250 CONTINUE |
199 | 1 | equemene | DPARAM(2) = DH11 |
200 | 1 | equemene | DPARAM(3) = DH21 |
201 | 1 | equemene | DPARAM(4) = DH12 |
202 | 1 | equemene | DPARAM(5) = DH22 |
203 | 1 | equemene | 260 CONTINUE |
204 | 1 | equemene | DPARAM(1) = DFLAG |
205 | 1 | equemene | RETURN |
206 | 1 | equemene | END |