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

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

Doc

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