48 parameter( nin = 5, nout = 6 )
50 parameter( nsubs = 7 )
51 DOUBLE PRECISION zero, half, one
52 parameter( zero = 0.0d0, half = 0.5d0, one = 1.0d0 )
54 parameter( nmax = 65 )
55 INTEGER nidmax, nalmax, nbemax
56 parameter( nidmax = 9, nalmax = 7, nbemax = 7 )
58 DOUBLE PRECISION eps, err, thresh
59 INTEGER i, isnum, j, n, nalf, nbet, nidim, ntra,
61 LOGICAL fatal, ltestt, rewi, same, sfatal, trace,
62 $ tsterr, corder, rorder
63 CHARACTER*1 transa, transb
67 DOUBLE PRECISION aa( nmax*nmax ), ab( nmax, 2*nmax ),
68 $ alf( nalmax ), as( nmax*nmax ),
69 $ bb( nmax*nmax ), bet( nbemax ),
70 $ bs( nmax*nmax ), c( nmax, nmax ),
71 $ cc( nmax*nmax ), cs( nmax*nmax ), ct( nmax ),
72 $ g( nmax ), w( 2*nmax )
73 INTEGER idim( nidmax )
74 LOGICAL ltest( nsubs )
75 CHARACTER*13 snames( nsubs )
77 DOUBLE PRECISION ddiff
90 COMMON /infoc/infot, noutc, ok
93 DATA snames/
'cblas_dgemm ',
'cblas_dsymm ',
94 $
'cblas_dtrmm ',
'cblas_dtrsm ',
'cblas_dsyrk ',
95 $
'cblas_dsyr2k',
'cblas_dgemmtr'/
103 READ( nin, fmt = * )snaps
104 READ( nin, fmt = * )ntra
107 OPEN( ntra, file = snaps, status =
'NEW' )
110 READ( nin, fmt = * )rewi
111 rewi = rewi.AND.trace
113 READ( nin, fmt = * )sfatal
115 READ( nin, fmt = * )tsterr
117 READ( nin, fmt = * )layout
119 READ( nin, fmt = * )thresh
124 READ( nin, fmt = * )nidim
125 IF( nidim.LT.1.OR.nidim.GT.nidmax )
THEN
126 WRITE( nout, fmt = 9997 )
'N', nidmax
129 READ( nin, fmt = * )( idim( i ), i = 1, nidim )
131 IF( idim( i ).LT.0.OR.idim( i ).GT.nmax )
THEN
132 WRITE( nout, fmt = 9996 )nmax
137 READ( nin, fmt = * )nalf
138 IF( nalf.LT.1.OR.nalf.GT.nalmax )
THEN
139 WRITE( nout, fmt = 9997 )
'ALPHA', nalmax
142 READ( nin, fmt = * )( alf( i ), i = 1, nalf )
144 READ( nin, fmt = * )nbet
145 IF( nbet.LT.1.OR.nbet.GT.nbemax )
THEN
146 WRITE( nout, fmt = 9997 )
'BETA', nbemax
149 READ( nin, fmt = * )( bet( i ), i = 1, nbet )
153 WRITE( nout, fmt = 9995 )
154 WRITE( nout, fmt = 9994 )( idim( i ), i = 1, nidim )
155 WRITE( nout, fmt = 9993 )( alf( i ), i = 1, nalf )
156 WRITE( nout, fmt = 9992 )( bet( i ), i = 1, nbet )
157 IF( .NOT.tsterr )
THEN
158 WRITE( nout, fmt = * )
159 WRITE( nout, fmt = 9984 )
161 WRITE( nout, fmt = * )
162 WRITE( nout, fmt = 9999 )thresh
163 WRITE( nout, fmt = * )
167 IF (layout.EQ.2)
THEN
170 WRITE( *, fmt = 10002 )
171 ELSE IF (layout.EQ.1)
THEN
173 WRITE( *, fmt = 10001 )
174 ELSE IF (layout.EQ.0)
THEN
176 WRITE( *, fmt = 10000 )
187 30
READ( nin, fmt = 9988,
END = 60 )SNAMET, ltestt
189 IF( snamet.EQ.snames( i ) )
192 WRITE( nout, fmt = 9990 )snamet
194 50 ltest( i ) = ltestt
204 IF(
ddiff( one + eps, one ).EQ.zero )
210 WRITE( nout, fmt = 9998 )eps
217 ab( i, j ) = max( i - j + 1, 0 )
219 ab( j, nmax + 1 ) = j
220 ab( 1, nmax + j ) = j
224 cc( j ) = j*( ( j + 1 )*j )/2 - ( ( j + 1 )*j*( j - 1 ) )/3
230 CALL dmmch( transa, transb, n, 1, n, one, ab, nmax,
231 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
232 $ nmax, eps, err, fatal, nout, .true. )
233 same =
lde( cc, ct, n )
234 IF( .NOT.same.OR.err.NE.zero )
THEN
235 WRITE( nout, fmt = 9989 )transa, transb, same, err
239 CALL dmmch( transa, transb, n, 1, n, one, ab, nmax,
240 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
241 $ nmax, eps, err, fatal, nout, .true. )
242 same =
lde( cc, ct, n )
243 IF( .NOT.same.OR.err.NE.zero )
THEN
244 WRITE( nout, fmt = 9989 )transa, transb, same, err
248 ab( j, nmax + 1 ) = n - j + 1
249 ab( 1, nmax + j ) = n - j + 1
252 cc( n - j + 1 ) = j*( ( j + 1 )*j )/2 -
253 $ ( ( j + 1 )*j*( j - 1 ) )/3
257 CALL dmmch( transa, transb, n, 1, n, one, ab, nmax,
258 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
259 $ nmax, eps, err, fatal, nout, .true. )
260 same =
lde( cc, ct, n )
261 IF( .NOT.same.OR.err.NE.zero )
THEN
262 WRITE( nout, fmt = 9989 )transa, transb, same, err
266 CALL dmmch( transa, transb, n, 1, n, one, ab, nmax,
267 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
268 $ nmax, eps, err, fatal, nout, .true. )
269 same =
lde( cc, ct, n )
270 IF( .NOT.same.OR.err.NE.zero )
THEN
271 WRITE( nout, fmt = 9989 )transa, transb, same, err
277 DO 200 isnum = 1, nsubs
278 WRITE( nout, fmt = * )
279 IF( .NOT.ltest( isnum ) )
THEN
281 WRITE( nout, fmt = 9987 )snames( isnum )
283 srnamt = snames( isnum )
286 CALL cd3chke( snames( isnum ) )
287 WRITE( nout, fmt = * )
293 GO TO ( 140, 150, 160, 160, 170, 180, 185 )isnum
296 CALL dchk1( snames( isnum ), eps, thresh, nout, ntra, trace,
297 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
298 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
302 CALL dchk1( snames( isnum ), eps, thresh, nout, ntra, trace,
303 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
304 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
310 CALL dchk2( snames( isnum ), eps, thresh, nout, ntra, trace,
311 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
312 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
316 CALL dchk2( snames( isnum ), eps, thresh, nout, ntra, trace,
317 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
318 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
324 CALL dchk3( snames( isnum ), eps, thresh, nout, ntra, trace,
325 $ rewi, fatal, nidim, idim, nalf, alf, nmax, ab,
326 $ aa, as, ab( 1, nmax + 1 ), bb, bs, ct, g, c,
330 CALL dchk3( snames( isnum ), eps, thresh, nout, ntra, trace,
331 $ rewi, fatal, nidim, idim, nalf, alf, nmax, ab,
332 $ aa, as, ab( 1, nmax + 1 ), bb, bs, ct, g, c,
338 CALL dchk4( snames( isnum ), eps, thresh, nout, ntra, trace,
339 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
340 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
344 CALL dchk4( snames( isnum ), eps, thresh, nout, ntra, trace,
345 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
346 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
352 CALL dchk5( snames( isnum ), eps, thresh, nout, ntra, trace,
353 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
354 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
358 CALL dchk5( snames( isnum ), eps, thresh, nout, ntra, trace,
359 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
360 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
366 CALL dchk6( snames( isnum ), eps, thresh, nout, ntra, trace,
367 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
368 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
372 CALL dchk6( snames( isnum ), eps, thresh, nout, ntra, trace,
373 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
374 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
380 190
IF( fatal.AND.sfatal )
384 WRITE( nout, fmt = 9986 )
388 WRITE( nout, fmt = 9985 )
392 WRITE( nout, fmt = 9991 )
40010002
FORMAT(
' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' )
40110001
FORMAT(
' ROW-MAJOR DATA LAYOUT IS TESTED' )
40210000
FORMAT(
' COLUMN-MAJOR DATA LAYOUT IS TESTED' )
403 9999
FORMAT(
' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
405 9998
FORMAT(
' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1p, d9.1 )
406 9997
FORMAT(
' NUMBER OF VALUES OF ', a,
' IS LESS THAN 1 OR GREATER ',
408 9996
FORMAT(
' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', i2 )
409 9995
FORMAT(
' TESTS OF THE DOUBLE PRECISION LEVEL 3 BLAS', //
' THE F',
410 $
'OLLOWING PARAMETER VALUES WILL BE USED:' )
411 9994
FORMAT(
' FOR N ', 9i6 )
412 9993
FORMAT(
' FOR ALPHA ', 7f6.1 )
413 9992
FORMAT(
' FOR BETA ', 7f6.1 )
414 9991
FORMAT(
' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
415 $ /
' ******* TESTS ABANDONED *******' )
416 9990
FORMAT(
' SUBPROGRAM NAME ', a13,
' NOT RECOGNIZED', /
' ******* T',
417 $
'ESTS ABANDONED *******' )
418 9989
FORMAT(
' ERROR IN DMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
419 $
'ATED WRONGLY.', /
' DMMCH WAS CALLED WITH TRANSA = ', a1,
420 $
' AND TRANSB = ', a1, /
' AND RETURNED SAME = ', l1,
' AND ',
421 $
'ERR = ', f12.3,
'.', /
' THIS MAY BE DUE TO FAULTS IN THE ',
422 $
'ARITHMETIC OR THE COMPILER.', /
' ******* TESTS ABANDONED ',
424 9988
FORMAT( a13,l2 )
425 9987
FORMAT( 1x, a13,
' WAS NOT TESTED' )
426 9986
FORMAT( /
' END OF TESTS' )
427 9985
FORMAT( /
' ******* FATAL ERROR - TESTS ABANDONED *******' )
428 9984
FORMAT(
' ERROR-EXITS WILL NOT BE TESTED' )
433 SUBROUTINE dchk1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
434 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
435 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, IORDER)
448 DOUBLE PRECISION ZERO
449 PARAMETER ( ZERO = 0.0d0 )
451 DOUBLE PRECISION EPS, THRESH
452 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
453 LOGICAL FATAL, REWI, TRACE
456 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
457 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
458 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
459 $ c( nmax, nmax ), cc( nmax*nmax ),
460 $ cs( nmax*nmax ), ct( nmax ), g( nmax )
461 INTEGER IDIM( NIDIM )
463 DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX
464 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
465 $ lbb, lcc, lda, ldas, ldb, ldbs, ldc, ldcs, m,
466 $ ma, mb, ms, n, na, nargs, nb, nc, ns
467 LOGICAL NULL, RESET, SAME, TRANA, TRANB
468 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
483 COMMON /infoc/infot, noutc, ok
506 null = n.LE.0.OR.m.LE.0
512 transa = ich( ica: ica )
513 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
533 CALL dmake(
'GE',
' ',
' ', ma, na, a, nmax, aa, lda,
537 transb = ich( icb: icb )
538 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
558 CALL dmake(
'GE',
' ',
' ', mb, nb, b, nmax, bb,
569 CALL dmake(
'GE',
' ',
' ', m, n, c, nmax,
570 $ cc, ldc, reset, zero )
600 $
CALL dprcn1(ntra, nc, sname, iorder,
601 $ transa, transb, m, n, k, alpha, lda,
605 CALL cdgemm( iorder, transa, transb, m, n,
606 $ k, alpha, aa, lda, bb, ldb,
612 WRITE( nout, fmt = 9994 )
619 isame( 1 ) = transa.EQ.tranas
620 isame( 2 ) = transb.EQ.tranbs
624 isame( 6 ) = als.EQ.alpha
625 isame( 7 ) = lde( as, aa, laa )
626 isame( 8 ) = ldas.EQ.lda
627 isame( 9 ) = lde( bs, bb, lbb )
628 isame( 10 ) = ldbs.EQ.ldb
629 isame( 11 ) = bls.EQ.beta
631 isame( 12 ) = lde( cs, cc, lcc )
633 isame( 12 ) = lderes(
'GE',
' ', m, n, cs,
636 isame( 13 ) = ldcs.EQ.ldc
643 same = same.AND.isame( i )
644 IF( .NOT.isame( i ) )
645 $
WRITE( nout, fmt = 9998 )i
656 CALL dmmch( transa, transb, m, n, k,
657 $ alpha, a, nmax, b, nmax, beta,
658 $ c, nmax, ct, g, cc, ldc, eps,
659 $ err, fatal, nout, .true. )
660 errmax = max( errmax, err )
683 IF( errmax.LT.thresh )
THEN
684 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
685 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
687 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
688 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
693 WRITE( nout, fmt = 9996 )sname
694 CALL dprcn1(nout, nc, sname, iorder, transa, transb,
695 $ m, n, k, alpha, lda, ldb, beta, ldc)
70010003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
701 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
702 $
'RATIO ', f8.2,
' - SUSPECT *******' )
70310002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
704 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
705 $
'RATIO ', f8.2,
' - SUSPECT *******' )
70610001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
707 $
' (', i6,
' CALL',
'S)' )
70810000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
709 $
' (', i6,
' CALL',
'S)' )
710 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
711 $
'ANGED INCORRECTLY *******' )
712 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
713 9995
FORMAT( 1x, i6,
': ', a13,
'(''', a1,
''',''', a1,
''',',
714 $ 3( i3,
',' ), f4.1,
', A,', i3,
', B,', i3,
',', f4.1,
', ',
716 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
722 SUBROUTINE dprcn1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N,
723 $ K, ALPHA, LDA, LDB, BETA, LDC)
724 INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC
725 DOUBLE PRECISION ALPHA, BETA
726 CHARACTER*1 TRANSA, TRANSB
728 CHARACTER*14 CRC, CTA,CTB
730 IF (transa.EQ.
'N')
THEN
731 cta =
' CblasNoTrans'
732 ELSE IF (transa.EQ.
'T')
THEN
735 cta =
'CblasConjTrans'
737 IF (transb.EQ.
'N')
THEN
738 ctb =
' CblasNoTrans'
739 ELSE IF (transb.EQ.
'T')
THEN
742 ctb =
'CblasConjTrans'
745 crc =
' CblasRowMajor'
747 crc =
' CblasColMajor'
749 WRITE(nout, fmt = 9995)nc,sname,crc, cta,ctb
750 WRITE(nout, fmt = 9994)m, n, k, alpha, lda, ldb, beta, ldc
752 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',')
753 9994
FORMAT( 20x, 3( i3,
',' ), f4.1,
', A,', i3,
', B,', i3,
',',
754 $ f4.1,
', ',
'C,', i3,
').' )
757 SUBROUTINE dchk2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
758 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
759 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, IORDER)
772 DOUBLE PRECISION ZERO
773 PARAMETER ( ZERO = 0.0d0 )
775 DOUBLE PRECISION EPS, THRESH
776 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
777 LOGICAL FATAL, REWI, TRACE
780 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
781 $ as( nmax*nmax ), b( nmax, nmax ),
782 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
783 $ c( nmax, nmax ), cc( nmax*nmax ),
784 $ cs( nmax*nmax ), ct( nmax ), g( nmax )
785 INTEGER IDIM( NIDIM )
787 DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX
788 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
789 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
791 LOGICAL LEFT, NULL, RESET, SAME
792 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
793 CHARACTER*2 ICHS, ICHU
807 COMMON /infoc/infot, noutc, ok
809 DATA ichs/
'LR'/, ichu/
'UL'/
830 null = n.LE.0.OR.m.LE.0
843 CALL dmake(
'GE',
' ',
' ', m, n, b, nmax, bb, ldb, reset,
847 side = ichs( ics: ics )
865 uplo = ichu( icu: icu )
869 CALL dmake(
'SY', uplo,
' ', na, na, a, nmax, aa, lda,
880 CALL dmake(
'GE',
' ',
' ', m, n, c, nmax, cc,
910 $
CALL dprcn2(ntra, nc, sname, iorder,
911 $ side, uplo, m, n, alpha, lda, ldb,
915 CALL cdsymm( iorder, side, uplo, m, n, alpha,
916 $ aa, lda, bb, ldb, beta, cc, ldc )
921 WRITE( nout, fmt = 9994 )
928 isame( 1 ) = sides.EQ.side
929 isame( 2 ) = uplos.EQ.uplo
932 isame( 5 ) = als.EQ.alpha
933 isame( 6 ) = lde( as, aa, laa )
934 isame( 7 ) = ldas.EQ.lda
935 isame( 8 ) = lde( bs, bb, lbb )
936 isame( 9 ) = ldbs.EQ.ldb
937 isame( 10 ) = bls.EQ.beta
939 isame( 11 ) = lde( cs, cc, lcc )
941 isame( 11 ) = lderes(
'GE',
' ', m, n, cs,
944 isame( 12 ) = ldcs.EQ.ldc
951 same = same.AND.isame( i )
952 IF( .NOT.isame( i ) )
953 $
WRITE( nout, fmt = 9998 )i
965 CALL dmmch(
'N',
'N', m, n, m, alpha, a,
966 $ nmax, b, nmax, beta, c, nmax,
967 $ ct, g, cc, ldc, eps, err,
968 $ fatal, nout, .true. )
970 CALL dmmch(
'N',
'N', m, n, n, alpha, b,
971 $ nmax, a, nmax, beta, c, nmax,
972 $ ct, g, cc, ldc, eps, err,
973 $ fatal, nout, .true. )
975 errmax = max( errmax, err )
996 IF( errmax.LT.thresh )
THEN
997 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
998 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1000 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1001 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1006 WRITE( nout, fmt = 9996 )sname
1007 CALL dprcn2(nout, nc, sname, iorder, side, uplo, m, n, alpha, lda,
101310003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1014 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1015 $
'RATIO ', f8.2,
' - SUSPECT *******' )
101610002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1017 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1018 $
'RATIO ', f8.2,
' - SUSPECT *******' )
101910001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1020 $
' (', i6,
' CALL',
'S)' )
102110000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1022 $
' (', i6,
' CALL',
'S)' )
1023 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1024 $
'ANGED INCORRECTLY *******' )
1025 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
1026 9995
FORMAT( 1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
1027 $ f4.1,
', A,', i3,
', B,', i3,
',', f4.1,
', C,', i3,
') ',
1029 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1036 SUBROUTINE dprcn2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N,
1037 $ ALPHA, LDA, LDB, BETA, LDC)
1038 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC
1039 DOUBLE PRECISION ALPHA, BETA
1040 CHARACTER*1 SIDE, UPLO
1042 CHARACTER*14 CRC, CS,CU
1044 IF (side.EQ.
'L')
THEN
1049 IF (uplo.EQ.
'U')
THEN
1054 IF (iorder.EQ.1)
THEN
1055 crc =
' CblasRowMajor'
1057 crc =
' CblasColMajor'
1059 WRITE(nout, fmt = 9995)nc,sname,crc, cs,cu
1060 WRITE(nout, fmt = 9994)m, n, alpha, lda, ldb, beta, ldc
1062 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',')
1063 9994
FORMAT( 20x, 2( i3,
',' ), f4.1,
', A,', i3,
', B,', i3,
',',
1064 $ f4.1,
', ',
'C,', i3,
').' )
1067 SUBROUTINE dchk3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1068 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
1069 $ B, BB, BS, CT, G, C, IORDER )
1082 DOUBLE PRECISION ZERO, ONE
1083 PARAMETER ( ZERO = 0.0d0, one = 1.0d0 )
1085 DOUBLE PRECISION EPS, THRESH
1086 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER
1087 LOGICAL FATAL, REWI, TRACE
1090 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1091 $ as( nmax*nmax ), b( nmax, nmax ),
1092 $ bb( nmax*nmax ), bs( nmax*nmax ),
1093 $ c( nmax, nmax ), ct( nmax ), g( nmax )
1094 INTEGER IDIM( NIDIM )
1096 DOUBLE PRECISION ALPHA, ALS, ERR, ERRMAX
1097 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
1098 $ lda, ldas, ldb, ldbs, m, ms, n, na, nargs, nc,
1100 LOGICAL LEFT, NULL, RESET, SAME
1101 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
1103 CHARACTER*2 ICHD, ICHS, ICHU
1109 EXTERNAL lde, lderes
1115 INTEGER INFOT, NOUTC
1118 COMMON /infoc/infot, noutc, ok
1120 DATA ichu/
'UL'/, icht/
'NTC'/, ichd/
'UN'/, ichs/
'LR'/
1134 DO 140 im = 1, nidim
1137 DO 130 in = 1, nidim
1147 null = m.LE.0.OR.n.LE.0
1150 side = ichs( ics: ics )
1167 uplo = ichu( icu: icu )
1170 transa = icht( ict: ict )
1173 diag = ichd( icd: icd )
1180 CALL dmake(
'TR', uplo, diag, na, na, a,
1181 $ nmax, aa, lda, reset, zero )
1185 CALL dmake(
'GE',
' ',
' ', m, n, b, nmax,
1186 $ bb, ldb, reset, zero )
1211 IF( sname( 10: 11 ).EQ.
'mm' )
THEN
1213 $
CALL dprcn3( ntra, nc, sname, iorder,
1214 $ side, uplo, transa, diag, m, n, alpha,
1218 CALL cdtrmm( iorder, side, uplo, transa,
1219 $ diag, m, n, alpha, aa, lda,
1221 ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN
1223 $
CALL dprcn3( ntra, nc, sname, iorder,
1224 $ side, uplo, transa, diag, m, n, alpha,
1228 CALL cdtrsm( iorder, side, uplo, transa,
1229 $ diag, m, n, alpha, aa, lda,
1236 WRITE( nout, fmt = 9994 )
1243 isame( 1 ) = sides.EQ.side
1244 isame( 2 ) = uplos.EQ.uplo
1245 isame( 3 ) = tranas.EQ.transa
1246 isame( 4 ) = diags.EQ.diag
1247 isame( 5 ) = ms.EQ.m
1248 isame( 6 ) = ns.EQ.n
1249 isame( 7 ) = als.EQ.alpha
1250 isame( 8 ) = lde( as, aa, laa )
1251 isame( 9 ) = ldas.EQ.lda
1253 isame( 10 ) = lde( bs, bb, lbb )
1255 isame( 10 ) = lderes(
'GE',
' ', m, n, bs,
1258 isame( 11 ) = ldbs.EQ.ldb
1265 same = same.AND.isame( i )
1266 IF( .NOT.isame( i ) )
1267 $
WRITE( nout, fmt = 9998 )i
1275 IF( sname( 10: 11 ).EQ.
'mm' )
THEN
1280 CALL dmmch( transa,
'N', m, n, m,
1281 $ alpha, a, nmax, b, nmax,
1282 $ zero, c, nmax, ct, g,
1283 $ bb, ldb, eps, err,
1284 $ fatal, nout, .true. )
1286 CALL dmmch(
'N', transa, m, n, n,
1287 $ alpha, b, nmax, a, nmax,
1288 $ zero, c, nmax, ct, g,
1289 $ bb, ldb, eps, err,
1290 $ fatal, nout, .true. )
1292 ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN
1299 c( i, j ) = bb( i + ( j - 1 )*
1301 bb( i + ( j - 1 )*ldb ) = alpha*
1307 CALL dmmch( transa,
'N', m, n, m,
1308 $ one, a, nmax, c, nmax,
1309 $ zero, b, nmax, ct, g,
1310 $ bb, ldb, eps, err,
1311 $ fatal, nout, .false. )
1313 CALL dmmch(
'N', transa, m, n, n,
1314 $ one, c, nmax, a, nmax,
1315 $ zero, b, nmax, ct, g,
1316 $ bb, ldb, eps, err,
1317 $ fatal, nout, .false. )
1320 errmax = max( errmax, err )
1343 IF( errmax.LT.thresh )
THEN
1344 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1345 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1347 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1348 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1353 WRITE( nout, fmt = 9996 )sname
1355 $
CALL dprcn3( ntra, nc, sname, iorder, side, uplo, transa, diag,
1356 $ m, n, alpha, lda, ldb)
136110003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1362 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1363 $
'RATIO ', f8.2,
' - SUSPECT *******' )
136410002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1365 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1366 $
'RATIO ', f8.2,
' - SUSPECT *******' )
136710001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1368 $
' (', i6,
' CALL',
'S)' )
136910000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1370 $
' (', i6,
' CALL',
'S)' )
1371 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1372 $
'ANGED INCORRECTLY *******' )
1373 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
1374 9995
FORMAT( 1x, i6,
': ', a13,
'(', 4(
'''', a1,
''',' ), 2( i3,
',' ),
1375 $ f4.1,
', A,', i3,
', B,', i3,
') .' )
1376 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1383 SUBROUTINE dprcn3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA,
1384 $ DIAG, M, N, ALPHA, LDA, LDB)
1385 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB
1386 DOUBLE PRECISION ALPHA
1387 CHARACTER*1 SIDE, UPLO, TRANSA, DIAG
1389 CHARACTER*14 CRC, CS, CU, CA, CD
1391 IF (side.EQ.
'L')
THEN
1396 IF (uplo.EQ.
'U')
THEN
1401 IF (transa.EQ.
'N')
THEN
1402 ca =
' CblasNoTrans'
1403 ELSE IF (transa.EQ.
'T')
THEN
1406 ca =
'CblasConjTrans'
1408 IF (diag.EQ.
'N')
THEN
1409 cd =
' CblasNonUnit'
1413 IF (iorder.EQ.1)
THEN
1414 crc =
' CblasRowMajor'
1416 crc =
' CblasColMajor'
1418 WRITE(nout, fmt = 9995)nc,sname,crc, cs,cu
1419 WRITE(nout, fmt = 9994)ca, cd, m, n, alpha, lda, ldb
1421 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',')
1422 9994
FORMAT( 22x, 2( a14,
',') , 2( i3,
',' ),
1423 $ f4.1,
', A,', i3,
', B,', i3,
').' )
1426 SUBROUTINE dchk4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1427 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1428 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G, IORDER)
1441 DOUBLE PRECISION ZERO
1442 PARAMETER ( ZERO = 0.0d0 )
1444 DOUBLE PRECISION EPS, THRESH
1445 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1446 LOGICAL FATAL, REWI, TRACE
1449 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1450 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1451 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1452 $ c( nmax, nmax ), cc( nmax*nmax ),
1453 $ cs( nmax*nmax ), ct( nmax ), g( nmax )
1454 INTEGER IDIM( NIDIM )
1456 DOUBLE PRECISION ALPHA, ALS, BETA, BETS, ERR, ERRMAX
1457 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1458 $ laa, lcc, lda, ldas, ldc, ldcs, lj, ma, n, na,
1460 LOGICAL NULL, RESET, SAME, TRAN, UPPER
1461 CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS
1468 EXTERNAL lde, lderes
1474 INTEGER INFOT, NOUTC
1477 COMMON /infoc/infot, noutc, ok
1479 DATA icht/
'NTC'/, ichu/
'UL'/
1487 DO 100 in = 1, nidim
1503 trans = icht( ict: ict )
1504 tran = trans.EQ.
'T'.OR.trans.EQ.
'C'
1523 CALL dmake(
'GE',
' ',
' ', ma, na, a, nmax, aa, lda,
1527 uplo = ichu( icu: icu )
1538 CALL dmake(
'SY', uplo,
' ', n, n, c, nmax, cc,
1539 $ ldc, reset, zero )
1563 $
CALL dprcn4( ntra, nc, sname, iorder, uplo,
1564 $ trans, n, k, alpha, lda, beta, ldc)
1567 CALL cdsyrk( iorder, uplo, trans, n, k, alpha,
1568 $ aa, lda, beta, cc, ldc )
1573 WRITE( nout, fmt = 9993 )
1580 isame( 1 ) = uplos.EQ.uplo
1581 isame( 2 ) = transs.EQ.trans
1582 isame( 3 ) = ns.EQ.n
1583 isame( 4 ) = ks.EQ.k
1584 isame( 5 ) = als.EQ.alpha
1585 isame( 6 ) = lde( as, aa, laa )
1586 isame( 7 ) = ldas.EQ.lda
1587 isame( 8 ) = bets.EQ.beta
1589 isame( 9 ) = lde( cs, cc, lcc )
1591 isame( 9 ) = lderes(
'SY', uplo, n, n, cs,
1594 isame( 10 ) = ldcs.EQ.ldc
1601 same = same.AND.isame( i )
1602 IF( .NOT.isame( i ) )
1603 $
WRITE( nout, fmt = 9998 )i
1624 CALL dmmch(
'T',
'N', lj, 1, k, alpha,
1626 $ a( 1, j ), nmax, beta,
1627 $ c( jj, j ), nmax, ct, g,
1628 $ cc( jc ), ldc, eps, err,
1629 $ fatal, nout, .true. )
1631 CALL dmmch(
'N',
'T', lj, 1, k, alpha,
1633 $ a( j, 1 ), nmax, beta,
1634 $ c( jj, j ), nmax, ct, g,
1635 $ cc( jc ), ldc, eps, err,
1636 $ fatal, nout, .true. )
1643 errmax = max( errmax, err )
1665 IF( errmax.LT.thresh )
THEN
1666 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1667 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1669 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1670 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1676 $
WRITE( nout, fmt = 9995 )j
1679 WRITE( nout, fmt = 9996 )sname
1680 CALL dprcn4( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
168610003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1687 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1688 $
'RATIO ', f8.2,
' - SUSPECT *******' )
168910002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1690 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1691 $
'RATIO ', f8.2,
' - SUSPECT *******' )
169210001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1693 $
' (', i6,
' CALL',
'S)' )
169410000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1695 $
' (', i6,
' CALL',
'S)' )
1696 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1697 $
'ANGED INCORRECTLY *******' )
1698 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
1699 9995
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
1700 9994
FORMAT( 1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
1701 $ f4.1,
', A,', i3,
',', f4.1,
', C,', i3,
') .' )
1702 9993
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1709 SUBROUTINE dprcn4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
1710 $ N, K, ALPHA, LDA, BETA, LDC)
1711 INTEGER NOUT, NC, IORDER, N, K, LDA, LDC
1712 DOUBLE PRECISION ALPHA, BETA
1713 CHARACTER*1 UPLO, TRANSA
1715 CHARACTER*14 CRC, CU, CA
1717 IF (UPLO.EQ.
'U')THEN
1722 IF (transa.EQ.
'N')
THEN
1723 ca =
' CblasNoTrans'
1724 ELSE IF (transa.EQ.
'T')
THEN
1727 ca =
'CblasConjTrans'
1729 IF (iorder.EQ.1)
THEN
1730 crc =
' CblasRowMajor'
1732 crc =
' CblasColMajor'
1734 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
1735 WRITE(nout, fmt = 9994)n, k, alpha, lda, beta, ldc
1737 9995
FORMAT( 1x, i6,
': ', a13,
'(', 3( a14,
',') )
1738 9994
FORMAT( 20x, 2( i3,
',' ),
1739 $ f4.1,
', A,', i3,
',', f4.1,
', C,', i3,
').' )
1742 SUBROUTINE dchk5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1743 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1744 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W,
1758 DOUBLE PRECISION ZERO
1759 PARAMETER ( ZERO = 0.0d0 )
1761 DOUBLE PRECISION EPS, THRESH
1762 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1763 LOGICAL FATAL, REWI, TRACE
1766 DOUBLE PRECISION AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1767 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1768 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1769 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1770 $ G( NMAX ), W( 2*NMAX )
1771 INTEGER IDIM( NIDIM )
1773 DOUBLE PRECISION ALPHA, ALS, BETA, BETS, ERR, ERRMAX
1774 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1775 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1776 $ ldc, ldcs, lj, ma, n, na, nargs, nc, ns
1777 LOGICAL NULL, RESET, SAME, TRAN, UPPER
1778 CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS
1785 EXTERNAL LDE, LDERES
1791 INTEGER INFOT, NOUTC
1794 COMMON /infoc/infot, noutc, ok
1796 DATA icht/
'NTC'/, ichu/
'UL'/
1804 DO 130 in = 1, nidim
1816 DO 120 ik = 1, nidim
1820 trans = icht( ict: ict )
1821 tran = trans.EQ.
'T'.OR.trans.EQ.
'C'
1841 CALL dmake(
'GE',
' ',
' ', ma, na, ab, 2*nmax, aa,
1842 $ lda, reset, zero )
1844 CALL dmake(
'GE',
' ',
' ', ma, na, ab, nmax, aa, lda,
1853 CALL dmake(
'GE',
' ',
' ', ma, na, ab( k + 1 ),
1854 $ 2*nmax, bb, ldb, reset, zero )
1856 CALL dmake(
'GE',
' ',
' ', ma, na, ab( k*nmax + 1 ),
1857 $ nmax, bb, ldb, reset, zero )
1861 uplo = ichu( icu: icu )
1872 CALL dmake(
'SY', uplo,
' ', n, n, c, nmax, cc,
1873 $ ldc, reset, zero )
1901 $
CALL dprcn5( ntra, nc, sname, iorder, uplo,
1902 $ trans, n, k, alpha, lda, ldb, beta, ldc)
1905 CALL cdsyr2k( iorder, uplo, trans, n, k,
1906 $ alpha, aa, lda, bb, ldb, beta,
1912 WRITE( nout, fmt = 9993 )
1919 isame( 1 ) = uplos.EQ.uplo
1920 isame( 2 ) = transs.EQ.trans
1921 isame( 3 ) = ns.EQ.n
1922 isame( 4 ) = ks.EQ.k
1923 isame( 5 ) = als.EQ.alpha
1924 isame( 6 ) = lde( as, aa, laa )
1925 isame( 7 ) = ldas.EQ.lda
1926 isame( 8 ) = lde( bs, bb, lbb )
1927 isame( 9 ) = ldbs.EQ.ldb
1928 isame( 10 ) = bets.EQ.beta
1930 isame( 11 ) = lde( cs, cc, lcc )
1932 isame( 11 ) = lderes(
'SY', uplo, n, n, cs,
1935 isame( 12 ) = ldcs.EQ.ldc
1942 same = same.AND.isame( i )
1943 IF( .NOT.isame( i ) )
1944 $
WRITE( nout, fmt = 9998 )i
1967 w( i ) = ab( ( j - 1 )*2*nmax + k +
1969 w( k + i ) = ab( ( j - 1 )*2*nmax +
1972 CALL dmmch(
'T',
'N', lj, 1, 2*k,
1973 $ alpha, ab( jjab ), 2*nmax,
1975 $ c( jj, j ), nmax, ct, g,
1976 $ cc( jc ), ldc, eps, err,
1977 $ fatal, nout, .true. )
1980 w( i ) = ab( ( k + i - 1 )*nmax +
1982 w( k + i ) = ab( ( i - 1 )*nmax +
1985 CALL dmmch(
'N',
'N', lj, 1, 2*k,
1986 $ alpha, ab( jj ), nmax, w,
1987 $ 2*nmax, beta, c( jj, j ),
1988 $ nmax, ct, g, cc( jc ), ldc,
1989 $ eps, err, fatal, nout,
1997 $ jjab = jjab + 2*nmax
1999 errmax = max( errmax, err )
2021 IF( errmax.LT.thresh )
THEN
2022 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
2023 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
2025 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
2026 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
2032 $
WRITE( nout, fmt = 9995 )j
2035 WRITE( nout, fmt = 9996 )sname
2036 CALL dprcn5( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
2037 $ lda, ldb, beta, ldc)
204210003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
2043 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2044 $
'RATIO ', f8.2,
' - SUSPECT *******' )
204510002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
2046 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2047 $
'RATIO ', f8.2,
' - SUSPECT *******' )
204810001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
2049 $
' (', i6,
' CALL',
'S)' )
205010000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
2051 $
' (', i6,
' CALL',
'S)' )
2052 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
2053 $
'ANGED INCORRECTLY *******' )
2054 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
2055 9995
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2056 9994
FORMAT( 1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
2057 $ f4.1,
', A,', i3,
', B,', i3,
',', f4.1,
', C,', i3,
') ',
2059 9993
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2066 SUBROUTINE dprcn5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
2067 $ N, K, ALPHA, LDA, LDB, BETA, LDC)
2068 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
2069 DOUBLE PRECISION ALPHA, BETA
2070 CHARACTER*1 UPLO, TRANSA
2072 CHARACTER*14 CRC, CU, CA
2074 IF (UPLO.EQ.
'U')THEN
2079 IF (transa.EQ.
'N')
THEN
2080 ca =
' CblasNoTrans'
2081 ELSE IF (transa.EQ.
'T')
THEN
2084 ca =
'CblasConjTrans'
2086 IF (iorder.EQ.1)
THEN
2087 crc =
' CblasRowMajor'
2089 crc =
' CblasColMajor'
2091 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
2092 WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
2094 9995
FORMAT( 1x, i6,
': ', a13,
'(', 3( a14,
',') )
2095 9994
FORMAT( 20x, 2( i3,
',' ),
2096 $ f4.1,
', A,', i3,
', B', i3,
',', f4.1,
', C,', i3,
').' )
2099 SUBROUTINE dmake( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2117 DOUBLE PRECISION ZERO, ONE
2118 PARAMETER ( ZERO = 0.0d0, one = 1.0d0 )
2119 DOUBLE PRECISION ROGUE
2120 PARAMETER ( ROGUE = -1.0d10 )
2122 DOUBLE PRECISION TRANSL
2123 INTEGER LDA, M, N, NMAX
2125 CHARACTER*1 DIAG, UPLO
2128 DOUBLE PRECISION A( NMAX, * ), AA( * )
2130 INTEGER I, IBEG, IEND, J
2131 LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER
2133 DOUBLE PRECISION DBEG
2139 upper = ( sym.OR.tri ).AND.uplo.EQ.
'U'
2140 lower = ( sym.OR.tri ).AND.uplo.EQ.
'L'
2141 unit = tri.AND.diag.EQ.
'U'
2147 IF( gen.OR.( upper.AND.i.LE.j ).OR.( lower.AND.i.GE.j ) )
2149 a( i, j ) = dbeg( reset ) + transl
2152 IF( n.GT.3.AND.j.EQ.n/2 )
2155 a( j, i ) = a( i, j )
2163 $ a( j, j ) = a( j, j ) + one
2170 IF( type.EQ.
'GE' )
THEN
2173 aa( i + ( j - 1 )*lda ) = a( i, j )
2175 DO 40 i = m + 1, lda
2176 aa( i + ( j - 1 )*lda ) = rogue
2179 ELSE IF( type.EQ.
'SY'.OR.type.EQ.
'TR' )
THEN
2196 DO 60 i = 1, ibeg - 1
2197 aa( i + ( j - 1 )*lda ) = rogue
2199 DO 70 i = ibeg, iend
2200 aa( i + ( j - 1 )*lda ) = a( i, j )
2202 DO 80 i = iend + 1, lda
2203 aa( i + ( j - 1 )*lda ) = rogue
2212 SUBROUTINE dmmch( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
2213 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
2227 DOUBLE PRECISION ZERO, ONE
2228 PARAMETER ( ZERO = 0.0d0, one = 1.0d0 )
2230 DOUBLE PRECISION ALPHA, BETA, EPS, ERR
2231 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
2233 CHARACTER*1 TRANSA, TRANSB
2235 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ),
2236 $ CC( LDCC, * ), CT( * ), G( * )
2238 DOUBLE PRECISION ERRI
2240 LOGICAL TRANA, TRANB
2242 INTRINSIC ABS, MAX, SQRT
2244 TRANA = transa.EQ.
'T'.OR.transa.EQ.
'C'
2245 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2257 IF( .NOT.trana.AND..NOT.tranb )
THEN
2260 ct( i ) = ct( i ) + a( i, k )*b( k, j )
2261 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( k, j ) )
2264 ELSE IF( trana.AND..NOT.tranb )
THEN
2267 ct( i ) = ct( i ) + a( k, i )*b( k, j )
2268 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( k, j ) )
2271 ELSE IF( .NOT.trana.AND.tranb )
THEN
2274 ct( i ) = ct( i ) + a( i, k )*b( j, k )
2275 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( j, k ) )
2278 ELSE IF( trana.AND.tranb )
THEN
2281 ct( i ) = ct( i ) + a( k, i )*b( j, k )
2282 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( j, k ) )
2287 ct( i ) = alpha*ct( i ) + beta*c( i, j )
2288 g( i ) = abs( alpha )*g( i ) + abs( beta )*abs( c( i, j ) )
2295 erri = abs( ct( i ) - cc( i, j ) )/eps
2296 IF( g( i ).NE.zero )
2297 $ erri = erri/g( i )
2298 err = max( err, erri )
2299 IF( err*sqrt( eps ).GE.one )
2311 WRITE( nout, fmt = 9999 )
2314 WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
2316 WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
2320 $
WRITE( nout, fmt = 9997 )j
2325 9999
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2326 $
'F ACCURATE *******', /
' EXPECTED RESULT COMPU',
2328 9998
FORMAT( 1x, i7, 2g18.6 )
2329 9997
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2334 LOGICAL FUNCTION lde( RI, RJ, LR )
2349 DOUBLE PRECISION ri( * ), rj( * )
2354 IF( ri( i ).NE.rj( i ) )
2366 LOGICAL FUNCTION lderes( TYPE, UPLO, M, N, AA, AS, LDA )
2385 DOUBLE PRECISION aa( lda, * ), as( lda, * )
2387 INTEGER i, ibeg, iend, j
2391 IF( type.EQ.
'GE' )
THEN
2393 DO 10 i = m + 1, lda
2394 IF( aa( i, j ).NE.as( i, j ) )
2398 ELSE IF( type.EQ.
'SY' )
THEN
2407 DO 30 i = 1, ibeg - 1
2408 IF( aa( i, j ).NE.as( i, j ) )
2411 DO 40 i = iend + 1, lda
2412 IF( aa( i, j ).NE.as( i, j ) )
2428 DOUBLE PRECISION FUNCTION dbeg( RESET )
2463 i = i - 1000*( i/1000 )
2468 dbeg = ( i - 500 )/1001.0d0
2485 DOUBLE PRECISION x, y
2494 SUBROUTINE dchk6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
2495 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
2496 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
2507 DOUBLE PRECISION ZERO
2508 PARAMETER ( ZERO = 0.0d0 )
2510 DOUBLE PRECISION EPS, THRESH
2511 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
2512 LOGICAL FATAL, REWI, TRACE
2515 DOUBLE PRECISION A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
2516 $ as( nmax*nmax ), b( nmax, nmax ),
2517 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
2518 $ c( nmax, nmax ), cc( nmax*nmax ),
2519 $ cs( nmax*nmax ), ct( nmax ), g( nmax )
2520 INTEGER IDIM( NIDIM )
2522 DOUBLE PRECISION ALPHA, ALS, BETA, BLS, ERR, ERRMAX
2523 INTEGER I, IA, IB, ICA, ICB, IK, IN, K, KS, LAA,
2524 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS,
2525 $ MA, MB, N, NA, NARGS, NB, NC, NS, IS
2526 LOGICAL NULL, RESET, SAME, TRANA, TRANB
2527 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB, UPLO, UPLOS
2534 EXTERNAL lde, lderes
2540 INTEGER INFOT, NOUTC
2543 COMMON /infoc/infot, noutc, ok, lerr
2554 DO 100 in = 1, nidim
2570 transa = ich( ica: ica )
2571 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
2591 CALL dmake(
'GE',
' ',
' ', ma, na, a, nmax, aa, lda,
2595 transb = ich( icb: icb )
2596 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2616 CALL dmake(
'GE',
' ',
' ', mb, nb, b, nmax, bb,
2617 $ ldb, reset, zero )
2626 uplo = ishape( is: is )
2631 CALL dmake(
'GE', uplo,
' ', n, n, c,
2632 $ nmax, cc, ldc, reset, zero )
2662 $
CALL dprcn8(ntra, nc, sname, iorder, uplo,
2663 $ transa, transb, n, k, alpha, lda,
2667 CALL cdgemmtr( iorder, uplo, transa, transb,
2668 $ n, k, alpha, aa, lda, bb, ldb,
2674 WRITE( nout, fmt = 9994 )
2681 isame( 1 ) = uplo.EQ.uplos
2682 isame( 2 ) = transa.EQ.tranas
2683 isame( 3 ) = transb.EQ.tranbs
2684 isame( 4 ) = ns.EQ.n
2685 isame( 5 ) = ks.EQ.k
2686 isame( 6 ) = als.EQ.alpha
2687 isame( 7 ) = lde( as, aa, laa )
2688 isame( 8 ) = ldas.EQ.lda
2689 isame( 9 ) = lde( bs, bb, lbb )
2690 isame( 10 ) = ldbs.EQ.ldb
2691 isame( 11 ) = bls.EQ.beta
2693 isame( 12 ) = lde( cs, cc, lcc )
2695 isame( 12 ) = lderes(
'GE',
' ', n, n,
2698 isame( 13 ) = ldcs.EQ.ldc
2705 same = same.AND.isame( i )
2706 IF( .NOT.isame( i ) )
2707 $
WRITE( nout, fmt = 9998 )i
2718 CALL dmmtch( uplo, transa, transb,
2720 $ alpha, a, nmax, b, nmax, beta,
2721 $ c, nmax, ct, g, cc, ldc, eps,
2722 $ err, fatal, nout, .true. )
2723 errmax = max( errmax, err )
2747 IF( errmax.LT.thresh )
THEN
2748 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
2749 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
2751 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
2752 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
2757 WRITE( nout, fmt = 9996 )sname
2758 CALL dprcn8(nout, nc, sname, iorder, uplo, transa, transb,
2759 $ n, k, alpha, lda, ldb, beta, ldc)
276410003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
2765 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2766 $
'RATIO ', f8.2,
' - SUSPECT *******' )
276710002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
2768 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2769 $
'RATIO ', f8.2,
' - SUSPECT *******' )
277010001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
2771 $
' (', i6,
' CALL',
'S)' )
277210000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
2773 $
' (', i6,
' CALL',
'S)' )
2774 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
2775 $
'ANGED INCORRECTLY *******' )
2776 9997
FORMAT(
' ', a13,
' COMPLETED THE COMPUTATIONAL TESTS (', i6,
' C'
2777 $
'ALLS)', /
' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
2778 $
' - SUSPECT *******' )
2779 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
2780 9995
FORMAT( 1x, i6,
': ', a13,
'(''',a1,
''',''',a1,
''',''', a1,
''','
2781 $ 2( i3,
',' ), f4.1,
', A,', i3,
', B,', i3,
',', f4.1,
', ',
2783 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2790 SUBROUTINE dprcn8(NOUT, NC, SNAME, IORDER, UPLO,
2791 $ TRANSA, TRANSB, N,
2792 $ K, ALPHA, LDA, LDB, BETA, LDC)
2793 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
2794 DOUBLE PRECISION ALPHA, BETA
2795 CHARACTER*1 TRANSA, TRANSB, UPLO
2797 CHARACTER*14 CRC, CTA,CTB,CUPLO
2799 IF (uplo.EQ.
'U')
THEN
2800 cuplo =
'CblasUpper'
2802 cuplo =
'CblasLower'
2804 IF (transa.EQ.
'N')
THEN
2805 cta =
' CblasNoTrans'
2806 ELSE IF (transa.EQ.
'T')
THEN
2809 cta =
'CblasConjTrans'
2811 IF (transb.EQ.
'N')
THEN
2812 ctb =
' CblasNoTrans'
2813 ELSE IF (transb.EQ.
'T')
THEN
2816 ctb =
'CblasConjTrans'
2818 IF (iorder.EQ.1)
THEN
2819 crc =
' CblasRowMajor'
2821 crc =
' CblasColMajor'
2823 WRITE(nout, fmt = 9995)nc,sname,crc, cuplo, cta,ctb
2824 WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
2826 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',',
2828 9994
FORMAT( 10x, 2( i3,
',' ) ,
' ', f4.1,
' , A,',
2829 $ i3,
', B,', i3,
', ', f4.1,
' , C,', i3,
').' )
2832 SUBROUTINE dmmtch( UPLO, TRANSA, TRANSB, N, KK, ALPHA, A, LDA,
2833 $ B, LDB, BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR,
2844 DOUBLE PRECISION ZERO, ONE
2845 parameter( zero = 0.0d0, one = 1.0d0 )
2847 DOUBLE PRECISION ALPHA, BETA, EPS, ERR
2848 INTEGER KK, LDA, LDB, LDC, LDCC, N, NOUT
2850 CHARACTER*1 UPLO, TRANSA, TRANSB
2852 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ),
2853 $ CC( LDCC, * ), CT( * ), G( * )
2855 DOUBLE PRECISION ERRI
2856 INTEGER I, J, K, ISTART, ISTOP
2857 LOGICAL TRANA, TRANB, UPPER
2859 INTRINSIC abs, max, sqrt
2862 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
2863 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2881 DO 10 i = istart, istop
2885 IF( .NOT.trana.AND..NOT.tranb )
THEN
2887 DO 20 i = istart, istop
2888 ct( i ) = ct( i ) + a( i, k )*b( k, j )
2889 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( k, j ) )
2892 ELSE IF( trana.AND..NOT.tranb )
THEN
2894 DO 40 i = istart, istop
2895 ct( i ) = ct( i ) + a( k, i )*b( k, j )
2896 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( k, j ) )
2899 ELSE IF( .NOT.trana.AND.tranb )
THEN
2901 DO 60 i = istart, istop
2902 ct( i ) = ct( i ) + a( i, k )*b( j, k )
2903 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( j, k ) )
2906 ELSE IF( trana.AND.tranb )
THEN
2908 DO 80 i = istart, istop
2909 ct( i ) = ct( i ) + a( k, i )*b( j, k )
2910 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( j, k ) )
2914 DO 100 i = istart, istop
2915 ct( i ) = alpha*ct( i ) + beta*c( i, j )
2916 g( i ) = abs( alpha )*g( i ) + abs( beta )*abs( c( i, j ) )
2922 DO 110 i = istart, istop
2923 erri = abs( ct( i ) - cc( i, j ) )/eps
2924 IF( g( i ).NE.zero )
2925 $ erri = erri/g( i )
2926 err = max( err, erri )
2927 IF( err*sqrt( eps ).GE.one )
2939 WRITE( nout, fmt = 9999 )
2940 DO 140 i = istart, istop
2942 WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
2944 WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
2948 $
WRITE( nout, fmt = 9997 )j
2953 9999
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2954 $
'F ACCURATE *******', /
' EXPECTED RESULT COMPU',
2956 9998
FORMAT( 1x, i7, 2g18.6 )
2957 9997
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
subroutine dprcn3(nout, nc, sname, iorder, side, uplo, transa, diag, m, n, alpha, lda, ldb)
subroutine dprcn2(nout, nc, sname, iorder, side, uplo, m, n, alpha, lda, ldb, beta, ldc)
subroutine dprcn5(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, ldb, beta, ldc)
subroutine dprcn4(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
subroutine dprcn8(nout, nc, sname, iorder, uplo, transa, transb, n, k, alpha, lda, ldb, beta, ldc)
subroutine dprcn1(nout, nc, sname, iorder, transa, transb, m, n, k, alpha, lda, ldb, beta, ldc)
subroutine dchk4(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g, z)
logical function lde(ri, rj, lr)
logical function lderes(type, uplo, m, n, aa, as, lda)
double precision function dbeg(reset)
subroutine dchk2(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nkb, kb, nalf, alf, nbet, bet, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g)
subroutine dchk6(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g, z)
subroutine dchk5(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g, z)
double precision function ddiff(x, y)
subroutine dchk3(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nkb, kb, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, xt, g, z)
subroutine dchk1(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nkb, kb, nalf, alf, nbet, bet, ninc, inc, nmax, incmax, a, aa, as, x, xx, xs, y, yy, ys, yt, g)
subroutine dmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
subroutine dmmtch(uplo, transa, transb, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)
subroutine dmmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)