987 parameter( zero = ( 0.0d0, 0.0d0 ),
988 $ one = ( 1.0d0, 0.0d0 ) )
989 DOUBLE PRECISION RZERO
990 parameter( rzero = 0.0d0 )
992 DOUBLE PRECISION EPS, THRESH
993 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
994 LOGICAL FATAL, REWI, TRACE
997 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
998 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
999 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
1000 $ C( NMAX, NMAX ), CT( NMAX )
1001 DOUBLE PRECISION G( NMAX )
1002 INTEGER IDIM( NIDIM )
1004 COMPLEX*16 ALPHA, ALS
1005 DOUBLE PRECISION ERR, ERRMAX
1006 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
1007 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
1009 LOGICAL LEFT, NULL, RESET, SAME
1010 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
1012 CHARACTER*2 ICHD, ICHS, ICHU
1024 INTEGER INFOT, NOUTC
1027 COMMON /infoc/infot, noutc, ok, lerr
1029 DATA ichu/
'UL'/, icht/
'NTC'/, ichd/
'UN'/, ichs/
'LR'/
1043 DO 140 im = 1, nidim
1046 DO 130 in = 1, nidim
1056 null = m.LE.0.OR.n.LE.0
1059 side = ichs( ics: ics )
1076 uplo = ichu( icu: icu )
1079 transa = icht( ict: ict )
1082 diag = ichd( icd: icd )
1089 CALL zmake(
'TR', uplo, diag, na, na, a,
1090 $ nmax, aa, lda, reset, zero )
1094 CALL zmake(
'GE',
' ',
' ', m, n, b, nmax,
1095 $ bb, ldb, reset, zero )
1120 IF( sname( 4: 5 ).EQ.
'MM' )
THEN
1122 $
WRITE( ntra, fmt = 9995 )nc, sname,
1123 $ side, uplo, transa, diag, m, n, alpha,
1127 CALL ztrmm( side, uplo, transa, diag, m,
1128 $ n, alpha, aa, lda, bb, ldb )
1129 ELSE IF( sname( 4: 5 ).EQ.
'SM' )
THEN
1131 $
WRITE( ntra, fmt = 9995 )nc, sname,
1132 $ side, uplo, transa, diag, m, n, alpha,
1136 CALL ztrsm( side, uplo, transa, diag, m,
1137 $ n, alpha, aa, lda, bb, ldb )
1143 WRITE( nout, fmt = 9994 )
1150 isame( 1 ) = sides.EQ.side
1151 isame( 2 ) = uplos.EQ.uplo
1152 isame( 3 ) = tranas.EQ.transa
1153 isame( 4 ) = diags.EQ.diag
1154 isame( 5 ) = ms.EQ.m
1155 isame( 6 ) = ns.EQ.n
1156 isame( 7 ) = als.EQ.alpha
1157 isame( 8 ) =
lze( as, aa, laa )
1158 isame( 9 ) = ldas.EQ.lda
1160 isame( 10 ) =
lze( bs, bb, lbb )
1162 isame( 10 ) =
lzeres(
'GE',
' ', m, n, bs,
1165 isame( 11 ) = ldbs.EQ.ldb
1172 same = same.AND.isame( i )
1173 IF( .NOT.isame( i ) )
1174 $
WRITE( nout, fmt = 9998 )i
1182 IF( sname( 4: 5 ).EQ.
'MM' )
THEN
1187 CALL zmmch( transa,
'N', m, n, m,
1188 $ alpha, a, nmax, b, nmax,
1189 $ zero, c, nmax, ct, g,
1190 $ bb, ldb, eps, err,
1191 $ fatal, nout, .true. )
1193 CALL zmmch(
'N', transa, m, n, n,
1194 $ alpha, b, nmax, a, nmax,
1195 $ zero, c, nmax, ct, g,
1196 $ bb, ldb, eps, err,
1197 $ fatal, nout, .true. )
1199 ELSE IF( sname( 4: 5 ).EQ.
'SM' )
THEN
1206 c( i, j ) = bb( i + ( j - 1 )*
1208 bb( i + ( j - 1 )*ldb ) = alpha*
1214 CALL zmmch( transa,
'N', m, n, m,
1215 $ one, a, nmax, c, nmax,
1216 $ zero, b, nmax, ct, g,
1217 $ bb, ldb, eps, err,
1218 $ fatal, nout, .false. )
1220 CALL zmmch(
'N', transa, m, n, n,
1221 $ one, c, nmax, a, nmax,
1222 $ zero, b, nmax, ct, g,
1223 $ bb, ldb, eps, err,
1224 $ fatal, nout, .false. )
1227 errmax = max( errmax, err )
1250 IF( errmax.LT.thresh )
THEN
1251 WRITE( nout, fmt = 9999 )sname, nc
1253 WRITE( nout, fmt = 9997 )sname, nc, errmax
1258 WRITE( nout, fmt = 9996 )sname
1259 WRITE( nout, fmt = 9995 )nc, sname, side, uplo, transa, diag, m,
1260 $ n, alpha, lda, ldb
1265 9999
FORMAT(
' ', a6,
' PASSED THE COMPUTATIONAL TESTS (', i6,
' CALL',
1267 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1268 $
'ANGED INCORRECTLY *******' )
1269 9997
FORMAT(
' ', a6,
' COMPLETED THE COMPUTATIONAL TESTS (', i6,
' C',
1270 $
'ALLS)', /
' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
1271 $
' - SUSPECT *******' )
1272 9996
FORMAT(
' ******* ', a6,
' FAILED ON CALL NUMBER:' )
1273 9995
FORMAT( 1x, i6,
': ', a6,
'(', 4(
'''', a1,
''',' ), 2( i3,
',' ),
1274 $
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
') ',
1276 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',