Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 12 additions & 8 deletions SRC/claein.f
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ SUBROUTINE CLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
* .. Local Scalars ..
CHARACTER NORMIN, TRANS
INTEGER I, IERR, ITS, J
REAL GROWTO, NRMSML, ROOTN, RTEMP, SCALE, VNORM
REAL GROWTO, NRMSML, ROOTN, RTEMP, SCALE, V0NORM,
$ V1NORM
COMPLEX CDUM, EI, EJ, TEMP, X
* ..
* .. External Functions ..
Expand All @@ -198,11 +199,13 @@ SUBROUTINE CLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
*
INFO = 0
*
* GROWTO is the threshold used in the acceptance test for an
* eigenvector.
* Each starting vector gets one solve, from v0 to v1. The residual
* of v1 is SCALE times the norm of v0, over the norm of v1, so
* GROWTO is the growth V1NORM/(SCALE*V0NORM) that the acceptance
* test below requires.
*
ROOTN = SQRT( REAL( N ) )
GROWTO = TENTH / ROOTN
GROWTO = TENTH / ( REAL( N )*EPS3 )
NRMSML = MAX( ONE, EPS3*ROOTN )*SMLNUM
*
* Form B = H - W*I (except that the subdiagonal elements are not
Expand All @@ -226,8 +229,8 @@ SUBROUTINE CLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
*
* Scale supplied initial vector.
*
VNORM = SCNRM2( N, V, 1 )
CALL CSSCAL( N, ( EPS3*ROOTN ) / MAX( VNORM, NRMSML ), V,
V0NORM = SCNRM2( N, V, 1 )
CALL CSSCAL( N, ( EPS3*ROOTN ) / MAX( V0NORM, NRMSML ), V,
$ 1 )
END IF
*
Expand Down Expand Up @@ -309,6 +312,7 @@ SUBROUTINE CLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
*
NORMIN = 'N'
DO 110 ITS = 1, N
V0NORM = SCASUM( N, V, 1 )
*
* Solve U*x = scale*v for a right eigenvector
* or U**H *x = scale*v for a left eigenvector,
Expand All @@ -321,8 +325,8 @@ SUBROUTINE CLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
*
* Test for sufficient growth in the norm of v.
*
VNORM = SCASUM( N, V, 1 )
IF( VNORM.GE.GROWTO*SCALE )
V1NORM = SCASUM( N, V, 1 )
IF( V1NORM.GE.GROWTO*SCALE*V0NORM )
$ GO TO 120
*
* Choose new orthogonal starting vector and try again.
Expand Down
34 changes: 19 additions & 15 deletions SRC/dlaein.f
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,8 @@ SUBROUTINE DLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
CHARACTER NORMIN, TRANS
INTEGER I, I1, I2, I3, IERR, ITS, J
DOUBLE PRECISION ABSBII, ABSBJJ, EI, EJ, GROWTO, NORM, NRMSML,
$ REC, ROOTN, SCALE, TEMP, VCRIT, VMAX, VNORM, W,
$ W1, X, XI, XR, Y
$ REC, ROOTN, SCALE, TEMP, V0NORM, V1NORM,
$ VCRIT, VMAX, W, W1, X, XI, XR, Y
* ..
* .. External Functions ..
INTEGER IDAMAX
Expand All @@ -212,11 +212,13 @@ SUBROUTINE DLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
INFO = 0
*
* GROWTO is the threshold used in the acceptance test for an
* eigenvector.
* Each starting vector gets one solve, from v0 to v1. The residual
* of v1 is SCALE times the norm of v0, over the norm of v1, so
* GROWTO is the growth V1NORM/(SCALE*V0NORM) that the acceptance
* test below requires.
*
ROOTN = SQRT( DBLE( N ) )
GROWTO = TENTH / ROOTN
GROWTO = TENTH / ( DBLE( N )*EPS3 )
NRMSML = MAX( ONE, EPS3*ROOTN )*SMLNUM
*
* Form B = H - (WR,WI)*I (except that the subdiagonal elements and
Expand Down Expand Up @@ -244,8 +246,8 @@ SUBROUTINE DLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
* Scale supplied initial vector.
*
VNORM = DNRM2( N, VR, 1 )
CALL DSCAL( N, ( EPS3*ROOTN ) / MAX( VNORM, NRMSML ), VR,
V0NORM = DNRM2( N, VR, 1 )
CALL DSCAL( N, ( EPS3*ROOTN ) / MAX( V0NORM, NRMSML ), VR,
$ 1 )
END IF
*
Expand Down Expand Up @@ -327,6 +329,7 @@ SUBROUTINE DLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
NORMIN = 'N'
DO 110 ITS = 1, N
V0NORM = DASUM( N, VR, 1 )
*
* Solve U*x = scale*v for a right eigenvector
* or U**T*x = scale*v for a left eigenvector,
Expand All @@ -339,8 +342,8 @@ SUBROUTINE DLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
* Test for sufficient growth in the norm of v.
*
VNORM = DASUM( N, VR, 1 )
IF( VNORM.GE.GROWTO*SCALE )
V1NORM = DASUM( N, VR, 1 )
IF( V1NORM.GE.GROWTO*SCALE*V0NORM )
$ GO TO 120
*
* Choose new orthogonal starting vector and try again.
Expand Down Expand Up @@ -521,6 +524,7 @@ SUBROUTINE DLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
END IF
*
DO 270 ITS = 1, N
V0NORM = DASUM( N, VR, 1 ) + DASUM( N, VI, 1 )
SCALE = ONE
VMAX = ONE
VCRIT = BIGNUM
Expand Down Expand Up @@ -591,8 +595,8 @@ SUBROUTINE DLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
* Test for sufficient growth in the norm of (VR,VI).
*
VNORM = DASUM( N, VR, 1 ) + DASUM( N, VI, 1 )
IF( VNORM.GE.GROWTO*SCALE )
V1NORM = DASUM( N, VR, 1 ) + DASUM( N, VI, 1 )
IF( V1NORM.GE.GROWTO*SCALE*V0NORM )
$ GO TO 280
*
* Choose a new orthogonal starting vector and try again.
Expand All @@ -616,12 +620,12 @@ SUBROUTINE DLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
* Normalize eigenvector.
*
VNORM = ZERO
V1NORM = ZERO
DO 290 I = 1, N
VNORM = MAX( VNORM, ABS( VR( I ) )+ABS( VI( I ) ) )
V1NORM = MAX( V1NORM, ABS( VR( I ) )+ABS( VI( I ) ) )
290 CONTINUE
CALL DSCAL( N, ONE / VNORM, VR, 1 )
CALL DSCAL( N, ONE / VNORM, VI, 1 )
CALL DSCAL( N, ONE / V1NORM, VR, 1 )
CALL DSCAL( N, ONE / V1NORM, VI, 1 )
*
END IF
*
Expand Down
34 changes: 19 additions & 15 deletions SRC/slaein.f
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,8 @@ SUBROUTINE SLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
CHARACTER NORMIN, TRANS
INTEGER I, I1, I2, I3, IERR, ITS, J
REAL ABSBII, ABSBJJ, EI, EJ, GROWTO, NORM, NRMSML,
$ REC, ROOTN, SCALE, TEMP, VCRIT, VMAX, VNORM, W,
$ W1, X, XI, XR, Y
$ REC, ROOTN, SCALE, TEMP, V0NORM, V1NORM,
$ VCRIT, VMAX, W, W1, X, XI, XR, Y
* ..
* .. External Functions ..
INTEGER ISAMAX
Expand All @@ -212,11 +212,13 @@ SUBROUTINE SLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
INFO = 0
*
* GROWTO is the threshold used in the acceptance test for an
* eigenvector.
* Each starting vector gets one solve, from v0 to v1. The residual
* of v1 is SCALE times the norm of v0, over the norm of v1, so
* GROWTO is the growth V1NORM/(SCALE*V0NORM) that the acceptance
* test below requires.
*
ROOTN = SQRT( REAL( N ) )
GROWTO = TENTH / ROOTN
GROWTO = TENTH / ( REAL( N )*EPS3 )
NRMSML = MAX( ONE, EPS3*ROOTN )*SMLNUM
*
* Form B = H - (WR,WI)*I (except that the subdiagonal elements and
Expand Down Expand Up @@ -244,8 +246,8 @@ SUBROUTINE SLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
* Scale supplied initial vector.
*
VNORM = SNRM2( N, VR, 1 )
CALL SSCAL( N, ( EPS3*ROOTN ) / MAX( VNORM, NRMSML ), VR,
V0NORM = SNRM2( N, VR, 1 )
CALL SSCAL( N, ( EPS3*ROOTN ) / MAX( V0NORM, NRMSML ), VR,
$ 1 )
END IF
*
Expand Down Expand Up @@ -327,6 +329,7 @@ SUBROUTINE SLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
NORMIN = 'N'
DO 110 ITS = 1, N
V0NORM = SASUM( N, VR, 1 )
*
* Solve U*x = scale*v for a right eigenvector
* or U**T*x = scale*v for a left eigenvector,
Expand All @@ -339,8 +342,8 @@ SUBROUTINE SLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
* Test for sufficient growth in the norm of v.
*
VNORM = SASUM( N, VR, 1 )
IF( VNORM.GE.GROWTO*SCALE )
V1NORM = SASUM( N, VR, 1 )
IF( V1NORM.GE.GROWTO*SCALE*V0NORM )
$ GO TO 120
*
* Choose new orthogonal starting vector and try again.
Expand Down Expand Up @@ -521,6 +524,7 @@ SUBROUTINE SLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
END IF
*
DO 270 ITS = 1, N
V0NORM = SASUM( N, VR, 1 ) + SASUM( N, VI, 1 )
SCALE = ONE
VMAX = ONE
VCRIT = BIGNUM
Expand Down Expand Up @@ -591,8 +595,8 @@ SUBROUTINE SLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
* Test for sufficient growth in the norm of (VR,VI).
*
VNORM = SASUM( N, VR, 1 ) + SASUM( N, VI, 1 )
IF( VNORM.GE.GROWTO*SCALE )
V1NORM = SASUM( N, VR, 1 ) + SASUM( N, VI, 1 )
IF( V1NORM.GE.GROWTO*SCALE*V0NORM )
$ GO TO 280
*
* Choose a new orthogonal starting vector and try again.
Expand All @@ -616,12 +620,12 @@ SUBROUTINE SLAEIN( RIGHTV, NOINIT, N, H, LDH, WR, WI, VR, VI,
*
* Normalize eigenvector.
*
VNORM = ZERO
V1NORM = ZERO
DO 290 I = 1, N
VNORM = MAX( VNORM, ABS( VR( I ) )+ABS( VI( I ) ) )
V1NORM = MAX( V1NORM, ABS( VR( I ) )+ABS( VI( I ) ) )
290 CONTINUE
CALL SSCAL( N, ONE / VNORM, VR, 1 )
CALL SSCAL( N, ONE / VNORM, VI, 1 )
CALL SSCAL( N, ONE / V1NORM, VR, 1 )
CALL SSCAL( N, ONE / V1NORM, VI, 1 )
*
END IF
*
Expand Down
20 changes: 12 additions & 8 deletions SRC/zlaein.f
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ SUBROUTINE ZLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
* .. Local Scalars ..
CHARACTER NORMIN, TRANS
INTEGER I, IERR, ITS, J
DOUBLE PRECISION GROWTO, NRMSML, ROOTN, RTEMP, SCALE, VNORM
DOUBLE PRECISION GROWTO, NRMSML, ROOTN, RTEMP, SCALE, V0NORM,
$ V1NORM
COMPLEX*16 CDUM, EI, EJ, TEMP, X
* ..
* .. External Functions ..
Expand All @@ -198,11 +199,13 @@ SUBROUTINE ZLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
*
INFO = 0
*
* GROWTO is the threshold used in the acceptance test for an
* eigenvector.
* Each starting vector gets one solve, from v0 to v1. The residual
* of v1 is SCALE times the norm of v0, over the norm of v1, so
* GROWTO is the growth V1NORM/(SCALE*V0NORM) that the acceptance
* test below requires.
*
ROOTN = SQRT( DBLE( N ) )
GROWTO = TENTH / ROOTN
GROWTO = TENTH / ( DBLE( N )*EPS3 )
NRMSML = MAX( ONE, EPS3*ROOTN )*SMLNUM
*
* Form B = H - W*I (except that the subdiagonal elements are not
Expand All @@ -226,8 +229,8 @@ SUBROUTINE ZLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
*
* Scale supplied initial vector.
*
VNORM = DZNRM2( N, V, 1 )
CALL ZDSCAL( N, ( EPS3*ROOTN ) / MAX( VNORM, NRMSML ), V,
V0NORM = DZNRM2( N, V, 1 )
CALL ZDSCAL( N, ( EPS3*ROOTN ) / MAX( V0NORM, NRMSML ), V,
$ 1 )
END IF
*
Expand Down Expand Up @@ -309,6 +312,7 @@ SUBROUTINE ZLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
*
NORMIN = 'N'
DO 110 ITS = 1, N
V0NORM = DZASUM( N, V, 1 )
*
* Solve U*x = scale*v for a right eigenvector
* or U**H *x = scale*v for a left eigenvector,
Expand All @@ -321,8 +325,8 @@ SUBROUTINE ZLAEIN( RIGHTV, NOINIT, N, H, LDH, W, V, B, LDB,
*
* Test for sufficient growth in the norm of v.
*
VNORM = DZASUM( N, V, 1 )
IF( VNORM.GE.GROWTO*SCALE )
V1NORM = DZASUM( N, V, 1 )
IF( V1NORM.GE.GROWTO*SCALE*V0NORM )
$ GO TO 120
*
* Choose new orthogonal starting vector and try again.
Expand Down
Loading