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 ( A8, 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 * ZGEMM3M 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*8 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/'ZGEMM3M ', 'ZHEMM ', 'ZSYMM ',
100 $ 'ZTRSM ', 'ZHERK ', 'ZSYRK ', 'ZHER2K',
102 * .. Executable Statements ..
104 * Read name and unit number for summary output file and open file.
106 READ( NIN, FMT = * )SUMMRY
107 READ( NIN, FMT = * )NOUT
108 OPEN( NOUT, FILE = SUMMRY, STATUS = 'NEW' )
111 * Read name and unit number for snapshot output file and open file.
113 READ( NIN, FMT = * )SNAPS
114 READ( NIN, FMT = * )NTRA
117 OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' )
119 * Read the flag that directs rewinding of the snapshot file.
120 READ( NIN, FMT = * )REWI
121 REWI = REWI.AND.TRACE
122 * Read the flag that directs stopping on any failure.
123 READ( NIN, FMT = * )SFATAL
124 * Read the flag that indicates whether error exits are to be tested.
125 READ( NIN, FMT = * )TSTERR
126 * Read the threshold value of the test ratio
127 READ( NIN, FMT = * )THRESH
129 * Read and check the parameter values for the tests.
132 READ( NIN, FMT = * )NIDIM
133 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
134 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
137 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
139 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
140 WRITE( NOUT, FMT = 9996 )NMAX
145 READ( NIN, FMT = * )NALF
146 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
147 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
150 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
152 READ( NIN, FMT = * )NBET
153 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
154 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
157 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
159 * Report values of parameters.
161 WRITE( NOUT, FMT = 9995 )
162 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
163 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
164 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
165 IF( .NOT.TSTERR )THEN
166 WRITE( NOUT, FMT = * )
167 WRITE( NOUT, FMT = 9984 )
169 WRITE( NOUT, FMT = * )
170 WRITE( NOUT, FMT = 9999 )THRESH
171 WRITE( NOUT, FMT = * )
173 * Read names of subroutines and flags which indicate
174 * whether they are to be tested.
179 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
181 IF( SNAMET.EQ.SNAMES( I ) )
184 WRITE( NOUT, FMT = 9990 )SNAMET
186 50 LTEST( I ) = LTESTT
192 * Compute EPS (the machine precision).
196 IF( DDIFF( RONE + EPS, RONE ).EQ.RZERO )
202 WRITE( NOUT, FMT = 9998 )EPS
204 * Check the reliability of ZMMCH using exact data.
209 AB( I, J ) = MAX( I - J + 1, 0 )
211 AB( J, NMAX + 1 ) = J
212 AB( 1, NMAX + J ) = J
216 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
218 * CC holds the exact result. On exit from ZMMCH CT holds
219 * the result computed by ZMMCH.
222 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
223 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
224 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
225 SAME = LZE( CC, CT, N )
226 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
227 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
231 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
232 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
233 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
234 SAME = LZE( CC, CT, N )
235 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
236 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
240 AB( J, NMAX + 1 ) = N - J + 1
241 AB( 1, NMAX + J ) = N - J + 1
244 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
245 $ ( ( J + 1 )*J*( J - 1 ) )/3
249 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
250 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
251 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
252 SAME = LZE( CC, CT, N )
253 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
254 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
258 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
259 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
260 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
261 SAME = LZE( CC, CT, N )
262 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
263 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
267 * Test each subroutine in turn.
269 DO 200 ISNUM = 1, NSUBS
270 WRITE( NOUT, FMT = * )
271 IF( .NOT.LTEST( ISNUM ) )THEN
272 * Subprogram is not to be tested.
273 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
275 SRNAMT = SNAMES( ISNUM )
278 CALL ZCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
279 WRITE( NOUT, FMT = * )
285 GO TO ( 140, 150, 150, 160, 160, 170, 170,
288 140 CALL ZCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
289 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
290 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
293 * Test ZHEMM, 02, ZSYMM, 03.
294 150 CALL ZCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
295 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
296 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
299 * Test ZTRMM, 04, ZTRSM, 05.
300 160 CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
301 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
302 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
304 * Test ZHERK, 06, ZSYRK, 07.
305 170 CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
306 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
307 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
310 * Test ZHER2K, 08, ZSYR2K, 09.
311 180 CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
312 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
313 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
316 190 IF( FATAL.AND.SFATAL )
320 WRITE( NOUT, FMT = 9986 )
324 WRITE( NOUT, FMT = 9985 )
328 WRITE( NOUT, FMT = 9991 )
336 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
338 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, D9.1 )
339 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
341 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
342 9995 FORMAT( ' TESTS OF THE COMPLEX*16 LEVEL 3 BLAS', //' THE F',
343 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
344 9994 FORMAT( ' FOR N ', 9I6 )
345 9993 FORMAT( ' FOR ALPHA ',
346 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
347 9992 FORMAT( ' FOR BETA ',
348 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
349 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
350 $ /' ******* TESTS ABANDONED *******' )
351 9990 FORMAT( ' SUBPROGRAM NAME ', A8, ' NOT RECOGNIZED', /' ******* T',
352 $ 'ESTS ABANDONED *******' )
353 9989 FORMAT( ' ERROR IN ZMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
354 $ 'ATED WRONGLY.', /' ZMMCH WAS CALLED WITH TRANSA = ', A1,
355 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
356 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
357 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
359 9988 FORMAT( A8, L2 )
360 9987 FORMAT( 1X, A8, ' WAS NOT TESTED' )
361 9986 FORMAT( /' END OF TESTS' )
362 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
363 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
368 SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
369 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
370 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
374 * Auxiliary routine for test program for Level 3 Blas.
376 * -- Written on 8-February-1989.
377 * Jack Dongarra, Argonne National Laboratory.
378 * Iain Duff, AERE Harwell.
379 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
380 * Sven Hammarling, Numerical Algorithms Group Ltd.
384 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
385 DOUBLE PRECISION RZERO
386 PARAMETER ( RZERO = 0.0D0 )
387 * .. Scalar Arguments ..
388 DOUBLE PRECISION EPS, THRESH
389 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
390 LOGICAL FATAL, REWI, TRACE
392 * .. Array Arguments ..
393 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
394 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
395 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
396 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
397 $ CS( NMAX*NMAX ), CT( NMAX )
398 DOUBLE PRECISION G( NMAX )
399 INTEGER IDIM( NIDIM )
400 * .. Local Scalars ..
401 COMPLEX*16 ALPHA, ALS, BETA, BLS
402 DOUBLE PRECISION ERR, ERRMAX
403 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
404 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
405 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
406 LOGICAL NULL, RESET, SAME, TRANA, TRANB
407 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
411 * .. External Functions ..
414 * .. External Subroutines ..
415 EXTERNAL ZGEMM3M, ZMAKE, ZMMCH
416 * .. Intrinsic Functions ..
418 * .. Scalars in Common ..
421 * .. Common blocks ..
422 COMMON /INFOC/INFOT, NOUTC, OK, LERR
423 * .. Data statements ..
425 * .. Executable Statements ..
437 * Set LDC to 1 more than minimum value if room.
441 * Skip tests if not enough room.
445 NULL = N.LE.0.OR.M.LE.0
451 TRANSA = ICH( ICA: ICA )
452 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
461 * Set LDA to 1 more than minimum value if room.
465 * Skip tests if not enough room.
470 * Generate the matrix A.
472 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
476 TRANSB = ICH( ICB: ICB )
477 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
486 * Set LDB to 1 more than minimum value if room.
490 * Skip tests if not enough room.
495 * Generate the matrix B.
497 CALL ZMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
506 * Generate the matrix C.
508 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
509 $ CC, LDC, RESET, ZERO )
513 * Save every datum before calling the
536 * Call the subroutine.
539 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
540 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
544 CALL ZGEMM3M( TRANSA, TRANSB, M, N, K, ALPHA,
545 $ AA, LDA, BB, LDB, BETA, CC, LDC )
547 * Check if error-exit was taken incorrectly.
550 WRITE( NOUT, FMT = 9994 )
555 * See what data changed inside subroutines.
557 ISAME( 1 ) = TRANSA.EQ.TRANAS
558 ISAME( 2 ) = TRANSB.EQ.TRANBS
562 ISAME( 6 ) = ALS.EQ.ALPHA
563 ISAME( 7 ) = LZE( AS, AA, LAA )
564 ISAME( 8 ) = LDAS.EQ.LDA
565 ISAME( 9 ) = LZE( BS, BB, LBB )
566 ISAME( 10 ) = LDBS.EQ.LDB
567 ISAME( 11 ) = BLS.EQ.BETA
569 ISAME( 12 ) = LZE( CS, CC, LCC )
571 ISAME( 12 ) = LZERES( 'GE', ' ', M, N, CS,
574 ISAME( 13 ) = LDCS.EQ.LDC
576 * If data was incorrectly changed, report
581 SAME = SAME.AND.ISAME( I )
582 IF( .NOT.ISAME( I ) )
583 $ WRITE( NOUT, FMT = 9998 )I
594 CALL ZMMCH( TRANSA, TRANSB, M, N, K,
595 $ ALPHA, A, NMAX, B, NMAX, BETA,
596 $ C, NMAX, CT, G, CC, LDC, EPS,
597 $ ERR, FATAL, NOUT, .TRUE. )
598 ERRMAX = MAX( ERRMAX, ERR )
599 * If got really bad answer, report and
621 IF( ERRMAX.LT.THRESH )THEN
622 WRITE( NOUT, FMT = 9999 )SNAME, NC
624 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
629 WRITE( NOUT, FMT = 9996 )SNAME
630 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
631 $ ALPHA, LDA, LDB, BETA, LDC
636 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
638 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
639 $ 'ANGED INCORRECTLY *******' )
640 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
641 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
642 $ ' - SUSPECT *******' )
643 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
644 9995 FORMAT( 1X, I6, ': ', A8, '(''', A1, ''',''', A1, ''',',
645 $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
646 $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
647 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
653 SUBROUTINE ZCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
654 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
655 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
657 * Tests ZHEMM and ZSYMM.
659 * Auxiliary routine for test program for Level 3 Blas.
661 * -- Written on 8-February-1989.
662 * Jack Dongarra, Argonne National Laboratory.
663 * Iain Duff, AERE Harwell.
664 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
665 * Sven Hammarling, Numerical Algorithms Group Ltd.
669 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
670 DOUBLE PRECISION RZERO
671 PARAMETER ( RZERO = 0.0D0 )
672 * .. Scalar Arguments ..
673 DOUBLE PRECISION EPS, THRESH
674 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
675 LOGICAL FATAL, REWI, TRACE
677 * .. Array Arguments ..
678 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
679 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
680 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
681 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
682 $ CS( NMAX*NMAX ), CT( NMAX )
683 DOUBLE PRECISION G( NMAX )
684 INTEGER IDIM( NIDIM )
685 * .. Local Scalars ..
686 COMPLEX*16 ALPHA, ALS, BETA, BLS
687 DOUBLE PRECISION ERR, ERRMAX
688 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
689 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
691 LOGICAL CONJ, LEFT, NULL, RESET, SAME
692 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
693 CHARACTER*2 ICHS, ICHU
696 * .. External Functions ..
699 * .. External Subroutines ..
700 EXTERNAL ZHEMM, ZMAKE, ZMMCH, ZSYMM
701 * .. Intrinsic Functions ..
703 * .. Scalars in Common ..
706 * .. Common blocks ..
707 COMMON /INFOC/INFOT, NOUTC, OK, LERR
708 * .. Data statements ..
709 DATA ICHS/'LR'/, ICHU/'UL'/
710 * .. Executable Statements ..
711 CONJ = SNAME( 2: 3 ).EQ.'HE'
723 * Set LDC to 1 more than minimum value if room.
727 * Skip tests if not enough room.
731 NULL = N.LE.0.OR.M.LE.0
732 * Set LDB to 1 more than minimum value if room.
736 * Skip tests if not enough room.
741 * Generate the matrix B.
743 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
747 SIDE = ICHS( ICS: ICS )
755 * Set LDA to 1 more than minimum value if room.
759 * Skip tests if not enough room.
765 UPLO = ICHU( ICU: ICU )
767 * Generate the hermitian or symmetric matrix A.
769 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
770 $ AA, LDA, RESET, ZERO )
778 * Generate the matrix C.
780 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
785 * Save every datum before calling the
807 * Call the subroutine.
810 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
811 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
815 CALL ZHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
816 $ BB, LDB, BETA, CC, LDC )
818 CALL ZSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
819 $ BB, LDB, BETA, CC, LDC )
822 * Check if error-exit was taken incorrectly.
825 WRITE( NOUT, FMT = 9994 )
830 * See what data changed inside subroutines.
832 ISAME( 1 ) = SIDES.EQ.SIDE
833 ISAME( 2 ) = UPLOS.EQ.UPLO
836 ISAME( 5 ) = ALS.EQ.ALPHA
837 ISAME( 6 ) = LZE( AS, AA, LAA )
838 ISAME( 7 ) = LDAS.EQ.LDA
839 ISAME( 8 ) = LZE( BS, BB, LBB )
840 ISAME( 9 ) = LDBS.EQ.LDB
841 ISAME( 10 ) = BLS.EQ.BETA
843 ISAME( 11 ) = LZE( CS, CC, LCC )
845 ISAME( 11 ) = LZERES( 'GE', ' ', M, N, CS,
848 ISAME( 12 ) = LDCS.EQ.LDC
850 * If data was incorrectly changed, report and
855 SAME = SAME.AND.ISAME( I )
856 IF( .NOT.ISAME( I ) )
857 $ WRITE( NOUT, FMT = 9998 )I
869 CALL ZMMCH( 'N', 'N', M, N, M, ALPHA, A,
870 $ NMAX, B, NMAX, BETA, C, NMAX,
871 $ CT, G, CC, LDC, EPS, ERR,
872 $ FATAL, NOUT, .TRUE. )
874 CALL ZMMCH( 'N', 'N', M, N, N, ALPHA, B,
875 $ NMAX, A, NMAX, BETA, C, NMAX,
876 $ CT, G, CC, LDC, EPS, ERR,
877 $ FATAL, NOUT, .TRUE. )
879 ERRMAX = MAX( ERRMAX, ERR )
880 * If got really bad answer, report and
900 IF( ERRMAX.LT.THRESH )THEN
901 WRITE( NOUT, FMT = 9999 )SNAME, NC
903 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
908 WRITE( NOUT, FMT = 9996 )SNAME
909 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
915 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
917 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
918 $ 'ANGED INCORRECTLY *******' )
919 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
920 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
921 $ ' - SUSPECT *******' )
922 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
923 9995 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
924 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
925 $ ',', F4.1, '), C,', I3, ') .' )
926 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
932 SUBROUTINE ZCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
933 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
934 $ B, BB, BS, CT, G, C )
936 * Tests ZTRMM and ZTRSM.
938 * Auxiliary routine for test program for Level 3 Blas.
940 * -- Written on 8-February-1989.
941 * Jack Dongarra, Argonne National Laboratory.
942 * Iain Duff, AERE Harwell.
943 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
944 * Sven Hammarling, Numerical Algorithms Group Ltd.
948 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
949 $ ONE = ( 1.0D0, 0.0D0 ) )
950 DOUBLE PRECISION RZERO
951 PARAMETER ( RZERO = 0.0D0 )
952 * .. Scalar Arguments ..
953 DOUBLE PRECISION EPS, THRESH
954 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
955 LOGICAL FATAL, REWI, TRACE
957 * .. Array Arguments ..
958 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
959 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
960 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
961 $ C( NMAX, NMAX ), CT( NMAX )
962 DOUBLE PRECISION G( NMAX )
963 INTEGER IDIM( NIDIM )
964 * .. Local Scalars ..
965 COMPLEX*16 ALPHA, ALS
966 DOUBLE PRECISION ERR, ERRMAX
967 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
968 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
970 LOGICAL LEFT, NULL, RESET, SAME
971 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
973 CHARACTER*2 ICHD, ICHS, ICHU
977 * .. External Functions ..
980 * .. External Subroutines ..
981 EXTERNAL ZMAKE, ZMMCH, ZTRMM, ZTRSM
982 * .. Intrinsic Functions ..
984 * .. Scalars in Common ..
987 * .. Common blocks ..
988 COMMON /INFOC/INFOT, NOUTC, OK, LERR
989 * .. Data statements ..
990 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
991 * .. Executable Statements ..
997 * Set up zero matrix for ZMMCH.
1004 DO 140 IM = 1, NIDIM
1007 DO 130 IN = 1, NIDIM
1009 * Set LDB to 1 more than minimum value if room.
1013 * Skip tests if not enough room.
1017 NULL = M.LE.0.OR.N.LE.0
1020 SIDE = ICHS( ICS: ICS )
1027 * Set LDA to 1 more than minimum value if room.
1031 * Skip tests if not enough room.
1037 UPLO = ICHU( ICU: ICU )
1040 TRANSA = ICHT( ICT: ICT )
1043 DIAG = ICHD( ICD: ICD )
1048 * Generate the matrix A.
1050 CALL ZMAKE( 'TR', UPLO, DIAG, NA, NA, A,
1051 $ NMAX, AA, LDA, RESET, ZERO )
1053 * Generate the matrix B.
1055 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
1056 $ BB, LDB, RESET, ZERO )
1060 * Save every datum before calling the
1079 * Call the subroutine.
1081 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1083 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1084 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1088 CALL ZTRMM( SIDE, UPLO, TRANSA, DIAG, M,
1089 $ N, ALPHA, AA, LDA, BB, LDB )
1090 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1092 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1093 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1097 CALL ZTRSM( SIDE, UPLO, TRANSA, DIAG, M,
1098 $ N, ALPHA, AA, LDA, BB, LDB )
1101 * Check if error-exit was taken incorrectly.
1104 WRITE( NOUT, FMT = 9994 )
1109 * See what data changed inside subroutines.
1111 ISAME( 1 ) = SIDES.EQ.SIDE
1112 ISAME( 2 ) = UPLOS.EQ.UPLO
1113 ISAME( 3 ) = TRANAS.EQ.TRANSA
1114 ISAME( 4 ) = DIAGS.EQ.DIAG
1115 ISAME( 5 ) = MS.EQ.M
1116 ISAME( 6 ) = NS.EQ.N
1117 ISAME( 7 ) = ALS.EQ.ALPHA
1118 ISAME( 8 ) = LZE( AS, AA, LAA )
1119 ISAME( 9 ) = LDAS.EQ.LDA
1121 ISAME( 10 ) = LZE( BS, BB, LBB )
1123 ISAME( 10 ) = LZERES( 'GE', ' ', M, N, BS,
1126 ISAME( 11 ) = LDBS.EQ.LDB
1128 * If data was incorrectly changed, report and
1133 SAME = SAME.AND.ISAME( I )
1134 IF( .NOT.ISAME( I ) )
1135 $ WRITE( NOUT, FMT = 9998 )I
1143 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1148 CALL ZMMCH( TRANSA, 'N', M, N, M,
1149 $ ALPHA, A, NMAX, B, NMAX,
1150 $ ZERO, C, NMAX, CT, G,
1151 $ BB, LDB, EPS, ERR,
1152 $ FATAL, NOUT, .TRUE. )
1154 CALL ZMMCH( 'N', TRANSA, M, N, N,
1155 $ ALPHA, B, NMAX, A, NMAX,
1156 $ ZERO, C, NMAX, CT, G,
1157 $ BB, LDB, EPS, ERR,
1158 $ FATAL, NOUT, .TRUE. )
1160 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1162 * Compute approximation to original
1167 C( I, J ) = BB( I + ( J - 1 )*
1169 BB( I + ( J - 1 )*LDB ) = ALPHA*
1175 CALL ZMMCH( TRANSA, 'N', M, N, M,
1176 $ ONE, A, NMAX, C, NMAX,
1177 $ ZERO, B, NMAX, CT, G,
1178 $ BB, LDB, EPS, ERR,
1179 $ FATAL, NOUT, .FALSE. )
1181 CALL ZMMCH( 'N', TRANSA, M, N, N,
1182 $ ONE, C, NMAX, A, NMAX,
1183 $ ZERO, B, NMAX, CT, G,
1184 $ BB, LDB, EPS, ERR,
1185 $ FATAL, NOUT, .FALSE. )
1188 ERRMAX = MAX( ERRMAX, ERR )
1189 * If got really bad answer, report and
1211 IF( ERRMAX.LT.THRESH )THEN
1212 WRITE( NOUT, FMT = 9999 )SNAME, NC
1214 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1219 WRITE( NOUT, FMT = 9996 )SNAME
1220 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
1221 $ N, ALPHA, LDA, LDB
1226 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1228 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1229 $ 'ANGED INCORRECTLY *******' )
1230 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1231 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1232 $ ' - SUSPECT *******' )
1233 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
1234 9995 FORMAT( 1X, I6, ': ', A8, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
1235 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
1237 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1243 SUBROUTINE ZCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1244 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1245 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
1247 * Tests ZHERK and ZSYRK.
1249 * Auxiliary routine for test program for Level 3 Blas.
1251 * -- Written on 8-February-1989.
1252 * Jack Dongarra, Argonne National Laboratory.
1253 * Iain Duff, AERE Harwell.
1254 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1255 * Sven Hammarling, Numerical Algorithms Group Ltd.
1259 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
1260 DOUBLE PRECISION RONE, RZERO
1261 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 )
1262 * .. Scalar Arguments ..
1263 DOUBLE PRECISION EPS, THRESH
1264 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1265 LOGICAL FATAL, REWI, TRACE
1267 * .. Array Arguments ..
1268 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1269 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1270 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1271 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1272 $ CS( NMAX*NMAX ), CT( NMAX )
1273 DOUBLE PRECISION G( NMAX )
1274 INTEGER IDIM( NIDIM )
1275 * .. Local Scalars ..
1276 COMPLEX*16 ALPHA, ALS, BETA, BETS
1277 DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1278 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1279 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1281 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1282 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1283 CHARACTER*2 ICHT, ICHU
1284 * .. Local Arrays ..
1286 * .. External Functions ..
1288 EXTERNAL LZE, LZERES
1289 * .. External Subroutines ..
1290 EXTERNAL ZHERK, ZMAKE, ZMMCH, ZSYRK
1291 * .. Intrinsic Functions ..
1292 INTRINSIC DCMPLX, MAX, DBLE
1293 * .. Scalars in Common ..
1294 INTEGER INFOT, NOUTC
1296 * .. Common blocks ..
1297 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1298 * .. Data statements ..
1299 DATA ICHT/'NC'/, ICHU/'UL'/
1300 * .. Executable Statements ..
1301 CONJ = SNAME( 2: 3 ).EQ.'HE'
1310 DO 100 IN = 1, NIDIM
1312 * Set LDC to 1 more than minimum value if room.
1316 * Skip tests if not enough room.
1325 TRANS = ICHT( ICT: ICT )
1327 IF( TRAN.AND..NOT.CONJ )
1336 * Set LDA to 1 more than minimum value if room.
1340 * Skip tests if not enough room.
1345 * Generate the matrix A.
1347 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
1351 UPLO = ICHU( ICU: ICU )
1357 RALPHA = DBLE( ALPHA )
1358 ALPHA = DCMPLX( RALPHA, RZERO )
1364 RBETA = DBLE( BETA )
1365 BETA = DCMPLX( RBETA, RZERO )
1369 $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
1370 $ RZERO ).AND.RBETA.EQ.RONE )
1372 * Generate the matrix C.
1374 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1375 $ NMAX, CC, LDC, RESET, ZERO )
1379 * Save every datum before calling the subroutine.
1404 * Call the subroutine.
1408 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1409 $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
1412 CALL ZHERK( UPLO, TRANS, N, K, RALPHA, AA,
1413 $ LDA, RBETA, CC, LDC )
1416 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1417 $ TRANS, N, K, ALPHA, LDA, BETA, LDC
1420 CALL ZSYRK( UPLO, TRANS, N, K, ALPHA, AA,
1421 $ LDA, BETA, CC, LDC )
1424 * Check if error-exit was taken incorrectly.
1427 WRITE( NOUT, FMT = 9992 )
1432 * See what data changed inside subroutines.
1434 ISAME( 1 ) = UPLOS.EQ.UPLO
1435 ISAME( 2 ) = TRANSS.EQ.TRANS
1436 ISAME( 3 ) = NS.EQ.N
1437 ISAME( 4 ) = KS.EQ.K
1439 ISAME( 5 ) = RALS.EQ.RALPHA
1441 ISAME( 5 ) = ALS.EQ.ALPHA
1443 ISAME( 6 ) = LZE( AS, AA, LAA )
1444 ISAME( 7 ) = LDAS.EQ.LDA
1446 ISAME( 8 ) = RBETS.EQ.RBETA
1448 ISAME( 8 ) = BETS.EQ.BETA
1451 ISAME( 9 ) = LZE( CS, CC, LCC )
1453 ISAME( 9 ) = LZERES( SNAME( 2: 3 ), UPLO, N,
1456 ISAME( 10 ) = LDCS.EQ.LDC
1458 * If data was incorrectly changed, report and
1463 SAME = SAME.AND.ISAME( I )
1464 IF( .NOT.ISAME( I ) )
1465 $ WRITE( NOUT, FMT = 9998 )I
1474 * Check the result column by column.
1491 CALL ZMMCH( TRANST, 'N', LJ, 1, K,
1492 $ ALPHA, A( 1, JJ ), NMAX,
1493 $ A( 1, J ), NMAX, BETA,
1494 $ C( JJ, J ), NMAX, CT, G,
1495 $ CC( JC ), LDC, EPS, ERR,
1496 $ FATAL, NOUT, .TRUE. )
1498 CALL ZMMCH( 'N', TRANST, LJ, 1, K,
1499 $ ALPHA, A( JJ, 1 ), NMAX,
1500 $ A( J, 1 ), NMAX, BETA,
1501 $ C( JJ, J ), NMAX, CT, G,
1502 $ CC( JC ), LDC, EPS, ERR,
1503 $ FATAL, NOUT, .TRUE. )
1510 ERRMAX = MAX( ERRMAX, ERR )
1511 * If got really bad answer, report and
1532 IF( ERRMAX.LT.THRESH )THEN
1533 WRITE( NOUT, FMT = 9999 )SNAME, NC
1535 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1541 $ WRITE( NOUT, FMT = 9995 )J
1544 WRITE( NOUT, FMT = 9996 )SNAME
1546 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
1549 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1556 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1558 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1559 $ 'ANGED INCORRECTLY *******' )
1560 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1561 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1562 $ ' - SUSPECT *******' )
1563 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
1564 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1565 9994 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1566 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
1568 9993 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1569 $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
1570 $ '), C,', I3, ') .' )
1571 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1577 SUBROUTINE ZCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1578 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1579 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
1581 * Tests ZHER2K and ZSYR2K.
1583 * Auxiliary routine for test program for Level 3 Blas.
1585 * -- Written on 8-February-1989.
1586 * Jack Dongarra, Argonne National Laboratory.
1587 * Iain Duff, AERE Harwell.
1588 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1589 * Sven Hammarling, Numerical Algorithms Group Ltd.
1592 COMPLEX*16 ZERO, ONE
1593 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
1594 $ ONE = ( 1.0D0, 0.0D0 ) )
1595 DOUBLE PRECISION RONE, RZERO
1596 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 )
1597 * .. Scalar Arguments ..
1598 DOUBLE PRECISION EPS, THRESH
1599 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1600 LOGICAL FATAL, REWI, TRACE
1602 * .. Array Arguments ..
1603 COMPLEX*16 AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1604 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1605 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1606 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1608 DOUBLE PRECISION G( NMAX )
1609 INTEGER IDIM( NIDIM )
1610 * .. Local Scalars ..
1611 COMPLEX*16 ALPHA, ALS, BETA, BETS
1612 DOUBLE PRECISION ERR, ERRMAX, RBETA, RBETS
1613 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1614 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1615 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1616 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1617 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1618 CHARACTER*2 ICHT, ICHU
1619 * .. Local Arrays ..
1621 * .. External Functions ..
1623 EXTERNAL LZE, LZERES
1624 * .. External Subroutines ..
1625 EXTERNAL ZHER2K, ZMAKE, ZMMCH, ZSYR2K
1626 * .. Intrinsic Functions ..
1627 INTRINSIC DCMPLX, DCONJG, MAX, DBLE
1628 * .. Scalars in Common ..
1629 INTEGER INFOT, NOUTC
1631 * .. Common blocks ..
1632 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1633 * .. Data statements ..
1634 DATA ICHT/'NC'/, ICHU/'UL'/
1635 * .. Executable Statements ..
1636 CONJ = SNAME( 2: 3 ).EQ.'HE'
1643 DO 130 IN = 1, NIDIM
1645 * Set LDC to 1 more than minimum value if room.
1649 * Skip tests if not enough room.
1654 DO 120 IK = 1, NIDIM
1658 TRANS = ICHT( ICT: ICT )
1660 IF( TRAN.AND..NOT.CONJ )
1669 * Set LDA to 1 more than minimum value if room.
1673 * Skip tests if not enough room.
1678 * Generate the matrix A.
1681 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
1682 $ LDA, RESET, ZERO )
1684 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
1688 * Generate the matrix B.
1693 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
1694 $ 2*NMAX, BB, LDB, RESET, ZERO )
1696 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
1697 $ NMAX, BB, LDB, RESET, ZERO )
1701 UPLO = ICHU( ICU: ICU )
1710 RBETA = DBLE( BETA )
1711 BETA = DCMPLX( RBETA, RZERO )
1715 $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
1716 $ ZERO ).AND.RBETA.EQ.RONE )
1718 * Generate the matrix C.
1720 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1721 $ NMAX, CC, LDC, RESET, ZERO )
1725 * Save every datum before calling the subroutine.
1750 * Call the subroutine.
1754 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1755 $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
1758 CALL ZHER2K( UPLO, TRANS, N, K, ALPHA, AA,
1759 $ LDA, BB, LDB, RBETA, CC, LDC )
1762 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1763 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
1766 CALL ZSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
1767 $ LDA, BB, LDB, BETA, CC, LDC )
1770 * Check if error-exit was taken incorrectly.
1773 WRITE( NOUT, FMT = 9992 )
1778 * See what data changed inside subroutines.
1780 ISAME( 1 ) = UPLOS.EQ.UPLO
1781 ISAME( 2 ) = TRANSS.EQ.TRANS
1782 ISAME( 3 ) = NS.EQ.N
1783 ISAME( 4 ) = KS.EQ.K
1784 ISAME( 5 ) = ALS.EQ.ALPHA
1785 ISAME( 6 ) = LZE( AS, AA, LAA )
1786 ISAME( 7 ) = LDAS.EQ.LDA
1787 ISAME( 8 ) = LZE( BS, BB, LBB )
1788 ISAME( 9 ) = LDBS.EQ.LDB
1790 ISAME( 10 ) = RBETS.EQ.RBETA
1792 ISAME( 10 ) = BETS.EQ.BETA
1795 ISAME( 11 ) = LZE( CS, CC, LCC )
1797 ISAME( 11 ) = LZERES( 'HE', UPLO, N, N, CS,
1800 ISAME( 12 ) = LDCS.EQ.LDC
1802 * If data was incorrectly changed, report and
1807 SAME = SAME.AND.ISAME( I )
1808 IF( .NOT.ISAME( I ) )
1809 $ WRITE( NOUT, FMT = 9998 )I
1818 * Check the result column by column.
1837 W( I ) = ALPHA*AB( ( J - 1 )*2*
1840 W( K + I ) = DCONJG( ALPHA )*
1849 CALL ZMMCH( TRANST, 'N', LJ, 1, 2*K,
1850 $ ONE, AB( JJAB ), 2*NMAX, W,
1851 $ 2*NMAX, BETA, C( JJ, J ),
1852 $ NMAX, CT, G, CC( JC ), LDC,
1853 $ EPS, ERR, FATAL, NOUT,
1858 W( I ) = ALPHA*DCONJG( AB( ( K +
1859 $ I - 1 )*NMAX + J ) )
1860 W( K + I ) = DCONJG( ALPHA*
1861 $ AB( ( I - 1 )*NMAX +
1864 W( I ) = ALPHA*AB( ( K + I - 1 )*
1867 $ AB( ( I - 1 )*NMAX +
1871 CALL ZMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
1872 $ AB( JJ ), NMAX, W, 2*NMAX,
1873 $ BETA, C( JJ, J ), NMAX, CT,
1874 $ G, CC( JC ), LDC, EPS, ERR,
1875 $ FATAL, NOUT, .TRUE. )
1882 $ JJAB = JJAB + 2*NMAX
1884 ERRMAX = MAX( ERRMAX, ERR )
1885 * If got really bad answer, report and
1906 IF( ERRMAX.LT.THRESH )THEN
1907 WRITE( NOUT, FMT = 9999 )SNAME, NC
1909 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1915 $ WRITE( NOUT, FMT = 9995 )J
1918 WRITE( NOUT, FMT = 9996 )SNAME
1920 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1921 $ LDA, LDB, RBETA, LDC
1923 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1924 $ LDA, LDB, BETA, LDC
1930 9999 FORMAT( ' ', A8, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1932 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1933 $ 'ANGED INCORRECTLY *******' )
1934 9997 FORMAT( ' ', A8, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1935 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1936 $ ' - SUSPECT *******' )
1937 9996 FORMAT( ' ******* ', A8, ' FAILED ON CALL NUMBER:' )
1938 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1939 9994 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1940 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
1941 $ ', C,', I3, ') .' )
1942 9993 FORMAT( 1X, I6, ': ', A8, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1943 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
1944 $ ',', F4.1, '), C,', I3, ') .' )
1945 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1951 SUBROUTINE ZCHKE( ISNUM, SRNAMT, NOUT )
1953 * Tests the error exits from the Level 3 Blas.
1954 * Requires a special version of the error-handling routine XERBLA.
1955 * ALPHA, RALPHA, BETA, RBETA, A, B and C should not need to be defined.
1957 * Auxiliary routine for test program for Level 3 Blas.
1959 * -- Written on 8-February-1989.
1960 * Jack Dongarra, Argonne National Laboratory.
1961 * Iain Duff, AERE Harwell.
1962 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1963 * Sven Hammarling, Numerical Algorithms Group Ltd.
1965 * .. Scalar Arguments ..
1968 * .. Scalars in Common ..
1969 INTEGER INFOT, NOUTC
1971 * .. Local Scalars ..
1972 COMPLEX*16 ALPHA, BETA
1973 DOUBLE PRECISION RALPHA, RBETA
1974 * .. Local Arrays ..
1975 COMPLEX*16 A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
1976 * .. External Subroutines ..
1977 EXTERNAL ZGEMM3M, ZHEMM, ZHER2K, ZHERK, CHKXER, ZSYMM,
1978 $ ZSYR2K, ZSYRK, ZTRMM, ZTRSM
1979 * .. Common blocks ..
1980 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1981 * .. Executable Statements ..
1982 * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
1983 * if anything is wrong.
1985 * LERR is set to .TRUE. by the special version of XERBLA each time
1986 * it is called, and is then tested and re-set by CHKXER.
1988 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
1991 CALL ZGEMM3M( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1992 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1994 CALL ZGEMM3M( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1995 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1997 CALL ZGEMM3M( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1998 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2000 CALL ZGEMM3M( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2001 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2003 CALL ZGEMM3M( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2004 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2006 CALL ZGEMM3M( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2007 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2009 CALL ZGEMM3M( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2010 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2012 CALL ZGEMM3M( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2013 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2015 CALL ZGEMM3M( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2016 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2018 CALL ZGEMM3M( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2019 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2021 CALL ZGEMM3M( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2022 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2024 CALL ZGEMM3M( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2025 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2027 CALL ZGEMM3M( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2028 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2030 CALL ZGEMM3M( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2031 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2033 CALL ZGEMM3M( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2034 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2036 CALL ZGEMM3M( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2037 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2039 CALL ZGEMM3M( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2040 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2042 CALL ZGEMM3M( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2043 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2045 CALL ZGEMM3M( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2046 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2048 CALL ZGEMM3M( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2049 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2051 CALL ZGEMM3M( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2052 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2054 CALL ZGEMM3M( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2055 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2057 CALL ZGEMM3M( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2058 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2060 CALL ZGEMM3M( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2061 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2063 CALL ZGEMM3M( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2064 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2066 CALL ZGEMM3M( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2067 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2069 CALL ZGEMM3M( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2070 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2072 CALL ZGEMM3M( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2073 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2075 CALL ZGEMM3M( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2076 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2078 CALL ZGEMM3M( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2079 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2081 CALL ZGEMM3M( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2082 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2084 CALL ZGEMM3M( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2085 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2087 CALL ZGEMM3M( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2088 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2090 CALL ZGEMM3M( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2091 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2093 CALL ZGEMM3M( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2094 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2096 CALL ZGEMM3M( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2097 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2099 CALL ZGEMM3M( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2100 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2102 CALL ZGEMM3M( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2103 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2105 CALL ZGEMM3M( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2106 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2108 CALL ZGEMM3M( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2109 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2111 CALL ZGEMM3M( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2112 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2114 CALL ZGEMM3M( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2115 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2117 CALL ZGEMM3M( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2118 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2120 CALL ZGEMM3M( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2121 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2123 CALL ZGEMM3M( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2124 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2126 CALL ZGEMM3M( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2127 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2129 CALL ZGEMM3M( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2130 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2132 CALL ZGEMM3M( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2133 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2135 CALL ZGEMM3M( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2136 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2138 CALL ZGEMM3M( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2139 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2141 CALL ZGEMM3M( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2142 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2144 CALL ZGEMM3M( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2145 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2147 CALL ZGEMM3M( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2148 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2150 CALL ZGEMM3M( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2151 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2153 CALL ZGEMM3M( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2154 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2156 CALL ZGEMM3M( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2157 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2159 CALL ZGEMM3M( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2160 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2162 CALL ZGEMM3M( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2163 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2165 CALL ZGEMM3M( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2166 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2168 CALL ZGEMM3M( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2169 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2172 CALL ZHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2173 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2175 CALL ZHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2176 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2178 CALL ZHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2179 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2181 CALL ZHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2182 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2184 CALL ZHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2185 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2187 CALL ZHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2188 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2190 CALL ZHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2191 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2193 CALL ZHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2194 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2196 CALL ZHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2197 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2199 CALL ZHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2200 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2202 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2203 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2205 CALL ZHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2206 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2208 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2209 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2211 CALL ZHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2212 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2214 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2215 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2217 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2218 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2220 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2221 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2223 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2224 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2226 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2227 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2229 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2230 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2232 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2233 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2235 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2236 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2239 CALL ZSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2240 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2242 CALL ZSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2243 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2245 CALL ZSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2246 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2248 CALL ZSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2249 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2251 CALL ZSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2252 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2254 CALL ZSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2255 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2257 CALL ZSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2258 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2260 CALL ZSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2261 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2263 CALL ZSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2264 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2266 CALL ZSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2267 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2269 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2270 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2272 CALL ZSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2273 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2275 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2276 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2278 CALL ZSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2279 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2281 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2282 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2284 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2285 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2287 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2288 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2290 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2291 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2293 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2294 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2296 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2297 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2299 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2300 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2302 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2303 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2306 CALL ZTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2307 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2309 CALL ZTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2310 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2312 CALL ZTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2313 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2315 CALL ZTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2316 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2318 CALL ZTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2319 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2321 CALL ZTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2322 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2324 CALL ZTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2325 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2327 CALL ZTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2328 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2330 CALL ZTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2331 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2333 CALL ZTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2334 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2336 CALL ZTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2337 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2339 CALL ZTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2340 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2342 CALL ZTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2343 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2345 CALL ZTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2346 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2348 CALL ZTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2349 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2351 CALL ZTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2352 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2354 CALL ZTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2355 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2357 CALL ZTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2358 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2360 CALL ZTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2361 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2363 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2364 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2366 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2367 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2369 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2370 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2372 CALL ZTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2373 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2375 CALL ZTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2376 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2378 CALL ZTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2379 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2381 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2382 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2384 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2385 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2387 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2388 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2390 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2391 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2393 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2394 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2396 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2397 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2399 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2400 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2402 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2403 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2405 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2406 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2408 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2409 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2411 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2412 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2414 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2415 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2417 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2418 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2420 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2421 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2423 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2424 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2426 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2427 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2429 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2430 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2432 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2433 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2435 CALL ZTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2436 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2438 CALL ZTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2439 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2441 CALL ZTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2442 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2444 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2445 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2447 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2448 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2450 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2451 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2453 CALL ZTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2454 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2456 CALL ZTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2457 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2459 CALL ZTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2460 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2463 CALL ZTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2464 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2466 CALL ZTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2467 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2469 CALL ZTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2470 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2472 CALL ZTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2473 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2475 CALL ZTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2476 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2478 CALL ZTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2479 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2481 CALL ZTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2482 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2484 CALL ZTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2485 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2487 CALL ZTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2488 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2490 CALL ZTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2491 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2493 CALL ZTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2494 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2496 CALL ZTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2497 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2499 CALL ZTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2500 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2502 CALL ZTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2503 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2505 CALL ZTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2506 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2508 CALL ZTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2509 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2511 CALL ZTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2512 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2514 CALL ZTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2515 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2517 CALL ZTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2518 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2520 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2521 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2523 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2524 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2526 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2527 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2529 CALL ZTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2530 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2532 CALL ZTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2533 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2535 CALL ZTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2536 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2538 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2539 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2541 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2542 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2544 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2545 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2547 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2548 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2550 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2551 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2553 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2554 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2556 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2557 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2559 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2560 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2562 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2563 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2565 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2566 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2568 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2569 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2571 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2572 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2574 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2575 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2577 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2578 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2580 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2581 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2583 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2584 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2586 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2587 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2589 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2590 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2592 CALL ZTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2593 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2595 CALL ZTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2596 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2598 CALL ZTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2599 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2601 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2602 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2604 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2605 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2607 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2608 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2610 CALL ZTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2611 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2613 CALL ZTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2614 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2616 CALL ZTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2617 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2620 CALL ZHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2621 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2623 CALL ZHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2624 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2626 CALL ZHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2627 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2629 CALL ZHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2630 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2632 CALL ZHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2633 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2635 CALL ZHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2636 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2638 CALL ZHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2639 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2641 CALL ZHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2642 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2644 CALL ZHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2645 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2647 CALL ZHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2648 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2650 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2651 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2653 CALL ZHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2654 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2656 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2657 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2659 CALL ZHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2660 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2662 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2663 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2665 CALL ZHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2666 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2668 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2669 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2671 CALL ZHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2672 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2675 CALL ZSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2676 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2678 CALL ZSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2679 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2681 CALL ZSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2682 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2684 CALL ZSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2685 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2687 CALL ZSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2688 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2690 CALL ZSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2691 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2693 CALL ZSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2694 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2696 CALL ZSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2697 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2699 CALL ZSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2700 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2702 CALL ZSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2703 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2705 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2706 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2708 CALL ZSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2709 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2711 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2712 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2714 CALL ZSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2715 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2717 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2718 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2720 CALL ZSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2721 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2723 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2724 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2726 CALL ZSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2727 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2730 CALL ZHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2731 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2733 CALL ZHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2734 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2736 CALL ZHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2737 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2739 CALL ZHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2740 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2742 CALL ZHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2743 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2745 CALL ZHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2746 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2748 CALL ZHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2749 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2751 CALL ZHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2752 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2754 CALL ZHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2755 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2757 CALL ZHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2758 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2760 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2761 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2763 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2764 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2766 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2767 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2769 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2770 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2772 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2773 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2775 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2776 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2778 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2779 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2781 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2782 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2784 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2785 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2787 CALL ZHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2788 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2790 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2791 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2793 CALL ZHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2794 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2797 CALL ZSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2798 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2800 CALL ZSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2801 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2803 CALL ZSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2804 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2806 CALL ZSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2807 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2809 CALL ZSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2810 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2812 CALL ZSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2813 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2815 CALL ZSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2816 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2818 CALL ZSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2819 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2821 CALL ZSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2822 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2824 CALL ZSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2825 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2827 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2828 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2830 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2831 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2833 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2834 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2836 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2837 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2839 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2840 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2842 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2843 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2845 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2846 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2848 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2849 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2851 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2852 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2854 CALL ZSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2855 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2857 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2858 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2860 CALL ZSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2861 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2864 WRITE( NOUT, FMT = 9999 )SRNAMT
2866 WRITE( NOUT, FMT = 9998 )SRNAMT
2870 9999 FORMAT( ' ', A8, ' PASSED THE TESTS OF ERROR-EXITS' )
2871 9998 FORMAT( ' ******* ', A8, ' FAILED THE TESTS OF ERROR-EXITS *****',
2877 SUBROUTINE ZMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2880 * Generates values for an M by N matrix A.
2881 * Stores the values in the array AA in the data structure required
2882 * by the routine, with unwanted elements set to rogue value.
2884 * TYPE is 'GE', 'HE', 'SY' or 'TR'.
2886 * Auxiliary routine for test program for Level 3 Blas.
2888 * -- Written on 8-February-1989.
2889 * Jack Dongarra, Argonne National Laboratory.
2890 * Iain Duff, AERE Harwell.
2891 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2892 * Sven Hammarling, Numerical Algorithms Group Ltd.
2895 COMPLEX*16 ZERO, ONE
2896 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
2897 $ ONE = ( 1.0D0, 0.0D0 ) )
2899 PARAMETER ( ROGUE = ( -1.0D10, 1.0D10 ) )
2900 DOUBLE PRECISION RZERO
2901 PARAMETER ( RZERO = 0.0D0 )
2902 DOUBLE PRECISION RROGUE
2903 PARAMETER ( RROGUE = -1.0D10 )
2904 * .. Scalar Arguments ..
2906 INTEGER LDA, M, N, NMAX
2908 CHARACTER*1 DIAG, UPLO
2910 * .. Array Arguments ..
2911 COMPLEX*16 A( NMAX, * ), AA( * )
2912 * .. Local Scalars ..
2913 INTEGER I, IBEG, IEND, J, JJ
2914 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2915 * .. External Functions ..
2918 * .. Intrinsic Functions ..
2919 INTRINSIC DCMPLX, DCONJG, DBLE
2920 * .. Executable Statements ..
2925 UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
2926 LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
2927 UNIT = TRI.AND.DIAG.EQ.'U'
2929 * Generate data in array A.
2933 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2935 A( I, J ) = ZBEG( RESET ) + TRANSL
2937 * Set some elements to zero
2938 IF( N.GT.3.AND.J.EQ.N/2 )
2941 A( J, I ) = DCONJG( A( I, J ) )
2943 A( J, I ) = A( I, J )
2951 $ A( J, J ) = DCMPLX( DBLE( A( J, J ) ), RZERO )
2953 $ A( J, J ) = A( J, J ) + ONE
2958 * Store elements in array AS in data structure required by routine.
2960 IF( TYPE.EQ.'GE' )THEN
2963 AA( I + ( J - 1 )*LDA ) = A( I, J )
2965 DO 40 I = M + 1, LDA
2966 AA( I + ( J - 1 )*LDA ) = ROGUE
2969 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
2986 DO 60 I = 1, IBEG - 1
2987 AA( I + ( J - 1 )*LDA ) = ROGUE
2989 DO 70 I = IBEG, IEND
2990 AA( I + ( J - 1 )*LDA ) = A( I, J )
2992 DO 80 I = IEND + 1, LDA
2993 AA( I + ( J - 1 )*LDA ) = ROGUE
2996 JJ = J + ( J - 1 )*LDA
2997 AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE )
3006 SUBROUTINE ZMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
3007 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
3010 * Checks the results of the computational tests.
3012 * Auxiliary routine for test program for Level 3 Blas.
3014 * -- Written on 8-February-1989.
3015 * Jack Dongarra, Argonne National Laboratory.
3016 * Iain Duff, AERE Harwell.
3017 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3018 * Sven Hammarling, Numerical Algorithms Group Ltd.
3022 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
3023 DOUBLE PRECISION RZERO, RONE
3024 PARAMETER ( RZERO = 0.0D0, RONE = 1.0D0 )
3025 * .. Scalar Arguments ..
3026 COMPLEX*16 ALPHA, BETA
3027 DOUBLE PRECISION EPS, ERR
3028 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
3030 CHARACTER*1 TRANSA, TRANSB
3031 * .. Array Arguments ..
3032 COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ),
3033 $ CC( LDCC, * ), CT( * )
3034 DOUBLE PRECISION G( * )
3035 * .. Local Scalars ..
3037 DOUBLE PRECISION ERRI
3039 LOGICAL CTRANA, CTRANB, TRANA, TRANB
3040 * .. Intrinsic Functions ..
3041 INTRINSIC ABS, DIMAG, DCONJG, MAX, DBLE, SQRT
3042 * .. Statement Functions ..
3043 DOUBLE PRECISION ABS1
3044 * .. Statement Function definitions ..
3045 ABS1( CL ) = ABS( DBLE( CL ) ) + ABS( DIMAG( CL ) )
3046 * .. Executable Statements ..
3047 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
3048 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
3049 CTRANA = TRANSA.EQ.'C'
3050 CTRANB = TRANSB.EQ.'C'
3052 * Compute expected result, one column at a time, in CT using data
3054 * Compute gauges in G.
3062 IF( .NOT.TRANA.AND..NOT.TRANB )THEN
3065 CT( I ) = CT( I ) + A( I, K )*B( K, J )
3066 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
3069 ELSE IF( TRANA.AND..NOT.TRANB )THEN
3073 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*B( K, J )
3074 G( I ) = G( I ) + ABS1( A( K, I ) )*
3081 CT( I ) = CT( I ) + A( K, I )*B( K, J )
3082 G( I ) = G( I ) + ABS1( A( K, I ) )*
3087 ELSE IF( .NOT.TRANA.AND.TRANB )THEN
3091 CT( I ) = CT( I ) + A( I, K )*DCONJG( B( J, K ) )
3092 G( I ) = G( I ) + ABS1( A( I, K ) )*
3099 CT( I ) = CT( I ) + A( I, K )*B( J, K )
3100 G( I ) = G( I ) + ABS1( A( I, K ) )*
3105 ELSE IF( TRANA.AND.TRANB )THEN
3110 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*
3111 $ DCONJG( B( J, K ) )
3112 G( I ) = G( I ) + ABS1( A( K, I ) )*
3119 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*
3121 G( I ) = G( I ) + ABS1( A( K, I ) )*
3130 CT( I ) = CT( I ) + A( K, I )*
3131 $ DCONJG( B( J, K ) )
3132 G( I ) = G( I ) + ABS1( A( K, I ) )*
3139 CT( I ) = CT( I ) + A( K, I )*B( J, K )
3140 G( I ) = G( I ) + ABS1( A( K, I ) )*
3148 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
3149 G( I ) = ABS1( ALPHA )*G( I ) +
3150 $ ABS1( BETA )*ABS1( C( I, J ) )
3153 * Compute the error ratio for this result.
3157 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
3158 IF( G( I ).NE.RZERO )
3159 $ ERRI = ERRI/G( I )
3160 ERR = MAX( ERR, ERRI )
3161 IF( ERR*SQRT( EPS ).GE.RONE )
3167 * If the loop completes, all results are at least half accurate.
3170 * Report fatal error.
3173 WRITE( NOUT, FMT = 9999 )
3176 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
3178 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
3182 $ WRITE( NOUT, FMT = 9997 )J
3187 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3188 $ 'F ACCURATE *******', /' EXPECTED RE',
3189 $ 'SULT COMPUTED RESULT' )
3190 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
3191 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
3196 LOGICAL FUNCTION LZE( RI, RJ, LR )
3198 * Tests if two arrays are identical.
3200 * Auxiliary routine for test program for Level 3 Blas.
3202 * -- Written on 8-February-1989.
3203 * Jack Dongarra, Argonne National Laboratory.
3204 * Iain Duff, AERE Harwell.
3205 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3206 * Sven Hammarling, Numerical Algorithms Group Ltd.
3208 * .. Scalar Arguments ..
3210 * .. Array Arguments ..
3211 COMPLEX*16 RI( * ), RJ( * )
3212 * .. Local Scalars ..
3214 * .. Executable Statements ..
3216 IF( RI( I ).NE.RJ( I ) )
3228 LOGICAL FUNCTION LZERES( TYPE, UPLO, M, N, AA, AS, LDA )
3230 * Tests if selected elements in two arrays are equal.
3232 * TYPE is 'GE' or 'HE' or 'SY'.
3234 * Auxiliary routine for test program for Level 3 Blas.
3236 * -- Written on 8-February-1989.
3237 * Jack Dongarra, Argonne National Laboratory.
3238 * Iain Duff, AERE Harwell.
3239 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3240 * Sven Hammarling, Numerical Algorithms Group Ltd.
3242 * .. Scalar Arguments ..
3246 * .. Array Arguments ..
3247 COMPLEX*16 AA( LDA, * ), AS( LDA, * )
3248 * .. Local Scalars ..
3249 INTEGER I, IBEG, IEND, J
3251 * .. Executable Statements ..
3253 IF( TYPE.EQ.'GE' )THEN
3255 DO 10 I = M + 1, LDA
3256 IF( AA( I, J ).NE.AS( I, J ) )
3260 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
3269 DO 30 I = 1, IBEG - 1
3270 IF( AA( I, J ).NE.AS( I, J ) )
3273 DO 40 I = IEND + 1, LDA
3274 IF( AA( I, J ).NE.AS( I, J ) )
3290 COMPLEX*16 FUNCTION ZBEG( RESET )
3292 * Generates complex numbers as pairs of random numbers uniformly
3293 * distributed between -0.5 and 0.5.
3295 * Auxiliary routine for test program for Level 3 Blas.
3297 * -- Written on 8-February-1989.
3298 * Jack Dongarra, Argonne National Laboratory.
3299 * Iain Duff, AERE Harwell.
3300 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3301 * Sven Hammarling, Numerical Algorithms Group Ltd.
3303 * .. Scalar Arguments ..
3305 * .. Local Scalars ..
3306 INTEGER I, IC, J, MI, MJ
3307 * .. Save statement ..
3308 SAVE I, IC, J, MI, MJ
3309 * .. Intrinsic Functions ..
3311 * .. Executable Statements ..
3313 * Initialize local variables.
3322 * The sequence of values of I or J is bounded between 1 and 999.
3323 * If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
3324 * If initial I or J = 4 or 8, the period will be 25.
3325 * If initial I or J = 5, the period will be 10.
3326 * IC is used to break up the period by skipping 1 value of I or J
3332 I = I - 1000*( I/1000 )
3333 J = J - 1000*( J/1000 )
3338 ZBEG = DCMPLX( ( I - 500 )/1001.0D0, ( J - 500 )/1001.0D0 )
3344 DOUBLE PRECISION FUNCTION DDIFF( X, Y )
3346 * Auxiliary routine for test program for Level 3 Blas.
3348 * -- Written on 8-February-1989.
3349 * Jack Dongarra, Argonne National Laboratory.
3350 * Iain Duff, AERE Harwell.
3351 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3352 * Sven Hammarling, Numerical Algorithms Group Ltd.
3354 * .. Scalar Arguments ..
3355 DOUBLE PRECISION X, Y
3356 * .. Executable Statements ..
3363 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3365 * Tests whether XERBLA has detected an error when it should.
3367 * Auxiliary routine for test program for Level 3 Blas.
3369 * -- Written on 8-February-1989.
3370 * Jack Dongarra, Argonne National Laboratory.
3371 * Iain Duff, AERE Harwell.
3372 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3373 * Sven Hammarling, Numerical Algorithms Group Ltd.
3375 * .. Scalar Arguments ..
3379 * .. Executable Statements ..
3381 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3387 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3388 $ 'ETECTED BY ', A8, ' *****' )
3393 SUBROUTINE XERBLA( SRNAME, INFO )
3395 * This is a special version of XERBLA to be used only as part of
3396 * the test program for testing error exits from the Level 3 BLAS
3399 * XERBLA is an error handler for the Level 3 BLAS routines.
3401 * It is called by the Level 3 BLAS routines if an input parameter is
3404 * Auxiliary routine for test program for Level 3 Blas.
3406 * -- Written on 8-February-1989.
3407 * Jack Dongarra, Argonne National Laboratory.
3408 * Iain Duff, AERE Harwell.
3409 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3410 * Sven Hammarling, Numerical Algorithms Group Ltd.
3412 * .. Scalar Arguments ..
3415 * .. Scalars in Common ..
3419 * .. Common blocks ..
3420 COMMON /INFOC/INFOT, NOUT, OK, LERR
3421 COMMON /SRNAMC/SRNAMT
3422 * .. Executable Statements ..
3424 IF( INFO.NE.INFOT )THEN
3425 IF( INFOT.NE.0 )THEN
3426 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3428 WRITE( NOUT, FMT = 9997 )INFO
3432 IF( SRNAME.NE.SRNAMT )THEN
3433 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3438 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
3439 $ ' OF ', I2, ' *******' )
3440 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A8, ' INSTE',
3441 $ 'AD OF ', A8, ' *******' )
3442 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,