• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* srotmg.f -- translated by f2c (version 20100827).
2    You must link the resulting object file with libf2c:
3 	on Microsoft Windows system, link with libf2c.lib;
4 	on Linux or Unix systems, link with .../path/to/libf2c.a -lm
5 	or, if you install libf2c.a in a standard place, with -lf2c -lm
6 	-- in that order, at the end of the command line, as in
7 		cc *.o -lf2c -lm
8 	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
9 
10 		http://www.netlib.org/f2c/libf2c.zip
11 */
12 
13 #include "datatypes.h"
14 
srotmg_(real * sd1,real * sd2,real * sx1,real * sy1,real * sparam)15 /* Subroutine */ int srotmg_(real *sd1, real *sd2, real *sx1, real *sy1, real
16 	*sparam)
17 {
18     /* Initialized data */
19 
20     static real zero = 0.f;
21     static real one = 1.f;
22     static real two = 2.f;
23     static real gam = 4096.f;
24     static real gamsq = 16777200.f;
25     static real rgamsq = 5.96046e-8f;
26 
27     /* Format strings */
28     static char fmt_120[] = "";
29     static char fmt_150[] = "";
30     static char fmt_180[] = "";
31     static char fmt_210[] = "";
32 
33     /* System generated locals */
34     real r__1;
35 
36     /* Local variables */
37     real su, sp1, sp2, sq1, sq2, sh11, sh12, sh21, sh22;
38     integer igo;
39     real sflag, stemp;
40 
41     /* Assigned format variables */
42     static char *igo_fmt;
43 
44 /*     .. Scalar Arguments .. */
45 /*     .. */
46 /*     .. Array Arguments .. */
47 /*     .. */
48 
49 /*  Purpose */
50 /*  ======= */
51 
52 /*     CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS */
53 /*     THE SECOND COMPONENT OF THE 2-VECTOR  (SQRT(SD1)*SX1,SQRT(SD2)* */
54 /*     SY2)**T. */
55 /*     WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS.. */
56 
57 /*     SFLAG=-1.E0     SFLAG=0.E0        SFLAG=1.E0     SFLAG=-2.E0 */
58 
59 /*       (SH11  SH12)    (1.E0  SH12)    (SH11  1.E0)    (1.E0  0.E0) */
60 /*     H=(          )    (          )    (          )    (          ) */
61 /*       (SH21  SH22),   (SH21  1.E0),   (-1.E0 SH22),   (0.E0  1.E0). */
62 /*     LOCATIONS 2-4 OF SPARAM CONTAIN SH11,SH21,SH12, AND SH22 */
63 /*     RESPECTIVELY. (VALUES OF 1.E0, -1.E0, OR 0.E0 IMPLIED BY THE */
64 /*     VALUE OF SPARAM(1) ARE NOT STORED IN SPARAM.) */
65 
66 /*     THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE */
67 /*     INEXACT.  THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE */
68 /*     OF SD1 AND SD2.  ALL ACTUAL SCALING OF DATA IS DONE USING GAM. */
69 
70 
71 /*  Arguments */
72 /*  ========= */
73 
74 
75 /*  SD1    (input/output) REAL */
76 
77 /*  SD2    (input/output) REAL */
78 
79 /*  SX1    (input/output) REAL */
80 
81 /*  SY1    (input) REAL */
82 
83 
84 /*  SPARAM (input/output)  REAL array, dimension 5 */
85 /*     SPARAM(1)=SFLAG */
86 /*     SPARAM(2)=SH11 */
87 /*     SPARAM(3)=SH21 */
88 /*     SPARAM(4)=SH12 */
89 /*     SPARAM(5)=SH22 */
90 
91 /*  ===================================================================== */
92 
93 /*     .. Local Scalars .. */
94 /*     .. */
95 /*     .. Intrinsic Functions .. */
96 /*     .. */
97 /*     .. Data statements .. */
98 
99     /* Parameter adjustments */
100     --sparam;
101 
102     /* Function Body */
103 /*     .. */
104     if (! (*sd1 < zero)) {
105 	goto L10;
106     }
107 /*       GO ZERO-H-D-AND-SX1.. */
108     goto L60;
109 L10:
110 /*     CASE-SD1-NONNEGATIVE */
111     sp2 = *sd2 * *sy1;
112     if (! (sp2 == zero)) {
113 	goto L20;
114     }
115     sflag = -two;
116     goto L260;
117 /*     REGULAR-CASE.. */
118 L20:
119     sp1 = *sd1 * *sx1;
120     sq2 = sp2 * *sy1;
121     sq1 = sp1 * *sx1;
122 
123     if (! (dabs(sq1) > dabs(sq2))) {
124 	goto L40;
125     }
126     sh21 = -(*sy1) / *sx1;
127     sh12 = sp2 / sp1;
128 
129     su = one - sh12 * sh21;
130 
131     if (! (su <= zero)) {
132 	goto L30;
133     }
134 /*         GO ZERO-H-D-AND-SX1.. */
135     goto L60;
136 L30:
137     sflag = zero;
138     *sd1 /= su;
139     *sd2 /= su;
140     *sx1 *= su;
141 /*         GO SCALE-CHECK.. */
142     goto L100;
143 L40:
144     if (! (sq2 < zero)) {
145 	goto L50;
146     }
147 /*         GO ZERO-H-D-AND-SX1.. */
148     goto L60;
149 L50:
150     sflag = one;
151     sh11 = sp1 / sp2;
152     sh22 = *sx1 / *sy1;
153     su = one + sh11 * sh22;
154     stemp = *sd2 / su;
155     *sd2 = *sd1 / su;
156     *sd1 = stemp;
157     *sx1 = *sy1 * su;
158 /*         GO SCALE-CHECK */
159     goto L100;
160 /*     PROCEDURE..ZERO-H-D-AND-SX1.. */
161 L60:
162     sflag = -one;
163     sh11 = zero;
164     sh12 = zero;
165     sh21 = zero;
166     sh22 = zero;
167 
168     *sd1 = zero;
169     *sd2 = zero;
170     *sx1 = zero;
171 /*         RETURN.. */
172     goto L220;
173 /*     PROCEDURE..FIX-H.. */
174 L70:
175     if (! (sflag >= zero)) {
176 	goto L90;
177     }
178 
179     if (! (sflag == zero)) {
180 	goto L80;
181     }
182     sh11 = one;
183     sh22 = one;
184     sflag = -one;
185     goto L90;
186 L80:
187     sh21 = -one;
188     sh12 = one;
189     sflag = -one;
190 L90:
191     switch (igo) {
192 	case 0: goto L120;
193 	case 1: goto L150;
194 	case 2: goto L180;
195 	case 3: goto L210;
196     }
197 /*     PROCEDURE..SCALE-CHECK */
198 L100:
199 L110:
200     if (! (*sd1 <= rgamsq)) {
201 	goto L130;
202     }
203     if (*sd1 == zero) {
204 	goto L160;
205     }
206     igo = 0;
207     igo_fmt = fmt_120;
208 /*              FIX-H.. */
209     goto L70;
210 L120:
211 /* Computing 2nd power */
212     r__1 = gam;
213     *sd1 *= r__1 * r__1;
214     *sx1 /= gam;
215     sh11 /= gam;
216     sh12 /= gam;
217     goto L110;
218 L130:
219 L140:
220     if (! (*sd1 >= gamsq)) {
221 	goto L160;
222     }
223     igo = 1;
224     igo_fmt = fmt_150;
225 /*              FIX-H.. */
226     goto L70;
227 L150:
228 /* Computing 2nd power */
229     r__1 = gam;
230     *sd1 /= r__1 * r__1;
231     *sx1 *= gam;
232     sh11 *= gam;
233     sh12 *= gam;
234     goto L140;
235 L160:
236 L170:
237     if (! (dabs(*sd2) <= rgamsq)) {
238 	goto L190;
239     }
240     if (*sd2 == zero) {
241 	goto L220;
242     }
243     igo = 2;
244     igo_fmt = fmt_180;
245 /*              FIX-H.. */
246     goto L70;
247 L180:
248 /* Computing 2nd power */
249     r__1 = gam;
250     *sd2 *= r__1 * r__1;
251     sh21 /= gam;
252     sh22 /= gam;
253     goto L170;
254 L190:
255 L200:
256     if (! (dabs(*sd2) >= gamsq)) {
257 	goto L220;
258     }
259     igo = 3;
260     igo_fmt = fmt_210;
261 /*              FIX-H.. */
262     goto L70;
263 L210:
264 /* Computing 2nd power */
265     r__1 = gam;
266     *sd2 /= r__1 * r__1;
267     sh21 *= gam;
268     sh22 *= gam;
269     goto L200;
270 L220:
271     if (sflag < 0.f) {
272 	goto L250;
273     } else if (sflag == 0) {
274 	goto L230;
275     } else {
276 	goto L240;
277     }
278 L230:
279     sparam[3] = sh21;
280     sparam[4] = sh12;
281     goto L260;
282 L240:
283     sparam[2] = sh11;
284     sparam[5] = sh22;
285     goto L260;
286 L250:
287     sparam[2] = sh11;
288     sparam[3] = sh21;
289     sparam[4] = sh12;
290     sparam[5] = sh22;
291 L260:
292     sparam[1] = sflag;
293     return 0;
294 } /* srotmg_ */
295 
296