diff options
author | jason <jason@8a072113-8704-0410-8d35-dd094bca7971> | 2008-10-28 01:38:50 +0000 |
---|---|---|
committer | jason <jason@8a072113-8704-0410-8d35-dd094bca7971> | 2008-10-28 01:38:50 +0000 |
commit | baba851215b44ac3b60b9248eb02bcce7eb76247 (patch) | |
tree | 8c0f5c006875532a30d4409f5e94b0f310ff00a7 /TESTING/EIG/zchkbl.f | |
download | lapack-baba851215b44ac3b60b9248eb02bcce7eb76247.tar.gz lapack-baba851215b44ac3b60b9248eb02bcce7eb76247.tar.bz2 lapack-baba851215b44ac3b60b9248eb02bcce7eb76247.zip |
Move LAPACK trunk into position.
Diffstat (limited to 'TESTING/EIG/zchkbl.f')
-rw-r--r-- | TESTING/EIG/zchkbl.f | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/TESTING/EIG/zchkbl.f b/TESTING/EIG/zchkbl.f new file mode 100644 index 00000000..40e34ca5 --- /dev/null +++ b/TESTING/EIG/zchkbl.f @@ -0,0 +1,145 @@ + SUBROUTINE ZCHKBL( NIN, NOUT ) +* +* -- LAPACK test routine (version 3.1) -- +* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. +* November 2006 +* +* .. Scalar Arguments .. + INTEGER NIN, NOUT +* .. +* +* Purpose +* ======= +* +* ZCHKBL tests ZGEBAL, a routine for balancing a general complex +* matrix and isolating some of its eigenvalues. +* +* Arguments +* ========= +* +* NIN (input) INTEGER +* The logical unit number for input. NIN > 0. +* +* NOUT (input) INTEGER +* The logical unit number for output. NOUT > 0. +* +* ====================================================================== +* +* .. Parameters .. + INTEGER LDA + PARAMETER ( LDA = 20 ) + DOUBLE PRECISION ZERO + PARAMETER ( ZERO = 0.0D+0 ) +* .. +* .. Local Scalars .. + INTEGER I, IHI, IHIIN, ILO, ILOIN, INFO, J, KNT, N, + $ NINFO + DOUBLE PRECISION ANORM, MEPS, RMAX, SFMIN, TEMP, VMAX + COMPLEX*16 CDUM +* .. +* .. Local Arrays .. + INTEGER LMAX( 3 ) + DOUBLE PRECISION DUMMY( 1 ), SCALE( LDA ), SCALIN( LDA ) + COMPLEX*16 A( LDA, LDA ), AIN( LDA, LDA ) +* .. +* .. External Functions .. + DOUBLE PRECISION DLAMCH, ZLANGE + EXTERNAL DLAMCH, ZLANGE +* .. +* .. External Subroutines .. + EXTERNAL ZGEBAL +* .. +* .. Intrinsic Functions .. + INTRINSIC ABS, DBLE, DIMAG, MAX +* .. +* .. Statement Functions .. + DOUBLE PRECISION CABS1 +* .. +* .. Statement Function definitions .. + CABS1( CDUM ) = ABS( DBLE( CDUM ) ) + ABS( DIMAG( CDUM ) ) +* .. +* .. Executable Statements .. +* + LMAX( 1 ) = 0 + LMAX( 2 ) = 0 + LMAX( 3 ) = 0 + NINFO = 0 + KNT = 0 + RMAX = ZERO + VMAX = ZERO + SFMIN = DLAMCH( 'S' ) + MEPS = DLAMCH( 'E' ) +* + 10 CONTINUE +* + READ( NIN, FMT = * )N + IF( N.EQ.0 ) + $ GO TO 70 + DO 20 I = 1, N + READ( NIN, FMT = * )( A( I, J ), J = 1, N ) + 20 CONTINUE +* + READ( NIN, FMT = * )ILOIN, IHIIN + DO 30 I = 1, N + READ( NIN, FMT = * )( AIN( I, J ), J = 1, N ) + 30 CONTINUE + READ( NIN, FMT = * )( SCALIN( I ), I = 1, N ) +* + ANORM = ZLANGE( 'M', N, N, A, LDA, DUMMY ) + KNT = KNT + 1 + CALL ZGEBAL( 'B', N, A, LDA, ILO, IHI, SCALE, INFO ) +* + IF( INFO.NE.0 ) THEN + NINFO = NINFO + 1 + LMAX( 1 ) = KNT + END IF +* + IF( ILO.NE.ILOIN .OR. IHI.NE.IHIIN ) THEN + NINFO = NINFO + 1 + LMAX( 2 ) = KNT + END IF +* + DO 50 I = 1, N + DO 40 J = 1, N + TEMP = MAX( CABS1( A( I, J ) ), CABS1( AIN( I, J ) ) ) + TEMP = MAX( TEMP, SFMIN ) + VMAX = MAX( VMAX, CABS1( A( I, J )-AIN( I, J ) ) / TEMP ) + 40 CONTINUE + 50 CONTINUE +* + DO 60 I = 1, N + TEMP = MAX( SCALE( I ), SCALIN( I ) ) + TEMP = MAX( TEMP, SFMIN ) + VMAX = MAX( VMAX, ABS( SCALE( I )-SCALIN( I ) ) / TEMP ) + 60 CONTINUE +* + IF( VMAX.GT.RMAX ) THEN + LMAX( 3 ) = KNT + RMAX = VMAX + END IF +* + GO TO 10 +* + 70 CONTINUE +* + WRITE( NOUT, FMT = 9999 ) + 9999 FORMAT( 1X, '.. test output of ZGEBAL .. ' ) +* + WRITE( NOUT, FMT = 9998 )RMAX + 9998 FORMAT( 1X, 'value of largest test error = ', D12.3 ) + WRITE( NOUT, FMT = 9997 )LMAX( 1 ) + 9997 FORMAT( 1X, 'example number where info is not zero = ', I4 ) + WRITE( NOUT, FMT = 9996 )LMAX( 2 ) + 9996 FORMAT( 1X, 'example number where ILO or IHI wrong = ', I4 ) + WRITE( NOUT, FMT = 9995 )LMAX( 3 ) + 9995 FORMAT( 1X, 'example number having largest error = ', I4 ) + WRITE( NOUT, FMT = 9994 )NINFO + 9994 FORMAT( 1X, 'number of examples where info is not 0 = ', I4 ) + WRITE( NOUT, FMT = 9993 )KNT + 9993 FORMAT( 1X, 'total number of examples tested = ', I4 ) +* + RETURN +* +* End of ZCHKBL +* + END |