00001 SUBROUTINE ZCHKBL( NIN, NOUT )
00002
00003
00004
00005
00006
00007
00008 INTEGER NIN, NOUT
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 INTEGER LDA
00030 PARAMETER ( LDA = 20 )
00031 DOUBLE PRECISION ZERO
00032 PARAMETER ( ZERO = 0.0D+0 )
00033
00034
00035 INTEGER I, IHI, IHIIN, ILO, ILOIN, INFO, J, KNT, N,
00036 $ NINFO
00037 DOUBLE PRECISION ANORM, MEPS, RMAX, SFMIN, TEMP, VMAX
00038 COMPLEX*16 CDUM
00039
00040
00041 INTEGER LMAX( 3 )
00042 DOUBLE PRECISION DUMMY( 1 ), SCALE( LDA ), SCALIN( LDA )
00043 COMPLEX*16 A( LDA, LDA ), AIN( LDA, LDA )
00044
00045
00046 DOUBLE PRECISION DLAMCH, ZLANGE
00047 EXTERNAL DLAMCH, ZLANGE
00048
00049
00050 EXTERNAL ZGEBAL
00051
00052
00053 INTRINSIC ABS, DBLE, DIMAG, MAX
00054
00055
00056 DOUBLE PRECISION CABS1
00057
00058
00059 CABS1( CDUM ) = ABS( DBLE( CDUM ) ) + ABS( DIMAG( CDUM ) )
00060
00061
00062
00063 LMAX( 1 ) = 0
00064 LMAX( 2 ) = 0
00065 LMAX( 3 ) = 0
00066 NINFO = 0
00067 KNT = 0
00068 RMAX = ZERO
00069 VMAX = ZERO
00070 SFMIN = DLAMCH( 'S' )
00071 MEPS = DLAMCH( 'E' )
00072
00073 10 CONTINUE
00074
00075 READ( NIN, FMT = * )N
00076 IF( N.EQ.0 )
00077 $ GO TO 70
00078 DO 20 I = 1, N
00079 READ( NIN, FMT = * )( A( I, J ), J = 1, N )
00080 20 CONTINUE
00081
00082 READ( NIN, FMT = * )ILOIN, IHIIN
00083 DO 30 I = 1, N
00084 READ( NIN, FMT = * )( AIN( I, J ), J = 1, N )
00085 30 CONTINUE
00086 READ( NIN, FMT = * )( SCALIN( I ), I = 1, N )
00087
00088 ANORM = ZLANGE( 'M', N, N, A, LDA, DUMMY )
00089 KNT = KNT + 1
00090 CALL ZGEBAL( 'B', N, A, LDA, ILO, IHI, SCALE, INFO )
00091
00092 IF( INFO.NE.0 ) THEN
00093 NINFO = NINFO + 1
00094 LMAX( 1 ) = KNT
00095 END IF
00096
00097 IF( ILO.NE.ILOIN .OR. IHI.NE.IHIIN ) THEN
00098 NINFO = NINFO + 1
00099 LMAX( 2 ) = KNT
00100 END IF
00101
00102 DO 50 I = 1, N
00103 DO 40 J = 1, N
00104 TEMP = MAX( CABS1( A( I, J ) ), CABS1( AIN( I, J ) ) )
00105 TEMP = MAX( TEMP, SFMIN )
00106 VMAX = MAX( VMAX, CABS1( A( I, J )-AIN( I, J ) ) / TEMP )
00107 40 CONTINUE
00108 50 CONTINUE
00109
00110 DO 60 I = 1, N
00111 TEMP = MAX( SCALE( I ), SCALIN( I ) )
00112 TEMP = MAX( TEMP, SFMIN )
00113 VMAX = MAX( VMAX, ABS( SCALE( I )-SCALIN( I ) ) / TEMP )
00114 60 CONTINUE
00115
00116 IF( VMAX.GT.RMAX ) THEN
00117 LMAX( 3 ) = KNT
00118 RMAX = VMAX
00119 END IF
00120
00121 GO TO 10
00122
00123 70 CONTINUE
00124
00125 WRITE( NOUT, FMT = 9999 )
00126 9999 FORMAT( 1X, '.. test output of ZGEBAL .. ' )
00127
00128 WRITE( NOUT, FMT = 9998 )RMAX
00129 9998 FORMAT( 1X, 'value of largest test error = ', D12.3 )
00130 WRITE( NOUT, FMT = 9997 )LMAX( 1 )
00131 9997 FORMAT( 1X, 'example number where info is not zero = ', I4 )
00132 WRITE( NOUT, FMT = 9996 )LMAX( 2 )
00133 9996 FORMAT( 1X, 'example number where ILO or IHI wrong = ', I4 )
00134 WRITE( NOUT, FMT = 9995 )LMAX( 3 )
00135 9995 FORMAT( 1X, 'example number having largest error = ', I4 )
00136 WRITE( NOUT, FMT = 9994 )NINFO
00137 9994 FORMAT( 1X, 'number of examples where info is not 0 = ', I4 )
00138 WRITE( NOUT, FMT = 9993 )KNT
00139 9993 FORMAT( 1X, 'total number of examples tested = ', I4 )
00140
00141 RETURN
00142
00143
00144
00145 END