3 * Test program for the COMPLEX*16 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 * 'ZBLAT3.SUMM' NAME OF SUMMARY OUTPUT FILE
11 * 6 UNIT NUMBER OF SUMMARY FILE
12 * 'ZBLAT3.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 * ZGEMM T PUT F FOR NO TEST. SAME COLUMNS.
25 * ZHEMM T PUT F FOR NO TEST. SAME COLUMNS.
26 * ZSYMM T PUT F FOR NO TEST. SAME COLUMNS.
27 * ZTRMM T PUT F FOR NO TEST. SAME COLUMNS.
28 * ZTRSM T PUT F FOR NO TEST. SAME COLUMNS.
29 * ZHERK T PUT F FOR NO TEST. SAME COLUMNS.
30 * ZSYRK T PUT F FOR NO TEST. SAME COLUMNS.
31 * ZHER2K T PUT F FOR NO TEST. SAME COLUMNS.
32 * ZSYR2K 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.0D0, 0.0D0 ),
56 $ ONE = ( 1.0D0, 0.0D0 ) )
57 DOUBLE PRECISION RZERO, RHALF, RONE
58 PARAMETER ( RZERO = 0.0D0, RHALF = 0.5D0, RONE = 1.0D0 )
60 PARAMETER ( NMAX = 65 )
61 INTEGER NIDMAX, NALMAX, NBEMAX
62 PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 )
64 DOUBLE PRECISION EPS, ERR, THRESH
65 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA
66 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
68 CHARACTER*1 TRANSA, TRANSB
70 CHARACTER*32 SNAPS, SUMMRY
72 COMPLEX*16 AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ),
73 $ ALF( NALMAX ), AS( NMAX*NMAX ),
74 $ BB( NMAX*NMAX ), BET( NBEMAX ),
75 $ BS( NMAX*NMAX ), C( NMAX, NMAX ),
76 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
78 DOUBLE PRECISION G( NMAX )
79 INTEGER IDIM( NIDMAX )
80 LOGICAL LTEST( NSUBS )
81 CHARACTER*6 SNAMES( NSUBS )
82 * .. External Functions ..
83 DOUBLE PRECISION DDIFF
86 * .. External Subroutines ..
87 EXTERNAL ZCHK1, ZCHK2, ZCHK3, ZCHK4, ZCHK5, ZCHKE, ZMMCH
88 * .. Intrinsic Functions ..
90 * .. Scalars in Common ..
95 COMMON /INFOC/INFOT, NOUTC, OK, LERR
97 * .. Data statements ..
98 DATA SNAMES/'ZGEMM ', 'ZHEMM ', 'ZSYMM ', 'ZTRMM ',
99 $ 'ZTRSM ', 'ZHERK ', 'ZSYRK ', 'ZHER2K',
101 * .. Executable Statements ..
103 * Read name and unit number for summary output file and open file.
105 READ( NIN, FMT = * )SUMMRY
106 READ( NIN, FMT = * )NOUT
107 OPEN( NOUT, FILE = SUMMRY, STATUS = 'NEW' )
110 * Read name and unit number for snapshot output file and open file.
112 READ( NIN, FMT = * )SNAPS
113 READ( NIN, FMT = * )NTRA
116 OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' )
118 * Read the flag that directs rewinding of the snapshot file.
119 READ( NIN, FMT = * )REWI
120 REWI = REWI.AND.TRACE
121 * Read the flag that directs stopping on any failure.
122 READ( NIN, FMT = * )SFATAL
123 * Read the flag that indicates whether error exits are to be tested.
124 READ( NIN, FMT = * )TSTERR
125 * Read the threshold value of the test ratio
126 READ( NIN, FMT = * )THRESH
128 * Read and check the parameter values for the tests.
131 READ( NIN, FMT = * )NIDIM
132 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
133 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
136 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
138 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
139 WRITE( NOUT, FMT = 9996 )NMAX
144 READ( NIN, FMT = * )NALF
145 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
146 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
149 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
151 READ( NIN, FMT = * )NBET
152 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
153 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
156 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
158 * Report values of parameters.
160 WRITE( NOUT, FMT = 9995 )
161 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
162 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
163 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
164 IF( .NOT.TSTERR )THEN
165 WRITE( NOUT, FMT = * )
166 WRITE( NOUT, FMT = 9984 )
168 WRITE( NOUT, FMT = * )
169 WRITE( NOUT, FMT = 9999 )THRESH
170 WRITE( NOUT, FMT = * )
172 * Read names of subroutines and flags which indicate
173 * whether they are to be tested.
178 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
180 IF( SNAMET.EQ.SNAMES( I ) )
183 WRITE( NOUT, FMT = 9990 )SNAMET
185 50 LTEST( I ) = LTESTT
191 * Compute EPS (the machine precision).
195 IF( DDIFF( RONE + EPS, RONE ).EQ.RZERO )
201 WRITE( NOUT, FMT = 9998 )EPS
203 * Check the reliability of ZMMCH using exact data.
208 AB( I, J ) = MAX( I - J + 1, 0 )
210 AB( J, NMAX + 1 ) = J
211 AB( 1, NMAX + J ) = J
215 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
217 * CC holds the exact result. On exit from ZMMCH CT holds
218 * the result computed by ZMMCH.
221 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
222 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
223 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
224 SAME = LZE( CC, CT, N )
225 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
226 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
230 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
231 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
232 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
233 SAME = LZE( CC, CT, N )
234 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
235 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
239 AB( J, NMAX + 1 ) = N - J + 1
240 AB( 1, NMAX + J ) = N - J + 1
243 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
244 $ ( ( J + 1 )*J*( J - 1 ) )/3
248 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
249 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
250 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
251 SAME = LZE( CC, CT, N )
252 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
253 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
257 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
258 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
259 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
260 SAME = LZE( CC, CT, N )
261 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
262 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
266 * Test each subroutine in turn.
268 DO 200 ISNUM = 1, NSUBS
269 WRITE( NOUT, FMT = * )
270 IF( .NOT.LTEST( ISNUM ) )THEN
271 * Subprogram is not to be tested.
272 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
274 SRNAMT = SNAMES( ISNUM )
277 CALL ZCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
278 WRITE( NOUT, FMT = * )
284 GO TO ( 140, 150, 150, 160, 160, 170, 170,
287 140 CALL ZCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
288 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
289 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
292 * Test ZHEMM, 02, ZSYMM, 03.
293 150 CALL ZCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
294 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
295 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
298 * Test ZTRMM, 04, ZTRSM, 05.
299 160 CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
300 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
301 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
303 * Test ZHERK, 06, ZSYRK, 07.
304 170 CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
305 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
306 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
309 * Test ZHER2K, 08, ZSYR2K, 09.
310 180 CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
311 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
312 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
315 190 IF( FATAL.AND.SFATAL )
319 WRITE( NOUT, FMT = 9986 )
323 WRITE( NOUT, FMT = 9985 )
327 WRITE( NOUT, FMT = 9991 )
335 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
337 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, D9.1 )
338 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
340 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
341 9995 FORMAT( ' TESTS OF THE COMPLEX*16 LEVEL 3 BLAS', //' THE F',
342 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
343 9994 FORMAT( ' FOR N ', 9I6 )
344 9993 FORMAT( ' FOR ALPHA ',
345 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
346 9992 FORMAT( ' FOR BETA ',
347 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
348 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
349 $ /' ******* TESTS ABANDONED *******' )
350 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
351 $ 'ESTS ABANDONED *******' )
352 9989 FORMAT( ' ERROR IN ZMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
353 $ 'ATED WRONGLY.', /' ZMMCH WAS CALLED WITH TRANSA = ', A1,
354 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
355 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
356 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
358 9988 FORMAT( A6, L2 )
359 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' )
360 9986 FORMAT( /' END OF TESTS' )
361 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
362 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
367 SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
368 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
369 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
373 * Auxiliary routine for test program for Level 3 Blas.
375 * -- Written on 8-February-1989.
376 * Jack Dongarra, Argonne National Laboratory.
377 * Iain Duff, AERE Harwell.
378 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
379 * Sven Hammarling, Numerical Algorithms Group Ltd.
383 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
384 DOUBLE PRECISION RZERO
385 PARAMETER ( RZERO = 0.0D0 )
386 * .. Scalar Arguments ..
387 DOUBLE PRECISION EPS, THRESH
388 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
389 LOGICAL FATAL, REWI, TRACE
391 * .. Array Arguments ..
392 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
393 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
394 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
395 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
396 $ CS( NMAX*NMAX ), CT( NMAX )
397 DOUBLE PRECISION G( NMAX )
398 INTEGER IDIM( NIDIM )
399 * .. Local Scalars ..
400 COMPLEX*16 ALPHA, ALS, BETA, BLS
401 DOUBLE PRECISION ERR, ERRMAX
402 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
403 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
404 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
405 LOGICAL NULL, RESET, SAME, TRANA, TRANB
406 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
410 * .. External Functions ..
413 * .. External Subroutines ..
414 EXTERNAL ZGEMM, ZMAKE, ZMMCH
415 * .. Intrinsic Functions ..
417 * .. Scalars in Common ..
420 * .. Common blocks ..
421 COMMON /INFOC/INFOT, NOUTC, OK, LERR
422 * .. Data statements ..
424 * .. Executable Statements ..
436 * Set LDC to 1 more than minimum value if room.
440 * Skip tests if not enough room.
444 NULL = N.LE.0.OR.M.LE.0
450 TRANSA = ICH( ICA: ICA )
451 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
460 * Set LDA to 1 more than minimum value if room.
464 * Skip tests if not enough room.
469 * Generate the matrix A.
471 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
475 TRANSB = ICH( ICB: ICB )
476 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
485 * Set LDB to 1 more than minimum value if room.
489 * Skip tests if not enough room.
494 * Generate the matrix B.
496 CALL ZMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
505 * Generate the matrix C.
507 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
508 $ CC, LDC, RESET, ZERO )
512 * Save every datum before calling the
535 * Call the subroutine.
538 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
539 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
543 CALL ZGEMM( TRANSA, TRANSB, M, N, K, ALPHA,
544 $ AA, LDA, BB, LDB, BETA, CC, LDC )
546 * Check if error-exit was taken incorrectly.
549 WRITE( NOUT, FMT = 9994 )
554 * See what data changed inside subroutines.
556 ISAME( 1 ) = TRANSA.EQ.TRANAS
557 ISAME( 2 ) = TRANSB.EQ.TRANBS
561 ISAME( 6 ) = ALS.EQ.ALPHA
562 ISAME( 7 ) = LZE( AS, AA, LAA )
563 ISAME( 8 ) = LDAS.EQ.LDA
564 ISAME( 9 ) = LZE( BS, BB, LBB )
565 ISAME( 10 ) = LDBS.EQ.LDB
566 ISAME( 11 ) = BLS.EQ.BETA
568 ISAME( 12 ) = LZE( CS, CC, LCC )
570 ISAME( 12 ) = LZERES( 'GE', ' ', M, N, CS,
573 ISAME( 13 ) = LDCS.EQ.LDC
575 * If data was incorrectly changed, report
580 SAME = SAME.AND.ISAME( I )
581 IF( .NOT.ISAME( I ) )
582 $ WRITE( NOUT, FMT = 9998 )I
593 CALL ZMMCH( TRANSA, TRANSB, M, N, K,
594 $ ALPHA, A, NMAX, B, NMAX, BETA,
595 $ C, NMAX, CT, G, CC, LDC, EPS,
596 $ ERR, FATAL, NOUT, .TRUE. )
597 ERRMAX = MAX( ERRMAX, ERR )
598 * If got really bad answer, report and
620 IF( ERRMAX.LT.THRESH )THEN
621 WRITE( NOUT, FMT = 9999 )SNAME, NC
623 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
628 WRITE( NOUT, FMT = 9996 )SNAME
629 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
630 $ ALPHA, LDA, LDB, BETA, LDC
635 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
637 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
638 $ 'ANGED INCORRECTLY *******' )
639 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
640 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
641 $ ' - SUSPECT *******' )
642 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
643 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',',
644 $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
645 $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
646 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
652 SUBROUTINE ZCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
653 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
654 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
656 * Tests ZHEMM and ZSYMM.
658 * Auxiliary routine for test program for Level 3 Blas.
660 * -- Written on 8-February-1989.
661 * Jack Dongarra, Argonne National Laboratory.
662 * Iain Duff, AERE Harwell.
663 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
664 * Sven Hammarling, Numerical Algorithms Group Ltd.
668 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
669 DOUBLE PRECISION RZERO
670 PARAMETER ( RZERO = 0.0D0 )
671 * .. Scalar Arguments ..
672 DOUBLE PRECISION EPS, THRESH
673 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
674 LOGICAL FATAL, REWI, TRACE
676 * .. Array Arguments ..
677 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
678 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
679 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
680 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
681 $ CS( NMAX*NMAX ), CT( NMAX )
682 DOUBLE PRECISION G( NMAX )
683 INTEGER IDIM( NIDIM )
684 * .. Local Scalars ..
685 COMPLEX*16 ALPHA, ALS, BETA, BLS
686 DOUBLE PRECISION ERR, ERRMAX
687 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
688 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
690 LOGICAL CONJ, LEFT, NULL, RESET, SAME
691 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
692 CHARACTER*2 ICHS, ICHU
695 * .. External Functions ..
698 * .. External Subroutines ..
699 EXTERNAL ZHEMM, ZMAKE, ZMMCH, ZSYMM
700 * .. Intrinsic Functions ..
702 * .. Scalars in Common ..
705 * .. Common blocks ..
706 COMMON /INFOC/INFOT, NOUTC, OK, LERR
707 * .. Data statements ..
708 DATA ICHS/'LR'/, ICHU/'UL'/
709 * .. Executable Statements ..
710 CONJ = SNAME( 2: 3 ).EQ.'HE'
722 * Set LDC to 1 more than minimum value if room.
726 * Skip tests if not enough room.
730 NULL = N.LE.0.OR.M.LE.0
731 * Set LDB to 1 more than minimum value if room.
735 * Skip tests if not enough room.
740 * Generate the matrix B.
742 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
746 SIDE = ICHS( ICS: ICS )
754 * Set LDA to 1 more than minimum value if room.
758 * Skip tests if not enough room.
764 UPLO = ICHU( ICU: ICU )
766 * Generate the hermitian or symmetric matrix A.
768 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
769 $ AA, LDA, RESET, ZERO )
777 * Generate the matrix C.
779 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
784 * Save every datum before calling the
806 * Call the subroutine.
809 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
810 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
814 CALL ZHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
815 $ BB, LDB, BETA, CC, LDC )
817 CALL ZSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
818 $ BB, LDB, BETA, CC, LDC )
821 * Check if error-exit was taken incorrectly.
824 WRITE( NOUT, FMT = 9994 )
829 * See what data changed inside subroutines.
831 ISAME( 1 ) = SIDES.EQ.SIDE
832 ISAME( 2 ) = UPLOS.EQ.UPLO
835 ISAME( 5 ) = ALS.EQ.ALPHA
836 ISAME( 6 ) = LZE( AS, AA, LAA )
837 ISAME( 7 ) = LDAS.EQ.LDA
838 ISAME( 8 ) = LZE( BS, BB, LBB )
839 ISAME( 9 ) = LDBS.EQ.LDB
840 ISAME( 10 ) = BLS.EQ.BETA
842 ISAME( 11 ) = LZE( CS, CC, LCC )
844 ISAME( 11 ) = LZERES( 'GE', ' ', M, N, CS,
847 ISAME( 12 ) = LDCS.EQ.LDC
849 * If data was incorrectly changed, report and
854 SAME = SAME.AND.ISAME( I )
855 IF( .NOT.ISAME( I ) )
856 $ WRITE( NOUT, FMT = 9998 )I
868 CALL ZMMCH( 'N', 'N', M, N, M, ALPHA, A,
869 $ NMAX, B, NMAX, BETA, C, NMAX,
870 $ CT, G, CC, LDC, EPS, ERR,
871 $ FATAL, NOUT, .TRUE. )
873 CALL ZMMCH( 'N', 'N', M, N, N, ALPHA, B,
874 $ NMAX, A, NMAX, BETA, C, NMAX,
875 $ CT, G, CC, LDC, EPS, ERR,
876 $ FATAL, NOUT, .TRUE. )
878 ERRMAX = MAX( ERRMAX, ERR )
879 * If got really bad answer, report and
899 IF( ERRMAX.LT.THRESH )THEN
900 WRITE( NOUT, FMT = 9999 )SNAME, NC
902 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
907 WRITE( NOUT, FMT = 9996 )SNAME
908 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
914 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
916 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
917 $ 'ANGED INCORRECTLY *******' )
918 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
919 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
920 $ ' - SUSPECT *******' )
921 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
922 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
923 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
924 $ ',', F4.1, '), C,', I3, ') .' )
925 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
931 SUBROUTINE ZCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
932 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
933 $ B, BB, BS, CT, G, C )
935 * Tests ZTRMM and ZTRSM.
937 * Auxiliary routine for test program for Level 3 Blas.
939 * -- Written on 8-February-1989.
940 * Jack Dongarra, Argonne National Laboratory.
941 * Iain Duff, AERE Harwell.
942 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
943 * Sven Hammarling, Numerical Algorithms Group Ltd.
947 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
948 $ ONE = ( 1.0D0, 0.0D0 ) )
949 DOUBLE PRECISION RZERO
950 PARAMETER ( RZERO = 0.0D0 )
951 * .. Scalar Arguments ..
952 DOUBLE PRECISION EPS, THRESH
953 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
954 LOGICAL FATAL, REWI, TRACE
956 * .. Array Arguments ..
957 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
958 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
959 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
960 $ C( NMAX, NMAX ), CT( NMAX )
961 DOUBLE PRECISION G( NMAX )
962 INTEGER IDIM( NIDIM )
963 * .. Local Scalars ..
964 COMPLEX*16 ALPHA, ALS
965 DOUBLE PRECISION ERR, ERRMAX
966 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
967 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
969 LOGICAL LEFT, NULL, RESET, SAME
970 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
972 CHARACTER*2 ICHD, ICHS, ICHU
976 * .. External Functions ..
979 * .. External Subroutines ..
980 EXTERNAL ZMAKE, ZMMCH, ZTRMM, ZTRSM
981 * .. Intrinsic Functions ..
983 * .. Scalars in Common ..
986 * .. Common blocks ..
987 COMMON /INFOC/INFOT, NOUTC, OK, LERR
988 * .. Data statements ..
989 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
990 * .. Executable Statements ..
996 * Set up zero matrix for ZMMCH.
1003 DO 140 IM = 1, NIDIM
1006 DO 130 IN = 1, NIDIM
1008 * Set LDB to 1 more than minimum value if room.
1012 * Skip tests if not enough room.
1016 NULL = M.LE.0.OR.N.LE.0
1019 SIDE = ICHS( ICS: ICS )
1026 * Set LDA to 1 more than minimum value if room.
1030 * Skip tests if not enough room.
1036 UPLO = ICHU( ICU: ICU )
1039 TRANSA = ICHT( ICT: ICT )
1042 DIAG = ICHD( ICD: ICD )
1047 * Generate the matrix A.
1049 CALL ZMAKE( 'TR', UPLO, DIAG, NA, NA, A,
1050 $ NMAX, AA, LDA, RESET, ZERO )
1052 * Generate the matrix B.
1054 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
1055 $ BB, LDB, RESET, ZERO )
1059 * Save every datum before calling the
1078 * Call the subroutine.
1080 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1082 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1083 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1087 CALL ZTRMM( SIDE, UPLO, TRANSA, DIAG, M,
1088 $ N, ALPHA, AA, LDA, BB, LDB )
1089 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1091 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1092 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1096 CALL ZTRSM( SIDE, UPLO, TRANSA, DIAG, M,
1097 $ N, ALPHA, AA, LDA, BB, LDB )
1100 * Check if error-exit was taken incorrectly.
1103 WRITE( NOUT, FMT = 9994 )
1108 * See what data changed inside subroutines.
1110 ISAME( 1 ) = SIDES.EQ.SIDE
1111 ISAME( 2 ) = UPLOS.EQ.UPLO
1112 ISAME( 3 ) = TRANAS.EQ.TRANSA
1113 ISAME( 4 ) = DIAGS.EQ.DIAG
1114 ISAME( 5 ) = MS.EQ.M
1115 ISAME( 6 ) = NS.EQ.N
1116 ISAME( 7 ) = ALS.EQ.ALPHA
1117 ISAME( 8 ) = LZE( AS, AA, LAA )
1118 ISAME( 9 ) = LDAS.EQ.LDA
1120 ISAME( 10 ) = LZE( BS, BB, LBB )
1122 ISAME( 10 ) = LZERES( 'GE', ' ', M, N, BS,
1125 ISAME( 11 ) = LDBS.EQ.LDB
1127 * If data was incorrectly changed, report and
1132 SAME = SAME.AND.ISAME( I )
1133 IF( .NOT.ISAME( I ) )
1134 $ WRITE( NOUT, FMT = 9998 )I
1142 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1147 CALL ZMMCH( TRANSA, 'N', M, N, M,
1148 $ ALPHA, A, NMAX, B, NMAX,
1149 $ ZERO, C, NMAX, CT, G,
1150 $ BB, LDB, EPS, ERR,
1151 $ FATAL, NOUT, .TRUE. )
1153 CALL ZMMCH( 'N', TRANSA, M, N, N,
1154 $ ALPHA, B, NMAX, A, NMAX,
1155 $ ZERO, C, NMAX, CT, G,
1156 $ BB, LDB, EPS, ERR,
1157 $ FATAL, NOUT, .TRUE. )
1159 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1161 * Compute approximation to original
1166 C( I, J ) = BB( I + ( J - 1 )*
1168 BB( I + ( J - 1 )*LDB ) = ALPHA*
1174 CALL ZMMCH( TRANSA, 'N', M, N, M,
1175 $ ONE, A, NMAX, C, NMAX,
1176 $ ZERO, B, NMAX, CT, G,
1177 $ BB, LDB, EPS, ERR,
1178 $ FATAL, NOUT, .FALSE. )
1180 CALL ZMMCH( 'N', TRANSA, M, N, N,
1181 $ ONE, C, NMAX, A, NMAX,
1182 $ ZERO, B, NMAX, CT, G,
1183 $ BB, LDB, EPS, ERR,
1184 $ FATAL, NOUT, .FALSE. )
1187 ERRMAX = MAX( ERRMAX, ERR )
1188 * If got really bad answer, report and
1210 IF( ERRMAX.LT.THRESH )THEN
1211 WRITE( NOUT, FMT = 9999 )SNAME, NC
1213 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1218 WRITE( NOUT, FMT = 9996 )SNAME
1219 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
1220 $ N, ALPHA, LDA, LDB
1225 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1227 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1228 $ 'ANGED INCORRECTLY *******' )
1229 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1230 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1231 $ ' - SUSPECT *******' )
1232 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1233 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
1234 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
1236 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1242 SUBROUTINE ZCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1243 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1244 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
1246 * Tests ZHERK and ZSYRK.
1248 * Auxiliary routine for test program for Level 3 Blas.
1250 * -- Written on 8-February-1989.
1251 * Jack Dongarra, Argonne National Laboratory.
1252 * Iain Duff, AERE Harwell.
1253 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1254 * Sven Hammarling, Numerical Algorithms Group Ltd.
1258 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
1259 DOUBLE PRECISION RONE, RZERO
1260 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 )
1261 * .. Scalar Arguments ..
1262 DOUBLE PRECISION EPS, THRESH
1263 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1264 LOGICAL FATAL, REWI, TRACE
1266 * .. Array Arguments ..
1267 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1268 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1269 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1270 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1271 $ CS( NMAX*NMAX ), CT( NMAX )
1272 DOUBLE PRECISION G( NMAX )
1273 INTEGER IDIM( NIDIM )
1274 * .. Local Scalars ..
1275 COMPLEX*16 ALPHA, ALS, BETA, BETS
1276 DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1277 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1278 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1280 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1281 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1282 CHARACTER*2 ICHT, ICHU
1283 * .. Local Arrays ..
1285 * .. External Functions ..
1287 EXTERNAL LZE, LZERES
1288 * .. External Subroutines ..
1289 EXTERNAL ZHERK, ZMAKE, ZMMCH, ZSYRK
1290 * .. Intrinsic Functions ..
1291 INTRINSIC DCMPLX, MAX, DBLE
1292 * .. Scalars in Common ..
1293 INTEGER INFOT, NOUTC
1295 * .. Common blocks ..
1296 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1297 * .. Data statements ..
1298 DATA ICHT/'NC'/, ICHU/'UL'/
1299 * .. Executable Statements ..
1300 CONJ = SNAME( 2: 3 ).EQ.'HE'
1309 DO 100 IN = 1, NIDIM
1311 * Set LDC to 1 more than minimum value if room.
1315 * Skip tests if not enough room.
1324 TRANS = ICHT( ICT: ICT )
1326 IF( TRAN.AND..NOT.CONJ )
1335 * Set LDA to 1 more than minimum value if room.
1339 * Skip tests if not enough room.
1344 * Generate the matrix A.
1346 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
1350 UPLO = ICHU( ICU: ICU )
1356 RALPHA = DBLE( ALPHA )
1357 ALPHA = DCMPLX( RALPHA, RZERO )
1363 RBETA = DBLE( BETA )
1364 BETA = DCMPLX( RBETA, RZERO )
1368 $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
1369 $ RZERO ).AND.RBETA.EQ.RONE )
1371 * Generate the matrix C.
1373 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1374 $ NMAX, CC, LDC, RESET, ZERO )
1378 * Save every datum before calling the subroutine.
1403 * Call the subroutine.
1407 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1408 $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
1411 CALL ZHERK( UPLO, TRANS, N, K, RALPHA, AA,
1412 $ LDA, RBETA, CC, LDC )
1415 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1416 $ TRANS, N, K, ALPHA, LDA, BETA, LDC
1419 CALL ZSYRK( UPLO, TRANS, N, K, ALPHA, AA,
1420 $ LDA, BETA, CC, LDC )
1423 * Check if error-exit was taken incorrectly.
1426 WRITE( NOUT, FMT = 9992 )
1431 * See what data changed inside subroutines.
1433 ISAME( 1 ) = UPLOS.EQ.UPLO
1434 ISAME( 2 ) = TRANSS.EQ.TRANS
1435 ISAME( 3 ) = NS.EQ.N
1436 ISAME( 4 ) = KS.EQ.K
1438 ISAME( 5 ) = RALS.EQ.RALPHA
1440 ISAME( 5 ) = ALS.EQ.ALPHA
1442 ISAME( 6 ) = LZE( AS, AA, LAA )
1443 ISAME( 7 ) = LDAS.EQ.LDA
1445 ISAME( 8 ) = RBETS.EQ.RBETA
1447 ISAME( 8 ) = BETS.EQ.BETA
1450 ISAME( 9 ) = LZE( CS, CC, LCC )
1452 ISAME( 9 ) = LZERES( SNAME( 2: 3 ), UPLO, N,
1455 ISAME( 10 ) = LDCS.EQ.LDC
1457 * If data was incorrectly changed, report and
1462 SAME = SAME.AND.ISAME( I )
1463 IF( .NOT.ISAME( I ) )
1464 $ WRITE( NOUT, FMT = 9998 )I
1473 * Check the result column by column.
1490 CALL ZMMCH( TRANST, 'N', LJ, 1, K,
1491 $ ALPHA, A( 1, JJ ), NMAX,
1492 $ A( 1, J ), NMAX, BETA,
1493 $ C( JJ, J ), NMAX, CT, G,
1494 $ CC( JC ), LDC, EPS, ERR,
1495 $ FATAL, NOUT, .TRUE. )
1497 CALL ZMMCH( 'N', TRANST, LJ, 1, K,
1498 $ ALPHA, A( JJ, 1 ), NMAX,
1499 $ A( J, 1 ), NMAX, BETA,
1500 $ C( JJ, J ), NMAX, CT, G,
1501 $ CC( JC ), LDC, EPS, ERR,
1502 $ FATAL, NOUT, .TRUE. )
1509 ERRMAX = MAX( ERRMAX, ERR )
1510 * If got really bad answer, report and
1531 IF( ERRMAX.LT.THRESH )THEN
1532 WRITE( NOUT, FMT = 9999 )SNAME, NC
1534 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1540 $ WRITE( NOUT, FMT = 9995 )J
1543 WRITE( NOUT, FMT = 9996 )SNAME
1545 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
1548 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1555 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1557 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1558 $ 'ANGED INCORRECTLY *******' )
1559 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1560 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1561 $ ' - SUSPECT *******' )
1562 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1563 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1564 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1565 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
1567 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1568 $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
1569 $ '), C,', I3, ') .' )
1570 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1576 SUBROUTINE ZCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1577 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1578 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
1580 * Tests ZHER2K and ZSYR2K.
1582 * Auxiliary routine for test program for Level 3 Blas.
1584 * -- Written on 8-February-1989.
1585 * Jack Dongarra, Argonne National Laboratory.
1586 * Iain Duff, AERE Harwell.
1587 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1588 * Sven Hammarling, Numerical Algorithms Group Ltd.
1591 COMPLEX*16 ZERO, ONE
1592 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
1593 $ ONE = ( 1.0D0, 0.0D0 ) )
1594 DOUBLE PRECISION RONE, RZERO
1595 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 )
1596 * .. Scalar Arguments ..
1597 DOUBLE PRECISION EPS, THRESH
1598 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1599 LOGICAL FATAL, REWI, TRACE
1601 * .. Array Arguments ..
1602 COMPLEX*16 AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1603 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1604 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1605 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1607 DOUBLE PRECISION G( NMAX )
1608 INTEGER IDIM( NIDIM )
1609 * .. Local Scalars ..
1610 COMPLEX*16 ALPHA, ALS, BETA, BETS
1611 DOUBLE PRECISION ERR, ERRMAX, RBETA, RBETS
1612 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1613 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1614 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1615 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1616 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1617 CHARACTER*2 ICHT, ICHU
1618 * .. Local Arrays ..
1620 * .. External Functions ..
1622 EXTERNAL LZE, LZERES
1623 * .. External Subroutines ..
1624 EXTERNAL ZHER2K, ZMAKE, ZMMCH, ZSYR2K
1625 * .. Intrinsic Functions ..
1626 INTRINSIC DCMPLX, DCONJG, MAX, DBLE
1627 * .. Scalars in Common ..
1628 INTEGER INFOT, NOUTC
1630 * .. Common blocks ..
1631 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1632 * .. Data statements ..
1633 DATA ICHT/'NC'/, ICHU/'UL'/
1634 * .. Executable Statements ..
1635 CONJ = SNAME( 2: 3 ).EQ.'HE'
1642 DO 130 IN = 1, NIDIM
1644 * Set LDC to 1 more than minimum value if room.
1648 * Skip tests if not enough room.
1653 DO 120 IK = 1, NIDIM
1657 TRANS = ICHT( ICT: ICT )
1659 IF( TRAN.AND..NOT.CONJ )
1668 * Set LDA to 1 more than minimum value if room.
1672 * Skip tests if not enough room.
1677 * Generate the matrix A.
1680 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
1681 $ LDA, RESET, ZERO )
1683 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
1687 * Generate the matrix B.
1692 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
1693 $ 2*NMAX, BB, LDB, RESET, ZERO )
1695 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
1696 $ NMAX, BB, LDB, RESET, ZERO )
1700 UPLO = ICHU( ICU: ICU )
1709 RBETA = DBLE( BETA )
1710 BETA = DCMPLX( RBETA, RZERO )
1714 $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
1715 $ ZERO ).AND.RBETA.EQ.RONE )
1717 * Generate the matrix C.
1719 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1720 $ NMAX, CC, LDC, RESET, ZERO )
1724 * Save every datum before calling the subroutine.
1749 * Call the subroutine.
1753 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1754 $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
1757 CALL ZHER2K( UPLO, TRANS, N, K, ALPHA, AA,
1758 $ LDA, BB, LDB, RBETA, CC, LDC )
1761 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1762 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
1765 CALL ZSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
1766 $ LDA, BB, LDB, BETA, CC, LDC )
1769 * Check if error-exit was taken incorrectly.
1772 WRITE( NOUT, FMT = 9992 )
1777 * See what data changed inside subroutines.
1779 ISAME( 1 ) = UPLOS.EQ.UPLO
1780 ISAME( 2 ) = TRANSS.EQ.TRANS
1781 ISAME( 3 ) = NS.EQ.N
1782 ISAME( 4 ) = KS.EQ.K
1783 ISAME( 5 ) = ALS.EQ.ALPHA
1784 ISAME( 6 ) = LZE( AS, AA, LAA )
1785 ISAME( 7 ) = LDAS.EQ.LDA
1786 ISAME( 8 ) = LZE( BS, BB, LBB )
1787 ISAME( 9 ) = LDBS.EQ.LDB
1789 ISAME( 10 ) = RBETS.EQ.RBETA
1791 ISAME( 10 ) = BETS.EQ.BETA
1794 ISAME( 11 ) = LZE( CS, CC, LCC )
1796 ISAME( 11 ) = LZERES( 'HE', UPLO, N, N, CS,
1799 ISAME( 12 ) = LDCS.EQ.LDC
1801 * If data was incorrectly changed, report and
1806 SAME = SAME.AND.ISAME( I )
1807 IF( .NOT.ISAME( I ) )
1808 $ WRITE( NOUT, FMT = 9998 )I
1817 * Check the result column by column.
1836 W( I ) = ALPHA*AB( ( J - 1 )*2*
1839 W( K + I ) = DCONJG( ALPHA )*
1848 CALL ZMMCH( TRANST, 'N', LJ, 1, 2*K,
1849 $ ONE, AB( JJAB ), 2*NMAX, W,
1850 $ 2*NMAX, BETA, C( JJ, J ),
1851 $ NMAX, CT, G, CC( JC ), LDC,
1852 $ EPS, ERR, FATAL, NOUT,
1857 W( I ) = ALPHA*DCONJG( AB( ( K +
1858 $ I - 1 )*NMAX + J ) )
1859 W( K + I ) = DCONJG( ALPHA*
1860 $ AB( ( I - 1 )*NMAX +
1863 W( I ) = ALPHA*AB( ( K + I - 1 )*
1866 $ AB( ( I - 1 )*NMAX +
1870 CALL ZMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
1871 $ AB( JJ ), NMAX, W, 2*NMAX,
1872 $ BETA, C( JJ, J ), NMAX, CT,
1873 $ G, CC( JC ), LDC, EPS, ERR,
1874 $ FATAL, NOUT, .TRUE. )
1881 $ JJAB = JJAB + 2*NMAX
1883 ERRMAX = MAX( ERRMAX, ERR )
1884 * If got really bad answer, report and
1905 IF( ERRMAX.LT.THRESH )THEN
1906 WRITE( NOUT, FMT = 9999 )SNAME, NC
1908 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1914 $ WRITE( NOUT, FMT = 9995 )J
1917 WRITE( NOUT, FMT = 9996 )SNAME
1919 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1920 $ LDA, LDB, RBETA, LDC
1922 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1923 $ LDA, LDB, BETA, LDC
1929 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1931 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1932 $ 'ANGED INCORRECTLY *******' )
1933 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1934 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1935 $ ' - SUSPECT *******' )
1936 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1937 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1938 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1939 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
1940 $ ', C,', I3, ') .' )
1941 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1942 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
1943 $ ',', F4.1, '), C,', I3, ') .' )
1944 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1950 SUBROUTINE ZCHKE( ISNUM, SRNAMT, NOUT )
1952 * Tests the error exits from the Level 3 Blas.
1953 * Requires a special version of the error-handling routine XERBLA.
1954 * ALPHA, RALPHA, BETA, RBETA, A, B and C should not need to be defined.
1956 * Auxiliary routine for test program for Level 3 Blas.
1958 * -- Written on 8-February-1989.
1959 * Jack Dongarra, Argonne National Laboratory.
1960 * Iain Duff, AERE Harwell.
1961 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1962 * Sven Hammarling, Numerical Algorithms Group Ltd.
1964 * .. Scalar Arguments ..
1967 * .. Scalars in Common ..
1968 INTEGER INFOT, NOUTC
1970 * .. Local Scalars ..
1971 COMPLEX*16 ALPHA, BETA
1972 DOUBLE PRECISION RALPHA, RBETA
1973 * .. Local Arrays ..
1974 COMPLEX*16 A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
1975 * .. External Subroutines ..
1976 EXTERNAL ZGEMM, ZHEMM, ZHER2K, ZHERK, CHKXER, ZSYMM,
1977 $ ZSYR2K, ZSYRK, ZTRMM, ZTRSM
1978 * .. Common blocks ..
1979 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1980 * .. Executable Statements ..
1981 * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
1982 * if anything is wrong.
1984 * LERR is set to .TRUE. by the special version of XERBLA each time
1985 * it is called, and is then tested and re-set by CHKXER.
1987 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
1990 CALL ZGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1991 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1993 CALL ZGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1994 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1996 CALL ZGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1997 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1999 CALL ZGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2000 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2002 CALL ZGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2003 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2005 CALL ZGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2006 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2008 CALL ZGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2009 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2011 CALL ZGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2012 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2014 CALL ZGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2015 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2017 CALL ZGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2018 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2020 CALL ZGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2021 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2023 CALL ZGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2024 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2026 CALL ZGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2027 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2029 CALL ZGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2030 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2032 CALL ZGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2033 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2035 CALL ZGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2036 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2038 CALL ZGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2039 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2041 CALL ZGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2042 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2044 CALL ZGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2045 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2047 CALL ZGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2048 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2050 CALL ZGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2051 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2053 CALL ZGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2054 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2056 CALL ZGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2057 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2059 CALL ZGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2060 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2062 CALL ZGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2063 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2065 CALL ZGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2066 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2068 CALL ZGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2069 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2071 CALL ZGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2072 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2074 CALL ZGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2075 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2077 CALL ZGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2078 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2080 CALL ZGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2081 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2083 CALL ZGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2084 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2086 CALL ZGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2087 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2089 CALL ZGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2090 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2092 CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2093 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2095 CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2096 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2098 CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2099 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2101 CALL ZGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2102 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2104 CALL ZGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2105 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2107 CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2108 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2110 CALL ZGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2111 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2113 CALL ZGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2114 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2116 CALL ZGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2117 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2119 CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2120 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2122 CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2123 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2125 CALL ZGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2126 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2128 CALL ZGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2129 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2131 CALL ZGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2132 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2134 CALL ZGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2135 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2137 CALL ZGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2138 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2140 CALL ZGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2141 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2143 CALL ZGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2144 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2146 CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2147 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2149 CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2150 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2152 CALL ZGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2153 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2155 CALL ZGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2156 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2158 CALL ZGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2159 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2161 CALL ZGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2162 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2164 CALL ZGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2165 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2167 CALL ZGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2168 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2171 CALL ZHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2172 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2174 CALL ZHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2175 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2177 CALL ZHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2178 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2180 CALL ZHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2181 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2183 CALL ZHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2184 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2186 CALL ZHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2187 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2189 CALL ZHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2190 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2192 CALL ZHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2193 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2195 CALL ZHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2196 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2198 CALL ZHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2199 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2201 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2202 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2204 CALL ZHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2205 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2207 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2208 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2210 CALL ZHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2211 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2213 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2214 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2216 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2217 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2219 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2220 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2222 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2223 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2225 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2226 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2228 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2229 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2231 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2232 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2234 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2235 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2238 CALL ZSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2239 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2241 CALL ZSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2242 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2244 CALL ZSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2245 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2247 CALL ZSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2248 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2250 CALL ZSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2251 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2253 CALL ZSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2254 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2256 CALL ZSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2257 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2259 CALL ZSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2260 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2262 CALL ZSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2263 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2265 CALL ZSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2266 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2268 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2269 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2271 CALL ZSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2272 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2274 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2275 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2277 CALL ZSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2278 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2280 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2281 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2283 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2284 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2286 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2287 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2289 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2290 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2292 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2293 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2295 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2296 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2298 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2299 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2301 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2302 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2305 CALL ZTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2306 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2308 CALL ZTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2309 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2311 CALL ZTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2312 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2314 CALL ZTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2315 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2317 CALL ZTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2318 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2320 CALL ZTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2321 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2323 CALL ZTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2324 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2326 CALL ZTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2327 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2329 CALL ZTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2330 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2332 CALL ZTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2333 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2335 CALL ZTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2336 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2338 CALL ZTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2339 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2341 CALL ZTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2342 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2344 CALL ZTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2345 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2347 CALL ZTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2348 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2350 CALL ZTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2351 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2353 CALL ZTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2354 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2356 CALL ZTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2357 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2359 CALL ZTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2360 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2362 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2363 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2365 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2366 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2368 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2369 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2371 CALL ZTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2372 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2374 CALL ZTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2375 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2377 CALL ZTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2378 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2380 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2381 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2383 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2384 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2386 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2387 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2389 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2390 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2392 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2393 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2395 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2396 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2398 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2399 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2401 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2402 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2404 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2405 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2407 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2408 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2410 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2411 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2413 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2414 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2416 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2417 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2419 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2420 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2422 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2423 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2425 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2426 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2428 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2429 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2431 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2432 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2434 CALL ZTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2435 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2437 CALL ZTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2438 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2440 CALL ZTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2441 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2443 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2444 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2446 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2447 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2449 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2450 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2452 CALL ZTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2453 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2455 CALL ZTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2456 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2458 CALL ZTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2459 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2462 CALL ZTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2463 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2465 CALL ZTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2466 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2468 CALL ZTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2469 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2471 CALL ZTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2472 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2474 CALL ZTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2475 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2477 CALL ZTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2478 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2480 CALL ZTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2481 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2483 CALL ZTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2484 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2486 CALL ZTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2487 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2489 CALL ZTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2490 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2492 CALL ZTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2493 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2495 CALL ZTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2496 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2498 CALL ZTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2499 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2501 CALL ZTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2502 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2504 CALL ZTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2505 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2507 CALL ZTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2508 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2510 CALL ZTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2511 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2513 CALL ZTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2514 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2516 CALL ZTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2517 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2519 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2520 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2522 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2523 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2525 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2526 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2528 CALL ZTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2529 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2531 CALL ZTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2532 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2534 CALL ZTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2535 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2537 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2538 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2540 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2541 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2543 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2544 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2546 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2547 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2549 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2550 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2552 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2553 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2555 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2556 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2558 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2559 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2561 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2562 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2564 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2565 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2567 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2568 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2570 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2571 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2573 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2574 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2576 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2577 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2579 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2580 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2582 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2583 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2585 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2586 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2588 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2589 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2591 CALL ZTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2592 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2594 CALL ZTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2595 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2597 CALL ZTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2598 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2600 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2601 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2603 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2604 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2606 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2607 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2609 CALL ZTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2610 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2612 CALL ZTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2613 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2615 CALL ZTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2616 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2619 CALL ZHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2620 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2622 CALL ZHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2623 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2625 CALL ZHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2626 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2628 CALL ZHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2629 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2631 CALL ZHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2632 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2634 CALL ZHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2635 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2637 CALL ZHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2638 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2640 CALL ZHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2641 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2643 CALL ZHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2644 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2646 CALL ZHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2647 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2649 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2650 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2652 CALL ZHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2653 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2655 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2656 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2658 CALL ZHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2659 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2661 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2662 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2664 CALL ZHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2665 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2667 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2668 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2670 CALL ZHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2671 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2674 CALL ZSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2675 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2677 CALL ZSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2678 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2680 CALL ZSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2681 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2683 CALL ZSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2684 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2686 CALL ZSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2687 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2689 CALL ZSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2690 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2692 CALL ZSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2693 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2695 CALL ZSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2696 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2698 CALL ZSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2699 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2701 CALL ZSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2702 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2704 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2705 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2707 CALL ZSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2708 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2710 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2711 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2713 CALL ZSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2714 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2716 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2717 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2719 CALL ZSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2720 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2722 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2723 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2725 CALL ZSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2726 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2729 CALL ZHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2730 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2732 CALL ZHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2733 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2735 CALL ZHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2736 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2738 CALL ZHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2739 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2741 CALL ZHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2742 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2744 CALL ZHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2745 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2747 CALL ZHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2748 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2750 CALL ZHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2751 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2753 CALL ZHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2754 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2756 CALL ZHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2757 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2759 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2760 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2762 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2763 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2765 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2766 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2768 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2769 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2771 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2772 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2774 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2775 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2777 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2778 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2780 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2781 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2783 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2784 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2786 CALL ZHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2787 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2789 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2790 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2792 CALL ZHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2793 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2796 CALL ZSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2797 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2799 CALL ZSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2800 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2802 CALL ZSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2803 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2805 CALL ZSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2806 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2808 CALL ZSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2809 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2811 CALL ZSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2812 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2814 CALL ZSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2815 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2817 CALL ZSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2818 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2820 CALL ZSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2821 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2823 CALL ZSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2824 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2826 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2827 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2829 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2830 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2832 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2833 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2835 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2836 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2838 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2839 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2841 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2842 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2844 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2845 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2847 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2848 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2850 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2851 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2853 CALL ZSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2854 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2856 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2857 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2859 CALL ZSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2860 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2863 WRITE( NOUT, FMT = 9999 )SRNAMT
2865 WRITE( NOUT, FMT = 9998 )SRNAMT
2869 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2870 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2876 SUBROUTINE ZMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2879 * Generates values for an M by N matrix A.
2880 * Stores the values in the array AA in the data structure required
2881 * by the routine, with unwanted elements set to rogue value.
2883 * TYPE is 'GE', 'HE', 'SY' or 'TR'.
2885 * Auxiliary routine for test program for Level 3 Blas.
2887 * -- Written on 8-February-1989.
2888 * Jack Dongarra, Argonne National Laboratory.
2889 * Iain Duff, AERE Harwell.
2890 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2891 * Sven Hammarling, Numerical Algorithms Group Ltd.
2894 COMPLEX*16 ZERO, ONE
2895 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
2896 $ ONE = ( 1.0D0, 0.0D0 ) )
2898 PARAMETER ( ROGUE = ( -1.0D10, 1.0D10 ) )
2899 DOUBLE PRECISION RZERO
2900 PARAMETER ( RZERO = 0.0D0 )
2901 DOUBLE PRECISION RROGUE
2902 PARAMETER ( RROGUE = -1.0D10 )
2903 * .. Scalar Arguments ..
2905 INTEGER LDA, M, N, NMAX
2907 CHARACTER*1 DIAG, UPLO
2909 * .. Array Arguments ..
2910 COMPLEX*16 A( NMAX, * ), AA( * )
2911 * .. Local Scalars ..
2912 INTEGER I, IBEG, IEND, J, JJ
2913 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2914 * .. External Functions ..
2917 * .. Intrinsic Functions ..
2918 INTRINSIC DCMPLX, DCONJG, DBLE
2919 * .. Executable Statements ..
2924 UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
2925 LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
2926 UNIT = TRI.AND.DIAG.EQ.'U'
2928 * Generate data in array A.
2932 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2934 A( I, J ) = ZBEG( RESET ) + TRANSL
2936 * Set some elements to zero
2937 IF( N.GT.3.AND.J.EQ.N/2 )
2940 A( J, I ) = DCONJG( A( I, J ) )
2942 A( J, I ) = A( I, J )
2950 $ A( J, J ) = DCMPLX( DBLE( A( J, J ) ), RZERO )
2952 $ A( J, J ) = A( J, J ) + ONE
2957 * Store elements in array AS in data structure required by routine.
2959 IF( TYPE.EQ.'GE' )THEN
2962 AA( I + ( J - 1 )*LDA ) = A( I, J )
2964 DO 40 I = M + 1, LDA
2965 AA( I + ( J - 1 )*LDA ) = ROGUE
2968 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
2985 DO 60 I = 1, IBEG - 1
2986 AA( I + ( J - 1 )*LDA ) = ROGUE
2988 DO 70 I = IBEG, IEND
2989 AA( I + ( J - 1 )*LDA ) = A( I, J )
2991 DO 80 I = IEND + 1, LDA
2992 AA( I + ( J - 1 )*LDA ) = ROGUE
2995 JJ = J + ( J - 1 )*LDA
2996 AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE )
3005 SUBROUTINE ZMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
3006 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
3009 * Checks the results of the computational tests.
3011 * Auxiliary routine for test program for Level 3 Blas.
3013 * -- Written on 8-February-1989.
3014 * Jack Dongarra, Argonne National Laboratory.
3015 * Iain Duff, AERE Harwell.
3016 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3017 * Sven Hammarling, Numerical Algorithms Group Ltd.
3021 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
3022 DOUBLE PRECISION RZERO, RONE
3023 PARAMETER ( RZERO = 0.0D0, RONE = 1.0D0 )
3024 * .. Scalar Arguments ..
3025 COMPLEX*16 ALPHA, BETA
3026 DOUBLE PRECISION EPS, ERR
3027 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
3029 CHARACTER*1 TRANSA, TRANSB
3030 * .. Array Arguments ..
3031 COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ),
3032 $ CC( LDCC, * ), CT( * )
3033 DOUBLE PRECISION G( * )
3034 * .. Local Scalars ..
3036 DOUBLE PRECISION ERRI
3038 LOGICAL CTRANA, CTRANB, TRANA, TRANB
3039 * .. Intrinsic Functions ..
3040 INTRINSIC ABS, DIMAG, DCONJG, MAX, DBLE, SQRT
3041 * .. Statement Functions ..
3042 DOUBLE PRECISION ABS1
3043 * .. Statement Function definitions ..
3044 ABS1( CL ) = ABS( DBLE( CL ) ) + ABS( DIMAG( CL ) )
3045 * .. Executable Statements ..
3046 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
3047 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
3048 CTRANA = TRANSA.EQ.'C'
3049 CTRANB = TRANSB.EQ.'C'
3051 * Compute expected result, one column at a time, in CT using data
3053 * Compute gauges in G.
3061 IF( .NOT.TRANA.AND..NOT.TRANB )THEN
3064 CT( I ) = CT( I ) + A( I, K )*B( K, J )
3065 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
3068 ELSE IF( TRANA.AND..NOT.TRANB )THEN
3072 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*B( K, J )
3073 G( I ) = G( I ) + ABS1( A( K, I ) )*
3080 CT( I ) = CT( I ) + A( K, I )*B( K, J )
3081 G( I ) = G( I ) + ABS1( A( K, I ) )*
3086 ELSE IF( .NOT.TRANA.AND.TRANB )THEN
3090 CT( I ) = CT( I ) + A( I, K )*DCONJG( B( J, K ) )
3091 G( I ) = G( I ) + ABS1( A( I, K ) )*
3098 CT( I ) = CT( I ) + A( I, K )*B( J, K )
3099 G( I ) = G( I ) + ABS1( A( I, K ) )*
3104 ELSE IF( TRANA.AND.TRANB )THEN
3109 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*
3110 $ DCONJG( B( J, K ) )
3111 G( I ) = G( I ) + ABS1( A( K, I ) )*
3118 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*
3120 G( I ) = G( I ) + ABS1( A( K, I ) )*
3129 CT( I ) = CT( I ) + A( K, I )*
3130 $ DCONJG( B( J, K ) )
3131 G( I ) = G( I ) + ABS1( A( K, I ) )*
3138 CT( I ) = CT( I ) + A( K, I )*B( J, K )
3139 G( I ) = G( I ) + ABS1( A( K, I ) )*
3147 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
3148 G( I ) = ABS1( ALPHA )*G( I ) +
3149 $ ABS1( BETA )*ABS1( C( I, J ) )
3152 * Compute the error ratio for this result.
3156 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
3157 IF( G( I ).NE.RZERO )
3158 $ ERRI = ERRI/G( I )
3159 ERR = MAX( ERR, ERRI )
3160 IF( ERR*SQRT( EPS ).GE.RONE )
3166 * If the loop completes, all results are at least half accurate.
3169 * Report fatal error.
3172 WRITE( NOUT, FMT = 9999 )
3175 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
3177 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
3181 $ WRITE( NOUT, FMT = 9997 )J
3186 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3187 $ 'F ACCURATE *******', /' EXPECTED RE',
3188 $ 'SULT COMPUTED RESULT' )
3189 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
3190 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
3195 LOGICAL FUNCTION LZE( RI, RJ, LR )
3197 * Tests if two arrays are identical.
3199 * Auxiliary routine for test program for Level 3 Blas.
3201 * -- Written on 8-February-1989.
3202 * Jack Dongarra, Argonne National Laboratory.
3203 * Iain Duff, AERE Harwell.
3204 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3205 * Sven Hammarling, Numerical Algorithms Group Ltd.
3207 * .. Scalar Arguments ..
3209 * .. Array Arguments ..
3210 COMPLEX*16 RI( * ), RJ( * )
3211 * .. Local Scalars ..
3213 * .. Executable Statements ..
3215 IF( RI( I ).NE.RJ( I ) )
3227 LOGICAL FUNCTION LZERES( TYPE, UPLO, M, N, AA, AS, LDA )
3229 * Tests if selected elements in two arrays are equal.
3231 * TYPE is 'GE' or 'HE' or 'SY'.
3233 * Auxiliary routine for test program for Level 3 Blas.
3235 * -- Written on 8-February-1989.
3236 * Jack Dongarra, Argonne National Laboratory.
3237 * Iain Duff, AERE Harwell.
3238 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3239 * Sven Hammarling, Numerical Algorithms Group Ltd.
3241 * .. Scalar Arguments ..
3245 * .. Array Arguments ..
3246 COMPLEX*16 AA( LDA, * ), AS( LDA, * )
3247 * .. Local Scalars ..
3248 INTEGER I, IBEG, IEND, J
3250 * .. Executable Statements ..
3252 IF( TYPE.EQ.'GE' )THEN
3254 DO 10 I = M + 1, LDA
3255 IF( AA( I, J ).NE.AS( I, J ) )
3259 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
3268 DO 30 I = 1, IBEG - 1
3269 IF( AA( I, J ).NE.AS( I, J ) )
3272 DO 40 I = IEND + 1, LDA
3273 IF( AA( I, J ).NE.AS( I, J ) )
3289 COMPLEX*16 FUNCTION ZBEG( RESET )
3291 * Generates complex numbers as pairs of random numbers uniformly
3292 * distributed between -0.5 and 0.5.
3294 * Auxiliary routine for test program for Level 3 Blas.
3296 * -- Written on 8-February-1989.
3297 * Jack Dongarra, Argonne National Laboratory.
3298 * Iain Duff, AERE Harwell.
3299 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3300 * Sven Hammarling, Numerical Algorithms Group Ltd.
3302 * .. Scalar Arguments ..
3304 * .. Local Scalars ..
3305 INTEGER I, IC, J, MI, MJ
3306 * .. Save statement ..
3307 SAVE I, IC, J, MI, MJ
3308 * .. Intrinsic Functions ..
3310 * .. Executable Statements ..
3312 * Initialize local variables.
3321 * The sequence of values of I or J is bounded between 1 and 999.
3322 * If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
3323 * If initial I or J = 4 or 8, the period will be 25.
3324 * If initial I or J = 5, the period will be 10.
3325 * IC is used to break up the period by skipping 1 value of I or J
3331 I = I - 1000*( I/1000 )
3332 J = J - 1000*( J/1000 )
3337 ZBEG = DCMPLX( ( I - 500 )/1001.0D0, ( J - 500 )/1001.0D0 )
3343 DOUBLE PRECISION FUNCTION DDIFF( X, Y )
3345 * Auxiliary routine for test program for Level 3 Blas.
3347 * -- Written on 8-February-1989.
3348 * Jack Dongarra, Argonne National Laboratory.
3349 * Iain Duff, AERE Harwell.
3350 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3351 * Sven Hammarling, Numerical Algorithms Group Ltd.
3353 * .. Scalar Arguments ..
3354 DOUBLE PRECISION X, Y
3355 * .. Executable Statements ..
3362 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3364 * Tests whether XERBLA has detected an error when it should.
3366 * Auxiliary routine for test program for Level 3 Blas.
3368 * -- Written on 8-February-1989.
3369 * Jack Dongarra, Argonne National Laboratory.
3370 * Iain Duff, AERE Harwell.
3371 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3372 * Sven Hammarling, Numerical Algorithms Group Ltd.
3374 * .. Scalar Arguments ..
3378 * .. Executable Statements ..
3380 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3386 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3387 $ 'ETECTED BY ', A6, ' *****' )
3392 SUBROUTINE XERBLA( SRNAME, INFO )
3394 * This is a special version of XERBLA to be used only as part of
3395 * the test program for testing error exits from the Level 3 BLAS
3398 * XERBLA is an error handler for the Level 3 BLAS routines.
3400 * It is called by the Level 3 BLAS routines if an input parameter is
3403 * Auxiliary routine for test program for Level 3 Blas.
3405 * -- Written on 8-February-1989.
3406 * Jack Dongarra, Argonne National Laboratory.
3407 * Iain Duff, AERE Harwell.
3408 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3409 * Sven Hammarling, Numerical Algorithms Group Ltd.
3411 * .. Scalar Arguments ..
3414 * .. Scalars in Common ..
3418 * .. Common blocks ..
3419 COMMON /INFOC/INFOT, NOUT, OK, LERR
3420 COMMON /SRNAMC/SRNAMT
3421 * .. Executable Statements ..
3423 IF( INFO.NE.INFOT )THEN
3424 IF( INFOT.NE.0 )THEN
3425 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3427 WRITE( NOUT, FMT = 9997 )INFO
3431 IF( SRNAME.NE.SRNAMT )THEN
3432 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3437 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
3438 $ ' OF ', I2, ' *******' )
3439 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
3440 $ 'AD OF ', A6, ' *******' )
3441 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,