50 parameter( nin = 5, nout = 6 )
52 parameter( nsubs = 9 )
54 parameter( zero = ( 0.0d0, 0.0d0 ),
55 $ one = ( 1.0d0, 0.0d0 ) )
56 DOUBLE PRECISION rzero, rhalf, rone
57 parameter( rzero = 0.0d0, rhalf = 0.5d0, rone = 1.0d0 )
59 parameter( nmax = 65 )
60 INTEGER nidmax, nalmax, nbemax
61 parameter( nidmax = 9, nalmax = 7, nbemax = 7 )
63 DOUBLE PRECISION eps, err, thresh
64 INTEGER i, isnum, j, n, nalf, nbet, nidim, ntra,
66 LOGICAL fatal, ltestt, rewi, same, sfatal, trace,
67 $ tsterr, corder, rorder
72 COMPLEX*16 aa( nmax*nmax ), ab( nmax, 2*nmax ),
73 $ alf( ), as( nmax*nmax ),
74 $ bb( nmax*nmax ), bet( nbemax ),
75 $ bs( nmax*nmax ), c( nmax, nmax ),
76 $ cc( nmax*nmax ), cs( nmax*nmax ), ct( nmax ),
78 DOUBLE PRECISION g( nmax )
79 INTEGER idim( nidmax )
80 LOGICAL ltest( nsubs )
81 CHARACTER*12 snames( nsubs )
83 DOUBLE PRECISION ddiff
95 COMMON /infoc/infot, noutc, ok, lerr
98 DATA snames/
'cblas_zgemm ',
'cblas_zhemm ',
99 $
'cblas_zsymm ',
'cblas_ztrmm ',
'cblas_ztrsm ',
100 $
'cblas_zherk ',
'cblas_zsyrk ',
'cblas_zher2k',
108 READ( nin, fmt = * )snaps
109 READ( nin, fmt = * )ntra
112 OPEN( ntra, file = snaps, status =
'NEW' )
115 READ( nin, fmt = * )rewi
116 rewi = rewi.AND.trace
118 READ( nin, fmt = * )sfatal
120 READ( nin, fmt = * )tsterr
122 READ( nin, fmt = * )layout
124 READ( nin, fmt = * )thresh
129 READ( nin, fmt = * )nidim
130 IF( nidim.LT.1.OR.nidim.GT.nidmax )
THEN
131 WRITE( nout, fmt = 9997 )
'N', nidmax
134 READ( nin, fmt = * )( idim( i ), i = 1, nidim )
136 IF( idim( i ).LT.0.OR.idim( i ).GT.nmax )
THEN
137 WRITE( nout, fmt = 9996 )nmax
142 READ( nin, fmt = * )nalf
143 IF( nalf.LT.1.OR.nalf.GT.nalmax )
THEN
144 WRITE( nout, fmt = 9997 )
'ALPHA', nalmax
147 READ( nin, fmt = * )( alf( i ), i = 1, nalf )
149 READ( nin, fmt = * )nbet
150 IF( nbet.LT.1.OR.nbet.GT.nbemax )
THEN
151 WRITE( nout, fmt = 9997 )
'BETA', nbemax
154 READ( nin, fmt = * )( bet( i ), i = 1, nbet )
158 WRITE( nout, fmt = 9995 )
159 WRITE( nout, fmt = 9994 )( idim( i ), i = 1, nidim )
160 WRITE( nout, fmt = 9993 )( alf( i ), i = 1, nalf )
161 WRITE( nout, fmt = 9992 )( bet( i ), i = 1, nbet )
162 IF( .NOT.tsterr )
THEN
163 WRITE( nout, fmt = * )
164 WRITE( nout, fmt = 9984 )
166 WRITE( nout, fmt = * )
167 WRITE( nout, fmt = 9999 )thresh
168 WRITE( nout, fmt = * )
172 IF (layout.EQ.2)
THEN
175 WRITE( *, fmt = 10002 )
176 ELSE IF (layout.EQ.1)
THEN
178 WRITE( *, fmt = 10001 )
179 ELSE IF (layout.EQ.0)
THEN
181 WRITE( *, fmt = 10000 )
192 30
READ( nin, fmt = 9988,
END = 60 )SNAMET, ltestt
194 IF( snamet.EQ.snames( i ) )
197 WRITE( nout, fmt = 9990 )snamet
199 50 ltest( i ) = ltestt
209 IF(
ddiff( rone + eps, rone ).EQ.rzero )
215 WRITE( nout, fmt = 9998 )eps
222 ab( i, j ) =
max( i - j + 1, 0 )
224 ab( j, nmax + 1 ) = j
225 ab( 1, nmax + j ) = j
229 cc( j ) = j*( ( j + 1 )*j )/2 - ( ( j + 1 )*j*( j - 1 ) )/3
235 CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
236 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
237 $ nmax, eps, err,
fatal, nout, .true. )
238 same =
lze( cc, ct, n )
239 IF( .NOT.same.OR.err.NE.rzero )
THEN
240 WRITE( nout, fmt = 9989 )transa, transb, same, err
244 CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
245 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
246 $ nmax, eps, err,
fatal, nout, .true. )
247 same =
lze( cc, ct, n )
248 IF( .NOT.same.OR.err.NE.rzero )
THEN
249 WRITE( nout, fmt = 9989 )transa, transb, same, err
253 ab( j, nmax + 1 ) = n - j + 1
254 ab( 1, nmax + j ) = n - j + 1
257 cc( n - j + 1 ) = j*( ( j + 1 )*j )/2 -
258 $ ( ( j + 1 )*j*( j - 1 ) )/3
262 CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
263 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
264 $ nmax, eps, err,
fatal, nout, .true. )
265 same =
lze( cc, ct, n )
266 IF( .NOT.same.OR.err.NE.rzero )
THEN
267 WRITE( nout, fmt = 9989 )transa, transb, same, err
271 CALL zmmch( transa, transb, n, 1, n, one, ab, nmax,
272 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
273 $ nmax, eps, err,
fatal, nout, .true. )
274 same =
lze( cc, ct, n )
275 IF( .NOT.same.OR.err.NE.rzero )
THEN
276 WRITE( nout, fmt = 9989 )transa, transb, same, err
282 DO 200 isnum = 1, nsubs
283 WRITE( nout, fmt = * )
284 IF( .NOT.ltest( isnum ) )
THEN
286 WRITE( nout, fmt = 9987 )snames( isnum )
288 srnamt = snames( isnum )
291 CALL cz3chke( snames( isnum ) )
292 WRITE( nout, fmt = * )
298 GO TO ( 140, 150, 150, 160, 160, 170, 170,
302 CALL zchk1(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,
308 CALL zchk1(snames( isnum ), eps, thresh, nout, ntra, trace,
309 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
310 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
316 CALL zchk2(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,
322 CALL zchk2(snames( isnum ), eps, thresh, nout, ntra, trace,
323 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
324 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
330 CALL zchk3(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,
336 CALL zchk3(snames( isnum ), eps, thresh, nout, ntra, trace,
337 $ rewi,
fatal, nidim, idim, nalf, alf, nmax, ab,
338 $ aa, as, ab( 1, nmax + 1 ), bb, bs, ct, g, c,
344 CALL zchk4(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,
350 CALL zchk4(snames( isnum ), eps, thresh, nout, ntra, trace,
351 $ rewi,
fatal, nidim, idim, nalf, alf
352 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
358 CALL zchk5(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,
364 CALL zchk5(snames( isnum ), eps, thresh, nout, ntra, trace,
365 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
366 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
371 190
IF(
fatal.AND.sfatal )
375 WRITE( nout, fmt = 9986 )
379 WRITE( nout, fmt = 9985 )
383 WRITE( nout, fmt = 9991 )
39110002
FORMAT(
' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' )
39210001
FORMAT(
' ROW-MAJOR DATA LAYOUT IS TESTED' )
39310000
FORMAT(
' COLUMN-MAJOR DATA LAYOUT IS TESTED' )
394 9999
FORMAT(
' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
396 9998
FORMAT(
' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1p, e9.1 )
397 9997
FORMAT(
' NUMBER OF VALUES OF ', a,
' IS LESS THAN 1 OR GREATER ',
399 9996
FORMAT(
' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', i2 )
400 9995
FORMAT(
'TESTS OF THE COMPLEX*16 LEVEL 3 BLAS', //
' THE F',
401 $
'OLLOWING PARAMETER VALUES WILL BE USED:' )
402 9994
FORMAT(
' FOR N ', 9i6 )
403 9993
FORMAT(
' FOR ALPHA ',
404 $ 7(
'(', f4.1,
',', f4.1,
') ', : ) )
405 9992
FORMAT(
' FOR BETA ',
406 $ 7(
'(', f4.1,
',', f4.1,
') ', : ) )
407 9991
FORMAT(
' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
408 $ /
' ******* TESTS ABANDONED *******' )
409 9990
FORMAT(
' SUBPROGRAM NAME ', a12,
' NOT RECOGNIZED', /
' ******* T',
410 $
'ESTS ABANDONED *******' )
411 9989
FORMAT(
' ERROR IN ZMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
412 $
'ATED WRONGLY.', /
' ZMMCH WAS CALLED WITH TRANSA = ', a1,
413 $
'AND TRANSB = ', a1, /' and returned same =
', L1, ' and
',
414 $ ' err =
', F12.3, '.
', /' this may be due to faults in
the ',
415 $ 'arithmetic or
the compiler.
', /' ******* tests abandoned
',
417 9988 FORMAT( A12,L2 )
418 9987 FORMAT( 1X, A12,' was not tested
' )
419 9986 FORMAT( /' END OF TESTS
' )
420 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******
' )
421 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED
' )
426 SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
427 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
428 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
443 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
444 DOUBLE PRECISION RZERO
445 PARAMETER ( RZERO = 0.0 )
447 DOUBLE PRECISION EPS, THRESH
448 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
449 LOGICAL FATAL, REWI, TRACE
452 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
453 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
454 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
455 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
456 $ CS( NMAX*NMAX ), CT( NMAX )
457 DOUBLE PRECISION G( NMAX )
458 INTEGER IDIM( NIDIM )
460 COMPLEX*16 ALPHA, ALS, BETA, BLS
461 DOUBLE PRECISION ERR, ERRMAX
462 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
463 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
464 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
465 LOGICAL NULL, RESET, SAME, TRANA, TRANB
466 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
474 EXTERNAL CZGEMM, ZMAKE, ZMMCH
481 COMMON /INFOC/INFOT, NOUTC, OK, LERR
504.LE..OR..LE.
NULL = N0M0
510 TRANSA = ICH( ICA: ICA )
511.EQ.
TRANA = TRANSA'T.OR..EQ.
'TRANSA'C
'
531 CALL ZMAKE( 'ge
', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
535 TRANSB = ICH( ICB: ICB )
536.EQ.
TRANB = TRANSB'T.OR..EQ.
'TRANSB'C
'
556 CALL ZMAKE( 'ge
', ' ', ' ', MB, NB, B, NMAX, BB,
567 CALL ZMAKE( 'ge
', ' ', ' ', M, N, C, NMAX,
568 $ CC, LDC, RESET, ZERO )
598 $ CALL ZPRCN1(NTRA, NC, SNAME, IORDER,
599 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA,
603 CALL CZGEMM( IORDER, TRANSA, TRANSB, M, N,
604 $ K, ALPHA, AA, LDA, BB, LDB,
610 WRITE( NOUT, FMT = 9994 )
617.EQ.
ISAME( 1 ) = TRANSATRANAS
618.EQ.
ISAME( 2 ) = TRANSBTRANBS
622.EQ.
ISAME( 6 ) = ALSALPHA
623 ISAME( 7 ) = LZE( AS, AA, LAA )
624.EQ.
ISAME( 8 ) = LDASLDA
625 ISAME( 9 ) = LZE( BS, BB, LBB )
626.EQ.
ISAME( 10 ) = LDBSLDB
627.EQ.
ISAME( 11 ) = BLSBETA
629 ISAME( 12 ) = LZE( CS, CC, LCC )
631 ISAME( 12 ) = LZERES( 'ge
', ' ', M, N, CS,
634.EQ.
ISAME( 13 ) = LDCSLDC
641.AND.
SAME = SAMEISAME( I )
642.NOT.
IF( ISAME( I ) )
643 $ WRITE( NOUT, FMT = 9998 )I
654 CALL ZMMCH( TRANSA, TRANSB, M, N, K,
655 $ ALPHA, A, NMAX, B, NMAX, BETA,
656 $ C, NMAX, CT, G, CC, LDC, EPS,
657 $ ERR, FATAL, NOUT, .TRUE. )
658 ERRMAX = MAX( ERRMAX, ERR )
681.LT.
IF( ERRMAXTHRESH )THEN
682.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10000 )SNAME, NC
683.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10001 )SNAME, NC
685.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX
686.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX
691 WRITE( NOUT, FMT = 9996 )SNAME
692 CALL ZPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB,
693 $ M, N, K, ALPHA, LDA, LDB, BETA, LDC)
69810003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL
',
699 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
700 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
70110002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL
',
702 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
703 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
70410001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS
',
705 $ ' (
', I6, ' CALL
', 'S)
' )
70610000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS
',
707 $ ' (
', I6, ' CALL
', 'S)
' )
708 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER
', I2, ' WAS CH
',
709 $ 'ANGED INCORRECTLY *******
' )
710 9996 FORMAT( ' *******
', A12,' FAILED ON CALL NUMBER:
' )
711 9995 FORMAT( 1X, I6, ':
', A12,'(
''', A1, ''',
''', A1, ''',
',
712 $ 3( I3, ',
' ), '(
', F4.1, ',
', F4.1, '), A,
', I3, ', B,
', I3,
713 $ ',(
', F4.1, ',
', F4.1, '), C,
', I3, ').
' )
714 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *
',
721 SUBROUTINE ZPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N,
722 $ K, ALPHA, LDA, LDB, BETA, LDC)
723 INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC
724 DOUBLE COMPLEX ALPHA, BETA
725 CHARACTER*1 TRANSA, TRANSB
727 CHARACTER*14 CRC, CTA,CTB
729.EQ.
IF (TRANSA'N
')THEN
730 CTA = ' CblasNoTrans
'
731.EQ.
ELSE IF (TRANSA'T
')THEN
734 CTA = 'CblasConjTrans
'
736.EQ.
IF (TRANSB'N
')THEN
737 CTB = ' CblasNoTrans
'
738.EQ.
ELSE IF (TRANSB'T
')THEN
741 CTB = 'CblasConjTrans
'
744 CRC = ' CblasRowMajor
'
746 CRC = ' CblasColMajor
'
748 WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CTA,CTB
749 WRITE(NOUT, FMT = 9994)M, N, K, ALPHA, LDA, LDB, BETA, LDC
751 9995 FORMAT( 1X, I6, ':
', A12,'(
', A14, ',
', A14, ',
', A14, ',
')
752 9994 FORMAT( 10X, 3( I3, ',
' ) ,' (
', F4.1,',
',F4.1,') , A,
',
753 $ I3, ', B,
', I3, ', (
', F4.1,',
',F4.1,') , C,
', I3, ').
' )
756 SUBROUTINE ZCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
757 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
758 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
773 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
774 DOUBLE PRECISION RZERO
775 PARAMETER ( RZERO = 0.0D0 )
777 DOUBLE PRECISION EPS, THRESH
778 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
779 LOGICAL FATAL, REWI, TRACE
782 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
783 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
784 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
785 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
786 $ CS( NMAX*NMAX ), CT( NMAX )
787 DOUBLE PRECISION G( NMAX )
788 INTEGER IDIM( NIDIM )
790 COMPLEX*16 ALPHA, ALS, BETA, BLS
791 DOUBLE PRECISION ERR, ERRMAX
792 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
793 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
795 LOGICAL CONJ, LEFT, NULL, RESET, SAME
796 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
797 CHARACTER*2 ICHS, ICHU
804 EXTERNAL CZHEMM, ZMAKE, ZMMCH, CZSYMM
811 COMMON /INFOC/INFOT, NOUTC, OK, LERR
813 DATA ICHS/'LR
'/, ICHU/'UL
'/
815.EQ.
CONJ = SNAME( 8: 9 )'he
'
835.LE..OR..LE.
NULL = N0M0
847 CALL ZMAKE( 'ge
', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
851 SIDE = ICHS( ICS: ICS )
869 UPLO = ICHU( ICU: ICU )
873 CALL ZMAKE(SNAME( 8: 9 ), UPLO, ' ', NA, NA, A, NMAX,
874 $ AA, LDA, RESET, ZERO )
884 CALL ZMAKE( 'ge
', ' ', ' ', M, N, C, NMAX, CC,
914 $ CALL ZPRCN2(NTRA, NC, SNAME, IORDER,
915 $ SIDE, UPLO, M, N, ALPHA, LDA, LDB,
920 CALL CZHEMM( IORDER, SIDE, UPLO, M, N,
921 $ ALPHA, AA, LDA, BB, LDB, BETA,
924 CALL CZSYMM( IORDER, SIDE, UPLO, M, N,
925 $ ALPHA, AA, LDA, BB, LDB, BETA,
932 WRITE( NOUT, FMT = 9994 )
939.EQ.
ISAME( 1 ) = SIDESSIDE
940.EQ.
ISAME( 2 ) = UPLOSUPLO
943.EQ.
ISAME( 5 ) = ALSALPHA
944 ISAME( 6 ) = LZE( AS, AA, LAA )
945.EQ.
ISAME( 7 ) = LDASLDA
946 ISAME( 8 ) = LZE( BS, BB, LBB )
947.EQ.
ISAME( 9 ) = LDBSLDB
948.EQ.
ISAME( 10 ) = BLSBETA
950 ISAME( 11 ) = LZE( CS, CC, LCC )
952 ISAME( 11 ) = LZERES( 'ge
', ' ', M, N, CS,
955.EQ.
ISAME( 12 ) = LDCSLDC
962.AND.
SAME = SAMEISAME( I )
963.NOT.
IF( ISAME( I ) )
964 $ WRITE( NOUT, FMT = 9998 )I
976 CALL ZMMCH( 'N
', 'N
', M, N, M, ALPHA, A,
977 $ NMAX, B, NMAX, BETA, C, NMAX,
978 $ CT, G, CC, LDC, EPS, ERR,
979 $ FATAL, NOUT, .TRUE. )
981 CALL ZMMCH( 'N
', 'N
', M, N, N, ALPHA, B,
982 $ NMAX, A, NMAX, BETA, C, NMAX,
983 $ CT, G, CC, LDC, EPS, ERR,
984 $ FATAL, NOUT, .TRUE. )
986 ERRMAX = MAX( ERRMAX, ERR )
1007.LT.
IF( ERRMAXTHRESH )THEN
1008.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10000 )SNAME, NC
1009.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10001 )SNAME, NC
1011.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX
1012.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX
1017 WRITE( NOUT, FMT = 9996 )SNAME
1018 CALL ZPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, ALPHA, LDA,
102410003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL
',
1025 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1026 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
102710002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL
',
1028 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1029 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
103010001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS
',
1031 $ ' (
', I6, ' CALL
', 'S)
' )
103210000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS
',
1033 $ ' (
', I6, ' CALL
', 'S)
' )
1034 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER
', I2, ' WAS CH
',
1035 $ 'ANGED INCORRECTLY *******
' )
1036 9996 FORMAT( ' *******
', A12,' FAILED ON CALL NUMBER:
' )
1037 9995 FORMAT(1X, I6, ':
', A12,'(
', 2( '''', A1, ''',
' ), 2( I3, ',
' ),
1038 $ '(
', F4.1, ',
', F4.1, '), A,
', I3, ', B,
', I3, ',(
', F4.1,
1039 $ ',
', F4.1, '), C,
', I3, ') .
' )
1040 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *
',
1047 SUBROUTINE ZPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N,
1048 $ ALPHA, LDA, LDB, BETA, LDC)
1049 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC
1050 DOUBLE COMPLEX ALPHA, BETA
1051 CHARACTER*1 SIDE, UPLO
1053 CHARACTER*14 CRC, CS,CU
1055.EQ.
IF (SIDE'L
')THEN
1060.EQ.
IF (UPLO'U
')THEN
1065.EQ.
IF (IORDER1)THEN
1066 CRC = ' CblasRowMajor
'
1068 CRC = ' CblasColMajor
'
1070 WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU
1071 WRITE(NOUT, FMT = 9994)M, N, ALPHA, LDA, LDB, BETA, LDC
1073 9995 FORMAT( 1X, I6, ':
', A12,'(
', A14, ',
', A14, ',
', A14, ',
')
1074 9994 FORMAT( 10X, 2( I3, ',
' ),' (
',F4.1,',
',F4.1, '), A,
', I3,
1075 $ ', B,
', I3, ', (
',F4.1,',
',F4.1, '),
', 'C,
', I3, ').
' )
1078 SUBROUTINE ZCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1079 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
1080 $ B, BB, BS, CT, G, C, IORDER )
1093 COMPLEX*16 ZERO, ONE
1094 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ), ONE = ( 1.0D0, 0.0D0 ) )
1095 DOUBLE PRECISION RZERO
1096 PARAMETER ( RZERO = 0.0D0 )
1098 DOUBLE PRECISION EPS, THRESH
1099 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER
1100 LOGICAL FATAL, REWI, TRACE
1103 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1104 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1105 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
1106 $ C( NMAX, NMAX ), CT( NMAX )
1107 DOUBLE PRECISION G( NMAX )
1108 INTEGER IDIM( NIDIM )
1110 COMPLEX*16 ALPHA, ALS
1111 DOUBLE PRECISION ERR, ERRMAX
1112 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
1113 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
1115 LOGICAL LEFT, NULL, RESET, SAME
1116 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
1118 CHARACTER*2 ICHD, ICHS, ICHU
1124 EXTERNAL LZE, LZERES
1126 EXTERNAL ZMAKE, ZMMCH, CZTRMM, CZTRSM
1130 INTEGER INFOT, NOUTC
1133 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1135 DATA ICHU/'UL
'/, ICHT/'NTC
'/, ICHD/'UN
'/, ICHS/'LR
'/
1149 DO 140 IM = 1, NIDIM
1152 DO 130 IN = 1, NIDIM
1162.LE..OR..LE.
NULL = M0N0
1165 SIDE = ICHS( ICS: ICS )
1182 UPLO = ICHU( ICU: ICU )
1185 TRANSA = ICHT( ICT: ICT )
1188 DIAG = ICHD( ICD: ICD )
1195 CALL ZMAKE( 'tr
', UPLO, DIAG, NA, NA, A,
1196 $ NMAX, AA, LDA, RESET, ZERO )
1200 CALL ZMAKE( 'ge
', ' ', ' ', M, N, B, NMAX,
1201 $ BB, LDB, RESET, ZERO )
1226.EQ.
IF( SNAME( 10: 11 )'mm
' )THEN
1228 $ CALL ZPRCN3( NTRA, NC, SNAME, IORDER,
1229 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1233 CALL CZTRMM(IORDER, SIDE, UPLO, TRANSA,
1234 $ DIAG, M, N, ALPHA, AA, LDA,
1236.EQ.
ELSE IF( SNAME( 10: 11 )'sm
' )THEN
1238 $ CALL ZPRCN3( NTRA, NC, SNAME, IORDER,
1239 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1243 CALL CZTRSM(IORDER, SIDE, UPLO, TRANSA,
1244 $ DIAG, M, N, ALPHA, AA, LDA,
1251 WRITE( NOUT, FMT = 9994 )
1258.EQ.
ISAME( 1 ) = SIDESSIDE
1259.EQ.
ISAME( 2 ) = UPLOSUPLO
1260.EQ.
ISAME( 3 ) = TRANASTRANSA
1261.EQ.
ISAME( 4 ) = DIAGSDIAG
1262.EQ.
ISAME( 5 ) = MSM
1263.EQ.
ISAME( 6 ) = NSN
1264.EQ.
ISAME( 7 ) = ALSALPHA
1265 ISAME( 8 ) = LZE( AS, AA, LAA )
1266.EQ.
ISAME( 9 ) = LDASLDA
1268 ISAME( 10 ) = LZE( BS, BB, LBB )
1270 ISAME( 10 ) = LZERES( 'ge
', ' ', M, N, BS,
1273.EQ.
ISAME( 11 ) = LDBSLDB
1280.AND.
SAME = SAMEISAME( I )
1281.NOT.
IF( ISAME( I ) )
1282 $ WRITE( NOUT, FMT = 9998 )I
1290.EQ.
IF( SNAME( 10: 11 )'mm
' )THEN
1295 CALL ZMMCH( TRANSA, 'N
', M, N, M,
1296 $ ALPHA, A, NMAX, B, NMAX,
1297 $ ZERO, C, NMAX, CT, G,
1298 $ BB, LDB, EPS, ERR,
1299 $ FATAL, NOUT, .TRUE. )
1301 CALL ZMMCH( 'N
', TRANSA, M, N, N,
1302 $ ALPHA, B, NMAX, A, NMAX,
1303 $ ZERO, C, NMAX, CT, G,
1304 $ BB, LDB, EPS, ERR,
1305 $ FATAL, NOUT, .TRUE. )
1307.EQ.
ELSE IF( SNAME( 10: 11 )'sm
' )THEN
1314 C( I, J ) = BB( I + ( J - 1 )*
1316 BB( I + ( J - 1 )*LDB ) = ALPHA*
1322 CALL ZMMCH( TRANSA, 'N
', M, N, M,
1323 $ ONE, A, NMAX, C, NMAX,
1324 $ ZERO, B, NMAX, CT, G,
1325 $ BB, LDB, EPS, ERR,
1326 $ FATAL, NOUT, .FALSE. )
1328 CALL ZMMCH( 'N
', TRANSA, M, N, N,
1329 $ ONE, C, NMAX, A, NMAX,
1330 $ ZERO, B, NMAX, CT, G,
1331 $ BB, LDB, EPS, ERR,
1332 $ FATAL, NOUT, .FALSE. )
1335 ERRMAX = MAX( ERRMAX, ERR )
1358.LT.
IF( ERRMAXTHRESH )THEN
1359.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10000 )SNAME, NC
1360.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10001 )SNAME, NC
1362.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX
1363.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX
1368 WRITE( NOUT, FMT = 9996 )SNAME
1370 $ CALL ZPRCN3( NTRA, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, DIAG,
1371 $ M, N, ALPHA, LDA, LDB)
137610003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL
',
1377 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1378 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
137910002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL
',
1380 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1381 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
138210001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS
',
1383 $ ' (
', I6, ' CALL
', 'S)
' )
138410000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS
',
1385 $ ' (
', I6, ' CALL
', 'S)
' )
1386 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER
', I2, ' WAS CH
',
1387 $ 'ANGED INCORRECTLY *******
' )
1388 9996 FORMAT(' *******
', A12,' FAILED ON CALL NUMBER:
' )
1389 9995 FORMAT(1X, I6, ':
', A12,'(
', 4( '''', A1,
''',' ), 2( I3,
',' ),
1390 $
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
') ',
1392 9994
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1399 SUBROUTINE zprcn3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA,
1400 $ DIAG, M, N, ALPHA, LDA, LDB)
1401 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB
1402 DOUBLE COMPLEX ALPHA
1403 CHARACTER*1 SIDE, UPLO, TRANSA, DIAG
1405 CHARACTER*14 CRC, CS, CU, CA, CD
1407 IF (side.EQ.
'L')
THEN
1412 IF (uplo.EQ.
'U')
THEN
1417 IF (transa.EQ.
'N')
THEN
1418 ca =
' CblasNoTrans'
1419 ELSE IF (transa.EQ.
'T')
THEN
1422 ca =
'CblasConjTrans'
1424 IF (diag.EQ.
'N')
THEN
1425 cd =
' CblasNonUnit'
1429 IF (iorder.EQ.1)
THEN
1430 crc =
' CblasRowMajor'
1432 crc =
' CblasColMajor'
1434 WRITE(nout, fmt = 9995)nc,sname,crc, cs,cu
1435 WRITE(nout, fmt = 9994)ca, cd, m, n, alpha, lda, ldb
1437 9995
FORMAT( 1x, i6,
': ', a12,
'(', a14,
',', a14,
',', a14,
',')
1438 9994
FORMAT( 10x, 2( a14,
',') , 2( i3,
',' ),
' (', f4.1,
',',
1439 $ f4.1,
'), A,', i3,
', B,', i3,
').' )
1442 SUBROUTINE zchk4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1443 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1444 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
1459 PARAMETER ( ZERO = ( 0.0d0, 0.0d0 ) )
1460 DOUBLE PRECISION RONE, RZERO
1461 PARAMETER ( RONE = 1.0d0, rzero = 0.0d0 )
1463 DOUBLE PRECISION EPS, THRESH
1464 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1465 LOGICAL FATAL, REWI, TRACE
1468 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1469 $ as( nmax*nmax ), b( nmax, nmax ),
1470 $ bb( nmax*nmax ), bet( nbet ), bs( nmax*nmax ),
1471 $ c( nmax, nmax ), cc( nmax*nmax ),
1472 $ cs( nmax*nmax ), ct( nmax )
1473 DOUBLE PRECISION G( NMAX )
1474 INTEGER IDIM( NIDIM )
1476 COMPLEX*16 ALPHA, ALS, BETA, BETS
1477 DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1478 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1479 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1481 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1482 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1483 CHARACTER*2 ICHT, ICHU
1488 EXTERNAL LZE, LZERES
1492 INTRINSIC dcmplx,
max, dble
1494 INTEGER INFOT, NOUTC
1497 COMMON /infoc/infot, noutc, ok, lerr
1499 DATA icht/
'NC'/, ichu/
'UL'/
1501 conj = sname( 8: 9 ).EQ.
'he'
1508 DO 100 in = 1, nidim
1523 trans = icht( ict: ict )
1525 IF( tran.AND..NOT.conj )
1545 CALL zmake(
'ge',
' ',
' ', ma, na, a, nmax, aa, lda,
1549 uplo = ichu( icu: icu )
1555 ralpha = dble( alpha )
1556 alpha = dcmplx( ralpha, rzero )
1562 rbeta = dble( beta )
1563 beta = dcmplx( rbeta, rzero )
1567 $ null = null.OR.( ( k.LE.0.OR.ralpha.EQ.
1568 $ rzero ).AND.rbeta.EQ.rone )
1572 CALL zmake( sname( 8: 9 ), uplo,
' ', n, n, c,
1573 $ nmax, cc, ldc, reset, zero )
1606 $
CALL zprcn6( ntra, nc, sname, iorder,
1607 $ uplo, trans, n, k, ralpha, lda, rbeta,
1611 CALL czherk( iorder, uplo, trans, n, k,
1612 $ ralpha, aa, lda, rbeta, cc,
1616 $
CALL zprcn4( ntra, nc, sname, iorder,
1617 $ uplo, trans, n, k, alpha, lda, beta, ldc)
1620 CALL czsyrk( iorder, uplo, trans, n, k,
1621 $ alpha, aa, lda, beta, cc, ldc )
1627 WRITE( nout, fmt = 9992 )
1634 isame( 1 ) = uplos.EQ.uplo
1635 isame( 2 ) = transs.EQ.trans
1636 isame( 3 ) = ns.EQ.n
1637 isame( 4 ) = ks.EQ.k
1639 isame( 5 ) = rals.EQ.ralpha
1641 isame( 5 ) = als.EQ.alpha
1643 isame( 6 ) = lze( as, aa, laa )
1644 isame( 7 ) = ldas.EQ.lda
1646 isame( 8 ) = rbets.EQ.rbeta
1648 isame( 8 ) = bets.EQ.beta
1651 isame( 9 ) = lze( cs, cc, lcc )
1653 isame( 9 ) = lzeres( sname( 8: 9 ), uplo, n,
1656 isame( 10 ) = ldcs.EQ.ldc
1663 same = same.AND.isame( i )
1664 IF( .NOT.isame( i ) )
1665 $
WRITE( nout, fmt = 9998 )i
1691 CALL zmmch( transt,
'N', lj, 1, k,
1692 $ alpha, a( 1, jj ), nmax,
1693 $ a( 1, j ), nmax, beta,
1694 $ c( jj, j ), nmax, ct, g,
1695 $ cc( jc ), ldc, eps, err,
1696 $ fatal, nout, .true. )
1698 CALL zmmch(
'N', transt, lj, 1, k,
1699 $ alpha, a( jj, 1 ), nmax,
1700 $ a( j, 1 ), nmax, beta,
1701 $ c( jj, j ), nmax, ct, g,
1702 $ cc( jc ), ldc, eps, err,
1703 $ fatal, nout, .true. )
1710 errmax =
max( errmax, err )
1732 IF( errmax.LT.thresh )
THEN
1733 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
1734 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
1736 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
1737 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
1743 $
WRITE( nout, fmt = 9995 )j
1746 WRITE( nout, fmt = 9996 )sname
1748 CALL zprcn6( nout, nc, sname, iorder, uplo, trans, n, k, ralpha,
1751 CALL zprcn4( nout, nc, sname, iorder, uplo, trans, n, k, alpha,
175810003
FORMAT(
' ', a12,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
1759 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1760 $
'RATIO ', f8.2,
' - SUSPECT *******' )
176110002
FORMAT(
' ', a12,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
1762 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
1763 $
'RATIO ', f8.2,
' - SUSPECT *******' )
176410001
FORMAT(
' ', a12,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
1765 $
' (', i6,
' CALL',
'S)' )
176610000
FORMAT(
' ', a12,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
1767 $
' (', i6,
' CALL',
'S)' )
1768 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
1769 $
'ANGED INCORRECTLY *******' )
1770 9996
FORMAT(
' ******* ', a12,
' FAILED ON CALL NUMBER:' )
1771 9995
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
1772 9994
FORMAT(1x, i6,
': ', a12,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
1773 $ f4.1,
', A,', i3,
',', f4.1,
', C,', i3,
') ',
1775 9993
FORMAT(1x, i6,
': ', a12,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
1776 $
'(', f4.1,
',', f4.1,
') , A,', i3,
',(', f4.1,
',', f4.1,
1777 $
'), C,', i3,
') .' )
1778 9992
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1785 SUBROUTINE zprcn4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
1786 $ N, K, ALPHA, LDA, BETA, LDC)
1787 INTEGER NOUT, NC, IORDER, N, K, LDA, LDC
1788 DOUBLE COMPLEX ALPHA, BETA
1789 CHARACTER*1 UPLO, TRANSA
1791 CHARACTER*14 CRC, CU, CA
1793 IF (uplo.EQ.
'U')
THEN
1798 IF (transa.EQ.
'N')
THEN
1799 ca =
' CblasNoTrans'
1800 ELSE IF (transa.EQ.
'T')
THEN
1803 ca =
'CblasConjTrans'
1805 IF (iorder.EQ.1)
THEN
1806 crc =
' CblasRowMajor'
1808 crc =
' CblasColMajor'
1810 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
1811 WRITE(nout, fmt = 9994)n, k, alpha, lda, beta, ldc
1813 9995
FORMAT( 1x, i6,
': ', a12,
'(', 3( a14,
',') )
1814 9994
FORMAT( 10x, 2( i3,
',' ),
' (', f4.1,
',', f4.1 ,
'), A,',
1815 $ i3,
', (', f4.1,
',', f4.1,
'), C,', i3,
').' )
1819 SUBROUTINE zprcn6(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
1820 $ N, K, ALPHA, LDA, BETA, LDC)
1821 INTEGER NOUT, NC, IORDER, N, K, LDA, LDC
1822 DOUBLE PRECISION ALPHA, BETA
1823 CHARACTER*1 UPLO, TRANSA
1825 CHARACTER*14 CRC, CU, CA
1827 IF (uplo.EQ.
'U')
THEN
1832 IF (transa.EQ.
'N')
THEN
1833 ca =
' CblasNoTrans'
1834 ELSE IF (transa.EQ.
'T')
THEN
1837 ca =
'CblasConjTrans'
1839 IF (iorder.EQ.1)
THEN
1840 crc =
' CblasRowMajor'
1842 crc =
' CblasColMajor'
1844 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
1845 WRITE(nout, fmt = 9994)n, k, alpha, lda, beta, ldc
1847 9995
FORMAT( 1x, i6,
': ', a12,
'(', 3( a14,
',') )
1848 9994
FORMAT( 10x, 2( i3,
',' ),
1849 $ f4.1,
', A,', i3,
',', f4.1,
', C,', i3,
').' )
1852 SUBROUTINE zchk5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1853 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1854 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W,
1868 COMPLEX*16 ZERO, ONE
1869 PARAMETER ( ZERO = ( 0.0d0, 0.0d0 ), one = ( 1.0d0, 0.0d0 ) )
1870 DOUBLE PRECISION RONE, RZERO
1871 PARAMETER ( RONE = 1.0d0, rzero = 0.0d0 )
1873 DOUBLE PRECISION EPS, THRESH
1874 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1875 LOGICAL FATAL, REWI, TRACE
1878 COMPLEX*16 AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1879 $ alf( nalf ), as( nmax*nmax ), bb( nmax*nmax ),
1880 $ bet( nbet ), bs( nmax*nmax ), c( nmax, nmax ),
1881 $ cc( nmax*nmax ), cs( nmax*nmax ), ct( nmax ),
1883 DOUBLE PRECISION G( NMAX )
1884 INTEGER IDIM( NIDIM )
1886 COMPLEX*16 ALPHA, ALS, BETA, BETS
1887 DOUBLE PRECISION ERR, ERRMAX, RBETA, RBETS
1888 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1889 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1890 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1891 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1892 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1893 CHARACTER*2 ICHT, ICHU
1898 EXTERNAL LZE, LZERES
1902 INTRINSIC dcmplx, dconjg,
max, dble
1904 INTEGER INFOT, NOUTC
1907 COMMON /infoc/infot, noutc, ok, lerr
1909 DATA icht/
'NC'/, ichu/
'UL'/
1911 conj = sname( 8: 9 ).EQ.
'he'
1918 DO 130 in = 1, nidim
1929 DO 120 ik = 1, nidim
1933 trans = icht( ict: ict )
1935 IF( tran.AND..NOT.conj )
1956 CALL zmake(
'ge',
' ',
' ', ma, na, ab, 2*nmax, aa,
1957 $ lda, reset, zero )
1959 CALL zmake(
'ge',
' ',
' ', ma, na, ab, nmax, aa, lda,
1968 CALL zmake(
'ge',
' ',
' ', ma, na, ab( k + 1 ),
1969 $ 2*nmax, bb, ldb, reset, zero )
1971 CALL zmake(
'ge',
' ',
' ', ma, na, ab( k*nmax + 1 ),
1972 $ nmax, bb, ldb, reset, zero )
1976 uplo = ichu( icu: icu )
1985 rbeta = dble( beta )
1986 beta = dcmplx( rbeta, rzero )
1990 $ null = null.OR.( ( k.LE.0.OR.alpha.EQ.
1991 $ zero ).AND.rbeta.EQ.rone )
1995 CALL zmake( sname( 8: 9 ), uplo,
' ', n, n, c,
1996 $ nmax, cc, ldc, reset, zero )
2029 $
CALL zprcn7( ntra, nc, sname, iorder,
2030 $ uplo, trans, n, k, alpha, lda, ldb,
2034 CALL czher2k( iorder, uplo, trans, n, k,
2035 $ alpha, aa, lda, bb, ldb, rbeta,
2039 $
CALL zprcn5( ntra, nc, sname, iorder,
2040 $ uplo, trans, n, k, alpha, lda, ldb,
2044 CALL czsyr2k( iorder, uplo, trans, n, k,
2045 $ alpha, aa, lda, bb, ldb, beta,
2052 WRITE( nout, fmt = 9992 )
2059 isame( 1 ) = uplos.EQ.uplo
2060 isame( 2 ) = transs.EQ.trans
2061 isame( 3 ) = ns.EQ.n
2062 isame( 4 ) = ks.EQ.k
2063 isame( 5 ) = als.EQ.alpha
2064 isame( 6 ) = lze( as, aa, laa )
2065 isame( 7 ) = ldas.EQ.lda
2066 isame( 8 ) = lze( bs, bb, lbb )
2067 isame( 9 ) = ldbs.EQ.ldb
2069 isame( 10 ) = rbets.EQ.rbeta
2071 isame( 10 ) = bets.EQ.beta
2074 isame( 11 ) = lze( cs, cc, lcc )
2076 isame( 11 ) = lzeres(
'he', uplo, n, n, cs,
2079 isame( 12 ) = ldcs.EQ.ldc
2086 same = same.AND.isame( i )
2087 IF( .NOT.isame( i ) )
2088 $
WRITE( nout, fmt = 9998 )i
2116 w( i ) = alpha*ab( ( j - 1 )*2*
2119 w( k + i ) = dconjg( alpha )*
2128 CALL zmmch( transt,
'N', lj, 1, 2*k,
2129 $ one, ab( jjab ), 2*nmax, w,
2130 $ 2*nmax, beta, c( jj, j ),
2131 $ nmax, ct, g, cc( jc ), ldc,
2132 $ eps, err, fatal, nout,
2137 w( i ) = alpha*dconjg( ab( ( k +
2138 $ i - 1 )*nmax + j ) )
2139 w( k + i ) = dconjg( alpha*
2140 $ ab( ( i - 1 )*nmax +
2143 w( i ) = alpha*ab( ( k + i - 1 )*
2146 $ ab( ( i - 1 )*nmax +
2150 CALL zmmch(
'N',
'N', lj, 1, 2*k, one,
2151 $ ab( jj ), nmax, w, 2*nmax,
2152 $ beta, c( jj, j ), nmax, ct,
2153 $ g, cc( jc ), ldc, eps, err,
2154 $ fatal, nout, .true. )
2161 $ jjab = jjab + 2*nmax
2163 errmax =
max( errmax, err )
2185 IF( errmax.LT.thresh )
THEN
2186 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10000 )sname, nc
2187 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10001 )sname, nc
2189 IF ( iorder.EQ.0)
WRITE( nout, fmt = 10002 )sname, nc, errmax
2190 IF ( iorder.EQ.1)
WRITE( nout, fmt = 10003 )sname, nc, errmax
2196 $
WRITE( nout, fmt = 9995 )j
2199 WRITE( nout, fmt = 9996 )sname
2201 CALL zprcn7( nout, nc, sname, iorder, uplo, trans, n, k,
2202 $ alpha, lda, ldb, rbeta, ldc)
2204 CALL zprcn5( nout, nc, sname, iorder, uplo, trans, n, k,
2205 $ alpha, lda, ldb, beta, ldc)
221110003
FORMAT(
' ', a12,
' COMPLETED THE ROW-MAJOR COMPUTATIONAL ',
2212 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2213 $
'RATIO ', f8.2,
' - SUSPECT *******' )
221410002
FORMAT(
' ', a12,
' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL ',
2215 $
'TESTS (', i6,
' CALLS)', /
' ******* BUT WITH MAXIMUM TEST ',
2216 $
'RATIO ', f8.2,
' - SUSPECT *******' )
221710001
FORMAT(
' ', a12,
' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS',
2218 $
' (', i6,
' CALL',
'S)' )
221910000
FORMAT(
' ', a12,
' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS',
2220 $
' (', i6,
' CALL',
'S)' )
2221 9998
FORMAT(
' ******* FATAL ERROR - PARAMETER NUMBER ', i2,
' WAS CH',
2222 $
'ANGED INCORRECTLY *******' )
2223 9996
FORMAT(
' ******* ', a12,
' FAILED ON CALL NUMBER:' )
2224 9995
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2225 9994
FORMAT(1x, i6,
': ', a12,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
2226 $
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
',', f4.1,
2227 $
', C,', i3,
') .' )
2228 9993
FORMAT(1x, i6,
': ', a12,
'(', 2(
'''', a1,
''',' ), 2( i3,
',' ),
2229 $
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
',(', f4.1,
2230 $
',', f4.1,
'), C,', i3,
') .' )
2231 9992
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2238 SUBROUTINE zprcn5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
2239 $ N, K, ALPHA, LDA, LDB, BETA, LDC)
2240 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
2241 DOUBLE COMPLEX ALPHA, BETA
2242 CHARACTER*1 UPLO, TRANSA
2244 CHARACTER*14 CRC, CU, CA
2246 IF (uplo.EQ.
'U')
THEN
2251 IF (transa.EQ.
'N')
THEN
2252 ca =
' CblasNoTrans'
2253 ELSE IF (transa.EQ.
'T')
THEN
2256 ca =
'CblasConjTrans'
2258 IF (iorder.EQ.1)
THEN
2259 crc =
' CblasRowMajor'
2261 crc =
' CblasColMajor'
2263 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
2264 WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
2266 9995
FORMAT( 1x, i6,
': ', a12,
'(', 3( a14,
',') )
2267 9994
FORMAT( 10x, 2( i3,
',' ),
' (', f4.1,
',', f4.1,
'), A,',
2268 $ i3,
', B', i3,
', (', f4.1,
',', f4.1,
'), C,', i3,
').' )
2272 SUBROUTINE zprcn7(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
2273 $ N, K, ALPHA, LDA, LDB, BETA, LDC)
2274 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
2275 DOUBLE COMPLEX ALPHA
2276 DOUBLE PRECISION BETA
2277 CHARACTER*1 UPLO, TRANSA
2279 CHARACTER*14 CRC, CU, CA
2281 IF (uplo.EQ.
'U')
THEN
2286 IF (transa.EQ.
'N')
THEN
2287 ca =
' CblasNoTrans'
2288 ELSE IF (transa.EQ.
'T')
THEN
2291 ca =
'CblasConjTrans'
2293 IF (iorder.EQ.1)
THEN
2294 crc =
' CblasRowMajor'
2296 crc =
' CblasColMajor'
2298 WRITE(nout, fmt = 9995)nc, sname, crc, cu, ca
2299 WRITE(nout, fmt = 9994)n, k, alpha, lda, ldb, beta, ldc
2301 9995
FORMAT( 1x, i6,
': ', a12,
'(', 3( a14,
',') )
2302 9994
FORMAT( 10x, 2( i3,
',' ),
' (', f4.1,
',', f4.1,
'), A,',
2303 $ i3,
', B', i3,
',', f4.1,
', C,', i3,
').' )
2306 SUBROUTINE zmake( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2324 COMPLEX*16 ZERO, ONE
2325 PARAMETER ( ZERO = ( 0.0d0, 0.0d0 ),
2326 $ one = ( 1.0d0, 0.0d0 ) )
2328 PARAMETER ( ROGUE = ( -1.0d10, 1.0d10 ) )
2329 DOUBLE PRECISION RZERO
2330 PARAMETER ( RZERO = 0.0d0 )
2331 DOUBLE PRECISION RROGUE
2332 PARAMETER ( RROGUE = -1.0d10 )
2335 INTEGER LDA, M, N, NMAX
2337 CHARACTER*1 DIAG, UPLO
2340 COMPLEX*16 A( NMAX, * ), AA( * )
2342 INTEGER I, IBEG, IEND, J, JJ
2343 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2348 INTRINSIC dcmplx, dconjg, dble
2354 upper = ( her.OR.sym.OR.tri ).AND.uplo.EQ.
'U'
2355 lower = ( her.OR.sym.OR.tri ).AND.uplo.EQ.
'L'
2356 unit = tri.AND.diag.EQ.
'U'
2362 IF( gen.OR.( upper.AND.i.LE.j ).OR.( lower.AND.i.GE.j ) )
2364 a( i, j ) = zbeg( reset ) + transl
2367 IF( n.GT.3.AND.j.EQ.n/2 )
2370 a( j, i ) = dconjg( a( i, j ) )
2372 a( j, i ) = a( i, j )
2380 $ a( j, j ) = dcmplx( dble( a( j, j ) ), rzero )
2382 $ a( j, j ) = a( j, j ) + one
2389 IF( type.EQ.
'ge' )
THEN
2392 aa( i + ( j - 1 )*lda ) = a( i, j )
2394 DO 40 i = m + 1, lda
2395 aa( i + ( j - 1 )*lda ) = rogue
2398 ELSE IF( type.EQ.
'he'.OR.type.EQ.
'sy'.OR.type.EQ.
'tr' )
THEN
2415 DO 60 i = 1, ibeg - 1
2416 aa( i + ( j - 1 )*lda ) = rogue
2418 DO 70 i = ibeg, iend
2419 aa( i + ( j - 1 )*lda ) = a( i, j )
2421 DO 80 i = iend + 1, lda
2422 aa( i + ( j - 1 )*lda ) = rogue
2425 jj = j + ( j - 1 )*lda
2426 aa( jj ) = dcmplx( dble( aa( jj ) ), rrogue )
2435 SUBROUTINE zmmch( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
2436 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
2451 PARAMETER ( ZERO = ( 0.0d0, 0.0d0 ) )
2452 DOUBLE PRECISION RZERO, RONE
2453 PARAMETER ( RZERO = 0.0d0, rone = 1.0d0 )
2455 COMPLEX*16 ALPHA, BETA
2456 DOUBLE PRECISION EPS, ERR
2457 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
2459 CHARACTER*1 TRANSA, TRANSB
2461 COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ),
2462 $ CC( LDCC, * ), CT( * )
2463 DOUBLE PRECISION G( * )
2466 DOUBLE PRECISION ERRI
2468 LOGICAL CTRANA, CTRANB, TRANA, TRANB
2470 INTRINSIC abs, dimag, dconjg,
max, dble, sqrt
2472 DOUBLE PRECISION ABS1
2474 abs1( cl ) = abs( dble( cl ) ) + abs( dimag( cl ) )
2476 trana = transa.EQ.
'T'.OR.transa.EQ.
'C'
2477 tranb = transb.EQ.
'T'.OR.transb.EQ.
'C'
2478 ctrana = transa.EQ.
'C'
2479 ctranb = transb.EQ.
'C'
2491 IF( .NOT.trana.AND..NOT.tranb )
THEN
2494 ct( i ) = ct( i ) + a( i, k )*b( k, j )
2495 g( i ) = g( i ) + abs1( a( i, k ) )*abs1( b( k, j ) )
2498 ELSE IF( trana.AND..NOT.tranb )
THEN
2502 ct( i ) = ct( i ) + dconjg( a( k, i ) )*b( k, j )
2503 g( i ) = g( i ) + abs1( a( k, i ) )*
2510 ct( i ) = ct( i ) + a( k, i )*b( k, j )
2511 g( i ) = g( i ) + abs1( a( k, i ) )*
2516 ELSE IF( .NOT.trana.AND.tranb )
THEN
2520 ct( i ) = ct( i ) + a( i, k )*dconjg( b( j, k ) )
2521 g( i ) = g( i ) + abs1( a( i, k ) )*
2528 ct( i ) = ct( i ) + a( i, k )*b( j, k )
2529 g( i ) = g( i ) + abs1( a( i, k ) )*
2534 ELSE IF( trana.AND.tranb )
THEN
2539 ct( i ) = ct( i ) + dconjg( a( k, i ) )*
2540 $ dconjg( b( j, k ) )
2541 g( i ) = g( i ) + abs1( a( k, i ) )*
2548 ct( i ) = ct( i ) + dconjg( a( k, i ) )*
2550 g( i ) = g( i ) + abs1( a( k, i ) )*
2559 ct( i ) = ct( i ) + a( k, i )*
2560 $ dconjg( b( j, k ) )
2561 g( i ) = g( i ) + abs1( a( k, i ) )*
2568 ct( i ) = ct( i ) + a( k, i )*b( j, k )
2569 g( i ) = g( i ) + abs1( a( k, i ) )*
2577 ct( i ) = alpha*ct( i ) + beta*c( i, j )
2578 g( i ) = abs1( alpha )*g( i ) +
2579 $ abs1( beta )*abs1( c( i, j ) )
2586 erri = abs1( ct( i ) - cc( i, j ) )/eps
2587 IF( g( i ).NE.rzero )
2588 $ erri = erri/g( i )
2589 err =
max( err, erri )
2590 IF( err*sqrt( eps ).GE.rone )
2602 WRITE( nout, fmt = 9999 )
2605 WRITE( nout, fmt = 9998 )i, ct( i ), cc( i, j )
2607 WRITE( nout, fmt = 9998 )i, cc( i, j ), ct( i )
2611 $
WRITE( nout, fmt = 9997 )j
2616 9999
FORMAT(
' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2617 $
'F ACCURATE *******', /
' EXPECTED RE',
2618 $
'SULT COMPUTED RESULT' )
2619 9998
FORMAT( 1x, i7, 2(
' (', g15.6,
',', g15.6,
')' ) )
2620 9997
FORMAT(
' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2625 LOGICAL FUNCTION lze( RI, RJ, LR )
2640 COMPLEX*16 ri( * ), rj( * )
2645 IF( ri( i ).NE.rj( i ) )
2657 LOGICAL FUNCTION lzeres( TYPE, UPLO, M, N, AA, AS, LDA )
2676 COMPLEX*16 aa( lda, * ), as( lda, * )
2678 INTEGER i, ibeg, iend, j
2682 IF( type.EQ.
'ge' )
THEN
2684 DO 10 i = m + 1, lda
2685 IF( aa( i, j ).NE.as( i, j ) )
2689 ELSE IF( type.EQ.
'he'.OR.type.EQ.
'sy' )
THEN
2698 DO 30 i = 1, ibeg - 1
2699 IF( aa( i, j ).NE.as( i, j ) )
2702 DO 40 i = iend + 1, lda
2703 IF( aa( i, j ).NE.as( i, j ) )
2735 INTEGER i, ic, j, mi, mj
2737 SAVE i, ic, j, mi, mj
2761 i = i - 1000*( i/1000 )
2762 j = j - 1000*( j/1000 )
2767 zbeg = dcmplx( ( i - 500 )/1001.0d0, ( j - 500 )/1001.0d0 )
2784 DOUBLE PRECISION x, y
logical function lze(ri, rj, lr)
subroutine zchk1(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, nbet, bet, nmax, a, aa, as, b, bb, bs, c, cc, cs, ct, g, iorder)
subroutine zprcn6(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
logical function lzeres(type, uplo, m, n, aa, as, lda)
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 zprcn7(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, ldb, beta, ldc)
subroutine zchk4(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, nbet, bet, nmax, a, aa, as, b, bb, bs, c, cc, cs, ct, g, iorder)
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)
complex *16 function zbeg(reset)
subroutine zchk3(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, nmax, a, aa, as, b, bb, bs, ct, g, c, iorder)
subroutine zchk5(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, nbet, bet, nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w, iorder)
double precision function ddiff(x, y)
subroutine zchk2(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, nbet, bet, nmax, a, aa, as, b, bb, bs, c, cc, cs, ct, g, iorder)
subroutine zmake(type, uplo, diag, m, n, a, nmax, aa, lda, reset, transl)
subroutine zprcn4(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, beta, ldc)
if(complex_arithmetic) id
end diagonal values have been computed in the(sparse) matrix id.SOL