Austin Schuh | 189376f | 2018-12-20 22:11:15 +1100 | [diff] [blame] | 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 | |
| 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 | |