49 parameter( nin = 5, nout = 6 )
51 parameter( nsubs = 7 )
53 parameter( zero = 0.0, half = 0.5, one = 1.0 )
55 parameter( nmax = 65 )
56 INTEGER nidmax, nalmax, nbemax
57 parameter( nidmax = 9, nalmax = 7, nbemax = 7 )
60 INTEGER i, isnum, j, n, nalf, nbet, nidim, ntra,
62 LOGICAL fatal, ltestt, rewi, same, sfatal, trace,
63 $ tsterr, corder, rorder
64 CHARACTER*1 transa, transb
68 REAL aa( nmax*nmax ), ab( nmax, 2*nmax ),
69 $ alf( nalmax ), as( nmax*nmax ),
70 $ bb( nmax*nmax ), bet( nbemax ),
71 $ bs( nmax*nmax ), c( nmax, nmax ),
72 $ cc( nmax*nmax ), cs( nmax*nmax ), ct( nmax ),
73 $ g( nmax ), w( 2*nmax )
74 INTEGER idim( nidmax )
75 LOGICAL ltest( nsubs )
76 CHARACTER*13 snames( nsubs )
91 COMMON /infoc/infot, noutc, ok
94 DATA snames/
'cblas_sgemm ',
'cblas_ssymm ',
95 $
'cblas_strmm ',
'cblas_strsm ',
'cblas_ssyrk ',
96 $
'cblas_ssyr2k',
'cblas_sgemmtr'/
102 READ( nin, fmt = * )snaps
103 READ( nin, fmt = * )ntra
107 OPEN( ntra, file = snaps )
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(
sdiff( 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 smmch( 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 =
lse( cc, ct, n )
234 IF( .NOT.same.OR.err.NE.zero )
THEN
235 WRITE( nout, fmt = 9989 )transa, transb, same, err
239 CALL smmch( 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 =
lse( 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 smmch( 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 =
lse( cc, ct, n )
261 IF( .NOT.same.OR.err.NE.zero )
THEN
262 WRITE( nout, fmt = 9989 )transa, transb, same, err
266 CALL smmch( 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 =
lse( 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 cs3chke( snames( isnum ) )
287 WRITE( nout, fmt = * )
293 GO TO ( 140, 150, 160, 160, 170, 180, 185 )isnum
296 CALL schk1( 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 schk1( 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 schk2( 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 schk2( 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 schk3( 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 schk3( 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 schk4( 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 schk4( 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 schk5( 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 schk5( 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 schk6( 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,
373 CALL schk6( snames( isnum ), eps, thresh, nout, ntra, trace,
374 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
375 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
381 190
IF( fatal.AND.sfatal )
385 WRITE( nout, fmt = 9986 )
389 WRITE( nout, fmt = 9985 )
393 WRITE( nout, fmt = 9991 )
40110002
FORMAT(
' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' )
40210001
FORMAT(
' ROW-MAJOR DATA LAYOUT IS TESTED' )
40310000
FORMAT(
' COLUMN-MAJOR DATA LAYOUT IS TESTED' )
404 9999
FORMAT(
' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
406 9998
FORMAT(
' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1p, e9.1 )
407 9997
FORMAT(
' NUMBER OF VALUES OF ', a,
' IS LESS THAN 1 OR GREATER ',
409 9996
FORMAT(
' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', i2 )
410 9995
FORMAT(
' TESTS OF THE REAL LEVEL 3 BLAS', //
' THE F',
411 $
'OLLOWING PARAMETER VALUES WILL BE USED:' )
412 9994
FORMAT(
' FOR N ', 9i6 )
413 9993
FORMAT(
' FOR ALPHA ', 7f6.1 )
414 9992
FORMAT(
' FOR BETA ', 7f6.1 )
415 9991
FORMAT(
' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
416 $ /
' ******* TESTS ABANDONED *******' )
417 9990
FORMAT(
' SUBPROGRAM NAME ', a13,
' NOT RECOGNIZED', /
' ******* ',
418 $
'TESTS ABANDONED *******' )
419 9989
FORMAT(
' ERROR IN SMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
420 $
'ATED WRONGLY.', /
' SMMCH WAS CALLED WITH TRANSA = ', a1,
421 $
' AND TRANSB = ', a1, /
' AND RETURNED SAME = ', l1,
' AND ',
422 $
'ERR = ', f12.3,
'.', /
' THIS MAY BE DUE TO FAULTS IN THE ',
423 $
'ARITHMETIC OR THE COMPILER.', /
' ******* TESTS ABANDONED ',
425 9988
FORMAT( a13,l2 )
426 9987
FORMAT( 1x, a13,
' WAS NOT TESTED' )
427 9986
FORMAT( /
' END OF TESTS' )
428 9985
FORMAT( /
' ******* FATAL ERROR - TESTS ABANDONED *******' )
429 9984
FORMAT(
' ERROR-EXITS WILL NOT BE TESTED' )
434 SUBROUTINE schk1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
435 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
436 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
451 PARAMETER ( ZERO = 0.0 )
454 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
455 LOGICAL FATAL, REWI, TRACE
458 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
459 $ as( nmax*nmax ), b( nmax, nmax ),
460 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
461 $ c( nmax, nmax ), cc( nmax*nmax ),
462 $ cs( nmax*nmax ), ct( nmax ), g( nmax )
463 INTEGER IDIM( NIDIM )
465 REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX
466 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
467 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
468 $ ma, mb, ms, n, na, nargs, nb, nc, ns
469 LOGICAL NULL, RESET, SAME, TRANA, TRANB
470 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
485 COMMON /infoc/infot, noutc, ok
508 null = n.LE.0.OR.m.LE.0
514 transa = ich( ica: ica )
515 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
535 CALL smake(
'GE',
' ',
' ', ma, na, a, nmax, aa, lda,
539 transb = ich( icb: icb )
540 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
560 CALL smake(
'GE',
' ',
' ', mb, nb, b, nmax, bb,
571 CALL smake(
'GE',
' ',
' ', m, n, c, nmax,
572 $ cc, ldc, reset, zero )
602 $
CALL sprcn1(ntra, nc, sname, iorder,
603 $ transa, transb, m, n, k, alpha, lda,
607 CALL csgemm( iorder, transa, transb, m, n,
608 $ k, alpha, aa, lda, bb, ldb,
614 WRITE( nout, fmt = 9994 )
621 isame( 1 ) = transa.EQ.tranas
622 isame( 2 ) = transb.EQ.tranbs
626 isame( 6 ) = als.EQ.alpha
627 isame( 7 ) = lse( as, aa, laa )
628 isame( 8 ) = ldas.EQ.lda
629 isame( 9 ) = lse( bs, bb, lbb )
630 isame( 10 ) = ldbs.EQ.ldb
631 isame( 11 ) = bls.EQ.beta
633 isame( 12 ) = lse( cs, cc, lcc )
635 isame( 12 ) = lseres(
'GE',
' ', m, n, cs,
638 isame( 13 ) = ldcs.EQ.ldc
645 same = same.AND.isame( i )
646 IF( .NOT.isame( i ) )
647 $
WRITE( nout, fmt = 9998 )i+1
658 CALL smmch( transa, transb, m, n, k,
659 $ alpha, a, nmax, b, nmax, beta,
660 $ c, nmax, ct, g, cc, ldc, eps,
661 $ err, fatal, nout, .true. )
662 errmax = max( errmax, err )
685 IF( errmax.LT.thresh )
THEN
686 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
687 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
689 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
690 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
695 WRITE( nout, fmt = 9996 )sname
696 CALL sprcn1(nout, nc, sname, iorder, transa, transb,
697 $ m, n, k, alpha, lda, ldb, beta, ldc)
70210003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
703 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
704 $
'RATIO ', f8.2,
' - SUSPECT *******' )
70510002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
706 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
707 $
'RATIO ', f8.2,
' - SUSPECT *******' )
70810001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
709 $
' (', i6,
' CALL',
'S)' )
71010000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
711 $
' (', i6,
' CALL',
'S)' )
712 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
713 $
'ANGED INCORRECTLY *******' )
714 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
715 9995
FORMAT( 1x, i6,
': ', a13,
'(''', a1,
''',''', a1,
''',',
716 $ 3( i3,
',' ), f4.1,
', A,', i3,
', B,', i3,
',', f4.1,
', ',
718 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
727 SUBROUTINE sprcn1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N,
728 $ K, ALPHA, LDA, LDB, BETA, LDC)
729 INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC
731 CHARACTER*1 TRANSA, TRANSB
733 CHARACTER*14 CRC, CTA,CTB
735 IF (transa.EQ.
'N')
THEN
736 cta =
' CblasNoTrans'
737 ELSE IF (transa.EQ.
'T')
THEN
740 cta =
'CblasConjTrans'
742 IF (transb.EQ.
'N')
THEN
743 ctb =
' CblasNoTrans'
744 ELSE IF (transb.EQ.
'T')
THEN
747 ctb =
'CblasConjTrans'
750 crc =
' CblasRowMajor'
752 crc =
' CblasColMajor'
754 WRITE(nout, fmt = 9995)nc,sname,crc, cta,ctb
755 WRITE(nout, fmt = 9994)m, n, k, alpha, lda, ldb, beta, ldc
757 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',')
758 9994
FORMAT( 20x, 3( i3,
',' ), f4.1,
', A,', i3,
', B,', i3,
',',
759 $ f4.1,
', ',
'C,', i3,
').' )
762 SUBROUTINE schk2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
763 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
764 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
779 PARAMETER ( ZERO = 0.0 )
782 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
783 LOGICAL FATAL, REWI, TRACE
786 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
787 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
788 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
789 $ c( nmax, nmax ), cc( nmax*nmax ),
790 $ cs( nmax*nmax ), ct( nmax ), g( nmax )
791 INTEGER IDIM( NIDIM )
793 REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX
794 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
795 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
797 LOGICAL LEFT, NULL, RESET, SAME
798 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
799 CHARACTER*2 ICHS, ICHU
813 COMMON /infoc/infot, noutc, ok
815 DATA ichs/
'LR'/, ichu/
'UL'/
836 null = n.LE.0.OR.m.LE.0
849 CALL smake(
'GE',
' ',
' ', m, n, b, nmax, bb, ldb, reset,
853 side = ichs( ics: ics )
871 uplo = ichu( icu: icu )
875 CALL smake(
'SY', uplo,
' ', na, na, a, nmax, aa, lda,
886 CALL smake(
'GE',
' ',
' ', m, n, c, nmax, cc,
916 $
CALL sprcn2(ntra, nc, sname, iorder,
917 $ side, uplo, m, n, alpha, lda, ldb,
921 CALL cssymm( iorder, side, uplo, m, n, alpha,
922 $ aa, lda, bb, ldb, beta, cc, ldc )
927 WRITE( nout, fmt = 9994 )
934 isame( 1 ) = sides.EQ.side
935 isame( 2 ) = uplos.EQ.uplo
938 isame( 5 ) = als.EQ.alpha
939 isame( 6 ) = lse( as, aa, laa )
940 isame( 7 ) = ldas.EQ.lda
941 isame( 8 ) = lse( bs, bb, lbb )
942 isame( 9 ) = ldbs.EQ.ldb
943 isame( 10 ) = bls.EQ.beta
945 isame( 11 ) = lse( cs, cc, lcc )
947 isame( 11 ) = lseres(
'GE',
' ', m, n, cs,
950 isame( 12 ) = ldcs.EQ.ldc
957 same = same.AND.isame( i )
958 IF( .NOT.isame( i ) )
959 $
WRITE( nout, fmt = 9998 )i+1
971 CALL smmch(
'N',
'N', m, n, m, alpha, a,
972 $ nmax, b, nmax, beta, c, nmax,
973 $ ct, g, cc, ldc, eps, err,
974 $ fatal, nout, .true. )
976 CALL smmch(
'N',
'N', m, n, n, alpha, b,
977 $ nmax, a, nmax, beta, c, nmax,
978 $ ct, g, cc, ldc, eps, err,
979 $ fatal, nout, .true. )
981 errmax = max( errmax, err )
1002 IF( errmax.LT.thresh )
THEN
1003 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1004 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1006 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1007 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1012 WRITE( nout, fmt = 9996 )sname
1013 CALL sprcn2(nout, nc, sname, iorder, side, uplo, m, n, alpha, lda,
101910003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1020 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1021 $
'RATIO ', f8.2,
' - SUSPECT *******' )
102210002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1023 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1024 $
'RATIO ', f8.2,
' - SUSPECT *******' )
102510001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1026 $
' (', i6,
' CALL',
'S)' )
102710000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1028 $
' (', i6,
' CALL',
'S)' )
1029 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1030 $
'ANGED INCORRECTLY *******' )
1031 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
1032 9995
FORMAT( 1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
1033 $ f4.1,
', A,', i3,
', B,', i3,
',', f4.1,
', C,', i3,
') ',
1035 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1042 SUBROUTINE sprcn2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N,
1043 $ ALPHA, LDA, LDB, BETA, LDC)
1044 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC
1046 CHARACTER*1 SIDE, UPLO
1048 CHARACTER*14 CRC, CS,CU
1050 IF (side.EQ.
'L')
THEN
1055 IF (uplo.EQ.
'U')
THEN
1060 IF (iorder.EQ.1)
THEN
1061 crc =
' CblasRowMajor'
1063 crc =
' CblasColMajor'
1065 WRITE(nout, fmt = 9995)nc,sname,crc, cs,cu
1066 WRITE(nout, fmt = 9994)m, n, alpha, lda, ldb, beta, ldc
1068 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',')
1069 9994
FORMAT( 20x, 2( i3,
',' ), f4.1,
', A,', i3,
', B,', i3,
',',
1070 $ f4.1,
', ',
'C,', i3,
').' )
1073 SUBROUTINE schk3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1074 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
1075 $ B, BB, BS, CT, G, C, IORDER )
1089 PARAMETER ( ZERO = 0.0, one = 1.0 )
1092 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER
1093 LOGICAL FATAL, REWI, TRACE
1096 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1097 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1098 $ bb( nmax*nmax ), bs( nmax*nmax ),
1099 $ c( nmax, nmax ), ct( nmax ), g( nmax )
1100 INTEGER IDIM( NIDIM )
1102 REAL ALPHA, ALS, ERR, ERRMAX
1103 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
1104 $ lda, ldas, ldb, ldbs, m, ms, n, na, nargs, nc,
1106 LOGICAL LEFT, NULL, RESET, SAME
1107 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
1109 CHARACTER*2 ICHD, ICHS, ICHU
1115 EXTERNAL LSE, LSERES
1121 INTEGER INFOT, NOUTC
1124 COMMON /infoc/infot, noutc, ok
1126 DATA ichu/
'UL'/, icht/
'NTC'/, ichd/
'UN'/, ichs/
'LR'/
1140 DO 140 im = 1, nidim
1143 DO 130 in = 1, nidim
1153 null = m.LE.0.OR.n.LE.0
1156 side = ichs( ics: ics )
1173 uplo = ichu( icu: icu )
1176 transa = icht( ict: ict )
1179 diag = ichd( icd: icd )
1186 CALL smake(
'TR', uplo, diag, na, na, a,
1187 $ nmax, aa, lda, reset, zero )
1191 CALL smake(
'GE',
' ',
' ', m, n, b, nmax,
1192 $ bb, ldb, reset, zero )
1217 IF( sname( 10: 11 ).EQ.
'mm' )
THEN
1219 $
CALL sprcn3( ntra, nc, sname, iorder,
1220 $ side, uplo, transa, diag, m, n, alpha,
1224 CALL cstrmm( iorder, side, uplo, transa,
1225 $ diag, m, n, alpha, aa, lda,
1227 ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN
1229 $
CALL sprcn3( ntra, nc, sname, iorder,
1230 $ side, uplo, transa, diag, m, n, alpha,
1234 CALL cstrsm( iorder, side, uplo, transa,
1235 $ diag, m, n, alpha, aa, lda,
1242 WRITE( nout, fmt = 9994 )
1249 isame( 1 ) = sides.EQ.side
1250 isame( 2 ) = uplos.EQ.uplo
1251 isame( 3 ) = tranas.EQ.transa
1252 isame( 4 ) = diags.EQ.diag
1253 isame( 5 ) = ms.EQ.m
1254 isame( 6 ) = ns.EQ.n
1255 isame( 7 ) = als.EQ.alpha
1256 isame( 8 ) = lse( as, aa, laa )
1257 isame( 9 ) = ldas.EQ.lda
1259 isame( 10 ) = lse( bs, bb, lbb )
1261 isame( 10 ) = lseres(
'GE',
' ', m, n, bs,
1264 isame( 11 ) = ldbs.EQ.ldb
1271 same = same.AND.isame( i )
1272 IF( .NOT.isame( i ) )
1273 $
WRITE( nout, fmt = 9998 )i+1
1281 IF( sname( 10: 11 ).EQ.
'mm' )
THEN
1286 CALL smmch( transa,
'N', m, n, m,
1287 $ alpha, a, nmax, b, nmax,
1288 $ zero, c, nmax, ct, g,
1289 $ bb, ldb, eps, err,
1290 $ fatal, nout, .true. )
1292 CALL smmch(
'N', transa, m, n, n,
1293 $ alpha, b, nmax, a, nmax,
1294 $ zero, c, nmax, ct, g,
1295 $ bb, ldb, eps, err,
1296 $ fatal, nout, .true. )
1298 ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN
1305 c( i, j ) = bb( i + ( j - 1 )*
1307 bb( i + ( j - 1 )*ldb ) = alpha*
1313 CALL smmch( transa,
'N', m, n, m,
1314 $ one, a, nmax, c, nmax,
1315 $ zero, b, nmax, ct, g,
1316 $ bb, ldb, eps, err,
1317 $ fatal, nout, .false. )
1319 CALL smmch(
'N', transa, m, n, n,
1320 $ one, c, nmax, a, nmax,
1321 $ zero, b, nmax, ct, g,
1322 $ bb, ldb, eps, err,
1323 $ fatal, nout, .false. )
1326 errmax = max( errmax, err )
1349 IF( errmax.LT.thresh )
THEN
1350 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1351 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1353 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1354 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1359 WRITE( nout, fmt = 9996 )sname
1361 $
CALL sprcn3( ntra, nc, sname, iorder, side, uplo, transa, diag,
1362 $ m, n, alpha, lda, ldb)
136710003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1368 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1369 $
'RATIO ', f8.2,
' - SUSPECT *******' )
137010002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1371 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1372 $
'RATIO ', f8.2,
' - SUSPECT *******' )
137310001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1374 $
' (', i6,
' CALL',
'S)' )
137510000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1376 $
' (', i6,
' CALL',
'S)' )
1377 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1378 $
'ANGED INCORRECTLY *******' )
1379 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
1380 9995
FORMAT( 1x, i6,
': ', a13,
'(', 4(
'''', a1,
''',' ), 2( i3,
',' ),
1381 $ f4.1,
', A,', i3,
', B,', i3,
') .' )
1382 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1389 SUBROUTINE sprcn3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA,
1390 $ DIAG, M, N, ALPHA, LDA, LDB)
1391 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB
1393 CHARACTER*1 SIDE, UPLO, TRANSA, DIAG
1395 CHARACTER*14 CRC, CS, CU, CA, CD
1397 IF (SIDE.EQ.
'L')THEN
1402 IF (uplo.EQ.
'U')
THEN
1407 IF (transa.EQ.
'N')
THEN
1408 ca =
' CblasNoTrans'
1409 ELSE IF (transa.EQ.
'T')
THEN
1412 ca =
'CblasConjTrans'
1414 IF (diag.EQ.
'N')
THEN
1415 cd =
' CblasNonUnit'
1419 IF (iorder.EQ.1)
THEN
1420 crc =
'CblasRowMajor'
1422 crc =
'CblasColMajor'
1424 WRITE(nout, fmt = 9995)nc,sname,crc, cs,cu
1425 WRITE(nout, fmt = 9994)ca, cd, m, n, alpha, lda, ldb
1427 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',')
1428 9994
FORMAT( 22x, 2( a14,
',') , 2( i3,
',' ),
1429 $ f4.1,
', A,', i3,
', B,', i3,
').' )
1432 SUBROUTINE schk4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1433 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1434 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
1449 PARAMETER ( ZERO = 0.0 )
1452 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1453 LOGICAL FATAL, REWI, TRACE
1456 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1457 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1458 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1459 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1460 $ CS( NMAX*NMAX ), CT( NMAX ), G( NMAX )
1461 INTEGER IDIM( NIDIM )
1463 REAL ALPHA, ALS, BETA, BETS, ERR, ERRMAX
1464 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1465 $ laa, lcc, lda, ldas, ldc, ldcs, lj, ma, n, na,
1467 LOGICAL NULL, RESET, SAME, TRAN, UPPER
1468 CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS
1475 EXTERNAL lse, lseres
1481 INTEGER INFOT, NOUTC
1484 COMMON /infoc/infot, noutc, ok
1486 DATA icht/
'NTC'/, ichu/
'UL'/
1494 DO 100 in = 1, nidim
1510 trans = icht( ict: ict )
1511 tran = trans.EQ.
'T'.OR.trans.EQ.
'C'
1530 CALL smake(
'GE',
' ',
' ', ma, na, a, nmax, aa, lda,
1534 uplo = ichu( icu: icu )
1545 CALL smake(
'SY', uplo,
' ', n, n, c, nmax, cc,
1546 $ ldc, reset, zero )
1570 $
CALL sprcn4( ntra, nc, sname, iorder, uplo,
1571 $ trans, n, k, alpha, lda, beta, ldc)
1574 CALL cssyrk( iorder, uplo, trans, n, k, alpha,
1575 $ aa, lda, beta, cc, ldc )
1580 WRITE( nout, fmt = 9993 )
1587 isame( 1 ) = uplos.EQ.uplo
1588 isame( 2 ) = transs.EQ.trans
1589 isame( 3 ) = ns.EQ.n
1590 isame( 4 ) = ks.EQ.k
1591 isame( 5 ) = als.EQ.alpha
1592 isame( 6 ) = lse( as, aa, laa )
1593 isame( 7 ) = ldas.EQ.lda
1594 isame( 8 ) = bets.EQ.beta
1596 isame( 9 ) = lse( cs, cc, lcc )
1598 isame( 9 ) = lseres(
'SY', uplo, n, n, cs,
1601 isame( 10 ) = ldcs.EQ.ldc
1608 same = same.AND.isame( i )
1609 IF( .NOT.isame( i ) )
1610 $
WRITE( nout, fmt = 9998 )i+1
1631 CALL smmch(
'T',
'N', lj, 1, k, alpha,
1633 $ a( 1, j ), nmax, beta,
1634 $ c( jj, j ), nmax, ct, g,
1635 $ cc( jc ), ldc, eps, err,
1636 $ fatal, nout, .true. )
1638 CALL smmch(
'N',
'T', lj, 1, k, alpha,
1640 $ a( j, 1 ), nmax, beta,
1641 $ c( jj, j ), nmax, ct, g,
1642 $ cc( jc ), ldc, eps, err,
1643 $ fatal, nout, .true. )
1650 errmax = max( errmax, err )
1672 IF( errmax.LT.thresh )
THEN
1673 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1674 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1676 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1677 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1683 $
WRITE( nout, fmt = 9995 )j
1686 WRITE( nout, fmt = 9996 )sname
1687 CALL sprcn4( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
169310003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1694 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1695 $
'RATIO ', f8.2,
' - SUSPECT *******' )
169610002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1697 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1698 $
'RATIO ', f8.2,
' - SUSPECT *******' )
169910001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1700 $
' (', i6,
' CALL',
'S)' )
170110000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1702 $
' (', i6,
' CALL',
'S)' )
1703 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1704 $
'ANGED INCORRECTLY *******' )
1705 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
1706 9995
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
1707 9994
FORMAT( 1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
1708 $ f4.1,
', A,', i3,
',', f4.1,
', C,', i3,
') .' )
1709 9993
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1716 SUBROUTINE sprcn4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
1717 $ N, K, ALPHA, LDA, BETA, LDC)
1718 INTEGER NOUT, NC, IORDER, N, K, LDA, LDC
1720 CHARACTER*1 UPLO, TRANSA
1722 CHARACTER*14 CRC, CU, CA
1724 IF (uplo.EQ.
'U')
THEN
1729 IF (transa.EQ.
'N')
THEN
1730 ca =
' CblasNoTrans'
1731 ELSE IF (transa.EQ.
'T')
THEN
1734 ca =
'CblasConjTrans'
1736 IF (iorder.EQ.1)
THEN
1737 crc =
' CblasRowMajor'
1739 crc =
' CblasColMajor'
1741 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
1742 WRITE(nout, fmt = 9994)n, k, alpha, lda, beta, ldc
1744 9995
FORMAT( 1x, i6,
': ', a13,
'(', 3( a14,
',') )
1745 9994
FORMAT( 20x, 2( i3,
',' ),
1746 $ f4.1,
', A,', i3,
',', f4.1,
', C,', i3,
').' )
1749 SUBROUTINE schk5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1750 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1751 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W,
1766 PARAMETER ( ZERO = 0.0 )
1769 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1770 LOGICAL FATAL, REWI, TRACE
1773 REAL AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1774 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1775 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1776 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1777 $ G( NMAX ), W( 2*NMAX )
1778 INTEGER IDIM( NIDIM )
1780 REAL ALPHA, ALS, BETA, BETS, ERR, ERRMAX
1781 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1782 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1783 $ ldc, ldcs, lj, ma, n, na, nargs, nc, ns
1784 LOGICAL NULL, RESET, SAME, TRAN, UPPER
1785 CHARACTER*1 TRANS, TRANSS, UPLO, UPLOS
1792 EXTERNAL LSE, LSERES
1794 EXTERNAL SMAKE, SMMCH, CSSYR2K
1798 INTEGER INFOT, NOUTC
1801 COMMON /INFOC/INFOT, NOUTC, OK
1803 DATA icht/
'NTC'/, ichu/
'UL'/
1811 DO 130 in = 1, nidim
1823 DO 120 ik = 1, nidim
1827 trans = icht( ict: ict )
1828 tran = trans.EQ.
'T'.OR.trans.EQ.
'C'
1848 CALL smake(
'GE',
' ',
' ', ma, na, ab, 2*nmax, aa,
1849 $ lda, reset, zero )
1851 CALL smake(
'GE',
' ',
' ', ma, na, ab, nmax, aa, lda,
1860 CALL smake(
'GE',
' ',
' ', ma, na, ab( k + 1 ),
1861 $ 2*nmax, bb, ldb, reset, zero )
1863 CALL smake(
'GE',
' ',
' ', ma, na, ab( k*nmax + 1 ),
1864 $ nmax, bb, ldb, reset, zero )
1868 uplo = ichu( icu: icu )
1879 CALL smake(
'SY', uplo,
' ', n, n, c, nmax, cc,
1880 $ ldc, reset, zero )
1908 $
CALL sprcn5( ntra, nc, sname, iorder, uplo,
1909 $ trans, n, k, alpha, lda, ldb, beta, ldc)
1912 CALL cssyr2k( iorder, uplo, trans, n, k, alpha,
1913 $ aa, lda, bb, ldb, beta, cc, ldc )
1918 WRITE( nout, fmt = 9993 )
1925 isame( 1 ) = uplos.EQ.uplo
1926 isame( 2 ) = transs.EQ.trans
1927 isame( 3 ) = ns.EQ.n
1928 isame( 4 ) = ks.EQ.k
1929 isame( 5 ) = als.EQ.alpha
1930 isame( 6 ) = lse( as, aa, laa )
1931 isame( 7 ) = ldas.EQ.lda
1932 isame( 8 ) = lse( bs, bb, lbb )
1933 isame( 9 ) = ldbs.EQ.ldb
1934 isame( 10 ) = bets.EQ.beta
1936 isame( 11 ) = lse( cs, cc, lcc )
1938 isame( 11 ) = lseres(
'SY', uplo, n, n, cs,
1941 isame( 12 ) = ldcs.EQ.ldc
1948 same = same.AND.isame( i )
1949 IF( .NOT.isame( i ) )
1950 $
WRITE( nout, fmt = 9998 )i+1
1973 w( i ) = ab( ( j - 1 )*2*nmax + k +
1975 w( k + i ) = ab( ( j - 1 )*2*nmax +
1978 CALL smmch(
'T',
'N', lj, 1, 2*k,
1979 $ alpha, ab( jjab ), 2*nmax,
1981 $ c( jj, j ), nmax, ct, g,
1982 $ cc( jc ), ldc, eps, err,
1983 $ fatal, nout, .true. )
1986 w( i ) = ab( ( k + i - 1 )*nmax +
1988 w( k + i ) = ab( ( i - 1 )*nmax +
1991 CALL smmch(
'N',
'N', lj, 1, 2*k,
1992 $ alpha, ab( jj ), nmax, w,
1993 $ 2*nmax, beta, c( jj, j ),
1994 $ nmax, ct, g, cc( jc ), ldc,
1995 $ eps, err, fatal, nout,
2003 $ jjab = jjab + 2*nmax
2005 errmax = max( errmax, err )
2027 IF( errmax.LT.thresh )
THEN
2028 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
2029 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
2031 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
2032 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
2038 $
WRITE( nout, fmt = 9995 )j
2041 WRITE( nout, fmt = 9996 )sname
2042 CALL sprcn5( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
2043 $ lda, ldb, beta, ldc)
204810003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
2049 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2050 $
'RATIO ', f8.2,
' - SUSPECT *******' )
205110002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
2052 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2053 $
'RATIO ', f8.2,
' - SUSPECT *******' )
205410001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
2055 $
' (', i6,
' CALL',
'S)' )
205610000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
2057 $
' (', i6,
' CALL',
'S)' )
2058 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
2059 $
'ANGED INCORRECTLY *******' )
2060 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
2061 9995
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2062 9994
FORMAT( 1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
2063 $ f4.1,
', A,', i3,
', B,', i3,
',', f4.1,
', C,', i3,
') ',
2065 9993
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2072 SUBROUTINE sprcn5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
2073 $ N, K, ALPHA, LDA, LDB, BETA, LDC)
2074 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
2076 CHARACTER*1 UPLO, TRANSA
2078 CHARACTER*14 CRC, CU, CA
2080 IF (uplo.EQ.
'U')
THEN
2085 IF (transa.EQ.
'N')
THEN
2086 ca =
' CblasNoTrans'
2087 ELSE IF (transa.EQ.
'T')
THEN
2090 ca =
'CblasConjTrans'
2092 IF (iorder.EQ.1)
THEN
2093 crc =
' CblasRowMajor'
2095 crc =
' CblasColMajor'
2097 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
2098 WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
2100 9995
FORMAT( 1x, i6,
': ', a13,
'(', 3( a14,
',') )
2101 9994
FORMAT( 20x, 2( i3,
',' ),
2102 $ f4.1,
', A,', i3,
', B', i3,
',', f4.1,
', C,', i3,
').' )
2105 SUBROUTINE smake( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2124 PARAMETER ( ZERO = 0.0, one = 1.0 )
2126 PARAMETER ( ROGUE = -1.0e10 )
2129 INTEGER LDA, M, N, NMAX
2131 CHARACTER*1 DIAG, UPLO
2134 REAL A( NMAX, * ), AA( * )
2136 INTEGER I, IBEG, IEND, J
2137 LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER
2145 upper = ( sym.OR.tri ).AND.uplo.EQ.
'U'
2146 lower = ( sym.OR.tri ).AND.uplo.EQ.
'L'
2147 unit = tri.AND.diag.EQ.
'U'
2153 IF( gen.OR.( upper.AND.i.LE.j ).OR.( lower.AND.i.GE.j ) )
2155 a( i, j ) = sbeg( reset ) + transl
2158 IF( n.GT.3.AND.j.EQ.n/2 )
2161 a( j, i ) = a( i, j )
2169 $ a( j, j ) = a( j, j ) + one
2176 IF( type.EQ.
'GE' )
THEN
2179 aa( i + ( j - 1 )*lda ) = a( i, j )
2181 DO 40 i = m + 1, lda
2182 aa( i + ( j - 1 )*lda ) = rogue
2185 ELSE IF( type.EQ.
'SY'.OR.type.EQ.
'TR' )
THEN
2202 DO 60 i = 1, ibeg - 1
2203 aa( i + ( j - 1 )*lda ) = rogue
2205 DO 70 i = ibeg, iend
2206 aa( i + ( j - 1 )*lda ) = a( i, j )
2208 DO 80 i = iend + 1, lda
2209 aa( i + ( j - 1 )*lda ) = rogue
2218 SUBROUTINE smmch( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
2219 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
2234 parameter( zero = 0.0, one = 1.0 )
2236 REAL ALPHA, BETA, EPS, ERR
2237 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
2239 CHARACTER*1 TRANSA, TRANSB
2241 REAL A( LDA, * ), B( LDB, * ), C( LDC, * ),
2242 $ CC( LDCC, * ), CT( * ), G( * )
2246 LOGICAL TRANA, TRANB
2248 INTRINSIC ABS, MAX, SQRT
2250 TRANA = transa.EQ.
'T'.OR.transa.EQ.
'C'
2251 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2263 IF( .NOT.trana.AND..NOT.tranb )
THEN
2266 ct( i ) = ct( i ) + a( i, k )*b( k, j )
2267 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( k, j ) )
2270 ELSE IF( trana.AND..NOT.tranb )
THEN
2273 ct( i ) = ct( i ) + a( k, i )*b( k, j )
2274 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( k, j ) )
2277 ELSE IF( .NOT.trana.AND.tranb )
THEN
2280 ct( i ) = ct( i ) + a( i, k )*b( j, k )
2281 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( j, k ) )
2284 ELSE IF( trana.AND.tranb )
THEN
2287 ct( i ) = ct( i ) + a( k, i )*b( j, k )
2288 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( j, k ) )
2293 ct( i ) = alpha*ct( i ) + beta*c( i, j )
2294 g( i ) = abs( alpha )*g( i ) + abs( beta )*abs( c( i, j ) )
2301 erri = abs( ct( i ) - cc( i, j ) )/eps
2302 IF( g( i ).NE.zero )
2303 $ erri = erri/g( i )
2304 err = max( err, erri )
2305 IF( err*sqrt( eps ).GE.one )
2317 WRITE( nout, fmt = 9999 )
2320 WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
2322 WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
2326 $
WRITE( nout, fmt = 9997 )j
2331 9999
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2332 $
'F ACCURATE *******', /
' EXPECTED RESULT COMPU',
2334 9998
FORMAT( 1x, i7, 2g18.6 )
2335 9997
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2340 LOGICAL FUNCTION lse( RI, RJ, LR )
2355 REAL ri( * ), rj( * )
2360 IF( ri( i ).NE.rj( i ) )
2372 LOGICAL FUNCTION lseres( TYPE, UPLO, M, N, AA, AS, LDA )
2391 REAL aa( lda, * ), as( lda, * )
2393 INTEGER i, ibeg, iend, j
2397 IF( type.EQ.
'GE' )
THEN
2399 DO 10 i = m + 1, lda
2400 IF( aa( i, j ).NE.as( i, j ) )
2404 ELSE IF( type.EQ.
'SY' )
THEN
2413 DO 30 i = 1, ibeg - 1
2414 IF( aa( i, j ).NE.as( i, j ) )
2417 DO 40 i = iend + 1, lda
2418 IF( aa( i, j ).NE.as( i, j ) )
2469 i = i - 1000*( i/1000 )
2474 sbeg = ( i - 500 )/1001.0
2501 SUBROUTINE schk6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
2502 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
2503 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
2515 PARAMETER ( ZERO = 0.0 )
2518 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
2519 LOGICAL FATAL, REWI, TRACE
2522 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
2523 $ as( nmax*nmax ), b( nmax, nmax ),
2524 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
2525 $ c( nmax, nmax ), cc( nmax*nmax ),
2526 $ cs( nmax*nmax ), ct( nmax ), g( nmax )
2527 INTEGER IDIM( NIDIM )
2529 REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX
2530 INTEGER I, IA, IB, ICA, ICB, IK, IN, K, KS, LAA,
2531 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS,
2532 $ MA, MB, N, NA, NARGS, NB, NC, NS, IS
2533 LOGICAL NULL, RESET, SAME, TRANA, TRANB
2534 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB, UPLO, UPLOS
2541 EXTERNAL LSE, LSERES
2547 INTEGER INFOT, NOUTC
2550 COMMON /INFOC/INFOT, NOUTC, OK, LERR
2561 DO 100 in = 1, nidim
2577 transa = ich( ica: ica )
2578 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
2598 CALL smake(
'GE',
' ',
' ', ma, na, a, nmax, aa, lda,
2602 transb = ich( icb: icb )
2603 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2623 CALL smake(
'GE',
' ',
' ', mb, nb, b, nmax, bb,
2624 $ ldb, reset, zero )
2633 uplo = ishape( is: is )
2638 CALL smake(
'GE', uplo,
' ', n, n, c,
2639 $ nmax, cc, ldc, reset, zero )
2669 $
CALL sprcn8(ntra, nc, sname, iorder, uplo,
2670 $ transa, transb, n, k, alpha, lda,
2674 CALL csgemmtr( iorder, uplo, transa, transb,
2675 $ n, k, alpha, aa, lda, bb, ldb,
2681 WRITE( nout, fmt = 9994 )
2688 isame( 1 ) = uplo.EQ.uplos
2689 isame( 2 ) = transa.EQ.tranas
2690 isame( 3 ) = transb.EQ.tranbs
2691 isame( 4 ) = ns.EQ.n
2692 isame( 5 ) = ks.EQ.k
2693 isame( 6 ) = als.EQ.alpha
2694 isame( 7 ) = lse( as, aa, laa )
2695 isame( 8 ) = ldas.EQ.lda
2696 isame( 9 ) = lse( bs, bb, lbb )
2697 isame( 10 ) = ldbs.EQ.ldb
2698 isame( 11 ) = bls.EQ.beta
2700 isame( 12 ) = lse( cs, cc, lcc )
2702 isame( 12 ) = lseres(
'GE',
' ', n, n,
2705 isame( 13 ) = ldcs.EQ.ldc
2712 same = same.AND.isame( i )
2713 IF( .NOT.isame( i ) )
2714 $
WRITE( nout, fmt = 9998 )i
2725 CALL smmtch( uplo, transa, transb,
2727 $ alpha, a, nmax, b, nmax, beta,
2728 $ c, nmax, ct, g, cc, ldc, eps,
2729 $ err, fatal, nout, .true. )
2730 errmax = max( errmax, err )
2754 IF( errmax.LT.thresh )
THEN
2755 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
2756 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
2758 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
2759 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
2764 WRITE( nout, fmt = 9996 )sname
2765 CALL sprcn8(nout, nc, sname, iorder, uplo, transa, transb,
2766 $ n, k, alpha, lda, ldb, beta, ldc)
277110003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
2772 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2773 $
'RATIO ', f8.2,
' - SUSPECT *******' )
277410002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
2775 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2776 $
'RATIO ', f8.2,
' - SUSPECT *******' )
277710001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
2778 $
' (', i6,
' CALL',
'S)' )
277910000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
2780 $
' (', i6,
' CALL',
'S)' )
2781 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
2782 $
'ANGED INCORRECTLY *******' )
2783 9997
FORMAT(
' ', a13,
' COMPLETED THE COMPUTATIONAL TESTS (', i6,
' C'
2784 $
'ALLS)', /
' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
2785 $
' - SUSPECT *******' )
2786 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
2787 9995
FORMAT( 1x, i6,
': ', a13,
'(''',a1,
''',''',a1,
''',''', a1,
''','
2788 $ 2( i3,
',' ), f4.1,
', A,', i3,
', B,', i3,
',', f4.1,
', ',
2790 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2797 SUBROUTINE sprcn8(NOUT, NC, SNAME, IORDER, UPLO,
2798 $ TRANSA, TRANSB, N,
2799 $ K, ALPHA, LDA, LDB, BETA, LDC)
2800 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
2802 CHARACTER*1 TRANSA, TRANSB, UPLO
2804 CHARACTER*14 CRC, CTA,CTB,CUPLO
2806 IF (uplo.EQ.
'U')
THEN
2807 cuplo =
'CblasUpper'
2809 cuplo =
'CblasLower'
2811 IF (transa.EQ.
'N')
THEN
2812 cta =
' CblasNoTrans'
2813 ELSE IF (transa.EQ.
'T')
THEN
2816 cta =
'CblasConjTrans'
2818 IF (transb.EQ.
'N')
THEN
2819 ctb =
' CblasNoTrans'
2820 ELSE IF (transb.EQ.
'T')
THEN
2823 ctb =
'CblasConjTrans'
2825 IF (iorder.EQ.1)
THEN
2826 crc =
' CblasRowMajor'
2828 crc =
' CblasColMajor'
2830 WRITE(nout, fmt = 9995)nc,sname,crc, cuplo, cta,ctb
2831 WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
2833 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',',
2835 9994
FORMAT( 10x, 2( i3,
',' ) ,
' ', f4.1,
' , A,',
2836 $ i3,
', B,', i3,
', ', f4.1,
' , C,', i3,
').' )
2839 SUBROUTINE smmtch( UPLO, TRANSA, TRANSB, N, KK, ALPHA, A, LDA,
2840 $ B, LDB, BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR,
2852 parameter( zero = 0.0, one = 1.0 )
2854 REAL ALPHA, BETA, EPS, ERR
2855 INTEGER KK, LDA, LDB, LDC, LDCC, N, NOUT
2857 CHARACTER*1 UPLO, TRANSA, TRANSB
2859 REAL A( LDA, * ), B( LDB, * ), C( LDC, * ),
2860 $ cc( ldcc, * ), ct( * ), g( * )
2863 INTEGER I, J, K, ISTART, ISTOP
2864 LOGICAL TRANA, TRANB, UPPER
2866 INTRINSIC abs, max, sqrt
2869 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
2870 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2888 DO 10 i = istart, istop
2892 IF( .NOT.trana.AND..NOT.tranb )
THEN
2894 DO 20 i = istart, istop
2895 ct( i ) = ct( i ) + a( i, k )*b( k, j )
2896 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( k, j ) )
2899 ELSE IF( trana.AND..NOT.tranb )
THEN
2901 DO 40 i = istart, istop
2902 ct( i ) = ct( i ) + a( k, i )*b( k, j )
2903 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( k, j ) )
2906 ELSE IF( .NOT.trana.AND.tranb )
THEN
2908 DO 60 i = istart, istop
2909 ct( i ) = ct( i ) + a( i, k )*b( j, k )
2910 g( i ) = g( i ) + abs( a( i, k ) )*abs( b( j, k ) )
2913 ELSE IF( trana.AND.tranb )
THEN
2915 DO 80 i = istart, istop
2916 ct( i ) = ct( i ) + a( k, i )*b( j, k )
2917 g( i ) = g( i ) + abs( a( k, i ) )*abs( b( j, k ) )
2921 DO 100 i = istart, istop
2922 ct( i ) = alpha*ct( i ) + beta*c( i, j )
2923 g( i ) = abs( alpha )*g( i ) + abs( beta )*abs( c( i, j ) )
2929 DO 110 i = istart, istop
2930 erri = abs( ct( i ) - cc( i, j ) )/eps
2931 IF( g( i ).NE.zero )
2932 $ erri = erri/g( i )
2933 err = max( err, erri )
2934 IF( err*sqrt( eps ).GE.one )
2946 WRITE( nout, fmt = 9999 )
2947 DO 140 i = istart, istop
2949 WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
2951 WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
2955 $
WRITE( nout, fmt = 9997 )j
2960 9999
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2961 $
'F ACCURATE *******', /
' EXPECTED RESULT COMPU',
2963 9998
FORMAT( 1x, i7, 2g18.6 )
2964 9997
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
subroutine sprcn5(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, ldb, beta, ldc)
subroutine sprcn3(nout, nc, sname, iorder, side, uplo, transa, diag, m, n, alpha, lda, ldb)
subroutine sprcn2(nout, nc, sname, iorder, side, uplo, m, n, alpha, lda, ldb, beta, ldc)
subroutine sprcn4(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
subroutine sprcn1(nout, nc, sname, iorder, transa, transb, m, n, k, alpha, lda, ldb, beta, ldc)
subroutine sprcn8(nout, nc, sname, iorder, uplo, transa, transb, n, k, alpha, lda, ldb, beta, ldc)
real function sdiff(sa, sb)
subroutine schk6(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 schk3(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 schk4(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 lseres(type, uplo, m, n, aa, as, lda)
subroutine schk2(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 schk1(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 schk5(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)
real function sbeg(reset)
subroutine smake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
logical function lse(ri, rj, lr)
subroutine smmtch(uplo, transa, transb, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)
subroutine smmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)