3 * Test program for the COMPLEX Level 3 Blas.
5 * The program must be driven by a short data file. The first 14 records
6 * of the file are read using list-directed input, the last 9 records
7 * are read using the format ( A8, L2 ). An annotated example of a data
8 * file can be obtained by deleting the first 3 characters from the
10 * 'CBLAT3.SUMM' NAME OF SUMMARY OUTPUT FILE
11 * 6 UNIT NUMBER OF SUMMARY FILE
12 * 'CBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
13 * -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
14 * F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
15 * F LOGICAL FLAG, T TO STOP ON FAILURES.
16 * T LOGICAL FLAG, T TO TEST ERROR EXITS.
17 * 16.0 THRESHOLD VALUE OF TEST RATIO
18 * 6 NUMBER OF VALUES OF N
19 * 0 1 2 3 5 9 VALUES OF N
20 * 3 NUMBER OF VALUES OF ALPHA
21 * (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA
22 * 3 NUMBER OF VALUES OF BETA
23 * (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA
24 * CGEMM3M T PUT F FOR NO TEST. SAME COLUMNS.
25 * CHEMM T PUT F FOR NO TEST. SAME COLUMNS.
26 * CSYMM T PUT F FOR NO TEST. SAME COLUMNS.
27 * CTRMM T PUT F FOR NO TEST. SAME COLUMNS.
28 * CTRSM T PUT F FOR NO TEST. SAME COLUMNS.
29 * CHERK T PUT F FOR NO TEST. SAME COLUMNS.
30 * CSYRK T PUT F FOR NO TEST. SAME COLUMNS.
31 * CHER2K T PUT F FOR NO TEST. SAME COLUMNS.
32 * CSYR2K T PUT F FOR NO TEST. SAME COLUMNS.
36 * Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S.
37 * A Set of Level 3 Basic Linear Algebra Subprograms.
39 * Technical Memorandum No.88 (Revision 1), Mathematics and
40 * Computer Science Division, Argonne National Laboratory, 9700
41 * South Cass Avenue, Argonne, Illinois 60439, US.
43 * -- Written on 8-February-1989.
44 * Jack Dongarra, Argonne National Laboratory.
45 * Iain Duff, AERE Harwell.
46 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
47 * Sven Hammarling, Numerical Algorithms Group Ltd.
53 PARAMETER ( NSUBS = 9 )
55 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
56 REAL RZERO, RHALF, RONE
57 PARAMETER ( RZERO = 0.0, RHALF = 0.5, RONE = 1.0 )
59 PARAMETER ( NMAX = 65 )
60 INTEGER NIDMAX, NALMAX, NBEMAX
61 PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 )
64 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA
65 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
67 CHARACTER*1 TRANSA, TRANSB
69 CHARACTER*32 SNAPS, SUMMRY
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*8 SNAMES( NSUBS )
81 * .. External Functions ..
85 * .. External Subroutines ..
86 EXTERNAL CCHK1, CCHK2, CCHK3, CCHK4, CCHK5, CCHKE, CMMCH
87 * .. Intrinsic Functions ..
89 * .. Scalars in Common ..
94 COMMON /INFOC/INFOT, NOUTC, OK, LERR
96 * .. Data statements ..
97 DATA SNAMES/'CGEMM3M ', 'CHEMM ', 'CSYMM ',
99 $ 'CTRSM ', 'CHERK ', 'CSYRK ', 'CHER2K',
101 * .. Executable Statements ..
103 * Read name and unit number for summary output file and open file.
105 READ( NIN, FMT = * )SUMMRY
106 READ( NIN, FMT = * )NOUT
107 OPEN( NOUT, FILE = SUMMRY, STATUS = 'NEW' )
110 * Read name and unit number for snapshot output file and open file.
112 READ( NIN, FMT = * )SNAPS
113 READ( NIN, FMT = * )NTRA
116 OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' )
118 * Read the flag that directs rewinding of the snapshot file.
119 READ( NIN, FMT = * )REWI
120 REWI = REWI.AND.TRACE
121 * Read the flag that directs stopping on any failure.
122 READ( NIN, FMT = * )SFATAL
123 * Read the flag that indicates whether error exits are to be tested.
124 READ( NIN, FMT = * )TSTERR
125 * Read the threshold value of the test ratio
126 READ( NIN, FMT = * )THRESH
128 * Read and check the parameter values for the tests.
131 READ( NIN, FMT = * )NIDIM
132 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
133 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
136 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
138 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
139 WRITE( NOUT, FMT = 9996 )NMAX
144 READ( NIN, FMT = * )NALF
145 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
146 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
149 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
151 READ( NIN, FMT = * )NBET
152 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
153 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
156 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
158 * Report values of parameters.
160 WRITE( NOUT, FMT = 9995 )
161 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
162 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
163 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
164 IF( .NOT.TSTERR )THEN
165 WRITE( NOUT, FMT = * )
166 WRITE( NOUT, FMT = 9984 )
168 WRITE( NOUT, FMT = * )
169 WRITE( NOUT, FMT = 9999 )THRESH
170 WRITE( NOUT, FMT = * )
172 * Read names of subroutines and flags which indicate
173 * whether they are to be tested.
178 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
180 IF( SNAMET.EQ.SNAMES( I ) )
183 WRITE( NOUT, FMT = 9990 )SNAMET
185 50 LTEST( I ) = LTESTT
191 * Compute EPS (the machine precision).
195 IF( SDIFF( RONE + EPS, RONE ).EQ.RZERO )
201 WRITE( NOUT, FMT = 9998 )EPS
203 * Check the reliability of CMMCH using exact data.
208 AB( I, J ) = MAX( I - J + 1, 0 )
210 AB( J, NMAX + 1 ) = J
211 AB( 1, NMAX + J ) = J
215 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
217 * CC holds the exact result. On exit from CMMCH CT holds
218 * the result computed by CMMCH.
221 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
222 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
223 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
224 SAME = LCE( CC, CT, N )
225 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
226 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
230 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
231 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
232 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
233 SAME = LCE( CC, CT, N )
234 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
235 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
239 AB( J, NMAX + 1 ) = N - J + 1
240 AB( 1, NMAX + J ) = N - J + 1
243 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
244 $ ( ( J + 1 )*J*( J - 1 ) )/3
248 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
249 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
250 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
251 SAME = LCE( CC, CT, N )
252 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
253 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
257 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
258 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
259 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
260 SAME = LCE( CC, CT, N )
261 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
262 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
266 * Test each subroutine in turn.
268 DO 200 ISNUM = 1, NSUBS
269 WRITE( NOUT, FMT = * )
270 IF( .NOT.LTEST( ISNUM ) )THEN
271 * Subprogram is not to be tested.
272 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
274 SRNAMT = SNAMES( ISNUM )
277 CALL CCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
278 WRITE( NOUT, FMT = * )
284 GO TO ( 140, 150, 150, 160, 160, 170, 170,
287 140 CALL CCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
288 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
289 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
292 * Test CHEMM, 02, CSYMM, 03.
293 150 CALL CCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
294 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
295 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
298 * Test CTRMM, 04, CTRSM, 05.
299 160 CALL CCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
300 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
301 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
303 * Test CHERK, 06, CSYRK, 07.
304 170 CALL CCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
305 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
306 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
309 * Test CHER2K, 08, CSYR2K, 09.
310 180 CALL CCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
311 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
312 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
315 190 IF( FATAL.AND.SFATAL )
319 WRITE( NOUT, FMT = 9986 )
323 WRITE( NOUT, FMT = 9985 )
327 WRITE( NOUT, FMT = 9991 )
335 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
337 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 )
338 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
340 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
341 9995 FORMAT( ' TESTS OF THE COMPLEX LEVEL 3 BLAS', //' THE F',
342 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
343 9994 FORMAT( ' FOR N ', 9I6 )
344 9993 FORMAT( ' FOR ALPHA ',
345 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
346 9992 FORMAT( ' FOR BETA ',
347 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
348 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
349 $ /' ******* TESTS ABANDONED *******' )
350 9990 FORMAT( ' SUBPROGRAM NAME ', A8, ' NOT RECOGNIZED', /' ******* T',
351 $ 'ESTS ABANDONED *******' )
352 9989 FORMAT( ' ERROR IN CMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
353 $ 'ATED WRONGLY.', /' CMMCH WAS CALLED WITH TRANSA = ', A1,
354 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
355 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
356 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
358 9988 FORMAT( A8, L2 )
359 9987 FORMAT( 1X, A8, ' WAS NOT TESTED' )
360 9986 FORMAT( /' END OF TESTS' )
361 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
362 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
367 SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
368 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
369 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
373 * Auxiliary routine for test program for Level 3 Blas.
375 * -- Written on 8-February-1989.
376 * Jack Dongarra, Argonne National Laboratory.
377 * Iain Duff, AERE Harwell.
378 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
379 * Sven Hammarling, Numerical Algorithms Group Ltd.
383 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
385 PARAMETER ( RZERO = 0.0 )
386 * .. Scalar Arguments ..
388 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
389 LOGICAL FATAL, REWI, TRACE
391 * .. Array Arguments ..
392 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
393 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
394 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
395 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
396 $ CS( NMAX*NMAX ), CT( NMAX )
398 INTEGER IDIM( NIDIM )
399 * .. Local Scalars ..
400 COMPLEX ALPHA, ALS, BETA, BLS
402 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
403 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
404 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
405 LOGICAL NULL, RESET, SAME, TRANA, TRANB
406 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
410 * .. External Functions ..
413 * .. External Subroutines ..
414 EXTERNAL CGEMM3M, CMAKE, CMMCH
415 * .. Intrinsic Functions ..
417 * .. Scalars in Common ..
420 * .. Common blocks ..
421 COMMON /INFOC/INFOT, NOUTC, OK, LERR
422 * .. Data statements ..
424 * .. Executable Statements ..
436 * Set LDC to 1 more than minimum value if room.
440 * Skip tests if not enough room.
444 NULL = N.LE.0.OR.M.LE.0
450 TRANSA = ICH( ICA: ICA )
451 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
460 * Set LDA to 1 more than minimum value if room.
464 * Skip tests if not enough room.
469 * Generate the matrix A.
471 CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
475 TRANSB = ICH( ICB: ICB )
476 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
485 * Set LDB to 1 more than minimum value if room.
489 * Skip tests if not enough room.
494 * Generate the matrix B.
496 CALL CMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
505 * Generate the matrix C.
507 CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
508 $ CC, LDC, RESET, ZERO )
512 * Save every datum before calling the
535 * Call the subroutine.
538 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
539 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
543 CALL CGEMM3M( TRANSA, TRANSB, M, N, K, ALPHA,
544 $ AA, LDA, BB, LDB, BETA, CC, LDC )
546 * Check if error-exit was taken incorrectly.
549 WRITE( NOUT, FMT = 9994 )
554 * See what data changed inside subroutines.
556 ISAME( 1 ) = TRANSA.EQ.TRANAS
557 ISAME( 2 ) = TRANSB.EQ.TRANBS
561 ISAME( 6 ) = ALS.EQ.ALPHA
562 ISAME( 7 ) = LCE( AS, AA, LAA )
563 ISAME( 8 ) = LDAS.EQ.LDA
564 ISAME( 9 ) = LCE( BS, BB, LBB )
565 ISAME( 10 ) = LDBS.EQ.LDB
566 ISAME( 11 ) = BLS.EQ.BETA
568 ISAME( 12 ) = LCE( CS, CC, LCC )
570 ISAME( 12 ) = LCERES( 'GE', ' ', M, N, CS,
573 ISAME( 13 ) = LDCS.EQ.LDC
575 * If data was incorrectly changed, report
580 SAME = SAME.AND.ISAME( I )
581 IF( .NOT.ISAME( I ) )
582 $ WRITE( NOUT, FMT = 9998 )I
593 CALL CMMCH( TRANSA, TRANSB, M, N, K,
594 $ ALPHA, A, NMAX, B, NMAX, BETA,
595 $ C, NMAX, CT, G, CC, LDC, EPS,
596 $ ERR, FATAL, NOUT, .TRUE. )
597 ERRMAX = MAX( ERRMAX, ERR )
598 * If got really bad answer, report and
620 IF( ERRMAX.LT.THRESH )THEN
621 WRITE( NOUT, FMT = 9999 )SNAME, NC
623 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
628 WRITE( NOUT, FMT = 9996 )SNAME
629 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
630 $ ALPHA, LDA, LDB, BETA, LDC
635 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
637 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
638 $ 'ANGED INCORRECTLY *******' )
639 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
640 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
641 $ ' - SUSPECT *******' )
642 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
643 9995 FORMAT( 1X, I6, ': ', A8, '(''', A1, ''',''', A1, ''',',
644 $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
645 $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
646 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
652 SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
653 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
654 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
656 * Tests CHEMM and CSYMM.
658 * Auxiliary routine for test program for Level 3 Blas.
660 * -- Written on 8-February-1989.
661 * Jack Dongarra, Argonne National Laboratory.
662 * Iain Duff, AERE Harwell.
663 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
664 * Sven Hammarling, Numerical Algorithms Group Ltd.
668 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
670 PARAMETER ( RZERO = 0.0 )
671 * .. Scalar Arguments ..
673 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
674 LOGICAL FATAL, REWI, TRACE
676 * .. Array Arguments ..
677 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
678 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
679 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
680 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
681 $ CS( NMAX*NMAX ), CT( NMAX )
683 INTEGER IDIM( NIDIM )
684 * .. Local Scalars ..
685 COMPLEX ALPHA, ALS, BETA, BLS
687 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
688 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
690 LOGICAL CONJ, LEFT, NULL, RESET, SAME
691 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
692 CHARACTER*2 ICHS, ICHU
695 * .. External Functions ..
698 * .. External Subroutines ..
699 EXTERNAL CHEMM, CMAKE, CMMCH, CSYMM
700 * .. Intrinsic Functions ..
702 * .. Scalars in Common ..
705 * .. Common blocks ..
706 COMMON /INFOC/INFOT, NOUTC, OK, LERR
707 * .. Data statements ..
708 DATA ICHS/'LR'/, ICHU/'UL'/
709 * .. Executable Statements ..
710 CONJ = SNAME( 2: 3 ).EQ.'HE'
722 * Set LDC to 1 more than minimum value if room.
726 * Skip tests if not enough room.
730 NULL = N.LE.0.OR.M.LE.0
731 * Set LDB to 1 more than minimum value if room.
735 * Skip tests if not enough room.
740 * Generate the matrix B.
742 CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
746 SIDE = ICHS( ICS: ICS )
754 * Set LDA to 1 more than minimum value if room.
758 * Skip tests if not enough room.
764 UPLO = ICHU( ICU: ICU )
766 * Generate the hermitian or symmetric matrix A.
768 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
769 $ AA, LDA, RESET, ZERO )
777 * Generate the matrix C.
779 CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
784 * Save every datum before calling the
806 * Call the subroutine.
809 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
810 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
814 CALL CHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
815 $ BB, LDB, BETA, CC, LDC )
817 CALL CSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
818 $ BB, LDB, BETA, CC, LDC )
821 * Check if error-exit was taken incorrectly.
824 WRITE( NOUT, FMT = 9994 )
829 * See what data changed inside subroutines.
831 ISAME( 1 ) = SIDES.EQ.SIDE
832 ISAME( 2 ) = UPLOS.EQ.UPLO
835 ISAME( 5 ) = ALS.EQ.ALPHA
836 ISAME( 6 ) = LCE( AS, AA, LAA )
837 ISAME( 7 ) = LDAS.EQ.LDA
838 ISAME( 8 ) = LCE( BS, BB, LBB )
839 ISAME( 9 ) = LDBS.EQ.LDB
840 ISAME( 10 ) = BLS.EQ.BETA
842 ISAME( 11 ) = LCE( CS, CC, LCC )
844 ISAME( 11 ) = LCERES( 'GE', ' ', M, N, CS,
847 ISAME( 12 ) = LDCS.EQ.LDC
849 * If data was incorrectly changed, report and
854 SAME = SAME.AND.ISAME( I )
855 IF( .NOT.ISAME( I ) )
856 $ WRITE( NOUT, FMT = 9998 )I
868 CALL CMMCH( 'N', 'N', M, N, M, ALPHA, A,
869 $ NMAX, B, NMAX, BETA, C, NMAX,
870 $ CT, G, CC, LDC, EPS, ERR,
871 $ FATAL, NOUT, .TRUE. )
873 CALL CMMCH( 'N', 'N', M, N, N, ALPHA, B,
874 $ NMAX, A, NMAX, BETA, C, NMAX,
875 $ CT, G, CC, LDC, EPS, ERR,
876 $ FATAL, NOUT, .TRUE. )
878 ERRMAX = MAX( ERRMAX, ERR )
879 * If got really bad answer, report and
899 IF( ERRMAX.LT.THRESH )THEN
900 WRITE( NOUT, FMT = 9999 )SNAME, NC
902 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
907 WRITE( NOUT, FMT = 9996 )SNAME
908 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
914 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
916 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
917 $ 'ANGED INCORRECTLY *******' )
918 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
919 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
920 $ ' - SUSPECT *******' )
921 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
922 9995 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
923 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
924 $ ',', F4.1, '), C,', I3, ') .' )
925 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
931 SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
932 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
933 $ B, BB, BS, CT, G, C )
935 * Tests CTRMM and CTRSM.
937 * Auxiliary routine for test program for Level 3 Blas.
939 * -- Written on 8-February-1989.
940 * Jack Dongarra, Argonne National Laboratory.
941 * Iain Duff, AERE Harwell.
942 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
943 * Sven Hammarling, Numerical Algorithms Group Ltd.
947 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
949 PARAMETER ( RZERO = 0.0 )
950 * .. Scalar Arguments ..
952 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
953 LOGICAL FATAL, REWI, TRACE
955 * .. Array Arguments ..
956 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
957 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
958 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
959 $ C( NMAX, NMAX ), CT( NMAX )
961 INTEGER IDIM( NIDIM )
962 * .. Local Scalars ..
965 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
966 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
968 LOGICAL LEFT, NULL, RESET, SAME
969 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
971 CHARACTER*2 ICHD, ICHS, ICHU
975 * .. External Functions ..
978 * .. External Subroutines ..
979 EXTERNAL CMAKE, CMMCH, CTRMM, CTRSM
980 * .. Intrinsic Functions ..
982 * .. Scalars in Common ..
985 * .. Common blocks ..
986 COMMON /INFOC/INFOT, NOUTC, OK, LERR
987 * .. Data statements ..
988 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
989 * .. Executable Statements ..
995 * Set up zero matrix for CMMCH.
1002 DO 140 IM = 1, NIDIM
1005 DO 130 IN = 1, NIDIM
1007 * Set LDB to 1 more than minimum value if room.
1011 * Skip tests if not enough room.
1015 NULL = M.LE.0.OR.N.LE.0
1018 SIDE = ICHS( ICS: ICS )
1025 * Set LDA to 1 more than minimum value if room.
1029 * Skip tests if not enough room.
1035 UPLO = ICHU( ICU: ICU )
1038 TRANSA = ICHT( ICT: ICT )
1041 DIAG = ICHD( ICD: ICD )
1046 * Generate the matrix A.
1048 CALL CMAKE( 'TR', UPLO, DIAG, NA, NA, A,
1049 $ NMAX, AA, LDA, RESET, ZERO )
1051 * Generate the matrix B.
1053 CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
1054 $ BB, LDB, RESET, ZERO )
1058 * Save every datum before calling the
1077 * Call the subroutine.
1079 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1081 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1082 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1086 CALL CTRMM( SIDE, UPLO, TRANSA, DIAG, M,
1087 $ N, ALPHA, AA, LDA, BB, LDB )
1088 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1090 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1091 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1095 CALL CTRSM( SIDE, UPLO, TRANSA, DIAG, M,
1096 $ N, ALPHA, AA, LDA, BB, LDB )
1099 * Check if error-exit was taken incorrectly.
1102 WRITE( NOUT, FMT = 9994 )
1107 * See what data changed inside subroutines.
1109 ISAME( 1 ) = SIDES.EQ.SIDE
1110 ISAME( 2 ) = UPLOS.EQ.UPLO
1111 ISAME( 3 ) = TRANAS.EQ.TRANSA
1112 ISAME( 4 ) = DIAGS.EQ.DIAG
1113 ISAME( 5 ) = MS.EQ.M
1114 ISAME( 6 ) = NS.EQ.N
1115 ISAME( 7 ) = ALS.EQ.ALPHA
1116 ISAME( 8 ) = LCE( AS, AA, LAA )
1117 ISAME( 9 ) = LDAS.EQ.LDA
1119 ISAME( 10 ) = LCE( BS, BB, LBB )
1121 ISAME( 10 ) = LCERES( 'GE', ' ', M, N, BS,
1124 ISAME( 11 ) = LDBS.EQ.LDB
1126 * If data was incorrectly changed, report and
1131 SAME = SAME.AND.ISAME( I )
1132 IF( .NOT.ISAME( I ) )
1133 $ WRITE( NOUT, FMT = 9998 )I
1141 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1146 CALL CMMCH( TRANSA, 'N', M, N, M,
1147 $ ALPHA, A, NMAX, B, NMAX,
1148 $ ZERO, C, NMAX, CT, G,
1149 $ BB, LDB, EPS, ERR,
1150 $ FATAL, NOUT, .TRUE. )
1152 CALL CMMCH( 'N', TRANSA, M, N, N,
1153 $ ALPHA, B, NMAX, A, NMAX,
1154 $ ZERO, C, NMAX, CT, G,
1155 $ BB, LDB, EPS, ERR,
1156 $ FATAL, NOUT, .TRUE. )
1158 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1160 * Compute approximation to original
1165 C( I, J ) = BB( I + ( J - 1 )*
1167 BB( I + ( J - 1 )*LDB ) = ALPHA*
1173 CALL CMMCH( TRANSA, 'N', M, N, M,
1174 $ ONE, A, NMAX, C, NMAX,
1175 $ ZERO, B, NMAX, CT, G,
1176 $ BB, LDB, EPS, ERR,
1177 $ FATAL, NOUT, .FALSE. )
1179 CALL CMMCH( 'N', TRANSA, M, N, N,
1180 $ ONE, C, NMAX, A, NMAX,
1181 $ ZERO, B, NMAX, CT, G,
1182 $ BB, LDB, EPS, ERR,
1183 $ FATAL, NOUT, .FALSE. )
1186 ERRMAX = MAX( ERRMAX, ERR )
1187 * If got really bad answer, report and
1209 IF( ERRMAX.LT.THRESH )THEN
1210 WRITE( NOUT, FMT = 9999 )SNAME, NC
1212 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1217 WRITE( NOUT, FMT = 9996 )SNAME
1218 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
1219 $ N, ALPHA, LDA, LDB
1224 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1226 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1227 $ 'ANGED INCORRECTLY *******' )
1228 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1229 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1230 $ ' - SUSPECT *******' )
1231 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
1232 9995 FORMAT( 1X, I6, ': ', A8, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
1233 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
1235 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1241 SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1242 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1243 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
1245 * Tests CHERK and CSYRK.
1247 * Auxiliary routine for test program for Level 3 Blas.
1249 * -- Written on 8-February-1989.
1250 * Jack Dongarra, Argonne National Laboratory.
1251 * Iain Duff, AERE Harwell.
1252 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1253 * Sven Hammarling, Numerical Algorithms Group Ltd.
1257 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
1259 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
1260 * .. Scalar Arguments ..
1262 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1263 LOGICAL FATAL, REWI, TRACE
1265 * .. Array Arguments ..
1266 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1267 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1268 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1269 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1270 $ CS( NMAX*NMAX ), CT( NMAX )
1272 INTEGER IDIM( NIDIM )
1273 * .. Local Scalars ..
1274 COMPLEX ALPHA, ALS, BETA, BETS
1275 REAL ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1276 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1277 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1279 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1280 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1281 CHARACTER*2 ICHT, ICHU
1282 * .. Local Arrays ..
1284 * .. External Functions ..
1286 EXTERNAL LCE, LCERES
1287 * .. External Subroutines ..
1288 EXTERNAL CHERK, CMAKE, CMMCH, CSYRK
1289 * .. Intrinsic Functions ..
1290 INTRINSIC CMPLX, MAX, REAL
1291 * .. Scalars in Common ..
1292 INTEGER INFOT, NOUTC
1294 * .. Common blocks ..
1295 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1296 * .. Data statements ..
1297 DATA ICHT/'NC'/, ICHU/'UL'/
1298 * .. Executable Statements ..
1299 CONJ = SNAME( 2: 3 ).EQ.'HE'
1308 DO 100 IN = 1, NIDIM
1310 * Set LDC to 1 more than minimum value if room.
1314 * Skip tests if not enough room.
1323 TRANS = ICHT( ICT: ICT )
1325 IF( TRAN.AND..NOT.CONJ )
1334 * Set LDA to 1 more than minimum value if room.
1338 * Skip tests if not enough room.
1343 * Generate the matrix A.
1345 CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
1349 UPLO = ICHU( ICU: ICU )
1355 RALPHA = REAL( ALPHA )
1356 ALPHA = CMPLX( RALPHA, RZERO )
1362 RBETA = REAL( BETA )
1363 BETA = CMPLX( RBETA, RZERO )
1367 $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
1368 $ RZERO ).AND.RBETA.EQ.RONE )
1370 * Generate the matrix C.
1372 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1373 $ NMAX, CC, LDC, RESET, ZERO )
1377 * Save every datum before calling the subroutine.
1402 * Call the subroutine.
1406 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1407 $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
1410 CALL CHERK( UPLO, TRANS, N, K, RALPHA, AA,
1411 $ LDA, RBETA, CC, LDC )
1414 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1415 $ TRANS, N, K, ALPHA, LDA, BETA, LDC
1418 CALL CSYRK( UPLO, TRANS, N, K, ALPHA, AA,
1419 $ LDA, BETA, CC, LDC )
1422 * Check if error-exit was taken incorrectly.
1425 WRITE( NOUT, FMT = 9992 )
1430 * See what data changed inside subroutines.
1432 ISAME( 1 ) = UPLOS.EQ.UPLO
1433 ISAME( 2 ) = TRANSS.EQ.TRANS
1434 ISAME( 3 ) = NS.EQ.N
1435 ISAME( 4 ) = KS.EQ.K
1437 ISAME( 5 ) = RALS.EQ.RALPHA
1439 ISAME( 5 ) = ALS.EQ.ALPHA
1441 ISAME( 6 ) = LCE( AS, AA, LAA )
1442 ISAME( 7 ) = LDAS.EQ.LDA
1444 ISAME( 8 ) = RBETS.EQ.RBETA
1446 ISAME( 8 ) = BETS.EQ.BETA
1449 ISAME( 9 ) = LCE( CS, CC, LCC )
1451 ISAME( 9 ) = LCERES( SNAME( 2: 3 ), UPLO, N,
1454 ISAME( 10 ) = LDCS.EQ.LDC
1456 * If data was incorrectly changed, report and
1461 SAME = SAME.AND.ISAME( I )
1462 IF( .NOT.ISAME( I ) )
1463 $ WRITE( NOUT, FMT = 9998 )I
1472 * Check the result column by column.
1489 CALL CMMCH( TRANST, 'N', LJ, 1, K,
1490 $ ALPHA, A( 1, JJ ), NMAX,
1491 $ A( 1, J ), NMAX, BETA,
1492 $ C( JJ, J ), NMAX, CT, G,
1493 $ CC( JC ), LDC, EPS, ERR,
1494 $ FATAL, NOUT, .TRUE. )
1496 CALL CMMCH( 'N', TRANST, LJ, 1, K,
1497 $ ALPHA, A( JJ, 1 ), NMAX,
1498 $ A( J, 1 ), NMAX, BETA,
1499 $ C( JJ, J ), NMAX, CT, G,
1500 $ CC( JC ), LDC, EPS, ERR,
1501 $ FATAL, NOUT, .TRUE. )
1508 ERRMAX = MAX( ERRMAX, ERR )
1509 * If got really bad answer, report and
1530 IF( ERRMAX.LT.THRESH )THEN
1531 WRITE( NOUT, FMT = 9999 )SNAME, NC
1533 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1539 $ WRITE( NOUT, FMT = 9995 )J
1542 WRITE( NOUT, FMT = 9996 )SNAME
1544 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
1547 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1554 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1556 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1557 $ 'ANGED INCORRECTLY *******' )
1558 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1559 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1560 $ ' - SUSPECT *******' )
1561 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
1562 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1563 9994 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1564 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
1566 9993 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1567 $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
1568 $ '), C,', I3, ') .' )
1569 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1575 SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1576 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1577 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
1579 * Tests CHER2K and CSYR2K.
1581 * Auxiliary routine for test program for Level 3 Blas.
1583 * -- Written on 8-February-1989.
1584 * Jack Dongarra, Argonne National Laboratory.
1585 * Iain Duff, AERE Harwell.
1586 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1587 * Sven Hammarling, Numerical Algorithms Group Ltd.
1591 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
1593 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
1594 * .. Scalar Arguments ..
1596 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1597 LOGICAL FATAL, REWI, TRACE
1599 * .. Array Arguments ..
1600 COMPLEX AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1601 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1602 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1603 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1606 INTEGER IDIM( NIDIM )
1607 * .. Local Scalars ..
1608 COMPLEX ALPHA, ALS, BETA, BETS
1609 REAL ERR, ERRMAX, RBETA, RBETS
1610 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1611 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1612 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1613 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1614 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1615 CHARACTER*2 ICHT, ICHU
1616 * .. Local Arrays ..
1618 * .. External Functions ..
1620 EXTERNAL LCE, LCERES
1621 * .. External Subroutines ..
1622 EXTERNAL CHER2K, CMAKE, CMMCH, CSYR2K
1623 * .. Intrinsic Functions ..
1624 INTRINSIC CMPLX, CONJG, MAX, REAL
1625 * .. Scalars in Common ..
1626 INTEGER INFOT, NOUTC
1628 * .. Common blocks ..
1629 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1630 * .. Data statements ..
1631 DATA ICHT/'NC'/, ICHU/'UL'/
1632 * .. Executable Statements ..
1633 CONJ = SNAME( 2: 3 ).EQ.'HE'
1640 DO 130 IN = 1, NIDIM
1642 * Set LDC to 1 more than minimum value if room.
1646 * Skip tests if not enough room.
1651 DO 120 IK = 1, NIDIM
1655 TRANS = ICHT( ICT: ICT )
1657 IF( TRAN.AND..NOT.CONJ )
1666 * Set LDA to 1 more than minimum value if room.
1670 * Skip tests if not enough room.
1675 * Generate the matrix A.
1678 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
1679 $ LDA, RESET, ZERO )
1681 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
1685 * Generate the matrix B.
1690 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
1691 $ 2*NMAX, BB, LDB, RESET, ZERO )
1693 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
1694 $ NMAX, BB, LDB, RESET, ZERO )
1698 UPLO = ICHU( ICU: ICU )
1707 RBETA = REAL( BETA )
1708 BETA = CMPLX( RBETA, RZERO )
1712 $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
1713 $ ZERO ).AND.RBETA.EQ.RONE )
1715 * Generate the matrix C.
1717 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1718 $ NMAX, CC, LDC, RESET, ZERO )
1722 * Save every datum before calling the subroutine.
1747 * Call the subroutine.
1751 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1752 $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
1755 CALL CHER2K( UPLO, TRANS, N, K, ALPHA, AA,
1756 $ LDA, BB, LDB, RBETA, CC, LDC )
1759 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1760 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
1763 CALL CSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
1764 $ LDA, BB, LDB, BETA, CC, LDC )
1767 * Check if error-exit was taken incorrectly.
1770 WRITE( NOUT, FMT = 9992 )
1775 * See what data changed inside subroutines.
1777 ISAME( 1 ) = UPLOS.EQ.UPLO
1778 ISAME( 2 ) = TRANSS.EQ.TRANS
1779 ISAME( 3 ) = NS.EQ.N
1780 ISAME( 4 ) = KS.EQ.K
1781 ISAME( 5 ) = ALS.EQ.ALPHA
1782 ISAME( 6 ) = LCE( AS, AA, LAA )
1783 ISAME( 7 ) = LDAS.EQ.LDA
1784 ISAME( 8 ) = LCE( BS, BB, LBB )
1785 ISAME( 9 ) = LDBS.EQ.LDB
1787 ISAME( 10 ) = RBETS.EQ.RBETA
1789 ISAME( 10 ) = BETS.EQ.BETA
1792 ISAME( 11 ) = LCE( CS, CC, LCC )
1794 ISAME( 11 ) = LCERES( 'HE', UPLO, N, N, CS,
1797 ISAME( 12 ) = LDCS.EQ.LDC
1799 * If data was incorrectly changed, report and
1804 SAME = SAME.AND.ISAME( I )
1805 IF( .NOT.ISAME( I ) )
1806 $ WRITE( NOUT, FMT = 9998 )I
1815 * Check the result column by column.
1834 W( I ) = ALPHA*AB( ( J - 1 )*2*
1837 W( K + I ) = CONJG( ALPHA )*
1846 CALL CMMCH( TRANST, 'N', LJ, 1, 2*K,
1847 $ ONE, AB( JJAB ), 2*NMAX, W,
1848 $ 2*NMAX, BETA, C( JJ, J ),
1849 $ NMAX, CT, G, CC( JC ), LDC,
1850 $ EPS, ERR, FATAL, NOUT,
1855 W( I ) = ALPHA*CONJG( AB( ( K +
1856 $ I - 1 )*NMAX + J ) )
1857 W( K + I ) = CONJG( ALPHA*
1858 $ AB( ( I - 1 )*NMAX +
1861 W( I ) = ALPHA*AB( ( K + I - 1 )*
1864 $ AB( ( I - 1 )*NMAX +
1868 CALL CMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
1869 $ AB( JJ ), NMAX, W, 2*NMAX,
1870 $ BETA, C( JJ, J ), NMAX, CT,
1871 $ G, CC( JC ), LDC, EPS, ERR,
1872 $ FATAL, NOUT, .TRUE. )
1879 $ JJAB = JJAB + 2*NMAX
1881 ERRMAX = MAX( ERRMAX, ERR )
1882 * If got really bad answer, report and
1903 IF( ERRMAX.LT.THRESH )THEN
1904 WRITE( NOUT, FMT = 9999 )SNAME, NC
1906 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1912 $ WRITE( NOUT, FMT = 9995 )J
1915 WRITE( NOUT, FMT = 9996 )SNAME
1917 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1918 $ LDA, LDB, RBETA, LDC
1920 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1921 $ LDA, LDB, BETA, LDC
1927 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1929 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1930 $ 'ANGED INCORRECTLY *******' )
1931 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1932 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1933 $ ' - SUSPECT *******' )
1934 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
1935 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1936 9994 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1937 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
1938 $ ', C,', I3, ') .' )
1939 9993 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1940 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
1941 $ ',', F4.1, '), C,', I3, ') .' )
1942 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1948 SUBROUTINE CCHKE( ISNUM, SRNAMT, NOUT )
1950 * Tests the error exits from the Level 3 Blas.
1951 * Requires a special version of the error-handling routine XERBLA.
1952 * ALPHA, RALPHA, BETA, RBETA, A, B and C should not need to be defined.
1954 * Auxiliary routine for test program for Level 3 Blas.
1956 * -- Written on 8-February-1989.
1957 * Jack Dongarra, Argonne National Laboratory.
1958 * Iain Duff, AERE Harwell.
1959 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1960 * Sven Hammarling, Numerical Algorithms Group Ltd.
1962 * .. Scalar Arguments ..
1965 * .. Scalars in Common ..
1966 INTEGER INFOT, NOUTC
1968 * .. Local Scalars ..
1971 * .. Local Arrays ..
1972 COMPLEX A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
1973 * .. External Subroutines ..
1974 EXTERNAL CGEMM3M, CHEMM, CHER2K, CHERK, CHKXER, CSYMM,
1975 $ CSYR2K, CSYRK, CTRMM, CTRSM
1976 * .. Common blocks ..
1977 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1978 * .. Executable Statements ..
1979 * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
1980 * if anything is wrong.
1982 * LERR is set to .TRUE. by the special version of XERBLA each time
1983 * it is called, and is then tested and re-set by CHKXER.
1985 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
1988 CALL CGEMM3M( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1989 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1991 CALL CGEMM3M( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1992 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1994 CALL CGEMM3M( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1995 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1997 CALL CGEMM3M( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1998 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2000 CALL CGEMM3M( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2001 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2003 CALL CGEMM3M( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2004 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2006 CALL CGEMM3M( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2007 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2009 CALL CGEMM3M( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2010 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2012 CALL CGEMM3M( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2013 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2015 CALL CGEMM3M( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2016 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2018 CALL CGEMM3M( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2019 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2021 CALL CGEMM3M( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2022 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2024 CALL CGEMM3M( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2025 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2027 CALL CGEMM3M( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2028 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2030 CALL CGEMM3M( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2031 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2033 CALL CGEMM3M( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2034 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2036 CALL CGEMM3M( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2037 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2039 CALL CGEMM3M( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2040 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2042 CALL CGEMM3M( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2043 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2045 CALL CGEMM3M( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2046 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2048 CALL CGEMM3M( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2049 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2051 CALL CGEMM3M( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2052 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2054 CALL CGEMM3M( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2055 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2057 CALL CGEMM3M( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2058 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2060 CALL CGEMM3M( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2061 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2063 CALL CGEMM3M( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2064 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2066 CALL CGEMM3M( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2067 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2069 CALL CGEMM3M( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2070 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2072 CALL CGEMM3M( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2073 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2075 CALL CGEMM3M( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2076 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2078 CALL CGEMM3M( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2079 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2081 CALL CGEMM3M( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2082 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2084 CALL CGEMM3M( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2085 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2087 CALL CGEMM3M( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2088 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2090 CALL CGEMM3M( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2091 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2093 CALL CGEMM3M( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2094 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2096 CALL CGEMM3M( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2097 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2099 CALL CGEMM3M( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2100 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2102 CALL CGEMM3M( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2103 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2105 CALL CGEMM3M( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2106 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2108 CALL CGEMM3M( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2109 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2111 CALL CGEMM3M( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2112 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2114 CALL CGEMM3M( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2115 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2117 CALL CGEMM3M( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2118 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2120 CALL CGEMM3M( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2121 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2123 CALL CGEMM3M( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2124 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2126 CALL CGEMM3M( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2127 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2129 CALL CGEMM3M( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2130 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2132 CALL CGEMM3M( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2133 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2135 CALL CGEMM3M( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2136 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2138 CALL CGEMM3M( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2139 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2141 CALL CGEMM3M( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2142 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2144 CALL CGEMM3M( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2145 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2147 CALL CGEMM3M( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2148 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2150 CALL CGEMM3M( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2151 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2153 CALL CGEMM3M( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2154 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2156 CALL CGEMM3M( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2157 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2159 CALL CGEMM3M( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2160 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2162 CALL CGEMM3M( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2163 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2165 CALL CGEMM3M( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2166 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2169 CALL CHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2170 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2172 CALL CHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2173 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2175 CALL CHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2176 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2178 CALL CHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2179 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2181 CALL CHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2182 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2184 CALL CHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2185 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2187 CALL CHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2188 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2190 CALL CHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2191 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2193 CALL CHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2194 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2196 CALL CHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2197 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2199 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2200 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2202 CALL CHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2203 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2205 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2206 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2208 CALL CHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2209 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2211 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2212 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2214 CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2215 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2217 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2218 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2220 CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2221 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2223 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2224 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2226 CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2227 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2229 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2230 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2232 CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2233 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2236 CALL CSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2237 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2239 CALL CSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2240 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2242 CALL CSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2243 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2245 CALL CSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2246 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2248 CALL CSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2249 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2251 CALL CSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2252 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2254 CALL CSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2255 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2257 CALL CSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2258 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2260 CALL CSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2261 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2263 CALL CSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2264 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2266 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2267 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2269 CALL CSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2270 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2272 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2273 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2275 CALL CSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2276 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2278 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2279 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2281 CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2282 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2284 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2285 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2287 CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2288 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2290 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2291 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2293 CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2294 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2296 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2297 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2299 CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2300 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2303 CALL CTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2304 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2306 CALL CTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2307 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2309 CALL CTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2310 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2312 CALL CTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2313 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2315 CALL CTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2316 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2318 CALL CTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2319 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2321 CALL CTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2322 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2324 CALL CTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2325 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2327 CALL CTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2328 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2330 CALL CTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2331 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2333 CALL CTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2334 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2336 CALL CTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2337 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2339 CALL CTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2340 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2342 CALL CTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2343 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2345 CALL CTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2346 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2348 CALL CTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2349 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2351 CALL CTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2352 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2354 CALL CTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2355 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2357 CALL CTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2358 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2360 CALL CTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2361 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2363 CALL CTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2364 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2366 CALL CTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2367 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2369 CALL CTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2370 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2372 CALL CTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2373 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2375 CALL CTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2376 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2378 CALL CTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2379 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2381 CALL CTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2382 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2384 CALL CTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2385 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2387 CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2388 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2390 CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2391 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2393 CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2394 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2396 CALL CTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2397 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2399 CALL CTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2400 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2402 CALL CTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2403 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2405 CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2406 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2408 CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2409 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2411 CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2412 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2414 CALL CTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2415 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2417 CALL CTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2418 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2420 CALL CTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2421 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2423 CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2424 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2426 CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2427 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2429 CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2430 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2432 CALL CTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2433 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2435 CALL CTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2436 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2438 CALL CTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2439 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2441 CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2442 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2444 CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2445 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2447 CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2448 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2450 CALL CTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2451 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2453 CALL CTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2454 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2456 CALL CTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2457 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2460 CALL CTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2461 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2463 CALL CTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2464 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2466 CALL CTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2467 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2469 CALL CTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2470 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2472 CALL CTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2473 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2475 CALL CTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2476 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2478 CALL CTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2479 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2481 CALL CTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2482 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2484 CALL CTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2485 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2487 CALL CTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2488 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2490 CALL CTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2491 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2493 CALL CTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2494 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2496 CALL CTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2497 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2499 CALL CTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2500 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2502 CALL CTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2503 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2505 CALL CTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2506 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2508 CALL CTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2509 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2511 CALL CTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2512 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2514 CALL CTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2515 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2517 CALL CTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2518 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2520 CALL CTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2521 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2523 CALL CTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2524 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2526 CALL CTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2527 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2529 CALL CTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2530 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2532 CALL CTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2533 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2535 CALL CTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2536 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2538 CALL CTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2539 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2541 CALL CTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2542 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2544 CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2545 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2547 CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2548 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2550 CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2551 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2553 CALL CTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2554 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2556 CALL CTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2557 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2559 CALL CTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2560 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2562 CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2563 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2565 CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2566 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2568 CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2569 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2571 CALL CTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2572 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2574 CALL CTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2575 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2577 CALL CTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2578 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2580 CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2581 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2583 CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2584 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2586 CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2587 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2589 CALL CTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2590 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2592 CALL CTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2593 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2595 CALL CTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2596 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2598 CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2599 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2601 CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2602 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2604 CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2605 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2607 CALL CTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2608 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2610 CALL CTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2611 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2613 CALL CTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2614 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2617 CALL CHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2618 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2620 CALL CHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2621 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2623 CALL CHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2624 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2626 CALL CHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2627 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2629 CALL CHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2630 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2632 CALL CHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2633 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2635 CALL CHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2636 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2638 CALL CHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2639 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2641 CALL CHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2642 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2644 CALL CHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2645 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2647 CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2648 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2650 CALL CHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2651 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2653 CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2654 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2656 CALL CHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2657 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2659 CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2660 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2662 CALL CHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2663 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2665 CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2666 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2668 CALL CHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2669 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2672 CALL CSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2673 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2675 CALL CSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2676 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2678 CALL CSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2679 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2681 CALL CSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2682 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2684 CALL CSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2685 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2687 CALL CSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2688 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2690 CALL CSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2691 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2693 CALL CSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2694 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2696 CALL CSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2697 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2699 CALL CSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2700 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2702 CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2703 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2705 CALL CSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2706 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2708 CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2709 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2711 CALL CSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2712 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2714 CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2715 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2717 CALL CSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2718 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2720 CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2721 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2723 CALL CSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2724 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2727 CALL CHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2728 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2730 CALL CHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2731 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2733 CALL CHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2734 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2736 CALL CHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2737 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2739 CALL CHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2740 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2742 CALL CHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2743 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2745 CALL CHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2746 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2748 CALL CHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2749 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2751 CALL CHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2752 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2754 CALL CHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2755 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2757 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2758 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2760 CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2761 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2763 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2764 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2766 CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2767 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2769 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2770 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2772 CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2773 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2775 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2776 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2778 CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2779 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2781 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2782 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2784 CALL CHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2785 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2787 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2788 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2790 CALL CHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2791 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2794 CALL CSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2795 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2797 CALL CSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2798 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2800 CALL CSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2801 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2803 CALL CSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2804 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2806 CALL CSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2807 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2809 CALL CSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2810 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2812 CALL CSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2813 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2815 CALL CSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2816 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2818 CALL CSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2819 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2821 CALL CSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2822 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2824 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2825 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2827 CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2828 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2830 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2831 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2833 CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2834 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2836 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2837 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2839 CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2840 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2842 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2843 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2845 CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2846 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2848 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2849 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2851 CALL CSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2852 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2854 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2855 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2857 CALL CSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2858 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2861 WRITE( NOUT, FMT = 9999 )SRNAMT
2863 WRITE( NOUT, FMT = 9998 )SRNAMT
2867 9999 FORMAT( ' ', A8, ' PASSED THE TESTS OF ERROR-EXITS' )
2868 9998 FORMAT( ' ******* ', A8, ' FAILED THE TESTS OF ERROR-EXITS *****',
2874 SUBROUTINE CMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2877 * Generates values for an M by N matrix A.
2878 * Stores the values in the array AA in the data structure required
2879 * by the routine, with unwanted elements set to rogue value.
2881 * TYPE is 'GE', 'HE', 'SY' or 'TR'.
2883 * Auxiliary routine for test program for Level 3 Blas.
2885 * -- Written on 8-February-1989.
2886 * Jack Dongarra, Argonne National Laboratory.
2887 * Iain Duff, AERE Harwell.
2888 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2889 * Sven Hammarling, Numerical Algorithms Group Ltd.
2893 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
2895 PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) )
2897 PARAMETER ( RZERO = 0.0 )
2899 PARAMETER ( RROGUE = -1.0E10 )
2900 * .. Scalar Arguments ..
2902 INTEGER LDA, M, N, NMAX
2904 CHARACTER*1 DIAG, UPLO
2906 * .. Array Arguments ..
2907 COMPLEX A( NMAX, * ), AA( * )
2908 * .. Local Scalars ..
2909 INTEGER I, IBEG, IEND, J, JJ
2910 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2911 * .. External Functions ..
2914 * .. Intrinsic Functions ..
2915 INTRINSIC CMPLX, CONJG, REAL
2916 * .. Executable Statements ..
2921 UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
2922 LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
2923 UNIT = TRI.AND.DIAG.EQ.'U'
2925 * Generate data in array A.
2929 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2931 A( I, J ) = CBEG( RESET ) + TRANSL
2933 * Set some elements to zero
2934 IF( N.GT.3.AND.J.EQ.N/2 )
2937 A( J, I ) = CONJG( A( I, J ) )
2939 A( J, I ) = A( I, J )
2947 $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO )
2949 $ A( J, J ) = A( J, J ) + ONE
2954 * Store elements in array AS in data structure required by routine.
2956 IF( TYPE.EQ.'GE' )THEN
2959 AA( I + ( J - 1 )*LDA ) = A( I, J )
2961 DO 40 I = M + 1, LDA
2962 AA( I + ( J - 1 )*LDA ) = ROGUE
2965 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
2982 DO 60 I = 1, IBEG - 1
2983 AA( I + ( J - 1 )*LDA ) = ROGUE
2985 DO 70 I = IBEG, IEND
2986 AA( I + ( J - 1 )*LDA ) = A( I, J )
2988 DO 80 I = IEND + 1, LDA
2989 AA( I + ( J - 1 )*LDA ) = ROGUE
2992 JJ = J + ( J - 1 )*LDA
2993 AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE )
3002 SUBROUTINE CMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
3003 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
3006 * Checks the results of the computational tests.
3008 * Auxiliary routine for test program for Level 3 Blas.
3010 * -- Written on 8-February-1989.
3011 * Jack Dongarra, Argonne National Laboratory.
3012 * Iain Duff, AERE Harwell.
3013 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3014 * Sven Hammarling, Numerical Algorithms Group Ltd.
3018 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
3020 PARAMETER ( RZERO = 0.0, RONE = 1.0 )
3021 * .. Scalar Arguments ..
3024 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
3026 CHARACTER*1 TRANSA, TRANSB
3027 * .. Array Arguments ..
3028 COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ),
3029 $ CC( LDCC, * ), CT( * )
3031 * .. Local Scalars ..
3035 LOGICAL CTRANA, CTRANB, TRANA, TRANB
3036 * .. Intrinsic Functions ..
3037 INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT
3038 * .. Statement Functions ..
3040 * .. Statement Function definitions ..
3041 ABS1( CL ) = ABS( REAL( CL ) ) + ABS( AIMAG( CL ) )
3042 * .. Executable Statements ..
3043 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
3044 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
3045 CTRANA = TRANSA.EQ.'C'
3046 CTRANB = TRANSB.EQ.'C'
3048 * Compute expected result, one column at a time, in CT using data
3050 * Compute gauges in G.
3058 IF( .NOT.TRANA.AND..NOT.TRANB )THEN
3061 CT( I ) = CT( I ) + A( I, K )*B( K, J )
3062 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
3065 ELSE IF( TRANA.AND..NOT.TRANB )THEN
3069 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( K, J )
3070 G( I ) = G( I ) + ABS1( A( K, I ) )*
3077 CT( I ) = CT( I ) + A( K, I )*B( K, J )
3078 G( I ) = G( I ) + ABS1( A( K, I ) )*
3083 ELSE IF( .NOT.TRANA.AND.TRANB )THEN
3087 CT( I ) = CT( I ) + A( I, K )*CONJG( B( J, K ) )
3088 G( I ) = G( I ) + ABS1( A( I, K ) )*
3095 CT( I ) = CT( I ) + A( I, K )*B( J, K )
3096 G( I ) = G( I ) + ABS1( A( I, K ) )*
3101 ELSE IF( TRANA.AND.TRANB )THEN
3106 CT( I ) = CT( I ) + CONJG( A( K, I ) )*
3107 $ CONJG( B( J, K ) )
3108 G( I ) = G( I ) + ABS1( A( K, I ) )*
3115 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( J, K )
3116 G( I ) = G( I ) + ABS1( A( K, I ) )*
3125 CT( I ) = CT( I ) + A( K, I )*CONJG( B( J, K ) )
3126 G( I ) = G( I ) + ABS1( A( K, I ) )*
3133 CT( I ) = CT( I ) + A( K, I )*B( J, K )
3134 G( I ) = G( I ) + ABS1( A( K, I ) )*
3142 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
3143 G( I ) = ABS1( ALPHA )*G( I ) +
3144 $ ABS1( BETA )*ABS1( C( I, J ) )
3147 * Compute the error ratio for this result.
3151 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
3152 IF( G( I ).NE.RZERO )
3153 $ ERRI = ERRI/G( I )
3154 ERR = MAX( ERR, ERRI )
3155 IF( ERR*SQRT( EPS ).GE.RONE )
3161 * If the loop completes, all results are at least half accurate.
3164 * Report fatal error.
3167 WRITE( NOUT, FMT = 9999 )
3170 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
3172 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
3176 $ WRITE( NOUT, FMT = 9997 )J
3181 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3182 $ 'F ACCURATE *******', /' EXPECTED RE',
3183 $ 'SULT COMPUTED RESULT' )
3184 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
3185 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
3190 LOGICAL FUNCTION LCE( RI, RJ, LR )
3192 * Tests if two arrays are identical.
3194 * Auxiliary routine for test program for Level 3 Blas.
3196 * -- Written on 8-February-1989.
3197 * Jack Dongarra, Argonne National Laboratory.
3198 * Iain Duff, AERE Harwell.
3199 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3200 * Sven Hammarling, Numerical Algorithms Group Ltd.
3202 * .. Scalar Arguments ..
3204 * .. Array Arguments ..
3205 COMPLEX RI( * ), RJ( * )
3206 * .. Local Scalars ..
3208 * .. Executable Statements ..
3210 IF( RI( I ).NE.RJ( I ) )
3222 LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA )
3224 * Tests if selected elements in two arrays are equal.
3226 * TYPE is 'GE' or 'HE' or 'SY'.
3228 * Auxiliary routine for test program for Level 3 Blas.
3230 * -- Written on 8-February-1989.
3231 * Jack Dongarra, Argonne National Laboratory.
3232 * Iain Duff, AERE Harwell.
3233 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3234 * Sven Hammarling, Numerical Algorithms Group Ltd.
3236 * .. Scalar Arguments ..
3240 * .. Array Arguments ..
3241 COMPLEX AA( LDA, * ), AS( LDA, * )
3242 * .. Local Scalars ..
3243 INTEGER I, IBEG, IEND, J
3245 * .. Executable Statements ..
3247 IF( TYPE.EQ.'GE' )THEN
3249 DO 10 I = M + 1, LDA
3250 IF( AA( I, J ).NE.AS( I, J ) )
3254 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
3263 DO 30 I = 1, IBEG - 1
3264 IF( AA( I, J ).NE.AS( I, J ) )
3267 DO 40 I = IEND + 1, LDA
3268 IF( AA( I, J ).NE.AS( I, J ) )
3284 COMPLEX FUNCTION CBEG( RESET )
3286 * Generates complex numbers as pairs of random numbers uniformly
3287 * distributed between -0.5 and 0.5.
3289 * Auxiliary routine for test program for Level 3 Blas.
3291 * -- Written on 8-February-1989.
3292 * Jack Dongarra, Argonne National Laboratory.
3293 * Iain Duff, AERE Harwell.
3294 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3295 * Sven Hammarling, Numerical Algorithms Group Ltd.
3297 * .. Scalar Arguments ..
3299 * .. Local Scalars ..
3300 INTEGER I, IC, J, MI, MJ
3301 * .. Save statement ..
3302 SAVE I, IC, J, MI, MJ
3303 * .. Intrinsic Functions ..
3305 * .. Executable Statements ..
3307 * Initialize local variables.
3316 * The sequence of values of I or J is bounded between 1 and 999.
3317 * If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
3318 * If initial I or J = 4 or 8, the period will be 25.
3319 * If initial I or J = 5, the period will be 10.
3320 * IC is used to break up the period by skipping 1 value of I or J
3326 I = I - 1000*( I/1000 )
3327 J = J - 1000*( J/1000 )
3332 CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 )
3338 REAL FUNCTION SDIFF( X, Y )
3340 * Auxiliary routine for test program for Level 3 Blas.
3342 * -- Written on 8-February-1989.
3343 * Jack Dongarra, Argonne National Laboratory.
3344 * Iain Duff, AERE Harwell.
3345 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3346 * Sven Hammarling, Numerical Algorithms Group Ltd.
3348 * .. Scalar Arguments ..
3350 * .. Executable Statements ..
3357 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3359 * Tests whether XERBLA has detected an error when it should.
3361 * Auxiliary routine for test program for Level 3 Blas.
3363 * -- Written on 8-February-1989.
3364 * Jack Dongarra, Argonne National Laboratory.
3365 * Iain Duff, AERE Harwell.
3366 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3367 * Sven Hammarling, Numerical Algorithms Group Ltd.
3369 * .. Scalar Arguments ..
3373 * .. Executable Statements ..
3375 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3381 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3382 $ 'ETECTED BY ', A8, ' *****' )
3387 SUBROUTINE XERBLA( SRNAME, INFO )
3389 * This is a special version of XERBLA to be used only as part of
3390 * the test program for testing error exits from the Level 3 BLAS
3393 * XERBLA is an error handler for the Level 3 BLAS routines.
3395 * It is called by the Level 3 BLAS routines if an input parameter is
3398 * Auxiliary routine for test program for Level 3 Blas.
3400 * -- Written on 8-February-1989.
3401 * Jack Dongarra, Argonne National Laboratory.
3402 * Iain Duff, AERE Harwell.
3403 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3404 * Sven Hammarling, Numerical Algorithms Group Ltd.
3406 * .. Scalar Arguments ..
3409 * .. Scalars in Common ..
3413 * .. Common blocks ..
3414 COMMON /INFOC/INFOT, NOUT, OK, LERR
3415 COMMON /SRNAMC/SRNAMT
3416 * .. Executable Statements ..
3418 IF( INFO.NE.INFOT )THEN
3419 IF( INFOT.NE.0 )THEN
3420 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3422 WRITE( NOUT, FMT = 9997 )INFO
3426 IF( SRNAME.NE.SRNAMT )THEN
3427 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3432 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
3433 $ ' OF ', I2, ' *******' )
3434 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A8, ' INSTE',
3435 $ 'AD OF ', A8, ' *******' )
3436 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,