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 *',
logical function lzeres(TYPE, UPLO, M, N, AA, AS, LDA)
subroutine zmmch(TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, NOUT, MV)
subroutine zmake(TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL, KU, RESET, TRANSL)
subroutine ztrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRMM
logical function lze(RI, RJ, LR)
subroutine ztrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRSM