958 DOUBLE PRECISION ZERO, ONE
959 parameter( zero = 0.0d0, one = 1.0d0 )
961 DOUBLE PRECISION EPS, THRESH
962 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
963 LOGICAL FATAL, REWI, TRACE
966 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
967 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
968 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
969 $ C( NMAX, NMAX ), CT( NMAX ), G( NMAX )
970 INTEGER IDIM( NIDIM )
972 DOUBLE PRECISION ALPHA, ALS, ERR, ERRMAX
973 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
974 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
976 LOGICAL LEFT, NULL, RESET, SAME
977 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
979 CHARACTER*2 ICHD, ICHS, ICHU
994 COMMON /infoc/infot, noutc, ok, lerr
996 DATA ichu/
'UL'/, icht/
'NTC'/, ichd/
'UN'/, ichs/
'LR'/
1010 DO 140 im = 1, nidim
1013 DO 130 in = 1, nidim
1023 null = m.LE.0.OR.n.LE.0
1026 side = ichs( ics: ics )
1043 uplo = ichu( icu: icu )
1046 transa = icht( ict: ict )
1049 diag = ichd( icd: icd )
1056 CALL dmake(
'TR', uplo, diag, na, na, a,
1057 $ nmax, aa, lda, reset, zero )
1061 CALL dmake(
'GE',
' ',
' ', m, n, b, nmax,
1062 $ bb, ldb, reset, zero )
1087 IF( sname( 4: 5 ).EQ.
'MM' )
THEN
1089 $
WRITE( ntra, fmt = 9995 )nc, sname,
1090 $ side, uplo, transa, diag, m, n, alpha,
1094 CALL dtrmm( side, uplo, transa, diag, m,
1095 $ n, alpha, aa, lda, bb, ldb )
1096 ELSE IF( sname( 4: 5 ).EQ.
'SM' )
THEN
1098 $
WRITE( ntra, fmt = 9995 )nc, sname,
1099 $ side, uplo, transa, diag, m, n, alpha,
1103 CALL dtrsm( side, uplo, transa, diag, m,
1104 $ n, alpha, aa, lda, bb, ldb )
1110 WRITE( nout, fmt = 9994 )
1117 isame( 1 ) = sides.EQ.side
1118 isame( 2 ) = uplos.EQ.uplo
1119 isame( 3 ) = tranas.EQ.transa
1120 isame( 4 ) = diags.EQ.diag
1121 isame( 5 ) = ms.EQ.m
1122 isame( 6 ) = ns.EQ.n
1123 isame( 7 ) = als.EQ.alpha
1124 isame( 8 ) =
lde( as, aa, laa )
1125 isame( 9 ) = ldas.EQ.lda
1127 isame( 10 ) =
lde( bs, bb, lbb )
1129 isame( 10 ) =
lderes(
'GE',
' ', m, n, bs,
1132 isame( 11 ) = ldbs.EQ.ldb
1139 same = same.AND.isame( i )
1140 IF( .NOT.isame( i ) )
1141 $
WRITE( nout, fmt = 9998 )i
1149 IF( sname( 4: 5 ).EQ.
'MM' )
THEN
1154 CALL dmmch( transa,
'N', m, n, m,
1155 $ alpha, a, nmax, b, nmax,
1156 $ zero, c, nmax, ct, g,
1157 $ bb, ldb, eps, err,
1158 $ fatal, nout, .true. )
1160 CALL dmmch(
'N', transa, m, n, n,
1161 $ alpha, b, nmax, a, nmax,
1162 $ zero, c, nmax, ct, g,
1163 $ bb, ldb, eps, err,
1164 $ fatal, nout, .true. )
1166 ELSE IF( sname( 4: 5 ).EQ.
'SM' )
THEN
1173 c( i, j ) = bb( i + ( j - 1 )*
1175 bb( i + ( j - 1 )*ldb ) = alpha*
1181 CALL dmmch( transa,
'N', m, n, m,
1182 $ one, a, nmax, c, nmax,
1183 $ zero, b, nmax, ct, g,
1184 $ bb, ldb, eps, err,
1185 $ fatal, nout, .false. )
1187 CALL dmmch(
'N', transa, m, n, n,
1188 $ one, c, nmax, a, nmax,
1189 $ zero, b, nmax, ct, g,
1190 $ bb, ldb, eps, err,
1191 $ fatal, nout, .false. )
1194 errmax = max( errmax, err )
1217 IF( errmax.LT.thresh )
THEN
1218 WRITE( nout, fmt = 9999 )sname, nc
1220 WRITE( nout, fmt = 9997 )sname, nc, errmax
1225 WRITE( nout, fmt = 9996 )sname
1226 WRITE( nout, fmt = 9995 )nc, sname, side, uplo, transa, diag, m,
1227 $ n, alpha, lda, ldb
1232 9999
FORMAT(
' ', a6,
' PASSED THE COMPUTATIONAL TESTS (', i6,
' CALL',
1234 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1235 $
'ANGED INCORRECTLY *******' )
1236 9997
FORMAT(
' ', a6,
' COMPLETED THE COMPUTATIONAL TESTS (', i6,
' C',
1237 $
'ALLS)', /
' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
1238 $
' - SUSPECT *******' )
1239 9996
FORMAT(
' ******* ', a6,
' FAILED ON CALL NUMBER:' )
1240 9995
FORMAT( 1x, i6,
': ', a6,
'(', 4(
'''', a1,
''',' ), 2( i3,
',' ),
1241 $ f4.1,
', A,', i3,
', B,', i3,
') .' )
1242 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
subroutine dmake(TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL, KU, RESET, TRANSL)
logical function lde(RI, RJ, LR)
logical function lderes(TYPE, UPLO, M, N, AA, AS, LDA)
subroutine dmmch(TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, NOUT, MV)
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM
subroutine dtrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRMM