51 parameter( nin = 5, nout = 6 )
53 parameter( nsubs = 10 )
55 parameter( zero = ( 0.0d0, 0.0d0 ),
56 $ one = ( 1.0d0, 0.0d0 ) )
57 DOUBLE PRECISION rzero, rhalf, rone
58 parameter( rzero = 0.0d0, rhalf = 0.5d0, rone = 1.0d0 )
60 parameter( nmax = 65 )
61 INTEGER nidmax, nalmax, nbemax
62 parameter( nidmax = 9, nalmax = 7, nbemax = 7 )
64 DOUBLE PRECISION eps, err, thresh
65 INTEGER i, isnum, j, n, nalf, nbet, nidim, ntra,
67 LOGICAL fatal, ltestt, rewi, same, sfatal, trace,
68 $ tsterr, corder, rorder
69 CHARACTER*1 transa, transb
73 COMPLEX*16 aa( nmax*nmax ), ab( nmax, 2*nmax ),
74 $ alf( nalmax ), as( nmax*nmax ),
75 $ bb( nmax*nmax ), bet( nbemax ),
76 $ bs( nmax*nmax ), c( nmax, nmax ),
77 $ cc( nmax*nmax ), cs( nmax*nmax ), ct( nmax ),
79 DOUBLE PRECISION g( nmax )
80 INTEGER idim( nidmax )
81 LOGICAL ltest( nsubs )
82 CHARACTER*13 snames( nsubs )
84 DOUBLE PRECISION ddiff
96 COMMON /infoc/infot, noutc, ok, lerr
99 DATA snames/
'cblas_zgemm ',
'cblas_zhemm ',
100 $
'cblas_zsymm ',
'cblas_ztrmm ',
'cblas_ztrsm ',
101 $
'cblas_zherk ',
'cblas_zsyrk ',
'cblas_zher2k',
102 $
'cblas_zsyr2k',
'cblas_zgemmtr'/
109 READ( nin, fmt = * )snaps
110 READ( nin, fmt = * )ntra
113 OPEN( ntra, file = snaps, status =
'NEW' )
116 READ( nin, fmt = * )rewi
117 rewi = rewi.AND.trace
119 READ( nin, fmt = * )sfatal
121 READ( nin, fmt = * )tsterr
123 READ( nin, fmt = * )layout
125 READ( nin, fmt = * )thresh
130 READ( nin, fmt = * )nidim
131 IF( nidim.LT.1.OR.nidim.GT.nidmax )
THEN
132 WRITE( nout, fmt = 9997 )
'N', nidmax
135 READ( nin, fmt = * )( idim( i ), i = 1, nidim )
137 IF( idim( i ).LT.0.OR.idim( i ).GT.nmax )
THEN
138 WRITE( nout, fmt = 9996 )nmax
143 READ( nin, fmt = * )nalf
144 IF( nalf.LT.1.OR.nalf.GT.nalmax )
THEN
145 WRITE( nout, fmt = 9997 )
'ALPHA', nalmax
148 READ( nin, fmt = * )( alf( i ), i = 1, nalf )
150 READ( nin, fmt = * )nbet
151 IF( nbet.LT.1.OR.nbet.GT.nbemax )
THEN
152 WRITE( nout, fmt = 9997 )
'BETA', nbemax
155 READ( nin, fmt = * )( bet( i ), i = 1, nbet )
159 WRITE( nout, fmt = 9995 )
160 WRITE( nout, fmt = 9994 )( idim( i ), i = 1, nidim )
161 WRITE( nout, fmt = 9993 )( alf( i ), i = 1, nalf )
162 WRITE( nout, fmt = 9992 )( bet( i ), i = 1, nbet )
163 IF( .NOT.tsterr )
THEN
164 WRITE( nout, fmt = * )
165 WRITE( nout, fmt = 9984 )
167 WRITE( nout, fmt = * )
168 WRITE( nout, fmt = 9999 )thresh
169 WRITE( nout, fmt = * )
173 IF (layout.EQ.2)
THEN
176 WRITE( *, fmt = 10002 )
177 ELSE IF (layout.EQ.1)
THEN
179 WRITE( *, fmt = 10001 )
180 ELSE IF (layout.EQ.0)
THEN
182 WRITE( *, fmt = 10000 )
193 30
READ( nin, fmt = 9988,
END = 60 )SNAMET, ltestt
195 IF( snamet.EQ.snames( i ) )
198 WRITE( nout, fmt = 9990 )snamet
200 50 ltest( i ) = ltestt
210 IF(
ddiff( rone + eps, rone ).EQ.rzero )
216 WRITE( nout, fmt = 9998 )eps
223 ab( i, j ) = max( i - j + 1, 0 )
225 ab( j, nmax + 1 ) = j
226 ab( 1, nmax + j ) = j
230 cc( j ) = j*( ( j + 1 )*j )/2 - ( ( j + 1 )*j*( j - 1 ) )/3
236 CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
237 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
238 $ nmax, eps, err, fatal, nout, .true. )
239 same =
lze( cc, ct, n )
240 IF( .NOT.same.OR.err.NE.rzero )
THEN
241 WRITE( nout, fmt = 9989 )transa, transb, same, err
245 CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
246 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
247 $ nmax, eps, err, fatal, nout, .true. )
248 same =
lze( cc, ct, n )
249 IF( .NOT.same.OR.err.NE.rzero )
THEN
250 WRITE( nout, fmt = 9989 )transa, transb, same, err
254 ab( j, nmax + 1 ) = n - j + 1
255 ab( 1, nmax + j ) = n - j + 1
258 cc( n - j + 1 ) = j*( ( j + 1 )*j )/2 -
259 $ ( ( j + 1 )*j*( j - 1 ) )/3
263 CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
264 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
265 $ nmax, eps, err, fatal, nout, .true. )
266 same =
lze( cc, ct, n )
267 IF( .NOT.same.OR.err.NE.rzero )
THEN
268 WRITE( nout, fmt = 9989 )transa, transb, same, err
272 CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
273 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
274 $ nmax, eps, err, fatal, nout, .true. )
275 same =
lze( cc, ct, n )
276 IF( .NOT.same.OR.err.NE.rzero )
THEN
277 WRITE( nout, fmt = 9989 )transa, transb, same, err
283 DO 200 isnum = 1, nsubs
284 WRITE( nout, fmt = * )
285 IF( .NOT.ltest( isnum ) )
THEN
287 WRITE( nout, fmt = 9987 )snames( isnum )
289 srnamt = snames( isnum )
292 CALL cz3chke( snames( isnum ) )
293 WRITE( nout, fmt = * )
299 GO TO ( 140, 150, 150, 160, 160, 170, 170,
300 $ 180, 180, 185) isnum
303 CALL zchk1(snames( isnum ), eps, thresh, nout, ntra, trace,
304 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
305 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
309 CALL zchk1(snames( isnum ), eps, thresh, nout, ntra, trace,
310 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
311 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
317 CALL zchk2(snames( isnum ), eps, thresh, nout, ntra, trace,
318 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
319 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
323 CALL zchk2(snames( isnum ), eps, thresh, nout, ntra, trace,
324 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
325 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
331 CALL zchk3(snames( isnum ), eps, thresh, nout, ntra, trace,
332 $ rewi, fatal, nidim, idim, nalf, alf, nmax, ab,
333 $ aa, as, ab( 1, nmax + 1 ), bb, bs, ct, g, c,
337 CALL zchk3(snames( isnum ), eps, thresh, nout, ntra, trace,
338 $ rewi, fatal, nidim, idim, nalf, alf, nmax, ab,
339 $ aa, as, ab( 1, nmax + 1 ), bb, bs, ct, g, c,
345 CALL zchk4(snames( isnum ), eps, thresh, nout, ntra, trace,
346 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
347 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
351 CALL zchk4(snames( isnum ), eps, thresh, nout, ntra, trace,
352 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
353 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
359 CALL zchk5(snames( isnum ), eps, thresh, nout, ntra, trace,
360 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
361 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
365 CALL zchk5(snames( isnum ), eps, thresh, nout, ntra, trace,
366 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
367 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
373 CALL zchk6(snames( isnum ), eps, thresh, nout, ntra, trace,
374 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
375 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
379 CALL zchk6(snames( isnum ), eps, thresh, nout, ntra, trace,
380 $ rewi, fatal, nidim, idim, nalf, alf, nbet, bet,
381 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
386 190
IF( fatal.AND.sfatal )
390 WRITE( nout, fmt = 9986 )
394 WRITE( nout, fmt = 9985 )
398 WRITE( nout, fmt = 9991 )
40610002
FORMAT(
' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' )
40710001
FORMAT(
' ROW-MAJOR DATA LAYOUT IS TESTED' )
40810000
FORMAT(
' COLUMN-MAJOR DATA LAYOUT IS TESTED' )
409 9999
FORMAT(
' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
411 9998
FORMAT(
' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1p, e9.1 )
412 9997
FORMAT(
' NUMBER OF VALUES OF ', a,
' IS LESS THAN 1 OR GREATER ',
414 9996
FORMAT(
' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', i2 )
415 9995
FORMAT(
'TESTS OF THE COMPLEX*16 LEVEL 3 BLAS', //
' THE F',
416 $
'OLLOWING PARAMETER VALUES WILL BE USED:' )
417 9994
FORMAT(
' FOR N ', 9i6 )
418 9993
FORMAT(
' FOR ALPHA ',
419 $ 7(
'(', f4.1,
',', f4.1,
') ', : ) )
420 9992
FORMAT(
' FOR BETA ',
421 $ 7(
'(', f4.1,
',', f4.1,
') ', : ) )
422 9991
FORMAT(
' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
423 $ /
' ******* TESTS ABANDONED *******' )
424 9990
FORMAT(
' SUBPROGRAM NAME ', a13,
' NOT RECOGNIZED', /
' ******* T',
425 $
'ESTS ABANDONED *******' )
426 9989
FORMAT(
' ERROR IN ZMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
427 $
'ATED WRONGLY.', /
' ZMMCH WAS CALLED WITH TRANSA = ', a1,
428 $
'AND TRANSB = ', a1, /
' AND RETURNED SAME = ', l1,
' AND ',
429 $
' ERR = ', f12.3,
'.', /
' THIS MAY BE DUE TO FAULTS IN THE ',
430 $
'ARITHMETIC OR THE COMPILER.', /
' ******* TESTS ABANDONED ',
432 9988
FORMAT( a13,l2 )
433 9987
FORMAT( 1x, a13,
' WAS NOT TESTED' )
434 9986
FORMAT( /
' END OF TESTS' )
435 9985
FORMAT( /
' ******* FATAL ERROR - TESTS ABANDONED *******' )
436 9984
FORMAT(
' ERROR-EXITS WILL NOT BE TESTED' )
441 SUBROUTINE zchk1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
442 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
443 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
458 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
459 double precision rzero
460 parameter( rzero = 0.0 )
462 DOUBLE PRECISION EPS, THRESH
463 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
464 LOGICAL FATAL, REWI, TRACE
467 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
468 $ as( nmax*nmax ), b( nmax, nmax ),
469 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
470 $ c( nmax, nmax ), cc( nmax*nmax ),
471 $ cs( nmax*nmax ), ct( nmax )
472 DOUBLE PRECISION G( NMAX )
473 INTEGER IDIM( NIDIM )
475 COMPLEX*16 ALPHA, ALS, BETA, BLS
476 DOUBLE PRECISION ERR, ERRMAX
477 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
478 $ lbb, lcc, lda, ldas, ldb, ldbs, ldc, ldcs, m,
479 $ ma, mb, ms, n, na, nargs, nb, nc, ns
480 LOGICAL NULL, RESET, SAME, TRANA, TRANB
481 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
496 COMMON /infoc/infot, noutc, ok, lerr
519 null = n.LE.0.OR.m.LE.0
525 transa = ich( ica: ica )
526 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
546 CALL zmake(
'ge',
' ',
' ', ma, na, a, nmax, aa, lda,
550 transb = ich( icb: icb )
551 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
571 CALL zmake(
'ge',
' ',
' ', mb, nb, b, nmax, bb,
582 CALL zmake(
'ge',
' ',
' ', m, n, c, nmax,
583 $ cc, ldc, reset, zero )
613 $
CALL zprcn1(ntra, nc, sname, iorder,
614 $ transa, transb, m, n, k, alpha, lda,
618 CALL czgemm( iorder, transa, transb, m, n,
619 $ k, alpha, aa, lda, bb, ldb,
625 WRITE( nout, fmt = 9994 )
632 isame( 1 ) = transa.EQ.tranas
633 isame( 2 ) = transb.EQ.tranbs
637 isame( 6 ) = als.EQ.alpha
638 isame( 7 ) = lze( as, aa, laa )
639 isame( 8 ) = ldas.EQ.lda
640 isame( 9 ) = lze( bs, bb, lbb )
641 isame( 10 ) = ldbs.EQ.ldb
642 isame( 11 ) = bls.EQ.beta
644 isame( 12 ) = lze( cs, cc, lcc )
646 isame( 12 ) = lzeres(
'ge',
' ', m, n, cs,
649 isame( 13 ) = ldcs.EQ.ldc
656 same = same.AND.isame( i )
657 IF( .NOT.isame( i ) )
658 $
WRITE( nout, fmt = 9998 )i
669 CALL zmmch( transa, transb, m, n, k,
670 $ alpha, a, nmax, b, nmax, beta,
671 $ c, nmax, ct, g, cc, ldc, eps,
672 $ err, fatal, nout, .true. )
673 errmax = max( errmax, err )
696 IF( errmax.LT.thresh )
THEN
697 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
698 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
700 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
701 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
706 WRITE( nout, fmt = 9996 )sname
707 CALL zprcn1(nout, nc, sname, iorder, transa, transb,
708 $ m, n, k, alpha, lda, ldb, beta, ldc)
71310003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
714 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
715 $
'RATIO ', f8.2,
' - SUSPECT *******' )
71610002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
717 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
718 $
'RATIO ', f8.2,
' - SUSPECT *******' )
71910001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
720 $
' (', i6,
' CALL',
'S)' )
72110000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
722 $
' (', i6,
' CALL',
'S)' )
723 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
724 $
'ANGED INCORRECTLY *******' )
725 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
726 9995
FORMAT( 1x, i6,
': ', a13,
'(''', a1,
''',''', a1,
''',',
727 $ 3( i3,
',' ),
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
728 $
',(', f4.1,
',', f4.1,
'), C,', i3,
').' )
729 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
441 SUBROUTINE zchk1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
…
736 SUBROUTINE zprcn1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N,
737 $ K, ALPHA, LDA, LDB, BETA, LDC)
738 INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC
739 DOUBLE COMPLEX ALPHA, BETA
740 CHARACTER*1 TRANSA, TRANSB
742 CHARACTER*14 CRC, CTA,CTB
744 IF (transa.EQ.
'N')
THEN
745 cta =
' CblasNoTrans'
746 ELSE IF (transa.EQ.
'T')
THEN
749 cta =
'CblasConjTrans'
751 IF (transb.EQ.
'N')
THEN
752 ctb =
' CblasNoTrans'
753 ELSE IF (transb.EQ.
'T')
THEN
756 ctb =
'CblasConjTrans'
759 crc =
' CblasRowMajor'
761 crc =
' CblasColMajor'
763 WRITE(nout, fmt = 9995)nc,sname,crc, cta,ctb
764 WRITE(nout, fmt = 9994)m, n, k, alpha, lda, ldb, beta, ldc
766 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',')
767 9994
FORMAT( 10x, 3( i3,
',' ) ,
' (', f4.1,
',',f4.1,
') , A,',
768 $ i3,
', B,', i3,
', (', f4.1,
',',f4.1,
') , C,', i3,
').' )
736 SUBROUTINE zprcn1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N,
…
771 SUBROUTINE zchk2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
772 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
773 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
788 PARAMETER ( ZERO = ( 0.0d0, 0.0d0 ) )
789 DOUBLE PRECISION RZERO
790 PARAMETER ( RZERO = 0.0d0 )
792 DOUBLE PRECISION EPS, THRESH
793 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
794 LOGICAL FATAL, REWI, TRACE
797 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
798 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
799 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
800 $ c( nmax, nmax ), cc( nmax*nmax ),
801 $ cs( nmax*nmax ), ct( nmax )
802 DOUBLE PRECISION G( NMAX )
803 INTEGER IDIM( NIDIM )
805 COMPLEX*16 ALPHA, ALS, BETA, BLS
806 DOUBLE PRECISION ERR, ERRMAX
807 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
808 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
810 LOGICAL CONJ, LEFT, NULL, RESET, SAME
811 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
812 CHARACTER*2 ICHS, ICHU
826 COMMON /infoc/infot, noutc, ok, lerr
828 DATA ichs/
'LR'/, ichu/
'UL'/
830 conj = sname( 8: 9 ).EQ.
'he'
850 null = n.LE.0.OR.m.LE.0
862 CALL zmake(
'ge',
' ',
' ', m, n, b, nmax, bb, ldb, reset,
866 side = ichs( ics: ics )
884 uplo = ichu( icu: icu )
888 CALL zmake(sname( 8: 9 ), uplo,
' ', na, na, a, nmax,
889 $ aa, lda, reset, zero )
899 CALL zmake(
'ge',
' ',
' ', m, n, c, nmax, cc,
929 $
CALL zprcn2(ntra, nc, sname, iorder,
930 $ side, uplo, m, n, alpha, lda, ldb,
935 CALL czhemm( iorder, side, uplo, m, n,
936 $ alpha, aa, lda, bb, ldb, beta,
939 CALL czsymm( iorder, side, uplo, m, n,
940 $ alpha, aa, lda, bb, ldb, beta,
947 WRITE( nout, fmt = 9994 )
954 isame( 1 ) = sides.EQ.side
955 isame( 2 ) = uplos.EQ.uplo
958 isame( 5 ) = als.EQ.alpha
959 isame( 6 ) = lze( as, aa, laa )
960 isame( 7 ) = ldas.EQ.lda
961 isame( 8 ) = lze( bs, bb, lbb )
962 isame( 9 ) = ldbs.EQ.ldb
963 isame( 10 ) = bls.EQ.beta
965 isame( 11 ) = lze( cs, cc, lcc )
967 isame( 11 ) = lzeres(
'ge',
' ', m, n, cs,
970 isame( 12 ) = ldcs.EQ.ldc
977 same = same.AND.isame( i )
978 IF( .NOT.isame( i ) )
979 $
WRITE( nout, fmt = 9998 )i
991 CALL zmmch(
'N',
'N', m, n, m, alpha, a,
992 $ nmax, b, nmax, beta, c, nmax,
993 $ ct, g, cc, ldc, eps, err,
994 $ fatal, nout, .true. )
996 CALL zmmch(
'N',
'N', m, n, n, alpha, b,
997 $ nmax, a, nmax, beta, c, nmax,
998 $ ct, g, cc, ldc, eps, err,
999 $ fatal, nout, .true. )
1001 errmax = max( errmax, err )
1022 IF( errmax.LT.thresh )
THEN
1023 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1024 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1026 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1027 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1032 WRITE( nout, fmt = 9996 )sname
1033 CALL zprcn2(nout, nc, sname, iorder, side, uplo, m, n, alpha, lda,
103910003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1040 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1041 $
'RATIO ', f8.2,
' - SUSPECT *******' )
104210002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1043 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1044 $
'RATIO ', f8.2,
' - SUSPECT *******' )
104510001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1046 $
' (', i6,
' CALL',
'S)' )
104710000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1048 $
' (', i6,
' CALL',
'S)' )
1049 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1050 $
'ANGED INCORRECTLY *******' )
1051 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
1052 9995
FORMAT(1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
1053 $
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
',(', f4.1,
1054 $
',', f4.1,
'), C,', i3,
') .' )
1055 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
771 SUBROUTINE zchk2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
…
1062 SUBROUTINE zprcn2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N,
1063 $ ALPHA, LDA, LDB, BETA, LDC)
1064 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC
1065 DOUBLE COMPLEX ALPHA, BETA
1066 CHARACTER*1 SIDE, UPLO
1068 CHARACTER*14 CRC, CS,CU
1070 IF (side.EQ.
'L')
THEN
1075 IF (uplo.EQ.
'U')
THEN
1080 IF (iorder.EQ.1)
THEN
1081 crc =
' CblasRowMajor'
1083 crc =
' CblasColMajor'
1085 WRITE(nout, fmt = 9995)nc,sname,crc, cs,cu
1086 WRITE(nout, fmt = 9994)m, n, alpha, lda, ldb, beta, ldc
1088 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',')
1089 9994
FORMAT( 10x, 2( i3,
',' ),
' (',f4.1,
',',f4.1,
'), A,', i3,
1090 $
', B,', i3,
', (',f4.1,
',',f4.1,
'), ',
'C,', i3,
').' )
1062 SUBROUTINE zprcn2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N,
…
1093 SUBROUTINE zchk3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1094 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
1095 $ B, BB, BS, CT, G, C, IORDER )
1108 COMPLEX*16 ZERO, ONE
1109 PARAMETER ( ZERO = ( 0.0d0, 0.0d0 ), one = ( 1.0d0, 0.0d0 ) )
1110 DOUBLE PRECISION RZERO
1111 PARAMETER ( RZERO = 0.0d0 )
1113 DOUBLE PRECISION EPS, THRESH
1114 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER
1115 LOGICAL FATAL, REWI, TRACE
1118 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1119 $ as( nmax*nmax ), b( nmax, nmax ),
1120 $ bb( nmax*nmax ), bs( nmax*nmax ),
1121 $ c( nmax, nmax ), ct( nmax )
1122 DOUBLE PRECISION G( NMAX )
1123 INTEGER IDIM( NIDIM )
1125 COMPLEX*16 ALPHA, ALS
1126 DOUBLE PRECISION ERR, ERRMAX
1127 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
1128 $ lda, ldas, ldb, ldbs, m, ms, n, na, nargs, nc,
1130 LOGICAL LEFT, NULL, RESET, SAME
1131 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
1133 CHARACTER*2 ICHD, ICHS, ICHU
1139 EXTERNAL LZE, LZERES
1145 INTEGER INFOT, NOUTC
1148 COMMON /infoc/infot, noutc, ok, lerr
1150 DATA ichu/
'UL'/, icht/
'NTC'/, ichd/
'UN'/, ichs/
'LR'/
1164 DO 140 im = 1, nidim
1167 DO 130 in = 1, nidim
1177 null = m.LE.0.OR.n.LE.0
1180 side = ichs( ics: ics )
1197 uplo = ichu( icu: icu )
1200 transa = icht( ict: ict )
1203 diag = ichd( icd: icd )
1210 CALL zmake(
'tr', uplo, diag, na, na, a,
1211 $ nmax, aa, lda, reset, zero )
1215 CALL zmake(
'ge',
' ',
' ', m, n, b, nmax,
1216 $ bb, ldb, reset, zero )
1241 IF( sname( 10: 11 ).EQ.
'mm' )
THEN
1243 $
CALL zprcn3( ntra, nc, sname, iorder,
1244 $ side, uplo, transa, diag, m, n, alpha,
1248 CALL cztrmm(iorder, side, uplo, transa,
1249 $ diag, m, n, alpha, aa, lda,
1251 ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN
1253 $
CALL zprcn3( ntra, nc, sname, iorder,
1254 $ side, uplo, transa, diag, m, n, alpha,
1258 CALL cztrsm(iorder, side, uplo, transa,
1259 $ diag, m, n, alpha, aa, lda,
1266 WRITE( nout, fmt = 9994 )
1273 isame( 1 ) = sides.EQ.side
1274 isame( 2 ) = uplos.EQ.uplo
1275 isame( 3 ) = tranas.EQ.transa
1276 isame( 4 ) = diags.EQ.diag
1277 isame( 5 ) = ms.EQ.m
1278 isame( 6 ) = ns.EQ.n
1279 isame( 7 ) = als.EQ.alpha
1280 isame( 8 ) = lze( as, aa, laa )
1281 isame( 9 ) = ldas.EQ.lda
1283 isame( 10 ) = lze( bs, bb, lbb )
1285 isame( 10 ) = lzeres(
'ge',
' ', m, n, bs,
1288 isame( 11 ) = ldbs.EQ.ldb
1295 same = same.AND.isame( i )
1296 IF( .NOT.isame( i ) )
1297 $
WRITE( nout, fmt = 9998 )i
1305 IF( sname( 10: 11 ).EQ.
'mm' )
THEN
1310 CALL zmmch( transa,
'N', m, n, m,
1311 $ alpha, a, nmax, b, nmax,
1312 $ zero, c, nmax, ct, g,
1313 $ bb, ldb, eps, err,
1314 $ fatal, nout, .true. )
1316 CALL zmmch(
'N', transa, m, n, n,
1317 $ alpha, b, nmax, a, nmax,
1318 $ zero, c, nmax, ct, g,
1319 $ bb, ldb, eps, err,
1320 $ fatal, nout, .true. )
1322 ELSE IF( sname( 10: 11 ).EQ.
'sm' )
THEN
1329 c( i, j ) = bb( i + ( j - 1 )*
1331 bb( i + ( j - 1 )*ldb ) = alpha*
1337 CALL zmmch( transa,
'N', m, n, m,
1338 $ one, a, nmax, c, nmax,
1339 $ zero, b, nmax, ct, g,
1340 $ bb, ldb, eps, err,
1341 $ fatal, nout, .false. )
1343 CALL zmmch(
'N', transa, m, n, n,
1344 $ one, c, nmax, a, nmax,
1345 $ zero, b, nmax, ct, g,
1346 $ bb, ldb, eps, err,
1347 $ fatal, nout, .false. )
1350 errmax = max( errmax, err )
1373 IF( errmax.LT.thresh )
THEN
1374 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1375 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1377 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1378 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1383 WRITE( nout, fmt = 9996 )sname
1385 $
CALL zprcn3( ntra, nc, sname, iorder, side, uplo, transa, diag,
1386 $ m, n, alpha, lda, ldb)
139110003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1392 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1393 $
'RATIO ', f8.2,
' - SUSPECT *******' )
139410002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1395 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1396 $
'RATIO ', f8.2,
' - SUSPECT *******' )
139710001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1398 $
' (', i6,
' CALL',
'S)' )
139910000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1400 $
' (', i6,
' CALL',
'S)' )
1401 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1402 $
'ANGED INCORRECTLY *******' )
1403 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
1404 9995
FORMAT(1x, i6,
': ', a13,
'(', 4(
'''', a1,
''',' ), 2( i3,
',' ),
1405 $
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
') ',
1407 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1093 SUBROUTINE zchk3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
…
1414 SUBROUTINE zprcn3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA,
1415 $ DIAG, M, N, ALPHA, LDA, LDB)
1416 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB
1417 DOUBLE COMPLEX ALPHA
1418 CHARACTER*1 SIDE, UPLO, TRANSA, DIAG
1420 CHARACTER*14 CRC, CS, CU, CA, CD
1422 IF (SIDE.EQ.
'L')THEN
1427 IF (uplo.EQ.
'U')
THEN
1432 IF (transa.EQ.
'N')
THEN
1433 ca =
' CblasNoTrans'
1434 ELSE IF (transa.EQ.
'T')
THEN
1437 ca =
'CblasConjTrans'
1439 IF (diag.EQ.
'N')
THEN
1440 cd =
' CblasNonUnit'
1444 IF (iorder.EQ.1)
THEN
1445 crc =
' CblasRowMajor'
1447 crc =
' CblasColMajor'
1449 WRITE(nout, fmt = 9995)nc,sname,crc, cs,cu
1450 WRITE(nout, fmt = 9994)ca, cd, m, n, alpha, lda, ldb
1452 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',')
1453 9994
FORMAT( 10x, 2( a14,
',') , 2( i3,
',' ),
' (', f4.1,
',',
1454 $ f4.1,
'), A,', i3,
', B,', i3,
').' )
1414 SUBROUTINE zprcn3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA,
…
1457 SUBROUTINE zchk4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1458 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1459 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
1474 PARAMETER ( ZERO = ( 0.0d0, 0.0d0 ) )
1475 DOUBLE PRECISION RONE, RZERO
1476 PARAMETER ( RONE = 1.0d0, rzero = 0.0d0 )
1478 DOUBLE PRECISION EPS, THRESH
1479 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1480 LOGICAL FATAL, REWI, TRACE
1483 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1484 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1485 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1486 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1487 $ cs( nmax*nmax ), ct( nmax )
1488 DOUBLE PRECISION G( NMAX )
1489 INTEGER IDIM( NIDIM )
1491 COMPLEX*16 ALPHA, ALS, BETA, BETS
1492 DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1493 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1494 $ laa, lcc, lda, ldas, ldc, ldcs, lj, ma, n, na,
1496 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1497 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1498 CHARACTER*2 ICHT, ICHU
1503 EXTERNAL lze, lzeres
1507 INTRINSIC dcmplx, max, dble
1509 INTEGER INFOT, NOUTC
1512 COMMON /infoc/infot, noutc, ok, lerr
1514 DATA icht/
'NC'/, ichu/
'UL'/
1516 conj = sname( 8: 9 ).EQ.
'he'
1523 DO 100 in = 1, nidim
1538 trans = icht( ict: ict )
1540 IF( tran.AND..NOT.conj )
1560 CALL zmake(
'ge',
' ',
' ', ma, na, a, nmax, aa, lda,
1564 uplo = ichu( icu: icu )
1570 ralpha = dble( alpha )
1571 alpha = dcmplx( ralpha, rzero )
1577 rbeta = dble( beta )
1578 beta = dcmplx( rbeta, rzero )
1582 $ null = null.OR.( ( k.LE.0.OR.ralpha.EQ.
1583 $ rzero ).AND.rbeta.EQ.rone )
1587 CALL zmake( sname( 8: 9 ), uplo,
' ', n, n, c,
1588 $ nmax, cc, ldc, reset, zero )
1621 $
CALL zprcn6( ntra, nc, sname, iorder,
1622 $ uplo, trans, n, k, ralpha, lda, rbeta,
1626 CALL czherk( iorder, uplo, trans, n, k,
1627 $ ralpha, aa, lda, rbeta, cc,
1631 $
CALL zprcn4( ntra, nc, sname, iorder,
1632 $ uplo, trans, n, k, alpha, lda, beta, ldc)
1635 CALL czsyrk( iorder, uplo, trans, n, k,
1636 $ alpha, aa, lda, beta, cc, ldc )
1642 WRITE( nout, fmt = 9992 )
1649 isame( 1 ) = uplos.EQ.uplo
1650 isame( 2 ) = transs.EQ.trans
1651 isame( 3 ) = ns.EQ.n
1652 isame( 4 ) = ks.EQ.k
1654 isame( 5 ) = rals.EQ.ralpha
1656 isame( 5 ) = als.EQ.alpha
1658 isame( 6 ) = lze( as, aa, laa )
1659 isame( 7 ) = ldas.EQ.lda
1661 isame( 8 ) = rbets.EQ.rbeta
1663 isame( 8 ) = bets.EQ.beta
1666 isame( 9 ) = lze( cs, cc, lcc )
1668 isame( 9 ) = lzeres( sname( 8: 9 ), uplo, n,
1671 isame( 10 ) = ldcs.EQ.ldc
1678 same = same.AND.isame( i )
1679 IF( .NOT.isame( i ) )
1680 $
WRITE( nout, fmt = 9998 )i
1706 CALL zmmch( transt,
'N', lj, 1, k,
1707 $ alpha, a( 1, jj ), nmax,
1708 $ a( 1, j ), nmax, beta,
1709 $ c( jj, j ), nmax, ct, g,
1710 $ cc( jc ), ldc, eps, err,
1711 $ fatal, nout, .true. )
1713 CALL zmmch(
'N', transt, lj, 1, k,
1714 $ alpha, a( jj, 1 ), nmax,
1715 $ a( j, 1 ), nmax, beta,
1716 $ c( jj, j ), nmax, ct, g,
1717 $ cc( jc ), ldc, eps, err,
1718 $ fatal, nout, .true. )
1725 errmax = max( errmax, err )
1747 IF( errmax.LT.thresh )
THEN
1748 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1749 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1751 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1752 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1758 $
WRITE( nout, fmt = 9995 )j
1761 WRITE( nout, fmt = 9996 )sname
1763 CALL zprcn6( nout, nc, sname, iorder, uplo, trans, n, k, ralpha,
1766 CALL zprcn4( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
177310003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1774 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1775 $
'RATIO ', f8.2,
' - SUSPECT *******' )
177610002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1777 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1778 $
'RATIO ', f8.2,
' - SUSPECT *******' )
177910001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1780 $
' (', i6,
' CALL',
'S)' )
178110000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1782 $
' (', i6,
' CALL',
'S)' )
1783 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1784 $
'ANGED INCORRECTLY *******' )
1785 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
1786 9995
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
1787 9994
FORMAT(1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
1788 $ f4.1,
', A,', i3,
',', f4.1,
', C,', i3,
') ',
1790 9993
FORMAT(1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
1791 $
'(', f4.1,
',', f4.1,
') , A,', i3,
',(', f4.1,
',', f4.1,
1792 $
'), C,', i3,
') .' )
1793 9992
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1457 SUBROUTINE zchk4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
…
1800 SUBROUTINE zprcn4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
1801 $ N, K, ALPHA, LDA, BETA, LDC)
1802 INTEGER NOUT, NC, IORDER, N, K, LDA, LDC
1803 DOUBLE COMPLEX ALPHA, BETA
1804 CHARACTER*1 UPLO, TRANSA
1806 CHARACTER*14 CRC, CU, CA
1808 IF (uplo.EQ.
'U')
THEN
1813 IF (transa.EQ.
'N')
THEN
1814 ca =
' CblasNoTrans'
1815 ELSE IF (transa.EQ.
'T')
THEN
1818 ca =
'CblasConjTrans'
1820 IF (iorder.EQ.1)
THEN
1821 crc =
' CblasRowMajor'
1823 crc =
' CblasColMajor'
1825 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
1826 WRITE(nout, fmt = 9994)n, k, alpha, lda, beta, ldc
1828 9995
FORMAT( 1x, i6,
': ', a13,
'(', 3( a14,
',') )
1829 9994
FORMAT( 10x, 2( i3,
',' ),
' (', f4.1,
',', f4.1 ,
'), A,',
1830 $ i3,
', (', f4.1,
',', f4.1,
'), C,', i3,
').' )
1800 SUBROUTINE zprcn4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
…
1834 SUBROUTINE zprcn6(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
1835 $ N, K, ALPHA, LDA, BETA, LDC)
1836 INTEGER NOUT, NC, IORDER, N, K, LDA, LDC
1837 DOUBLE PRECISION ALPHA, BETA
1838 CHARACTER*1 UPLO, TRANSA
1840 CHARACTER*14 CRC, CU, CA
1842 IF (uplo.EQ.
'U')
THEN
1847 IF (transa.EQ.
'N')
THEN
1848 ca =
' CblasNoTrans'
1849 ELSE IF (transa.EQ.
'T')
THEN
1852 ca =
'CblasConjTrans'
1854 IF (iorder.EQ.1)
THEN
1855 crc =
' CblasRowMajor'
1857 crc =
' CblasColMajor'
1859 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
1860 WRITE(nout, fmt = 9994)n, k, alpha, lda, beta, ldc
1862 9995
FORMAT( 1x, i6,
': ', a13,
'(', 3( a14,
',') )
1863 9994
FORMAT( 10x, 2( i3,
',' ),
1864 $ f4.1,
', A,', i3,
',', f4.1,
', C,', i3,
').' )
1834 SUBROUTINE zprcn6(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
…
1867 SUBROUTINE zchk5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1868 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1869 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W,
1883 COMPLEX*16 ZERO, ONE
1884 parameter( zero = ( 0.0d0, 0.0d0 ), one = ( 1.0d0, 0.0d0 ) )
1885 DOUBLE PRECISION RONE, RZERO
1886 parameter( rone = 1.0d0, rzero = 0.0d0 )
1888 DOUBLE PRECISION EPS, THRESH
1889 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1890 LOGICAL FATAL, REWI, TRACE
1893 COMPLEX*16 AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1894 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1895 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1896 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1898 DOUBLE PRECISION G( NMAX )
1899 INTEGER IDIM( NIDIM )
1901 COMPLEX*16 ALPHA, ALS, BETA, BETS
1902 DOUBLE PRECISION ERR, ERRMAX, RBETA, RBETS
1903 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1904 $ k, ks, laa, lbb, lcc, lda, ldas, ldb, ldbs,
1905 $ ldc, ldcs, lj, ma, n, na, nargs, nc, ns
1906 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1907 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1908 CHARACTER*2 ICHT, ICHU
1913 EXTERNAL LZE, LZERES
1915 EXTERNAL CZHER2K, ZMAKE, ZMMCH, CZSYR2K
1917 INTRINSIC dcmplx, dconjg, max, dble
1919 INTEGER INFOT, NOUTC
1922 COMMON /infoc/infot, noutc, ok, lerr
1924 DATA icht/
'NC'/, ichu/
'UL'/
1926 conj = sname( 8: 9 ).EQ.
'he'
1933 DO 130 in = 1, nidim
1944 DO 120 ik = 1, nidim
1948 trans = icht( ict: ict )
1950 IF( tran.AND..NOT.conj )
1971 CALL zmake(
'ge',
' ',
' ', ma, na, ab, 2*nmax, aa,
1972 $ lda, reset, zero )
1974 CALL zmake(
'ge',
' ',
' ', ma, na, ab, nmax, aa, lda,
1983 CALL zmake(
'ge',
' ',
' ', ma, na, ab( k + 1 ),
1984 $ 2*nmax, bb, ldb, reset, zero )
1986 CALL zmake(
'ge',
' ',
' ', ma, na, ab( k*nmax + 1 ),
1987 $ nmax, bb, ldb, reset, zero )
1991 uplo = ichu( icu: icu )
2000 rbeta = dble( beta )
2001 beta = dcmplx( rbeta, rzero )
2005 $ null = null.OR.( ( k.LE.0.OR.alpha.EQ.
2006 $ zero ).AND.rbeta.EQ.rone )
2010 CALL zmake( sname( 8: 9 ), uplo,
' ', n, n, c,
2011 $ nmax, cc, ldc, reset, zero )
2044 $
CALL zprcn7( ntra, nc, sname, iorder,
2045 $ uplo, trans, n, k, alpha, lda, ldb,
2049 CALL czher2k( iorder, uplo, trans, n, k,
2050 $ alpha, aa, lda, bb, ldb, rbeta,
2054 $
CALL zprcn5( ntra, nc, sname, iorder,
2055 $ uplo, trans, n, k, alpha, lda, ldb,
2059 CALL czsyr2k( iorder, uplo, trans, n, k,
2060 $ alpha, aa, lda, bb, ldb, beta,
2067 WRITE( nout, fmt = 9992 )
2074 isame( 1 ) = uplos.EQ.uplo
2075 isame( 2 ) = transs.EQ.trans
2076 isame( 3 ) = ns.EQ.n
2077 isame( 4 ) = ks.EQ.k
2078 isame( 5 ) = als.EQ.alpha
2079 isame( 6 ) = lze( as, aa, laa )
2080 isame( 7 ) = ldas.EQ.lda
2081 isame( 8 ) = lze( bs, bb, lbb )
2082 isame( 9 ) = ldbs.EQ.ldb
2084 isame( 10 ) = rbets.EQ.rbeta
2086 isame( 10 ) = bets.EQ.beta
2089 isame( 11 ) = lze( cs, cc, lcc )
2091 isame( 11 ) = lzeres(
'he', uplo, n, n, cs,
2094 isame( 12 ) = ldcs.EQ.ldc
2101 same = same.AND.isame( i )
2102 IF( .NOT.isame( i ) )
2103 $
WRITE( nout, fmt = 9998 )i
2131 w( i ) = alpha*ab( ( j - 1 )*2*
2134 w( k + i ) = dconjg( alpha )*
2143 CALL zmmch( transt,
'N', lj, 1, 2*k,
2144 $ one, ab( jjab ), 2*nmax, w,
2145 $ 2*nmax, beta, c( jj, j ),
2146 $ nmax, ct, g, cc( jc ), ldc,
2147 $ eps, err, fatal, nout,
2152 w( i ) = alpha*dconjg( ab( ( k +
2153 $ i - 1 )*nmax + j ) )
2154 w( k + i ) = dconjg( alpha*
2155 $ ab( ( i - 1 )*nmax +
2158 w( i ) = alpha*ab( ( k + i - 1 )*
2161 $ ab( ( i - 1 )*nmax +
2165 CALL zmmch(
'N',
'N', lj, 1, 2*k, one,
2166 $ ab( jj ), nmax, w, 2*nmax,
2167 $ beta, c( jj, j ), nmax, ct,
2168 $ g, cc( jc ), ldc, eps, err,
2169 $ fatal, nout, .true. )
2176 $ jjab = jjab + 2*nmax
2178 errmax = max( errmax, err )
2200 IF( errmax.LT.thresh )
THEN
2201 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
2202 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
2204 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
2205 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
2211 $
WRITE( nout, fmt = 9995 )j
2214 WRITE( nout, fmt = 9996 )sname
2216 CALL zprcn7( nout, nc, sname, iorder, uplo, trans, n, k,
2217 $ alpha, lda, ldb, rbeta, ldc)
2219 CALL zprcn5( nout, nc, sname, iorder, uplo, trans, n, k,
2220 $ alpha, lda, ldb, beta, ldc)
222610003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
2227 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2228 $
'RATIO ', f8.2,
' - SUSPECT *******' )
222910002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
2230 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2231 $
'RATIO ', f8.2,
' - SUSPECT *******' )
223210001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
2233 $
' (', i6,
' CALL',
'S)' )
223410000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
2235 $
' (', i6,
' CALL',
'S)' )
2236 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
2237 $
'ANGED INCORRECTLY *******' )
2238 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
2239 9995
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2240 9994
FORMAT(1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
2241 $
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
',', f4.1,
2242 $
', C,', i3,
') .' )
2243 9993
FORMAT(1x, i6,
': ', a13,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
2244 $
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
',(', f4.1,
2245 $
',', f4.1,
'), C,', i3,
') .' )
2246 9992
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1867 SUBROUTINE zchk5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
…
2253 SUBROUTINE zprcn5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
2254 $ N, K, ALPHA, LDA, LDB, BETA, LDC)
2255 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
2256 DOUBLE COMPLEX ALPHA, BETA
2257 CHARACTER*1 UPLO, TRANSA
2259 CHARACTER*14 CRC, CU, CA
2261 IF (uplo.EQ.
'U')
THEN
2266 IF (transa.EQ.
'N')
THEN
2267 ca =
' CblasNoTrans'
2268 ELSE IF (transa.EQ.
'T')
THEN
2271 ca =
'CblasConjTrans'
2273 IF (iorder.EQ.1)
THEN
2274 crc =
' CblasRowMajor'
2276 crc =
' CblasColMajor'
2278 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
2279 WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
2281 9995
FORMAT( 1x, i6,
': ', a13,
'(', 3( a14,
',') )
2282 9994
FORMAT( 10x, 2( i3,
',' ),
' (', f4.1,
',', f4.1,
'), A,',
2283 $ i3,
', B', i3,
', (', f4.1,
',', f4.1,
'), C,', i3,
').' )
2253 SUBROUTINE zprcn5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
…
2287 SUBROUTINE zprcn7(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
2288 $ N, K, ALPHA, LDA, LDB, BETA, LDC)
2289 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
2290 DOUBLE COMPLEX ALPHA
2291 DOUBLE PRECISION BETA
2292 CHARACTER*1 UPLO, TRANSA
2294 CHARACTER*14 CRC, CU, CA
2296 IF (uplo.EQ.
'U')
THEN
2301 IF (transa.EQ.
'N')
THEN
2302 ca =
' CblasNoTrans'
2303 ELSE IF (transa.EQ.
'T')
THEN
2306 ca =
'CblasConjTrans'
2308 IF (iorder.EQ.1)
THEN
2309 crc =
' CblasRowMajor'
2311 crc =
' CblasColMajor'
2313 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
2314 WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
2316 9995
FORMAT( 1x, i6,
': ', a13,
'(', 3( a14,
',') )
2317 9994
FORMAT( 10x, 2( i3,
',' ),
' (', f4.1,
',', f4.1,
'), A,',
2318 $ i3,
', B', i3,
',', f4.1,
', C,', i3,
').' )
2287 SUBROUTINE zprcn7(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
…
2321 SUBROUTINE zmake( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2339 COMPLEX*16 ZERO, ONE
2340 PARAMETER ( ZERO = ( 0.0d0, 0.0d0 ),
2341 $ one = ( 1.0d0, 0.0d0 ) )
2343 parameter( rogue = ( -1.0d10, 1.0d10 ) )
2344 DOUBLE PRECISION RZERO
2345 PARAMETER ( RZERO = 0.0d0 )
2346 DOUBLE PRECISION RROGUE
2347 PARAMETER ( RROGUE = -1.0d10 )
2350 INTEGER LDA, M, N, NMAX
2352 CHARACTER*1 DIAG, UPLO
2355 COMPLEX*16 A( NMAX, * ), AA( * )
2357 INTEGER I, IBEG, IEND, J, JJ
2358 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2363 INTRINSIC dcmplx, dconjg, dble
2369 upper = ( her.OR.sym.OR.tri ).AND.uplo.EQ.
'U'
2370 lower = ( her.OR.sym.OR.tri ).AND.uplo.EQ.
'L'
2371 unit = tri.AND.diag.EQ.
'U'
2377 IF( gen.OR.( upper.AND.i.LE.j ).OR.( lower.AND.i.GE.j ) )
2379 a( i, j ) = zbeg( reset ) + transl
2382 IF( n.GT.3.AND.j.EQ.n/2 )
2385 a( j, i ) = dconjg( a( i, j ) )
2387 a( j, i ) = a( i, j )
2395 $ a( j, j ) = dcmplx( dble( a( j, j ) ), rzero )
2397 $ a( j, j ) = a( j, j ) + one
2404 IF( type.EQ.
'ge' )
THEN
2407 aa( i + ( j - 1 )*lda ) = a( i, j )
2409 DO 40 i = m + 1, lda
2410 aa( i + ( j - 1 )*lda ) = rogue
2413 ELSE IF( type.EQ.
'he'.OR.type.EQ.
'sy'.OR.type.EQ.
'tr' )
THEN
2430 DO 60 i = 1, ibeg - 1
2431 aa( i + ( j - 1 )*lda ) = rogue
2433 DO 70 i = ibeg, iend
2434 aa( i + ( j - 1 )*lda ) = a( i, j )
2436 DO 80 i = iend + 1, lda
2437 aa( i + ( j - 1 )*lda ) = rogue
2440 jj = j + ( j - 1 )*lda
2441 aa( jj ) = dcmplx( dble( aa( jj ) ), rrogue )
2321 SUBROUTINE zmake( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
…
2450 SUBROUTINE zmmch( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
2451 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
2466 parameter( zero = ( 0.0d0, 0.0d0 ) )
2467 DOUBLE PRECISION RZERO, RONE
2468 parameter( rzero = 0.0d0, rone = 1.0d0 )
2470 COMPLEX*16 ALPHA, BETA
2471 DOUBLE PRECISION EPS, ERR
2472 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
2474 CHARACTER*1 TRANSA, TRANSB
2476 COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ),
2477 $ CC( LDCC, * ), CT( * )
2478 DOUBLE PRECISION G( * )
2481 DOUBLE PRECISION ERRI
2483 LOGICAL CTRANA, CTRANB, TRANA, TRANB
2485 INTRINSIC ABS, DIMAG, DCONJG, MAX, DBLE, SQRT
2487 DOUBLE PRECISION ABS1
2489 abs1( cl ) = abs( dble( cl ) ) + abs( dimag( cl ) )
2491 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
2492 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2493 ctrana = transa.EQ.
'C'
2494 ctranb = transb.EQ.
'C'
2506 IF( .NOT.trana.AND..NOT.tranb )
THEN
2509 ct( i ) = ct( i ) + a( i, k )*b( k, j )
2510 g( i ) = g( i ) + abs1( a( i, k ) )*abs1( b( k, j ) )
2513 ELSE IF( trana.AND..NOT.tranb )
THEN
2517 ct( i ) = ct( i ) + dconjg( a( k, i ) )*b( k, j )
2518 g( i ) = g( i ) + abs1( a( k, i ) )*
2525 ct( i ) = ct( i ) + a( k, i )*b( k, j )
2526 g( i ) = g( i ) + abs1( a( k, i ) )*
2531 ELSE IF( .NOT.trana.AND.tranb )
THEN
2535 ct( i ) = ct( i ) + a( i, k )*dconjg( b( j, k ) )
2536 g( i ) = g( i ) + abs1( a( i, k ) )*
2543 ct( i ) = ct( i ) + a( i, k )*b( j, k )
2544 g( i ) = g( i ) + abs1( a( i, k ) )*
2549 ELSE IF( trana.AND.tranb )
THEN
2554 ct( i ) = ct( i ) + dconjg( a( k, i ) )*
2555 $ dconjg( b( j, k ) )
2556 g( i ) = g( i ) + abs1( a( k, i ) )*
2563 ct( i ) = ct( i ) + dconjg( a( k, i ) )*
2565 g( i ) = g( i ) + abs1( a( k, i ) )*
2574 ct( i ) = ct( i ) + a( k, i )*
2575 $ dconjg( b( j, k ) )
2576 g( i ) = g( i ) + abs1( a( k, i ) )*
2583 ct( i ) = ct( i ) + a( k, i )*b( j, k )
2584 g( i ) = g( i ) + abs1( a( k, i ) )*
2592 ct( i ) = alpha*ct( i ) + beta*c( i, j )
2593 g( i ) = abs1( alpha )*g( i ) +
2594 $ abs1( beta )*abs1( c( i, j ) )
2601 erri = abs1( ct( i ) - cc( i, j ) )/eps
2602 IF( g( i ).NE.rzero )
2603 $ erri = erri/g( i )
2604 err = max( err, erri )
2605 IF( err*sqrt( eps ).GE.rone )
2617 WRITE( nout, fmt = 9999 )
2620 WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
2622 WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
2626 $
WRITE( nout, fmt = 9997 )j
2631 9999
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2632 $
'F ACCURATE *******', /
' EXPECTED RE',
2633 $
'SULT COMPUTED RESULT' )
2634 9998
FORMAT( 1x, i7, 2(
' (', g15.6,
',', g15.6,
')' ) )
2635 9997
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2450 SUBROUTINE zmmch( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
…
2640 LOGICAL FUNCTION lze( RI, RJ, LR )
2655 COMPLEX*16 ri( * ), rj( * )
2660 IF( ri( i ).NE.rj( i ) )
2640 LOGICAL FUNCTION lze( RI, RJ, LR )
…
2672 LOGICAL FUNCTION lzeres( TYPE, UPLO, M, N, AA, AS, LDA )
2691 COMPLEX*16 aa( lda, * ), as( lda, * )
2693 INTEGER i, ibeg, iend, j
2697 IF( type.EQ.
'ge' )
THEN
2699 DO 10 i = m + 1, lda
2700 IF( aa( i, j ).NE.as( i, j ) )
2704 ELSE IF( type.EQ.
'he'.OR.type.EQ.
'sy' )
THEN
2713 DO 30 i = 1, ibeg - 1
2714 IF( aa( i, j ).NE.as( i, j ) )
2717 DO 40 i = iend + 1, lda
2718 IF( aa( i, j ).NE.as( i, j ) )
2672 LOGICAL FUNCTION lzeres( TYPE, UPLO, M, N, AA, AS, LDA )
…
2750 INTEGER i, ic, j, mi, mj
2752 SAVE i, ic, j, mi, mj
2776 i = i - 1000*( i/1000 )
2777 j = j - 1000*( j/1000 )
2782 zbeg = dcmplx( ( i - 500 )/1001.0d0, ( j - 500 )/1001.0d0 )
2799 DOUBLE PRECISION x, y
2808 SUBROUTINE zchk6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
2809 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
2810 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
2823 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
2824 double precision rzero
2825 parameter( rzero = 0.0 )
2827 DOUBLE PRECISION EPS, THRESH
2828 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
2829 LOGICAL FATAL, REWI, TRACE
2832 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
2833 $ as( nmax*nmax ), b( nmax, nmax ),
2834 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
2835 $ c( nmax, nmax ), cc( nmax*nmax ),
2836 $ cs( nmax*nmax ), ct( nmax )
2837 DOUBLE PRECISION G( NMAX )
2838 INTEGER IDIM( NIDIM )
2840 COMPLEX*16 ALPHA, ALS, BETA, BLS
2841 DOUBLE PRECISION ERR, ERRMAX
2842 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
2843 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS,
2844 $ MA, MB, N, NA, NARGS, NB, NC, NS, IS
2845 LOGICAL NULL, RESET, SAME, TRANA, TRANB
2846 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB, UPLO, UPLOS
2853 EXTERNAL LZE, LZERES
2859 INTEGER INFOT, NOUTC
2862 COMMON /INFOC/INFOT, NOUTC, OK, LERR
2873 DO 100 in = 1, nidim
2889 transa = ich( ica: ica )
2890 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
2910 CALL zmake(
'ge',
' ',
' ', ma, na, a, nmax, aa, lda,
2914 transb = ich( icb: icb )
2915 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2935 CALL zmake(
'ge',
' ',
' ', mb, nb, b, nmax, bb,
2936 $ ldb, reset, zero )
2944 uplo = ishape(is:is)
2948 CALL zmake(
'ge', uplo,
' ', n, n, c, nmax,
2949 $ cc, ldc, reset, zero )
2979 $
CALL zprcn8(ntra, nc, sname, iorder, uplo,
2980 $ transa, transb, n, k, alpha, lda,
2984 CALL czgemmtr(iorder, uplo, transa, transb,
2985 $ n, k, alpha, aa, lda, bb, ldb,
2991 WRITE( nout, fmt = 9994 )
2998 isame( 1 ) = uplo .EQ. uplos
2999 isame( 2 ) = transa.EQ.tranas
3000 isame( 3 ) = transb.EQ.tranbs
3001 isame( 4 ) = ns.EQ.n
3002 isame( 5 ) = ks.EQ.k
3003 isame( 6 ) = als.EQ.alpha
3004 isame( 7 ) = lze( as, aa, laa )
3005 isame( 8 ) = ldas.EQ.lda
3006 isame( 9 ) = lze( bs, bb, lbb )
3007 isame( 10 ) = ldbs.EQ.ldb
3008 isame( 11 ) = bls.EQ.beta
3010 isame( 12 ) = lze( cs, cc, lcc )
3012 isame( 12 ) = lzeres(
'ge',
' ', n, n, cs,
3015 isame( 13 ) = ldcs.EQ.ldc
3022 same = same.AND.isame( i )
3023 IF( .NOT.isame( i ) )
3024 $
WRITE( nout, fmt = 9998 )i
3035 CALL zmmtch( uplo, transa, transb, n, k,
3036 $ alpha, a, nmax, b, nmax, beta,
3037 $ c, nmax, ct, g, cc, ldc, eps,
3038 $ err, fatal, nout, .true. )
3039 errmax = max( errmax, err )
3063 IF( errmax.LT.thresh )
THEN
3064 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
3065 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
3067 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
3068 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
3073 WRITE( nout, fmt = 9996 )sname
3074 CALL zprcn8(nout, nc, sname, iorder, uplo, transa, transb,
3075 $ n, k, alpha, lda, ldb, beta, ldc)
308010003
FORMAT(
' ', a13,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
3081 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
3082 $
'RATIO ', f8.2,
' - SUSPECT *******' )
308310002
FORMAT(
' ', a13,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
3084 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
3085 $
'RATIO ', f8.2,
' - SUSPECT *******' )
308610001
FORMAT(
' ', a13,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
3087 $
' (', i6,
' CALL',
'S)' )
308810000
FORMAT(
' ', a13,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
3089 $
' (', i6,
' CALL',
'S)' )
3090 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
3091 $
'ANGED INCORRECTLY *******' )
3092 9996
FORMAT(
' ******* ', a13,
' FAILED ON CALL NUMBER:' )
3093 9995
FORMAT( 1x, i6,
': ', a13,
'(''', a1,
''',''', a1,
''',',
3094 $ 3( i3,
',' ),
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
3095 $
',(', f4.1,
',', f4.1,
'), C,', i3,
').' )
3096 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2808 SUBROUTINE zchk6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
…
3103 SUBROUTINE zprcn8(NOUT, NC, SNAME, IORDER, UPLO,
3104 $ TRANSA, TRANSB, N,
3105 $ K, ALPHA, LDA, LDB, BETA, LDC)
3106 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
3107 COMPLEX*16 ALPHA, BETA
3108 CHARACTER*1 TRANSA, TRANSB, UPLO
3110 CHARACTER*14 CRC, CTA,CTB,CUPLO
3112 IF (uplo.EQ.
'U')
THEN
3113 cuplo =
'CblasUpper'
3115 cuplo =
'CblasLower'
3117 IF (transa.EQ.
'N')
THEN
3118 cta =
' CblasNoTrans'
3119 ELSE IF (transa.EQ.
'T')
THEN
3122 cta =
'CblasConjTrans'
3124 IF (transb.EQ.
'N')
THEN
3125 ctb =
' CblasNoTrans'
3126 ELSE IF (transb.EQ.
'T')
THEN
3129 ctb =
'CblasConjTrans'
3131 IF (iorder.EQ.1)
THEN
3132 crc =
' CblasRowMajor'
3134 crc =
' CblasColMajor'
3136 WRITE(nout, fmt = 9995)nc,sname,crc, cuplo, cta,ctb
3137 WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
3139 9995
FORMAT( 1x, i6,
': ', a13,
'(', a14,
',', a14,
',', a14,
',',
3141 9994
FORMAT( 10x, 2( i3,
',' ) ,
' (', f4.1,
',',f4.1,
') , A,',
3142 $ i3,
', B,', i3,
', (', f4.1,
',',f4.1,
') , C,', i3,
').' )
3103 SUBROUTINE zprcn8(NOUT, NC, SNAME, IORDER, UPLO,
…
3145 SUBROUTINE zmmtch(UPLO, TRANSA, TRANSB, N, KK, ALPHA, A, LDA,
3147 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
3160 parameter( zero = ( 0.0, 0.0 ) )
3161 DOUBLE PRECISION RZERO, RONE
3162 parameter( rzero = 0.0, rone = 1.0 )
3164 COMPLEX*16 ALPHA, BETA
3165 DOUBLE PRECISION EPS, ERR
3166 INTEGER KK, LDA, LDB, LDC, LDCC, N, NOUT
3168 CHARACTER*1 TRANSA, TRANSB, UPLO
3170 COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ),
3171 $ cc( ldcc, * ), ct( * )
3172 DOUBLE PRECISION G( * )
3175 DOUBLE PRECISION ERRI
3176 INTEGER I, J, K, ISTART, ISTOP
3177 LOGICAL CTRANA, CTRANB, TRANA, TRANB, UPPER
3179 INTRINSIC DABS, DIMAG, DCONJG, MAX, DBLE, DSQRT
3181 DOUBLE PRECISION ABS1
3183 ABS1( CL ) = dabs( dble( cl ) ) + dabs( dimag( cl ) )
3187 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
3188 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
3189 ctrana = transa.EQ.
'C'
3190 ctranb = transb.EQ.
'C'
3208 DO 10 i = istart, istop
3212 IF( .NOT.trana.AND..NOT.tranb )
THEN
3214 DO 20 i = istart, istop
3215 ct( i ) = ct( i ) + a( i, k )*b( k, j )
3216 g( i ) = g( i ) + abs1( a( i, k ) )*abs1( b( k, j ) )
3219 ELSE IF( trana.AND..NOT.tranb )
THEN
3222 DO 40 i = istart, istop
3223 ct( i ) = ct( i ) + dconjg( a( k, i ) )*b( k, j )
3224 g( i ) = g( i ) + abs1( a( k, i ) )*
3230 DO 60 i = istart, istop
3231 ct( i ) = ct( i ) + a( k, i )*b( k, j )
3232 g( i ) = g( i ) + abs1( a( k, i ) )*
3237 ELSE IF( .NOT.trana.AND.tranb )
THEN
3240 DO 80 i = istart, istop
3241 ct( i ) = ct( i ) + a( i, k )*dconjg( b( j, k ) )
3242 g( i ) = g( i ) + abs1( a( i, k ) )*
3248 DO 100 i = istart, istop
3249 ct( i ) = ct( i ) + a( i, k )*b( j, k )
3250 g( i ) = g( i ) + abs1( a( i, k ) )*
3255 ELSE IF( trana.AND.tranb )
THEN
3259 DO 120 i = istart, istop
3260 ct( i ) = ct( i ) + dconjg( a( k, i ) )*
3261 $ dconjg( b( j, k ) )
3262 g( i ) = g( i ) + abs1( a( k, i ) )*
3268 DO 140 i = istart, istop
3269 ct( i ) = ct( i ) + dconjg( a( k, i ) )*b( j, k )
3270 g( i ) = g( i ) + abs1( a( k, i ) )*
3278 DO 160 i = istart, istop
3279 ct( i ) = ct( i ) + a( k, i )*dconjg( b( j, k ) )
3280 g( i ) = g( i ) + abs1( a( k, i ) )*
3286 DO 180 i = istart, istop
3287 ct( i ) = ct( i ) + a( k, i )*b( j, k )
3288 g( i ) = g( i ) + abs1( a( k, i ) )*
3295 DO 200 i = istart, istop
3296 ct( i ) = alpha*ct( i ) + beta*c( i, j )
3297 g( i ) = abs1( alpha )*g( i ) +
3298 $ abs1( beta )*abs1( c( i, j ) )
3304 DO 210 i = istart, istop
3305 erri = abs1( ct( i ) - cc( i, j ) )/eps
3306 IF( g( i ).NE.rzero )
3307 $ erri = erri/g( i )
3308 err = max( err, erri )
3309 IF( err*dsqrt( eps ).GE.rone )
3321 WRITE( nout, fmt = 9999 )
3322 DO 240 i = istart, istop
3324 WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
3326 WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
3330 $
WRITE( nout, fmt = 9997 )j
3335 9999
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3336 $
'F ACCURATE *******', /
' EXPECTED RE',
3337 $
'SULT COMPUTED RESULT' )
3338 9998
FORMAT( 1x, i7, 2(
' (', g15.6,
',', g15.6,
')' ) )
3339 9997
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
3145 SUBROUTINE zmmtch(UPLO, TRANSA, TRANSB, N, KK, ALPHA, A, LDA,
…
subroutine zprcn6(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
subroutine zprcn7(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, ldb, beta, ldc)
subroutine zprcn3(nout, nc, sname, iorder, side, uplo, transa, diag, m, n, alpha, lda, ldb)
subroutine zprcn5(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, ldb, beta, ldc)
subroutine zprcn2(nout, nc, sname, iorder, side, uplo, m, n, alpha, lda, ldb, beta, ldc)
subroutine zprcn1(nout, nc, sname, iorder, transa, transb, m, n, k, alpha, lda, ldb, beta, ldc)
subroutine zprcn8(nout, nc, sname, iorder, uplo, transa, transb, n, k, alpha, lda, ldb, beta, ldc)
subroutine zprcn4(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
double precision function ddiff(x, y)
logical function lze(ri, rj, lr)
subroutine zchk2(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 zchk1(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)
logical function lzeres(type, uplo, m, n, aa, as, lda)
complex *16 function zbeg(reset)
subroutine zchk3(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 zmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
subroutine zchk6(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 zchk5(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 zchk4(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 zmmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)
subroutine zmmtch(uplo, transa, transb, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)