| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628 | 
							- /* dggbal.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"
 
- /* Table of constant values */
 
- static integer c__1 = 1;
 
- static doublereal c_b35 = 10.;
 
- static doublereal c_b71 = .5;
 
- /* Subroutine */ int _starpu_dggbal_(char *job, integer *n, doublereal *a, integer *
 
- 	lda, doublereal *b, integer *ldb, integer *ilo, integer *ihi, 
 
- 	doublereal *lscale, doublereal *rscale, doublereal *work, integer *
 
- 	info)
 
- {
 
-     /* System generated locals */
 
-     integer a_dim1, a_offset, b_dim1, b_offset, i__1, i__2, i__3;
 
-     doublereal d__1, d__2, d__3;
 
-     /* Builtin functions */
 
-     double d_lg10(doublereal *), d_sign(doublereal *, doublereal *), pow_di(
 
- 	    doublereal *, integer *);
 
-     /* Local variables */
 
-     integer i__, j, k, l, m;
 
-     doublereal t;
 
-     integer jc;
 
-     doublereal ta, tb, tc;
 
-     integer ir;
 
-     doublereal ew;
 
-     integer it, nr, ip1, jp1, lm1;
 
-     doublereal cab, rab, ewc, cor, sum;
 
-     integer nrp2, icab, lcab;
 
-     doublereal beta, coef;
 
-     integer irab, lrab;
 
-     doublereal basl, cmax;
 
-     extern doublereal _starpu_ddot_(integer *, doublereal *, integer *, doublereal *, 
 
- 	    integer *);
 
-     doublereal coef2, coef5, gamma, alpha;
 
-     extern /* Subroutine */ int _starpu_dscal_(integer *, doublereal *, doublereal *, 
 
- 	    integer *);
 
-     extern logical _starpu_lsame_(char *, char *);
 
-     doublereal sfmin, sfmax;
 
-     extern /* Subroutine */ int _starpu_dswap_(integer *, doublereal *, integer *, 
 
- 	    doublereal *, integer *);
 
-     integer iflow;
 
-     extern /* Subroutine */ int _starpu_daxpy_(integer *, doublereal *, doublereal *, 
 
- 	    integer *, doublereal *, integer *);
 
-     integer kount;
 
-     extern doublereal _starpu_dlamch_(char *);
 
-     doublereal pgamma;
 
-     extern integer _starpu_idamax_(integer *, doublereal *, integer *);
 
-     extern /* Subroutine */ int _starpu_xerbla_(char *, integer *);
 
-     integer lsfmin, lsfmax;
 
- /*  -- LAPACK routine (version 3.2) -- */
 
- /*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
 
- /*     November 2006 */
 
- /*     .. Scalar Arguments .. */
 
- /*     .. */
 
- /*     .. Array Arguments .. */
 
- /*     .. */
 
- /*  Purpose */
 
- /*  ======= */
 
- /*  DGGBAL balances a pair of general real matrices (A,B).  This */
 
- /*  involves, first, permuting A and B by similarity transformations to */
 
- /*  isolate eigenvalues in the first 1 to ILO$-$1 and last IHI+1 to N */
 
- /*  elements on the diagonal; and second, applying a diagonal similarity */
 
- /*  transformation to rows and columns ILO to IHI to make the rows */
 
- /*  and columns as close in norm as possible. Both steps are optional. */
 
- /*  Balancing may reduce the 1-norm of the matrices, and improve the */
 
- /*  accuracy of the computed eigenvalues and/or eigenvectors in the */
 
- /*  generalized eigenvalue problem A*x = lambda*B*x. */
 
- /*  Arguments */
 
- /*  ========= */
 
- /*  JOB     (input) CHARACTER*1 */
 
- /*          Specifies the operations to be performed on A and B: */
 
- /*          = 'N':  none:  simply set ILO = 1, IHI = N, LSCALE(I) = 1.0 */
 
- /*                  and RSCALE(I) = 1.0 for i = 1,...,N. */
 
- /*          = 'P':  permute only; */
 
- /*          = 'S':  scale only; */
 
- /*          = 'B':  both permute and scale. */
 
- /*  N       (input) INTEGER */
 
- /*          The order of the matrices A and B.  N >= 0. */
 
- /*  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N) */
 
- /*          On entry, the input matrix A. */
 
- /*          On exit,  A is overwritten by the balanced matrix. */
 
- /*          If JOB = 'N', A is not referenced. */
 
- /*  LDA     (input) INTEGER */
 
- /*          The leading dimension of the array A. LDA >= max(1,N). */
 
- /*  B       (input/output) DOUBLE PRECISION array, dimension (LDB,N) */
 
- /*          On entry, the input matrix B. */
 
- /*          On exit,  B is overwritten by the balanced matrix. */
 
- /*          If JOB = 'N', B is not referenced. */
 
- /*  LDB     (input) INTEGER */
 
- /*          The leading dimension of the array B. LDB >= max(1,N). */
 
- /*  ILO     (output) INTEGER */
 
- /*  IHI     (output) INTEGER */
 
- /*          ILO and IHI are set to integers such that on exit */
 
- /*          A(i,j) = 0 and B(i,j) = 0 if i > j and */
 
- /*          j = 1,...,ILO-1 or i = IHI+1,...,N. */
 
- /*          If JOB = 'N' or 'S', ILO = 1 and IHI = N. */
 
- /*  LSCALE  (output) DOUBLE PRECISION array, dimension (N) */
 
- /*          Details of the permutations and scaling factors applied */
 
- /*          to the left side of A and B.  If P(j) is the index of the */
 
- /*          row interchanged with row j, and D(j) */
 
- /*          is the scaling factor applied to row j, then */
 
- /*            LSCALE(j) = P(j)    for J = 1,...,ILO-1 */
 
- /*                      = D(j)    for J = ILO,...,IHI */
 
- /*                      = P(j)    for J = IHI+1,...,N. */
 
- /*          The order in which the interchanges are made is N to IHI+1, */
 
- /*          then 1 to ILO-1. */
 
- /*  RSCALE  (output) DOUBLE PRECISION array, dimension (N) */
 
- /*          Details of the permutations and scaling factors applied */
 
- /*          to the right side of A and B.  If P(j) is the index of the */
 
- /*          column interchanged with column j, and D(j) */
 
- /*          is the scaling factor applied to column j, then */
 
- /*            LSCALE(j) = P(j)    for J = 1,...,ILO-1 */
 
- /*                      = D(j)    for J = ILO,...,IHI */
 
- /*                      = P(j)    for J = IHI+1,...,N. */
 
- /*          The order in which the interchanges are made is N to IHI+1, */
 
- /*          then 1 to ILO-1. */
 
- /*  WORK    (workspace) REAL array, dimension (lwork) */
 
- /*          lwork must be at least max(1,6*N) when JOB = 'S' or 'B', and */
 
- /*          at least 1 when JOB = 'N' or 'P'. */
 
- /*  INFO    (output) INTEGER */
 
- /*          = 0:  successful exit */
 
- /*          < 0:  if INFO = -i, the i-th argument had an illegal value. */
 
- /*  Further Details */
 
- /*  =============== */
 
- /*  See R.C. WARD, Balancing the generalized eigenvalue problem, */
 
- /*                 SIAM J. Sci. Stat. Comp. 2 (1981), 141-152. */
 
- /*  ===================================================================== */
 
- /*     .. Parameters .. */
 
- /*     .. */
 
- /*     .. Local Scalars .. */
 
- /*     .. */
 
- /*     .. External Functions .. */
 
- /*     .. */
 
- /*     .. External Subroutines .. */
 
- /*     .. */
 
- /*     .. Intrinsic Functions .. */
 
- /*     .. */
 
- /*     .. Executable Statements .. */
 
- /*     Test the input parameters */
 
-     /* Parameter adjustments */
 
-     a_dim1 = *lda;
 
-     a_offset = 1 + a_dim1;
 
-     a -= a_offset;
 
-     b_dim1 = *ldb;
 
-     b_offset = 1 + b_dim1;
 
-     b -= b_offset;
 
-     --lscale;
 
-     --rscale;
 
-     --work;
 
-     /* Function Body */
 
-     *info = 0;
 
-     if (! _starpu_lsame_(job, "N") && ! _starpu_lsame_(job, "P") && ! _starpu_lsame_(job, "S") 
 
- 	    && ! _starpu_lsame_(job, "B")) {
 
- 	*info = -1;
 
-     } else if (*n < 0) {
 
- 	*info = -2;
 
-     } else if (*lda < max(1,*n)) {
 
- 	*info = -4;
 
-     } else if (*ldb < max(1,*n)) {
 
- 	*info = -6;
 
-     }
 
-     if (*info != 0) {
 
- 	i__1 = -(*info);
 
- 	_starpu_xerbla_("DGGBAL", &i__1);
 
- 	return 0;
 
-     }
 
- /*     Quick return if possible */
 
-     if (*n == 0) {
 
- 	*ilo = 1;
 
- 	*ihi = *n;
 
- 	return 0;
 
-     }
 
-     if (*n == 1) {
 
- 	*ilo = 1;
 
- 	*ihi = *n;
 
- 	lscale[1] = 1.;
 
- 	rscale[1] = 1.;
 
- 	return 0;
 
-     }
 
-     if (_starpu_lsame_(job, "N")) {
 
- 	*ilo = 1;
 
- 	*ihi = *n;
 
- 	i__1 = *n;
 
- 	for (i__ = 1; i__ <= i__1; ++i__) {
 
- 	    lscale[i__] = 1.;
 
- 	    rscale[i__] = 1.;
 
- /* L10: */
 
- 	}
 
- 	return 0;
 
-     }
 
-     k = 1;
 
-     l = *n;
 
-     if (_starpu_lsame_(job, "S")) {
 
- 	goto L190;
 
-     }
 
-     goto L30;
 
- /*     Permute the matrices A and B to isolate the eigenvalues. */
 
- /*     Find row with one nonzero in columns 1 through L */
 
- L20:
 
-     l = lm1;
 
-     if (l != 1) {
 
- 	goto L30;
 
-     }
 
-     rscale[1] = 1.;
 
-     lscale[1] = 1.;
 
-     goto L190;
 
- L30:
 
-     lm1 = l - 1;
 
-     for (i__ = l; i__ >= 1; --i__) {
 
- 	i__1 = lm1;
 
- 	for (j = 1; j <= i__1; ++j) {
 
- 	    jp1 = j + 1;
 
- 	    if (a[i__ + j * a_dim1] != 0. || b[i__ + j * b_dim1] != 0.) {
 
- 		goto L50;
 
- 	    }
 
- /* L40: */
 
- 	}
 
- 	j = l;
 
- 	goto L70;
 
- L50:
 
- 	i__1 = l;
 
- 	for (j = jp1; j <= i__1; ++j) {
 
- 	    if (a[i__ + j * a_dim1] != 0. || b[i__ + j * b_dim1] != 0.) {
 
- 		goto L80;
 
- 	    }
 
- /* L60: */
 
- 	}
 
- 	j = jp1 - 1;
 
- L70:
 
- 	m = l;
 
- 	iflow = 1;
 
- 	goto L160;
 
- L80:
 
- 	;
 
-     }
 
-     goto L100;
 
- /*     Find column with one nonzero in rows K through N */
 
- L90:
 
-     ++k;
 
- L100:
 
-     i__1 = l;
 
-     for (j = k; j <= i__1; ++j) {
 
- 	i__2 = lm1;
 
- 	for (i__ = k; i__ <= i__2; ++i__) {
 
- 	    ip1 = i__ + 1;
 
- 	    if (a[i__ + j * a_dim1] != 0. || b[i__ + j * b_dim1] != 0.) {
 
- 		goto L120;
 
- 	    }
 
- /* L110: */
 
- 	}
 
- 	i__ = l;
 
- 	goto L140;
 
- L120:
 
- 	i__2 = l;
 
- 	for (i__ = ip1; i__ <= i__2; ++i__) {
 
- 	    if (a[i__ + j * a_dim1] != 0. || b[i__ + j * b_dim1] != 0.) {
 
- 		goto L150;
 
- 	    }
 
- /* L130: */
 
- 	}
 
- 	i__ = ip1 - 1;
 
- L140:
 
- 	m = k;
 
- 	iflow = 2;
 
- 	goto L160;
 
- L150:
 
- 	;
 
-     }
 
-     goto L190;
 
- /*     Permute rows M and I */
 
- L160:
 
-     lscale[m] = (doublereal) i__;
 
-     if (i__ == m) {
 
- 	goto L170;
 
-     }
 
-     i__1 = *n - k + 1;
 
-     _starpu_dswap_(&i__1, &a[i__ + k * a_dim1], lda, &a[m + k * a_dim1], lda);
 
-     i__1 = *n - k + 1;
 
-     _starpu_dswap_(&i__1, &b[i__ + k * b_dim1], ldb, &b[m + k * b_dim1], ldb);
 
- /*     Permute columns M and J */
 
- L170:
 
-     rscale[m] = (doublereal) j;
 
-     if (j == m) {
 
- 	goto L180;
 
-     }
 
-     _starpu_dswap_(&l, &a[j * a_dim1 + 1], &c__1, &a[m * a_dim1 + 1], &c__1);
 
-     _starpu_dswap_(&l, &b[j * b_dim1 + 1], &c__1, &b[m * b_dim1 + 1], &c__1);
 
- L180:
 
-     switch (iflow) {
 
- 	case 1:  goto L20;
 
- 	case 2:  goto L90;
 
-     }
 
- L190:
 
-     *ilo = k;
 
-     *ihi = l;
 
-     if (_starpu_lsame_(job, "P")) {
 
- 	i__1 = *ihi;
 
- 	for (i__ = *ilo; i__ <= i__1; ++i__) {
 
- 	    lscale[i__] = 1.;
 
- 	    rscale[i__] = 1.;
 
- /* L195: */
 
- 	}
 
- 	return 0;
 
-     }
 
-     if (*ilo == *ihi) {
 
- 	return 0;
 
-     }
 
- /*     Balance the submatrix in rows ILO to IHI. */
 
-     nr = *ihi - *ilo + 1;
 
-     i__1 = *ihi;
 
-     for (i__ = *ilo; i__ <= i__1; ++i__) {
 
- 	rscale[i__] = 0.;
 
- 	lscale[i__] = 0.;
 
- 	work[i__] = 0.;
 
- 	work[i__ + *n] = 0.;
 
- 	work[i__ + (*n << 1)] = 0.;
 
- 	work[i__ + *n * 3] = 0.;
 
- 	work[i__ + (*n << 2)] = 0.;
 
- 	work[i__ + *n * 5] = 0.;
 
- /* L200: */
 
-     }
 
- /*     Compute right side vector in resulting linear equations */
 
-     basl = d_lg10(&c_b35);
 
-     i__1 = *ihi;
 
-     for (i__ = *ilo; i__ <= i__1; ++i__) {
 
- 	i__2 = *ihi;
 
- 	for (j = *ilo; j <= i__2; ++j) {
 
- 	    tb = b[i__ + j * b_dim1];
 
- 	    ta = a[i__ + j * a_dim1];
 
- 	    if (ta == 0.) {
 
- 		goto L210;
 
- 	    }
 
- 	    d__1 = abs(ta);
 
- 	    ta = d_lg10(&d__1) / basl;
 
- L210:
 
- 	    if (tb == 0.) {
 
- 		goto L220;
 
- 	    }
 
- 	    d__1 = abs(tb);
 
- 	    tb = d_lg10(&d__1) / basl;
 
- L220:
 
- 	    work[i__ + (*n << 2)] = work[i__ + (*n << 2)] - ta - tb;
 
- 	    work[j + *n * 5] = work[j + *n * 5] - ta - tb;
 
- /* L230: */
 
- 	}
 
- /* L240: */
 
-     }
 
-     coef = 1. / (doublereal) (nr << 1);
 
-     coef2 = coef * coef;
 
-     coef5 = coef2 * .5;
 
-     nrp2 = nr + 2;
 
-     beta = 0.;
 
-     it = 1;
 
- /*     Start generalized conjugate gradient iteration */
 
- L250:
 
-     gamma = _starpu_ddot_(&nr, &work[*ilo + (*n << 2)], &c__1, &work[*ilo + (*n << 2)]
 
- , &c__1) + _starpu_ddot_(&nr, &work[*ilo + *n * 5], &c__1, &work[*ilo + *
 
- 	    n * 5], &c__1);
 
-     ew = 0.;
 
-     ewc = 0.;
 
-     i__1 = *ihi;
 
-     for (i__ = *ilo; i__ <= i__1; ++i__) {
 
- 	ew += work[i__ + (*n << 2)];
 
- 	ewc += work[i__ + *n * 5];
 
- /* L260: */
 
-     }
 
- /* Computing 2nd power */
 
-     d__1 = ew;
 
- /* Computing 2nd power */
 
-     d__2 = ewc;
 
- /* Computing 2nd power */
 
-     d__3 = ew - ewc;
 
-     gamma = coef * gamma - coef2 * (d__1 * d__1 + d__2 * d__2) - coef5 * (
 
- 	    d__3 * d__3);
 
-     if (gamma == 0.) {
 
- 	goto L350;
 
-     }
 
-     if (it != 1) {
 
- 	beta = gamma / pgamma;
 
-     }
 
-     t = coef5 * (ewc - ew * 3.);
 
-     tc = coef5 * (ew - ewc * 3.);
 
-     _starpu_dscal_(&nr, &beta, &work[*ilo], &c__1);
 
-     _starpu_dscal_(&nr, &beta, &work[*ilo + *n], &c__1);
 
-     _starpu_daxpy_(&nr, &coef, &work[*ilo + (*n << 2)], &c__1, &work[*ilo + *n], &
 
- 	    c__1);
 
-     _starpu_daxpy_(&nr, &coef, &work[*ilo + *n * 5], &c__1, &work[*ilo], &c__1);
 
-     i__1 = *ihi;
 
-     for (i__ = *ilo; i__ <= i__1; ++i__) {
 
- 	work[i__] += tc;
 
- 	work[i__ + *n] += t;
 
- /* L270: */
 
-     }
 
- /*     Apply matrix to vector */
 
-     i__1 = *ihi;
 
-     for (i__ = *ilo; i__ <= i__1; ++i__) {
 
- 	kount = 0;
 
- 	sum = 0.;
 
- 	i__2 = *ihi;
 
- 	for (j = *ilo; j <= i__2; ++j) {
 
- 	    if (a[i__ + j * a_dim1] == 0.) {
 
- 		goto L280;
 
- 	    }
 
- 	    ++kount;
 
- 	    sum += work[j];
 
- L280:
 
- 	    if (b[i__ + j * b_dim1] == 0.) {
 
- 		goto L290;
 
- 	    }
 
- 	    ++kount;
 
- 	    sum += work[j];
 
- L290:
 
- 	    ;
 
- 	}
 
- 	work[i__ + (*n << 1)] = (doublereal) kount * work[i__ + *n] + sum;
 
- /* L300: */
 
-     }
 
-     i__1 = *ihi;
 
-     for (j = *ilo; j <= i__1; ++j) {
 
- 	kount = 0;
 
- 	sum = 0.;
 
- 	i__2 = *ihi;
 
- 	for (i__ = *ilo; i__ <= i__2; ++i__) {
 
- 	    if (a[i__ + j * a_dim1] == 0.) {
 
- 		goto L310;
 
- 	    }
 
- 	    ++kount;
 
- 	    sum += work[i__ + *n];
 
- L310:
 
- 	    if (b[i__ + j * b_dim1] == 0.) {
 
- 		goto L320;
 
- 	    }
 
- 	    ++kount;
 
- 	    sum += work[i__ + *n];
 
- L320:
 
- 	    ;
 
- 	}
 
- 	work[j + *n * 3] = (doublereal) kount * work[j] + sum;
 
- /* L330: */
 
-     }
 
-     sum = _starpu_ddot_(&nr, &work[*ilo + *n], &c__1, &work[*ilo + (*n << 1)], &c__1) 
 
- 	    + _starpu_ddot_(&nr, &work[*ilo], &c__1, &work[*ilo + *n * 3], &c__1);
 
-     alpha = gamma / sum;
 
- /*     Determine correction to current iteration */
 
-     cmax = 0.;
 
-     i__1 = *ihi;
 
-     for (i__ = *ilo; i__ <= i__1; ++i__) {
 
- 	cor = alpha * work[i__ + *n];
 
- 	if (abs(cor) > cmax) {
 
- 	    cmax = abs(cor);
 
- 	}
 
- 	lscale[i__] += cor;
 
- 	cor = alpha * work[i__];
 
- 	if (abs(cor) > cmax) {
 
- 	    cmax = abs(cor);
 
- 	}
 
- 	rscale[i__] += cor;
 
- /* L340: */
 
-     }
 
-     if (cmax < .5) {
 
- 	goto L350;
 
-     }
 
-     d__1 = -alpha;
 
-     _starpu_daxpy_(&nr, &d__1, &work[*ilo + (*n << 1)], &c__1, &work[*ilo + (*n << 2)]
 
- , &c__1);
 
-     d__1 = -alpha;
 
-     _starpu_daxpy_(&nr, &d__1, &work[*ilo + *n * 3], &c__1, &work[*ilo + *n * 5], &
 
- 	    c__1);
 
-     pgamma = gamma;
 
-     ++it;
 
-     if (it <= nrp2) {
 
- 	goto L250;
 
-     }
 
- /*     End generalized conjugate gradient iteration */
 
- L350:
 
-     sfmin = _starpu_dlamch_("S");
 
-     sfmax = 1. / sfmin;
 
-     lsfmin = (integer) (d_lg10(&sfmin) / basl + 1.);
 
-     lsfmax = (integer) (d_lg10(&sfmax) / basl);
 
-     i__1 = *ihi;
 
-     for (i__ = *ilo; i__ <= i__1; ++i__) {
 
- 	i__2 = *n - *ilo + 1;
 
- 	irab = _starpu_idamax_(&i__2, &a[i__ + *ilo * a_dim1], lda);
 
- 	rab = (d__1 = a[i__ + (irab + *ilo - 1) * a_dim1], abs(d__1));
 
- 	i__2 = *n - *ilo + 1;
 
- 	irab = _starpu_idamax_(&i__2, &b[i__ + *ilo * b_dim1], ldb);
 
- /* Computing MAX */
 
- 	d__2 = rab, d__3 = (d__1 = b[i__ + (irab + *ilo - 1) * b_dim1], abs(
 
- 		d__1));
 
- 	rab = max(d__2,d__3);
 
- 	d__1 = rab + sfmin;
 
- 	lrab = (integer) (d_lg10(&d__1) / basl + 1.);
 
- 	ir = (integer) (lscale[i__] + d_sign(&c_b71, &lscale[i__]));
 
- /* Computing MIN */
 
- 	i__2 = max(ir,lsfmin), i__2 = min(i__2,lsfmax), i__3 = lsfmax - lrab;
 
- 	ir = min(i__2,i__3);
 
- 	lscale[i__] = pow_di(&c_b35, &ir);
 
- 	icab = _starpu_idamax_(ihi, &a[i__ * a_dim1 + 1], &c__1);
 
- 	cab = (d__1 = a[icab + i__ * a_dim1], abs(d__1));
 
- 	icab = _starpu_idamax_(ihi, &b[i__ * b_dim1 + 1], &c__1);
 
- /* Computing MAX */
 
- 	d__2 = cab, d__3 = (d__1 = b[icab + i__ * b_dim1], abs(d__1));
 
- 	cab = max(d__2,d__3);
 
- 	d__1 = cab + sfmin;
 
- 	lcab = (integer) (d_lg10(&d__1) / basl + 1.);
 
- 	jc = (integer) (rscale[i__] + d_sign(&c_b71, &rscale[i__]));
 
- /* Computing MIN */
 
- 	i__2 = max(jc,lsfmin), i__2 = min(i__2,lsfmax), i__3 = lsfmax - lcab;
 
- 	jc = min(i__2,i__3);
 
- 	rscale[i__] = pow_di(&c_b35, &jc);
 
- /* L360: */
 
-     }
 
- /*     Row scaling of matrices A and B */
 
-     i__1 = *ihi;
 
-     for (i__ = *ilo; i__ <= i__1; ++i__) {
 
- 	i__2 = *n - *ilo + 1;
 
- 	_starpu_dscal_(&i__2, &lscale[i__], &a[i__ + *ilo * a_dim1], lda);
 
- 	i__2 = *n - *ilo + 1;
 
- 	_starpu_dscal_(&i__2, &lscale[i__], &b[i__ + *ilo * b_dim1], ldb);
 
- /* L370: */
 
-     }
 
- /*     Column scaling of matrices A and B */
 
-     i__1 = *ihi;
 
-     for (j = *ilo; j <= i__1; ++j) {
 
- 	_starpu_dscal_(ihi, &rscale[j], &a[j * a_dim1 + 1], &c__1);
 
- 	_starpu_dscal_(ihi, &rscale[j], &b[j * b_dim1 + 1], &c__1);
 
- /* L380: */
 
-     }
 
-     return 0;
 
- /*     End of DGGBAL */
 
- } /* _starpu_dggbal_ */
 
 
  |