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

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

Doc

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