1066 DOUBLE PRECISION zero, one
1067 parameter ( zero = 0.0d0, one = 1.0d0 )
1069 DOUBLE PRECISION eps, thresh
1070 INTEGER nalf, nidim, nmax, nout, ntra, iorder
1071 LOGICAL fatal, rewi, trace
1074 DOUBLE PRECISION a( nmax, nmax ), aa( nmax*nmax ), alf( nalf ),
1075 $ as( nmax*nmax ), b( nmax, nmax ),
1076 $ bb( nmax*nmax ), bs( nmax*nmax ),
1077 $ c( nmax, nmax ), ct( nmax ), g( nmax )
1078 INTEGER idim( nidim )
1080 DOUBLE PRECISION alpha, als, err, errmax
1081 INTEGER i, ia, icd, ics, ict, icu, im, in, j, laa, lbb,
1082 $ lda, ldas, ldb, ldbs, m, ms, n, na, nargs, nc,
1084 LOGICAL left, null, reset, same
1085 CHARACTER*1 diag, diags, side, sides, tranas, transa, uplo,
1087 CHARACTER*2 ichd, ichs, ichu
1099 INTEGER infot, noutc
1102 COMMON /infoc/infot, noutc, ok
1104 DATA ichu/
'UL'/, icht/
'NTC'/, ichd/
'UN'/, ichs/
'LR'/
1118 DO 140 im = 1, nidim
1121 DO 130 in = 1, nidim
1131 null = m.LE.0.OR.n.LE.0
1134 side = ichs( ics: ics )
1151 uplo = ichu( icu: icu )
1154 transa = icht( ict: ict )
1157 diag = ichd( icd: icd )
1164 CALL dmake(
'TR', uplo, diag, na, na, a,
1165 $ nmax, aa, lda, reset, zero )
1169 CALL dmake(
'GE',
' ',
' ', m, n, b, nmax,
1170 $ bb, ldb, reset, zero )
1195 IF( sname( 10: 11 ).EQ.
'mm' )
THEN
1197 $
CALL dprcn3( ntra, nc, sname, iorder,
1198 $ side, uplo, transa, diag, m, n, alpha,
1202 CALL cdtrmm( iorder, side, uplo, transa,
1203 $ diag, m, n, alpha, aa, lda,
1205 ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN
1207 $
CALL dprcn3( ntra, nc, sname, iorder,
1208 $ side, uplo, transa, diag, m, n, alpha,
1212 CALL cdtrsm( iorder, side, uplo, transa,
1213 $ diag, m, n, alpha, aa, lda,
1220 WRITE( nout, fmt = 9994 )
1227 isame( 1 ) = sides.EQ.side
1228 isame( 2 ) = uplos.EQ.uplo
1229 isame( 3 ) = tranas.EQ.transa
1230 isame( 4 ) = diags.EQ.diag
1231 isame( 5 ) = ms.EQ.m
1232 isame( 6 ) = ns.EQ.n
1233 isame( 7 ) = als.EQ.alpha
1234 isame( 8 ) =
lde( as, aa, laa )
1235 isame( 9 ) = ldas.EQ.lda
1237 isame( 10 ) =
lde( bs, bb, lbb )
1239 isame( 10 ) =
lderes(
'GE',
' ', m, n, bs,
1242 isame( 11 ) = ldbs.EQ.ldb
1249 same = same.AND.isame( i )
1250 IF( .NOT.isame( i ) )
1251 $
WRITE( nout, fmt = 9998 )i
1259 IF( sname( 10: 11 ).EQ.
'mm' )
THEN
1264 CALL dmmch( transa,
'N', m, n, m,
1265 $ alpha, a, nmax, b, nmax,
1266 $ zero, c, nmax, ct, g,
1267 $ bb, ldb, eps, err,
1268 $ fatal, nout, .true. )
1270 CALL dmmch(
'N', transa, m, n, n,
1271 $ alpha, b, nmax, a, nmax,
1272 $ zero, c, nmax, ct, g,
1273 $ bb, ldb, eps, err,
1274 $ fatal, nout, .true. )
1276 ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN
1283 c( i, j ) = bb( i + ( j - 1 )*
1285 bb( i + ( j - 1 )*ldb ) = alpha*
1291 CALL dmmch( transa,
'N', m, n, m,
1292 $ one, a, nmax, c, nmax,
1293 $ zero, b, nmax, ct, g,
1294 $ bb, ldb, eps, err,
1295 $ fatal, nout, .false. )
1297 CALL dmmch(
'N', transa, m, n, n,
1298 $ one, c, nmax, a, nmax,
1299 $ zero, b, nmax, ct, g,
1300 $ bb, ldb, eps, err,
1301 $ fatal, nout, .false. )
1304 errmax = max( errmax, err )
1327 IF( errmax.LT.thresh )
THEN
1328 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1329 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1331 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1332 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1337 WRITE( nout, fmt = 9996 )sname
1339 $
CALL dprcn3( ntra, nc, sname, iorder, side, uplo, transa, diag,
1340 $ m, n, alpha, lda, ldb)
1345 10003
FORMAT(
' ', a12,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1346 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1347 $
'RATIO ', f8.2,
' - SUSPECT *******' )
1348 10002
FORMAT(
' ', a12,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1349 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1350 $
'RATIO ', f8.2,
' - SUSPECT *******' )
1351 10001
FORMAT(
' ', a12,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1352 $
' (', i6,
' CALL',
'S)' )
1353 10000
FORMAT(
' ', a12,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1354 $
' (', i6,
' CALL',
'S)' )
1355 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1356 $
'ANGED INCORRECTLY *******' )
1357 9996
FORMAT(
' ******* ', a12,
' FAILED ON CALL NUMBER:' )
1358 9995
FORMAT( 1x, i6,
': ', a12,
'(', 4(
'''', a1,
''',' ), 2( i3,
',' ),
1359 $ f4.1,
', A,', i3,
', B,', i3,
') .' )
1360 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)
subroutine dmmch(TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB, BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL, NOUT, MV)
logical function lde(RI, RJ, LR)
subroutine dprcn3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, LDA, LDB)
logical function lderes(TYPE, UPLO, M, N, AA, AS, LDA)