| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 | 
							- /* drotmg.f -- translated by f2c (version 20061008).
 
-    You must link the resulting object file with libf2c:
 
- 	on Microsoft Windows system, link with libf2c.lib;
 
- 	on Linux or Unix systems, link with .../path/to/libf2c.a -lm
 
- 	or, if you install libf2c.a in a standard place, with -lf2c -lm
 
- 	-- in that order, at the end of the command line, as in
 
- 		cc *.o -lf2c -lm
 
- 	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
 
- 		http://www.netlib.org/f2c/libf2c.zip
 
- */
 
- #include "f2c.h"
 
- #include "blaswrap.h"
 
- /* Subroutine */ int drotmg_(doublereal *dd1, doublereal *dd2, doublereal *
 
- 	dx1, doublereal *dy1, doublereal *dparam)
 
- {
 
-     /* Initialized data */
 
-     static doublereal zero = 0.;
 
-     static doublereal one = 1.;
 
-     static doublereal two = 2.;
 
-     static doublereal gam = 4096.;
 
-     static doublereal gamsq = 16777216.;
 
-     static doublereal rgamsq = 5.9604645e-8;
 
-     /* Format strings */
 
-     static char fmt_120[] = "";
 
-     static char fmt_150[] = "";
 
-     static char fmt_180[] = "";
 
-     static char fmt_210[] = "";
 
-     /* System generated locals */
 
-     doublereal d__1;
 
-     /* Local variables */
 
-     doublereal du, dp1, dp2, dq1, dq2, dh11, dh12, dh21, dh22;
 
-     integer igo;
 
-     doublereal dflag, dtemp;
 
-     /* Assigned format variables */
 
-     static char *igo_fmt;
 
- /*     .. Scalar Arguments .. */
 
- /*     .. */
 
- /*     .. Array Arguments .. */
 
- /*     .. */
 
- /*  Purpose */
 
- /*  ======= */
 
- /*     CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS */
 
- /*     THE SECOND COMPONENT OF THE 2-VECTOR  (DSQRT(DD1)*DX1,DSQRT(DD2)* */
 
- /*     DY2)**T. */
 
- /*     WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS.. */
 
- /*     DFLAG=-1.D0     DFLAG=0.D0        DFLAG=1.D0     DFLAG=-2.D0 */
 
- /*       (DH11  DH12)    (1.D0  DH12)    (DH11  1.D0)    (1.D0  0.D0) */
 
- /*     H=(          )    (          )    (          )    (          ) */
 
- /*       (DH21  DH22),   (DH21  1.D0),   (-1.D0 DH22),   (0.D0  1.D0). */
 
- /*     LOCATIONS 2-4 OF DPARAM CONTAIN DH11, DH21, DH12, AND DH22 */
 
- /*     RESPECTIVELY. (VALUES OF 1.D0, -1.D0, OR 0.D0 IMPLIED BY THE */
 
- /*     VALUE OF DPARAM(1) ARE NOT STORED IN DPARAM.) */
 
- /*     THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE */
 
- /*     INEXACT.  THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE */
 
- /*     OF DD1 AND DD2.  ALL ACTUAL SCALING OF DATA IS DONE USING GAM. */
 
- /*  Arguments */
 
- /*  ========= */
 
- /*  DD1    (input/output) DOUBLE PRECISION */
 
- /*  DD2    (input/output) DOUBLE PRECISION */
 
- /*  DX1    (input/output) DOUBLE PRECISION */
 
- /*  DY1    (input) DOUBLE PRECISION */
 
- /*  DPARAM (input/output)  DOUBLE PRECISION array, dimension 5 */
 
- /*     DPARAM(1)=DFLAG */
 
- /*     DPARAM(2)=DH11 */
 
- /*     DPARAM(3)=DH21 */
 
- /*     DPARAM(4)=DH12 */
 
- /*     DPARAM(5)=DH22 */
 
- /*  ===================================================================== */
 
- /*     .. Local Scalars .. */
 
- /*     .. */
 
- /*     .. Intrinsic Functions .. */
 
- /*     .. */
 
- /*     .. Data statements .. */
 
-     /* Parameter adjustments */
 
-     --dparam;
 
-     /* Function Body */
 
- /*     .. */
 
-     if (! (*dd1 < zero)) {
 
- 	goto L10;
 
-     }
 
- /*       GO ZERO-H-D-AND-DX1.. */
 
-     goto L60;
 
- L10:
 
- /*     CASE-DD1-NONNEGATIVE */
 
-     dp2 = *dd2 * *dy1;
 
-     if (! (dp2 == zero)) {
 
- 	goto L20;
 
-     }
 
-     dflag = -two;
 
-     goto L260;
 
- /*     REGULAR-CASE.. */
 
- L20:
 
-     dp1 = *dd1 * *dx1;
 
-     dq2 = dp2 * *dy1;
 
-     dq1 = dp1 * *dx1;
 
-     if (! (abs(dq1) > abs(dq2))) {
 
- 	goto L40;
 
-     }
 
-     dh21 = -(*dy1) / *dx1;
 
-     dh12 = dp2 / dp1;
 
-     du = one - dh12 * dh21;
 
-     if (! (du <= zero)) {
 
- 	goto L30;
 
-     }
 
- /*         GO ZERO-H-D-AND-DX1.. */
 
-     goto L60;
 
- L30:
 
-     dflag = zero;
 
-     *dd1 /= du;
 
-     *dd2 /= du;
 
-     *dx1 *= du;
 
- /*         GO SCALE-CHECK.. */
 
-     goto L100;
 
- L40:
 
-     if (! (dq2 < zero)) {
 
- 	goto L50;
 
-     }
 
- /*         GO ZERO-H-D-AND-DX1.. */
 
-     goto L60;
 
- L50:
 
-     dflag = one;
 
-     dh11 = dp1 / dp2;
 
-     dh22 = *dx1 / *dy1;
 
-     du = one + dh11 * dh22;
 
-     dtemp = *dd2 / du;
 
-     *dd2 = *dd1 / du;
 
-     *dd1 = dtemp;
 
-     *dx1 = *dy1 * du;
 
- /*         GO SCALE-CHECK */
 
-     goto L100;
 
- /*     PROCEDURE..ZERO-H-D-AND-DX1.. */
 
- L60:
 
-     dflag = -one;
 
-     dh11 = zero;
 
-     dh12 = zero;
 
-     dh21 = zero;
 
-     dh22 = zero;
 
-     *dd1 = zero;
 
-     *dd2 = zero;
 
-     *dx1 = zero;
 
- /*         RETURN.. */
 
-     goto L220;
 
- /*     PROCEDURE..FIX-H.. */
 
- L70:
 
-     if (! (dflag >= zero)) {
 
- 	goto L90;
 
-     }
 
-     if (! (dflag == zero)) {
 
- 	goto L80;
 
-     }
 
-     dh11 = one;
 
-     dh22 = one;
 
-     dflag = -one;
 
-     goto L90;
 
- L80:
 
-     dh21 = -one;
 
-     dh12 = one;
 
-     dflag = -one;
 
- L90:
 
-     switch (igo) {
 
- 	case 0: goto L120;
 
- 	case 1: goto L150;
 
- 	case 2: goto L180;
 
- 	case 3: goto L210;
 
-     }
 
- /*     PROCEDURE..SCALE-CHECK */
 
- L100:
 
- L110:
 
-     if (! (*dd1 <= rgamsq)) {
 
- 	goto L130;
 
-     }
 
-     if (*dd1 == zero) {
 
- 	goto L160;
 
-     }
 
-     igo = 0;
 
-     igo_fmt = fmt_120;
 
- /*              FIX-H.. */
 
-     goto L70;
 
- L120:
 
- /* Computing 2nd power */
 
-     d__1 = gam;
 
-     *dd1 *= d__1 * d__1;
 
-     *dx1 /= gam;
 
-     dh11 /= gam;
 
-     dh12 /= gam;
 
-     goto L110;
 
- L130:
 
- L140:
 
-     if (! (*dd1 >= gamsq)) {
 
- 	goto L160;
 
-     }
 
-     igo = 1;
 
-     igo_fmt = fmt_150;
 
- /*              FIX-H.. */
 
-     goto L70;
 
- L150:
 
- /* Computing 2nd power */
 
-     d__1 = gam;
 
-     *dd1 /= d__1 * d__1;
 
-     *dx1 *= gam;
 
-     dh11 *= gam;
 
-     dh12 *= gam;
 
-     goto L140;
 
- L160:
 
- L170:
 
-     if (! (abs(*dd2) <= rgamsq)) {
 
- 	goto L190;
 
-     }
 
-     if (*dd2 == zero) {
 
- 	goto L220;
 
-     }
 
-     igo = 2;
 
-     igo_fmt = fmt_180;
 
- /*              FIX-H.. */
 
-     goto L70;
 
- L180:
 
- /* Computing 2nd power */
 
-     d__1 = gam;
 
-     *dd2 *= d__1 * d__1;
 
-     dh21 /= gam;
 
-     dh22 /= gam;
 
-     goto L170;
 
- L190:
 
- L200:
 
-     if (! (abs(*dd2) >= gamsq)) {
 
- 	goto L220;
 
-     }
 
-     igo = 3;
 
-     igo_fmt = fmt_210;
 
- /*              FIX-H.. */
 
-     goto L70;
 
- L210:
 
- /* Computing 2nd power */
 
-     d__1 = gam;
 
-     *dd2 /= d__1 * d__1;
 
-     dh21 *= gam;
 
-     dh22 *= gam;
 
-     goto L200;
 
- L220:
 
-     if (dflag < 0.) {
 
- 	goto L250;
 
-     } else if (dflag == 0) {
 
- 	goto L230;
 
-     } else {
 
- 	goto L240;
 
-     }
 
- L230:
 
-     dparam[3] = dh21;
 
-     dparam[4] = dh12;
 
-     goto L260;
 
- L240:
 
-     dparam[2] = dh11;
 
-     dparam[5] = dh22;
 
-     goto L260;
 
- L250:
 
-     dparam[2] = dh11;
 
-     dparam[3] = dh21;
 
-     dparam[4] = dh12;
 
-     dparam[5] = dh22;
 
- L260:
 
-     dparam[1] = dflag;
 
-     return 0;
 
- } /* drotmg_ */
 
 
  |