source: pacpussensors/trunk/Vislab/lib3dv/eigen/blas/testing/zblat3.f@ 136

Last change on this file since 136 was 136, checked in by ldecherf, 7 years ago

Doc

File size: 127.5 KB
Line 
1 PROGRAM ZBLAT3
2*
3* Test program for the COMPLEX*16 Level 3 Blas.
4*
5* The program must be driven by a short data file. The first 14 records
6* of the file are read using list-directed input, the last 9 records
7* are read using the format ( A6, L2 ). An annotated example of a data
8* file can be obtained by deleting the first 3 characters from the
9* following 23 lines:
10* 'ZBLAT3.SUMM' NAME OF SUMMARY OUTPUT FILE
11* 6 UNIT NUMBER OF SUMMARY FILE
12* 'ZBLAT3.SNAP' NAME OF SNAPSHOT OUTPUT FILE
13* -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
14* F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
15* F LOGICAL FLAG, T TO STOP ON FAILURES.
16* T LOGICAL FLAG, T TO TEST ERROR EXITS.
17* 16.0 THRESHOLD VALUE OF TEST RATIO
18* 6 NUMBER OF VALUES OF N
19* 0 1 2 3 5 9 VALUES OF N
20* 3 NUMBER OF VALUES OF ALPHA
21* (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA
22* 3 NUMBER OF VALUES OF BETA
23* (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA
24* ZGEMM T PUT F FOR NO TEST. SAME COLUMNS.
25* ZHEMM T PUT F FOR NO TEST. SAME COLUMNS.
26* ZSYMM T PUT F FOR NO TEST. SAME COLUMNS.
27* ZTRMM T PUT F FOR NO TEST. SAME COLUMNS.
28* ZTRSM T PUT F FOR NO TEST. SAME COLUMNS.
29* ZHERK T PUT F FOR NO TEST. SAME COLUMNS.
30* ZSYRK T PUT F FOR NO TEST. SAME COLUMNS.
31* ZHER2K T PUT F FOR NO TEST. SAME COLUMNS.
32* ZSYR2K T PUT F FOR NO TEST. SAME COLUMNS.
33*
34* See:
35*
36* Dongarra J. J., Du Croz J. J., Duff I. S. and Hammarling S.
37* A Set of Level 3 Basic Linear Algebra Subprograms.
38*
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.
42*
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.
48*
49* .. Parameters ..
50 INTEGER NIN
51 PARAMETER ( NIN = 5 )
52 INTEGER NSUBS
53 PARAMETER ( NSUBS = 9 )
54 COMPLEX*16 ZERO, ONE
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 )
59 INTEGER NMAX
60 PARAMETER ( NMAX = 65 )
61 INTEGER NIDMAX, NALMAX, NBEMAX
62 PARAMETER ( NIDMAX = 9, NALMAX = 7, NBEMAX = 7 )
63* .. Local Scalars ..
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,
67 $ TSTERR
68 CHARACTER*1 TRANSA, TRANSB
69 CHARACTER*6 SNAMET
70 CHARACTER*32 SNAPS, SUMMRY
71* .. Local Arrays ..
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 ),
77 $ W( 2*NMAX )
78 DOUBLE PRECISION G( NMAX )
79 INTEGER IDIM( NIDMAX )
80 LOGICAL LTEST( NSUBS )
81 CHARACTER*6 SNAMES( NSUBS )
82* .. External Functions ..
83 DOUBLE PRECISION DDIFF
84 LOGICAL LZE
85 EXTERNAL DDIFF, LZE
86* .. External Subroutines ..
87 EXTERNAL ZCHK1, ZCHK2, ZCHK3, ZCHK4, ZCHK5, ZCHKE, ZMMCH
88* .. Intrinsic Functions ..
89 INTRINSIC MAX, MIN
90* .. Scalars in Common ..
91 INTEGER INFOT, NOUTC
92 LOGICAL LERR, OK
93 CHARACTER*6 SRNAMT
94* .. Common blocks ..
95 COMMON /INFOC/INFOT, NOUTC, OK, LERR
96 COMMON /SRNAMC/SRNAMT
97* .. Data statements ..
98 DATA SNAMES/'ZGEMM ', 'ZHEMM ', 'ZSYMM ', 'ZTRMM ',
99 $ 'ZTRSM ', 'ZHERK ', 'ZSYRK ', 'ZHER2K',
100 $ 'ZSYR2K'/
101* .. Executable Statements ..
102*
103* Read name and unit number for summary output file and open file.
104*
105 READ( NIN, FMT = * )SUMMRY
106 READ( NIN, FMT = * )NOUT
107 OPEN( NOUT, FILE = SUMMRY, STATUS = 'NEW' )
108 NOUTC = NOUT
109*
110* Read name and unit number for snapshot output file and open file.
111*
112 READ( NIN, FMT = * )SNAPS
113 READ( NIN, FMT = * )NTRA
114 TRACE = NTRA.GE.0
115 IF( TRACE )THEN
116 OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' )
117 END IF
118* Read the flag that directs rewinding of the snapshot file.
119 READ( NIN, FMT = * )REWI
120 REWI = REWI.AND.TRACE
121* Read the flag that directs stopping on any failure.
122 READ( NIN, FMT = * )SFATAL
123* Read the flag that indicates whether error exits are to be tested.
124 READ( NIN, FMT = * )TSTERR
125* Read the threshold value of the test ratio
126 READ( NIN, FMT = * )THRESH
127*
128* Read and check the parameter values for the tests.
129*
130* Values of N
131 READ( NIN, FMT = * )NIDIM
132 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
133 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
134 GO TO 220
135 END IF
136 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
137 DO 10 I = 1, NIDIM
138 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
139 WRITE( NOUT, FMT = 9996 )NMAX
140 GO TO 220
141 END IF
142 10 CONTINUE
143* Values of ALPHA
144 READ( NIN, FMT = * )NALF
145 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
146 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
147 GO TO 220
148 END IF
149 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
150* Values of BETA
151 READ( NIN, FMT = * )NBET
152 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
153 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
154 GO TO 220
155 END IF
156 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
157*
158* Report values of parameters.
159*
160 WRITE( NOUT, FMT = 9995 )
161 WRITE( NOUT, FMT = 9994 )( IDIM( I ), I = 1, NIDIM )
162 WRITE( NOUT, FMT = 9993 )( ALF( I ), I = 1, NALF )
163 WRITE( NOUT, FMT = 9992 )( BET( I ), I = 1, NBET )
164 IF( .NOT.TSTERR )THEN
165 WRITE( NOUT, FMT = * )
166 WRITE( NOUT, FMT = 9984 )
167 END IF
168 WRITE( NOUT, FMT = * )
169 WRITE( NOUT, FMT = 9999 )THRESH
170 WRITE( NOUT, FMT = * )
171*
172* Read names of subroutines and flags which indicate
173* whether they are to be tested.
174*
175 DO 20 I = 1, NSUBS
176 LTEST( I ) = .FALSE.
177 20 CONTINUE
178 30 READ( NIN, FMT = 9988, END = 60 )SNAMET, LTESTT
179 DO 40 I = 1, NSUBS
180 IF( SNAMET.EQ.SNAMES( I ) )
181 $ GO TO 50
182 40 CONTINUE
183 WRITE( NOUT, FMT = 9990 )SNAMET
184 STOP
185 50 LTEST( I ) = LTESTT
186 GO TO 30
187*
188 60 CONTINUE
189 CLOSE ( NIN )
190*
191* Compute EPS (the machine precision).
192*
193 EPS = RONE
194 70 CONTINUE
195 IF( DDIFF( RONE + EPS, RONE ).EQ.RZERO )
196 $ GO TO 80
197 EPS = RHALF*EPS
198 GO TO 70
199 80 CONTINUE
200 EPS = EPS + EPS
201 WRITE( NOUT, FMT = 9998 )EPS
202*
203* Check the reliability of ZMMCH using exact data.
204*
205 N = MIN( 32, NMAX )
206 DO 100 J = 1, N
207 DO 90 I = 1, N
208 AB( I, J ) = MAX( I - J + 1, 0 )
209 90 CONTINUE
210 AB( J, NMAX + 1 ) = J
211 AB( 1, NMAX + J ) = J
212 C( J, 1 ) = ZERO
213 100 CONTINUE
214 DO 110 J = 1, N
215 CC( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
216 110 CONTINUE
217* CC holds the exact result. On exit from ZMMCH CT holds
218* the result computed by ZMMCH.
219 TRANSA = 'N'
220 TRANSB = 'N'
221 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
222 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
223 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
224 SAME = LZE( CC, CT, N )
225 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
226 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
227 STOP
228 END IF
229 TRANSB = 'C'
230 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
231 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
232 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
233 SAME = LZE( CC, CT, N )
234 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
235 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
236 STOP
237 END IF
238 DO 120 J = 1, N
239 AB( J, NMAX + 1 ) = N - J + 1
240 AB( 1, NMAX + J ) = N - J + 1
241 120 CONTINUE
242 DO 130 J = 1, N
243 CC( N - J + 1 ) = J*( ( J + 1 )*J )/2 -
244 $ ( ( J + 1 )*J*( J - 1 ) )/3
245 130 CONTINUE
246 TRANSA = 'C'
247 TRANSB = 'N'
248 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
249 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
250 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
251 SAME = LZE( CC, CT, N )
252 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
253 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
254 STOP
255 END IF
256 TRANSB = 'C'
257 CALL ZMMCH( TRANSA, TRANSB, N, 1, N, ONE, AB, NMAX,
258 $ AB( 1, NMAX + 1 ), NMAX, ZERO, C, NMAX, CT, G, CC,
259 $ NMAX, EPS, ERR, FATAL, NOUT, .TRUE. )
260 SAME = LZE( CC, CT, N )
261 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
262 WRITE( NOUT, FMT = 9989 )TRANSA, TRANSB, SAME, ERR
263 STOP
264 END IF
265*
266* Test each subroutine in turn.
267*
268 DO 200 ISNUM = 1, NSUBS
269 WRITE( NOUT, FMT = * )
270 IF( .NOT.LTEST( ISNUM ) )THEN
271* Subprogram is not to be tested.
272 WRITE( NOUT, FMT = 9987 )SNAMES( ISNUM )
273 ELSE
274 SRNAMT = SNAMES( ISNUM )
275* Test error exits.
276 IF( TSTERR )THEN
277 CALL ZCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
278 WRITE( NOUT, FMT = * )
279 END IF
280* Test computations.
281 INFOT = 0
282 OK = .TRUE.
283 FATAL = .FALSE.
284 GO TO ( 140, 150, 150, 160, 160, 170, 170,
285 $ 180, 180 )ISNUM
286* Test ZGEMM, 01.
287 140 CALL ZCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
288 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
289 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
290 $ CC, CS, CT, G )
291 GO TO 190
292* Test ZHEMM, 02, ZSYMM, 03.
293 150 CALL ZCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
294 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
295 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
296 $ CC, CS, CT, G )
297 GO TO 190
298* Test ZTRMM, 04, ZTRSM, 05.
299 160 CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
300 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NMAX, AB,
301 $ AA, AS, AB( 1, NMAX + 1 ), BB, BS, CT, G, C )
302 GO TO 190
303* Test ZHERK, 06, ZSYRK, 07.
304 170 CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
305 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
306 $ NMAX, AB, AA, AS, AB( 1, NMAX + 1 ), BB, BS, C,
307 $ CC, CS, CT, G )
308 GO TO 190
309* Test ZHER2K, 08, ZSYR2K, 09.
310 180 CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
311 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET,
312 $ NMAX, AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
313 GO TO 190
314*
315 190 IF( FATAL.AND.SFATAL )
316 $ GO TO 210
317 END IF
318 200 CONTINUE
319 WRITE( NOUT, FMT = 9986 )
320 GO TO 230
321*
322 210 CONTINUE
323 WRITE( NOUT, FMT = 9985 )
324 GO TO 230
325*
326 220 CONTINUE
327 WRITE( NOUT, FMT = 9991 )
328*
329 230 CONTINUE
330 IF( TRACE )
331 $ CLOSE ( NTRA )
332 CLOSE ( NOUT )
333 STOP
334*
335 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
336 $ 'S THAN', F8.2 )
337 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, D9.1 )
338 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
339 $ 'THAN ', I2 )
340 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
341 9995 FORMAT( ' TESTS OF THE COMPLEX*16 LEVEL 3 BLAS', //' THE F',
342 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
343 9994 FORMAT( ' FOR N ', 9I6 )
344 9993 FORMAT( ' FOR ALPHA ',
345 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
346 9992 FORMAT( ' FOR BETA ',
347 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
348 9991 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
349 $ /' ******* TESTS ABANDONED *******' )
350 9990 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
351 $ 'ESTS ABANDONED *******' )
352 9989 FORMAT( ' ERROR IN ZMMCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
353 $ 'ATED WRONGLY.', /' ZMMCH WAS CALLED WITH TRANSA = ', A1,
354 $ ' AND TRANSB = ', A1, /' AND RETURNED SAME = ', L1, ' AND ',
355 $ 'ERR = ', F12.3, '.', /' THIS MAY BE DUE TO FAULTS IN THE ',
356 $ 'ARITHMETIC OR THE COMPILER.', /' ******* TESTS ABANDONED ',
357 $ '*******' )
358 9988 FORMAT( A6, L2 )
359 9987 FORMAT( 1X, A6, ' WAS NOT TESTED' )
360 9986 FORMAT( /' END OF TESTS' )
361 9985 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
362 9984 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
363*
364* End of ZBLAT3.
365*
366 END
367 SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
368 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
369 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
370*
371* Tests ZGEMM.
372*
373* Auxiliary routine for test program for Level 3 Blas.
374*
375* -- Written on 8-February-1989.
376* Jack Dongarra, Argonne National Laboratory.
377* Iain Duff, AERE Harwell.
378* Jeremy Du Croz, Numerical Algorithms Group Ltd.
379* Sven Hammarling, Numerical Algorithms Group Ltd.
380*
381* .. Parameters ..
382 COMPLEX*16 ZERO
383 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
384 DOUBLE PRECISION RZERO
385 PARAMETER ( RZERO = 0.0D0 )
386* .. Scalar Arguments ..
387 DOUBLE PRECISION EPS, THRESH
388 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
389 LOGICAL FATAL, REWI, TRACE
390 CHARACTER*6 SNAME
391* .. Array Arguments ..
392 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
393 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
394 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
395 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
396 $ CS( NMAX*NMAX ), CT( NMAX )
397 DOUBLE PRECISION G( NMAX )
398 INTEGER IDIM( NIDIM )
399* .. Local Scalars ..
400 COMPLEX*16 ALPHA, ALS, BETA, BLS
401 DOUBLE PRECISION ERR, ERRMAX
402 INTEGER I, IA, IB, ICA, ICB, IK, IM, IN, K, KS, LAA,
403 $ LBB, LCC, LDA, LDAS, LDB, LDBS, LDC, LDCS, M,
404 $ MA, MB, MS, N, NA, NARGS, NB, NC, NS
405 LOGICAL NULL, RESET, SAME, TRANA, TRANB
406 CHARACTER*1 TRANAS, TRANBS, TRANSA, TRANSB
407 CHARACTER*3 ICH
408* .. Local Arrays ..
409 LOGICAL ISAME( 13 )
410* .. External Functions ..
411 LOGICAL LZE, LZERES
412 EXTERNAL LZE, LZERES
413* .. External Subroutines ..
414 EXTERNAL ZGEMM, ZMAKE, ZMMCH
415* .. Intrinsic Functions ..
416 INTRINSIC MAX
417* .. Scalars in Common ..
418 INTEGER INFOT, NOUTC
419 LOGICAL LERR, OK
420* .. Common blocks ..
421 COMMON /INFOC/INFOT, NOUTC, OK, LERR
422* .. Data statements ..
423 DATA ICH/'NTC'/
424* .. Executable Statements ..
425*
426 NARGS = 13
427 NC = 0
428 RESET = .TRUE.
429 ERRMAX = RZERO
430*
431 DO 110 IM = 1, NIDIM
432 M = IDIM( IM )
433*
434 DO 100 IN = 1, NIDIM
435 N = IDIM( IN )
436* Set LDC to 1 more than minimum value if room.
437 LDC = M
438 IF( LDC.LT.NMAX )
439 $ LDC = LDC + 1
440* Skip tests if not enough room.
441 IF( LDC.GT.NMAX )
442 $ GO TO 100
443 LCC = LDC*N
444 NULL = N.LE.0.OR.M.LE.0
445*
446 DO 90 IK = 1, NIDIM
447 K = IDIM( IK )
448*
449 DO 80 ICA = 1, 3
450 TRANSA = ICH( ICA: ICA )
451 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
452*
453 IF( TRANA )THEN
454 MA = K
455 NA = M
456 ELSE
457 MA = M
458 NA = K
459 END IF
460* Set LDA to 1 more than minimum value if room.
461 LDA = MA
462 IF( LDA.LT.NMAX )
463 $ LDA = LDA + 1
464* Skip tests if not enough room.
465 IF( LDA.GT.NMAX )
466 $ GO TO 80
467 LAA = LDA*NA
468*
469* Generate the matrix A.
470*
471 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
472 $ RESET, ZERO )
473*
474 DO 70 ICB = 1, 3
475 TRANSB = ICH( ICB: ICB )
476 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
477*
478 IF( TRANB )THEN
479 MB = N
480 NB = K
481 ELSE
482 MB = K
483 NB = N
484 END IF
485* Set LDB to 1 more than minimum value if room.
486 LDB = MB
487 IF( LDB.LT.NMAX )
488 $ LDB = LDB + 1
489* Skip tests if not enough room.
490 IF( LDB.GT.NMAX )
491 $ GO TO 70
492 LBB = LDB*NB
493*
494* Generate the matrix B.
495*
496 CALL ZMAKE( 'GE', ' ', ' ', MB, NB, B, NMAX, BB,
497 $ LDB, RESET, ZERO )
498*
499 DO 60 IA = 1, NALF
500 ALPHA = ALF( IA )
501*
502 DO 50 IB = 1, NBET
503 BETA = BET( IB )
504*
505* Generate the matrix C.
506*
507 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX,
508 $ CC, LDC, RESET, ZERO )
509*
510 NC = NC + 1
511*
512* Save every datum before calling the
513* subroutine.
514*
515 TRANAS = TRANSA
516 TRANBS = TRANSB
517 MS = M
518 NS = N
519 KS = K
520 ALS = ALPHA
521 DO 10 I = 1, LAA
522 AS( I ) = AA( I )
523 10 CONTINUE
524 LDAS = LDA
525 DO 20 I = 1, LBB
526 BS( I ) = BB( I )
527 20 CONTINUE
528 LDBS = LDB
529 BLS = BETA
530 DO 30 I = 1, LCC
531 CS( I ) = CC( I )
532 30 CONTINUE
533 LDCS = LDC
534*
535* Call the subroutine.
536*
537 IF( TRACE )
538 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
539 $ TRANSA, TRANSB, M, N, K, ALPHA, LDA, LDB,
540 $ BETA, LDC
541 IF( REWI )
542 $ REWIND NTRA
543 CALL ZGEMM( TRANSA, TRANSB, M, N, K, ALPHA,
544 $ AA, LDA, BB, LDB, BETA, CC, LDC )
545*
546* Check if error-exit was taken incorrectly.
547*
548 IF( .NOT.OK )THEN
549 WRITE( NOUT, FMT = 9994 )
550 FATAL = .TRUE.
551 GO TO 120
552 END IF
553*
554* See what data changed inside subroutines.
555*
556 ISAME( 1 ) = TRANSA.EQ.TRANAS
557 ISAME( 2 ) = TRANSB.EQ.TRANBS
558 ISAME( 3 ) = MS.EQ.M
559 ISAME( 4 ) = NS.EQ.N
560 ISAME( 5 ) = KS.EQ.K
561 ISAME( 6 ) = ALS.EQ.ALPHA
562 ISAME( 7 ) = LZE( AS, AA, LAA )
563 ISAME( 8 ) = LDAS.EQ.LDA
564 ISAME( 9 ) = LZE( BS, BB, LBB )
565 ISAME( 10 ) = LDBS.EQ.LDB
566 ISAME( 11 ) = BLS.EQ.BETA
567 IF( NULL )THEN
568 ISAME( 12 ) = LZE( CS, CC, LCC )
569 ELSE
570 ISAME( 12 ) = LZERES( 'GE', ' ', M, N, CS,
571 $ CC, LDC )
572 END IF
573 ISAME( 13 ) = LDCS.EQ.LDC
574*
575* If data was incorrectly changed, report
576* and return.
577*
578 SAME = .TRUE.
579 DO 40 I = 1, NARGS
580 SAME = SAME.AND.ISAME( I )
581 IF( .NOT.ISAME( I ) )
582 $ WRITE( NOUT, FMT = 9998 )I
583 40 CONTINUE
584 IF( .NOT.SAME )THEN
585 FATAL = .TRUE.
586 GO TO 120
587 END IF
588*
589 IF( .NOT.NULL )THEN
590*
591* Check the result.
592*
593 CALL ZMMCH( TRANSA, TRANSB, M, N, K,
594 $ ALPHA, A, NMAX, B, NMAX, BETA,
595 $ C, NMAX, CT, G, CC, LDC, EPS,
596 $ ERR, FATAL, NOUT, .TRUE. )
597 ERRMAX = MAX( ERRMAX, ERR )
598* If got really bad answer, report and
599* return.
600 IF( FATAL )
601 $ GO TO 120
602 END IF
603*
604 50 CONTINUE
605*
606 60 CONTINUE
607*
608 70 CONTINUE
609*
610 80 CONTINUE
611*
612 90 CONTINUE
613*
614 100 CONTINUE
615*
616 110 CONTINUE
617*
618* Report result.
619*
620 IF( ERRMAX.LT.THRESH )THEN
621 WRITE( NOUT, FMT = 9999 )SNAME, NC
622 ELSE
623 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
624 END IF
625 GO TO 130
626*
627 120 CONTINUE
628 WRITE( NOUT, FMT = 9996 )SNAME
629 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANSA, TRANSB, M, N, K,
630 $ ALPHA, LDA, LDB, BETA, LDC
631*
632 130 CONTINUE
633 RETURN
634*
635 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
636 $ 'S)' )
637 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
638 $ 'ANGED INCORRECTLY *******' )
639 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
640 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
641 $ ' - SUSPECT *******' )
642 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
643 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',''', A1, ''',',
644 $ 3( I3, ',' ), '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3,
645 $ ',(', F4.1, ',', F4.1, '), C,', I3, ').' )
646 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
647 $ '******' )
648*
649* End of ZCHK1.
650*
651 END
652 SUBROUTINE ZCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
653 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
654 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
655*
656* Tests ZHEMM and ZSYMM.
657*
658* Auxiliary routine for test program for Level 3 Blas.
659*
660* -- Written on 8-February-1989.
661* Jack Dongarra, Argonne National Laboratory.
662* Iain Duff, AERE Harwell.
663* Jeremy Du Croz, Numerical Algorithms Group Ltd.
664* Sven Hammarling, Numerical Algorithms Group Ltd.
665*
666* .. Parameters ..
667 COMPLEX*16 ZERO
668 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
669 DOUBLE PRECISION RZERO
670 PARAMETER ( RZERO = 0.0D0 )
671* .. Scalar Arguments ..
672 DOUBLE PRECISION EPS, THRESH
673 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
674 LOGICAL FATAL, REWI, TRACE
675 CHARACTER*6 SNAME
676* .. Array Arguments ..
677 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
678 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
679 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
680 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
681 $ CS( NMAX*NMAX ), CT( NMAX )
682 DOUBLE PRECISION G( NMAX )
683 INTEGER IDIM( NIDIM )
684* .. Local Scalars ..
685 COMPLEX*16 ALPHA, ALS, BETA, BLS
686 DOUBLE PRECISION ERR, ERRMAX
687 INTEGER I, IA, IB, ICS, ICU, IM, IN, LAA, LBB, LCC,
688 $ LDA, LDAS, LDB, LDBS, LDC, LDCS, M, MS, N, NA,
689 $ NARGS, NC, NS
690 LOGICAL CONJ, LEFT, NULL, RESET, SAME
691 CHARACTER*1 SIDE, SIDES, UPLO, UPLOS
692 CHARACTER*2 ICHS, ICHU
693* .. Local Arrays ..
694 LOGICAL ISAME( 13 )
695* .. External Functions ..
696 LOGICAL LZE, LZERES
697 EXTERNAL LZE, LZERES
698* .. External Subroutines ..
699 EXTERNAL ZHEMM, ZMAKE, ZMMCH, ZSYMM
700* .. Intrinsic Functions ..
701 INTRINSIC MAX
702* .. Scalars in Common ..
703 INTEGER INFOT, NOUTC
704 LOGICAL LERR, OK
705* .. Common blocks ..
706 COMMON /INFOC/INFOT, NOUTC, OK, LERR
707* .. Data statements ..
708 DATA ICHS/'LR'/, ICHU/'UL'/
709* .. Executable Statements ..
710 CONJ = SNAME( 2: 3 ).EQ.'HE'
711*
712 NARGS = 12
713 NC = 0
714 RESET = .TRUE.
715 ERRMAX = RZERO
716*
717 DO 100 IM = 1, NIDIM
718 M = IDIM( IM )
719*
720 DO 90 IN = 1, NIDIM
721 N = IDIM( IN )
722* Set LDC to 1 more than minimum value if room.
723 LDC = M
724 IF( LDC.LT.NMAX )
725 $ LDC = LDC + 1
726* Skip tests if not enough room.
727 IF( LDC.GT.NMAX )
728 $ GO TO 90
729 LCC = LDC*N
730 NULL = N.LE.0.OR.M.LE.0
731* Set LDB to 1 more than minimum value if room.
732 LDB = M
733 IF( LDB.LT.NMAX )
734 $ LDB = LDB + 1
735* Skip tests if not enough room.
736 IF( LDB.GT.NMAX )
737 $ GO TO 90
738 LBB = LDB*N
739*
740* Generate the matrix B.
741*
742 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX, BB, LDB, RESET,
743 $ ZERO )
744*
745 DO 80 ICS = 1, 2
746 SIDE = ICHS( ICS: ICS )
747 LEFT = SIDE.EQ.'L'
748*
749 IF( LEFT )THEN
750 NA = M
751 ELSE
752 NA = N
753 END IF
754* Set LDA to 1 more than minimum value if room.
755 LDA = NA
756 IF( LDA.LT.NMAX )
757 $ LDA = LDA + 1
758* Skip tests if not enough room.
759 IF( LDA.GT.NMAX )
760 $ GO TO 80
761 LAA = LDA*NA
762*
763 DO 70 ICU = 1, 2
764 UPLO = ICHU( ICU: ICU )
765*
766* Generate the hermitian or symmetric matrix A.
767*
768 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', NA, NA, A, NMAX,
769 $ AA, LDA, RESET, ZERO )
770*
771 DO 60 IA = 1, NALF
772 ALPHA = ALF( IA )
773*
774 DO 50 IB = 1, NBET
775 BETA = BET( IB )
776*
777* Generate the matrix C.
778*
779 CALL ZMAKE( 'GE', ' ', ' ', M, N, C, NMAX, CC,
780 $ LDC, RESET, ZERO )
781*
782 NC = NC + 1
783*
784* Save every datum before calling the
785* subroutine.
786*
787 SIDES = SIDE
788 UPLOS = UPLO
789 MS = M
790 NS = N
791 ALS = ALPHA
792 DO 10 I = 1, LAA
793 AS( I ) = AA( I )
794 10 CONTINUE
795 LDAS = LDA
796 DO 20 I = 1, LBB
797 BS( I ) = BB( I )
798 20 CONTINUE
799 LDBS = LDB
800 BLS = BETA
801 DO 30 I = 1, LCC
802 CS( I ) = CC( I )
803 30 CONTINUE
804 LDCS = LDC
805*
806* Call the subroutine.
807*
808 IF( TRACE )
809 $ WRITE( NTRA, FMT = 9995 )NC, SNAME, SIDE,
810 $ UPLO, M, N, ALPHA, LDA, LDB, BETA, LDC
811 IF( REWI )
812 $ REWIND NTRA
813 IF( CONJ )THEN
814 CALL ZHEMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
815 $ BB, LDB, BETA, CC, LDC )
816 ELSE
817 CALL ZSYMM( SIDE, UPLO, M, N, ALPHA, AA, LDA,
818 $ BB, LDB, BETA, CC, LDC )
819 END IF
820*
821* Check if error-exit was taken incorrectly.
822*
823 IF( .NOT.OK )THEN
824 WRITE( NOUT, FMT = 9994 )
825 FATAL = .TRUE.
826 GO TO 110
827 END IF
828*
829* See what data changed inside subroutines.
830*
831 ISAME( 1 ) = SIDES.EQ.SIDE
832 ISAME( 2 ) = UPLOS.EQ.UPLO
833 ISAME( 3 ) = MS.EQ.M
834 ISAME( 4 ) = NS.EQ.N
835 ISAME( 5 ) = ALS.EQ.ALPHA
836 ISAME( 6 ) = LZE( AS, AA, LAA )
837 ISAME( 7 ) = LDAS.EQ.LDA
838 ISAME( 8 ) = LZE( BS, BB, LBB )
839 ISAME( 9 ) = LDBS.EQ.LDB
840 ISAME( 10 ) = BLS.EQ.BETA
841 IF( NULL )THEN
842 ISAME( 11 ) = LZE( CS, CC, LCC )
843 ELSE
844 ISAME( 11 ) = LZERES( 'GE', ' ', M, N, CS,
845 $ CC, LDC )
846 END IF
847 ISAME( 12 ) = LDCS.EQ.LDC
848*
849* If data was incorrectly changed, report and
850* return.
851*
852 SAME = .TRUE.
853 DO 40 I = 1, NARGS
854 SAME = SAME.AND.ISAME( I )
855 IF( .NOT.ISAME( I ) )
856 $ WRITE( NOUT, FMT = 9998 )I
857 40 CONTINUE
858 IF( .NOT.SAME )THEN
859 FATAL = .TRUE.
860 GO TO 110
861 END IF
862*
863 IF( .NOT.NULL )THEN
864*
865* Check the result.
866*
867 IF( LEFT )THEN
868 CALL ZMMCH( 'N', 'N', M, N, M, ALPHA, A,
869 $ NMAX, B, NMAX, BETA, C, NMAX,
870 $ CT, G, CC, LDC, EPS, ERR,
871 $ FATAL, NOUT, .TRUE. )
872 ELSE
873 CALL ZMMCH( 'N', 'N', M, N, N, ALPHA, B,
874 $ NMAX, A, NMAX, BETA, C, NMAX,
875 $ CT, G, CC, LDC, EPS, ERR,
876 $ FATAL, NOUT, .TRUE. )
877 END IF
878 ERRMAX = MAX( ERRMAX, ERR )
879* If got really bad answer, report and
880* return.
881 IF( FATAL )
882 $ GO TO 110
883 END IF
884*
885 50 CONTINUE
886*
887 60 CONTINUE
888*
889 70 CONTINUE
890*
891 80 CONTINUE
892*
893 90 CONTINUE
894*
895 100 CONTINUE
896*
897* Report result.
898*
899 IF( ERRMAX.LT.THRESH )THEN
900 WRITE( NOUT, FMT = 9999 )SNAME, NC
901 ELSE
902 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
903 END IF
904 GO TO 120
905*
906 110 CONTINUE
907 WRITE( NOUT, FMT = 9996 )SNAME
908 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, M, N, ALPHA, LDA,
909 $ LDB, BETA, LDC
910*
911 120 CONTINUE
912 RETURN
913*
914 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
915 $ 'S)' )
916 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
917 $ 'ANGED INCORRECTLY *******' )
918 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
919 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
920 $ ' - SUSPECT *******' )
921 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
922 9995 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
923 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
924 $ ',', F4.1, '), C,', I3, ') .' )
925 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
926 $ '******' )
927*
928* End of ZCHK2.
929*
930 END
931 SUBROUTINE ZCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
932 $ FATAL, NIDIM, IDIM, NALF, ALF, NMAX, A, AA, AS,
933 $ B, BB, BS, CT, G, C )
934*
935* Tests ZTRMM and ZTRSM.
936*
937* Auxiliary routine for test program for Level 3 Blas.
938*
939* -- Written on 8-February-1989.
940* Jack Dongarra, Argonne National Laboratory.
941* Iain Duff, AERE Harwell.
942* Jeremy Du Croz, Numerical Algorithms Group Ltd.
943* Sven Hammarling, Numerical Algorithms Group Ltd.
944*
945* .. Parameters ..
946 COMPLEX*16 ZERO, ONE
947 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
948 $ ONE = ( 1.0D0, 0.0D0 ) )
949 DOUBLE PRECISION RZERO
950 PARAMETER ( RZERO = 0.0D0 )
951* .. Scalar Arguments ..
952 DOUBLE PRECISION EPS, THRESH
953 INTEGER NALF, NIDIM, NMAX, NOUT, NTRA
954 LOGICAL FATAL, REWI, TRACE
955 CHARACTER*6 SNAME
956* .. Array Arguments ..
957 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
958 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
959 $ BB( NMAX*NMAX ), BS( NMAX*NMAX ),
960 $ C( NMAX, NMAX ), CT( NMAX )
961 DOUBLE PRECISION G( NMAX )
962 INTEGER IDIM( NIDIM )
963* .. Local Scalars ..
964 COMPLEX*16 ALPHA, ALS
965 DOUBLE PRECISION ERR, ERRMAX
966 INTEGER I, IA, ICD, ICS, ICT, ICU, IM, IN, J, LAA, LBB,
967 $ LDA, LDAS, LDB, LDBS, M, MS, N, NA, NARGS, NC,
968 $ NS
969 LOGICAL LEFT, NULL, RESET, SAME
970 CHARACTER*1 DIAG, DIAGS, SIDE, SIDES, TRANAS, TRANSA, UPLO,
971 $ UPLOS
972 CHARACTER*2 ICHD, ICHS, ICHU
973 CHARACTER*3 ICHT
974* .. Local Arrays ..
975 LOGICAL ISAME( 13 )
976* .. External Functions ..
977 LOGICAL LZE, LZERES
978 EXTERNAL LZE, LZERES
979* .. External Subroutines ..
980 EXTERNAL ZMAKE, ZMMCH, ZTRMM, ZTRSM
981* .. Intrinsic Functions ..
982 INTRINSIC MAX
983* .. Scalars in Common ..
984 INTEGER INFOT, NOUTC
985 LOGICAL LERR, OK
986* .. Common blocks ..
987 COMMON /INFOC/INFOT, NOUTC, OK, LERR
988* .. Data statements ..
989 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/, ICHS/'LR'/
990* .. Executable Statements ..
991*
992 NARGS = 11
993 NC = 0
994 RESET = .TRUE.
995 ERRMAX = RZERO
996* Set up zero matrix for ZMMCH.
997 DO 20 J = 1, NMAX
998 DO 10 I = 1, NMAX
999 C( I, J ) = ZERO
1000 10 CONTINUE
1001 20 CONTINUE
1002*
1003 DO 140 IM = 1, NIDIM
1004 M = IDIM( IM )
1005*
1006 DO 130 IN = 1, NIDIM
1007 N = IDIM( IN )
1008* Set LDB to 1 more than minimum value if room.
1009 LDB = M
1010 IF( LDB.LT.NMAX )
1011 $ LDB = LDB + 1
1012* Skip tests if not enough room.
1013 IF( LDB.GT.NMAX )
1014 $ GO TO 130
1015 LBB = LDB*N
1016 NULL = M.LE.0.OR.N.LE.0
1017*
1018 DO 120 ICS = 1, 2
1019 SIDE = ICHS( ICS: ICS )
1020 LEFT = SIDE.EQ.'L'
1021 IF( LEFT )THEN
1022 NA = M
1023 ELSE
1024 NA = N
1025 END IF
1026* Set LDA to 1 more than minimum value if room.
1027 LDA = NA
1028 IF( LDA.LT.NMAX )
1029 $ LDA = LDA + 1
1030* Skip tests if not enough room.
1031 IF( LDA.GT.NMAX )
1032 $ GO TO 130
1033 LAA = LDA*NA
1034*
1035 DO 110 ICU = 1, 2
1036 UPLO = ICHU( ICU: ICU )
1037*
1038 DO 100 ICT = 1, 3
1039 TRANSA = ICHT( ICT: ICT )
1040*
1041 DO 90 ICD = 1, 2
1042 DIAG = ICHD( ICD: ICD )
1043*
1044 DO 80 IA = 1, NALF
1045 ALPHA = ALF( IA )
1046*
1047* Generate the matrix A.
1048*
1049 CALL ZMAKE( 'TR', UPLO, DIAG, NA, NA, A,
1050 $ NMAX, AA, LDA, RESET, ZERO )
1051*
1052* Generate the matrix B.
1053*
1054 CALL ZMAKE( 'GE', ' ', ' ', M, N, B, NMAX,
1055 $ BB, LDB, RESET, ZERO )
1056*
1057 NC = NC + 1
1058*
1059* Save every datum before calling the
1060* subroutine.
1061*
1062 SIDES = SIDE
1063 UPLOS = UPLO
1064 TRANAS = TRANSA
1065 DIAGS = DIAG
1066 MS = M
1067 NS = N
1068 ALS = ALPHA
1069 DO 30 I = 1, LAA
1070 AS( I ) = AA( I )
1071 30 CONTINUE
1072 LDAS = LDA
1073 DO 40 I = 1, LBB
1074 BS( I ) = BB( I )
1075 40 CONTINUE
1076 LDBS = LDB
1077*
1078* Call the subroutine.
1079*
1080 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1081 IF( TRACE )
1082 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1083 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1084 $ LDA, LDB
1085 IF( REWI )
1086 $ REWIND NTRA
1087 CALL ZTRMM( SIDE, UPLO, TRANSA, DIAG, M,
1088 $ N, ALPHA, AA, LDA, BB, LDB )
1089 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1090 IF( TRACE )
1091 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1092 $ SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA,
1093 $ LDA, LDB
1094 IF( REWI )
1095 $ REWIND NTRA
1096 CALL ZTRSM( SIDE, UPLO, TRANSA, DIAG, M,
1097 $ N, ALPHA, AA, LDA, BB, LDB )
1098 END IF
1099*
1100* Check if error-exit was taken incorrectly.
1101*
1102 IF( .NOT.OK )THEN
1103 WRITE( NOUT, FMT = 9994 )
1104 FATAL = .TRUE.
1105 GO TO 150
1106 END IF
1107*
1108* See what data changed inside subroutines.
1109*
1110 ISAME( 1 ) = SIDES.EQ.SIDE
1111 ISAME( 2 ) = UPLOS.EQ.UPLO
1112 ISAME( 3 ) = TRANAS.EQ.TRANSA
1113 ISAME( 4 ) = DIAGS.EQ.DIAG
1114 ISAME( 5 ) = MS.EQ.M
1115 ISAME( 6 ) = NS.EQ.N
1116 ISAME( 7 ) = ALS.EQ.ALPHA
1117 ISAME( 8 ) = LZE( AS, AA, LAA )
1118 ISAME( 9 ) = LDAS.EQ.LDA
1119 IF( NULL )THEN
1120 ISAME( 10 ) = LZE( BS, BB, LBB )
1121 ELSE
1122 ISAME( 10 ) = LZERES( 'GE', ' ', M, N, BS,
1123 $ BB, LDB )
1124 END IF
1125 ISAME( 11 ) = LDBS.EQ.LDB
1126*
1127* If data was incorrectly changed, report and
1128* return.
1129*
1130 SAME = .TRUE.
1131 DO 50 I = 1, NARGS
1132 SAME = SAME.AND.ISAME( I )
1133 IF( .NOT.ISAME( I ) )
1134 $ WRITE( NOUT, FMT = 9998 )I
1135 50 CONTINUE
1136 IF( .NOT.SAME )THEN
1137 FATAL = .TRUE.
1138 GO TO 150
1139 END IF
1140*
1141 IF( .NOT.NULL )THEN
1142 IF( SNAME( 4: 5 ).EQ.'MM' )THEN
1143*
1144* Check the result.
1145*
1146 IF( LEFT )THEN
1147 CALL ZMMCH( TRANSA, 'N', M, N, M,
1148 $ ALPHA, A, NMAX, B, NMAX,
1149 $ ZERO, C, NMAX, CT, G,
1150 $ BB, LDB, EPS, ERR,
1151 $ FATAL, NOUT, .TRUE. )
1152 ELSE
1153 CALL ZMMCH( 'N', TRANSA, M, N, N,
1154 $ ALPHA, B, NMAX, A, NMAX,
1155 $ ZERO, C, NMAX, CT, G,
1156 $ BB, LDB, EPS, ERR,
1157 $ FATAL, NOUT, .TRUE. )
1158 END IF
1159 ELSE IF( SNAME( 4: 5 ).EQ.'SM' )THEN
1160*
1161* Compute approximation to original
1162* matrix.
1163*
1164 DO 70 J = 1, N
1165 DO 60 I = 1, M
1166 C( I, J ) = BB( I + ( J - 1 )*
1167 $ LDB )
1168 BB( I + ( J - 1 )*LDB ) = ALPHA*
1169 $ B( I, J )
1170 60 CONTINUE
1171 70 CONTINUE
1172*
1173 IF( LEFT )THEN
1174 CALL ZMMCH( TRANSA, 'N', M, N, M,
1175 $ ONE, A, NMAX, C, NMAX,
1176 $ ZERO, B, NMAX, CT, G,
1177 $ BB, LDB, EPS, ERR,
1178 $ FATAL, NOUT, .FALSE. )
1179 ELSE
1180 CALL ZMMCH( 'N', TRANSA, M, N, N,
1181 $ ONE, C, NMAX, A, NMAX,
1182 $ ZERO, B, NMAX, CT, G,
1183 $ BB, LDB, EPS, ERR,
1184 $ FATAL, NOUT, .FALSE. )
1185 END IF
1186 END IF
1187 ERRMAX = MAX( ERRMAX, ERR )
1188* If got really bad answer, report and
1189* return.
1190 IF( FATAL )
1191 $ GO TO 150
1192 END IF
1193*
1194 80 CONTINUE
1195*
1196 90 CONTINUE
1197*
1198 100 CONTINUE
1199*
1200 110 CONTINUE
1201*
1202 120 CONTINUE
1203*
1204 130 CONTINUE
1205*
1206 140 CONTINUE
1207*
1208* Report result.
1209*
1210 IF( ERRMAX.LT.THRESH )THEN
1211 WRITE( NOUT, FMT = 9999 )SNAME, NC
1212 ELSE
1213 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1214 END IF
1215 GO TO 160
1216*
1217 150 CONTINUE
1218 WRITE( NOUT, FMT = 9996 )SNAME
1219 WRITE( NOUT, FMT = 9995 )NC, SNAME, SIDE, UPLO, TRANSA, DIAG, M,
1220 $ N, ALPHA, LDA, LDB
1221*
1222 160 CONTINUE
1223 RETURN
1224*
1225 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1226 $ 'S)' )
1227 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1228 $ 'ANGED INCORRECTLY *******' )
1229 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1230 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1231 $ ' - SUSPECT *******' )
1232 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1233 9995 FORMAT( 1X, I6, ': ', A6, '(', 4( '''', A1, ''',' ), 2( I3, ',' ),
1234 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ') ',
1235 $ ' .' )
1236 9994 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1237 $ '******' )
1238*
1239* End of ZCHK3.
1240*
1241 END
1242 SUBROUTINE ZCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1243 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1244 $ A, AA, AS, B, BB, BS, C, CC, CS, CT, G )
1245*
1246* Tests ZHERK and ZSYRK.
1247*
1248* Auxiliary routine for test program for Level 3 Blas.
1249*
1250* -- Written on 8-February-1989.
1251* Jack Dongarra, Argonne National Laboratory.
1252* Iain Duff, AERE Harwell.
1253* Jeremy Du Croz, Numerical Algorithms Group Ltd.
1254* Sven Hammarling, Numerical Algorithms Group Ltd.
1255*
1256* .. Parameters ..
1257 COMPLEX*16 ZERO
1258 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
1259 DOUBLE PRECISION RONE, RZERO
1260 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 )
1261* .. Scalar Arguments ..
1262 DOUBLE PRECISION EPS, THRESH
1263 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1264 LOGICAL FATAL, REWI, TRACE
1265 CHARACTER*6 SNAME
1266* .. Array Arguments ..
1267 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1268 $ AS( NMAX*NMAX ), B( NMAX, NMAX ),
1269 $ BB( NMAX*NMAX ), BET( NBET ), BS( NMAX*NMAX ),
1270 $ C( NMAX, NMAX ), CC( NMAX*NMAX ),
1271 $ CS( NMAX*NMAX ), CT( NMAX )
1272 DOUBLE PRECISION G( NMAX )
1273 INTEGER IDIM( NIDIM )
1274* .. Local Scalars ..
1275 COMPLEX*16 ALPHA, ALS, BETA, BETS
1276 DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS, RBETA, RBETS
1277 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, K, KS,
1278 $ LAA, LCC, LDA, LDAS, LDC, LDCS, LJ, MA, N, NA,
1279 $ NARGS, NC, NS
1280 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1281 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1282 CHARACTER*2 ICHT, ICHU
1283* .. Local Arrays ..
1284 LOGICAL ISAME( 13 )
1285* .. External Functions ..
1286 LOGICAL LZE, LZERES
1287 EXTERNAL LZE, LZERES
1288* .. External Subroutines ..
1289 EXTERNAL ZHERK, ZMAKE, ZMMCH, ZSYRK
1290* .. Intrinsic Functions ..
1291 INTRINSIC DCMPLX, MAX, DBLE
1292* .. Scalars in Common ..
1293 INTEGER INFOT, NOUTC
1294 LOGICAL LERR, OK
1295* .. Common blocks ..
1296 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1297* .. Data statements ..
1298 DATA ICHT/'NC'/, ICHU/'UL'/
1299* .. Executable Statements ..
1300 CONJ = SNAME( 2: 3 ).EQ.'HE'
1301*
1302 NARGS = 10
1303 NC = 0
1304 RESET = .TRUE.
1305 ERRMAX = RZERO
1306*
1307 DO 100 IN = 1, NIDIM
1308 N = IDIM( IN )
1309* Set LDC to 1 more than minimum value if room.
1310 LDC = N
1311 IF( LDC.LT.NMAX )
1312 $ LDC = LDC + 1
1313* Skip tests if not enough room.
1314 IF( LDC.GT.NMAX )
1315 $ GO TO 100
1316 LCC = LDC*N
1317*
1318 DO 90 IK = 1, NIDIM
1319 K = IDIM( IK )
1320*
1321 DO 80 ICT = 1, 2
1322 TRANS = ICHT( ICT: ICT )
1323 TRAN = TRANS.EQ.'C'
1324 IF( TRAN.AND..NOT.CONJ )
1325 $ TRANS = 'T'
1326 IF( TRAN )THEN
1327 MA = K
1328 NA = N
1329 ELSE
1330 MA = N
1331 NA = K
1332 END IF
1333* Set LDA to 1 more than minimum value if room.
1334 LDA = MA
1335 IF( LDA.LT.NMAX )
1336 $ LDA = LDA + 1
1337* Skip tests if not enough room.
1338 IF( LDA.GT.NMAX )
1339 $ GO TO 80
1340 LAA = LDA*NA
1341*
1342* Generate the matrix A.
1343*
1344 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, A, NMAX, AA, LDA,
1345 $ RESET, ZERO )
1346*
1347 DO 70 ICU = 1, 2
1348 UPLO = ICHU( ICU: ICU )
1349 UPPER = UPLO.EQ.'U'
1350*
1351 DO 60 IA = 1, NALF
1352 ALPHA = ALF( IA )
1353 IF( CONJ )THEN
1354 RALPHA = DBLE( ALPHA )
1355 ALPHA = DCMPLX( RALPHA, RZERO )
1356 END IF
1357*
1358 DO 50 IB = 1, NBET
1359 BETA = BET( IB )
1360 IF( CONJ )THEN
1361 RBETA = DBLE( BETA )
1362 BETA = DCMPLX( RBETA, RZERO )
1363 END IF
1364 NULL = N.LE.0
1365 IF( CONJ )
1366 $ NULL = NULL.OR.( ( K.LE.0.OR.RALPHA.EQ.
1367 $ RZERO ).AND.RBETA.EQ.RONE )
1368*
1369* Generate the matrix C.
1370*
1371 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1372 $ NMAX, CC, LDC, RESET, ZERO )
1373*
1374 NC = NC + 1
1375*
1376* Save every datum before calling the subroutine.
1377*
1378 UPLOS = UPLO
1379 TRANSS = TRANS
1380 NS = N
1381 KS = K
1382 IF( CONJ )THEN
1383 RALS = RALPHA
1384 ELSE
1385 ALS = ALPHA
1386 END IF
1387 DO 10 I = 1, LAA
1388 AS( I ) = AA( I )
1389 10 CONTINUE
1390 LDAS = LDA
1391 IF( CONJ )THEN
1392 RBETS = RBETA
1393 ELSE
1394 BETS = BETA
1395 END IF
1396 DO 20 I = 1, LCC
1397 CS( I ) = CC( I )
1398 20 CONTINUE
1399 LDCS = LDC
1400*
1401* Call the subroutine.
1402*
1403 IF( CONJ )THEN
1404 IF( TRACE )
1405 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1406 $ TRANS, N, K, RALPHA, LDA, RBETA, LDC
1407 IF( REWI )
1408 $ REWIND NTRA
1409 CALL ZHERK( UPLO, TRANS, N, K, RALPHA, AA,
1410 $ LDA, RBETA, CC, LDC )
1411 ELSE
1412 IF( TRACE )
1413 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1414 $ TRANS, N, K, ALPHA, LDA, BETA, LDC
1415 IF( REWI )
1416 $ REWIND NTRA
1417 CALL ZSYRK( UPLO, TRANS, N, K, ALPHA, AA,
1418 $ LDA, BETA, CC, LDC )
1419 END IF
1420*
1421* Check if error-exit was taken incorrectly.
1422*
1423 IF( .NOT.OK )THEN
1424 WRITE( NOUT, FMT = 9992 )
1425 FATAL = .TRUE.
1426 GO TO 120
1427 END IF
1428*
1429* See what data changed inside subroutines.
1430*
1431 ISAME( 1 ) = UPLOS.EQ.UPLO
1432 ISAME( 2 ) = TRANSS.EQ.TRANS
1433 ISAME( 3 ) = NS.EQ.N
1434 ISAME( 4 ) = KS.EQ.K
1435 IF( CONJ )THEN
1436 ISAME( 5 ) = RALS.EQ.RALPHA
1437 ELSE
1438 ISAME( 5 ) = ALS.EQ.ALPHA
1439 END IF
1440 ISAME( 6 ) = LZE( AS, AA, LAA )
1441 ISAME( 7 ) = LDAS.EQ.LDA
1442 IF( CONJ )THEN
1443 ISAME( 8 ) = RBETS.EQ.RBETA
1444 ELSE
1445 ISAME( 8 ) = BETS.EQ.BETA
1446 END IF
1447 IF( NULL )THEN
1448 ISAME( 9 ) = LZE( CS, CC, LCC )
1449 ELSE
1450 ISAME( 9 ) = LZERES( SNAME( 2: 3 ), UPLO, N,
1451 $ N, CS, CC, LDC )
1452 END IF
1453 ISAME( 10 ) = LDCS.EQ.LDC
1454*
1455* If data was incorrectly changed, report and
1456* return.
1457*
1458 SAME = .TRUE.
1459 DO 30 I = 1, NARGS
1460 SAME = SAME.AND.ISAME( I )
1461 IF( .NOT.ISAME( I ) )
1462 $ WRITE( NOUT, FMT = 9998 )I
1463 30 CONTINUE
1464 IF( .NOT.SAME )THEN
1465 FATAL = .TRUE.
1466 GO TO 120
1467 END IF
1468*
1469 IF( .NOT.NULL )THEN
1470*
1471* Check the result column by column.
1472*
1473 IF( CONJ )THEN
1474 TRANST = 'C'
1475 ELSE
1476 TRANST = 'T'
1477 END IF
1478 JC = 1
1479 DO 40 J = 1, N
1480 IF( UPPER )THEN
1481 JJ = 1
1482 LJ = J
1483 ELSE
1484 JJ = J
1485 LJ = N - J + 1
1486 END IF
1487 IF( TRAN )THEN
1488 CALL ZMMCH( TRANST, 'N', LJ, 1, K,
1489 $ ALPHA, A( 1, JJ ), NMAX,
1490 $ A( 1, J ), NMAX, BETA,
1491 $ C( JJ, J ), NMAX, CT, G,
1492 $ CC( JC ), LDC, EPS, ERR,
1493 $ FATAL, NOUT, .TRUE. )
1494 ELSE
1495 CALL ZMMCH( 'N', TRANST, LJ, 1, K,
1496 $ ALPHA, A( JJ, 1 ), NMAX,
1497 $ A( J, 1 ), NMAX, BETA,
1498 $ C( JJ, J ), NMAX, CT, G,
1499 $ CC( JC ), LDC, EPS, ERR,
1500 $ FATAL, NOUT, .TRUE. )
1501 END IF
1502 IF( UPPER )THEN
1503 JC = JC + LDC
1504 ELSE
1505 JC = JC + LDC + 1
1506 END IF
1507 ERRMAX = MAX( ERRMAX, ERR )
1508* If got really bad answer, report and
1509* return.
1510 IF( FATAL )
1511 $ GO TO 110
1512 40 CONTINUE
1513 END IF
1514*
1515 50 CONTINUE
1516*
1517 60 CONTINUE
1518*
1519 70 CONTINUE
1520*
1521 80 CONTINUE
1522*
1523 90 CONTINUE
1524*
1525 100 CONTINUE
1526*
1527* Report result.
1528*
1529 IF( ERRMAX.LT.THRESH )THEN
1530 WRITE( NOUT, FMT = 9999 )SNAME, NC
1531 ELSE
1532 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1533 END IF
1534 GO TO 130
1535*
1536 110 CONTINUE
1537 IF( N.GT.1 )
1538 $ WRITE( NOUT, FMT = 9995 )J
1539*
1540 120 CONTINUE
1541 WRITE( NOUT, FMT = 9996 )SNAME
1542 IF( CONJ )THEN
1543 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, RALPHA,
1544 $ LDA, RBETA, LDC
1545 ELSE
1546 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1547 $ LDA, BETA, LDC
1548 END IF
1549*
1550 130 CONTINUE
1551 RETURN
1552*
1553 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1554 $ 'S)' )
1555 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1556 $ 'ANGED INCORRECTLY *******' )
1557 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1558 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1559 $ ' - SUSPECT *******' )
1560 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1561 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1562 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1563 $ F4.1, ', A,', I3, ',', F4.1, ', C,', I3, ') ',
1564 $ ' .' )
1565 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1566 $ '(', F4.1, ',', F4.1, ') , A,', I3, ',(', F4.1, ',', F4.1,
1567 $ '), C,', I3, ') .' )
1568 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1569 $ '******' )
1570*
1571* End of ZCHK4.
1572*
1573 END
1574 SUBROUTINE ZCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1575 $ FATAL, NIDIM, IDIM, NALF, ALF, NBET, BET, NMAX,
1576 $ AB, AA, AS, BB, BS, C, CC, CS, CT, G, W )
1577*
1578* Tests ZHER2K and ZSYR2K.
1579*
1580* Auxiliary routine for test program for Level 3 Blas.
1581*
1582* -- Written on 8-February-1989.
1583* Jack Dongarra, Argonne National Laboratory.
1584* Iain Duff, AERE Harwell.
1585* Jeremy Du Croz, Numerical Algorithms Group Ltd.
1586* Sven Hammarling, Numerical Algorithms Group Ltd.
1587*
1588* .. Parameters ..
1589 COMPLEX*16 ZERO, ONE
1590 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
1591 $ ONE = ( 1.0D0, 0.0D0 ) )
1592 DOUBLE PRECISION RONE, RZERO
1593 PARAMETER ( RONE = 1.0D0, RZERO = 0.0D0 )
1594* .. Scalar Arguments ..
1595 DOUBLE PRECISION EPS, THRESH
1596 INTEGER NALF, NBET, NIDIM, NMAX, NOUT, NTRA
1597 LOGICAL FATAL, REWI, TRACE
1598 CHARACTER*6 SNAME
1599* .. Array Arguments ..
1600 COMPLEX*16 AA( NMAX*NMAX ), AB( 2*NMAX*NMAX ),
1601 $ ALF( NALF ), AS( NMAX*NMAX ), BB( NMAX*NMAX ),
1602 $ BET( NBET ), BS( NMAX*NMAX ), C( NMAX, NMAX ),
1603 $ CC( NMAX*NMAX ), CS( NMAX*NMAX ), CT( NMAX ),
1604 $ W( 2*NMAX )
1605 DOUBLE PRECISION G( NMAX )
1606 INTEGER IDIM( NIDIM )
1607* .. Local Scalars ..
1608 COMPLEX*16 ALPHA, ALS, BETA, BETS
1609 DOUBLE PRECISION ERR, ERRMAX, RBETA, RBETS
1610 INTEGER I, IA, IB, ICT, ICU, IK, IN, J, JC, JJ, JJAB,
1611 $ K, KS, LAA, LBB, LCC, LDA, LDAS, LDB, LDBS,
1612 $ LDC, LDCS, LJ, MA, N, NA, NARGS, NC, NS
1613 LOGICAL CONJ, NULL, RESET, SAME, TRAN, UPPER
1614 CHARACTER*1 TRANS, TRANSS, TRANST, UPLO, UPLOS
1615 CHARACTER*2 ICHT, ICHU
1616* .. Local Arrays ..
1617 LOGICAL ISAME( 13 )
1618* .. External Functions ..
1619 LOGICAL LZE, LZERES
1620 EXTERNAL LZE, LZERES
1621* .. External Subroutines ..
1622 EXTERNAL ZHER2K, ZMAKE, ZMMCH, ZSYR2K
1623* .. Intrinsic Functions ..
1624 INTRINSIC DCMPLX, DCONJG, MAX, DBLE
1625* .. Scalars in Common ..
1626 INTEGER INFOT, NOUTC
1627 LOGICAL LERR, OK
1628* .. Common blocks ..
1629 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1630* .. Data statements ..
1631 DATA ICHT/'NC'/, ICHU/'UL'/
1632* .. Executable Statements ..
1633 CONJ = SNAME( 2: 3 ).EQ.'HE'
1634*
1635 NARGS = 12
1636 NC = 0
1637 RESET = .TRUE.
1638 ERRMAX = RZERO
1639*
1640 DO 130 IN = 1, NIDIM
1641 N = IDIM( IN )
1642* Set LDC to 1 more than minimum value if room.
1643 LDC = N
1644 IF( LDC.LT.NMAX )
1645 $ LDC = LDC + 1
1646* Skip tests if not enough room.
1647 IF( LDC.GT.NMAX )
1648 $ GO TO 130
1649 LCC = LDC*N
1650*
1651 DO 120 IK = 1, NIDIM
1652 K = IDIM( IK )
1653*
1654 DO 110 ICT = 1, 2
1655 TRANS = ICHT( ICT: ICT )
1656 TRAN = TRANS.EQ.'C'
1657 IF( TRAN.AND..NOT.CONJ )
1658 $ TRANS = 'T'
1659 IF( TRAN )THEN
1660 MA = K
1661 NA = N
1662 ELSE
1663 MA = N
1664 NA = K
1665 END IF
1666* Set LDA to 1 more than minimum value if room.
1667 LDA = MA
1668 IF( LDA.LT.NMAX )
1669 $ LDA = LDA + 1
1670* Skip tests if not enough room.
1671 IF( LDA.GT.NMAX )
1672 $ GO TO 110
1673 LAA = LDA*NA
1674*
1675* Generate the matrix A.
1676*
1677 IF( TRAN )THEN
1678 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, 2*NMAX, AA,
1679 $ LDA, RESET, ZERO )
1680 ELSE
1681 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB, NMAX, AA, LDA,
1682 $ RESET, ZERO )
1683 END IF
1684*
1685* Generate the matrix B.
1686*
1687 LDB = LDA
1688 LBB = LAA
1689 IF( TRAN )THEN
1690 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K + 1 ),
1691 $ 2*NMAX, BB, LDB, RESET, ZERO )
1692 ELSE
1693 CALL ZMAKE( 'GE', ' ', ' ', MA, NA, AB( K*NMAX + 1 ),
1694 $ NMAX, BB, LDB, RESET, ZERO )
1695 END IF
1696*
1697 DO 100 ICU = 1, 2
1698 UPLO = ICHU( ICU: ICU )
1699 UPPER = UPLO.EQ.'U'
1700*
1701 DO 90 IA = 1, NALF
1702 ALPHA = ALF( IA )
1703*
1704 DO 80 IB = 1, NBET
1705 BETA = BET( IB )
1706 IF( CONJ )THEN
1707 RBETA = DBLE( BETA )
1708 BETA = DCMPLX( RBETA, RZERO )
1709 END IF
1710 NULL = N.LE.0
1711 IF( CONJ )
1712 $ NULL = NULL.OR.( ( K.LE.0.OR.ALPHA.EQ.
1713 $ ZERO ).AND.RBETA.EQ.RONE )
1714*
1715* Generate the matrix C.
1716*
1717 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, C,
1718 $ NMAX, CC, LDC, RESET, ZERO )
1719*
1720 NC = NC + 1
1721*
1722* Save every datum before calling the subroutine.
1723*
1724 UPLOS = UPLO
1725 TRANSS = TRANS
1726 NS = N
1727 KS = K
1728 ALS = ALPHA
1729 DO 10 I = 1, LAA
1730 AS( I ) = AA( I )
1731 10 CONTINUE
1732 LDAS = LDA
1733 DO 20 I = 1, LBB
1734 BS( I ) = BB( I )
1735 20 CONTINUE
1736 LDBS = LDB
1737 IF( CONJ )THEN
1738 RBETS = RBETA
1739 ELSE
1740 BETS = BETA
1741 END IF
1742 DO 30 I = 1, LCC
1743 CS( I ) = CC( I )
1744 30 CONTINUE
1745 LDCS = LDC
1746*
1747* Call the subroutine.
1748*
1749 IF( CONJ )THEN
1750 IF( TRACE )
1751 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO,
1752 $ TRANS, N, K, ALPHA, LDA, LDB, RBETA, LDC
1753 IF( REWI )
1754 $ REWIND NTRA
1755 CALL ZHER2K( UPLO, TRANS, N, K, ALPHA, AA,
1756 $ LDA, BB, LDB, RBETA, CC, LDC )
1757 ELSE
1758 IF( TRACE )
1759 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO,
1760 $ TRANS, N, K, ALPHA, LDA, LDB, BETA, LDC
1761 IF( REWI )
1762 $ REWIND NTRA
1763 CALL ZSYR2K( UPLO, TRANS, N, K, ALPHA, AA,
1764 $ LDA, BB, LDB, BETA, CC, LDC )
1765 END IF
1766*
1767* Check if error-exit was taken incorrectly.
1768*
1769 IF( .NOT.OK )THEN
1770 WRITE( NOUT, FMT = 9992 )
1771 FATAL = .TRUE.
1772 GO TO 150
1773 END IF
1774*
1775* See what data changed inside subroutines.
1776*
1777 ISAME( 1 ) = UPLOS.EQ.UPLO
1778 ISAME( 2 ) = TRANSS.EQ.TRANS
1779 ISAME( 3 ) = NS.EQ.N
1780 ISAME( 4 ) = KS.EQ.K
1781 ISAME( 5 ) = ALS.EQ.ALPHA
1782 ISAME( 6 ) = LZE( AS, AA, LAA )
1783 ISAME( 7 ) = LDAS.EQ.LDA
1784 ISAME( 8 ) = LZE( BS, BB, LBB )
1785 ISAME( 9 ) = LDBS.EQ.LDB
1786 IF( CONJ )THEN
1787 ISAME( 10 ) = RBETS.EQ.RBETA
1788 ELSE
1789 ISAME( 10 ) = BETS.EQ.BETA
1790 END IF
1791 IF( NULL )THEN
1792 ISAME( 11 ) = LZE( CS, CC, LCC )
1793 ELSE
1794 ISAME( 11 ) = LZERES( 'HE', UPLO, N, N, CS,
1795 $ CC, LDC )
1796 END IF
1797 ISAME( 12 ) = LDCS.EQ.LDC
1798*
1799* If data was incorrectly changed, report and
1800* return.
1801*
1802 SAME = .TRUE.
1803 DO 40 I = 1, NARGS
1804 SAME = SAME.AND.ISAME( I )
1805 IF( .NOT.ISAME( I ) )
1806 $ WRITE( NOUT, FMT = 9998 )I
1807 40 CONTINUE
1808 IF( .NOT.SAME )THEN
1809 FATAL = .TRUE.
1810 GO TO 150
1811 END IF
1812*
1813 IF( .NOT.NULL )THEN
1814*
1815* Check the result column by column.
1816*
1817 IF( CONJ )THEN
1818 TRANST = 'C'
1819 ELSE
1820 TRANST = 'T'
1821 END IF
1822 JJAB = 1
1823 JC = 1
1824 DO 70 J = 1, N
1825 IF( UPPER )THEN
1826 JJ = 1
1827 LJ = J
1828 ELSE
1829 JJ = J
1830 LJ = N - J + 1
1831 END IF
1832 IF( TRAN )THEN
1833 DO 50 I = 1, K
1834 W( I ) = ALPHA*AB( ( J - 1 )*2*
1835 $ NMAX + K + I )
1836 IF( CONJ )THEN
1837 W( K + I ) = DCONJG( ALPHA )*
1838 $ AB( ( J - 1 )*2*
1839 $ NMAX + I )
1840 ELSE
1841 W( K + I ) = ALPHA*
1842 $ AB( ( J - 1 )*2*
1843 $ NMAX + I )
1844 END IF
1845 50 CONTINUE
1846 CALL ZMMCH( TRANST, 'N', LJ, 1, 2*K,
1847 $ ONE, AB( JJAB ), 2*NMAX, W,
1848 $ 2*NMAX, BETA, C( JJ, J ),
1849 $ NMAX, CT, G, CC( JC ), LDC,
1850 $ EPS, ERR, FATAL, NOUT,
1851 $ .TRUE. )
1852 ELSE
1853 DO 60 I = 1, K
1854 IF( CONJ )THEN
1855 W( I ) = ALPHA*DCONJG( AB( ( K +
1856 $ I - 1 )*NMAX + J ) )
1857 W( K + I ) = DCONJG( ALPHA*
1858 $ AB( ( I - 1 )*NMAX +
1859 $ J ) )
1860 ELSE
1861 W( I ) = ALPHA*AB( ( K + I - 1 )*
1862 $ NMAX + J )
1863 W( K + I ) = ALPHA*
1864 $ AB( ( I - 1 )*NMAX +
1865 $ J )
1866 END IF
1867 60 CONTINUE
1868 CALL ZMMCH( 'N', 'N', LJ, 1, 2*K, ONE,
1869 $ AB( JJ ), NMAX, W, 2*NMAX,
1870 $ BETA, C( JJ, J ), NMAX, CT,
1871 $ G, CC( JC ), LDC, EPS, ERR,
1872 $ FATAL, NOUT, .TRUE. )
1873 END IF
1874 IF( UPPER )THEN
1875 JC = JC + LDC
1876 ELSE
1877 JC = JC + LDC + 1
1878 IF( TRAN )
1879 $ JJAB = JJAB + 2*NMAX
1880 END IF
1881 ERRMAX = MAX( ERRMAX, ERR )
1882* If got really bad answer, report and
1883* return.
1884 IF( FATAL )
1885 $ GO TO 140
1886 70 CONTINUE
1887 END IF
1888*
1889 80 CONTINUE
1890*
1891 90 CONTINUE
1892*
1893 100 CONTINUE
1894*
1895 110 CONTINUE
1896*
1897 120 CONTINUE
1898*
1899 130 CONTINUE
1900*
1901* Report result.
1902*
1903 IF( ERRMAX.LT.THRESH )THEN
1904 WRITE( NOUT, FMT = 9999 )SNAME, NC
1905 ELSE
1906 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1907 END IF
1908 GO TO 160
1909*
1910 140 CONTINUE
1911 IF( N.GT.1 )
1912 $ WRITE( NOUT, FMT = 9995 )J
1913*
1914 150 CONTINUE
1915 WRITE( NOUT, FMT = 9996 )SNAME
1916 IF( CONJ )THEN
1917 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1918 $ LDA, LDB, RBETA, LDC
1919 ELSE
1920 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, N, K, ALPHA,
1921 $ LDA, LDB, BETA, LDC
1922 END IF
1923*
1924 160 CONTINUE
1925 RETURN
1926*
1927 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1928 $ 'S)' )
1929 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1930 $ 'ANGED INCORRECTLY *******' )
1931 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1932 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1933 $ ' - SUSPECT *******' )
1934 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1935 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1936 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1937 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',', F4.1,
1938 $ ', C,', I3, ') .' )
1939 9993 FORMAT( 1X, I6, ': ', A6, '(', 2( '''', A1, ''',' ), 2( I3, ',' ),
1940 $ '(', F4.1, ',', F4.1, '), A,', I3, ', B,', I3, ',(', F4.1,
1941 $ ',', F4.1, '), C,', I3, ') .' )
1942 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1943 $ '******' )
1944*
1945* End of ZCHK5.
1946*
1947 END
1948 SUBROUTINE ZCHKE( ISNUM, SRNAMT, NOUT )
1949*
1950* Tests the error exits from the Level 3 Blas.
1951* Requires a special version of the error-handling routine XERBLA.
1952* ALPHA, RALPHA, BETA, RBETA, A, B and C should not need to be defined.
1953*
1954* Auxiliary routine for test program for Level 3 Blas.
1955*
1956* -- Written on 8-February-1989.
1957* Jack Dongarra, Argonne National Laboratory.
1958* Iain Duff, AERE Harwell.
1959* Jeremy Du Croz, Numerical Algorithms Group Ltd.
1960* Sven Hammarling, Numerical Algorithms Group Ltd.
1961*
1962* .. Scalar Arguments ..
1963 INTEGER ISNUM, NOUT
1964 CHARACTER*6 SRNAMT
1965* .. Scalars in Common ..
1966 INTEGER INFOT, NOUTC
1967 LOGICAL LERR, OK
1968* .. Local Scalars ..
1969 COMPLEX*16 ALPHA, BETA
1970 DOUBLE PRECISION RALPHA, RBETA
1971* .. Local Arrays ..
1972 COMPLEX*16 A( 2, 1 ), B( 2, 1 ), C( 2, 1 )
1973* .. External Subroutines ..
1974 EXTERNAL ZGEMM, ZHEMM, ZHER2K, ZHERK, CHKXER, ZSYMM,
1975 $ ZSYR2K, ZSYRK, ZTRMM, ZTRSM
1976* .. Common blocks ..
1977 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1978* .. Executable Statements ..
1979* OK is set to .FALSE. by the special version of XERBLA or by CHKXER
1980* if anything is wrong.
1981 OK = .TRUE.
1982* LERR is set to .TRUE. by the special version of XERBLA each time
1983* it is called, and is then tested and re-set by CHKXER.
1984 LERR = .FALSE.
1985 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
1986 $ 90 )ISNUM
1987 10 INFOT = 1
1988 CALL ZGEMM( '/', 'N', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1989 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1990 INFOT = 1
1991 CALL ZGEMM( '/', 'C', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1992 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1993 INFOT = 1
1994 CALL ZGEMM( '/', 'T', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1995 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1996 INFOT = 2
1997 CALL ZGEMM( 'N', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
1998 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
1999 INFOT = 2
2000 CALL ZGEMM( 'C', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2001 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2002 INFOT = 2
2003 CALL ZGEMM( 'T', '/', 0, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2004 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2005 INFOT = 3
2006 CALL ZGEMM( 'N', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2007 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2008 INFOT = 3
2009 CALL ZGEMM( 'N', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2010 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2011 INFOT = 3
2012 CALL ZGEMM( 'N', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2013 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2014 INFOT = 3
2015 CALL ZGEMM( 'C', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2016 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2017 INFOT = 3
2018 CALL ZGEMM( 'C', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2019 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2020 INFOT = 3
2021 CALL ZGEMM( 'C', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2022 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2023 INFOT = 3
2024 CALL ZGEMM( 'T', 'N', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2025 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2026 INFOT = 3
2027 CALL ZGEMM( 'T', 'C', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2028 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2029 INFOT = 3
2030 CALL ZGEMM( 'T', 'T', -1, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2031 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2032 INFOT = 4
2033 CALL ZGEMM( 'N', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2034 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2035 INFOT = 4
2036 CALL ZGEMM( 'N', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2037 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2038 INFOT = 4
2039 CALL ZGEMM( 'N', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2040 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2041 INFOT = 4
2042 CALL ZGEMM( 'C', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2043 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2044 INFOT = 4
2045 CALL ZGEMM( 'C', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2046 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2047 INFOT = 4
2048 CALL ZGEMM( 'C', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2049 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2050 INFOT = 4
2051 CALL ZGEMM( 'T', 'N', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2052 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2053 INFOT = 4
2054 CALL ZGEMM( 'T', 'C', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2055 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2056 INFOT = 4
2057 CALL ZGEMM( 'T', 'T', 0, -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2058 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2059 INFOT = 5
2060 CALL ZGEMM( 'N', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2061 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2062 INFOT = 5
2063 CALL ZGEMM( 'N', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2064 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2065 INFOT = 5
2066 CALL ZGEMM( 'N', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2067 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2068 INFOT = 5
2069 CALL ZGEMM( 'C', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2070 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2071 INFOT = 5
2072 CALL ZGEMM( 'C', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2073 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2074 INFOT = 5
2075 CALL ZGEMM( 'C', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2076 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2077 INFOT = 5
2078 CALL ZGEMM( 'T', 'N', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2079 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2080 INFOT = 5
2081 CALL ZGEMM( 'T', 'C', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2082 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2083 INFOT = 5
2084 CALL ZGEMM( 'T', 'T', 0, 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2085 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2086 INFOT = 8
2087 CALL ZGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2088 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2089 INFOT = 8
2090 CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2091 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2092 INFOT = 8
2093 CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2094 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2095 INFOT = 8
2096 CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2097 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2098 INFOT = 8
2099 CALL ZGEMM( 'C', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2100 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2101 INFOT = 8
2102 CALL ZGEMM( 'C', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2103 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2104 INFOT = 8
2105 CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 1, B, 2, BETA, C, 1 )
2106 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2107 INFOT = 8
2108 CALL ZGEMM( 'T', 'C', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2109 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2110 INFOT = 8
2111 CALL ZGEMM( 'T', 'T', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2112 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2113 INFOT = 10
2114 CALL ZGEMM( 'N', 'N', 0, 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2115 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2116 INFOT = 10
2117 CALL ZGEMM( 'C', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2118 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2119 INFOT = 10
2120 CALL ZGEMM( 'T', 'N', 0, 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2121 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2122 INFOT = 10
2123 CALL ZGEMM( 'N', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2124 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2125 INFOT = 10
2126 CALL ZGEMM( 'C', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2127 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2128 INFOT = 10
2129 CALL ZGEMM( 'T', 'C', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2130 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2131 INFOT = 10
2132 CALL ZGEMM( 'N', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2133 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2134 INFOT = 10
2135 CALL ZGEMM( 'C', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2136 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2137 INFOT = 10
2138 CALL ZGEMM( 'T', 'T', 0, 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2139 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2140 INFOT = 13
2141 CALL ZGEMM( 'N', 'N', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2142 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2143 INFOT = 13
2144 CALL ZGEMM( 'N', 'C', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2145 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2146 INFOT = 13
2147 CALL ZGEMM( 'N', 'T', 2, 0, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2148 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2149 INFOT = 13
2150 CALL ZGEMM( 'C', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2151 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2152 INFOT = 13
2153 CALL ZGEMM( 'C', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2154 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2155 INFOT = 13
2156 CALL ZGEMM( 'C', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2157 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2158 INFOT = 13
2159 CALL ZGEMM( 'T', 'N', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2160 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2161 INFOT = 13
2162 CALL ZGEMM( 'T', 'C', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2163 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2164 INFOT = 13
2165 CALL ZGEMM( 'T', 'T', 2, 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2166 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2167 GO TO 100
2168 20 INFOT = 1
2169 CALL ZHEMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2170 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2171 INFOT = 2
2172 CALL ZHEMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2173 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2174 INFOT = 3
2175 CALL ZHEMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2176 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2177 INFOT = 3
2178 CALL ZHEMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2179 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2180 INFOT = 3
2181 CALL ZHEMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2182 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2183 INFOT = 3
2184 CALL ZHEMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2185 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2186 INFOT = 4
2187 CALL ZHEMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2188 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2189 INFOT = 4
2190 CALL ZHEMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2191 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2192 INFOT = 4
2193 CALL ZHEMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2194 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2195 INFOT = 4
2196 CALL ZHEMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2197 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2198 INFOT = 7
2199 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2200 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2201 INFOT = 7
2202 CALL ZHEMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2203 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2204 INFOT = 7
2205 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2206 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2207 INFOT = 7
2208 CALL ZHEMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2209 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2210 INFOT = 9
2211 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2212 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2213 INFOT = 9
2214 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2215 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2216 INFOT = 9
2217 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2218 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2219 INFOT = 9
2220 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2221 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2222 INFOT = 12
2223 CALL ZHEMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2224 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2225 INFOT = 12
2226 CALL ZHEMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2227 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2228 INFOT = 12
2229 CALL ZHEMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2230 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2231 INFOT = 12
2232 CALL ZHEMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2233 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2234 GO TO 100
2235 30 INFOT = 1
2236 CALL ZSYMM( '/', 'U', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2237 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2238 INFOT = 2
2239 CALL ZSYMM( 'L', '/', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2240 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2241 INFOT = 3
2242 CALL ZSYMM( 'L', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2243 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2244 INFOT = 3
2245 CALL ZSYMM( 'R', 'U', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2246 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2247 INFOT = 3
2248 CALL ZSYMM( 'L', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2249 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2250 INFOT = 3
2251 CALL ZSYMM( 'R', 'L', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2252 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2253 INFOT = 4
2254 CALL ZSYMM( 'L', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2255 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2256 INFOT = 4
2257 CALL ZSYMM( 'R', 'U', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2258 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2259 INFOT = 4
2260 CALL ZSYMM( 'L', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2261 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2262 INFOT = 4
2263 CALL ZSYMM( 'R', 'L', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2264 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2265 INFOT = 7
2266 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2267 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2268 INFOT = 7
2269 CALL ZSYMM( 'R', 'U', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2270 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2271 INFOT = 7
2272 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 2 )
2273 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2274 INFOT = 7
2275 CALL ZSYMM( 'R', 'L', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2276 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2277 INFOT = 9
2278 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2279 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2280 INFOT = 9
2281 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2282 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2283 INFOT = 9
2284 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 1 )
2285 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2286 INFOT = 9
2287 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2288 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2289 INFOT = 12
2290 CALL ZSYMM( 'L', 'U', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2291 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2292 INFOT = 12
2293 CALL ZSYMM( 'R', 'U', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2294 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2295 INFOT = 12
2296 CALL ZSYMM( 'L', 'L', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2297 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2298 INFOT = 12
2299 CALL ZSYMM( 'R', 'L', 2, 0, ALPHA, A, 1, B, 2, BETA, C, 1 )
2300 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2301 GO TO 100
2302 40 INFOT = 1
2303 CALL ZTRMM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2304 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2305 INFOT = 2
2306 CALL ZTRMM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2307 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2308 INFOT = 3
2309 CALL ZTRMM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2310 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2311 INFOT = 4
2312 CALL ZTRMM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2313 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2314 INFOT = 5
2315 CALL ZTRMM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2316 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2317 INFOT = 5
2318 CALL ZTRMM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2319 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2320 INFOT = 5
2321 CALL ZTRMM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2322 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2323 INFOT = 5
2324 CALL ZTRMM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2325 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2326 INFOT = 5
2327 CALL ZTRMM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2328 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2329 INFOT = 5
2330 CALL ZTRMM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2331 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2332 INFOT = 5
2333 CALL ZTRMM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2334 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2335 INFOT = 5
2336 CALL ZTRMM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2337 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2338 INFOT = 5
2339 CALL ZTRMM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2340 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2341 INFOT = 5
2342 CALL ZTRMM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2343 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2344 INFOT = 5
2345 CALL ZTRMM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2346 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2347 INFOT = 5
2348 CALL ZTRMM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2349 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2350 INFOT = 6
2351 CALL ZTRMM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2352 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2353 INFOT = 6
2354 CALL ZTRMM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2355 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2356 INFOT = 6
2357 CALL ZTRMM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2358 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2359 INFOT = 6
2360 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2361 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2362 INFOT = 6
2363 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2364 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2365 INFOT = 6
2366 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2367 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2368 INFOT = 6
2369 CALL ZTRMM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2370 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2371 INFOT = 6
2372 CALL ZTRMM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2373 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2374 INFOT = 6
2375 CALL ZTRMM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2376 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2377 INFOT = 6
2378 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2379 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2380 INFOT = 6
2381 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2382 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2383 INFOT = 6
2384 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2385 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2386 INFOT = 9
2387 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2388 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2389 INFOT = 9
2390 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2391 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2392 INFOT = 9
2393 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2394 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2395 INFOT = 9
2396 CALL ZTRMM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2397 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2398 INFOT = 9
2399 CALL ZTRMM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2400 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2401 INFOT = 9
2402 CALL ZTRMM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2403 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2404 INFOT = 9
2405 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2406 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2407 INFOT = 9
2408 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2409 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2410 INFOT = 9
2411 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2412 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2413 INFOT = 9
2414 CALL ZTRMM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2415 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2416 INFOT = 9
2417 CALL ZTRMM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2418 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2419 INFOT = 9
2420 CALL ZTRMM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2421 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2422 INFOT = 11
2423 CALL ZTRMM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2424 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2425 INFOT = 11
2426 CALL ZTRMM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2427 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2428 INFOT = 11
2429 CALL ZTRMM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2430 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2431 INFOT = 11
2432 CALL ZTRMM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2433 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2434 INFOT = 11
2435 CALL ZTRMM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2436 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2437 INFOT = 11
2438 CALL ZTRMM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2439 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2440 INFOT = 11
2441 CALL ZTRMM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2442 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2443 INFOT = 11
2444 CALL ZTRMM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2445 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2446 INFOT = 11
2447 CALL ZTRMM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2448 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2449 INFOT = 11
2450 CALL ZTRMM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2451 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2452 INFOT = 11
2453 CALL ZTRMM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2454 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2455 INFOT = 11
2456 CALL ZTRMM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2457 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2458 GO TO 100
2459 50 INFOT = 1
2460 CALL ZTRSM( '/', 'U', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2461 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2462 INFOT = 2
2463 CALL ZTRSM( 'L', '/', 'N', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2464 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2465 INFOT = 3
2466 CALL ZTRSM( 'L', 'U', '/', 'N', 0, 0, ALPHA, A, 1, B, 1 )
2467 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2468 INFOT = 4
2469 CALL ZTRSM( 'L', 'U', 'N', '/', 0, 0, ALPHA, A, 1, B, 1 )
2470 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2471 INFOT = 5
2472 CALL ZTRSM( 'L', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2473 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2474 INFOT = 5
2475 CALL ZTRSM( 'L', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2476 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2477 INFOT = 5
2478 CALL ZTRSM( 'L', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2479 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2480 INFOT = 5
2481 CALL ZTRSM( 'R', 'U', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2482 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2483 INFOT = 5
2484 CALL ZTRSM( 'R', 'U', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2485 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2486 INFOT = 5
2487 CALL ZTRSM( 'R', 'U', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2488 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2489 INFOT = 5
2490 CALL ZTRSM( 'L', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2491 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2492 INFOT = 5
2493 CALL ZTRSM( 'L', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2494 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2495 INFOT = 5
2496 CALL ZTRSM( 'L', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2497 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2498 INFOT = 5
2499 CALL ZTRSM( 'R', 'L', 'N', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2500 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2501 INFOT = 5
2502 CALL ZTRSM( 'R', 'L', 'C', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2503 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2504 INFOT = 5
2505 CALL ZTRSM( 'R', 'L', 'T', 'N', -1, 0, ALPHA, A, 1, B, 1 )
2506 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2507 INFOT = 6
2508 CALL ZTRSM( 'L', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2509 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2510 INFOT = 6
2511 CALL ZTRSM( 'L', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2512 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2513 INFOT = 6
2514 CALL ZTRSM( 'L', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2515 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2516 INFOT = 6
2517 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2518 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2519 INFOT = 6
2520 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2521 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2522 INFOT = 6
2523 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2524 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2525 INFOT = 6
2526 CALL ZTRSM( 'L', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2527 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2528 INFOT = 6
2529 CALL ZTRSM( 'L', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2530 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2531 INFOT = 6
2532 CALL ZTRSM( 'L', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2533 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2534 INFOT = 6
2535 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2536 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2537 INFOT = 6
2538 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2539 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2540 INFOT = 6
2541 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, -1, ALPHA, A, 1, B, 1 )
2542 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2543 INFOT = 9
2544 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2545 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2546 INFOT = 9
2547 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2548 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2549 INFOT = 9
2550 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2551 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2552 INFOT = 9
2553 CALL ZTRSM( 'R', 'U', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2554 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2555 INFOT = 9
2556 CALL ZTRSM( 'R', 'U', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2557 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2558 INFOT = 9
2559 CALL ZTRSM( 'R', 'U', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2560 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2561 INFOT = 9
2562 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2563 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2564 INFOT = 9
2565 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2566 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2567 INFOT = 9
2568 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 2 )
2569 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2570 INFOT = 9
2571 CALL ZTRSM( 'R', 'L', 'N', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2572 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2573 INFOT = 9
2574 CALL ZTRSM( 'R', 'L', 'C', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2575 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2576 INFOT = 9
2577 CALL ZTRSM( 'R', 'L', 'T', 'N', 0, 2, ALPHA, A, 1, B, 1 )
2578 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2579 INFOT = 11
2580 CALL ZTRSM( 'L', 'U', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2581 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2582 INFOT = 11
2583 CALL ZTRSM( 'L', 'U', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2584 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2585 INFOT = 11
2586 CALL ZTRSM( 'L', 'U', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2587 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2588 INFOT = 11
2589 CALL ZTRSM( 'R', 'U', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2590 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2591 INFOT = 11
2592 CALL ZTRSM( 'R', 'U', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2593 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2594 INFOT = 11
2595 CALL ZTRSM( 'R', 'U', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2596 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2597 INFOT = 11
2598 CALL ZTRSM( 'L', 'L', 'N', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2599 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2600 INFOT = 11
2601 CALL ZTRSM( 'L', 'L', 'C', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2602 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2603 INFOT = 11
2604 CALL ZTRSM( 'L', 'L', 'T', 'N', 2, 0, ALPHA, A, 2, B, 1 )
2605 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2606 INFOT = 11
2607 CALL ZTRSM( 'R', 'L', 'N', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2608 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2609 INFOT = 11
2610 CALL ZTRSM( 'R', 'L', 'C', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2611 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2612 INFOT = 11
2613 CALL ZTRSM( 'R', 'L', 'T', 'N', 2, 0, ALPHA, A, 1, B, 1 )
2614 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2615 GO TO 100
2616 60 INFOT = 1
2617 CALL ZHERK( '/', 'N', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2618 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2619 INFOT = 2
2620 CALL ZHERK( 'U', 'T', 0, 0, RALPHA, A, 1, RBETA, C, 1 )
2621 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2622 INFOT = 3
2623 CALL ZHERK( 'U', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2624 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2625 INFOT = 3
2626 CALL ZHERK( 'U', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2627 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2628 INFOT = 3
2629 CALL ZHERK( 'L', 'N', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2630 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2631 INFOT = 3
2632 CALL ZHERK( 'L', 'C', -1, 0, RALPHA, A, 1, RBETA, C, 1 )
2633 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2634 INFOT = 4
2635 CALL ZHERK( 'U', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2636 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2637 INFOT = 4
2638 CALL ZHERK( 'U', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2639 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2640 INFOT = 4
2641 CALL ZHERK( 'L', 'N', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2642 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2643 INFOT = 4
2644 CALL ZHERK( 'L', 'C', 0, -1, RALPHA, A, 1, RBETA, C, 1 )
2645 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2646 INFOT = 7
2647 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2648 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2649 INFOT = 7
2650 CALL ZHERK( 'U', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2651 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2652 INFOT = 7
2653 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 1, RBETA, C, 2 )
2654 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2655 INFOT = 7
2656 CALL ZHERK( 'L', 'C', 0, 2, RALPHA, A, 1, RBETA, C, 1 )
2657 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2658 INFOT = 10
2659 CALL ZHERK( 'U', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2660 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2661 INFOT = 10
2662 CALL ZHERK( 'U', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2663 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2664 INFOT = 10
2665 CALL ZHERK( 'L', 'N', 2, 0, RALPHA, A, 2, RBETA, C, 1 )
2666 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2667 INFOT = 10
2668 CALL ZHERK( 'L', 'C', 2, 0, RALPHA, A, 1, RBETA, C, 1 )
2669 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2670 GO TO 100
2671 70 INFOT = 1
2672 CALL ZSYRK( '/', 'N', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2673 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2674 INFOT = 2
2675 CALL ZSYRK( 'U', 'C', 0, 0, ALPHA, A, 1, BETA, C, 1 )
2676 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2677 INFOT = 3
2678 CALL ZSYRK( 'U', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2679 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2680 INFOT = 3
2681 CALL ZSYRK( 'U', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2682 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2683 INFOT = 3
2684 CALL ZSYRK( 'L', 'N', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2685 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2686 INFOT = 3
2687 CALL ZSYRK( 'L', 'T', -1, 0, ALPHA, A, 1, BETA, C, 1 )
2688 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2689 INFOT = 4
2690 CALL ZSYRK( 'U', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2691 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2692 INFOT = 4
2693 CALL ZSYRK( 'U', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2694 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2695 INFOT = 4
2696 CALL ZSYRK( 'L', 'N', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2697 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2698 INFOT = 4
2699 CALL ZSYRK( 'L', 'T', 0, -1, ALPHA, A, 1, BETA, C, 1 )
2700 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2701 INFOT = 7
2702 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2703 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2704 INFOT = 7
2705 CALL ZSYRK( 'U', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2706 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2707 INFOT = 7
2708 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 1, BETA, C, 2 )
2709 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2710 INFOT = 7
2711 CALL ZSYRK( 'L', 'T', 0, 2, ALPHA, A, 1, BETA, C, 1 )
2712 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2713 INFOT = 10
2714 CALL ZSYRK( 'U', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2715 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2716 INFOT = 10
2717 CALL ZSYRK( 'U', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2718 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2719 INFOT = 10
2720 CALL ZSYRK( 'L', 'N', 2, 0, ALPHA, A, 2, BETA, C, 1 )
2721 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2722 INFOT = 10
2723 CALL ZSYRK( 'L', 'T', 2, 0, ALPHA, A, 1, BETA, C, 1 )
2724 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2725 GO TO 100
2726 80 INFOT = 1
2727 CALL ZHER2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2728 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2729 INFOT = 2
2730 CALL ZHER2K( 'U', 'T', 0, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2731 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2732 INFOT = 3
2733 CALL ZHER2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2734 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2735 INFOT = 3
2736 CALL ZHER2K( 'U', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2737 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2738 INFOT = 3
2739 CALL ZHER2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2740 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2741 INFOT = 3
2742 CALL ZHER2K( 'L', 'C', -1, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2743 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2744 INFOT = 4
2745 CALL ZHER2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2746 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2747 INFOT = 4
2748 CALL ZHER2K( 'U', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2749 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2750 INFOT = 4
2751 CALL ZHER2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2752 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2753 INFOT = 4
2754 CALL ZHER2K( 'L', 'C', 0, -1, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2755 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2756 INFOT = 7
2757 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2758 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2759 INFOT = 7
2760 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2761 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2762 INFOT = 7
2763 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 2 )
2764 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2765 INFOT = 7
2766 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2767 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2768 INFOT = 9
2769 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2770 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2771 INFOT = 9
2772 CALL ZHER2K( 'U', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2773 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2774 INFOT = 9
2775 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, RBETA, C, 2 )
2776 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2777 INFOT = 9
2778 CALL ZHER2K( 'L', 'C', 0, 2, ALPHA, A, 2, B, 1, RBETA, C, 1 )
2779 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2780 INFOT = 12
2781 CALL ZHER2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2782 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2783 INFOT = 12
2784 CALL ZHER2K( 'U', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2785 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2786 INFOT = 12
2787 CALL ZHER2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, RBETA, C, 1 )
2788 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2789 INFOT = 12
2790 CALL ZHER2K( 'L', 'C', 2, 0, ALPHA, A, 1, B, 1, RBETA, C, 1 )
2791 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2792 GO TO 100
2793 90 INFOT = 1
2794 CALL ZSYR2K( '/', 'N', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2795 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2796 INFOT = 2
2797 CALL ZSYR2K( 'U', 'C', 0, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2798 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2799 INFOT = 3
2800 CALL ZSYR2K( 'U', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2801 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2802 INFOT = 3
2803 CALL ZSYR2K( 'U', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2804 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2805 INFOT = 3
2806 CALL ZSYR2K( 'L', 'N', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2807 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2808 INFOT = 3
2809 CALL ZSYR2K( 'L', 'T', -1, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2810 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2811 INFOT = 4
2812 CALL ZSYR2K( 'U', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2813 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2814 INFOT = 4
2815 CALL ZSYR2K( 'U', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2816 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2817 INFOT = 4
2818 CALL ZSYR2K( 'L', 'N', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2819 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2820 INFOT = 4
2821 CALL ZSYR2K( 'L', 'T', 0, -1, ALPHA, A, 1, B, 1, BETA, C, 1 )
2822 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2823 INFOT = 7
2824 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2825 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2826 INFOT = 7
2827 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2828 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2829 INFOT = 7
2830 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 2 )
2831 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2832 INFOT = 7
2833 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 1, B, 1, BETA, C, 1 )
2834 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2835 INFOT = 9
2836 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2837 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2838 INFOT = 9
2839 CALL ZSYR2K( 'U', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2840 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2841 INFOT = 9
2842 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 1, BETA, C, 2 )
2843 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2844 INFOT = 9
2845 CALL ZSYR2K( 'L', 'T', 0, 2, ALPHA, A, 2, B, 1, BETA, C, 1 )
2846 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2847 INFOT = 12
2848 CALL ZSYR2K( 'U', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2849 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2850 INFOT = 12
2851 CALL ZSYR2K( 'U', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2852 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2853 INFOT = 12
2854 CALL ZSYR2K( 'L', 'N', 2, 0, ALPHA, A, 2, B, 2, BETA, C, 1 )
2855 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2856 INFOT = 12
2857 CALL ZSYR2K( 'L', 'T', 2, 0, ALPHA, A, 1, B, 1, BETA, C, 1 )
2858 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2859*
2860 100 IF( OK )THEN
2861 WRITE( NOUT, FMT = 9999 )SRNAMT
2862 ELSE
2863 WRITE( NOUT, FMT = 9998 )SRNAMT
2864 END IF
2865 RETURN
2866*
2867 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2868 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2869 $ '**' )
2870*
2871* End of ZCHKE.
2872*
2873 END
2874 SUBROUTINE ZMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, RESET,
2875 $ TRANSL )
2876*
2877* Generates values for an M by N matrix A.
2878* Stores the values in the array AA in the data structure required
2879* by the routine, with unwanted elements set to rogue value.
2880*
2881* TYPE is 'GE', 'HE', 'SY' or 'TR'.
2882*
2883* Auxiliary routine for test program for Level 3 Blas.
2884*
2885* -- Written on 8-February-1989.
2886* Jack Dongarra, Argonne National Laboratory.
2887* Iain Duff, AERE Harwell.
2888* Jeremy Du Croz, Numerical Algorithms Group Ltd.
2889* Sven Hammarling, Numerical Algorithms Group Ltd.
2890*
2891* .. Parameters ..
2892 COMPLEX*16 ZERO, ONE
2893 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
2894 $ ONE = ( 1.0D0, 0.0D0 ) )
2895 COMPLEX*16 ROGUE
2896 PARAMETER ( ROGUE = ( -1.0D10, 1.0D10 ) )
2897 DOUBLE PRECISION RZERO
2898 PARAMETER ( RZERO = 0.0D0 )
2899 DOUBLE PRECISION RROGUE
2900 PARAMETER ( RROGUE = -1.0D10 )
2901* .. Scalar Arguments ..
2902 COMPLEX*16 TRANSL
2903 INTEGER LDA, M, N, NMAX
2904 LOGICAL RESET
2905 CHARACTER*1 DIAG, UPLO
2906 CHARACTER*2 TYPE
2907* .. Array Arguments ..
2908 COMPLEX*16 A( NMAX, * ), AA( * )
2909* .. Local Scalars ..
2910 INTEGER I, IBEG, IEND, J, JJ
2911 LOGICAL GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
2912* .. External Functions ..
2913 COMPLEX*16 ZBEG
2914 EXTERNAL ZBEG
2915* .. Intrinsic Functions ..
2916 INTRINSIC DCMPLX, DCONJG, DBLE
2917* .. Executable Statements ..
2918 GEN = TYPE.EQ.'GE'
2919 HER = TYPE.EQ.'HE'
2920 SYM = TYPE.EQ.'SY'
2921 TRI = TYPE.EQ.'TR'
2922 UPPER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'U'
2923 LOWER = ( HER.OR.SYM.OR.TRI ).AND.UPLO.EQ.'L'
2924 UNIT = TRI.AND.DIAG.EQ.'U'
2925*
2926* Generate data in array A.
2927*
2928 DO 20 J = 1, N
2929 DO 10 I = 1, M
2930 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2931 $ THEN
2932 A( I, J ) = ZBEG( RESET ) + TRANSL
2933 IF( I.NE.J )THEN
2934* Set some elements to zero
2935 IF( N.GT.3.AND.J.EQ.N/2 )
2936 $ A( I, J ) = ZERO
2937 IF( HER )THEN
2938 A( J, I ) = DCONJG( A( I, J ) )
2939 ELSE IF( SYM )THEN
2940 A( J, I ) = A( I, J )
2941 ELSE IF( TRI )THEN
2942 A( J, I ) = ZERO
2943 END IF
2944 END IF
2945 END IF
2946 10 CONTINUE
2947 IF( HER )
2948 $ A( J, J ) = DCMPLX( DBLE( A( J, J ) ), RZERO )
2949 IF( TRI )
2950 $ A( J, J ) = A( J, J ) + ONE
2951 IF( UNIT )
2952 $ A( J, J ) = ONE
2953 20 CONTINUE
2954*
2955* Store elements in array AS in data structure required by routine.
2956*
2957 IF( TYPE.EQ.'GE' )THEN
2958 DO 50 J = 1, N
2959 DO 30 I = 1, M
2960 AA( I + ( J - 1 )*LDA ) = A( I, J )
2961 30 CONTINUE
2962 DO 40 I = M + 1, LDA
2963 AA( I + ( J - 1 )*LDA ) = ROGUE
2964 40 CONTINUE
2965 50 CONTINUE
2966 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
2967 DO 90 J = 1, N
2968 IF( UPPER )THEN
2969 IBEG = 1
2970 IF( UNIT )THEN
2971 IEND = J - 1
2972 ELSE
2973 IEND = J
2974 END IF
2975 ELSE
2976 IF( UNIT )THEN
2977 IBEG = J + 1
2978 ELSE
2979 IBEG = J
2980 END IF
2981 IEND = N
2982 END IF
2983 DO 60 I = 1, IBEG - 1
2984 AA( I + ( J - 1 )*LDA ) = ROGUE
2985 60 CONTINUE
2986 DO 70 I = IBEG, IEND
2987 AA( I + ( J - 1 )*LDA ) = A( I, J )
2988 70 CONTINUE
2989 DO 80 I = IEND + 1, LDA
2990 AA( I + ( J - 1 )*LDA ) = ROGUE
2991 80 CONTINUE
2992 IF( HER )THEN
2993 JJ = J + ( J - 1 )*LDA
2994 AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE )
2995 END IF
2996 90 CONTINUE
2997 END IF
2998 RETURN
2999*
3000* End of ZMAKE.
3001*
3002 END
3003 SUBROUTINE ZMMCH( TRANSA, TRANSB, M, N, KK, ALPHA, A, LDA, B, LDB,
3004 $ BETA, C, LDC, CT, G, CC, LDCC, EPS, ERR, FATAL,
3005 $ NOUT, MV )
3006*
3007* Checks the results of the computational tests.
3008*
3009* Auxiliary routine for test program for Level 3 Blas.
3010*
3011* -- Written on 8-February-1989.
3012* Jack Dongarra, Argonne National Laboratory.
3013* Iain Duff, AERE Harwell.
3014* Jeremy Du Croz, Numerical Algorithms Group Ltd.
3015* Sven Hammarling, Numerical Algorithms Group Ltd.
3016*
3017* .. Parameters ..
3018 COMPLEX*16 ZERO
3019 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
3020 DOUBLE PRECISION RZERO, RONE
3021 PARAMETER ( RZERO = 0.0D0, RONE = 1.0D0 )
3022* .. Scalar Arguments ..
3023 COMPLEX*16 ALPHA, BETA
3024 DOUBLE PRECISION EPS, ERR
3025 INTEGER KK, LDA, LDB, LDC, LDCC, M, N, NOUT
3026 LOGICAL FATAL, MV
3027 CHARACTER*1 TRANSA, TRANSB
3028* .. Array Arguments ..
3029 COMPLEX*16 A( LDA, * ), B( LDB, * ), C( LDC, * ),
3030 $ CC( LDCC, * ), CT( * )
3031 DOUBLE PRECISION G( * )
3032* .. Local Scalars ..
3033 COMPLEX*16 CL
3034 DOUBLE PRECISION ERRI
3035 INTEGER I, J, K
3036 LOGICAL CTRANA, CTRANB, TRANA, TRANB
3037* .. Intrinsic Functions ..
3038 INTRINSIC ABS, DIMAG, DCONJG, MAX, DBLE, SQRT
3039* .. Statement Functions ..
3040 DOUBLE PRECISION ABS1
3041* .. Statement Function definitions ..
3042 ABS1( CL ) = ABS( DBLE( CL ) ) + ABS( DIMAG( CL ) )
3043* .. Executable Statements ..
3044 TRANA = TRANSA.EQ.'T'.OR.TRANSA.EQ.'C'
3045 TRANB = TRANSB.EQ.'T'.OR.TRANSB.EQ.'C'
3046 CTRANA = TRANSA.EQ.'C'
3047 CTRANB = TRANSB.EQ.'C'
3048*
3049* Compute expected result, one column at a time, in CT using data
3050* in A, B and C.
3051* Compute gauges in G.
3052*
3053 DO 220 J = 1, N
3054*
3055 DO 10 I = 1, M
3056 CT( I ) = ZERO
3057 G( I ) = RZERO
3058 10 CONTINUE
3059 IF( .NOT.TRANA.AND..NOT.TRANB )THEN
3060 DO 30 K = 1, KK
3061 DO 20 I = 1, M
3062 CT( I ) = CT( I ) + A( I, K )*B( K, J )
3063 G( I ) = G( I ) + ABS1( A( I, K ) )*ABS1( B( K, J ) )
3064 20 CONTINUE
3065 30 CONTINUE
3066 ELSE IF( TRANA.AND..NOT.TRANB )THEN
3067 IF( CTRANA )THEN
3068 DO 50 K = 1, KK
3069 DO 40 I = 1, M
3070 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*B( K, J )
3071 G( I ) = G( I ) + ABS1( A( K, I ) )*
3072 $ ABS1( B( K, J ) )
3073 40 CONTINUE
3074 50 CONTINUE
3075 ELSE
3076 DO 70 K = 1, KK
3077 DO 60 I = 1, M
3078 CT( I ) = CT( I ) + A( K, I )*B( K, J )
3079 G( I ) = G( I ) + ABS1( A( K, I ) )*
3080 $ ABS1( B( K, J ) )
3081 60 CONTINUE
3082 70 CONTINUE
3083 END IF
3084 ELSE IF( .NOT.TRANA.AND.TRANB )THEN
3085 IF( CTRANB )THEN
3086 DO 90 K = 1, KK
3087 DO 80 I = 1, M
3088 CT( I ) = CT( I ) + A( I, K )*DCONJG( B( J, K ) )
3089 G( I ) = G( I ) + ABS1( A( I, K ) )*
3090 $ ABS1( B( J, K ) )
3091 80 CONTINUE
3092 90 CONTINUE
3093 ELSE
3094 DO 110 K = 1, KK
3095 DO 100 I = 1, M
3096 CT( I ) = CT( I ) + A( I, K )*B( J, K )
3097 G( I ) = G( I ) + ABS1( A( I, K ) )*
3098 $ ABS1( B( J, K ) )
3099 100 CONTINUE
3100 110 CONTINUE
3101 END IF
3102 ELSE IF( TRANA.AND.TRANB )THEN
3103 IF( CTRANA )THEN
3104 IF( CTRANB )THEN
3105 DO 130 K = 1, KK
3106 DO 120 I = 1, M
3107 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*
3108 $ DCONJG( B( J, K ) )
3109 G( I ) = G( I ) + ABS1( A( K, I ) )*
3110 $ ABS1( B( J, K ) )
3111 120 CONTINUE
3112 130 CONTINUE
3113 ELSE
3114 DO 150 K = 1, KK
3115 DO 140 I = 1, M
3116 CT( I ) = CT( I ) + DCONJG( A( K, I ) )*
3117 $ B( J, K )
3118 G( I ) = G( I ) + ABS1( A( K, I ) )*
3119 $ ABS1( B( J, K ) )
3120 140 CONTINUE
3121 150 CONTINUE
3122 END IF
3123 ELSE
3124 IF( CTRANB )THEN
3125 DO 170 K = 1, KK
3126 DO 160 I = 1, M
3127 CT( I ) = CT( I ) + A( K, I )*
3128 $ DCONJG( B( J, K ) )
3129 G( I ) = G( I ) + ABS1( A( K, I ) )*
3130 $ ABS1( B( J, K ) )
3131 160 CONTINUE
3132 170 CONTINUE
3133 ELSE
3134 DO 190 K = 1, KK
3135 DO 180 I = 1, M
3136 CT( I ) = CT( I ) + A( K, I )*B( J, K )
3137 G( I ) = G( I ) + ABS1( A( K, I ) )*
3138 $ ABS1( B( J, K ) )
3139 180 CONTINUE
3140 190 CONTINUE
3141 END IF
3142 END IF
3143 END IF
3144 DO 200 I = 1, M
3145 CT( I ) = ALPHA*CT( I ) + BETA*C( I, J )
3146 G( I ) = ABS1( ALPHA )*G( I ) +
3147 $ ABS1( BETA )*ABS1( C( I, J ) )
3148 200 CONTINUE
3149*
3150* Compute the error ratio for this result.
3151*
3152 ERR = ZERO
3153 DO 210 I = 1, M
3154 ERRI = ABS1( CT( I ) - CC( I, J ) )/EPS
3155 IF( G( I ).NE.RZERO )
3156 $ ERRI = ERRI/G( I )
3157 ERR = MAX( ERR, ERRI )
3158 IF( ERR*SQRT( EPS ).GE.RONE )
3159 $ GO TO 230
3160 210 CONTINUE
3161*
3162 220 CONTINUE
3163*
3164* If the loop completes, all results are at least half accurate.
3165 GO TO 250
3166*
3167* Report fatal error.
3168*
3169 230 FATAL = .TRUE.
3170 WRITE( NOUT, FMT = 9999 )
3171 DO 240 I = 1, M
3172 IF( MV )THEN
3173 WRITE( NOUT, FMT = 9998 )I, CT( I ), CC( I, J )
3174 ELSE
3175 WRITE( NOUT, FMT = 9998 )I, CC( I, J ), CT( I )
3176 END IF
3177 240 CONTINUE
3178 IF( N.GT.1 )
3179 $ WRITE( NOUT, FMT = 9997 )J
3180*
3181 250 CONTINUE
3182 RETURN
3183*
3184 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3185 $ 'F ACCURATE *******', /' EXPECTED RE',
3186 $ 'SULT COMPUTED RESULT' )
3187 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
3188 9997 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
3189*
3190* End of ZMMCH.
3191*
3192 END
3193 LOGICAL FUNCTION LZE( RI, RJ, LR )
3194*
3195* Tests if two arrays are identical.
3196*
3197* Auxiliary routine for test program for Level 3 Blas.
3198*
3199* -- Written on 8-February-1989.
3200* Jack Dongarra, Argonne National Laboratory.
3201* Iain Duff, AERE Harwell.
3202* Jeremy Du Croz, Numerical Algorithms Group Ltd.
3203* Sven Hammarling, Numerical Algorithms Group Ltd.
3204*
3205* .. Scalar Arguments ..
3206 INTEGER LR
3207* .. Array Arguments ..
3208 COMPLEX*16 RI( * ), RJ( * )
3209* .. Local Scalars ..
3210 INTEGER I
3211* .. Executable Statements ..
3212 DO 10 I = 1, LR
3213 IF( RI( I ).NE.RJ( I ) )
3214 $ GO TO 20
3215 10 CONTINUE
3216 LZE = .TRUE.
3217 GO TO 30
3218 20 CONTINUE
3219 LZE = .FALSE.
3220 30 RETURN
3221*
3222* End of LZE.
3223*
3224 END
3225 LOGICAL FUNCTION LZERES( TYPE, UPLO, M, N, AA, AS, LDA )
3226*
3227* Tests if selected elements in two arrays are equal.
3228*
3229* TYPE is 'GE' or 'HE' or 'SY'.
3230*
3231* Auxiliary routine for test program for Level 3 Blas.
3232*
3233* -- Written on 8-February-1989.
3234* Jack Dongarra, Argonne National Laboratory.
3235* Iain Duff, AERE Harwell.
3236* Jeremy Du Croz, Numerical Algorithms Group Ltd.
3237* Sven Hammarling, Numerical Algorithms Group Ltd.
3238*
3239* .. Scalar Arguments ..
3240 INTEGER LDA, M, N
3241 CHARACTER*1 UPLO
3242 CHARACTER*2 TYPE
3243* .. Array Arguments ..
3244 COMPLEX*16 AA( LDA, * ), AS( LDA, * )
3245* .. Local Scalars ..
3246 INTEGER I, IBEG, IEND, J
3247 LOGICAL UPPER
3248* .. Executable Statements ..
3249 UPPER = UPLO.EQ.'U'
3250 IF( TYPE.EQ.'GE' )THEN
3251 DO 20 J = 1, N
3252 DO 10 I = M + 1, LDA
3253 IF( AA( I, J ).NE.AS( I, J ) )
3254 $ GO TO 70
3255 10 CONTINUE
3256 20 CONTINUE
3257 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'SY' )THEN
3258 DO 50 J = 1, N
3259 IF( UPPER )THEN
3260 IBEG = 1
3261 IEND = J
3262 ELSE
3263 IBEG = J
3264 IEND = N
3265 END IF
3266 DO 30 I = 1, IBEG - 1
3267 IF( AA( I, J ).NE.AS( I, J ) )
3268 $ GO TO 70
3269 30 CONTINUE
3270 DO 40 I = IEND + 1, LDA
3271 IF( AA( I, J ).NE.AS( I, J ) )
3272 $ GO TO 70
3273 40 CONTINUE
3274 50 CONTINUE
3275 END IF
3276*
3277 60 CONTINUE
3278 LZERES = .TRUE.
3279 GO TO 80
3280 70 CONTINUE
3281 LZERES = .FALSE.
3282 80 RETURN
3283*
3284* End of LZERES.
3285*
3286 END
3287 COMPLEX*16 FUNCTION ZBEG( RESET )
3288*
3289* Generates complex numbers as pairs of random numbers uniformly
3290* distributed between -0.5 and 0.5.
3291*
3292* Auxiliary routine for test program for Level 3 Blas.
3293*
3294* -- Written on 8-February-1989.
3295* Jack Dongarra, Argonne National Laboratory.
3296* Iain Duff, AERE Harwell.
3297* Jeremy Du Croz, Numerical Algorithms Group Ltd.
3298* Sven Hammarling, Numerical Algorithms Group Ltd.
3299*
3300* .. Scalar Arguments ..
3301 LOGICAL RESET
3302* .. Local Scalars ..
3303 INTEGER I, IC, J, MI, MJ
3304* .. Save statement ..
3305 SAVE I, IC, J, MI, MJ
3306* .. Intrinsic Functions ..
3307 INTRINSIC DCMPLX
3308* .. Executable Statements ..
3309 IF( RESET )THEN
3310* Initialize local variables.
3311 MI = 891
3312 MJ = 457
3313 I = 7
3314 J = 7
3315 IC = 0
3316 RESET = .FALSE.
3317 END IF
3318*
3319* The sequence of values of I or J is bounded between 1 and 999.
3320* If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
3321* If initial I or J = 4 or 8, the period will be 25.
3322* If initial I or J = 5, the period will be 10.
3323* IC is used to break up the period by skipping 1 value of I or J
3324* in 6.
3325*
3326 IC = IC + 1
3327 10 I = I*MI
3328 J = J*MJ
3329 I = I - 1000*( I/1000 )
3330 J = J - 1000*( J/1000 )
3331 IF( IC.GE.5 )THEN
3332 IC = 0
3333 GO TO 10
3334 END IF
3335 ZBEG = DCMPLX( ( I - 500 )/1001.0D0, ( J - 500 )/1001.0D0 )
3336 RETURN
3337*
3338* End of ZBEG.
3339*
3340 END
3341 DOUBLE PRECISION FUNCTION DDIFF( X, Y )
3342*
3343* Auxiliary routine for test program for Level 3 Blas.
3344*
3345* -- Written on 8-February-1989.
3346* Jack Dongarra, Argonne National Laboratory.
3347* Iain Duff, AERE Harwell.
3348* Jeremy Du Croz, Numerical Algorithms Group Ltd.
3349* Sven Hammarling, Numerical Algorithms Group Ltd.
3350*
3351* .. Scalar Arguments ..
3352 DOUBLE PRECISION X, Y
3353* .. Executable Statements ..
3354 DDIFF = X - Y
3355 RETURN
3356*
3357* End of DDIFF.
3358*
3359 END
3360 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3361*
3362* Tests whether XERBLA has detected an error when it should.
3363*
3364* Auxiliary routine for test program for Level 3 Blas.
3365*
3366* -- Written on 8-February-1989.
3367* Jack Dongarra, Argonne National Laboratory.
3368* Iain Duff, AERE Harwell.
3369* Jeremy Du Croz, Numerical Algorithms Group Ltd.
3370* Sven Hammarling, Numerical Algorithms Group Ltd.
3371*
3372* .. Scalar Arguments ..
3373 INTEGER INFOT, NOUT
3374 LOGICAL LERR, OK
3375 CHARACTER*6 SRNAMT
3376* .. Executable Statements ..
3377 IF( .NOT.LERR )THEN
3378 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3379 OK = .FALSE.
3380 END IF
3381 LERR = .FALSE.
3382 RETURN
3383*
3384 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3385 $ 'ETECTED BY ', A6, ' *****' )
3386*
3387* End of CHKXER.
3388*
3389 END
3390 SUBROUTINE XERBLA( SRNAME, INFO )
3391*
3392* This is a special version of XERBLA to be used only as part of
3393* the test program for testing error exits from the Level 3 BLAS
3394* routines.
3395*
3396* XERBLA is an error handler for the Level 3 BLAS routines.
3397*
3398* It is called by the Level 3 BLAS routines if an input parameter is
3399* invalid.
3400*
3401* Auxiliary routine for test program for Level 3 Blas.
3402*
3403* -- Written on 8-February-1989.
3404* Jack Dongarra, Argonne National Laboratory.
3405* Iain Duff, AERE Harwell.
3406* Jeremy Du Croz, Numerical Algorithms Group Ltd.
3407* Sven Hammarling, Numerical Algorithms Group Ltd.
3408*
3409* .. Scalar Arguments ..
3410 INTEGER INFO
3411 CHARACTER*6 SRNAME
3412* .. Scalars in Common ..
3413 INTEGER INFOT, NOUT
3414 LOGICAL LERR, OK
3415 CHARACTER*6 SRNAMT
3416* .. Common blocks ..
3417 COMMON /INFOC/INFOT, NOUT, OK, LERR
3418 COMMON /SRNAMC/SRNAMT
3419* .. Executable Statements ..
3420 LERR = .TRUE.
3421 IF( INFO.NE.INFOT )THEN
3422 IF( INFOT.NE.0 )THEN
3423 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3424 ELSE
3425 WRITE( NOUT, FMT = 9997 )INFO
3426 END IF
3427 OK = .FALSE.
3428 END IF
3429 IF( SRNAME.NE.SRNAMT )THEN
3430 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3431 OK = .FALSE.
3432 END IF
3433 RETURN
3434*
3435 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
3436 $ ' OF ', I2, ' *******' )
3437 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
3438 $ 'AD OF ', A6, ' *******' )
3439 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,
3440 $ ' *******' )
3441*
3442* End of XERBLA
3443*
3444 END
3445
Note: See TracBrowser for help on using the repository browser.