50 parameter( nin = 5, nout = 6 )
52 parameter( nsubs = 9 )
54 parameter( zero = ( 0.0, 0.0 ), one = ( 1.0, 0.0 ) )
55 REAL rzero, rhalf, rone
56 parameter( rzero = 0.0, rhalf = 0.5, rone = 1.0 )
58 parameter( nmax = 65 )
59 INTEGER nidmax, nalmax, nbemax
60 parameter( nidmax = 9, nalmax = 7, nbemax = 7 )
63 INTEGER i, isnum, j, n, nalf, nbet, nidim, ntra,
65 LOGICAL fatal, ltestt, rewi, same, sfatal,
67CHARACTER*1 transa, transb
71 COMPLEX aa( nmax*nmax ), ab( nmax, 2*nmax ),
72 $ alf( nalmax ), as( nmax*nmax ),
73 $ bb( nmax*nmax ), bet( nbemax ),
74 $ bs( nmax*nmax ), c( nmax, nmax ),
75 $ cc( nmax*nmax ), cs( nmax*nmax ), ct( nmax ),
78 INTEGER idim( nidmax )
79 LOGICAL ltest( nsubs )
80 CHARACTER*12 snames( nsubs )
94 COMMON /infoc/infot, noutc, ok, lerr
97 DATA snames/
'cblas_cgemm ',
'cblas_chemm ',
98 $
'cblas_csymm ',
'cblas_ctrmm ',
'cblas_ctrsm ',
99 $
'cblas_cherk ',
'cblas_csyrk ',
'cblas_cher2k',
107 READ( nin, fmt = * )snaps
108 READ( nin, fmt = * )ntra
111 OPEN( ntra, file = snaps )
114 READ( nin, fmt = * )rewi
115 rewi = rewi.AND.trace
117 READ( nin, fmt = * )sfatal
119 READ( nin, fmt = * )tsterr
121 READ( nin, fmt = * )layout
123 READ( nin, fmt = * )thresh
128 READ( nin, fmt = * )nidim
129 IF( nidim.LT.1.OR.nidim.GT.nidmax )
THEN
130 WRITE( nout, fmt = 9
'N', nidmax
133 READ( nin, fmt = * )( idim( i ), i = 1, nidim )
135 IF( idim( i ).LT.0.OR.idim( i ).GT.nmax )
THEN
136 WRITE( nout, fmt = 9996 )nmax
141 READ( nin, fmt = * )nalf
142 IF( nalf.LT.1.OR.nalf.GT.nalmax )
THEN
143 WRITE( nout, fmt = 9997 )
'ALPHA', nalmax
146 READ( nin, fmt = * )( alf( i ), i = 1, nalf )
148 READ( nin, fmt = * )nbet
149 IF( nbet.LT.1.OR.nbet.GT.nbemax )
THEN
150 WRITE( nout, fmt = 9997 )
'BETA', nbemax
153 READ( nin, fmt = * )( bet( i ), i = 1, nbet )
157 WRITE( nout, fmt = 9995 )
158 WRITE( nout, fmt = 9994 )( idim( i ), i = 1, nidim )
159 WRITE( nout, fmt = 9993 )( alf( i ), i = 1, nalf )
160 WRITE( nout, fmt = 9992 )( bet( i ), i = 1, nbet )
161 IF( .NOT.tsterr )
THEN
162 WRITE( nout, fmt = * )
163 WRITE( nout, fmt = 9984 )
165 WRITE( nout, fmt = * )
166 WRITE( nout, fmt = 9999 )thresh
167 WRITE( nout, fmt = * )
171 IF (layout.EQ.2)
THEN
174 WRITE( *, fmt = 10002 )
175 ELSE IF (layout.EQ.1)
THEN
177 WRITE( *, fmt = 10001 )
178 ELSE IF (layout.EQ.0)
THEN
180 WRITE( *, fmt = 10000 )
191 30
READ( nin, fmt = 9988,
END = 60 )SNAMET, ltestt
193 IF( snamet.EQ.snames( i ) )
196 WRITE( nout, fmt = 9990 )snamet
198 50 ltest( i ) = ltestt
208 IF(
sdiff( rone + eps, rone ).EQ.rzero )
214 WRITE( nout, fmt = 9998 )eps
221 ab( i, j ) =
max( i - j + 1, 0 )
223 ab( j, nmax + 1 ) = j
224 ab( 1, nmax + j ) = j
228 cc( j ) = j*( ( j + 1 )*j )/2 - ( ( j + 1 )*j*( j - 1 ) )/3
234 CALL cmmch( transa, transb, n, 1, n, one, ab, nmax,
235 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
236 $ nmax, eps, err,
fatal, nout, .true. )
237 same =
lce( cc, ct, n )
238 IF( .NOT.same.OR.err.NE.rzero )
THEN
239 WRITE( nout, fmt = 9989 )transa, transb, same, err
243 CALL cmmch( transa, transb, n, 1, n, one, ab, nmax,
244 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
245 $ nmax, eps, err,
fatal, nout, .true. )
246 same =
lce( cc, ct, n )
247 IF( .NOT.same.OR.err.NE.rzero )
THEN
248 WRITE( nout, fmt = 9989 )transa, transb, same, err
252 ab( j, nmax + 1 ) = n - j + 1
253 ab( 1, nmax + j ) = n - j + 1
256 cc( n - j + 1 ) = j*( ( j + 1 )*j )/2 -
257 $ ( ( j + 1 )*j*( j - 1 ) )/3
261 CALL cmmch( transa, transb, n, 1, n, one, ab, nmax,
262 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
263 $ nmax, eps, err,
fatal, nout, .true. )
264 same =
lce( cc, ct, n )
265 IF( .NOT.same.OR.err.NE.rzero )
THEN
266 WRITE( nout, fmt = 9989 )transa, transb, same, err
270 CALL cmmch( transa, transb, n, 1, n, one, ab, nmax,
271 $ ab( 1, nmax + 1 ), nmax, zero, c, nmax, ct, g, cc,
272 $ nmax, eps, err,
fatal, nout, .true. )
273 same =
lce( cc, ct, n )
274 IF( .NOT.same.OR.err.NE.rzero )
THEN
275 WRITE( nout, fmt = 9989 )transa, transb, same, err
281 DO 200 isnum = 1, nsubs
282 WRITE( nout, fmt = * )
283 IF( .NOT.ltest( isnum ) )
THEN
285 WRITE( nout, fmt = 9987 )snames( isnum )
287 srnamt = snames( isnum )
290 CALL cc3chke( snames( isnum ) )
291 WRITE( nout, fmt = * )
297 GO TO ( 140, 150, 150, 160, 160, 170, 170,
301 CALL cchk1(snames( isnum ), eps, thresh, nout, ntra, trace,
302 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
303 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
307 CALL cchk1(snames( isnum ), eps, thresh, nout, ntra, trace,
308 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
309 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
315 CALL cchk2(snames( isnum ), eps, thresh, nout, ntra, trace,
316 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
317 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
321 CALL cchk2(snames( isnum ), eps, thresh, nout, ntra, trace,
322 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
323 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
329 CALL cchk3(snames( isnum ), eps, thresh, nout, ntra, trace,
330 $ rewi,
fatal, nidim, idim, nalf, alf, nmax, ab,
331 $ aa, as, ab( 1, nmax + 1 ), bb, bs, ct, g, c,
335 CALL cchk3(snames( isnum ), eps, thresh, nout, ntra, trace,
336 $ rewi,
fatal, nidim, idim, nalf, alf, nmax, ab,
337 $ aa, as, ab( 1, nmax + 1 ), bb, bs, ct, g, c,
343 CALL cchk4(snames( isnum ), eps, thresh, nout, ntra, trace,
344 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
345 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
349 CALL cchk4(snames( isnum ), eps, thresh, nout, ntra, trace,
350 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
351 $ nmax, ab, aa, as, ab( 1, nmax + 1 ), bb, bs, c,
357 CALL cchk5(snames( isnum ), eps, thresh, nout, ntra, trace,
358 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
359 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
363 CALL cchk5(snames( isnum ), eps, thresh, nout, ntra, trace,
364 $ rewi,
fatal, nidim, idim, nalf, alf, nbet, bet,
365 $ nmax, ab, aa, as, bb, bs, c, cc, cs, ct, g, w,
370 190
IF(
fatal.AND.sfatal )
374 WRITE( nout, fmt = 9986 )
378 WRITE( nout, fmt = 9985 )
382 WRITE( nout, fmt = 9991 )
39010002
FORMAT(
' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' )
39110001
FORMAT(
' ROW-MAJOR DATA LAYOUT IS TESTED' )
39210000
FORMAT(
' COLUMN-MAJOR DATA LAYOUT IS TESTED' )
393 9999
FORMAT(
' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
395 9998
FORMAT(
' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1p, e9.1 )
396 9997
FORMAT(
' NUMBER OF VALUES OF ', a,
' IS LESS THAN 1 OR GREATER ',
398 9996
FORMAT(
' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', i2 )
399 9995
FORMAT(
' TESTS OF THE COMPLEX LEVEL 3 BLAS', //
' THE F',
400 $
'OLLOWING PARAMETER VALUES WILL BE USED:' )
401 9994
FORMAT(
' FOR N ', 9i6 )
402 9993
FORMAT(
' FOR ALPHA ',
403 $ 7(
'(', f4.1,
',', f4.1,
') ', : ) )
404 9992
FORMAT(
' FOR BETA ',
405 $ 7(
'(', f4.1,
',', f4.1,
') ', : ) )
406 9991
FORMAT(
' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
407 $ /
' ******* TESTS ABANDONED *******' )
408 9990
FORMAT(
' SUBPROGRAM NAME ', a12,
' NOT RECOGNIZED', /
' ******* T',
409 $
'ESTS ABANDONED *******' )
410 9989
FORMAT(
' ERROR IN CMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
411 $
'ATED WRONGLY.', /
' CMMCH WAS CALLED WITH TRANSA = ', a1,
412 $
'AND TRANSB = ', a1, /
' AND RETURNED SAME = ', l1,
' AND ',
413 $ ' err =
', F12.3, '.
', /' this may be due to faults in
the ',
414 $ 'arithmetic or
the compiler.
', /' ******* tests abandoned
',
416 9988 FORMAT( A12,L2 )
417 9987 FORMAT( 1X, A12,' was not tested
' )
418 9986 FORMAT( /' END OF TESTS
' )
419 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******
' )
420 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED
' )
425 SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
426 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
427 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
442 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
444 PARAMETER ( RZERO = 0.0 )
447 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
448 LOGICAL FATAL, REWI, TRACE
451 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
452 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
453 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
454 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
455 $ CS( NMAX*NMAX ), CT( NMAX )
457 INTEGER IDIM( NIDIM )
459 COMPLEX ALPHA, ALS, BETA, BLS
461 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
462 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
463 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
464 LOGICAL NULL, RESET, SAME, TRANA, TRANB
465 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
473 EXTERNAL CCGEMM, CMAKE, CMMCH
480 COMMON /INFOC/INFOT, NOUTC, OK, LERR
503.LE..OR..LE.
NULL = N0M0
509 TRANSA = ICH( ICA: ICA )
510.EQ.
TRANA = TRANSA'T.OR..EQ.
'TRANSA'C
'
530 CALL CMAKE( 'ge
', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
534 TRANSB = ICH( ICB: ICB )
535.EQ.
TRANB = TRANSB'T.OR..EQ.
'TRANSB'C
'
555 CALL CMAKE( 'ge
', ' ', ' ', MB, NB, B, NMAX, BB,
566 CALL CMAKE( 'ge
', ' ', ' ', M, N, C, NMAX,
567 $ CC, LDC, RESET, ZERO )
597 $ CALL CPRCN1(NTRA, NC, SNAME, IORDER,
598 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA,
602 CALL CCGEMM( IORDER, TRANSA, TRANSB, M, N,
603 $ K, ALPHA, AA, LDA, BB, LDB,
609 WRITE( NOUT, FMT = 9994 )
616.EQ.
ISAME( 1 ) = TRANSATRANAS
617.EQ.
ISAME( 2 ) = TRANSBTRANBS
621.EQ.
ISAME( 6 ) = ALSALPHA
622 ISAME( 7 ) = LCE( AS, AA, LAA )
623.EQ.
ISAME( 8 ) = LDASLDA
624 ISAME( 9 ) = LCE( BS, BB, LBB )
625.EQ.
ISAME( 10 ) = LDBSLDB
626.EQ.
ISAME( 11 ) = BLSBETA
628 ISAME( 12 ) = LCE( CS, CC, LCC )
630 ISAME( 12 ) = LCERES( 'ge
', ' ', M, N, CS,
633.EQ.
ISAME( 13 ) = LDCSLDC
640.AND.
SAME = SAMEISAME( I )
641.NOT.
IF( ISAME( I ) )
642 $ WRITE( NOUT, FMT = 9998 )I
653 CALL CMMCH( TRANSA, TRANSB, M, N, K,
654 $ ALPHA, A, NMAX, B, NMAX, BETA,
655 $ C, NMAX, CT, G, CC, LDC, EPS,
656 $ ERR, FATAL, NOUT, .TRUE. )
657 ERRMAX = MAX( ERRMAX, ERR )
680.LT.
IF( ERRMAXTHRESH )THEN
681.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10000 )SNAME, NC
682.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10001 )SNAME, NC
684.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX
685.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX
690 WRITE( NOUT, FMT = 9996 )SNAME
691 CALL CPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB,
692 $ M, N, K, ALPHA, LDA, LDB, BETA, LDC)
69710003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL
',
698 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
699 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
70010002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL
',
701 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
702 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
70310001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS
',
704 $ ' (
', I6, ' CALL
', 'S)
' )
70510000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS
',
706 $ ' (
', I6, ' CALL
', 'S)
' )
707 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER
', I2, ' WAS CH
',
708 $ 'ANGED INCORRECTLY *******
' )
709 9996 FORMAT( ' *******
', A12,' FAILED ON CALL NUMBER:
' )
710 9995 FORMAT( 1X, I6, ':
', A12,'(
''', A1, ''',
''', A1, ''',
',
711 $ 3( I3, ',
' ), '(
', F4.1, ',
', F4.1, '), A,
', I3, ', B,
', I3,
712 $ ',(
', F4.1, ',
', F4.1, '), C,
', I3, ').
' )
713 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *
',
720 SUBROUTINE CPRCN1(NOUT, NC, SNAME, IORDER, TRANSA, TRANSB, M, N,
721 $ K, ALPHA, LDA, LDB, BETA, LDC)
722 INTEGER NOUT, NC, IORDER, M, N, K, LDA, LDB, LDC
724 CHARACTER*1 TRANSA, TRANSB
726 CHARACTER*14 CRC, CTA,CTB
728.EQ.
IF (TRANSA'N
')THEN
729 CTA = ' CblasNoTrans
'
730.EQ.
ELSE IF (TRANSA'T
')THEN
733 CTA = 'CblasConjTrans
'
735.EQ.
IF (TRANSB'N
')THEN
736 CTB = ' CblasNoTrans
'
737.EQ.
ELSE IF (TRANSB'T
')THEN
740 CTB = 'CblasConjTrans
'
743 CRC = ' CblasRowMajor
'
745 CRC = ' CblasColMajor
'
747 WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CTA,CTB
748 WRITE(NOUT, FMT = 9994)M, N, K, ALPHA, LDA, LDB, BETA, LDC
750 9995 FORMAT( 1X, I6, ':
', A12,'(
', A14, ',
', A14, ',
', A14, ',
')
751 9994 FORMAT( 10X, 3( I3, ',
' ) ,' (
', F4.1,',
',F4.1,') , A,
',
752 $ I3, ', B,
', I3, ', (
', F4.1,',
',F4.1,') , C,
', I3, ').
' )
755 SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
756 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
757 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
772 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
774 PARAMETER ( RZERO = 0.0 )
777 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
778 LOGICAL FATAL, REWI, TRACE
781 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
782 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
783 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
784 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
785 $ CS( NMAX*NMAX ), CT( NMAX )
787 INTEGER IDIM( NIDIM )
789 COMPLEX ALPHA, ALS, BETA, BLS
791 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
792 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
794 LOGICAL CONJ, LEFT, NULL, RESET, SAME
795 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
796 CHARACTER*2 ICHS, ICHU
803 EXTERNAL CCHEMM, CMAKE, CMMCH, CCSYMM
810 COMMON /INFOC/INFOT, NOUTC, OK, LERR
812 DATA ICHS/'LR
'/, ICHU/'UL
'/
814.EQ.
CONJ = SNAME( 8: 9 )'he
'
834.LE..OR..LE.
NULL = N0M0
846 CALL CMAKE( 'ge
', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
850 SIDE = ICHS( ICS: ICS )
868 UPLO = ICHU( ICU: ICU )
872 CALL CMAKE(SNAME( 8: 9 ), UPLO, ' ', NA, NA, A, NMAX,
873 $ AA, LDA, RESET, ZERO )
883 CALL CMAKE( 'ge
', ' ', ' ', M, N, C, NMAX, CC,
913 $ CALL CPRCN2(NTRA, NC, SNAME, IORDER,
914 $ SIDE, UPLO, M, N, ALPHA, LDA, LDB,
919 CALL CCHEMM( IORDER, SIDE, UPLO, M, N,
920 $ ALPHA, AA, LDA, BB, LDB, BETA,
923 CALL CCSYMM( IORDER, SIDE, UPLO, M, N,
924 $ ALPHA, AA, LDA, BB, LDB, BETA,
931 WRITE( NOUT, FMT = 9994 )
938.EQ.
ISAME( 1 ) = SIDESSIDE
939.EQ.
ISAME( 2 ) = UPLOSUPLO
942.EQ.
ISAME( 5 ) = ALSALPHA
943 ISAME( 6 ) = LCE( AS, AA, LAA )
944.EQ.
ISAME( 7 ) = LDASLDA
945 ISAME( 8 ) = LCE( BS, BB, LBB )
946.EQ.
ISAME( 9 ) = LDBSLDB
947.EQ.
ISAME( 10 ) = BLSBETA
949 ISAME( 11 ) = LCE( CS, CC, LCC )
951 ISAME( 11 ) = LCERES( 'ge
', ' ', M, N, CS,
954.EQ.
ISAME( 12 ) = LDCSLDC
961.AND.
SAME = SAMEISAME( I )
962.NOT.
IF( ISAME( I ) )
963 $ WRITE( NOUT, FMT = 9998 )I
975 CALL CMMCH( 'N
', 'N
', M, N, M, ALPHA, A,
976 $ NMAX, B, NMAX, BETA, C, NMAX,
977 $ CT, G, CC, LDC, EPS, ERR,
978 $ FATAL, NOUT, .TRUE. )
980 CALL CMMCH( 'N
', 'N
', M, N, N, ALPHA, B,
981 $ NMAX, A, NMAX, BETA, C, NMAX,
982 $ CT, G, CC, LDC, EPS, ERR,
983 $ FATAL, NOUT, .TRUE. )
985 ERRMAX = MAX( ERRMAX, ERR )
1006.LT.
IF( ERRMAXTHRESH )THEN
1007.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10000 )SNAME, NC
1008.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10001 )SNAME, NC
1010.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX
1011.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX
1016 WRITE( NOUT, FMT = 9996 )SNAME
1017 CALL CPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N, ALPHA, LDA,
102310003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL
',
1024 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1025 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
102610002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL
',
1027 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1028 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
102910001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS
',
1030 $ ' (
', I6, ' CALL
', 'S)
' )
103110000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS
',
1032 $ ' (
', I6, ' CALL
', 'S)
' )
1033 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER
', I2, ' WAS CH
',
1034 $ 'ANGED INCORRECTLY *******
' )
1035 9996 FORMAT( ' *******
', A12,' FAILED ON CALL NUMBER:
' )
1036 9995 FORMAT(1X, I6, ':
', A12,'(
', 2( '''', A1, ''',
' ), 2( I3, ',
' ),
1037 $ '(
', F4.1, ',
', F4.1, '), A,
', I3, ', B,
', I3, ',(
', F4.1,
1038 $ ',
', F4.1, '), C,
', I3, ') .
' )
1039 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *
',
1046 SUBROUTINE CPRCN2(NOUT, NC, SNAME, IORDER, SIDE, UPLO, M, N,
1047 $ ALPHA, LDA, LDB, BETA, LDC)
1048 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB, LDC
1050 CHARACTER*1 SIDE, UPLO
1052 CHARACTER*14 CRC, CS,CU
1054.EQ.
IF (SIDE'L
')THEN
1059.EQ.
IF (UPLO'U
')THEN
1064.EQ.
IF (IORDER1)THEN
1065 CRC = ' CblasRowMajor
'
1067 CRC = ' CblasColMajor
'
1069 WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU
1070 WRITE(NOUT, FMT = 9994)M, N, ALPHA, LDA, LDB, BETA, LDC
1072 9995 FORMAT( 1X, I6, ':
', A12,'(
', A14, ',
', A14, ',
', A14, ',
')
1073 9994 FORMAT( 10X, 2( I3, ',
' ),' (
',F4.1,',
',F4.1, '), A,
', I3,
1074 $ ', B,
', I3, ', (
',F4.1,',
',F4.1, '),
', 'C,
', I3, ').
' )
1077 SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1078 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
1079 $ B, BB, BS, CT, G, C, IORDER )
1093 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
1095 PARAMETER ( RZERO = 0.0 )
1098 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA, IORDER
1099 LOGICAL FATAL, REWI, TRACE
1102 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1103 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1104 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
1105 $ C( NMAX, NMAX ), CT( NMAX )
1107 INTEGER IDIM( NIDIM )
1111 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
1112 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
1114 LOGICAL LEFT, NULL, RESET, SAME
1115 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
1117 CHARACTER*2 ICHD, ICHS, ICHU
1123 EXTERNAL LCE, LCERES
1125 EXTERNAL CMAKE, CMMCH, CCTRMM, CCTRSM
1129 INTEGER INFOT, NOUTC
1132 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1134 DATA ICHU/'UL
'/, ICHT/'NTC
'/, ICHD/'UN
'/, ICHS/'LR
'/
1148 DO 140 IM = 1, NIDIM
1151 DO 130 IN = 1, NIDIM
1161.LE..OR..LE.
NULL = M0N0
1164 SIDE = ICHS( ICS: ICS )
1181 UPLO = ICHU( ICU: ICU )
1184 TRANSA = ICHT( ICT: ICT )
1187 DIAG = ICHD( ICD: ICD )
1194 CALL CMAKE( 'tr
', UPLO, DIAG, NA, NA, A,
1195 $ NMAX, AA, LDA, RESET, ZERO )
1199 CALL CMAKE( 'ge
', ' ', ' ', M, N, B, NMAX,
1200 $ BB, LDB, RESET, ZERO )
1225.EQ.
IF( SNAME( 10: 11 )'mm
' )THEN
1227 $ CALL CPRCN3( NTRA, NC, SNAME, IORDER,
1228 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1232 CALL CCTRMM(IORDER, SIDE, UPLO, TRANSA,
1233 $ DIAG, M, N, ALPHA, AA, LDA,
1235.EQ.
ELSE IF( SNAME( 10: 11 )'sm
' )THEN
1237 $ CALL CPRCN3( NTRA, NC, SNAME, IORDER,
1238 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1242 CALL CCTRSM(IORDER, SIDE, UPLO, TRANSA,
1243 $ DIAG, M, N, ALPHA, AA, LDA,
1250 WRITE( NOUT, FMT = 9994 )
1257.EQ.
ISAME( 1 ) = SIDESSIDE
1258.EQ.
ISAME( 2 ) = UPLOSUPLO
1259.EQ.
ISAME( 3 ) = TRANASTRANSA
1260.EQ.
ISAME( 4 ) = DIAGSDIAG
1261.EQ.
ISAME( 5 ) = MSM
1262.EQ.
ISAME( 6 ) = NSN
1263.EQ.
ISAME( 7 ) = ALSALPHA
1264 ISAME( 8 ) = LCE( AS, AA, LAA )
1265.EQ.
ISAME( 9 ) = LDASLDA
1267 ISAME( 10 ) = LCE( BS, BB, LBB )
1269 ISAME( 10 ) = LCERES( 'ge
', ' ', M, N, BS,
1272.EQ.
ISAME( 11 ) = LDBSLDB
1279.AND.
SAME = SAMEISAME( I )
1280.NOT.
IF( ISAME( I ) )
1281 $ WRITE( NOUT, FMT = 9998 )I
1289.EQ.
IF( SNAME( 10: 11 )'mm
' )THEN
1294 CALL CMMCH( TRANSA, 'N
', M, N, M,
1295 $ ALPHA, A, NMAX, B, NMAX,
1296 $ ZERO, C, NMAX, CT, G,
1297 $ BB, LDB, EPS, ERR,
1298 $ FATAL, NOUT, .TRUE. )
1300 CALL CMMCH( 'N
', TRANSA, M, N, N,
1301 $ ALPHA, B, NMAX, A, NMAX,
1302 $ ZERO, C, NMAX, CT, G,
1303 $ BB, LDB, EPS, ERR,
1304 $ FATAL, NOUT, .TRUE. )
1306.EQ.
ELSE IF( SNAME( 10: 11 )'sm
' )THEN
1313 C( I, J ) = BB( I + ( J - 1 )*
1315 BB( I + ( J - 1 )*LDB ) = ALPHA*
1321 CALL CMMCH( TRANSA, 'N
', M, N, M,
1322 $ ONE, A, NMAX, C, NMAX,
1323 $ ZERO, B, NMAX, CT, G,
1324 $ BB, LDB, EPS, ERR,
1325 $ FATAL, NOUT, .FALSE. )
1327 CALL CMMCH( 'N
', TRANSA, M, N, N,
1328 $ ONE, C, NMAX, A, NMAX,
1329 $ ZERO, B, NMAX, CT, G,
1330 $ BB, LDB, EPS, ERR,
1331 $ FATAL, NOUT, .FALSE. )
1334 ERRMAX = MAX( ERRMAX, ERR )
1357.LT.
IF( ERRMAXTHRESH )THEN
1358.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10000 )SNAME, NC
1359.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10001 )SNAME, NC
1361.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX
1362.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX
1367 WRITE( NOUT, FMT = 9996 )SNAME
1369 $ CALL CPRCN3( NTRA, NC, SNAME, IORDER, SIDE, UPLO, TRANSA, DIAG,
1370 $ M, N, ALPHA, LDA, LDB)
137510003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL
',
1376 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1377 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
137810002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL
',
1379 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1380 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
138110001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS
',
1382 $ ' (
', I6, ' CALL
', 'S)
' )
138310000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS
',
1384 $ ' (
', I6, ' CALL
', 'S)
' )
1385 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER
', I2, ' WAS CH
',
1386 $ 'ANGED INCORRECTLY *******
' )
1387 9996 FORMAT(' *******
', A12,' FAILED ON CALL NUMBER:
' )
1388 9995 FORMAT(1X, I6, ':
', A12,'(
', 4( '''', A1, ''',
' ), 2( I3, ',
' ),
1389 $ '(
', F4.1, ',
', F4.1, '), A,
', I3, ', B,
', I3, ')
',
1391 9994 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *
',
1398 SUBROUTINE CPRCN3(NOUT, NC, SNAME, IORDER, SIDE, UPLO, TRANSA,
1399 $ DIAG, M, N, ALPHA, LDA, LDB)
1400 INTEGER NOUT, NC, IORDER, M, N, LDA, LDB
1402 CHARACTER*1 SIDE, UPLO, TRANSA, DIAG
1404 CHARACTER*14 CRC, CS, CU, CA, CD
1406.EQ.
IF (SIDE'L
')THEN
1411.EQ.
IF (UPLO'U
')THEN
1416.EQ.
IF (TRANSA'N
')THEN
1417 CA = ' CblasNoTrans
'
1418.EQ.
ELSE IF (TRANSA'T
')THEN
1421 CA = 'CblasConjTrans
'
1423.EQ.
IF (DIAG'N
')THEN
1424 CD = ' CblasNonUnit
'
1428.EQ.
IF (IORDER1)THEN
1429 CRC = ' CblasRowMajor
'
1431 CRC = ' CblasColMajor
'
1433 WRITE(NOUT, FMT = 9995)NC,SNAME,CRC, CS,CU
1434 WRITE(NOUT, FMT = 9994)CA, CD, M, N, ALPHA, LDA, LDB
1436 9995 FORMAT( 1X, I6, ':
', A12,'(
', A14, ',
', A14, ',
', A14, ',
')
1437 9994 FORMAT( 10X, 2( A14, ',
') , 2( I3, ',
' ), ' (
', F4.1, ',
',
1438 $ F4.1, '), A,
', I3, ', B,
', I3, ').
' )
1441 SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1442 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1443 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G,
1458 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
1460 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
1463 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1464 LOGICAL FATAL, REWI, TRACE
1467 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1468 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1469 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1470 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1471 $ CS( NMAX*NMAX ), CT( NMAX )
1473 INTEGER IDIM( NIDIM )
1475 COMPLEX ALPHA, ALS, BETA, BETS
1476 REAL ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1477 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1478 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1480 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1481 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1482 CHARACTER*2 ICHT, ICHU
1487 EXTERNAL LCE, LCERES
1489 EXTERNAL CCHERK, CMAKE, CMMCH, CCSYRK
1491 INTRINSIC CMPLX, MAX, REAL
1493 INTEGER INFOT, NOUTC
1496 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1498 DATA ICHT/'NC
'/, ICHU/'UL
'/
1500.EQ.
CONJ = SNAME( 8: 9 )'he
'
1507 DO 100 IN = 1, NIDIM
1522 TRANS = ICHT( ICT: ICT )
1524.AND..NOT.
IF( TRANCONJ )
1544 CALL CMAKE( 'ge
', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
1548 UPLO = ICHU( ICU: ICU )
1554 RALPHA = REAL( ALPHA )
1555 ALPHA = CMPLX( RALPHA, RZERO )
1561 RBETA = REAL( BETA )
1562 BETA = CMPLX( RBETA, RZERO )
1566.OR..LE..OR..EQ.
$ NULL = NULL( ( K0RALPHA
1567.AND..EQ.
$ RZERO )RBETARONE )
1571 CALL CMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, C,
1572 $ NMAX, CC, LDC, RESET, ZERO )
1605 $ CALL CPRCN6( NTRA, NC, SNAME, IORDER,
1606 $ UPLO, TRANS, N, K, RALPHA, LDA, RBETA,
1610 CALL CCHERK( IORDER, UPLO, TRANS, N, K,
1611 $ RALPHA, AA, LDA, RBETA, CC,
1615 $ CALL CPRCN4( NTRA, NC, SNAME, IORDER,
1616 $ UPLO, TRANS, N, K, ALPHA, LDA, BETA, LDC)
1619 CALL CCSYRK( IORDER, UPLO, TRANS, N, K,
1620 $ ALPHA, AA, LDA, BETA, CC, LDC )
1626 WRITE( NOUT, FMT = 9992 )
1633.EQ.
ISAME( 1 ) = UPLOSUPLO
1634.EQ.
ISAME( 2 ) = TRANSSTRANS
1635.EQ.
ISAME( 3 ) = NSN
1636.EQ.
ISAME( 4 ) = KSK
1638.EQ.
ISAME( 5 ) = RALSRALPHA
1640.EQ.
ISAME( 5 ) = ALSALPHA
1642 ISAME( 6 ) = LCE( AS, AA, LAA )
1643.EQ.
ISAME( 7 ) = LDASLDA
1645.EQ.
ISAME( 8 ) = RBETSRBETA
1647.EQ.
ISAME( 8 ) = BETSBETA
1650 ISAME( 9 ) = LCE( CS, CC, LCC )
1652 ISAME( 9 ) = LCERES( SNAME( 8: 9 ), UPLO, N,
1655.EQ.
ISAME( 10 ) = LDCSLDC
1662.AND.
SAME = SAMEISAME( I )
1663.NOT.
IF( ISAME( I ) )
1664 $ WRITE( NOUT, FMT = 9998 )I
1690 CALL CMMCH( TRANST, 'N
', LJ, 1, K,
1691 $ ALPHA, A( 1, JJ ), NMAX,
1692 $ A( 1, J ), NMAX, BETA,
1693 $ C( JJ, J ), NMAX, CT, G,
1694 $ CC( JC ), LDC, EPS, ERR,
1695 $ FATAL, NOUT, .TRUE. )
1697 CALL CMMCH( 'N
', TRANST, LJ, 1, K,
1698 $ ALPHA, A( JJ, 1 ), NMAX,
1699 $ A( J, 1 ), NMAX, BETA,
1700 $ C( JJ, J ), NMAX, CT, G,
1701 $ CC( JC ), LDC, EPS, ERR,
1702 $ FATAL, NOUT, .TRUE. )
1709 ERRMAX = MAX( ERRMAX, ERR )
1731.LT.
IF( ERRMAXTHRESH )THEN
1732.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10000 )SNAME, NC
1733.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10001 )SNAME, NC
1735.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX
1736.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX
1742 $ WRITE( NOUT, FMT = 9995 )J
1745 WRITE( NOUT, FMT = 9996 )SNAME
1747 CALL CPRCN6( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, RALPHA,
1750 CALL CPRCN4( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K, ALPHA,
175710003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL
',
1758 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1759 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
176010002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL
',
1761 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
1762 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
176310001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS
',
1764 $ ' (
', I6, ' CALL
', 'S)
' )
176510000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS
',
1766 $ ' (
', I6, ' CALL
', 'S)
' )
1767 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER
', I2, ' WAS CH
',
1768 $ 'ANGED INCORRECTLY *******
' )
1769 9996 FORMAT( ' *******
', A12,' FAILED ON CALL NUMBER:
' )
1770 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN
', I3 )
1771 9994 FORMAT(1X, I6, ':
', A12,'(
', 2( '''', A1, ''',
' ), 2( I3, ',
' ),
1772 $ F4.1, ', A,
', I3, ',
', F4.1, ', C,
', I3, ')
',
1774 9993 FORMAT(1X, I6, ':
', A12,'(
', 2( '''', A1, ''',
' ), 2( I3, ',
' ),
1775 $ '(
', F4.1, ',
', F4.1, ') , A,
', I3, ',(
', F4.1, ',
', F4.1,
1776 $ '), C,
', I3, ') .
' )
1777 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *
',
1784 SUBROUTINE CPRCN4(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
1785 $ N, K, ALPHA, LDA, BETA, LDC)
1786 INTEGER NOUT, NC, IORDER, N, K, LDA, LDC
1788 CHARACTER*1 UPLO, TRANSA
1790 CHARACTER*14 CRC, CU, CA
1792.EQ.
IF (UPLO'U
')THEN
1797.EQ.
IF (TRANSA'N
')THEN
1798 CA = ' CblasNoTrans
'
1799.EQ.
ELSE IF (TRANSA'T
')THEN
1802 CA = 'CblasConjTrans
'
1804.EQ.
IF (IORDER1)THEN
1805 CRC = ' CblasRowMajor
'
1807 CRC = ' CblasColMajor
'
1809 WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA
1810 WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, BETA, LDC
1812 9995 FORMAT( 1X, I6, ':
', A12,'(
', 3( A14, ',
') )
1813 9994 FORMAT( 10X, 2( I3, ',
' ), ' (
', F4.1, ',
', F4.1 ,'), A,
',
1814 $ I3, ', (
', F4.1,',
', F4.1, '), C,
', I3, ').
' )
1818 SUBROUTINE CPRCN6(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
1819 $ N, K, ALPHA, LDA, BETA, LDC)
1820 INTEGER NOUT, NC, IORDER, N, K, LDA, LDC
1822 CHARACTER*1 UPLO, TRANSA
1824 CHARACTER*14 CRC, CU, CA
1826.EQ.
IF (UPLO'U
')THEN
1831.EQ.
IF (TRANSA'N
')THEN
1832 CA = ' CblasNoTrans
'
1833.EQ.
ELSE IF (TRANSA'T
')THEN
1836 CA = 'CblasConjTrans
'
1838.EQ.
IF (IORDER1)THEN
1839 CRC = ' CblasRowMajor
'
1841 CRC = ' CblasColMajor
'
1843 WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA
1844 WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, BETA, LDC
1846 9995 FORMAT( 1X, I6, ':
', A12,'(
', 3( A14, ',
') )
1847 9994 FORMAT( 10X, 2( I3, ',
' ),
1848 $ F4.1, ', A,
', I3, ',
', F4.1, ', C,
', I3, ').
' )
1851 SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1852 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1853 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W,
1868 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
1870 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
1873 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA, IORDER
1874 LOGICAL FATAL, REWI, TRACE
1877 COMPLEX AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1878 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1879 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1880 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1883 INTEGER IDIM( NIDIM )
1885 COMPLEX ALPHA, ALS, BETA, BETS
1886 REAL ERR, ERRMAX, RBETA, RBETS
1887 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1888 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1889 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1890 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1891 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1892 CHARACTER*2 ICHT, ICHU
1897 EXTERNAL LCE, LCERES
1899 EXTERNAL CCHER2K, CMAKE, CMMCH, CCSYR2K
1901 INTRINSIC CMPLX, CONJG, MAX, REAL
1903 INTEGER INFOT, NOUTC
1906 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1908 DATA ICHT/'NC
'/, ICHU/'UL
'/
1910.EQ.
CONJ = SNAME( 8: 9 )'he
'
1917 DO 130 IN = 1, NIDIM
1928 DO 120 IK = 1, NIDIM
1932 TRANS = ICHT( ICT: ICT )
1934.AND..NOT.
IF( TRANCONJ )
1955 CALL CMAKE( 'ge
', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
1956 $ LDA, RESET, ZERO )
1958 CALL CMAKE( 'ge
', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
1967 CALL CMAKE( 'ge
', ' ', ' ', MA, NA, AB( K + 1 ),
1968 $ 2*NMAX, BB, LDB, RESET, ZERO )
1970 CALL CMAKE( 'ge
', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
1971 $ NMAX, BB, LDB, RESET, ZERO )
1975 UPLO = ICHU( ICU: ICU )
1984 RBETA = REAL( BETA )
1985 BETA = CMPLX( RBETA, RZERO )
1989.OR..LE..OR..EQ.
$ NULL = NULL( ( K0ALPHA
1990.AND..EQ.
$ ZERO )RBETARONE )
1994 CALL CMAKE( SNAME( 8: 9 ), UPLO, ' ', N, N, C,
1995 $ NMAX, CC, LDC, RESET, ZERO )
2028 $ CALL CPRCN7( NTRA, NC, SNAME, IORDER,
2029 $ UPLO, TRANS, N, K, ALPHA, LDA, LDB,
2033 CALL CCHER2K( IORDER, UPLO, TRANS, N, K,
2034 $ ALPHA, AA, LDA, BB, LDB, RBETA,
2038 $ CALL CPRCN5( NTRA, NC, SNAME, IORDER,
2039 $ UPLO, TRANS, N, K, ALPHA, LDA, LDB,
2043 CALL CCSYR2K( IORDER, UPLO, TRANS, N, K,
2044 $ ALPHA, AA, LDA, BB, LDB, BETA,
2051 WRITE( NOUT, FMT = 9992 )
2058.EQ.
ISAME( 1 ) = UPLOSUPLO
2059.EQ.
ISAME( 2 ) = TRANSSTRANS
2060.EQ.
ISAME( 3 ) = NSN
2061.EQ.
ISAME( 4 ) = KSK
2062.EQ.
ISAME( 5 ) = ALSALPHA
2063 ISAME( 6 ) = LCE( AS, AA, LAA )
2064.EQ.
ISAME( 7 ) = LDASLDA
2065 ISAME( 8 ) = LCE( BS, BB, LBB )
2066.EQ.
ISAME( 9 ) = LDBSLDB
2068.EQ.
ISAME( 10 ) = RBETSRBETA
2070.EQ.
ISAME( 10 ) = BETSBETA
2073 ISAME( 11 ) = LCE( CS, CC, LCC )
2075 ISAME( 11 ) = LCERES( 'he
', UPLO, N, N, CS,
2078.EQ.
ISAME( 12 ) = LDCSLDC
2085.AND.
SAME = SAMEISAME( I )
2086.NOT.
IF( ISAME( I ) )
2087 $ WRITE( NOUT, FMT = 9998 )I
2115 W( I ) = ALPHA*AB( ( J - 1 )*2*
2118 W( K + I ) = CONJG( ALPHA )*
2127 CALL CMMCH( TRANST, 'N
', LJ, 1, 2*K,
2128 $ ONE, AB( JJAB ), 2*NMAX, W,
2129 $ 2*NMAX, BETA, C( JJ, J ),
2130 $ NMAX, CT, G, CC( JC ), LDC,
2131 $ EPS, ERR, FATAL, NOUT,
2136 W( I ) = ALPHA*CONJG( AB( ( K +
2137 $ I - 1 )*NMAX + J ) )
2138 W( K + I ) = CONJG( ALPHA*
2139 $ AB( ( I - 1 )*NMAX +
2142 W( I ) = ALPHA*AB( ( K + I - 1 )*
2145 $ AB( ( I - 1 )*NMAX +
2149 CALL CMMCH( 'N
', 'N
', LJ, 1, 2*K, ONE,
2150 $ AB( JJ ), NMAX, W, 2*NMAX,
2151 $ BETA, C( JJ, J ), NMAX, CT,
2152 $ G, CC( JC ), LDC, EPS, ERR,
2153 $ FATAL, NOUT, .TRUE. )
2160 $ JJAB = JJAB + 2*NMAX
2162 ERRMAX = MAX( ERRMAX, ERR )
2184.LT.
IF( ERRMAXTHRESH )THEN
2185.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10000 )SNAME, NC
2186.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10001 )SNAME, NC
2188.EQ.
IF ( IORDER0) WRITE( NOUT, FMT = 10002 )SNAME, NC, ERRMAX
2189.EQ.
IF ( IORDER1) WRITE( NOUT, FMT = 10003 )SNAME, NC, ERRMAX
2195 $ WRITE( NOUT, FMT = 9995 )J
2198 WRITE( NOUT, FMT = 9996 )SNAME
2200 CALL CPRCN7( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K,
2201 $ ALPHA, LDA, LDB, RBETA, LDC)
2203 CALL CPRCN5( NOUT, NC, SNAME, IORDER, UPLO, TRANS, N, K,
2204 $ ALPHA, LDA, LDB, BETA, LDC)
221010003 FORMAT( ' ', A12,' COMPLETED THE ROW-MAJOR COMPUTATIONAL
',
2211 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
2212 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
221310002 FORMAT( ' ', A12,' COMPLETED THE COLUMN-MAJOR COMPUTATIONAL
',
2214 $ 'TESTS (
', I6, ' CALLS)
', /' ******* BUT WITH MAXIMUM TEST
',
2215 $ 'RATIO
', F8.2, ' - SUSPECT *******
' )
221610001 FORMAT( ' ', A12,' PASSED THE ROW-MAJOR COMPUTATIONAL TESTS
',
2217 $ ' (
', I6, ' CALL
', 'S)
' )
221810000 FORMAT( ' ', A12,' PASSED THE COLUMN-MAJOR COMPUTATIONAL TESTS
',
2219 $ ' (
', I6, ' CALL
', 'S)
' )
2220 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER
', I2, ' WAS CH
',
2221 $ 'ANGED INCORRECTLY *******
' )
2222 9996 FORMAT( ' *******
', A12,' FAILED ON CALL NUMBER:
' )
2223 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN
', I3 )
2224 9994 FORMAT(1X, I6, ':
', A12,'(
', 2( '''', A1, ''',
' ), 2( I3, ',
' ),
2225 $ '(
', F4.1, ',
', F4.1, '), A,
', I3, ', B,
', I3, ',
', F4.1,
2226 $ ', C,
', I3, ') .
' )
2227 9993 FORMAT(1X, I6, ': ', A12,
'(', 2(
'''', A1,
''',' ), 2( I3,
',' ),
2228 $
'(', f4.1,
',', f4.1,
'), A,', i3,
', B,', i3,
',(', f4.1,
2229 $
',', f4.1,
'), C,', i3,
') .' )
2230 9992
FORMAT(
' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2237 SUBROUTINE cprcn5(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
2238 $ N, K, ALPHA, LDA, LDB, BETA, LDC)
2239 INTEGER NOUT, NC, , N, K, LDA, LDB, LDC
2241 CHARACTER*1 UPLO, TRANSA
2243 CHARACTER*14 CRC, CU, CA
2245 IF (uplo.EQ.
'U')
THEN
2250 IF (transa.EQ.
'N')
THEN
2251 ca =
' CblasNoTrans'
2252 ELSE IF (transa.EQ.'t
')THEN
2255 CA = 'cblasconjtrans
'
2257.EQ.
IF (IORDER1)THEN
2258 CRC = ' cblasrowmajor
'
2260 CRC = ' cblascolmajor
'
2262 WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA
2263 WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC
2265 9995 FORMAT( 1X, I6, ':
', A12,'(
', 3( A14, ',
') )
2266 9994 FORMAT( 10X, 2( I3, ',
' ), ' (
', F4.1, ',
', F4.1, '), a,
',
2267 $ I3, ', b
', I3, ', (
', F4.1, ',
', F4.1, '), c,
', I3, ').
' )
2271 SUBROUTINE CPRCN7(NOUT, NC, SNAME, IORDER, UPLO, TRANSA,
2272 $ N, K, ALPHA, LDA, LDB, BETA, LDC)
2273 INTEGER NOUT, NC, IORDER, N, K, LDA, LDB, LDC
2276 CHARACTER*1 UPLO, TRANSA
2278 CHARACTER*14 CRC, CU, CA
2280.EQ.
IF (UPLO'u
')THEN
2285.EQ.
IF (TRANSA'n
')THEN
2286 CA = ' cblasnotrans
'
2287.EQ.
ELSE IF (TRANSA't
')THEN
2290 CA = 'cblasconjtrans
'
2292.EQ.
IF (IORDER1)THEN
2293 CRC = ' cblasrowmajor
'
2295 CRC = ' cblascolmajor
'
2297 WRITE(NOUT, FMT = 9995)NC, SNAME, CRC, CU, CA
2298 WRITE(NOUT, FMT = 9994)N, K, ALPHA, LDA, LDB, BETA, LDC
2300 9995 FORMAT( 1X, I6, ':
', A12,'(
', 3( A14, ',
') )
2301 9994 FORMAT( 10X, 2( I3, ',
' ), ' (
', F4.1, ',
', F4.1, '), a,
',
2302 $ I3, ', b
', I3, ',
', F4.1, ', c,
', I3, ').
' )
2305 SUBROUTINE CMAKE(TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2324 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
2326 PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) )
2328 PARAMETER ( RZERO = 0.0 )
2330 PARAMETER ( RROGUE = -1.0E10 )
2333 INTEGER LDA, M, N, NMAX
2335 CHARACTER*1 DIAG, UPLO
2338 COMPLEX A( NMAX, * ), AA( * )
2340 INTEGER I, IBEG, IEND, J, JJ
2341 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2346 INTRINSIC CMPLX, CONJG, REAL
2352.OR..OR..AND..EQ.
UPPER = ( HERSYMTRI )UPLO'u
'
2353.OR..OR..AND..EQ.
LOWER = ( HERSYMTRI )UPLO'l
'
2354.AND..EQ.
UNIT = TRIDIAG'u
'
2360.OR..AND..LE..OR..AND..GE.
IF( GEN( UPPERIJ )( LOWERIJ ) )
2362 A( I, J ) = CBEG( RESET ) + TRANSL
2365.GT..AND..EQ.
IF( N3JN/2 )
2368 A( J, I ) = CONJG( A( I, J ) )
2370 A( J, I ) = A( I, J )
2378 $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO )
2380 $ A( J, J ) = A( J, J ) + ONE
2387.EQ.
IF( TYPE'ge
' )THEN
2390 AA( I + ( J - 1 )*LDA ) = A( I, J )
2392 DO 40 I = M + 1, LDA
2393 AA( I + ( J - 1 )*LDA ) = ROGUE
2396.EQ.
ELSE IF( TYPE'he.OR..EQ.
'TYPE'sy.OR..EQ.
'TYPE'tr
' )THEN
2413 DO 60 I = 1, IBEG - 1
2414 AA( I + ( J - 1 )*LDA ) = ROGUE
2416 DO 70 I = IBEG, IEND
2417 AA( I + ( J - 1 )*LDA ) = A( I, J )
2419 DO 80 I = IEND + 1, LDA
2420 AA( I + ( J - 1 )*LDA ) = ROGUE
2423 JJ = J + ( J - 1 )*LDA
2424 AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE )
2433 SUBROUTINE CMMCH(TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
2434 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
2449 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
2451 PARAMETER ( RZERO = 0.0, RONE = 1.0 )
2455 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
2457 CHARACTER*1 TRANSA, TRANSB
2459 COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ),
2460 $ CC( LDCC, * ), CT( * )
2466 LOGICAL CTRANA, CTRANB, TRANA, TRANB
2468 INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT
2472 ABS1( CL ) = ABS( REAL( CL ) ) + ABS( AIMAG( CL ) )
2474.EQ.
TRANA = TRANSA't.OR..EQ.
'TRANSA'c
'
2475.EQ.
TRANB = TRANSB't.OR..EQ.
'TRANSB'c
'
2476.EQ.
CTRANA = TRANSA'c
'
2477.EQ.
CTRANB = TRANSB'c
'
2489.NOT..AND..NOT.
IF( TRANATRANB )THEN
2492 CT( I ) = CT( I ) + A( I, K )*B( K, J )
2493 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
2496.AND..NOT.
ELSE IF( TRANATRANB )THEN
2500 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( K, J )
2501 G( I ) = G( I ) + ABS1( A( K, I ) )*
2508 CT( I ) = CT( I ) + A( K, I )*B( K, J )
2509 G( I ) = G( I ) + ABS1( A( K, I ) )*
2514.NOT..AND.
ELSE IF( TRANATRANB )THEN
2518 CT( I ) = CT( I ) + A( I, K )*CONJG( B( J, K ) )
2519 G( I ) = G( I ) + ABS1( A( I, K ) )*
2526 CT( I ) = CT( I ) + A( I, K )*B( J, K )
2527 G( I ) = G( I ) + ABS1( A( I, K ) )*
2532.AND.
ELSE IF( TRANATRANB )THEN
2537 CT( I ) = CT( I ) + CONJG( A( K, I ) )*
2538 $ CONJG( B( J, K ) )
2539 G( I ) = G( I ) + ABS1( A( K, I ) )*
2546 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( J, K )
2547 G( I ) = G( I ) + ABS1( A( K, I ) )*
2556 CT( I ) = CT( I ) + A( K, I )*CONJG( B( J, K ) )
2557 G( I ) = G( I ) + ABS1( A( K, I ) )*
2564 CT( I ) = CT( I ) + A( K, I )*B( J, K )
2565 G( I ) = G( I ) + ABS1( A( K, I ) )*
2573 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
2574 G( I ) = ABS1( ALPHA )*G( I ) +
2575 $ ABS1( BETA )*ABS1( C( I, J ) )
2582 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
2583.NE.
IF( G( I )RZERO )
2584 $ ERRI = ERRI/G( I )
2585 ERR = MAX( ERR, ERRI )
2586.GE.
IF( ERR*SQRT( EPS )RONE )
2598 WRITE( NOUT, FMT = 9999 )
2601 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
2603 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
2607 $ WRITE( NOUT, FMT = 9997 )J
2612 9999 FORMAT(' *******
fatal error - computed result is less than hal
',
2613 $ 'f accurate *******
', /' expected re
',
2614 $ 'sult computed result
' )
2615 9998 FORMAT( 1X, I7, 2( ' (
', G15.6, ',
', G15.6, ')
' ) )
2616 9997 FORMAT( ' these are
the results
for column
', I3 )
2621 LOGICAL FUNCTION LCE( RI, RJ, LR )
2636 COMPLEX RI( * ), RJ( * )
2641.NE.
IF( RI( I )RJ( I ) )
2653 LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA )
2672 COMPLEX AA( LDA, * ), AS( LDA, * )
2674 INTEGER I, IBEG, IEND, J
2678.EQ.
IF( TYPE'ge
' )THEN
2680 DO 10 I = M + 1, LDA
2681.NE.
IF( AA( I, J )AS( I, J ) )
2685.EQ.
ELSE IF( TYPE'he.OR..EQ.
'TYPE'sy
' )THEN
2694 DO 30 I = 1, IBEG - 1
2695.NE.
IF( AA( I, J )AS( I, J ) )
2698 DO 40 I = IEND + 1, LDA
2699.NE.
IF( AA( I, J )AS( I, J ) )
2715 COMPLEX FUNCTION CBEG( RESET )
2731 INTEGER I, IC, J, MI, MJ
2733 SAVE I, IC, J, MI, MJ
2757 I = I - 1000*( I/1000 )
2758 J = J - 1000*( J/1000 )
2763 CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 )
2769 REAL FUNCTION SDIFF( X, Y )
real function sdiff(x, y)
subroutine cchk5(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)
subroutine cmmch(transa, transb, m, n, kk, alpha, a, lda, b, ldb, beta, c, ldc, ct, g, cc, ldcc, eps, err, fatal, nout, mv)
subroutine cchk1(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)
logical function lce(ri, rj, lr)
subroutine cchk3(sname, eps, thresh, nout, ntra, trace, rewi, fatal, nidim, idim, nalf, alf, nmax, a, aa, as, b, bb, bs, ct, g, c, iorder)
subroutine cchk2(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 cprcn5(nout, nc, sname, iorder, uplo, transa, n, k, alpha, lda, ldb, beta, ldc)
subroutine cchk4(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)
end diagonal values have been computed in the(sparse) matrix id.SOL
for(i8=*sizetab-1;i8 >=0;i8--)