3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
19 *> Test program for the COMPLEX*16 Level 3 Blas.
21 *> The program must be driven by a short data file. The first 14 records
22 *> of the file are read using list-directed input, the last 9 records
23 *> are read using the format ( A6, L2 ). An annotated example of a data
24 *> file can be obtained by deleting the first 3 characters from the
25 *> following 23 lines:
26 *> 'zblat3.out' NAME OF SUMMARY OUTPUT FILE
27 *> 6 UNIT NUMBER OF SUMMARY FILE
28 *> 'ZBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
29 *> -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
30 *> F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
31 *> F LOGICAL FLAG, T TO STOP ON FAILURES.
32 *> T LOGICAL FLAG, T TO TEST ERROR EXITS.
33 *> 16.0 THRESHOLD VALUE OF TEST RATIO
34 *> 6 NUMBER OF VALUES OF N
35 *> 0 1 2 3 5 9 VALUES OF N
36 *> 3 NUMBER OF VALUES OF ALPHA
37 *> (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA
38 *> 3 NUMBER OF VALUES OF BETA
39 *> (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA
40 *> ZGEMM T PUT F FOR NO TEST. SAME COLUMNS.
41 *> ZHEMM T PUT F FOR NO TEST. SAME COLUMNS.
42 *> ZSYMM T PUT F FOR NO TEST. SAME COLUMNS.
43 *> ZTRMM T PUT F FOR NO TEST. SAME COLUMNS.
44 *> ZTRSM T PUT F FOR NO TEST. SAME COLUMNS.
45 *> ZHERK T PUT F FOR NO TEST. SAME COLUMNS.
46 *> ZSYRK T PUT F FOR NO TEST. SAME COLUMNS.
47 *> ZHER2K T PUT F FOR NO TEST. SAME COLUMNS.
48 *> ZSYR2K T PUT F FOR NO TEST. SAME COLUMNS.
56 *> Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S.
57 *> A Set of Level 3 Basic Linear Algebra Subprograms.
59 *> Technical Memorandum No.88 (Revision 1), Mathematics and
60 *> Computer Science Division, Argonne National Laboratory, 9700
61 *> South Cass Avenue, Argonne, Illinois 60439, US.
63 *> -- Written on 8-February-1989.
64 *> Jack Dongarra, Argonne National Laboratory.
65 *> Iain Duff, AERE Harwell.
66 *> Jeremy Du Croz, Numerical Algorithms Group Ltd.
67 *> Sven Hammarling, Numerical Algorithms Group Ltd.
69 *> 10-9-00: Change STATUS='NEW' to 'UNKNOWN' so that the testers
70 *> can be run multiple times without deleting generated
71 *> output files (susan)
77 *> \author Univ. of Tennessee
78 *> \author Univ. of California Berkeley
79 *> \author Univ. of Colorado Denver
84 *> \ingroup complex16_blas_testing
86 * =====================================================================
89 * -- Reference BLAS test routine (version 3.7.0) --
90 * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
91 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
94 * =====================================================================
100 PARAMETER ( NSUBS = 9 )
102 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
103 $ ONE = ( 1.0D0, 0.0D0 ) )
104 DOUBLE PRECISION RZERO
105 PARAMETER ( RZERO = 0.0D0 )
107 PARAMETER ( NMAX = 65 )
108 INTEGER NIDMAX, NALMAX, NBEMAX
109 PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 )
110 * .. Local Scalars ..
111 DOUBLE PRECISION EPS, ERR, THRESH
112 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NOUT, NTRA
113 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
115 CHARACTER*1 TRANSA, TRANSB
117 CHARACTER*32 SNAPS, SUMMRY
119 COMPLEX*16 AA( NMAX*NMAX ), AB( NMAX, 2*NMAX ),
120 $ ALF( NALMAX ), AS( NMAX*NMAX ),
121 $ BB( NMAX*NMAX ), BET( NBEMAX ),
122 $ BS( NMAX*NMAX ), C( NMAX, NMAX ),
123 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
125 DOUBLE PRECISION G( NMAX )
126 INTEGER IDIM( NIDMAX )
127 LOGICAL LTEST( NSUBS )
128 CHARACTER*6 SNAMES( NSUBS )
129 * .. External Functions ..
130 DOUBLE PRECISION DDIFF
133 * .. External Subroutines ..
134 EXTERNAL ZCHK1, ZCHK2, ZCHK3, ZCHK4, ZCHK5, ZCHKE, ZMMCH
135 * .. Intrinsic Functions ..
137 * .. Scalars in Common ..
141 * .. Common blocks ..
142 COMMON /INFOC/INFOT, NOUTC, OK, LERR
143 COMMON /SRNAMC/SRNAMT
144 * .. Data statements ..
145 DATA SNAMES/'ZGEMM ', 'ZHEMM ', 'ZSYMM ', 'ZTRMM ',
146 $ 'ZTRSM ', 'ZHERK ', 'ZSYRK ', 'ZHER2K',
148 * .. Executable Statements ..
150 * Read name and unit number for summary output file and open file.
152 READ( NIN, FMT = * )SUMMRY
153 READ( NIN, FMT = * )NOUT
154 OPEN( NOUT, FILE = SUMMRY, STATUS = 'UNKNOWN' )
157 * Read name and unit number for snapshot output file and open file.
159 READ( NIN, FMT = * )SNAPS
160 READ( NIN, FMT = * )NTRA
163 OPEN( NTRA, FILE = SNAPS, STATUS = 'UNKNOWN' )
165 * Read the flag that directs rewinding of the snapshot file.
166 READ( NIN, FMT = * )REWI
167 REWI = REWI.AND.TRACE
168 * Read the flag that directs stopping on any failure.
169 READ( NIN, FMT = * )SFATAL
170 * Read the flag that indicates whether error exits are to be tested.
171 READ( NIN, FMT = * )TSTERR
172 * Read the threshold value of the test ratio
173 READ( NIN, FMT = * )THRESH
175 * Read and check the parameter values for the tests.
178 READ( NIN, FMT = * )NIDIM
179 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
180 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
183 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
185 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
186 WRITE( NOUT, FMT = 9996 )NMAX
191 READ( NIN, FMT = * )NALF
192 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
193 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
196 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
198 READ( NIN, FMT = * )NBET
199 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
200 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
203 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
205 * Report values of parameters.
207 WRITE( NOUT, FMT = 9995 )
208 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
209 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
210 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
211 IF( .NOT.TSTERR )THEN
212 WRITE( NOUT, FMT = * )
213 WRITE( NOUT, FMT = 9984 )
215 WRITE( NOUT, FMT = * )
216 WRITE( NOUT, FMT = 9999 )THRESH
217 WRITE( NOUT, FMT = * )
219 * Read names of subroutines and flags which indicate
220 * whether they are to be tested.
225 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
227 IF( SNAMET.EQ.SNAMES( I ) )
230 WRITE( NOUT, FMT = 9990 )SNAMET
232 50 LTEST( I ) = LTESTT
238 * Compute EPS (the machine precision).
241 WRITE( NOUT, FMT = 9998 )EPS
243 * Check the reliability of ZMMCH using exact data.
248 AB( I, J ) = MAX( I - J + 1, 0 )
250 AB( J, NMAX + 1 ) = J
251 AB( 1, NMAX + J ) = J
255 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
257 * CC holds the exact result. On exit from ZMMCH CT holds
258 * the result computed by ZMMCH.
261 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
262 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
263 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
264 SAME = LZE( CC, CT, N )
265 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
266 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
270 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
271 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
272 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
273 SAME = LZE( CC, CT, N )
274 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
275 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
279 AB( J, NMAX + 1 ) = N - J + 1
280 AB( 1, NMAX + J ) = N - J + 1
283 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
284 $ ( ( J + 1 )*J*( J - 1 ) )/3
288 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
289 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
290 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
291 SAME = LZE( CC, CT, N )
292 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
293 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
297 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
298 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
299 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
300 SAME = LZE( CC, CT, N )
301 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
302 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
306 * Test each subroutine in turn.
308 DO 200 ISNUM = 1, NSUBS
309 WRITE( NOUT, FMT = * )
310 IF( .NOT.LTEST( ISNUM ) )THEN
311 * Subprogram is not to be tested.
312 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
314 SRNAMT = SNAMES( ISNUM )
317 CALL ZCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
318 WRITE( NOUT, FMT = * )
324 GO TO ( 140, 150, 150, 160, 160, 170, 170,
327 140 CALL ZCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
328 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
329 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
332 * Test ZHEMM, 02, ZSYMM, 03.
333 150 CALL ZCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
334 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
335 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
338 * Test ZTRMM, 04, ZTRSM, 05.
339 160 CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
340 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
341 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
343 * Test ZHERK, 06, ZSYRK, 07.
344 170 CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
345 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
346 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
349 * Test ZHER2K, 08, ZSYR2K, 09.
350 180 CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
351 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
352 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
355 190 IF( FATAL.AND.SFATAL )
359 WRITE( NOUT, FMT = 9986 )
363 WRITE( NOUT, FMT = 9985 )
367 WRITE( NOUT, FMT = 9991 )
375 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
377 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, D9.1 )
378 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
380 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
381 9995 FORMAT( ' TESTS OF THE COMPLEX*16 LEVEL 3 BLAS', //' THE F',
382 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
383 9994 FORMAT( ' FOR N ', 9I6 )
384 9993 FORMAT( ' FOR ALPHA ',
385 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
386 9992 FORMAT( ' FOR BETA ',
387 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
388 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
389 $ /' ******* TESTS ABANDONED *******' )
390 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
391 $ 'ESTS ABANDONED *******' )
392 9989 FORMAT( ' ERROR IN ZMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
393 $ 'ATED WRONGLY.', /' ZMMCH WAS CALLED WITH TRANSA = ', A1,
394 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
395 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
396 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
398 9988 FORMAT( A6, L2 )
399 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' )
400 9986 FORMAT( /' END OF TESTS' )
401 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
402 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
407 SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
408 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
409 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
413 * Auxiliary routine for test program for Level 3 Blas.
415 * -- Written on 8-February-1989.
416 * Jack Dongarra, Argonne National Laboratory.
417 * Iain Duff, AERE Harwell.
418 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
419 * Sven Hammarling, Numerical Algorithms Group Ltd.
423 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
424 DOUBLE PRECISION RZERO
425 PARAMETER ( RZERO = 0.0D0 )
426 * .. Scalar Arguments ..
427 DOUBLE PRECISION EPS, THRESH
428 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
429 LOGICAL FATAL, REWI, TRACE
431 * .. Array Arguments ..
432 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
433 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
434 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
435 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
436 $ CS( NMAX*NMAX ), CT( NMAX )
437 DOUBLE PRECISION G( NMAX )
438 INTEGER IDIM( NIDIM )
439 * .. Local Scalars ..
440 COMPLEX*16 ALPHA, ALS, BETA, BLS
441 DOUBLE PRECISION ERR, ERRMAX
442 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
443 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
444 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
445 LOGICAL NULL, RESET, SAME, TRANA, TRANB
446 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
450 * .. External Functions ..
453 * .. External Subroutines ..
454 EXTERNAL ZGEMM, ZMAKE, ZMMCH
455 * .. Intrinsic Functions ..
457 * .. Scalars in Common ..
460 * .. Common blocks ..
461 COMMON /INFOC/INFOT, NOUTC, OK, LERR
462 * .. Data statements ..
464 * .. Executable Statements ..
476 * Set LDC to 1 more than minimum value if room.
480 * Skip tests if not enough room.
484 NULL = N.LE.0.OR.M.LE.0
490 TRANSA = ICH( ICA: ICA )
491 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
500 * Set LDA to 1 more than minimum value if room.
504 * Skip tests if not enough room.
509 * Generate the matrix A.
511 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
515 TRANSB = ICH( ICB: ICB )
516 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
525 * Set LDB to 1 more than minimum value if room.
529 * Skip tests if not enough room.
534 * Generate the matrix B.
536 CALL ZMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
545 * Generate the matrix C.
547 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
548 $ CC, LDC, RESET, ZERO )
552 * Save every datum before calling the
575 * Call the subroutine.
578 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
579 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
583 CALL ZGEMM( TRANSA, TRANSB, M, N, K, ALPHA,
584 $ AA, LDA, BB, LDB, BETA, CC, LDC )
586 * Check if error-exit was taken incorrectly.
589 WRITE( NOUT, FMT = 9994 )
594 * See what data changed inside subroutines.
596 ISAME( 1 ) = TRANSA.EQ.TRANAS
597 ISAME( 2 ) = TRANSB.EQ.TRANBS
601 ISAME( 6 ) = ALS.EQ.ALPHA
602 ISAME( 7 ) = LZE( AS, AA, LAA )
603 ISAME( 8 ) = LDAS.EQ.LDA
604 ISAME( 9 ) = LZE( BS, BB, LBB )
605 ISAME( 10 ) = LDBS.EQ.LDB
606 ISAME( 11 ) = BLS.EQ.BETA
608 ISAME( 12 ) = LZE( CS, CC, LCC )
610 ISAME( 12 ) = LZERES( 'GE', ' ', M, N, CS,
613 ISAME( 13 ) = LDCS.EQ.LDC
615 * If data was incorrectly changed, report
620 SAME = SAME.AND.ISAME( I )
621 IF( .NOT.ISAME( I ) )
622 $ WRITE( NOUT, FMT = 9998 )I
633 CALL ZMMCH( TRANSA, TRANSB, M, N, K,
634 $ ALPHA, A, NMAX, B, NMAX, BETA,
635 $ C, NMAX, CT, G, CC, LDC, EPS,
636 $ ERR, FATAL, NOUT, .TRUE. )
637 ERRMAX = MAX( ERRMAX, ERR )
638 * If got really bad answer, report and
660 IF( ERRMAX.LT.THRESH )THEN
661 WRITE( NOUT, FMT = 9999 )SNAME, NC
663 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
668 WRITE( NOUT, FMT = 9996 )SNAME
669 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
670 $ ALPHA, LDA, LDB, BETA, LDC
675 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
677 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
678 $ 'ANGED INCORRECTLY *******' )
679 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
680 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
681 $ ' - SUSPECT *******' )
682 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
683 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',',
684 $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
685 $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
686 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
692 SUBROUTINE ZCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
693 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
694 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
696 * Tests ZHEMM and ZSYMM.
698 * Auxiliary routine for test program for Level 3 Blas.
700 * -- Written on 8-February-1989.
701 * Jack Dongarra, Argonne National Laboratory.
702 * Iain Duff, AERE Harwell.
703 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
704 * Sven Hammarling, Numerical Algorithms Group Ltd.
708 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
709 DOUBLE PRECISION RZERO
710 PARAMETER ( RZERO = 0.0D0 )
711 * .. Scalar Arguments ..
712 DOUBLE PRECISION EPS, THRESH
713 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
714 LOGICAL FATAL, REWI, TRACE
716 * .. Array Arguments ..
717 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
718 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
719 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
720 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
721 $ CS( NMAX*NMAX ), CT( NMAX )
722 DOUBLE PRECISION G( NMAX )
723 INTEGER IDIM( NIDIM )
724 * .. Local Scalars ..
725 COMPLEX*16 ALPHA, ALS, BETA, BLS
726 DOUBLE PRECISION ERR, ERRMAX
727 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
728 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
730 LOGICAL CONJ, LEFT, NULL, RESET, SAME
731 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
732 CHARACTER*2 ICHS, ICHU
735 * .. External Functions ..
738 * .. External Subroutines ..
739 EXTERNAL ZHEMM, ZMAKE, ZMMCH, ZSYMM
740 * .. Intrinsic Functions ..
742 * .. Scalars in Common ..
745 * .. Common blocks ..
746 COMMON /INFOC/INFOT, NOUTC, OK, LERR
747 * .. Data statements ..
748 DATA ICHS/'LR'/, ICHU/'UL'/
749 * .. Executable Statements ..
750 CONJ = SNAME( 2: 3 ).EQ.'HE'
762 * Set LDC to 1 more than minimum value if room.
766 * Skip tests if not enough room.
770 NULL = N.LE.0.OR.M.LE.0
771 * Set LDB to 1 more than minimum value if room.
775 * Skip tests if not enough room.
780 * Generate the matrix B.
782 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
786 SIDE = ICHS( ICS: ICS )
794 * Set LDA to 1 more than minimum value if room.
798 * Skip tests if not enough room.
804 UPLO = ICHU( ICU: ICU )
806 * Generate the hermitian or symmetric matrix A.
808 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
809 $ AA, LDA, RESET, ZERO )
817 * Generate the matrix C.
819 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
824 * Save every datum before calling the
846 * Call the subroutine.
849 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
850 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
854 CALL ZHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
855 $ BB, LDB, BETA, CC, LDC )
857 CALL ZSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
858 $ BB, LDB, BETA, CC, LDC )
861 * Check if error-exit was taken incorrectly.
864 WRITE( NOUT, FMT = 9994 )
869 * See what data changed inside subroutines.
871 ISAME( 1 ) = SIDES.EQ.SIDE
872 ISAME( 2 ) = UPLOS.EQ.UPLO
875 ISAME( 5 ) = ALS.EQ.ALPHA
876 ISAME( 6 ) = LZE( AS, AA, LAA )
877 ISAME( 7 ) = LDAS.EQ.LDA
878 ISAME( 8 ) = LZE( BS, BB, LBB )
879 ISAME( 9 ) = LDBS.EQ.LDB
880 ISAME( 10 ) = BLS.EQ.BETA
882 ISAME( 11 ) = LZE( CS, CC, LCC )
884 ISAME( 11 ) = LZERES( 'GE', ' ', M, N, CS,
887 ISAME( 12 ) = LDCS.EQ.LDC
889 * If data was incorrectly changed, report and
894 SAME = SAME.AND.ISAME( I )
895 IF( .NOT.ISAME( I ) )
896 $ WRITE( NOUT, FMT = 9998 )I
908 CALL ZMMCH( 'N', 'N', M, N, M, ALPHA, A,
909 $ NMAX, B, NMAX, BETA, C, NMAX,
910 $ CT, G, CC, LDC, EPS, ERR,
911 $ FATAL, NOUT, .TRUE. )
913 CALL ZMMCH( 'N', 'N', M, N, N, ALPHA, B,
914 $ NMAX, A, NMAX, BETA, C, NMAX,
915 $ CT, G, CC, LDC, EPS, ERR,
916 $ FATAL, NOUT, .TRUE. )
918 ERRMAX = MAX( ERRMAX, ERR )
919 * If got really bad answer, report and
939 IF( ERRMAX.LT.THRESH )THEN
940 WRITE( NOUT, FMT = 9999 )SNAME, NC
942 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
947 WRITE( NOUT, FMT = 9996 )SNAME
948 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
954 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
956 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
957 $ 'ANGED INCORRECTLY *******' )
958 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
959 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
960 $ ' - SUSPECT *******' )
961 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
962 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
963 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
964 $ ',', F4.1, '), C,', I3, ') .' )
965 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
971 SUBROUTINE ZCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
972 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
973 $ B, BB, BS, CT, G, C )
975 * Tests ZTRMM and ZTRSM.
977 * Auxiliary routine for test program for Level 3 Blas.
979 * -- Written on 8-February-1989.
980 * Jack Dongarra, Argonne National Laboratory.
981 * Iain Duff, AERE Harwell.
982 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
983 * Sven Hammarling, Numerical Algorithms Group Ltd.
987 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
988 $ ONE = ( 1.0D0, 0.0D0 ) )
989 DOUBLE PRECISION RZERO
990 PARAMETER ( RZERO = 0.0D0 )
991 * .. Scalar Arguments ..
992 DOUBLE PRECISION EPS, THRESH
993 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
994 LOGICAL FATAL, REWI, TRACE
996 * .. Array Arguments ..
997 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
998 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
999 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
1000 $ C( NMAX, NMAX ), CT( NMAX )
1001 DOUBLE PRECISION G( NMAX )
1002 INTEGER IDIM( NIDIM )
1003 * .. Local Scalars ..
1004 COMPLEX*16 ALPHA, ALS
1005 DOUBLE PRECISION ERR, ERRMAX
1006 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
1007 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
1009 LOGICAL LEFT, NULL, RESET, SAME
1010 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
1012 CHARACTER*2 ICHD, ICHS, ICHU
1014 * .. Local Arrays ..
1016 * .. External Functions ..
1018 EXTERNAL LZE, LZERES
1019 * .. External Subroutines ..
1020 EXTERNAL ZMAKE, ZMMCH, ZTRMM, ZTRSM
1021 * .. Intrinsic Functions ..
1023 * .. Scalars in Common ..
1024 INTEGER INFOT, NOUTC
1026 * .. Common blocks ..
1027 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1028 * .. Data statements ..
1029 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
1030 * .. Executable Statements ..
1036 * Set up zero matrix for ZMMCH.
1043 DO 140 IM = 1, NIDIM
1046 DO 130 IN = 1, NIDIM
1048 * Set LDB to 1 more than minimum value if room.
1052 * Skip tests if not enough room.
1056 NULL = M.LE.0.OR.N.LE.0
1059 SIDE = ICHS( ICS: ICS )
1066 * Set LDA to 1 more than minimum value if room.
1070 * Skip tests if not enough room.
1076 UPLO = ICHU( ICU: ICU )
1079 TRANSA = ICHT( ICT: ICT )
1082 DIAG = ICHD( ICD: ICD )
1087 * Generate the matrix A.
1089 CALL ZMAKE( 'TR', UPLO, DIAG, NA, NA, A,
1090 $ NMAX, AA, LDA, RESET, ZERO )
1092 * Generate the matrix B.
1094 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
1095 $ BB, LDB, RESET, ZERO )
1099 * Save every datum before calling the
1118 * Call the subroutine.
1120 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1122 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1123 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1127 CALL ZTRMM( SIDE, UPLO, TRANSA, DIAG, M,
1128 $ N, ALPHA, AA, LDA, BB, LDB )
1129 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1131 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1132 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1136 CALL ZTRSM( SIDE, UPLO, TRANSA, DIAG, M,
1137 $ N, ALPHA, AA, LDA, BB, LDB )
1140 * Check if error-exit was taken incorrectly.
1143 WRITE( NOUT, FMT = 9994 )
1148 * See what data changed inside subroutines.
1150 ISAME( 1 ) = SIDES.EQ.SIDE
1151 ISAME( 2 ) = UPLOS.EQ.UPLO
1152 ISAME( 3 ) = TRANAS.EQ.TRANSA
1153 ISAME( 4 ) = DIAGS.EQ.DIAG
1154 ISAME( 5 ) = MS.EQ.M
1155 ISAME( 6 ) = NS.EQ.N
1156 ISAME( 7 ) = ALS.EQ.ALPHA
1157 ISAME( 8 ) = LZE( AS, AA, LAA )
1158 ISAME( 9 ) = LDAS.EQ.LDA
1160 ISAME( 10 ) = LZE( BS, BB, LBB )
1162 ISAME( 10 ) = LZERES( 'GE', ' ', M, N, BS,
1165 ISAME( 11 ) = LDBS.EQ.LDB
1167 * If data was incorrectly changed, report and
1172 SAME = SAME.AND.ISAME( I )
1173 IF( .NOT.ISAME( I ) )
1174 $ WRITE( NOUT, FMT = 9998 )I
1182 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1187 CALL ZMMCH( TRANSA, 'N', M, N, M,
1188 $ ALPHA, A, NMAX, B, NMAX,
1189 $ ZERO, C, NMAX, CT, G,
1190 $ BB, LDB, EPS, ERR,
1191 $ FATAL, NOUT, .TRUE. )
1193 CALL ZMMCH( 'N', TRANSA, M, N, N,
1194 $ ALPHA, B, NMAX, A, NMAX,
1195 $ ZERO, C, NMAX, CT, G,
1196 $ BB, LDB, EPS, ERR,
1197 $ FATAL, NOUT, .TRUE. )
1199 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1201 * Compute approximation to original
1206 C( I, J ) = BB( I + ( J - 1 )*
1208 BB( I + ( J - 1 )*LDB ) = ALPHA*
1214 CALL ZMMCH( TRANSA, 'N', M, N, M,
1215 $ ONE, A, NMAX, C, NMAX,
1216 $ ZERO, B, NMAX, CT, G,
1217 $ BB, LDB, EPS, ERR,
1218 $ FATAL, NOUT, .FALSE. )
1220 CALL ZMMCH( 'N', TRANSA, M, N, N,
1221 $ ONE, C, NMAX, A, NMAX,
1222 $ ZERO, B, NMAX, CT, G,
1223 $ BB, LDB, EPS, ERR,
1224 $ FATAL, NOUT, .FALSE. )
1227 ERRMAX = MAX( ERRMAX, ERR )
1228 * If got really bad answer, report and
1250 IF( ERRMAX.LT.THRESH )THEN
1251 WRITE( NOUT, FMT = 9999 )SNAME, NC
1253 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1258 WRITE( NOUT, FMT = 9996 )SNAME
1259 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
1260 $ N, ALPHA, LDA, LDB
1265 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1267 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1268 $ 'ANGED INCORRECTLY *******' )
1269 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1270 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1271 $ ' - SUSPECT *******' )
1272 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1273 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
1274 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
1276 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1282 SUBROUTINE ZCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1283 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1284 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
1286 * Tests ZHERK and ZSYRK.
1288 * Auxiliary routine for test program for Level 3 Blas.
1290 * -- Written on 8-February-1989.
1291 * Jack Dongarra, Argonne National Laboratory.
1292 * Iain Duff, AERE Harwell.
1293 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1294 * Sven Hammarling, Numerical Algorithms Group Ltd.
1298 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
1299 DOUBLE PRECISION RONE, RZERO
1300 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 )
1301 * .. Scalar Arguments ..
1302 DOUBLE PRECISION EPS, THRESH
1303 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1304 LOGICAL FATAL, REWI, TRACE
1306 * .. Array Arguments ..
1307 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1308 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1309 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1310 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1311 $ CS( NMAX*NMAX ), CT( NMAX )
1312 DOUBLE PRECISION G( NMAX )
1313 INTEGER IDIM( NIDIM )
1314 * .. Local Scalars ..
1315 COMPLEX*16 ALPHA, ALS, BETA, BETS
1316 DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1317 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1318 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1320 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1321 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1322 CHARACTER*2 ICHT, ICHU
1323 * .. Local Arrays ..
1325 * .. External Functions ..
1327 EXTERNAL LZE, LZERES
1328 * .. External Subroutines ..
1329 EXTERNAL ZHERK, ZMAKE, ZMMCH, ZSYRK
1330 * .. Intrinsic Functions ..
1331 INTRINSIC DCMPLX, MAX, DBLE
1332 * .. Scalars in Common ..
1333 INTEGER INFOT, NOUTC
1335 * .. Common blocks ..
1336 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1337 * .. Data statements ..
1338 DATA ICHT/'NC'/, ICHU/'UL'/
1339 * .. Executable Statements ..
1340 CONJ = SNAME( 2: 3 ).EQ.'HE'
1347 DO 100 IN = 1, NIDIM
1349 * Set LDC to 1 more than minimum value if room.
1353 * Skip tests if not enough room.
1362 TRANS = ICHT( ICT: ICT )
1364 IF( TRAN.AND..NOT.CONJ )
1373 * Set LDA to 1 more than minimum value if room.
1377 * Skip tests if not enough room.
1382 * Generate the matrix A.
1384 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
1388 UPLO = ICHU( ICU: ICU )
1394 RALPHA = DBLE( ALPHA )
1395 ALPHA = DCMPLX( RALPHA, RZERO )
1401 RBETA = DBLE( BETA )
1402 BETA = DCMPLX( RBETA, RZERO )
1406 $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
1407 $ RZERO ).AND.RBETA.EQ.RONE )
1409 * Generate the matrix C.
1411 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1412 $ NMAX, CC, LDC, RESET, ZERO )
1416 * Save every datum before calling the subroutine.
1441 * Call the subroutine.
1445 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1446 $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
1449 CALL ZHERK( UPLO, TRANS, N, K, RALPHA, AA,
1450 $ LDA, RBETA, CC, LDC )
1453 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1454 $ TRANS, N, K, ALPHA, LDA, BETA, LDC
1457 CALL ZSYRK( UPLO, TRANS, N, K, ALPHA, AA,
1458 $ LDA, BETA, CC, LDC )
1461 * Check if error-exit was taken incorrectly.
1464 WRITE( NOUT, FMT = 9992 )
1469 * See what data changed inside subroutines.
1471 ISAME( 1 ) = UPLOS.EQ.UPLO
1472 ISAME( 2 ) = TRANSS.EQ.TRANS
1473 ISAME( 3 ) = NS.EQ.N
1474 ISAME( 4 ) = KS.EQ.K
1476 ISAME( 5 ) = RALS.EQ.RALPHA
1478 ISAME( 5 ) = ALS.EQ.ALPHA
1480 ISAME( 6 ) = LZE( AS, AA, LAA )
1481 ISAME( 7 ) = LDAS.EQ.LDA
1483 ISAME( 8 ) = RBETS.EQ.RBETA
1485 ISAME( 8 ) = BETS.EQ.BETA
1488 ISAME( 9 ) = LZE( CS, CC, LCC )
1490 ISAME( 9 ) = LZERES( SNAME( 2: 3 ), UPLO, N,
1493 ISAME( 10 ) = LDCS.EQ.LDC
1495 * If data was incorrectly changed, report and
1500 SAME = SAME.AND.ISAME( I )
1501 IF( .NOT.ISAME( I ) )
1502 $ WRITE( NOUT, FMT = 9998 )I
1511 * Check the result column by column.
1528 CALL ZMMCH( TRANST, 'N', LJ, 1, K,
1529 $ ALPHA, A( 1, JJ ), NMAX,
1530 $ A( 1, J ), NMAX, BETA,
1531 $ C( JJ, J ), NMAX, CT, G,
1532 $ CC( JC ), LDC, EPS, ERR,
1533 $ FATAL, NOUT, .TRUE. )
1535 CALL ZMMCH( 'N', TRANST, LJ, 1, K,
1536 $ ALPHA, A( JJ, 1 ), NMAX,
1537 $ A( J, 1 ), NMAX, BETA,
1538 $ C( JJ, J ), NMAX, CT, G,
1539 $ CC( JC ), LDC, EPS, ERR,
1540 $ FATAL, NOUT, .TRUE. )
1547 ERRMAX = MAX( ERRMAX, ERR )
1548 * If got really bad answer, report and
1569 IF( ERRMAX.LT.THRESH )THEN
1570 WRITE( NOUT, FMT = 9999 )SNAME, NC
1572 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1578 $ WRITE( NOUT, FMT = 9995 )J
1581 WRITE( NOUT, FMT = 9996 )SNAME
1583 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
1586 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1593 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1595 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1596 $ 'ANGED INCORRECTLY *******' )
1597 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1598 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1599 $ ' - SUSPECT *******' )
1600 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1601 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1602 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1603 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
1605 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1606 $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
1607 $ '), C,', I3, ') .' )
1608 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1614 SUBROUTINE ZCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1615 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1616 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
1618 * Tests ZHER2K and ZSYR2K.
1620 * Auxiliary routine for test program for Level 3 Blas.
1622 * -- Written on 8-February-1989.
1623 * Jack Dongarra, Argonne National Laboratory.
1624 * Iain Duff, AERE Harwell.
1625 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
1626 * Sven Hammarling, Numerical Algorithms Group Ltd.
1629 COMPLEX*16 ZERO, ONE
1630 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
1631 $ ONE = ( 1.0D0, 0.0D0 ) )
1632 DOUBLE PRECISION RONE, RZERO
1633 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 )
1634 * .. Scalar Arguments ..
1635 DOUBLE PRECISION EPS, THRESH
1636 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1637 LOGICAL FATAL, REWI, TRACE
1639 * .. Array Arguments ..
1640 COMPLEX*16 AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1641 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1642 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1643 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1645 DOUBLE PRECISION G( NMAX )
1646 INTEGER IDIM( NIDIM )
1647 * .. Local Scalars ..
1648 COMPLEX*16 ALPHA, ALS, BETA, BETS
1649 DOUBLE PRECISION ERR, ERRMAX, RBETA, RBETS
1650 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1651 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1652 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1653 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1654 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1655 CHARACTER*2 ICHT, ICHU
1656 * .. Local Arrays ..
1658 * .. External Functions ..
1660 EXTERNAL LZE, LZERES
1661 * .. External Subroutines ..
1662 EXTERNAL ZHER2K, ZMAKE, ZMMCH, ZSYR2K
1663 * .. Intrinsic Functions ..
1664 INTRINSIC DCMPLX, DCONJG, MAX, DBLE
1665 * .. Scalars in Common ..
1666 INTEGER INFOT, NOUTC
1668 * .. Common blocks ..
1669 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1670 * .. Data statements ..
1671 DATA ICHT/'NC'/, ICHU/'UL'/
1672 * .. Executable Statements ..
1673 CONJ = SNAME( 2: 3 ).EQ.'HE'
1680 DO 130 IN = 1, NIDIM
1682 * Set LDC to 1 more than minimum value if room.
1686 * Skip tests if not enough room.
1691 DO 120 IK = 1, NIDIM
1695 TRANS = ICHT( ICT: ICT )
1697 IF( TRAN.AND..NOT.CONJ )
1706 * Set LDA to 1 more than minimum value if room.
1710 * Skip tests if not enough room.
1715 * Generate the matrix A.
1718 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
1719 $ LDA, RESET, ZERO )
1721 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
1725 * Generate the matrix B.
1730 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
1731 $ 2*NMAX, BB, LDB, RESET, ZERO )
1733 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
1734 $ NMAX, BB, LDB, RESET, ZERO )
1738 UPLO = ICHU( ICU: ICU )
1747 RBETA = DBLE( BETA )
1748 BETA = DCMPLX( RBETA, RZERO )
1752 $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
1753 $ ZERO ).AND.RBETA.EQ.RONE )
1755 * Generate the matrix C.
1757 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1758 $ NMAX, CC, LDC, RESET, ZERO )
1762 * Save every datum before calling the subroutine.
1787 * Call the subroutine.
1791 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1792 $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
1795 CALL ZHER2K( UPLO, TRANS, N, K, ALPHA, AA,
1796 $ LDA, BB, LDB, RBETA, CC, LDC )
1799 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1800 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
1803 CALL ZSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
1804 $ LDA, BB, LDB, BETA, CC, LDC )
1807 * Check if error-exit was taken incorrectly.
1810 WRITE( NOUT, FMT = 9992 )
1815 * See what data changed inside subroutines.
1817 ISAME( 1 ) = UPLOS.EQ.UPLO
1818 ISAME( 2 ) = TRANSS.EQ.TRANS
1819 ISAME( 3 ) = NS.EQ.N
1820 ISAME( 4 ) = KS.EQ.K
1821 ISAME( 5 ) = ALS.EQ.ALPHA
1822 ISAME( 6 ) = LZE( AS, AA, LAA )
1823 ISAME( 7 ) = LDAS.EQ.LDA
1824 ISAME( 8 ) = LZE( BS, BB, LBB )
1825 ISAME( 9 ) = LDBS.EQ.LDB
1827 ISAME( 10 ) = RBETS.EQ.RBETA
1829 ISAME( 10 ) = BETS.EQ.BETA
1832 ISAME( 11 ) = LZE( CS, CC, LCC )
1834 ISAME( 11 ) = LZERES( 'HE', UPLO, N, N, CS,
1837 ISAME( 12 ) = LDCS.EQ.LDC
1839 * If data was incorrectly changed, report and
1844 SAME = SAME.AND.ISAME( I )
1845 IF( .NOT.ISAME( I ) )
1846 $ WRITE( NOUT, FMT = 9998 )I
1855 * Check the result column by column.
1874 W( I ) = ALPHA*AB( ( J - 1 )*2*
1877 W( K + I ) = DCONJG( ALPHA )*
1886 CALL ZMMCH( TRANST, 'N', LJ, 1, 2*K,
1887 $ ONE, AB( JJAB ), 2*NMAX, W,
1888 $ 2*NMAX, BETA, C( JJ, J ),
1889 $ NMAX, CT, G, CC( JC ), LDC,
1890 $ EPS, ERR, FATAL, NOUT,
1895 W( I ) = ALPHA*DCONJG( AB( ( K +
1896 $ I - 1 )*NMAX + J ) )
1897 W( K + I ) = DCONJG( ALPHA*
1898 $ AB( ( I - 1 )*NMAX +
1901 W( I ) = ALPHA*AB( ( K + I - 1 )*
1904 $ AB( ( I - 1 )*NMAX +
1908 CALL ZMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
1909 $ AB( JJ ), NMAX, W, 2*NMAX,
1910 $ BETA, C( JJ, J ), NMAX, CT,
1911 $ G, CC( JC ), LDC, EPS, ERR,
1912 $ FATAL, NOUT, .TRUE. )
1919 $ JJAB = JJAB + 2*NMAX
1921 ERRMAX = MAX( ERRMAX, ERR )
1922 * If got really bad answer, report and
1943 IF( ERRMAX.LT.THRESH )THEN
1944 WRITE( NOUT, FMT = 9999 )SNAME, NC
1946 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1952 $ WRITE( NOUT, FMT = 9995 )J
1955 WRITE( NOUT, FMT = 9996 )SNAME
1957 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1958 $ LDA, LDB, RBETA, LDC
1960 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1961 $ LDA, LDB, BETA, LDC
1967 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1969 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1970 $ 'ANGED INCORRECTLY *******' )
1971 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1972 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1973 $ ' - SUSPECT *******' )
1974 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1975 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1976 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1977 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
1978 $ ', C,', I3, ') .' )
1979 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1980 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
1981 $ ',', F4.1, '), C,', I3, ') .' )
1982 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1988 SUBROUTINE ZCHKE( ISNUM, SRNAMT, NOUT )
1990 * Tests the error exits from the Level 3 Blas.
1991 * Requires a special version of the error-handling routine XERBLA.
1992 * A, B and C should not need to be defined.
1994 * Auxiliary routine for test program for Level 3 Blas.
1996 * -- Written on 8-February-1989.
1997 * Jack Dongarra, Argonne National Laboratory.
1998 * Iain Duff, AERE Harwell.
1999 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2000 * Sven Hammarling, Numerical Algorithms Group Ltd.
2002 * 3-19-92: Initialize ALPHA, BETA, RALPHA, and RBETA (eca)
2003 * 3-19-92: Fix argument 12 in calls to ZSYMM and ZHEMM
2004 * with INFOT = 9 (eca)
2005 * 10-9-00: Declared INTRINSIC DCMPLX (susan)
2007 * .. Scalar Arguments ..
2010 * .. Scalars in Common ..
2011 INTEGER INFOT, NOUTC
2015 PARAMETER ( ONE = 1.0D0, TWO = 2.0D0 )
2016 * .. Local Scalars ..
2017 COMPLEX*16 ALPHA, BETA
2018 DOUBLE PRECISION RALPHA, RBETA
2019 * .. Local Arrays ..
2020 COMPLEX*16 A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
2021 * .. External Subroutines ..
2022 EXTERNAL ZGEMM, ZHEMM, ZHER2K, ZHERK, CHKXER, ZSYMM,
2023 $ ZSYR2K, ZSYRK, ZTRMM, ZTRSM
2024 * .. Intrinsic Functions ..
2026 * .. Common blocks ..
2027 COMMON /INFOC/INFOT, NOUTC, OK, LERR
2028 * .. Executable Statements ..
2029 * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
2030 * if anything is wrong.
2032 * LERR is set to .TRUE. by the special version of XERBLA each time
2033 * it is called, and is then tested and re-set by CHKXER.
2036 * Initialize ALPHA, BETA, RALPHA, and RBETA.
2038 ALPHA = DCMPLX( ONE, -ONE )
2039 BETA = DCMPLX( TWO, -TWO )
2043 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
2046 CALL ZGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2047 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2049 CALL ZGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2050 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2052 CALL ZGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2053 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2055 CALL ZGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2056 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2058 CALL ZGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2059 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2061 CALL ZGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2062 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2064 CALL ZGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2065 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2067 CALL ZGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2068 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2070 CALL ZGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2071 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2073 CALL ZGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2074 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2076 CALL ZGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2077 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2079 CALL ZGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2080 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2082 CALL ZGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2083 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2085 CALL ZGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2086 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2088 CALL ZGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2089 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2091 CALL ZGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2092 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2094 CALL ZGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2095 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2097 CALL ZGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2098 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2100 CALL ZGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2101 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2103 CALL ZGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2104 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2106 CALL ZGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2107 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2109 CALL ZGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2110 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2112 CALL ZGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2113 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2115 CALL ZGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2116 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2118 CALL ZGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2119 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2121 CALL ZGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2122 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2124 CALL ZGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2125 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2127 CALL ZGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2128 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2130 CALL ZGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2131 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2133 CALL ZGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2134 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2136 CALL ZGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2137 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2139 CALL ZGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2140 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2142 CALL ZGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2143 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2145 CALL ZGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2146 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2148 CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2149 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2151 CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2152 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2154 CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2155 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2157 CALL ZGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2158 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2160 CALL ZGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2161 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2163 CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2164 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2166 CALL ZGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2167 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2169 CALL ZGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2170 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2172 CALL ZGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2173 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2175 CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2176 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2178 CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2179 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2181 CALL ZGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2182 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2184 CALL ZGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2185 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2187 CALL ZGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2188 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2190 CALL ZGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2191 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2193 CALL ZGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2194 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2196 CALL ZGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2197 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2199 CALL ZGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2200 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2202 CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2203 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2205 CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2206 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2208 CALL ZGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2209 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2211 CALL ZGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2212 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2214 CALL ZGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2215 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2217 CALL ZGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2218 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2220 CALL ZGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2221 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2223 CALL ZGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2224 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2227 CALL ZHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2228 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2230 CALL ZHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2231 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2233 CALL ZHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2234 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2236 CALL ZHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2237 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2239 CALL ZHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2240 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2242 CALL ZHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2243 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2245 CALL ZHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2246 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2248 CALL ZHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2249 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2251 CALL ZHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2252 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2254 CALL ZHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2255 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2257 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2258 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2260 CALL ZHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2261 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2263 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2264 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2266 CALL ZHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2267 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2269 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2270 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2272 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2273 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2275 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2276 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2278 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2279 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2281 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2282 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2284 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2285 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2287 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2288 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2290 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2291 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2294 CALL ZSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2295 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2297 CALL ZSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2298 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2300 CALL ZSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2301 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2303 CALL ZSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2304 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2306 CALL ZSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2307 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2309 CALL ZSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2310 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2312 CALL ZSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2313 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2315 CALL ZSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2316 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2318 CALL ZSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2319 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2321 CALL ZSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2322 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2324 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2325 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2327 CALL ZSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2328 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2330 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2331 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2333 CALL ZSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2334 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2336 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2337 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2339 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2340 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2342 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2343 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2345 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2346 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2348 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2349 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2351 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2352 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2354 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2355 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2357 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2358 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2361 CALL ZTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2362 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2364 CALL ZTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2365 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2367 CALL ZTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2368 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2370 CALL ZTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2371 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2373 CALL ZTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2374 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2376 CALL ZTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2377 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2379 CALL ZTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2380 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2382 CALL ZTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2383 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2385 CALL ZTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2386 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2388 CALL ZTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2389 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2391 CALL ZTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2392 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2394 CALL ZTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2395 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2397 CALL ZTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2398 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2400 CALL ZTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2401 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2403 CALL ZTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2404 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2406 CALL ZTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2407 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2409 CALL ZTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2410 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2412 CALL ZTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2413 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2415 CALL ZTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2416 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2418 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2419 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2421 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2422 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2424 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2425 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2427 CALL ZTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2428 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2430 CALL ZTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2431 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2433 CALL ZTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2434 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2436 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2437 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2439 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2440 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2442 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2443 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2445 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2446 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2448 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2449 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2451 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2452 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2454 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2455 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2457 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2458 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2460 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2461 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2463 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2464 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2466 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2467 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2469 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2470 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2472 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2473 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2475 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2476 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2478 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2479 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2481 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2482 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2484 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2485 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2487 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2488 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2490 CALL ZTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2491 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2493 CALL ZTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2494 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2496 CALL ZTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2497 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2499 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2500 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2502 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2503 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2505 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2506 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2508 CALL ZTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2509 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2511 CALL ZTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2512 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2514 CALL ZTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2515 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2518 CALL ZTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2519 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2521 CALL ZTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2522 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2524 CALL ZTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2525 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2527 CALL ZTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2528 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2530 CALL ZTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2531 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2533 CALL ZTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2534 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2536 CALL ZTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2537 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2539 CALL ZTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2540 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2542 CALL ZTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2543 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2545 CALL ZTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2546 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2548 CALL ZTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2549 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2551 CALL ZTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2552 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2554 CALL ZTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2555 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2557 CALL ZTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2558 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2560 CALL ZTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2561 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2563 CALL ZTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2564 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2566 CALL ZTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2567 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2569 CALL ZTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2570 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2572 CALL ZTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2573 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2575 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2576 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2578 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2579 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2581 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2582 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2584 CALL ZTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2585 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2587 CALL ZTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2588 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2590 CALL ZTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2591 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2593 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2594 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2596 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2597 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2599 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2600 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2602 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2603 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2605 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2606 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2608 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2609 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2611 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2612 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2614 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2615 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2617 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2618 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2620 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2621 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2623 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2624 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2626 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2627 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2629 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2630 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2632 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2633 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2635 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2636 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2638 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2639 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2641 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2642 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2644 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2645 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2647 CALL ZTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2648 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2650 CALL ZTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2651 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2653 CALL ZTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2654 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2656 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2657 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2659 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2660 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2662 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2663 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2665 CALL ZTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2666 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2668 CALL ZTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2669 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2671 CALL ZTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2672 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2675 CALL ZHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2676 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2678 CALL ZHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2679 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2681 CALL ZHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2682 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2684 CALL ZHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2685 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2687 CALL ZHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2688 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2690 CALL ZHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2691 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2693 CALL ZHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2694 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2696 CALL ZHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2697 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2699 CALL ZHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2700 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2702 CALL ZHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2703 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2705 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2706 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2708 CALL ZHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2709 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2711 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2712 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2714 CALL ZHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2715 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2717 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2718 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2720 CALL ZHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2721 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2723 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2724 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2726 CALL ZHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2727 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2730 CALL ZSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2731 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2733 CALL ZSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2734 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2736 CALL ZSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2737 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2739 CALL ZSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2740 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2742 CALL ZSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2743 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2745 CALL ZSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2746 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2748 CALL ZSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2749 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2751 CALL ZSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2752 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2754 CALL ZSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2755 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2757 CALL ZSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2758 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2760 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2761 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2763 CALL ZSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2764 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2766 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2767 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2769 CALL ZSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2770 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2772 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2773 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2775 CALL ZSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2776 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2778 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2779 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2781 CALL ZSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2782 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2785 CALL ZHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2786 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2788 CALL ZHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2789 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2791 CALL ZHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2792 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2794 CALL ZHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2795 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2797 CALL ZHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2798 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2800 CALL ZHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2801 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2803 CALL ZHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2804 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2806 CALL ZHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2807 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2809 CALL ZHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2810 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2812 CALL ZHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2813 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2815 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2816 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2818 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2819 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2821 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2822 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2824 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2825 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2827 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2828 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2830 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2831 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2833 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2834 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2836 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2837 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2839 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2840 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2842 CALL ZHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2843 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2845 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2846 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2848 CALL ZHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2849 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2852 CALL ZSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2853 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2855 CALL ZSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2856 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2858 CALL ZSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2859 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2861 CALL ZSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2862 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2864 CALL ZSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2865 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2867 CALL ZSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2868 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2870 CALL ZSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2871 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2873 CALL ZSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2874 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2876 CALL ZSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2877 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2879 CALL ZSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2880 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2882 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2883 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2885 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2886 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2888 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2889 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2891 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2892 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2894 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2895 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2897 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2898 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2900 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2901 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2903 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2904 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2906 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2907 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2909 CALL ZSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2910 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2912 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2913 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2915 CALL ZSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2916 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2919 WRITE( NOUT, FMT = 9999 )SRNAMT
2921 WRITE( NOUT, FMT = 9998 )SRNAMT
2925 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2926 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2932 SUBROUTINE ZMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2935 * Generates values for an M by N matrix A.
2936 * Stores the values in the array AA in the data structure required
2937 * by the routine, with unwanted elements set to rogue value.
2939 * TYPE is 'GE', 'HE', 'SY' or 'TR'.
2941 * Auxiliary routine for test program for Level 3 Blas.
2943 * -- Written on 8-February-1989.
2944 * Jack Dongarra, Argonne National Laboratory.
2945 * Iain Duff, AERE Harwell.
2946 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
2947 * Sven Hammarling, Numerical Algorithms Group Ltd.
2950 COMPLEX*16 ZERO, ONE
2951 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
2952 $ ONE = ( 1.0D0, 0.0D0 ) )
2954 PARAMETER ( ROGUE = ( -1.0D10, 1.0D10 ) )
2955 DOUBLE PRECISION RZERO
2956 PARAMETER ( RZERO = 0.0D0 )
2957 DOUBLE PRECISION RROGUE
2958 PARAMETER ( RROGUE = -1.0D10 )
2959 * .. Scalar Arguments ..
2961 INTEGER LDA, M, N, NMAX
2963 CHARACTER*1 DIAG, UPLO
2965 * .. Array Arguments ..
2966 COMPLEX*16 A( NMAX, * ), AA( * )
2967 * .. Local Scalars ..
2968 INTEGER I, IBEG, IEND, J, JJ
2969 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2970 * .. External Functions ..
2973 * .. Intrinsic Functions ..
2974 INTRINSIC DCMPLX, DCONJG, DBLE
2975 * .. Executable Statements ..
2980 UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
2981 LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
2982 UNIT = TRI.AND.DIAG.EQ.'U'
2984 * Generate data in array A.
2988 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2990 A( I, J ) = ZBEG( RESET ) + TRANSL
2992 * Set some elements to zero
2993 IF( N.GT.3.AND.J.EQ.N/2 )
2996 A( J, I ) = DCONJG( A( I, J ) )
2998 A( J, I ) = A( I, J )
3006 $ A( J, J ) = DCMPLX( DBLE( A( J, J ) ), RZERO )
3008 $ A( J, J ) = A( J, J ) + ONE
3013 * Store elements in array AS in data structure required by routine.
3015 IF( TYPE.EQ.'GE' )THEN
3018 AA( I + ( J - 1 )*LDA ) = A( I, J )
3020 DO 40 I = M + 1, LDA
3021 AA( I + ( J - 1 )*LDA ) = ROGUE
3024 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
3041 DO 60 I = 1, IBEG - 1
3042 AA( I + ( J - 1 )*LDA ) = ROGUE
3044 DO 70 I = IBEG, IEND
3045 AA( I + ( J - 1 )*LDA ) = A( I, J )
3047 DO 80 I = IEND + 1, LDA
3048 AA( I + ( J - 1 )*LDA ) = ROGUE
3051 JJ = J + ( J - 1 )*LDA
3052 AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE )
3061 SUBROUTINE ZMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
3062 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
3065 * Checks the results of the computational tests.
3067 * Auxiliary routine for test program for Level 3 Blas.
3069 * -- Written on 8-February-1989.
3070 * Jack Dongarra, Argonne National Laboratory.
3071 * Iain Duff, AERE Harwell.
3072 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3073 * Sven Hammarling, Numerical Algorithms Group Ltd.
3077 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
3078 DOUBLE PRECISION RZERO, RONE
3079 PARAMETER ( RZERO = 0.0D0, RONE = 1.0D0 )
3080 * .. Scalar Arguments ..
3081 COMPLEX*16 ALPHA, BETA
3082 DOUBLE PRECISION EPS, ERR
3083 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
3085 CHARACTER*1 TRANSA, TRANSB
3086 * .. Array Arguments ..
3087 COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ),
3088 $ CC( LDCC, * ), CT( * )
3089 DOUBLE PRECISION G( * )
3090 * .. Local Scalars ..
3092 DOUBLE PRECISION ERRI
3094 LOGICAL CTRANA, CTRANB, TRANA, TRANB
3095 * .. Intrinsic Functions ..
3096 INTRINSIC ABS, DIMAG, DCONJG, MAX, DBLE, SQRT
3097 * .. Statement Functions ..
3098 DOUBLE PRECISION ABS1
3099 * .. Statement Function definitions ..
3100 ABS1( CL ) = ABS( DBLE( CL ) ) + ABS( DIMAG( CL ) )
3101 * .. Executable Statements ..
3102 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
3103 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
3104 CTRANA = TRANSA.EQ.'C'
3105 CTRANB = TRANSB.EQ.'C'
3107 * Compute expected result, one column at a time, in CT using data
3109 * Compute gauges in G.
3117 IF( .NOT.TRANA.AND..NOT.TRANB )THEN
3120 CT( I ) = CT( I ) + A( I, K )*B( K, J )
3121 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
3124 ELSE IF( TRANA.AND..NOT.TRANB )THEN
3128 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*B( K, J )
3129 G( I ) = G( I ) + ABS1( A( K, I ) )*
3136 CT( I ) = CT( I ) + A( K, I )*B( K, J )
3137 G( I ) = G( I ) + ABS1( A( K, I ) )*
3142 ELSE IF( .NOT.TRANA.AND.TRANB )THEN
3146 CT( I ) = CT( I ) + A( I, K )*DCONJG( B( J, K ) )
3147 G( I ) = G( I ) + ABS1( A( I, K ) )*
3154 CT( I ) = CT( I ) + A( I, K )*B( J, K )
3155 G( I ) = G( I ) + ABS1( A( I, K ) )*
3160 ELSE IF( TRANA.AND.TRANB )THEN
3165 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*
3166 $ DCONJG( B( J, K ) )
3167 G( I ) = G( I ) + ABS1( A( K, I ) )*
3174 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*
3176 G( I ) = G( I ) + ABS1( A( K, I ) )*
3185 CT( I ) = CT( I ) + A( K, I )*
3186 $ DCONJG( B( J, K ) )
3187 G( I ) = G( I ) + ABS1( A( K, I ) )*
3194 CT( I ) = CT( I ) + A( K, I )*B( J, K )
3195 G( I ) = G( I ) + ABS1( A( K, I ) )*
3203 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
3204 G( I ) = ABS1( ALPHA )*G( I ) +
3205 $ ABS1( BETA )*ABS1( C( I, J ) )
3208 * Compute the error ratio for this result.
3212 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
3213 IF( G( I ).NE.RZERO )
3214 $ ERRI = ERRI/G( I )
3215 ERR = MAX( ERR, ERRI )
3216 IF( ERR*SQRT( EPS ).GE.RONE )
3222 * If the loop completes, all results are at least half accurate.
3225 * Report fatal error.
3228 WRITE( NOUT, FMT = 9999 )
3231 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
3233 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
3237 $ WRITE( NOUT, FMT = 9997 )J
3242 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3243 $ 'F ACCURATE *******', /' EXPECTED RE',
3244 $ 'SULT COMPUTED RESULT' )
3245 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
3246 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
3251 LOGICAL FUNCTION LZE( RI, RJ, LR )
3253 * Tests if two arrays are identical.
3255 * Auxiliary routine for test program for Level 3 Blas.
3257 * -- Written on 8-February-1989.
3258 * Jack Dongarra, Argonne National Laboratory.
3259 * Iain Duff, AERE Harwell.
3260 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3261 * Sven Hammarling, Numerical Algorithms Group Ltd.
3263 * .. Scalar Arguments ..
3265 * .. Array Arguments ..
3266 COMPLEX*16 RI( * ), RJ( * )
3267 * .. Local Scalars ..
3269 * .. Executable Statements ..
3271 IF( RI( I ).NE.RJ( I ) )
3283 LOGICAL FUNCTION LZERES( TYPE, UPLO, M, N, AA, AS, LDA )
3285 * Tests if selected elements in two arrays are equal.
3287 * TYPE is 'GE' or 'HE' or 'SY'.
3289 * Auxiliary routine for test program for Level 3 Blas.
3291 * -- Written on 8-February-1989.
3292 * Jack Dongarra, Argonne National Laboratory.
3293 * Iain Duff, AERE Harwell.
3294 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3295 * Sven Hammarling, Numerical Algorithms Group Ltd.
3297 * .. Scalar Arguments ..
3301 * .. Array Arguments ..
3302 COMPLEX*16 AA( LDA, * ), AS( LDA, * )
3303 * .. Local Scalars ..
3304 INTEGER I, IBEG, IEND, J
3306 * .. Executable Statements ..
3308 IF( TYPE.EQ.'GE' )THEN
3310 DO 10 I = M + 1, LDA
3311 IF( AA( I, J ).NE.AS( I, J ) )
3315 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
3324 DO 30 I = 1, IBEG - 1
3325 IF( AA( I, J ).NE.AS( I, J ) )
3328 DO 40 I = IEND + 1, LDA
3329 IF( AA( I, J ).NE.AS( I, J ) )
3344 COMPLEX*16 FUNCTION ZBEG( RESET )
3346 * Generates complex numbers as pairs of random numbers uniformly
3347 * distributed between -0.5 and 0.5.
3349 * Auxiliary routine for test program for Level 3 Blas.
3351 * -- Written on 8-February-1989.
3352 * Jack Dongarra, Argonne National Laboratory.
3353 * Iain Duff, AERE Harwell.
3354 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3355 * Sven Hammarling, Numerical Algorithms Group Ltd.
3357 * .. Scalar Arguments ..
3359 * .. Local Scalars ..
3360 INTEGER I, IC, J, MI, MJ
3361 * .. Save statement ..
3362 SAVE I, IC, J, MI, MJ
3363 * .. Intrinsic Functions ..
3365 * .. Executable Statements ..
3367 * Initialize local variables.
3376 * The sequence of values of I or J is bounded between 1 and 999.
3377 * If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
3378 * If initial I or J = 4 or 8, the period will be 25.
3379 * If initial I or J = 5, the period will be 10.
3380 * IC is used to break up the period by skipping 1 value of I or J
3386 I = I - 1000*( I/1000 )
3387 J = J - 1000*( J/1000 )
3392 ZBEG = DCMPLX( ( I - 500 )/1001.0D0, ( J - 500 )/1001.0D0 )
3398 DOUBLE PRECISION FUNCTION DDIFF( X, Y )
3400 * Auxiliary routine for test program for Level 3 Blas.
3402 * -- Written on 8-February-1989.
3403 * Jack Dongarra, Argonne National Laboratory.
3404 * Iain Duff, AERE Harwell.
3405 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3406 * Sven Hammarling, Numerical Algorithms Group Ltd.
3408 * .. Scalar Arguments ..
3409 DOUBLE PRECISION X, Y
3410 * .. Executable Statements ..
3417 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3419 * Tests whether XERBLA has detected an error when it should.
3421 * Auxiliary routine for test program for Level 3 Blas.
3423 * -- Written on 8-February-1989.
3424 * Jack Dongarra, Argonne National Laboratory.
3425 * Iain Duff, AERE Harwell.
3426 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3427 * Sven Hammarling, Numerical Algorithms Group Ltd.
3429 * .. Scalar Arguments ..
3433 * .. Executable Statements ..
3435 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3441 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3442 $ 'ETECTED BY ', A6, ' *****' )
3447 SUBROUTINE XERBLA( SRNAME, INFO )
3449 * This is a special version of XERBLA to be used only as part of
3450 * the test program for testing error exits from the Level 3 BLAS
3453 * XERBLA is an error handler for the Level 3 BLAS routines.
3455 * It is called by the Level 3 BLAS routines if an input parameter is
3458 * Auxiliary routine for test program for Level 3 Blas.
3460 * -- Written on 8-February-1989.
3461 * Jack Dongarra, Argonne National Laboratory.
3462 * Iain Duff, AERE Harwell.
3463 * Jeremy Du Croz, Numerical Algorithms Group Ltd.
3464 * Sven Hammarling, Numerical Algorithms Group Ltd.
3466 * .. Scalar Arguments ..
3469 * .. Scalars in Common ..
3473 * .. Common blocks ..
3474 COMMON /INFOC/INFOT, NOUT, OK, LERR
3475 COMMON /SRNAMC/SRNAMT
3476 * .. Executable Statements ..
3478 IF( INFO.NE.INFOT )THEN
3479 IF( INFOT.NE.0 )THEN
3480 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3482 WRITE( NOUT, FMT = 9997 )INFO
3486 IF( SRNAME.NE.SRNAMT )THEN
3487 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3492 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
3493 $ ' OF ', I2, ' *******' )
3494 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
3495 $ 'AD OF ', A6, ' *******' )
3496 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,