version 1.15, 2017/06/17 11:06:13
|
version 1.16, 2018/05/29 06:55:16
|
Line 212
|
Line 212
|
*> algorithm through its inner loop. The algorithms stops |
*> algorithm through its inner loop. The algorithms stops |
*> (and so fails to converge) if the number of passes |
*> (and so fails to converge) if the number of passes |
*> through the inner loop exceeds MAXITR*N**2. |
*> through the inner loop exceeds MAXITR*N**2. |
|
*> |
|
*> \endverbatim |
|
* |
|
*> \par Note: |
|
* =========== |
|
*> |
|
*> \verbatim |
|
*> Bug report from Cezary Dendek. |
|
*> On March 23rd 2017, the INTEGER variable MAXIT = MAXITR*N**2 is |
|
*> removed since it can overflow pretty easily (for N larger or equal |
|
*> than 18,919). We instead use MAXITDIVN = MAXITR*N. |
*> \endverbatim |
*> \endverbatim |
* |
* |
* Authors: |
* Authors: |
Line 222
|
Line 233
|
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date December 2016 |
*> \date June 2017 |
* |
* |
*> \ingroup auxOTHERcomputational |
*> \ingroup auxOTHERcomputational |
* |
* |
Line 230
|
Line 241
|
SUBROUTINE DBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, |
SUBROUTINE DBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, |
$ LDU, C, LDC, WORK, INFO ) |
$ LDU, C, LDC, WORK, INFO ) |
* |
* |
* -- LAPACK computational routine (version 3.7.0) -- |
* -- LAPACK computational routine (version 3.7.1) -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* December 2016 |
* June 2017 |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER UPLO |
CHARACTER UPLO |
Line 266
|
Line 277
|
* .. |
* .. |
* .. Local Scalars .. |
* .. Local Scalars .. |
LOGICAL LOWER, ROTATE |
LOGICAL LOWER, ROTATE |
INTEGER I, IDIR, ISUB, ITER, J, LL, LLL, M, MAXIT, NM1, |
INTEGER I, IDIR, ISUB, ITER, ITERDIVN, J, LL, LLL, M, |
$ NM12, NM13, OLDLL, OLDM |
$ MAXITDIVN, NM1, NM12, NM13, OLDLL, OLDM |
DOUBLE PRECISION ABSE, ABSS, COSL, COSR, CS, EPS, F, G, H, MU, |
DOUBLE PRECISION ABSE, ABSS, COSL, COSR, CS, EPS, F, G, H, MU, |
$ OLDCS, OLDSN, R, SHIFT, SIGMN, SIGMX, SINL, |
$ OLDCS, OLDSN, R, SHIFT, SIGMN, SIGMX, SINL, |
$ SINR, SLL, SMAX, SMIN, SMINL, SMINOA, |
$ SINR, SLL, SMAX, SMIN, SMINL, SMINOA, |
Line 400
|
Line 411
|
40 CONTINUE |
40 CONTINUE |
50 CONTINUE |
50 CONTINUE |
SMINOA = SMINOA / SQRT( DBLE( N ) ) |
SMINOA = SMINOA / SQRT( DBLE( N ) ) |
THRESH = MAX( TOL*SMINOA, MAXITR*N*N*UNFL ) |
THRESH = MAX( TOL*SMINOA, MAXITR*(N*(N*UNFL)) ) |
ELSE |
ELSE |
* |
* |
* Absolute accuracy desired |
* Absolute accuracy desired |
* |
* |
THRESH = MAX( ABS( TOL )*SMAX, MAXITR*N*N*UNFL ) |
THRESH = MAX( ABS( TOL )*SMAX, MAXITR*(N*(N*UNFL)) ) |
END IF |
END IF |
* |
* |
* Prepare for main iteration loop for the singular values |
* Prepare for main iteration loop for the singular values |
* (MAXIT is the maximum number of passes through the inner |
* (MAXIT is the maximum number of passes through the inner |
* loop permitted before nonconvergence signalled.) |
* loop permitted before nonconvergence signalled.) |
* |
* |
MAXIT = MAXITR*N*N |
MAXITDIVN = MAXITR*N |
ITER = 0 |
ITERDIVN = 0 |
|
ITER = -1 |
OLDLL = -1 |
OLDLL = -1 |
OLDM = -1 |
OLDM = -1 |
* |
* |
Line 429
|
Line 441
|
* |
* |
IF( M.LE.1 ) |
IF( M.LE.1 ) |
$ GO TO 160 |
$ GO TO 160 |
IF( ITER.GT.MAXIT ) |
* |
$ GO TO 200 |
IF( ITER.GE.N ) THEN |
|
ITER = ITER - N |
|
ITERDIVN = ITERDIVN + 1 |
|
IF( ITERDIVN.GE.MAXITDIVN ) |
|
$ GO TO 200 |
|
END IF |
* |
* |
* Find diagonal block of matrix to work on |
* Find diagonal block of matrix to work on |
* |
* |