Home | History | Annotate | Download | only in f2c
      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 
    296