| 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 _starpu_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;} /* _starpu_drotmg_ */
 |