00001 SUBROUTINE ZCHKBK( 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
00030 INTEGER LDE
00031 PARAMETER ( LDE = 20 )
00032 DOUBLE PRECISION ZERO
00033 PARAMETER ( ZERO = 0.0D0 )
00034
00035
00036 INTEGER I, IHI, ILO, INFO, J, KNT, N, NINFO
00037 DOUBLE PRECISION EPS, RMAX, SAFMIN, VMAX, X
00038 COMPLEX*16 CDUM
00039
00040
00041 INTEGER LMAX( 2 )
00042 DOUBLE PRECISION SCALE( LDE )
00043 COMPLEX*16 E( LDE, LDE ), EIN( LDE, LDE )
00044
00045
00046 DOUBLE PRECISION DLAMCH
00047 EXTERNAL DLAMCH
00048
00049
00050 EXTERNAL ZGEBAK
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 NINFO = 0
00066 KNT = 0
00067 RMAX = ZERO
00068 EPS = DLAMCH( 'E' )
00069 SAFMIN = DLAMCH( 'S' )
00070
00071 10 CONTINUE
00072
00073 READ( NIN, FMT = * )N, ILO, IHI
00074 IF( N.EQ.0 )
00075 $ GO TO 60
00076
00077 READ( NIN, FMT = * )( SCALE( I ), I = 1, N )
00078 DO 20 I = 1, N
00079 READ( NIN, FMT = * )( E( I, J ), J = 1, N )
00080 20 CONTINUE
00081
00082 DO 30 I = 1, N
00083 READ( NIN, FMT = * )( EIN( I, J ), J = 1, N )
00084 30 CONTINUE
00085
00086 KNT = KNT + 1
00087 CALL ZGEBAK( 'B', 'R', N, ILO, IHI, SCALE, N, E, LDE, INFO )
00088
00089 IF( INFO.NE.0 ) THEN
00090 NINFO = NINFO + 1
00091 LMAX( 1 ) = KNT
00092 END IF
00093
00094 VMAX = ZERO
00095 DO 50 I = 1, N
00096 DO 40 J = 1, N
00097 X = CABS1( E( I, J )-EIN( I, J ) ) / EPS
00098 IF( CABS1( E( I, J ) ).GT.SAFMIN )
00099 $ X = X / CABS1( E( I, J ) )
00100 VMAX = MAX( VMAX, X )
00101 40 CONTINUE
00102 50 CONTINUE
00103
00104 IF( VMAX.GT.RMAX ) THEN
00105 LMAX( 2 ) = KNT
00106 RMAX = VMAX
00107 END IF
00108
00109 GO TO 10
00110
00111 60 CONTINUE
00112
00113 WRITE( NOUT, FMT = 9999 )
00114 9999 FORMAT( 1X, '.. test output of ZGEBAK .. ' )
00115
00116 WRITE( NOUT, FMT = 9998 )RMAX
00117 9998 FORMAT( 1X, 'value of largest test error = ', D12.3 )
00118 WRITE( NOUT, FMT = 9997 )LMAX( 1 )
00119 9997 FORMAT( 1X, 'example number where info is not zero = ', I4 )
00120 WRITE( NOUT, FMT = 9996 )LMAX( 2 )
00121 9996 FORMAT( 1X, 'example number having largest error = ', I4 )
00122 WRITE( NOUT, FMT = 9995 )NINFO
00123 9995 FORMAT( 1X, 'number of examples where info is not 0 = ', I4 )
00124 WRITE( NOUT, FMT = 9994 )KNT
00125 9994 FORMAT( 1X, 'total number of examples tested = ', I4 )
00126
00127 RETURN
00128
00129
00130
00131 END