3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
19 *> Test program for the COMPLEX Level 3 Blas.
21 *> The program must be driven by a short data file. The first 14 records
22 *> of the file are read using list-directed input, the last 9 records
23 *> are read using the format ( A6, L2 ). An annotated example of a data
24 *> file can be obtained by deleting the first 3 characters from the
25 *> following 23 lines:
26 *> 'cblat3.out' NAME OF SUMMARY OUTPUT FILE
27 *> 6 UNIT NUMBER OF SUMMARY FILE
28 *> 'CBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
29 *> -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
30 *> F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
31 *> F LOGICAL FLAG, T TO STOP ON FAILURES.
32 *> T LOGICAL FLAG, T TO TEST ERROR EXITS.
33 *> 16.0 THRESHOLD VALUE OF TEST RATIO
34 *> 6 NUMBER OF VALUES OF N
35 *> 0 1 2 3 5 9 VALUES OF N
36 *> 3 NUMBER OF VALUES OF ALPHA
37 *> (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA
38 *> 3 NUMBER OF VALUES OF BETA
39 *> (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA
40 *> CGEMM T PUT F FOR NO TEST. SAME COLUMNS.
41 *> CHEMM T PUT F FOR NO TEST. SAME COLUMNS.
42 *> CSYMM T PUT F FOR NO TEST. SAME COLUMNS.
43 *> CTRMM T PUT F FOR NO TEST. SAME COLUMNS.
44 *> CTRSM T PUT F FOR NO TEST. SAME COLUMNS.
45 *> CHERK T PUT F FOR NO TEST. SAME COLUMNS.
46 *> CSYRK T PUT F FOR NO TEST. SAME COLUMNS.
47 *> CHER2K T PUT F FOR NO TEST. SAME COLUMNS.
48 *> CSYR2K T PUT F FOR NO TEST. SAME COLUMNS.
55 *> Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S.
56 *> A Set of Level 3 Basic Linear Algebra Subprograms.
58 *> Technical Memorandum No.88 (Revision 1), Mathematics and
59 *> Computer Science Division, Argonne National Laboratory, 9700
60 *> South Cass Avenue, Argonne, Illinois 60439, US.
62 *> -- Written on 8-February-1989.
63 *> Jack Dongarra, Argonne National Laboratory.
64 *> Iain Duff, AERE Harwell.
65 *> Jeremy Du Croz, Numerical Algorithms Group Ltd.
66 *> Sven Hammarling, Numerical Algorithms Group Ltd.
68 *> 10-9-00: Change STATUS='NEW' to 'UNKNOWN' so that the testers
69 *> can be run multiple times without deleting generated
70 *> output files (susan)
76 *> \author Univ. of Tennessee
77 *> \author Univ. of California Berkeley
78 *> \author Univ. of Colorado Denver
83 *> \ingroup complex_blas_testing
85 * =====================================================================
88 * -- Reference BLAS test routine (version 3.7.0) --
89 * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
90 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
93 * =====================================================================
99 PARAMETER ( NSUBS = 9 )
101 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
103 PARAMETER ( RZERO = 0.0 )
105 PARAMETER ( NMAX = 65 )
106 INTEGER NIDMAX, NALMAX, NBEMAX
107 PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 )
108 * .. Local Scalars ..
109 REAL EPS, ERR, THRESH
110 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA
111 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
113 CHARACTER*1 TRANSA, TRANSB
115 CHARACTER*32 SNAPS, SUMMRY
117 COMPLEX AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ),
118 $ ALF( NALMAX ), AS( NMAX*NMAX ),
119 $ BB( NMAX*NMAX ), BET( NBEMAX ),
120 $ BS( NMAX*NMAX ), C( NMAX, NMAX ),
121 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
124 INTEGER IDIM( NIDMAX )
125 LOGICAL LTEST( NSUBS )
126 CHARACTER*6 SNAMES( NSUBS )
127 * .. External Functions ..
131 * .. External Subroutines ..
132 EXTERNAL CCHK1, CCHK2, CCHK3, CCHK4, CCHK5, CCHKE, CMMCH
133 * .. Intrinsic Functions ..
135 * .. Scalars in Common ..
139 * .. Common blocks ..
140 COMMON /INFOC/INFOT, NOUTC, OK, LERR
141 COMMON /SRNAMC/SRNAMT
142 * .. Data statements ..
143 DATA SNAMES/'CGEMM ', 'CHEMM ', 'CSYMM ', 'CTRMM ',
144 $ 'CTRSM ', 'CHERK ', 'CSYRK ', 'CHER2K',
146 * .. Executable Statements ..
148 * Read name and unit number for summary output file and open file.
150 READ( NIN, FMT = * )SUMMRY
151 READ( NIN, FMT = * )NOUT
152 OPEN( NOUT, FILE = SUMMRY )
155 * Read name and unit number for snapshot output file and open file.
157 READ( NIN, FMT = * )SNAPS
158 READ( NIN, FMT = * )NTRA
161 OPEN( NTRA, FILE = SNAPS )
163 * Read the flag that directs rewinding of the snapshot file.
164 READ( NIN, FMT = * )REWI
165 REWI = REWI.AND.TRACE
166 * Read the flag that directs stopping on any failure.
167 READ( NIN, FMT = * )SFATAL
168 * Read the flag that indicates whether error exits are to be tested.
169 READ( NIN, FMT = * )TSTERR
170 * Read the threshold value of the test ratio
171 READ( NIN, FMT = * )THRESH
173 * Read and check the parameter values for the tests.
176 READ( NIN, FMT = * )NIDIM
177 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
178 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
181 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
183 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
184 WRITE( NOUT, FMT = 9996 )NMAX
189 READ( NIN, FMT = * )NALF
190 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
191 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
194 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
196 READ( NIN, FMT = * )NBET
197 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
198 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
201 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
203 * Report values of parameters.
205 WRITE( NOUT, FMT = 9995 )
206 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
207 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
208 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
209 IF( .NOT.TSTERR )THEN
210 WRITE( NOUT, FMT = * )
211 WRITE( NOUT, FMT = 9984 )
213 WRITE( NOUT, FMT = * )
214 WRITE( NOUT, FMT = 9999 )THRESH
215 WRITE( NOUT, FMT = * )
217 * Read names of subroutines and flags which indicate
218 * whether they are to be tested.
223 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
225 IF( SNAMET.EQ.SNAMES( I ) )
228 WRITE( NOUT, FMT = 9990 )SNAMET
230 50 LTEST( I ) = LTESTT
236 * Compute EPS (the machine precision).
239 WRITE( NOUT, FMT = 9998 )EPS
241 * Check the reliability of CMMCH using exact data.
246 AB( I, J ) = MAX( I - J + 1, 0 )
248 AB( J, NMAX + 1 ) = J
249 AB( 1, NMAX + J ) = J
253 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
255 * CC holds the exact result. On exit from CMMCH CT holds
256 * the result computed by CMMCH.
259 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
260 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
261 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
262 SAME = LCE( CC, CT, N )
263 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
264 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
268 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
269 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
270 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
271 SAME = LCE( CC, CT, N )
272 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
273 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
277 AB( J, NMAX + 1 ) = N - J + 1
278 AB( 1, NMAX + J ) = N - J + 1
281 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
282 $ ( ( J + 1 )*J*( J - 1 ) )/3
286 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
287 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
288 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
289 SAME = LCE( CC, CT, N )
290 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
291 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
295 CALL CMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
296 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
297 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
298 SAME = LCE( CC, CT, N )
299 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
300 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
304 * Test each subroutine in turn.
306 DO 200 ISNUM = 1, NSUBS
307 WRITE( NOUT, FMT = * )
308 IF( .NOT.LTEST( ISNUM ) )THEN
309 * Subprogram is not to be tested.
310 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
312 SRNAMT = SNAMES( ISNUM )
315 CALL CCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
316 WRITE( NOUT, FMT = * )
322 GO TO ( 140, 150, 150, 160, 160, 170, 170,
325 140 CALL CCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
326 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
327 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
330 * Test CHEMM, 02, CSYMM, 03.
331 150 CALL CCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
332 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
333 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
336 * Test CTRMM, 04, CTRSM, 05.
337 160 CALL CCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
338 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
339 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
341 * Test CHERK, 06, CSYRK, 07.
342 170 CALL CCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
343 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
344 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
347 * Test CHER2K, 08, CSYR2K, 09.
348 180 CALL CCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
349 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
350 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
353 190 IF( FATAL.AND.SFATAL )
357 WRITE( NOUT, FMT = 9986 )
361 WRITE( NOUT, FMT = 9985 )
365 WRITE( NOUT, FMT = 9991 )
373 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
375 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 )
376 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
378 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
379 9995 FORMAT( ' TESTS OF THE COMPLEX LEVEL 3 BLAS', //' THE F',
380 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
381 9994 FORMAT( ' FOR N ', 9I6 )
382 9993 FORMAT( ' FOR ALPHA ',
383 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
384 9992 FORMAT( ' FOR BETA ',
385 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
386 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
387 $ /' ******* TESTS ABANDONED *******' )
388 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
389 $ 'ESTS ABANDONED *******' )
390 9989 FORMAT( ' ERROR IN CMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
391 $ 'ATED WRONGLY.', /' CMMCH WAS CALLED WITH TRANSA = ', A1,
392 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
393 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
394 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
396 9988 FORMAT( A6, L2 )
397 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' )
398 9986 FORMAT( /' END OF TESTS' )
399 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
400 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
405 SUBROUTINE CCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
406 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
407 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
411 * Auxiliary routine for test program for Level 3 Blas.
413 * -- Written on 8-February-1989.
414 * Jack Dongarra, Argonne National Laboratory.
415 * Iain Duff, AERE Harwell.
416 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
417 * Sven Hammarling, Numerical Algorithms Group Ltd.
421 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
423 PARAMETER ( RZERO = 0.0 )
424 * .. Scalar Arguments ..
426 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
427 LOGICAL FATAL, REWI, TRACE
429 * .. Array Arguments ..
430 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
431 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
432 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
433 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
434 $ CS( NMAX*NMAX ), CT( NMAX )
436 INTEGER IDIM( NIDIM )
437 * .. Local Scalars ..
438 COMPLEX ALPHA, ALS, BETA, BLS
440 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
441 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
442 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
443 LOGICAL NULL, RESET, SAME, TRANA, TRANB
444 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
448 * .. External Functions ..
451 * .. External Subroutines ..
452 EXTERNAL CGEMM, CMAKE, CMMCH
453 * .. Intrinsic Functions ..
455 * .. Scalars in Common ..
458 * .. Common blocks ..
459 COMMON /INFOC/INFOT, NOUTC, OK, LERR
460 * .. Data statements ..
462 * .. Executable Statements ..
474 * Set LDC to 1 more than minimum value if room.
478 * Skip tests if not enough room.
482 NULL = N.LE.0.OR.M.LE.0
488 TRANSA = ICH( ICA: ICA )
489 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
498 * Set LDA to 1 more than minimum value if room.
502 * Skip tests if not enough room.
507 * Generate the matrix A.
509 CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
513 TRANSB = ICH( ICB: ICB )
514 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
523 * Set LDB to 1 more than minimum value if room.
527 * Skip tests if not enough room.
532 * Generate the matrix B.
534 CALL CMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
543 * Generate the matrix C.
545 CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
546 $ CC, LDC, RESET, ZERO )
550 * Save every datum before calling the
573 * Call the subroutine.
576 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
577 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
581 CALL CGEMM( TRANSA, TRANSB, M, N, K, ALPHA,
582 $ AA, LDA, BB, LDB, BETA, CC, LDC )
584 * Check if error-exit was taken incorrectly.
587 WRITE( NOUT, FMT = 9994 )
592 * See what data changed inside subroutines.
594 ISAME( 1 ) = TRANSA.EQ.TRANAS
595 ISAME( 2 ) = TRANSB.EQ.TRANBS
599 ISAME( 6 ) = ALS.EQ.ALPHA
600 ISAME( 7 ) = LCE( AS, AA, LAA )
601 ISAME( 8 ) = LDAS.EQ.LDA
602 ISAME( 9 ) = LCE( BS, BB, LBB )
603 ISAME( 10 ) = LDBS.EQ.LDB
604 ISAME( 11 ) = BLS.EQ.BETA
606 ISAME( 12 ) = LCE( CS, CC, LCC )
608 ISAME( 12 ) = LCERES( 'GE', ' ', M, N, CS,
611 ISAME( 13 ) = LDCS.EQ.LDC
613 * If data was incorrectly changed, report
618 SAME = SAME.AND.ISAME( I )
619 IF( .NOT.ISAME( I ) )
620 $ WRITE( NOUT, FMT = 9998 )I
631 CALL CMMCH( TRANSA, TRANSB, M, N, K,
632 $ ALPHA, A, NMAX, B, NMAX, BETA,
633 $ C, NMAX, CT, G, CC, LDC, EPS,
634 $ ERR, FATAL, NOUT, .TRUE. )
635 ERRMAX = MAX( ERRMAX, ERR )
636 * If got really bad answer, report and
658 IF( ERRMAX.LT.THRESH )THEN
659 WRITE( NOUT, FMT = 9999 )SNAME, NC
661 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
666 WRITE( NOUT, FMT = 9996 )SNAME
667 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
668 $ ALPHA, LDA, LDB, BETA, LDC
673 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
675 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
676 $ 'ANGED INCORRECTLY *******' )
677 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
678 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
679 $ ' - SUSPECT *******' )
680 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
681 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',',
682 $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
683 $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
684 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
690 SUBROUTINE CCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
691 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
692 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
694 * Tests CHEMM and CSYMM.
696 * Auxiliary routine for test program for Level 3 Blas.
698 * -- Written on 8-February-1989.
699 * Jack Dongarra, Argonne National Laboratory.
700 * Iain Duff, AERE Harwell.
701 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
702 * Sven Hammarling, Numerical Algorithms Group Ltd.
706 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
708 PARAMETER ( RZERO = 0.0 )
709 * .. Scalar Arguments ..
711 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
712 LOGICAL FATAL, REWI, TRACE
714 * .. Array Arguments ..
715 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
716 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
717 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
718 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
719 $ CS( NMAX*NMAX ), CT( NMAX )
721 INTEGER IDIM( NIDIM )
722 * .. Local Scalars ..
723 COMPLEX ALPHA, ALS, BETA, BLS
725 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
726 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
728 LOGICAL CONJ, LEFT, NULL, RESET, SAME
729 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
730 CHARACTER*2 ICHS, ICHU
733 * .. External Functions ..
736 * .. External Subroutines ..
737 EXTERNAL CHEMM, CMAKE, CMMCH, CSYMM
738 * .. Intrinsic Functions ..
740 * .. Scalars in Common ..
743 * .. Common blocks ..
744 COMMON /INFOC/INFOT, NOUTC, OK, LERR
745 * .. Data statements ..
746 DATA ICHS/'LR'/, ICHU/'UL'/
747 * .. Executable Statements ..
748 CONJ = SNAME( 2: 3 ).EQ.'HE'
760 * Set LDC to 1 more than minimum value if room.
764 * Skip tests if not enough room.
768 NULL = N.LE.0.OR.M.LE.0
769 * Set LDB to 1 more than minimum value if room.
773 * Skip tests if not enough room.
778 * Generate the matrix B.
780 CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
784 SIDE = ICHS( ICS: ICS )
792 * Set LDA to 1 more than minimum value if room.
796 * Skip tests if not enough room.
802 UPLO = ICHU( ICU: ICU )
804 * Generate the hermitian or symmetric matrix A.
806 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
807 $ AA, LDA, RESET, ZERO )
815 * Generate the matrix C.
817 CALL CMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
822 * Save every datum before calling the
844 * Call the subroutine.
847 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
848 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
852 CALL CHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
853 $ BB, LDB, BETA, CC, LDC )
855 CALL CSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
856 $ BB, LDB, BETA, CC, LDC )
859 * Check if error-exit was taken incorrectly.
862 WRITE( NOUT, FMT = 9994 )
867 * See what data changed inside subroutines.
869 ISAME( 1 ) = SIDES.EQ.SIDE
870 ISAME( 2 ) = UPLOS.EQ.UPLO
873 ISAME( 5 ) = ALS.EQ.ALPHA
874 ISAME( 6 ) = LCE( AS, AA, LAA )
875 ISAME( 7 ) = LDAS.EQ.LDA
876 ISAME( 8 ) = LCE( BS, BB, LBB )
877 ISAME( 9 ) = LDBS.EQ.LDB
878 ISAME( 10 ) = BLS.EQ.BETA
880 ISAME( 11 ) = LCE( CS, CC, LCC )
882 ISAME( 11 ) = LCERES( 'GE', ' ', M, N, CS,
885 ISAME( 12 ) = LDCS.EQ.LDC
887 * If data was incorrectly changed, report and
892 SAME = SAME.AND.ISAME( I )
893 IF( .NOT.ISAME( I ) )
894 $ WRITE( NOUT, FMT = 9998 )I
906 CALL CMMCH( 'N', 'N', M, N, M, ALPHA, A,
907 $ NMAX, B, NMAX, BETA, C, NMAX,
908 $ CT, G, CC, LDC, EPS, ERR,
909 $ FATAL, NOUT, .TRUE. )
911 CALL CMMCH( 'N', 'N', M, N, N, ALPHA, B,
912 $ NMAX, A, NMAX, BETA, C, NMAX,
913 $ CT, G, CC, LDC, EPS, ERR,
914 $ FATAL, NOUT, .TRUE. )
916 ERRMAX = MAX( ERRMAX, ERR )
917 * If got really bad answer, report and
937 IF( ERRMAX.LT.THRESH )THEN
938 WRITE( NOUT, FMT = 9999 )SNAME, NC
940 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
945 WRITE( NOUT, FMT = 9996 )SNAME
946 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
952 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
954 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
955 $ 'ANGED INCORRECTLY *******' )
956 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
957 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
958 $ ' - SUSPECT *******' )
959 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
960 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
961 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
962 $ ',', F4.1, '), C,', I3, ') .' )
963 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
969 SUBROUTINE CCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
970 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
971 $ B, BB, BS, CT, G, C )
973 * Tests CTRMM and CTRSM.
975 * Auxiliary routine for test program for Level 3 Blas.
977 * -- Written on 8-February-1989.
978 * Jack Dongarra, Argonne National Laboratory.
979 * Iain Duff, AERE Harwell.
980 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
981 * Sven Hammarling, Numerical Algorithms Group Ltd.
985 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
987 PARAMETER ( RZERO = 0.0 )
988 * .. Scalar Arguments ..
990 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
991 LOGICAL FATAL, REWI, TRACE
993 * .. Array Arguments ..
994 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
995 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
996 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
997 $ C( NMAX, NMAX ), CT( NMAX )
999 INTEGER IDIM( NIDIM )
1000 * .. Local Scalars ..
1003 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
1004 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
1006 LOGICAL LEFT, NULL, RESET, SAME
1007 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
1009 CHARACTER*2 ICHD, ICHS, ICHU
1011 * .. Local Arrays ..
1013 * .. External Functions ..
1015 EXTERNAL LCE, LCERES
1016 * .. External Subroutines ..
1017 EXTERNAL CMAKE, CMMCH, CTRMM, CTRSM
1018 * .. Intrinsic Functions ..
1020 * .. Scalars in Common ..
1021 INTEGER INFOT, NOUTC
1023 * .. Common blocks ..
1024 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1025 * .. Data statements ..
1026 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
1027 * .. Executable Statements ..
1033 * Set up zero matrix for CMMCH.
1040 DO 140 IM = 1, NIDIM
1043 DO 130 IN = 1, NIDIM
1045 * Set LDB to 1 more than minimum value if room.
1049 * Skip tests if not enough room.
1053 NULL = M.LE.0.OR.N.LE.0
1056 SIDE = ICHS( ICS: ICS )
1063 * Set LDA to 1 more than minimum value if room.
1067 * Skip tests if not enough room.
1073 UPLO = ICHU( ICU: ICU )
1076 TRANSA = ICHT( ICT: ICT )
1079 DIAG = ICHD( ICD: ICD )
1084 * Generate the matrix A.
1086 CALL CMAKE( 'TR', UPLO, DIAG, NA, NA, A,
1087 $ NMAX, AA, LDA, RESET, ZERO )
1089 * Generate the matrix B.
1091 CALL CMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
1092 $ BB, LDB, RESET, ZERO )
1096 * Save every datum before calling the
1115 * Call the subroutine.
1117 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1119 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1120 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1124 CALL CTRMM( SIDE, UPLO, TRANSA, DIAG, M,
1125 $ N, ALPHA, AA, LDA, BB, LDB )
1126 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1128 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1129 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1133 CALL CTRSM( SIDE, UPLO, TRANSA, DIAG, M,
1134 $ N, ALPHA, AA, LDA, BB, LDB )
1137 * Check if error-exit was taken incorrectly.
1140 WRITE( NOUT, FMT = 9994 )
1145 * See what data changed inside subroutines.
1147 ISAME( 1 ) = SIDES.EQ.SIDE
1148 ISAME( 2 ) = UPLOS.EQ.UPLO
1149 ISAME( 3 ) = TRANAS.EQ.TRANSA
1150 ISAME( 4 ) = DIAGS.EQ.DIAG
1151 ISAME( 5 ) = MS.EQ.M
1152 ISAME( 6 ) = NS.EQ.N
1153 ISAME( 7 ) = ALS.EQ.ALPHA
1154 ISAME( 8 ) = LCE( AS, AA, LAA )
1155 ISAME( 9 ) = LDAS.EQ.LDA
1157 ISAME( 10 ) = LCE( BS, BB, LBB )
1159 ISAME( 10 ) = LCERES( 'GE', ' ', M, N, BS,
1162 ISAME( 11 ) = LDBS.EQ.LDB
1164 * If data was incorrectly changed, report and
1169 SAME = SAME.AND.ISAME( I )
1170 IF( .NOT.ISAME( I ) )
1171 $ WRITE( NOUT, FMT = 9998 )I
1179 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1184 CALL CMMCH( TRANSA, 'N', M, N, M,
1185 $ ALPHA, A, NMAX, B, NMAX,
1186 $ ZERO, C, NMAX, CT, G,
1187 $ BB, LDB, EPS, ERR,
1188 $ FATAL, NOUT, .TRUE. )
1190 CALL CMMCH( 'N', TRANSA, M, N, N,
1191 $ ALPHA, B, NMAX, A, NMAX,
1192 $ ZERO, C, NMAX, CT, G,
1193 $ BB, LDB, EPS, ERR,
1194 $ FATAL, NOUT, .TRUE. )
1196 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1198 * Compute approximation to original
1203 C( I, J ) = BB( I + ( J - 1 )*
1205 BB( I + ( J - 1 )*LDB ) = ALPHA*
1211 CALL CMMCH( TRANSA, 'N', M, N, M,
1212 $ ONE, A, NMAX, C, NMAX,
1213 $ ZERO, B, NMAX, CT, G,
1214 $ BB, LDB, EPS, ERR,
1215 $ FATAL, NOUT, .FALSE. )
1217 CALL CMMCH( 'N', TRANSA, M, N, N,
1218 $ ONE, C, NMAX, A, NMAX,
1219 $ ZERO, B, NMAX, CT, G,
1220 $ BB, LDB, EPS, ERR,
1221 $ FATAL, NOUT, .FALSE. )
1224 ERRMAX = MAX( ERRMAX, ERR )
1225 * If got really bad answer, report and
1247 IF( ERRMAX.LT.THRESH )THEN
1248 WRITE( NOUT, FMT = 9999 )SNAME, NC
1250 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1255 WRITE( NOUT, FMT = 9996 )SNAME
1256 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
1257 $ N, ALPHA, LDA, LDB
1262 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1264 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1265 $ 'ANGED INCORRECTLY *******' )
1266 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1267 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1268 $ ' - SUSPECT *******' )
1269 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1270 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
1271 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
1273 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1279 SUBROUTINE CCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1280 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1281 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
1283 * Tests CHERK and CSYRK.
1285 * Auxiliary routine for test program for Level 3 Blas.
1287 * -- Written on 8-February-1989.
1288 * Jack Dongarra, Argonne National Laboratory.
1289 * Iain Duff, AERE Harwell.
1290 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1291 * Sven Hammarling, Numerical Algorithms Group Ltd.
1295 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
1297 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
1298 * .. Scalar Arguments ..
1300 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1301 LOGICAL FATAL, REWI, TRACE
1303 * .. Array Arguments ..
1304 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1305 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1306 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1307 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1308 $ CS( NMAX*NMAX ), CT( NMAX )
1310 INTEGER IDIM( NIDIM )
1311 * .. Local Scalars ..
1312 COMPLEX ALPHA, ALS, BETA, BETS
1313 REAL ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1314 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1315 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1317 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1318 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1319 CHARACTER*2 ICHT, ICHU
1320 * .. Local Arrays ..
1322 * .. External Functions ..
1324 EXTERNAL LCE, LCERES
1325 * .. External Subroutines ..
1326 EXTERNAL CHERK, CMAKE, CMMCH, CSYRK
1327 * .. Intrinsic Functions ..
1328 INTRINSIC CMPLX, MAX, REAL
1329 * .. Scalars in Common ..
1330 INTEGER INFOT, NOUTC
1332 * .. Common blocks ..
1333 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1334 * .. Data statements ..
1335 DATA ICHT/'NC'/, ICHU/'UL'/
1336 * .. Executable Statements ..
1337 CONJ = SNAME( 2: 3 ).EQ.'HE'
1344 DO 100 IN = 1, NIDIM
1346 * Set LDC to 1 more than minimum value if room.
1350 * Skip tests if not enough room.
1359 TRANS = ICHT( ICT: ICT )
1361 IF( TRAN.AND..NOT.CONJ )
1370 * Set LDA to 1 more than minimum value if room.
1374 * Skip tests if not enough room.
1379 * Generate the matrix A.
1381 CALL CMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
1385 UPLO = ICHU( ICU: ICU )
1391 RALPHA = REAL( ALPHA )
1392 ALPHA = CMPLX( RALPHA, RZERO )
1398 RBETA = REAL( BETA )
1399 BETA = CMPLX( RBETA, RZERO )
1403 $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
1404 $ RZERO ).AND.RBETA.EQ.RONE )
1406 * Generate the matrix C.
1408 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1409 $ NMAX, CC, LDC, RESET, ZERO )
1413 * Save every datum before calling the subroutine.
1438 * Call the subroutine.
1442 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1443 $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
1446 CALL CHERK( UPLO, TRANS, N, K, RALPHA, AA,
1447 $ LDA, RBETA, CC, LDC )
1450 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1451 $ TRANS, N, K, ALPHA, LDA, BETA, LDC
1454 CALL CSYRK( UPLO, TRANS, N, K, ALPHA, AA,
1455 $ LDA, BETA, CC, LDC )
1458 * Check if error-exit was taken incorrectly.
1461 WRITE( NOUT, FMT = 9992 )
1466 * See what data changed inside subroutines.
1468 ISAME( 1 ) = UPLOS.EQ.UPLO
1469 ISAME( 2 ) = TRANSS.EQ.TRANS
1470 ISAME( 3 ) = NS.EQ.N
1471 ISAME( 4 ) = KS.EQ.K
1473 ISAME( 5 ) = RALS.EQ.RALPHA
1475 ISAME( 5 ) = ALS.EQ.ALPHA
1477 ISAME( 6 ) = LCE( AS, AA, LAA )
1478 ISAME( 7 ) = LDAS.EQ.LDA
1480 ISAME( 8 ) = RBETS.EQ.RBETA
1482 ISAME( 8 ) = BETS.EQ.BETA
1485 ISAME( 9 ) = LCE( CS, CC, LCC )
1487 ISAME( 9 ) = LCERES( SNAME( 2: 3 ), UPLO, N,
1490 ISAME( 10 ) = LDCS.EQ.LDC
1492 * If data was incorrectly changed, report and
1497 SAME = SAME.AND.ISAME( I )
1498 IF( .NOT.ISAME( I ) )
1499 $ WRITE( NOUT, FMT = 9998 )I
1508 * Check the result column by column.
1525 CALL CMMCH( TRANST, 'N', LJ, 1, K,
1526 $ ALPHA, A( 1, JJ ), NMAX,
1527 $ A( 1, J ), NMAX, BETA,
1528 $ C( JJ, J ), NMAX, CT, G,
1529 $ CC( JC ), LDC, EPS, ERR,
1530 $ FATAL, NOUT, .TRUE. )
1532 CALL CMMCH( 'N', TRANST, LJ, 1, K,
1533 $ ALPHA, A( JJ, 1 ), NMAX,
1534 $ A( J, 1 ), NMAX, BETA,
1535 $ C( JJ, J ), NMAX, CT, G,
1536 $ CC( JC ), LDC, EPS, ERR,
1537 $ FATAL, NOUT, .TRUE. )
1544 ERRMAX = MAX( ERRMAX, ERR )
1545 * If got really bad answer, report and
1566 IF( ERRMAX.LT.THRESH )THEN
1567 WRITE( NOUT, FMT = 9999 )SNAME, NC
1569 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1575 $ WRITE( NOUT, FMT = 9995 )J
1578 WRITE( NOUT, FMT = 9996 )SNAME
1580 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
1583 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1590 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1592 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1593 $ 'ANGED INCORRECTLY *******' )
1594 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1595 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1596 $ ' - SUSPECT *******' )
1597 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1598 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1599 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1600 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
1602 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1603 $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
1604 $ '), C,', I3, ') .' )
1605 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1611 SUBROUTINE CCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1612 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1613 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
1615 * Tests CHER2K and CSYR2K.
1617 * Auxiliary routine for test program for Level 3 Blas.
1619 * -- Written on 8-February-1989.
1620 * Jack Dongarra, Argonne National Laboratory.
1621 * Iain Duff, AERE Harwell.
1622 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1623 * Sven Hammarling, Numerical Algorithms Group Ltd.
1627 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
1629 PARAMETER ( RONE = 1.0, RZERO = 0.0 )
1630 * .. Scalar Arguments ..
1632 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1633 LOGICAL FATAL, REWI, TRACE
1635 * .. Array Arguments ..
1636 COMPLEX AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1637 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1638 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1639 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1642 INTEGER IDIM( NIDIM )
1643 * .. Local Scalars ..
1644 COMPLEX ALPHA, ALS, BETA, BETS
1645 REAL ERR, ERRMAX, RBETA, RBETS
1646 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1647 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1648 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1649 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1650 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1651 CHARACTER*2 ICHT, ICHU
1652 * .. Local Arrays ..
1654 * .. External Functions ..
1656 EXTERNAL LCE, LCERES
1657 * .. External Subroutines ..
1658 EXTERNAL CHER2K, CMAKE, CMMCH, CSYR2K
1659 * .. Intrinsic Functions ..
1660 INTRINSIC CMPLX, CONJG, MAX, REAL
1661 * .. Scalars in Common ..
1662 INTEGER INFOT, NOUTC
1664 * .. Common blocks ..
1665 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1666 * .. Data statements ..
1667 DATA ICHT/'NC'/, ICHU/'UL'/
1668 * .. Executable Statements ..
1669 CONJ = SNAME( 2: 3 ).EQ.'HE'
1676 DO 130 IN = 1, NIDIM
1678 * Set LDC to 1 more than minimum value if room.
1682 * Skip tests if not enough room.
1687 DO 120 IK = 1, NIDIM
1691 TRANS = ICHT( ICT: ICT )
1693 IF( TRAN.AND..NOT.CONJ )
1702 * Set LDA to 1 more than minimum value if room.
1706 * Skip tests if not enough room.
1711 * Generate the matrix A.
1714 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
1715 $ LDA, RESET, ZERO )
1717 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
1721 * Generate the matrix B.
1726 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
1727 $ 2*NMAX, BB, LDB, RESET, ZERO )
1729 CALL CMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
1730 $ NMAX, BB, LDB, RESET, ZERO )
1734 UPLO = ICHU( ICU: ICU )
1743 RBETA = REAL( BETA )
1744 BETA = CMPLX( RBETA, RZERO )
1748 $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
1749 $ ZERO ).AND.RBETA.EQ.RONE )
1751 * Generate the matrix C.
1753 CALL CMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1754 $ NMAX, CC, LDC, RESET, ZERO )
1758 * Save every datum before calling the subroutine.
1783 * Call the subroutine.
1787 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1788 $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
1791 CALL CHER2K( UPLO, TRANS, N, K, ALPHA, AA,
1792 $ LDA, BB, LDB, RBETA, CC, LDC )
1795 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1796 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
1799 CALL CSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
1800 $ LDA, BB, LDB, BETA, CC, LDC )
1803 * Check if error-exit was taken incorrectly.
1806 WRITE( NOUT, FMT = 9992 )
1811 * See what data changed inside subroutines.
1813 ISAME( 1 ) = UPLOS.EQ.UPLO
1814 ISAME( 2 ) = TRANSS.EQ.TRANS
1815 ISAME( 3 ) = NS.EQ.N
1816 ISAME( 4 ) = KS.EQ.K
1817 ISAME( 5 ) = ALS.EQ.ALPHA
1818 ISAME( 6 ) = LCE( AS, AA, LAA )
1819 ISAME( 7 ) = LDAS.EQ.LDA
1820 ISAME( 8 ) = LCE( BS, BB, LBB )
1821 ISAME( 9 ) = LDBS.EQ.LDB
1823 ISAME( 10 ) = RBETS.EQ.RBETA
1825 ISAME( 10 ) = BETS.EQ.BETA
1828 ISAME( 11 ) = LCE( CS, CC, LCC )
1830 ISAME( 11 ) = LCERES( 'HE', UPLO, N, N, CS,
1833 ISAME( 12 ) = LDCS.EQ.LDC
1835 * If data was incorrectly changed, report and
1840 SAME = SAME.AND.ISAME( I )
1841 IF( .NOT.ISAME( I ) )
1842 $ WRITE( NOUT, FMT = 9998 )I
1851 * Check the result column by column.
1870 W( I ) = ALPHA*AB( ( J - 1 )*2*
1873 W( K + I ) = CONJG( ALPHA )*
1882 CALL CMMCH( TRANST, 'N', LJ, 1, 2*K,
1883 $ ONE, AB( JJAB ), 2*NMAX, W,
1884 $ 2*NMAX, BETA, C( JJ, J ),
1885 $ NMAX, CT, G, CC( JC ), LDC,
1886 $ EPS, ERR, FATAL, NOUT,
1891 W( I ) = ALPHA*CONJG( AB( ( K +
1892 $ I - 1 )*NMAX + J ) )
1893 W( K + I ) = CONJG( ALPHA*
1894 $ AB( ( I - 1 )*NMAX +
1897 W( I ) = ALPHA*AB( ( K + I - 1 )*
1900 $ AB( ( I - 1 )*NMAX +
1904 CALL CMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
1905 $ AB( JJ ), NMAX, W, 2*NMAX,
1906 $ BETA, C( JJ, J ), NMAX, CT,
1907 $ G, CC( JC ), LDC, EPS, ERR,
1908 $ FATAL, NOUT, .TRUE. )
1915 $ JJAB = JJAB + 2*NMAX
1917 ERRMAX = MAX( ERRMAX, ERR )
1918 * If got really bad answer, report and
1939 IF( ERRMAX.LT.THRESH )THEN
1940 WRITE( NOUT, FMT = 9999 )SNAME, NC
1942 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1948 $ WRITE( NOUT, FMT = 9995 )J
1951 WRITE( NOUT, FMT = 9996 )SNAME
1953 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1954 $ LDA, LDB, RBETA, LDC
1956 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1957 $ LDA, LDB, BETA, LDC
1963 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1965 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1966 $ 'ANGED INCORRECTLY *******' )
1967 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1968 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1969 $ ' - SUSPECT *******' )
1970 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1971 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1972 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1973 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
1974 $ ', C,', I3, ') .' )
1975 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1976 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
1977 $ ',', F4.1, '), C,', I3, ') .' )
1978 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1984 SUBROUTINE CCHKE( ISNUM, SRNAMT, NOUT )
1986 * Tests the error exits from the Level 3 Blas.
1987 * Requires a special version of the error-handling routine XERBLA.
1988 * A, B and C should not need to be defined.
1990 * Auxiliary routine for test program for Level 3 Blas.
1992 * -- Written on 8-February-1989.
1993 * Jack Dongarra, Argonne National Laboratory.
1994 * Iain Duff, AERE Harwell.
1995 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1996 * Sven Hammarling, Numerical Algorithms Group Ltd.
1998 * 3-19-92: Initialize ALPHA, BETA, RALPHA, and RBETA (eca)
1999 * 3-19-92: Fix argument 12 in calls to CSYMM and CHEMM
2000 * with INFOT = 9 (eca)
2002 * .. Scalar Arguments ..
2005 * .. Scalars in Common ..
2006 INTEGER INFOT, NOUTC
2010 PARAMETER ( ONE = 1.0E0, TWO = 2.0E0 )
2011 * .. Local Scalars ..
2014 * .. Local Arrays ..
2015 COMPLEX A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
2016 * .. External Subroutines ..
2017 EXTERNAL CGEMM, CHEMM, CHER2K, CHERK, CHKXER, CSYMM,
2018 $ CSYR2K, CSYRK, CTRMM, CTRSM
2019 * .. Common blocks ..
2020 COMMON /INFOC/INFOT, NOUTC, OK, LERR
2021 * .. Executable Statements ..
2022 * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
2023 * if anything is wrong.
2025 * LERR is set to .TRUE. by the special version of XERBLA each time
2026 * it is called, and is then tested and re-set by CHKXER.
2029 * Initialize ALPHA, BETA, RALPHA, and RBETA.
2031 ALPHA = CMPLX( ONE, -ONE )
2032 BETA = CMPLX( TWO, -TWO )
2036 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
2039 CALL CGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2040 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2042 CALL CGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2043 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2045 CALL CGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2046 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2048 CALL CGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2049 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2051 CALL CGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2052 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2054 CALL CGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2055 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2057 CALL CGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2058 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2060 CALL CGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2061 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2063 CALL CGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2064 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2066 CALL CGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2067 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2069 CALL CGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2070 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2072 CALL CGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2073 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2075 CALL CGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2076 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2078 CALL CGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2079 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2081 CALL CGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2082 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2084 CALL CGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2085 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2087 CALL CGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2088 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2090 CALL CGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2091 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2093 CALL CGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2094 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2096 CALL CGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2097 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2099 CALL CGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2100 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2102 CALL CGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2103 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2105 CALL CGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2106 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2108 CALL CGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2109 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2111 CALL CGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2112 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2114 CALL CGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2115 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2117 CALL CGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2118 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2120 CALL CGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2121 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2123 CALL CGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2124 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2126 CALL CGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2127 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2129 CALL CGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2130 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2132 CALL CGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2133 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2135 CALL CGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2136 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2138 CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2139 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2141 CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2142 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2144 CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2145 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2147 CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2148 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2150 CALL CGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2151 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2153 CALL CGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2154 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2156 CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2157 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2159 CALL CGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2160 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2162 CALL CGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2163 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2165 CALL CGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2166 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2168 CALL CGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2169 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2171 CALL CGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2172 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2174 CALL CGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2175 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2177 CALL CGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2178 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2180 CALL CGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2181 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2183 CALL CGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2184 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2186 CALL CGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2187 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2189 CALL CGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2190 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2192 CALL CGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2193 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2195 CALL CGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2196 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2198 CALL CGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2199 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2201 CALL CGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2202 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2204 CALL CGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2205 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2207 CALL CGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2208 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2210 CALL CGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2211 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2213 CALL CGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2214 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2216 CALL CGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2217 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2220 CALL CHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2221 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2223 CALL CHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2224 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2226 CALL CHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2227 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2229 CALL CHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2230 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2232 CALL CHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2233 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2235 CALL CHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2236 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2238 CALL CHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2239 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2241 CALL CHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2242 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2244 CALL CHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2245 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2247 CALL CHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2248 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2250 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2251 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2253 CALL CHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2254 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2256 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2257 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2259 CALL CHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2260 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2262 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2263 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2265 CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2266 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2268 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2269 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2271 CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2272 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2274 CALL CHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2275 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2277 CALL CHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2278 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2280 CALL CHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2281 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2283 CALL CHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2284 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2287 CALL CSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2288 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2290 CALL CSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2291 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2293 CALL CSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2294 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2296 CALL CSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2297 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2299 CALL CSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2300 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2302 CALL CSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2303 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2305 CALL CSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2306 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2308 CALL CSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2309 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2311 CALL CSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2312 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2314 CALL CSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2315 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2317 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2318 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2320 CALL CSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2321 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2323 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2324 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2326 CALL CSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2327 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2329 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2330 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2332 CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2333 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2335 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2336 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2338 CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2339 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2341 CALL CSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2342 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2344 CALL CSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2345 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2347 CALL CSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2348 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2350 CALL CSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2351 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2354 CALL CTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2355 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2357 CALL CTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2358 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2360 CALL CTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2361 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2363 CALL CTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2364 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2366 CALL CTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2367 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2369 CALL CTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2370 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2372 CALL CTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2373 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2375 CALL CTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2376 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2378 CALL CTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2379 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2381 CALL CTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2382 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2384 CALL CTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2385 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2387 CALL CTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2388 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2390 CALL CTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2391 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2393 CALL CTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2394 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2396 CALL CTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2397 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2399 CALL CTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2400 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2402 CALL CTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2403 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2405 CALL CTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2406 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2408 CALL CTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2409 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2411 CALL CTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2412 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2414 CALL CTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2415 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2417 CALL CTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2418 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2420 CALL CTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2421 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2423 CALL CTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2424 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2426 CALL CTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2427 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2429 CALL CTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2430 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2432 CALL CTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2433 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2435 CALL CTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2436 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2438 CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2439 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2441 CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2442 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2444 CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2445 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2447 CALL CTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2448 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2450 CALL CTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2451 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2453 CALL CTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2454 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2456 CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2457 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2459 CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2460 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2462 CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2463 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2465 CALL CTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2466 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2468 CALL CTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2469 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2471 CALL CTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2472 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2474 CALL CTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2475 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2477 CALL CTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2478 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2480 CALL CTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2481 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2483 CALL CTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2484 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2486 CALL CTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2487 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2489 CALL CTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2490 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2492 CALL CTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2493 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2495 CALL CTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2496 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2498 CALL CTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2499 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2501 CALL CTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2502 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2504 CALL CTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2505 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2507 CALL CTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2508 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2511 CALL CTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2512 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2514 CALL CTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2515 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2517 CALL CTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2518 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2520 CALL CTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2521 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2523 CALL CTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2524 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2526 CALL CTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2527 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2529 CALL CTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2530 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2532 CALL CTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2533 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2535 CALL CTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2536 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2538 CALL CTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2539 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2541 CALL CTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2542 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2544 CALL CTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2545 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2547 CALL CTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2548 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2550 CALL CTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2551 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2553 CALL CTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2554 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2556 CALL CTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2557 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2559 CALL CTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2560 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2562 CALL CTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2563 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2565 CALL CTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2566 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2568 CALL CTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2569 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2571 CALL CTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2572 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2574 CALL CTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2575 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2577 CALL CTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2578 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2580 CALL CTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2581 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2583 CALL CTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2584 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2586 CALL CTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2587 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2589 CALL CTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2590 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2592 CALL CTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2593 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2595 CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2596 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2598 CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2599 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2601 CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2602 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2604 CALL CTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2605 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2607 CALL CTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2608 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2610 CALL CTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2611 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2613 CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2614 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2616 CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2617 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2619 CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2620 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2622 CALL CTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2623 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2625 CALL CTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2626 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2628 CALL CTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2629 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2631 CALL CTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2632 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2634 CALL CTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2635 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2637 CALL CTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2638 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2640 CALL CTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2641 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2643 CALL CTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2644 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2646 CALL CTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2647 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2649 CALL CTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2650 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2652 CALL CTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2653 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2655 CALL CTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2656 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2658 CALL CTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2659 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2661 CALL CTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2662 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2664 CALL CTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2665 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2668 CALL CHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2669 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2671 CALL CHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2672 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2674 CALL CHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2675 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2677 CALL CHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2678 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2680 CALL CHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2681 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2683 CALL CHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2684 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2686 CALL CHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2687 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2689 CALL CHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2690 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2692 CALL CHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2693 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2695 CALL CHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2696 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2698 CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2699 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2701 CALL CHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2702 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2704 CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2705 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2707 CALL CHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2708 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2710 CALL CHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2711 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2713 CALL CHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2714 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2716 CALL CHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2717 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2719 CALL CHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2720 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2723 CALL CSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2724 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2726 CALL CSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2727 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2729 CALL CSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2730 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2732 CALL CSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2733 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2735 CALL CSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2736 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2738 CALL CSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2739 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2741 CALL CSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2742 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2744 CALL CSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2745 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2747 CALL CSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2748 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2750 CALL CSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2751 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2753 CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2754 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2756 CALL CSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2757 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2759 CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2760 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2762 CALL CSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2763 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2765 CALL CSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2766 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2768 CALL CSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2769 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2771 CALL CSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2772 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2774 CALL CSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2775 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2778 CALL CHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2779 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2781 CALL CHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2782 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2784 CALL CHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2785 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2787 CALL CHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2788 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2790 CALL CHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2791 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2793 CALL CHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2794 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2796 CALL CHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2797 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2799 CALL CHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2800 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2802 CALL CHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2803 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2805 CALL CHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2806 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2808 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2809 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2811 CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2812 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2814 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2815 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2817 CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2818 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2820 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2821 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2823 CALL CHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2824 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2826 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2827 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2829 CALL CHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2830 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2832 CALL CHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2833 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2835 CALL CHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2836 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2838 CALL CHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2839 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2841 CALL CHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2842 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2845 CALL CSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2846 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2848 CALL CSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2849 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2851 CALL CSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2852 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2854 CALL CSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2855 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2857 CALL CSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2858 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2860 CALL CSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2861 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2863 CALL CSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2864 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2866 CALL CSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2867 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2869 CALL CSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2870 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2872 CALL CSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2873 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2875 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2876 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2878 CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2879 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2881 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2882 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2884 CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2885 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2887 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2888 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2890 CALL CSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2891 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2893 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2894 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2896 CALL CSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2897 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2899 CALL CSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2900 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2902 CALL CSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2903 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2905 CALL CSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2906 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2908 CALL CSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2909 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2912 WRITE( NOUT, FMT = 9999 )SRNAMT
2914 WRITE( NOUT, FMT = 9998 )SRNAMT
2918 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2919 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2925 SUBROUTINE CMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2928 * Generates values for an M by N matrix A.
2929 * Stores the values in the array AA in the data structure required
2930 * by the routine, with unwanted elements set to rogue value.
2932 * TYPE is 'GE', 'HE', 'SY' or 'TR'.
2934 * Auxiliary routine for test program for Level 3 Blas.
2936 * -- Written on 8-February-1989.
2937 * Jack Dongarra, Argonne National Laboratory.
2938 * Iain Duff, AERE Harwell.
2939 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2940 * Sven Hammarling, Numerical Algorithms Group Ltd.
2944 PARAMETER ( ZERO = ( 0.0, 0.0 ), ONE = ( 1.0, 0.0 ) )
2946 PARAMETER ( ROGUE = ( -1.0E10, 1.0E10 ) )
2948 PARAMETER ( RZERO = 0.0 )
2950 PARAMETER ( RROGUE = -1.0E10 )
2951 * .. Scalar Arguments ..
2953 INTEGER LDA, M, N, NMAX
2955 CHARACTER*1 DIAG, UPLO
2957 * .. Array Arguments ..
2958 COMPLEX A( NMAX, * ), AA( * )
2959 * .. Local Scalars ..
2960 INTEGER I, IBEG, IEND, J, JJ
2961 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2962 * .. External Functions ..
2965 * .. Intrinsic Functions ..
2966 INTRINSIC CMPLX, CONJG, REAL
2967 * .. Executable Statements ..
2972 UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
2973 LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
2974 UNIT = TRI.AND.DIAG.EQ.'U'
2976 * Generate data in array A.
2980 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2982 A( I, J ) = CBEG( RESET ) + TRANSL
2984 * Set some elements to zero
2985 IF( N.GT.3.AND.J.EQ.N/2 )
2988 A( J, I ) = CONJG( A( I, J ) )
2990 A( J, I ) = A( I, J )
2998 $ A( J, J ) = CMPLX( REAL( A( J, J ) ), RZERO )
3000 $ A( J, J ) = A( J, J ) + ONE
3005 * Store elements in array AS in data structure required by routine.
3007 IF( TYPE.EQ.'GE' )THEN
3010 AA( I + ( J - 1 )*LDA ) = A( I, J )
3012 DO 40 I = M + 1, LDA
3013 AA( I + ( J - 1 )*LDA ) = ROGUE
3016 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
3033 DO 60 I = 1, IBEG - 1
3034 AA( I + ( J - 1 )*LDA ) = ROGUE
3036 DO 70 I = IBEG, IEND
3037 AA( I + ( J - 1 )*LDA ) = A( I, J )
3039 DO 80 I = IEND + 1, LDA
3040 AA( I + ( J - 1 )*LDA ) = ROGUE
3043 JJ = J + ( J - 1 )*LDA
3044 AA( JJ ) = CMPLX( REAL( AA( JJ ) ), RROGUE )
3053 SUBROUTINE CMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
3054 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
3057 * Checks the results of the computational tests.
3059 * Auxiliary routine for test program for Level 3 Blas.
3061 * -- Written on 8-February-1989.
3062 * Jack Dongarra, Argonne National Laboratory.
3063 * Iain Duff, AERE Harwell.
3064 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3065 * Sven Hammarling, Numerical Algorithms Group Ltd.
3069 PARAMETER ( ZERO = ( 0.0, 0.0 ) )
3071 PARAMETER ( RZERO = 0.0, RONE = 1.0 )
3072 * .. Scalar Arguments ..
3075 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
3077 CHARACTER*1 TRANSA, TRANSB
3078 * .. Array Arguments ..
3079 COMPLEX A( LDA, * ), B( LDB, * ), C( LDC, * ),
3080 $ CC( LDCC, * ), CT( * )
3082 * .. Local Scalars ..
3086 LOGICAL CTRANA, CTRANB, TRANA, TRANB
3087 * .. Intrinsic Functions ..
3088 INTRINSIC ABS, AIMAG, CONJG, MAX, REAL, SQRT
3089 * .. Statement Functions ..
3091 * .. Statement Function definitions ..
3092 ABS1( CL ) = ABS( REAL( CL ) ) + ABS( AIMAG( CL ) )
3093 * .. Executable Statements ..
3094 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
3095 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
3096 CTRANA = TRANSA.EQ.'C'
3097 CTRANB = TRANSB.EQ.'C'
3099 * Compute expected result, one column at a time, in CT using data
3101 * Compute gauges in G.
3109 IF( .NOT.TRANA.AND..NOT.TRANB )THEN
3112 CT( I ) = CT( I ) + A( I, K )*B( K, J )
3113 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
3116 ELSE IF( TRANA.AND..NOT.TRANB )THEN
3120 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( K, J )
3121 G( I ) = G( I ) + ABS1( A( K, I ) )*
3128 CT( I ) = CT( I ) + A( K, I )*B( K, J )
3129 G( I ) = G( I ) + ABS1( A( K, I ) )*
3134 ELSE IF( .NOT.TRANA.AND.TRANB )THEN
3138 CT( I ) = CT( I ) + A( I, K )*CONJG( B( J, K ) )
3139 G( I ) = G( I ) + ABS1( A( I, K ) )*
3146 CT( I ) = CT( I ) + A( I, K )*B( J, K )
3147 G( I ) = G( I ) + ABS1( A( I, K ) )*
3152 ELSE IF( TRANA.AND.TRANB )THEN
3157 CT( I ) = CT( I ) + CONJG( A( K, I ) )*
3158 $ CONJG( B( J, K ) )
3159 G( I ) = G( I ) + ABS1( A( K, I ) )*
3166 CT( I ) = CT( I ) + CONJG( A( K, I ) )*B( J, K )
3167 G( I ) = G( I ) + ABS1( A( K, I ) )*
3176 CT( I ) = CT( I ) + A( K, I )*CONJG( B( J, K ) )
3177 G( I ) = G( I ) + ABS1( A( K, I ) )*
3184 CT( I ) = CT( I ) + A( K, I )*B( J, K )
3185 G( I ) = G( I ) + ABS1( A( K, I ) )*
3193 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
3194 G( I ) = ABS1( ALPHA )*G( I ) +
3195 $ ABS1( BETA )*ABS1( C( I, J ) )
3198 * Compute the error ratio for this result.
3202 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
3203 IF( G( I ).NE.RZERO )
3204 $ ERRI = ERRI/G( I )
3205 ERR = MAX( ERR, ERRI )
3206 IF( ERR*SQRT( EPS ).GE.RONE )
3212 * If the loop completes, all results are at least half accurate.
3215 * Report fatal error.
3218 WRITE( NOUT, FMT = 9999 )
3221 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
3223 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
3227 $ WRITE( NOUT, FMT = 9997 )J
3232 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3233 $ 'F ACCURATE *******', /' EXPECTED RE',
3234 $ 'SULT COMPUTED RESULT' )
3235 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
3236 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
3241 LOGICAL FUNCTION LCE( RI, RJ, LR )
3243 * Tests if two arrays are identical.
3245 * Auxiliary routine for test program for Level 3 Blas.
3247 * -- Written on 8-February-1989.
3248 * Jack Dongarra, Argonne National Laboratory.
3249 * Iain Duff, AERE Harwell.
3250 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3251 * Sven Hammarling, Numerical Algorithms Group Ltd.
3253 * .. Scalar Arguments ..
3255 * .. Array Arguments ..
3256 COMPLEX RI( * ), RJ( * )
3257 * .. Local Scalars ..
3259 * .. Executable Statements ..
3261 IF( RI( I ).NE.RJ( I ) )
3273 LOGICAL FUNCTION LCERES( TYPE, UPLO, M, N, AA, AS, LDA )
3275 * Tests if selected elements in two arrays are equal.
3277 * TYPE is 'GE' or 'HE' or 'SY'.
3279 * Auxiliary routine for test program for Level 3 Blas.
3281 * -- Written on 8-February-1989.
3282 * Jack Dongarra, Argonne National Laboratory.
3283 * Iain Duff, AERE Harwell.
3284 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3285 * Sven Hammarling, Numerical Algorithms Group Ltd.
3287 * .. Scalar Arguments ..
3291 * .. Array Arguments ..
3292 COMPLEX AA( LDA, * ), AS( LDA, * )
3293 * .. Local Scalars ..
3294 INTEGER I, IBEG, IEND, J
3296 * .. Executable Statements ..
3298 IF( TYPE.EQ.'GE' )THEN
3300 DO 10 I = M + 1, LDA
3301 IF( AA( I, J ).NE.AS( I, J ) )
3305 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
3314 DO 30 I = 1, IBEG - 1
3315 IF( AA( I, J ).NE.AS( I, J ) )
3318 DO 40 I = IEND + 1, LDA
3319 IF( AA( I, J ).NE.AS( I, J ) )
3334 COMPLEX FUNCTION CBEG( RESET )
3336 * Generates complex numbers as pairs of random numbers uniformly
3337 * distributed between -0.5 and 0.5.
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 * .. Local Scalars ..
3350 INTEGER I, IC, J, MI, MJ
3351 * .. Save statement ..
3352 SAVE I, IC, J, MI, MJ
3353 * .. Intrinsic Functions ..
3355 * .. Executable Statements ..
3357 * Initialize local variables.
3366 * The sequence of values of I or J is bounded between 1 and 999.
3367 * If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
3368 * If initial I or J = 4 or 8, the period will be 25.
3369 * If initial I or J = 5, the period will be 10.
3370 * IC is used to break up the period by skipping 1 value of I or J
3376 I = I - 1000*( I/1000 )
3377 J = J - 1000*( J/1000 )
3382 CBEG = CMPLX( ( I - 500 )/1001.0, ( J - 500 )/1001.0 )
3388 REAL FUNCTION SDIFF( X, Y )
3390 * Auxiliary routine for test program for Level 3 Blas.
3392 * -- Written on 8-February-1989.
3393 * Jack Dongarra, Argonne National Laboratory.
3394 * Iain Duff, AERE Harwell.
3395 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3396 * Sven Hammarling, Numerical Algorithms Group Ltd.
3398 * .. Scalar Arguments ..
3400 * .. Executable Statements ..
3407 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3409 * Tests whether XERBLA has detected an error when it should.
3411 * Auxiliary routine for test program for Level 3 Blas.
3413 * -- Written on 8-February-1989.
3414 * Jack Dongarra, Argonne National Laboratory.
3415 * Iain Duff, AERE Harwell.
3416 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3417 * Sven Hammarling, Numerical Algorithms Group Ltd.
3419 * .. Scalar Arguments ..
3423 * .. Executable Statements ..
3425 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3431 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3432 $ 'ETECTED BY ', A6, ' *****' )
3437 SUBROUTINE XERBLA( SRNAME, INFO )
3439 * This is a special version of XERBLA to be used only as part of
3440 * the test program for testing error exits from the Level 3 BLAS
3443 * XERBLA is an error handler for the Level 3 BLAS routines.
3445 * It is called by the Level 3 BLAS routines if an input parameter is
3448 * Auxiliary routine for test program for Level 3 Blas.
3450 * -- Written on 8-February-1989.
3451 * Jack Dongarra, Argonne National Laboratory.
3452 * Iain Duff, AERE Harwell.
3453 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3454 * Sven Hammarling, Numerical Algorithms Group Ltd.
3456 * .. Scalar Arguments ..
3459 * .. Scalars in Common ..
3463 * .. Common blocks ..
3464 COMMON /INFOC/INFOT, NOUT, OK, LERR
3465 COMMON /SRNAMC/SRNAMT
3466 * .. Executable Statements ..
3468 IF( INFO.NE.INFOT )THEN
3469 IF( INFOT.NE.0 )THEN
3470 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3472 WRITE( NOUT, FMT = 9997 )INFO
3476 IF( SRNAME.NE.SRNAMT )THEN
3477 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3482 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
3483 $ ' OF ', I2, ' *******' )
3484 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
3485 $ 'AD OF ', A6, ' *******' )
3486 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,