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 ( A6, 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 * CGEMM 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*6 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/'CGEMM ', 'CHEMM ', 'CSYMM ', 'CTRMM ',
98 $ 'CTRSM ', 'CHERK ', 'CSYRK ', 'CHER2K',
100 * .. Executable Statements ..
102 * Read name and unit number for summary output file and open file.
104 READ( NIN, FMT = * )SUMMRY
105 READ( NIN, FMT = * )NOUT
106 OPEN( NOUT, FILE = SUMMRY, STATUS = 'NEW' )
109 * Read name and unit number for snapshot output file and open file.
111 READ( NIN, FMT = * )SNAPS
112 READ( NIN, FMT = * )NTRA
115 OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' )
117 * Read the flag that directs rewinding of the snapshot file.
118 READ( NIN, FMT = * )REWI
119 REWI = REWI.AND.TRACE
120 * Read the flag that directs stopping on any failure.
121 READ( NIN, FMT = * )SFATAL
122 * Read the flag that indicates whether error exits are to be tested.
123 READ( NIN, FMT = * )TSTERR
124 * Read the threshold value of the test ratio
125 READ( NIN, FMT = * )THRESH
127 * Read and check the parameter values for the tests.
130 READ( NIN, FMT = * )NIDIM
131 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
132 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
135 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
137 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
138 WRITE( NOUT, FMT = 9996 )NMAX
143 READ( NIN, FMT = * )NALF
144 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
145 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
148 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
150 READ( NIN, FMT = * )NBET
151 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
152 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
155 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
157 * Report values of parameters.
159 WRITE( NOUT, FMT = 9995 )
160 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
161 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
162 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
163 IF( .NOT.TSTERR )THEN
164 WRITE( NOUT, FMT = * )
165 WRITE( NOUT, FMT = 9984 )
167 WRITE( NOUT, FMT = * )
168 WRITE( NOUT, FMT = 9999 )THRESH
169 WRITE( NOUT, FMT = * )
171 * Read names of subroutines and flags which indicate
172 * whether they are to be tested.
177 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
179 IF( SNAMET.EQ.SNAMES( I ) )
182 WRITE( NOUT, FMT = 9990 )SNAMET
184 50 LTEST( I ) = LTESTT
190 * Compute EPS (the machine precision).
194 IF( SDIFF( RONE + EPS, RONE ).EQ.RZERO )
200 WRITE( NOUT, FMT = 9998 )EPS
202 * Check the reliability of CMMCH using exact data.
207 AB( I, J ) = MAX( I - J + 1, 0 )
209 AB( J, NMAX + 1 ) = J
210 AB( 1, NMAX + J ) = J
214 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
216 * CC holds the exact result. On exit from CMMCH CT holds
217 * the result computed by CMMCH.
220 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
221 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
222 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
223 SAME = LCE( CC, CT, N )
224 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
225 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
229 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
230 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
231 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
232 SAME = LCE( CC, CT, N )
233 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
234 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
238 AB( J, NMAX + 1 ) = N - J + 1
239 AB( 1, NMAX + J ) = N - J + 1
242 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
243 $ ( ( J + 1 )*J*( J - 1 ) )/3
247 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
248 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
249 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
250 SAME = LCE( CC, CT, N )
251 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
252 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
256 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
257 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
258 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
259 SAME = LCE( CC, CT, N )
260 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
261 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
265 * Test each subroutine in turn.
267 DO 200 ISNUM = 1, NSUBS
268 WRITE( NOUT, FMT = * )
269 IF( .NOT.LTEST( ISNUM ) )THEN
270 * Subprogram is not to be tested.
271 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
273 SRNAMT = SNAMES( ISNUM )
276 CALL CCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
277 WRITE( NOUT, FMT = * )
283 GO TO ( 140, 150, 150, 160, 160, 170, 170,
286 140 CALL CCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
287 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
288 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
291 * Test CHEMM, 02, CSYMM, 03.
292 150 CALL CCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
293 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
294 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
297 * Test CTRMM, 04, CTRSM, 05.
298 160 CALL CCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
299 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
300 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
302 * Test CHERK, 06, CSYRK, 07.
303 170 CALL CCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
304 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
305 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
308 * Test CHER2K, 08, CSYR2K, 09.
309 180 CALL CCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
310 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
311 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
314 190 IF( FATAL.AND.SFATAL )
318 WRITE( NOUT, FMT = 9986 )
322 WRITE( NOUT, FMT = 9985 )
326 WRITE( NOUT, FMT = 9991 )
334 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
336 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 )
337 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
339 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
340 9995 FORMAT( ' TESTS OF THE COMPLEX LEVEL 3 BLAS', //' THE F',
341 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
342 9994 FORMAT( ' FOR N ', 9I6 )
343 9993 FORMAT( ' FOR ALPHA ',
344 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
345 9992 FORMAT( ' FOR BETA ',
346 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
347 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
348 $ /' ******* TESTS ABANDONED *******' )
349 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
350 $ 'ESTS ABANDONED *******' )
351 9989 FORMAT( ' ERROR IN CMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
352 $ 'ATED WRONGLY.', /' CMMCH WAS CALLED WITH TRANSA = ', A1,
353 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
354 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
355 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
357 9988 FORMAT( A6, L2 )
358 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' )
359 9986 FORMAT( /' END OF TESTS' )
360 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
361 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
366 SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
367 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
368 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
372 * Auxiliary routine for test program for Level 3 Blas.
374 * -- Written on 8-February-1989.
375 * Jack Dongarra, Argonne National Laboratory.
376 * Iain Duff, AERE Harwell.
377 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
378 * Sven Hammarling, Numerical Algorithms Group Ltd.
382 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
384 PARAMETER ( RZERO = 0.0 )
385 * .. Scalar Arguments ..
387 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
388 LOGICAL FATAL, REWI, TRACE
390 * .. Array Arguments ..
391 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
392 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
393 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
394 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
395 $ CS( NMAX*NMAX ), CT( NMAX )
397 INTEGER IDIM( NIDIM )
398 * .. Local Scalars ..
399 COMPLEX ALPHA, ALS, BETA, BLS
401 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
402 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
403 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
404 LOGICAL NULL, RESET, SAME, TRANA, TRANB
405 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
409 * .. External Functions ..
412 * .. External Subroutines ..
413 EXTERNAL CGEMM, CMAKE, CMMCH
414 * .. Intrinsic Functions ..
416 * .. Scalars in Common ..
419 * .. Common blocks ..
420 COMMON /INFOC/INFOT, NOUTC, OK, LERR
421 * .. Data statements ..
423 * .. Executable Statements ..
435 * Set LDC to 1 more than minimum value if room.
439 * Skip tests if not enough room.
443 NULL = N.LE.0.OR.M.LE.0
449 TRANSA = ICH( ICA: ICA )
450 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
459 * Set LDA to 1 more than minimum value if room.
463 * Skip tests if not enough room.
468 * Generate the matrix A.
470 CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
474 TRANSB = ICH( ICB: ICB )
475 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
484 * Set LDB to 1 more than minimum value if room.
488 * Skip tests if not enough room.
493 * Generate the matrix B.
495 CALL CMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
504 * Generate the matrix C.
506 CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
507 $ CC, LDC, RESET, ZERO )
511 * Save every datum before calling the
534 * Call the subroutine.
537 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
538 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
542 CALL CGEMM( TRANSA, TRANSB, M, N, K, ALPHA,
543 $ AA, LDA, BB, LDB, BETA, CC, LDC )
545 * Check if error-exit was taken incorrectly.
548 WRITE( NOUT, FMT = 9994 )
553 * See what data changed inside subroutines.
555 ISAME( 1 ) = TRANSA.EQ.TRANAS
556 ISAME( 2 ) = TRANSB.EQ.TRANBS
560 ISAME( 6 ) = ALS.EQ.ALPHA
561 ISAME( 7 ) = LCE( AS, AA, LAA )
562 ISAME( 8 ) = LDAS.EQ.LDA
563 ISAME( 9 ) = LCE( BS, BB, LBB )
564 ISAME( 10 ) = LDBS.EQ.LDB
565 ISAME( 11 ) = BLS.EQ.BETA
567 ISAME( 12 ) = LCE( CS, CC, LCC )
569 ISAME( 12 ) = LCERES( 'GE', ' ', M, N, CS,
572 ISAME( 13 ) = LDCS.EQ.LDC
574 * If data was incorrectly changed, report
579 SAME = SAME.AND.ISAME( I )
580 IF( .NOT.ISAME( I ) )
581 $ WRITE( NOUT, FMT = 9998 )I
592 CALL CMMCH( TRANSA, TRANSB, M, N, K,
593 $ ALPHA, A, NMAX, B, NMAX, BETA,
594 $ C, NMAX, CT, G, CC, LDC, EPS,
595 $ ERR, FATAL, NOUT, .TRUE. )
596 ERRMAX = MAX( ERRMAX, ERR )
597 * If got really bad answer, report and
619 IF( ERRMAX.LT.THRESH )THEN
620 WRITE( NOUT, FMT = 9999 )SNAME, NC
622 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
627 WRITE( NOUT, FMT = 9996 )SNAME
628 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
629 $ ALPHA, LDA, LDB, BETA, LDC
634 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
636 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
637 $ 'ANGED INCORRECTLY *******' )
638 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
639 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
640 $ ' - SUSPECT *******' )
641 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
642 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',',
643 $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
644 $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
645 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
651 SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
652 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
653 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
655 * Tests CHEMM and CSYMM.
657 * Auxiliary routine for test program for Level 3 Blas.
659 * -- Written on 8-February-1989.
660 * Jack Dongarra, Argonne National Laboratory.
661 * Iain Duff, AERE Harwell.
662 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
663 * Sven Hammarling, Numerical Algorithms Group Ltd.
667 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
669 PARAMETER ( RZERO = 0.0 )
670 * .. Scalar Arguments ..
672 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
673 LOGICAL FATAL, REWI, TRACE
675 * .. Array Arguments ..
676 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
677 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
678 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
679 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
680 $ CS( NMAX*NMAX ), CT( NMAX )
682 INTEGER IDIM( NIDIM )
683 * .. Local Scalars ..
684 COMPLEX ALPHA, ALS, BETA, BLS
686 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
687 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
689 LOGICAL CONJ, LEFT, NULL, RESET, SAME
690 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
691 CHARACTER*2 ICHS, ICHU
694 * .. External Functions ..
697 * .. External Subroutines ..
698 EXTERNAL CHEMM, CMAKE, CMMCH, CSYMM
699 * .. Intrinsic Functions ..
701 * .. Scalars in Common ..
704 * .. Common blocks ..
705 COMMON /INFOC/INFOT, NOUTC, OK, LERR
706 * .. Data statements ..
707 DATA ICHS/'LR'/, ICHU/'UL'/
708 * .. Executable Statements ..
709 CONJ = SNAME( 2: 3 ).EQ.'HE'
721 * Set LDC to 1 more than minimum value if room.
725 * Skip tests if not enough room.
729 NULL = N.LE.0.OR.M.LE.0
730 * Set LDB to 1 more than minimum value if room.
734 * Skip tests if not enough room.
739 * Generate the matrix B.
741 CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
745 SIDE = ICHS( ICS: ICS )
753 * Set LDA to 1 more than minimum value if room.
757 * Skip tests if not enough room.
763 UPLO = ICHU( ICU: ICU )
765 * Generate the hermitian or symmetric matrix A.
767 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
768 $ AA, LDA, RESET, ZERO )
776 * Generate the matrix C.
778 CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
783 * Save every datum before calling the
805 * Call the subroutine.
808 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
809 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
813 CALL CHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
814 $ BB, LDB, BETA, CC, LDC )
816 CALL CSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
817 $ BB, LDB, BETA, CC, LDC )
820 * Check if error-exit was taken incorrectly.
823 WRITE( NOUT, FMT = 9994 )
828 * See what data changed inside subroutines.
830 ISAME( 1 ) = SIDES.EQ.SIDE
831 ISAME( 2 ) = UPLOS.EQ.UPLO
834 ISAME( 5 ) = ALS.EQ.ALPHA
835 ISAME( 6 ) = LCE( AS, AA, LAA )
836 ISAME( 7 ) = LDAS.EQ.LDA
837 ISAME( 8 ) = LCE( BS, BB, LBB )
838 ISAME( 9 ) = LDBS.EQ.LDB
839 ISAME( 10 ) = BLS.EQ.BETA
841 ISAME( 11 ) = LCE( CS, CC, LCC )
843 ISAME( 11 ) = LCERES( 'GE', ' ', M, N, CS,
846 ISAME( 12 ) = LDCS.EQ.LDC
848 * If data was incorrectly changed, report and
853 SAME = SAME.AND.ISAME( I )
854 IF( .NOT.ISAME( I ) )
855 $ WRITE( NOUT, FMT = 9998 )I
867 CALL CMMCH( 'N', 'N', M, N, M, ALPHA, A,
868 $ NMAX, B, NMAX, BETA, C, NMAX,
869 $ CT, G, CC, LDC, EPS, ERR,
870 $ FATAL, NOUT, .TRUE. )
872 CALL CMMCH( 'N', 'N', M, N, N, ALPHA, B,
873 $ NMAX, A, NMAX, BETA, C, NMAX,
874 $ CT, G, CC, LDC, EPS, ERR,
875 $ FATAL, NOUT, .TRUE. )
877 ERRMAX = MAX( ERRMAX, ERR )
878 * If got really bad answer, report and
898 IF( ERRMAX.LT.THRESH )THEN
899 WRITE( NOUT, FMT = 9999 )SNAME, NC
901 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
906 WRITE( NOUT, FMT = 9996 )SNAME
907 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
913 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
915 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
916 $ 'ANGED INCORRECTLY *******' )
917 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
918 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
919 $ ' - SUSPECT *******' )
920 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
921 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
922 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
923 $ ',', F4.1, '), C,', I3, ') .' )
924 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
930 SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
931 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
932 $ B, BB, BS, CT, G, C )
934 * Tests CTRMM and CTRSM.
936 * Auxiliary routine for test program for Level 3 Blas.
938 * -- Written on 8-February-1989.
939 * Jack Dongarra, Argonne National Laboratory.
940 * Iain Duff, AERE Harwell.
941 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
942 * Sven Hammarling, Numerical Algorithms Group Ltd.
946 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
948 PARAMETER ( RZERO = 0.0 )
949 * .. Scalar Arguments ..
951 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
952 LOGICAL FATAL, REWI, TRACE
954 * .. Array Arguments ..
955 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
956 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
957 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
958 $ C( NMAX, NMAX ), CT( NMAX )
960 INTEGER IDIM( NIDIM )
961 * .. Local Scalars ..
964 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
965 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
967 LOGICAL LEFT, NULL, RESET, SAME
968 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
970 CHARACTER*2 ICHD, ICHS, ICHU
974 * .. External Functions ..
977 * .. External Subroutines ..
978 EXTERNAL CMAKE, CMMCH, CTRMM, CTRSM
979 * .. Intrinsic Functions ..
981 * .. Scalars in Common ..
984 * .. Common blocks ..
985 COMMON /INFOC/INFOT, NOUTC, OK, LERR
986 * .. Data statements ..
987 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
988 * .. Executable Statements ..
994 * Set up zero matrix for CMMCH.
1001 DO 140 IM = 1, NIDIM
1004 DO 130 IN = 1, NIDIM
1006 * Set LDB to 1 more than minimum value if room.
1010 * Skip tests if not enough room.
1014 NULL = M.LE.0.OR.N.LE.0
1017 SIDE = ICHS( ICS: ICS )
1024 * Set LDA to 1 more than minimum value if room.
1028 * Skip tests if not enough room.
1034 UPLO = ICHU( ICU: ICU )
1037 TRANSA = ICHT( ICT: ICT )
1040 DIAG = ICHD( ICD: ICD )
1045 * Generate the matrix A.
1047 CALL CMAKE( 'TR', UPLO, DIAG, NA, NA, A,
1048 $ NMAX, AA, LDA, RESET, ZERO )
1050 * Generate the matrix B.
1052 CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
1053 $ BB, LDB, RESET, ZERO )
1057 * Save every datum before calling the
1076 * Call the subroutine.
1078 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1080 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1081 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1085 CALL CTRMM( SIDE, UPLO, TRANSA, DIAG, M,
1086 $ N, ALPHA, AA, LDA, BB, LDB )
1087 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1089 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1090 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1094 CALL CTRSM( SIDE, UPLO, TRANSA, DIAG, M,
1095 $ N, ALPHA, AA, LDA, BB, LDB )
1098 * Check if error-exit was taken incorrectly.
1101 WRITE( NOUT, FMT = 9994 )
1106 * See what data changed inside subroutines.
1108 ISAME( 1 ) = SIDES.EQ.SIDE
1109 ISAME( 2 ) = UPLOS.EQ.UPLO
1110 ISAME( 3 ) = TRANAS.EQ.TRANSA
1111 ISAME( 4 ) = DIAGS.EQ.DIAG
1112 ISAME( 5 ) = MS.EQ.M
1113 ISAME( 6 ) = NS.EQ.N
1114 ISAME( 7 ) = ALS.EQ.ALPHA
1115 ISAME( 8 ) = LCE( AS, AA, LAA )
1116 ISAME( 9 ) = LDAS.EQ.LDA
1118 ISAME( 10 ) = LCE( BS, BB, LBB )
1120 ISAME( 10 ) = LCERES( 'GE', ' ', M, N, BS,
1123 ISAME( 11 ) = LDBS.EQ.LDB
1125 * If data was incorrectly changed, report and
1130 SAME = SAME.AND.ISAME( I )
1131 IF( .NOT.ISAME( I ) )
1132 $ WRITE( NOUT, FMT = 9998 )I
1140 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1145 CALL CMMCH( TRANSA, 'N', M, N, M,
1146 $ ALPHA, A, NMAX, B, NMAX,
1147 $ ZERO, C, NMAX, CT, G,
1148 $ BB, LDB, EPS, ERR,
1149 $ FATAL, NOUT, .TRUE. )
1151 CALL CMMCH( 'N', TRANSA, M, N, N,
1152 $ ALPHA, B, NMAX, A, NMAX,
1153 $ ZERO, C, NMAX, CT, G,
1154 $ BB, LDB, EPS, ERR,
1155 $ FATAL, NOUT, .TRUE. )
1157 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1159 * Compute approximation to original
1164 C( I, J ) = BB( I + ( J - 1 )*
1166 BB( I + ( J - 1 )*LDB ) = ALPHA*
1172 CALL CMMCH( TRANSA, 'N', M, N, M,
1173 $ ONE, A, NMAX, C, NMAX,
1174 $ ZERO, B, NMAX, CT, G,
1175 $ BB, LDB, EPS, ERR,
1176 $ FATAL, NOUT, .FALSE. )
1178 CALL CMMCH( 'N', TRANSA, M, N, N,
1179 $ ONE, C, NMAX, A, NMAX,
1180 $ ZERO, B, NMAX, CT, G,
1181 $ BB, LDB, EPS, ERR,
1182 $ FATAL, NOUT, .FALSE. )
1185 ERRMAX = MAX( ERRMAX, ERR )
1186 * If got really bad answer, report and
1208 IF( ERRMAX.LT.THRESH )THEN
1209 WRITE( NOUT, FMT = 9999 )SNAME, NC
1211 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1216 WRITE( NOUT, FMT = 9996 )SNAME
1217 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
1218 $ N, ALPHA, LDA, LDB
1223 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1225 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1226 $ 'ANGED INCORRECTLY *******' )
1227 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1228 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1229 $ ' - SUSPECT *******' )
1230 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1231 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
1232 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
1234 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1240 SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1241 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1242 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
1244 * Tests CHERK and CSYRK.
1246 * Auxiliary routine for test program for Level 3 Blas.
1248 * -- Written on 8-February-1989.
1249 * Jack Dongarra, Argonne National Laboratory.
1250 * Iain Duff, AERE Harwell.
1251 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1252 * Sven Hammarling, Numerical Algorithms Group Ltd.
1256 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
1258 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
1259 * .. Scalar Arguments ..
1261 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1262 LOGICAL FATAL, REWI, TRACE
1264 * .. Array Arguments ..
1265 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1266 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1267 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1268 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1269 $ CS( NMAX*NMAX ), CT( NMAX )
1271 INTEGER IDIM( NIDIM )
1272 * .. Local Scalars ..
1273 COMPLEX ALPHA, ALS, BETA, BETS
1274 REAL ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1275 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1276 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1278 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1279 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1280 CHARACTER*2 ICHT, ICHU
1281 * .. Local Arrays ..
1283 * .. External Functions ..
1285 EXTERNAL LCE, LCERES
1286 * .. External Subroutines ..
1287 EXTERNAL CHERK, CMAKE, CMMCH, CSYRK
1288 * .. Intrinsic Functions ..
1289 INTRINSIC CMPLX, MAX, REAL
1290 * .. Scalars in Common ..
1291 INTEGER INFOT, NOUTC
1293 * .. Common blocks ..
1294 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1295 * .. Data statements ..
1296 DATA ICHT/'NC'/, ICHU/'UL'/
1297 * .. Executable Statements ..
1298 CONJ = SNAME( 2: 3 ).EQ.'HE'
1307 DO 100 IN = 1, NIDIM
1309 * Set LDC to 1 more than minimum value if room.
1313 * Skip tests if not enough room.
1322 TRANS = ICHT( ICT: ICT )
1324 IF( TRAN.AND..NOT.CONJ )
1333 * Set LDA to 1 more than minimum value if room.
1337 * Skip tests if not enough room.
1342 * Generate the matrix A.
1344 CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
1348 UPLO = ICHU( ICU: ICU )
1354 RALPHA = REAL( ALPHA )
1355 ALPHA = CMPLX( RALPHA, RZERO )
1361 RBETA = REAL( BETA )
1362 BETA = CMPLX( RBETA, RZERO )
1366 $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
1367 $ RZERO ).AND.RBETA.EQ.RONE )
1369 * Generate the matrix C.
1371 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1372 $ NMAX, CC, LDC, RESET, ZERO )
1376 * Save every datum before calling the subroutine.
1401 * Call the subroutine.
1405 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1406 $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
1409 CALL CHERK( UPLO, TRANS, N, K, RALPHA, AA,
1410 $ LDA, RBETA, CC, LDC )
1413 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1414 $ TRANS, N, K, ALPHA, LDA, BETA, LDC
1417 CALL CSYRK( UPLO, TRANS, N, K, ALPHA, AA,
1418 $ LDA, BETA, CC, LDC )
1421 * Check if error-exit was taken incorrectly.
1424 WRITE( NOUT, FMT = 9992 )
1429 * See what data changed inside subroutines.
1431 ISAME( 1 ) = UPLOS.EQ.UPLO
1432 ISAME( 2 ) = TRANSS.EQ.TRANS
1433 ISAME( 3 ) = NS.EQ.N
1434 ISAME( 4 ) = KS.EQ.K
1436 ISAME( 5 ) = RALS.EQ.RALPHA
1438 ISAME( 5 ) = ALS.EQ.ALPHA
1440 ISAME( 6 ) = LCE( AS, AA, LAA )
1441 ISAME( 7 ) = LDAS.EQ.LDA
1443 ISAME( 8 ) = RBETS.EQ.RBETA
1445 ISAME( 8 ) = BETS.EQ.BETA
1448 ISAME( 9 ) = LCE( CS, CC, LCC )
1450 ISAME( 9 ) = LCERES( SNAME( 2: 3 ), UPLO, N,
1453 ISAME( 10 ) = LDCS.EQ.LDC
1455 * If data was incorrectly changed, report and
1460 SAME = SAME.AND.ISAME( I )
1461 IF( .NOT.ISAME( I ) )
1462 $ WRITE( NOUT, FMT = 9998 )I
1471 * Check the result column by column.
1488 CALL CMMCH( TRANST, 'N', LJ, 1, K,
1489 $ ALPHA, A( 1, JJ ), NMAX,
1490 $ A( 1, J ), NMAX, BETA,
1491 $ C( JJ, J ), NMAX, CT, G,
1492 $ CC( JC ), LDC, EPS, ERR,
1493 $ FATAL, NOUT, .TRUE. )
1495 CALL CMMCH( 'N', TRANST, LJ, 1, K,
1496 $ ALPHA, A( JJ, 1 ), NMAX,
1497 $ A( J, 1 ), NMAX, BETA,
1498 $ C( JJ, J ), NMAX, CT, G,
1499 $ CC( JC ), LDC, EPS, ERR,
1500 $ FATAL, NOUT, .TRUE. )
1507 ERRMAX = MAX( ERRMAX, ERR )
1508 * If got really bad answer, report and
1529 IF( ERRMAX.LT.THRESH )THEN
1530 WRITE( NOUT, FMT = 9999 )SNAME, NC
1532 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1538 $ WRITE( NOUT, FMT = 9995 )J
1541 WRITE( NOUT, FMT = 9996 )SNAME
1543 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
1546 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1553 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1555 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1556 $ 'ANGED INCORRECTLY *******' )
1557 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1558 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1559 $ ' - SUSPECT *******' )
1560 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1561 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1562 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1563 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
1565 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1566 $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
1567 $ '), C,', I3, ') .' )
1568 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1574 SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1575 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1576 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
1578 * Tests CHER2K and CSYR2K.
1580 * Auxiliary routine for test program for Level 3 Blas.
1582 * -- Written on 8-February-1989.
1583 * Jack Dongarra, Argonne National Laboratory.
1584 * Iain Duff, AERE Harwell.
1585 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1586 * Sven Hammarling, Numerical Algorithms Group Ltd.
1590 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
1592 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
1593 * .. Scalar Arguments ..
1595 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1596 LOGICAL FATAL, REWI, TRACE
1598 * .. Array Arguments ..
1599 COMPLEX AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1600 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1601 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1602 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1605 INTEGER IDIM( NIDIM )
1606 * .. Local Scalars ..
1607 COMPLEX ALPHA, ALS, BETA, BETS
1608 REAL ERR, ERRMAX, RBETA, RBETS
1609 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1610 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1611 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1612 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1613 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1614 CHARACTER*2 ICHT, ICHU
1615 * .. Local Arrays ..
1617 * .. External Functions ..
1619 EXTERNAL LCE, LCERES
1620 * .. External Subroutines ..
1621 EXTERNAL CHER2K, CMAKE, CMMCH, CSYR2K
1622 * .. Intrinsic Functions ..
1623 INTRINSIC CMPLX, CONJG, MAX, REAL
1624 * .. Scalars in Common ..
1625 INTEGER INFOT, NOUTC
1627 * .. Common blocks ..
1628 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1629 * .. Data statements ..
1630 DATA ICHT/'NC'/, ICHU/'UL'/
1631 * .. Executable Statements ..
1632 CONJ = SNAME( 2: 3 ).EQ.'HE'
1639 DO 130 IN = 1, NIDIM
1641 * Set LDC to 1 more than minimum value if room.
1645 * Skip tests if not enough room.
1650 DO 120 IK = 1, NIDIM
1654 TRANS = ICHT( ICT: ICT )
1656 IF( TRAN.AND..NOT.CONJ )
1665 * Set LDA to 1 more than minimum value if room.
1669 * Skip tests if not enough room.
1674 * Generate the matrix A.
1677 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
1678 $ LDA, RESET, ZERO )
1680 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
1684 * Generate the matrix B.
1689 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
1690 $ 2*NMAX, BB, LDB, RESET, ZERO )
1692 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
1693 $ NMAX, BB, LDB, RESET, ZERO )
1697 UPLO = ICHU( ICU: ICU )
1706 RBETA = REAL( BETA )
1707 BETA = CMPLX( RBETA, RZERO )
1711 $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
1712 $ ZERO ).AND.RBETA.EQ.RONE )
1714 * Generate the matrix C.
1716 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1717 $ NMAX, CC, LDC, RESET, ZERO )
1721 * Save every datum before calling the subroutine.
1746 * Call the subroutine.
1750 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1751 $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
1754 CALL CHER2K( UPLO, TRANS, N, K, ALPHA, AA,
1755 $ LDA, BB, LDB, RBETA, CC, LDC )
1758 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1759 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
1762 CALL CSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
1763 $ LDA, BB, LDB, BETA, CC, LDC )
1766 * Check if error-exit was taken incorrectly.
1769 WRITE( NOUT, FMT = 9992 )
1774 * See what data changed inside subroutines.
1776 ISAME( 1 ) = UPLOS.EQ.UPLO
1777 ISAME( 2 ) = TRANSS.EQ.TRANS
1778 ISAME( 3 ) = NS.EQ.N
1779 ISAME( 4 ) = KS.EQ.K
1780 ISAME( 5 ) = ALS.EQ.ALPHA
1781 ISAME( 6 ) = LCE( AS, AA, LAA )
1782 ISAME( 7 ) = LDAS.EQ.LDA
1783 ISAME( 8 ) = LCE( BS, BB, LBB )
1784 ISAME( 9 ) = LDBS.EQ.LDB
1786 ISAME( 10 ) = RBETS.EQ.RBETA
1788 ISAME( 10 ) = BETS.EQ.BETA
1791 ISAME( 11 ) = LCE( CS, CC, LCC )
1793 ISAME( 11 ) = LCERES( 'HE', UPLO, N, N, CS,
1796 ISAME( 12 ) = LDCS.EQ.LDC
1798 * If data was incorrectly changed, report and
1803 SAME = SAME.AND.ISAME( I )
1804 IF( .NOT.ISAME( I ) )
1805 $ WRITE( NOUT, FMT = 9998 )I
1814 * Check the result column by column.
1833 W( I ) = ALPHA*AB( ( J - 1 )*2*
1836 W( K + I ) = CONJG( ALPHA )*
1845 CALL CMMCH( TRANST, 'N', LJ, 1, 2*K,
1846 $ ONE, AB( JJAB ), 2*NMAX, W,
1847 $ 2*NMAX, BETA, C( JJ, J ),
1848 $ NMAX, CT, G, CC( JC ), LDC,
1849 $ EPS, ERR, FATAL, NOUT,
1854 W( I ) = ALPHA*CONJG( AB( ( K +
1855 $ I - 1 )*NMAX + J ) )
1856 W( K + I ) = CONJG( ALPHA*
1857 $ AB( ( I - 1 )*NMAX +
1860 W( I ) = ALPHA*AB( ( K + I - 1 )*
1863 $ AB( ( I - 1 )*NMAX +
1867 CALL CMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
1868 $ AB( JJ ), NMAX, W, 2*NMAX,
1869 $ BETA, C( JJ, J ), NMAX, CT,
1870 $ G, CC( JC ), LDC, EPS, ERR,
1871 $ FATAL, NOUT, .TRUE. )
1878 $ JJAB = JJAB + 2*NMAX
1880 ERRMAX = MAX( ERRMAX, ERR )
1881 * If got really bad answer, report and
1902 IF( ERRMAX.LT.THRESH )THEN
1903 WRITE( NOUT, FMT = 9999 )SNAME, NC
1905 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1911 $ WRITE( NOUT, FMT = 9995 )J
1914 WRITE( NOUT, FMT = 9996 )SNAME
1916 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1917 $ LDA, LDB, RBETA, LDC
1919 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1920 $ LDA, LDB, BETA, LDC
1926 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1928 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1929 $ 'ANGED INCORRECTLY *******' )
1930 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1931 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1932 $ ' - SUSPECT *******' )
1933 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1934 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1935 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1936 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
1937 $ ', C,', I3, ') .' )
1938 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1939 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
1940 $ ',', F4.1, '), C,', I3, ') .' )
1941 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1947 SUBROUTINE CCHKE( ISNUM, SRNAMT, NOUT )
1949 * Tests the error exits from the Level 3 Blas.
1950 * Requires a special version of the error-handling routine XERBLA.
1951 * ALPHA, RALPHA, BETA, RBETA, A, B and C should not need to be defined.
1953 * Auxiliary routine for test program for Level 3 Blas.
1955 * -- Written on 8-February-1989.
1956 * Jack Dongarra, Argonne National Laboratory.
1957 * Iain Duff, AERE Harwell.
1958 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1959 * Sven Hammarling, Numerical Algorithms Group Ltd.
1961 * .. Scalar Arguments ..
1964 * .. Scalars in Common ..
1965 INTEGER INFOT, NOUTC
1967 * .. Local Scalars ..
1970 * .. Local Arrays ..
1971 COMPLEX A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
1972 * .. External Subroutines ..
1973 EXTERNAL CGEMM, CHEMM, CHER2K, CHERK, CHKXER, CSYMM,
1974 $ CSYR2K, CSYRK, CTRMM, CTRSM
1975 * .. Common blocks ..
1976 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1977 * .. Executable Statements ..
1978 * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
1979 * if anything is wrong.
1981 * LERR is set to .TRUE. by the special version of XERBLA each time
1982 * it is called, and is then tested and re-set by CHKXER.
1984 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
1987 CALL CGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1988 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1990 CALL CGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1991 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1993 CALL CGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1994 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1996 CALL CGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1997 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1999 CALL CGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2000 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2002 CALL CGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2003 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2005 CALL CGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2006 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2008 CALL CGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2009 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2011 CALL CGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2012 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2014 CALL CGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2015 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2017 CALL CGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2018 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2020 CALL CGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2021 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2023 CALL CGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2024 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2026 CALL CGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2027 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2029 CALL CGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2030 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2032 CALL CGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2033 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2035 CALL CGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2036 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2038 CALL CGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2039 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2041 CALL CGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2042 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2044 CALL CGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2045 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2047 CALL CGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2048 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2050 CALL CGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2051 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2053 CALL CGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2054 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2056 CALL CGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2057 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2059 CALL CGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2060 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2062 CALL CGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2063 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2065 CALL CGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2066 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2068 CALL CGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2069 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2071 CALL CGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2072 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2074 CALL CGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2075 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2077 CALL CGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2078 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2080 CALL CGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2081 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2083 CALL CGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2084 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2086 CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2087 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2089 CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2090 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2092 CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2093 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2095 CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2096 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2098 CALL CGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2099 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2101 CALL CGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2102 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2104 CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2105 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2107 CALL CGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2108 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2110 CALL CGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2111 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2113 CALL CGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2114 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2116 CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2117 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2119 CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2120 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2122 CALL CGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2123 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2125 CALL CGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2126 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2128 CALL CGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2129 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2131 CALL CGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2132 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2134 CALL CGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2135 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2137 CALL CGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2138 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2140 CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2141 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2143 CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2144 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2146 CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2147 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2149 CALL CGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2150 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2152 CALL CGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2153 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2155 CALL CGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2156 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2158 CALL CGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2159 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2161 CALL CGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2162 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2164 CALL CGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2165 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2168 CALL CHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2169 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2171 CALL CHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2172 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2174 CALL CHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2175 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2177 CALL CHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2178 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2180 CALL CHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2181 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2183 CALL CHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2184 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2186 CALL CHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2187 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2189 CALL CHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2190 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2192 CALL CHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2193 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2195 CALL CHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2196 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2198 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2199 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2201 CALL CHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2202 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2204 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2205 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2207 CALL CHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2208 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2210 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2211 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2213 CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2214 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2216 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2217 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2219 CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2220 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2222 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2223 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2225 CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2226 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2228 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2229 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2231 CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2232 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2235 CALL CSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2236 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2238 CALL CSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2239 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2241 CALL CSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2242 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2244 CALL CSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2245 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2247 CALL CSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2248 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2250 CALL CSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2251 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2253 CALL CSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2254 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2256 CALL CSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2257 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2259 CALL CSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2260 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2262 CALL CSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2263 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2265 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2266 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2268 CALL CSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2269 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2271 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2272 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2274 CALL CSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2275 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2277 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2278 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2280 CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2281 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2283 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2284 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2286 CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2287 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2289 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2290 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2292 CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2293 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2295 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2296 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2298 CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2299 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2302 CALL CTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2303 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2305 CALL CTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2306 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2308 CALL CTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2309 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2311 CALL CTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2312 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2314 CALL CTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2315 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2317 CALL CTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2318 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2320 CALL CTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2321 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2323 CALL CTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2324 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2326 CALL CTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2327 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2329 CALL CTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2330 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2332 CALL CTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2333 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2335 CALL CTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2336 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2338 CALL CTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2339 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2341 CALL CTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2342 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2344 CALL CTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2345 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2347 CALL CTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2348 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2350 CALL CTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2351 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2353 CALL CTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2354 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2356 CALL CTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2357 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2359 CALL CTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2360 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2362 CALL CTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2363 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2365 CALL CTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2366 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2368 CALL CTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2369 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2371 CALL CTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2372 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2374 CALL CTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2375 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2377 CALL CTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2378 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2380 CALL CTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2381 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2383 CALL CTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2384 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2386 CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2387 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2389 CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2390 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2392 CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2393 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2395 CALL CTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2396 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2398 CALL CTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2399 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2401 CALL CTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2402 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2404 CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2405 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2407 CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2408 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2410 CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2411 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2413 CALL CTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2414 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2416 CALL CTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2417 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2419 CALL CTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2420 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2422 CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2423 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2425 CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2426 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2428 CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2429 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2431 CALL CTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2432 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2434 CALL CTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2435 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2437 CALL CTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2438 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2440 CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2441 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2443 CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2444 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2446 CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2447 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2449 CALL CTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2450 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2452 CALL CTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2453 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2455 CALL CTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2456 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2459 CALL CTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2460 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2462 CALL CTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2463 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2465 CALL CTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2466 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2468 CALL CTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2469 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2471 CALL CTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2472 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2474 CALL CTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2475 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2477 CALL CTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2478 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2480 CALL CTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2481 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2483 CALL CTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2484 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2486 CALL CTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2487 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2489 CALL CTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2490 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2492 CALL CTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2493 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2495 CALL CTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2496 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2498 CALL CTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2499 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2501 CALL CTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2502 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2504 CALL CTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2505 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2507 CALL CTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2508 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2510 CALL CTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2511 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2513 CALL CTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2514 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2516 CALL CTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2517 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2519 CALL CTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2520 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2522 CALL CTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2523 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2525 CALL CTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2526 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2528 CALL CTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2529 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2531 CALL CTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2532 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2534 CALL CTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2535 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2537 CALL CTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2538 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2540 CALL CTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2541 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2543 CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2544 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2546 CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2547 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2549 CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2550 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2552 CALL CTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2553 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2555 CALL CTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2556 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2558 CALL CTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2559 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2561 CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2562 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2564 CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2565 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2567 CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2568 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2570 CALL CTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2571 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2573 CALL CTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2574 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2576 CALL CTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2577 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2579 CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2580 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2582 CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2583 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2585 CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2586 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2588 CALL CTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2589 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2591 CALL CTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2592 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2594 CALL CTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2595 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2597 CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2598 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2600 CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2601 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2603 CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2604 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2606 CALL CTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2607 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2609 CALL CTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2610 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2612 CALL CTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2613 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2616 CALL CHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2617 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2619 CALL CHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2620 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2622 CALL CHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2623 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2625 CALL CHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2626 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2628 CALL CHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2629 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2631 CALL CHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2632 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2634 CALL CHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2635 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2637 CALL CHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2638 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2640 CALL CHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2641 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2643 CALL CHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2644 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2646 CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2647 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2649 CALL CHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2650 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2652 CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2653 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2655 CALL CHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2656 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2658 CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2659 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2661 CALL CHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2662 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2664 CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2665 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2667 CALL CHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2668 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2671 CALL CSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2672 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2674 CALL CSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2675 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2677 CALL CSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2678 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2680 CALL CSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2681 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2683 CALL CSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2684 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2686 CALL CSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2687 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2689 CALL CSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2690 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2692 CALL CSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2693 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2695 CALL CSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2696 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2698 CALL CSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2699 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2701 CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2702 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2704 CALL CSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2705 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2707 CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2708 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2710 CALL CSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2711 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2713 CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2714 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2716 CALL CSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2717 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2719 CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2720 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2722 CALL CSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2723 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2726 CALL CHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2727 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2729 CALL CHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2730 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2732 CALL CHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2733 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2735 CALL CHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2736 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2738 CALL CHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2739 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2741 CALL CHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2742 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2744 CALL CHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2745 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2747 CALL CHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2748 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2750 CALL CHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2751 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2753 CALL CHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2754 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2756 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2757 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2759 CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2760 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2762 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2763 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2765 CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2766 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2768 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2769 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2771 CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2772 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2774 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2775 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2777 CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2778 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2780 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2781 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2783 CALL CHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2784 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2786 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2787 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2789 CALL CHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2790 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2793 CALL CSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2794 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2796 CALL CSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2797 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2799 CALL CSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2800 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2802 CALL CSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2803 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2805 CALL CSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2806 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2808 CALL CSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2809 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2811 CALL CSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2812 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2814 CALL CSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2815 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2817 CALL CSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2818 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2820 CALL CSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2821 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2823 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2824 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2826 CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2827 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2829 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2830 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2832 CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2833 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2835 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2836 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2838 CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2839 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2841 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2842 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2844 CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2845 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2847 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2848 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2850 CALL CSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2851 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2853 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2854 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2856 CALL CSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2857 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2860 WRITE( NOUT, FMT = 9999 )SRNAMT
2862 WRITE( NOUT, FMT = 9998 )SRNAMT
2866 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2867 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2873 SUBROUTINE CMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2876 * Generates values for an M by N matrix A.
2877 * Stores the values in the array AA in the data structure required
2878 * by the routine, with unwanted elements set to rogue value.
2880 * TYPE is 'GE', 'HE', 'SY' or 'TR'.
2882 * Auxiliary routine for test program for Level 3 Blas.
2884 * -- Written on 8-February-1989.
2885 * Jack Dongarra, Argonne National Laboratory.
2886 * Iain Duff, AERE Harwell.
2887 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2888 * Sven Hammarling, Numerical Algorithms Group Ltd.
2892 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
2894 PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) )
2896 PARAMETER ( RZERO = 0.0 )
2898 PARAMETER ( RROGUE = -1.0E10 )
2899 * .. Scalar Arguments ..
2901 INTEGER LDA, M, N, NMAX
2903 CHARACTER*1 DIAG, UPLO
2905 * .. Array Arguments ..
2906 COMPLEX A( NMAX, * ), AA( * )
2907 * .. Local Scalars ..
2908 INTEGER I, IBEG, IEND, J, JJ
2909 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2910 * .. External Functions ..
2913 * .. Intrinsic Functions ..
2914 INTRINSIC CMPLX, CONJG, REAL
2915 * .. Executable Statements ..
2920 UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
2921 LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
2922 UNIT = TRI.AND.DIAG.EQ.'U'
2924 * Generate data in array A.
2928 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2930 A( I, J ) = CBEG( RESET ) + TRANSL
2932 * Set some elements to zero
2933 IF( N.GT.3.AND.J.EQ.N/2 )
2936 A( J, I ) = CONJG( A( I, J ) )
2938 A( J, I ) = A( I, J )
2946 $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO )
2948 $ A( J, J ) = A( J, J ) + ONE
2953 * Store elements in array AS in data structure required by routine.
2955 IF( TYPE.EQ.'GE' )THEN
2958 AA( I + ( J - 1 )*LDA ) = A( I, J )
2960 DO 40 I = M + 1, LDA
2961 AA( I + ( J - 1 )*LDA ) = ROGUE
2964 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
2981 DO 60 I = 1, IBEG - 1
2982 AA( I + ( J - 1 )*LDA ) = ROGUE
2984 DO 70 I = IBEG, IEND
2985 AA( I + ( J - 1 )*LDA ) = A( I, J )
2987 DO 80 I = IEND + 1, LDA
2988 AA( I + ( J - 1 )*LDA ) = ROGUE
2991 JJ = J + ( J - 1 )*LDA
2992 AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE )
3001 SUBROUTINE CMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
3002 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
3005 * Checks the results of the computational tests.
3007 * Auxiliary routine for test program for Level 3 Blas.
3009 * -- Written on 8-February-1989.
3010 * Jack Dongarra, Argonne National Laboratory.
3011 * Iain Duff, AERE Harwell.
3012 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3013 * Sven Hammarling, Numerical Algorithms Group Ltd.
3017 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
3019 PARAMETER ( RZERO = 0.0, RONE = 1.0 )
3020 * .. Scalar Arguments ..
3023 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
3025 CHARACTER*1 TRANSA, TRANSB
3026 * .. Array Arguments ..
3027 COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ),
3028 $ CC( LDCC, * ), CT( * )
3030 * .. Local Scalars ..
3034 LOGICAL CTRANA, CTRANB, TRANA, TRANB
3035 * .. Intrinsic Functions ..
3036 INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT
3037 * .. Statement Functions ..
3039 * .. Statement Function definitions ..
3040 ABS1( CL ) = ABS( REAL( CL ) ) + ABS( AIMAG( CL ) )
3041 * .. Executable Statements ..
3042 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
3043 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
3044 CTRANA = TRANSA.EQ.'C'
3045 CTRANB = TRANSB.EQ.'C'
3047 * Compute expected result, one column at a time, in CT using data
3049 * Compute gauges in G.
3057 IF( .NOT.TRANA.AND..NOT.TRANB )THEN
3060 CT( I ) = CT( I ) + A( I, K )*B( K, J )
3061 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
3064 ELSE IF( TRANA.AND..NOT.TRANB )THEN
3068 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( K, J )
3069 G( I ) = G( I ) + ABS1( A( K, I ) )*
3076 CT( I ) = CT( I ) + A( K, I )*B( K, J )
3077 G( I ) = G( I ) + ABS1( A( K, I ) )*
3082 ELSE IF( .NOT.TRANA.AND.TRANB )THEN
3086 CT( I ) = CT( I ) + A( I, K )*CONJG( B( J, K ) )
3087 G( I ) = G( I ) + ABS1( A( I, K ) )*
3094 CT( I ) = CT( I ) + A( I, K )*B( J, K )
3095 G( I ) = G( I ) + ABS1( A( I, K ) )*
3100 ELSE IF( TRANA.AND.TRANB )THEN
3105 CT( I ) = CT( I ) + CONJG( A( K, I ) )*
3106 $ CONJG( B( J, K ) )
3107 G( I ) = G( I ) + ABS1( A( K, I ) )*
3114 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( J, K )
3115 G( I ) = G( I ) + ABS1( A( K, I ) )*
3124 CT( I ) = CT( I ) + A( K, I )*CONJG( B( J, K ) )
3125 G( I ) = G( I ) + ABS1( A( K, I ) )*
3132 CT( I ) = CT( I ) + A( K, I )*B( J, K )
3133 G( I ) = G( I ) + ABS1( A( K, I ) )*
3141 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
3142 G( I ) = ABS1( ALPHA )*G( I ) +
3143 $ ABS1( BETA )*ABS1( C( I, J ) )
3146 * Compute the error ratio for this result.
3150 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
3151 IF( G( I ).NE.RZERO )
3152 $ ERRI = ERRI/G( I )
3153 ERR = MAX( ERR, ERRI )
3154 IF( ERR*SQRT( EPS ).GE.RONE )
3160 * If the loop completes, all results are at least half accurate.
3163 * Report fatal error.
3166 WRITE( NOUT, FMT = 9999 )
3169 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
3171 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
3175 $ WRITE( NOUT, FMT = 9997 )J
3180 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3181 $ 'F ACCURATE *******', /' EXPECTED RE',
3182 $ 'SULT COMPUTED RESULT' )
3183 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
3184 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
3189 LOGICAL FUNCTION LCE( RI, RJ, LR )
3191 * Tests if two arrays are identical.
3193 * Auxiliary routine for test program for Level 3 Blas.
3195 * -- Written on 8-February-1989.
3196 * Jack Dongarra, Argonne National Laboratory.
3197 * Iain Duff, AERE Harwell.
3198 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3199 * Sven Hammarling, Numerical Algorithms Group Ltd.
3201 * .. Scalar Arguments ..
3203 * .. Array Arguments ..
3204 COMPLEX RI( * ), RJ( * )
3205 * .. Local Scalars ..
3207 * .. Executable Statements ..
3209 IF( RI( I ).NE.RJ( I ) )
3221 LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA )
3223 * Tests if selected elements in two arrays are equal.
3225 * TYPE is 'GE' or 'HE' or 'SY'.
3227 * Auxiliary routine for test program for Level 3 Blas.
3229 * -- Written on 8-February-1989.
3230 * Jack Dongarra, Argonne National Laboratory.
3231 * Iain Duff, AERE Harwell.
3232 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3233 * Sven Hammarling, Numerical Algorithms Group Ltd.
3235 * .. Scalar Arguments ..
3239 * .. Array Arguments ..
3240 COMPLEX AA( LDA, * ), AS( LDA, * )
3241 * .. Local Scalars ..
3242 INTEGER I, IBEG, IEND, J
3244 * .. Executable Statements ..
3246 IF( TYPE.EQ.'GE' )THEN
3248 DO 10 I = M + 1, LDA
3249 IF( AA( I, J ).NE.AS( I, J ) )
3253 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
3262 DO 30 I = 1, IBEG - 1
3263 IF( AA( I, J ).NE.AS( I, J ) )
3266 DO 40 I = IEND + 1, LDA
3267 IF( AA( I, J ).NE.AS( I, J ) )
3283 COMPLEX FUNCTION CBEG( RESET )
3285 * Generates complex numbers as pairs of random numbers uniformly
3286 * distributed between -0.5 and 0.5.
3288 * Auxiliary routine for test program for Level 3 Blas.
3290 * -- Written on 8-February-1989.
3291 * Jack Dongarra, Argonne National Laboratory.
3292 * Iain Duff, AERE Harwell.
3293 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3294 * Sven Hammarling, Numerical Algorithms Group Ltd.
3296 * .. Scalar Arguments ..
3298 * .. Local Scalars ..
3299 INTEGER I, IC, J, MI, MJ
3300 * .. Save statement ..
3301 SAVE I, IC, J, MI, MJ
3302 * .. Intrinsic Functions ..
3304 * .. Executable Statements ..
3306 * Initialize local variables.
3315 * The sequence of values of I or J is bounded between 1 and 999.
3316 * If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
3317 * If initial I or J = 4 or 8, the period will be 25.
3318 * If initial I or J = 5, the period will be 10.
3319 * IC is used to break up the period by skipping 1 value of I or J
3325 I = I - 1000*( I/1000 )
3326 J = J - 1000*( J/1000 )
3331 CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 )
3337 REAL FUNCTION SDIFF( X, Y )
3339 * Auxiliary routine for test program for Level 3 Blas.
3341 * -- Written on 8-February-1989.
3342 * Jack Dongarra, Argonne National Laboratory.
3343 * Iain Duff, AERE Harwell.
3344 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3345 * Sven Hammarling, Numerical Algorithms Group Ltd.
3347 * .. Scalar Arguments ..
3349 * .. Executable Statements ..
3356 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3358 * Tests whether XERBLA has detected an error when it should.
3360 * Auxiliary routine for test program for Level 3 Blas.
3362 * -- Written on 8-February-1989.
3363 * Jack Dongarra, Argonne National Laboratory.
3364 * Iain Duff, AERE Harwell.
3365 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3366 * Sven Hammarling, Numerical Algorithms Group Ltd.
3368 * .. Scalar Arguments ..
3372 * .. Executable Statements ..
3374 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3380 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3381 $ 'ETECTED BY ', A6, ' *****' )
3386 SUBROUTINE XERBLA( SRNAME, INFO )
3388 * This is a special version of XERBLA to be used only as part of
3389 * the test program for testing error exits from the Level 3 BLAS
3392 * XERBLA is an error handler for the Level 3 BLAS routines.
3394 * It is called by the Level 3 BLAS routines if an input parameter is
3397 * Auxiliary routine for test program for Level 3 Blas.
3399 * -- Written on 8-February-1989.
3400 * Jack Dongarra, Argonne National Laboratory.
3401 * Iain Duff, AERE Harwell.
3402 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3403 * Sven Hammarling, Numerical Algorithms Group Ltd.
3405 * .. Scalar Arguments ..
3408 * .. Scalars in Common ..
3412 * .. Common blocks ..
3413 COMMON /INFOC/INFOT, NOUT, OK, LERR
3414 COMMON /SRNAMC/SRNAMT
3415 * .. Executable Statements ..
3417 IF( INFO.NE.INFOT )THEN
3418 IF( INFOT.NE.0 )THEN
3419 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3421 WRITE( NOUT, FMT = 9997 )INFO
3425 IF( SRNAME.NE.SRNAMT )THEN
3426 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3431 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
3432 $ ' OF ', I2, ' *******' )
3433 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
3434 $ 'AD OF ', A6, ' *******' )
3435 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,