Home | History | Annotate | Download | only in f2c
      1 /* drotmg.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 drotmg_(doublereal *dd1, doublereal *dd2, doublereal *
     16 	dx1, doublereal *dy1, doublereal *dparam)
     17 {
     18     /* Initialized data */
     19 
     20     static doublereal zero = 0.;
     21     static doublereal one = 1.;
     22     static doublereal two = 2.;
     23     static doublereal gam = 4096.;
     24     static doublereal gamsq = 16777216.;
     25     static doublereal rgamsq = 5.9604645e-8;
     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     doublereal d__1;
     35 
     36     /* Local variables */
     37     doublereal du, dp1, dp2, dq1, dq2, dh11, dh12, dh21, dh22;
     38     integer igo;
     39     doublereal dflag, dtemp;
     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  (DSQRT(DD1)*DX1,DSQRT(DD2)* */
     54 /*     DY2)**T. */
     55 /*     WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS.. */
     56 
     57 /*     DFLAG=-1.D0     DFLAG=0.D0        DFLAG=1.D0     DFLAG=-2.D0 */
     58 
     59 /*       (DH11  DH12)    (1.D0  DH12)    (DH11  1.D0)    (1.D0  0.D0) */
     60 /*     H=(          )    (          )    (          )    (          ) */
     61 /*       (DH21  DH22),   (DH21  1.D0),   (-1.D0 DH22),   (0.D0  1.D0). */
     62 /*     LOCATIONS 2-4 OF DPARAM CONTAIN DH11, DH21, DH12, AND DH22 */
     63 /*     RESPECTIVELY. (VALUES OF 1.D0, -1.D0, OR 0.D0 IMPLIED BY THE */
     64 /*     VALUE OF DPARAM(1) ARE NOT STORED IN DPARAM.) */
     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 DD1 AND DD2.  ALL ACTUAL SCALING OF DATA IS DONE USING GAM. */
     69 
     70 
     71 /*  Arguments */
     72 /*  ========= */
     73 
     74 /*  DD1    (input/output) DOUBLE PRECISION */
     75 
     76 /*  DD2    (input/output) DOUBLE PRECISION */
     77 
     78 /*  DX1    (input/output) DOUBLE PRECISION */
     79 
     80 /*  DY1    (input) DOUBLE PRECISION */
     81 
     82 /*  DPARAM (input/output)  DOUBLE PRECISION array, dimension 5 */
     83 /*     DPARAM(1)=DFLAG */
     84 /*     DPARAM(2)=DH11 */
     85 /*     DPARAM(3)=DH21 */
     86 /*     DPARAM(4)=DH12 */
     87 /*     DPARAM(5)=DH22 */
     88 
     89 /*  ===================================================================== */
     90 
     91 /*     .. Local Scalars .. */
     92 /*     .. */
     93 /*     .. Intrinsic Functions .. */
     94 /*     .. */
     95 /*     .. Data statements .. */
     96 
     97     /* Parameter adjustments */
     98     --dparam;
     99 
    100     /* Function Body */
    101 /*     .. */
    102     if (! (*dd1 < zero)) {
    103 	goto L10;
    104     }
    105 /*       GO ZERO-H-D-AND-DX1.. */
    106     goto L60;
    107 L10:
    108 /*     CASE-DD1-NONNEGATIVE */
    109     dp2 = *dd2 * *dy1;
    110     if (! (dp2 == zero)) {
    111 	goto L20;
    112     }
    113     dflag = -two;
    114     goto L260;
    115 /*     REGULAR-CASE.. */
    116 L20:
    117     dp1 = *dd1 * *dx1;
    118     dq2 = dp2 * *dy1;
    119     dq1 = dp1 * *dx1;
    120 
    121     if (! (abs(dq1) > abs(dq2))) {
    122 	goto L40;
    123     }
    124     dh21 = -(*dy1) / *dx1;
    125     dh12 = dp2 / dp1;
    126 
    127     du = one - dh12 * dh21;
    128 
    129     if (! (du <= zero)) {
    130 	goto L30;
    131     }
    132 /*         GO ZERO-H-D-AND-DX1.. */
    133     goto L60;
    134 L30:
    135     dflag = zero;
    136     *dd1 /= du;
    137     *dd2 /= du;
    138     *dx1 *= du;
    139 /*         GO SCALE-CHECK.. */
    140     goto L100;
    141 L40:
    142     if (! (dq2 < zero)) {
    143 	goto L50;
    144     }
    145 /*         GO ZERO-H-D-AND-DX1.. */
    146     goto L60;
    147 L50:
    148     dflag = one;
    149     dh11 = dp1 / dp2;
    150     dh22 = *dx1 / *dy1;
    151     du = one + dh11 * dh22;
    152     dtemp = *dd2 / du;
    153     *dd2 = *dd1 / du;
    154     *dd1 = dtemp;
    155     *dx1 = *dy1 * du;
    156 /*         GO SCALE-CHECK */
    157     goto L100;
    158 /*     PROCEDURE..ZERO-H-D-AND-DX1.. */
    159 L60:
    160     dflag = -one;
    161     dh11 = zero;
    162     dh12 = zero;
    163     dh21 = zero;
    164     dh22 = zero;
    165 
    166     *dd1 = zero;
    167     *dd2 = zero;
    168     *dx1 = zero;
    169 /*         RETURN.. */
    170     goto L220;
    171 /*     PROCEDURE..FIX-H.. */
    172 L70:
    173     if (! (dflag >= zero)) {
    174 	goto L90;
    175     }
    176 
    177     if (! (dflag == zero)) {
    178 	goto L80;
    179     }
    180     dh11 = one;
    181     dh22 = one;
    182     dflag = -one;
    183     goto L90;
    184 L80:
    185     dh21 = -one;
    186     dh12 = one;
    187     dflag = -one;
    188 L90:
    189     switch (igo) {
    190 	case 0: goto L120;
    191 	case 1: goto L150;
    192 	case 2: goto L180;
    193 	case 3: goto L210;
    194     }
    195 /*     PROCEDURE..SCALE-CHECK */
    196 L100:
    197 L110:
    198     if (! (*dd1 <= rgamsq)) {
    199 	goto L130;
    200     }
    201     if (*dd1 == zero) {
    202 	goto L160;
    203     }
    204     igo = 0;
    205     igo_fmt = fmt_120;
    206 /*              FIX-H.. */
    207     goto L70;
    208 L120:
    209 /* Computing 2nd power */
    210     d__1 = gam;
    211     *dd1 *= d__1 * d__1;
    212     *dx1 /= gam;
    213     dh11 /= gam;
    214     dh12 /= gam;
    215     goto L110;
    216 L130:
    217 L140:
    218     if (! (*dd1 >= gamsq)) {
    219 	goto L160;
    220     }
    221     igo = 1;
    222     igo_fmt = fmt_150;
    223 /*              FIX-H.. */
    224     goto L70;
    225 L150:
    226 /* Computing 2nd power */
    227     d__1 = gam;
    228     *dd1 /= d__1 * d__1;
    229     *dx1 *= gam;
    230     dh11 *= gam;
    231     dh12 *= gam;
    232     goto L140;
    233 L160:
    234 L170:
    235     if (! (abs(*dd2) <= rgamsq)) {
    236 	goto L190;
    237     }
    238     if (*dd2 == zero) {
    239 	goto L220;
    240     }
    241     igo = 2;
    242     igo_fmt = fmt_180;
    243 /*              FIX-H.. */
    244     goto L70;
    245 L180:
    246 /* Computing 2nd power */
    247     d__1 = gam;
    248     *dd2 *= d__1 * d__1;
    249     dh21 /= gam;
    250     dh22 /= gam;
    251     goto L170;
    252 L190:
    253 L200:
    254     if (! (abs(*dd2) >= gamsq)) {
    255 	goto L220;
    256     }
    257     igo = 3;
    258     igo_fmt = fmt_210;
    259 /*              FIX-H.. */
    260     goto L70;
    261 L210:
    262 /* Computing 2nd power */
    263     d__1 = gam;
    264     *dd2 /= d__1 * d__1;
    265     dh21 *= gam;
    266     dh22 *= gam;
    267     goto L200;
    268 L220:
    269     if (dflag < 0.) {
    270 	goto L250;
    271     } else if (dflag == 0) {
    272 	goto L230;
    273     } else {
    274 	goto L240;
    275     }
    276 L230:
    277     dparam[3] = dh21;
    278     dparam[4] = dh12;
    279     goto L260;
    280 L240:
    281     dparam[2] = dh11;
    282     dparam[5] = dh22;
    283     goto L260;
    284 L250:
    285     dparam[2] = dh11;
    286     dparam[3] = dh21;
    287     dparam[4] = dh12;
    288     dparam[5] = dh22;
    289 L260:
    290     dparam[1] = dflag;
    291     return 0;
    292 } /* drotmg_ */
    293 
    294