3 * Test program for the COMPLEX*16 Level 2 Blas.
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
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
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.
48 * Dongarra J. J., Du Croz J. J., Hammarling S. and Hanson R. J..
49 * An extended set of Fortran Basic Linear Algebra Subprograms.
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.
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.
63 * -- Written on 10-August-1987.
64 * Richard Hanson, Sandia National Labs.
65 * Jeremy Du Croz, NAG Central Office.
71 PARAMETER ( NSUBS = 17 )
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 )
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 )
83 DOUBLE PRECISION EPS, ERR, THRESH
84 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NINC, NKB,
86 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
90 CHARACTER*32 SNAPS, SUMMRY
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
106 * .. External Subroutines ..
107 EXTERNAL ZCHK1, ZCHK2, ZCHK3, ZCHK4, ZCHK5, ZCHK6,
109 * .. Intrinsic Functions ..
110 INTRINSIC ABS, MAX, MIN
111 * .. Scalars in Common ..
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 ',
124 * .. Executable Statements ..
126 * Read name and unit number for summary output file and open file.
128 READ( NIN, FMT = * )SUMMRY
129 READ( NIN, FMT = * )NOUT
130 OPEN( NOUT, FILE = SUMMRY, STATUS = 'NEW' )
133 * Read name and unit number for snapshot output file and open file.
135 READ( NIN, FMT = * )SNAPS
136 READ( NIN, FMT = * )NTRA
139 OPEN( NTRA, FILE = SNAPS, STATUS = 'NEW' )
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
151 * Read and check the parameter values for the tests.
154 READ( NIN, FMT = * )NIDIM
155 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
156 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
159 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
161 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
162 WRITE( NOUT, FMT = 9996 )NMAX
167 READ( NIN, FMT = * )NKB
168 IF( NKB.LT.1.OR.NKB.GT.NKBMAX )THEN
169 WRITE( NOUT, FMT = 9997 )'K', NKBMAX
172 READ( NIN, FMT = * )( KB( I ), I = 1, NKB )
174 IF( KB( I ).LT.0 )THEN
175 WRITE( NOUT, FMT = 9995 )
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
185 READ( NIN, FMT = * )( INC( I ), I = 1, NINC )
187 IF( INC( I ).EQ.0.OR.ABS( INC( I ) ).GT.INCMAX )THEN
188 WRITE( NOUT, FMT = 9994 )INCMAX
193 READ( NIN, FMT = * )NALF
194 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
195 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
198 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
200 READ( NIN, FMT = * )NBET
201 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
202 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
205 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
207 * Report values of parameters.
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 )
219 WRITE( NOUT, FMT = * )
220 WRITE( NOUT, FMT = 9999 )THRESH
221 WRITE( NOUT, FMT = * )
223 * Read names of subroutines and flags which indicate
224 * whether they are to be tested.
229 50 READ( NIN, FMT = 9984, END = 80 )SNAMET, LTESTT
231 IF( SNAMET.EQ.SNAMES( I ) )
234 WRITE( NOUT, FMT = 9986 )SNAMET
236 70 LTEST( I ) = LTESTT
242 * Compute EPS (the machine precision).
246 IF( DDIFF( RONE + EPS, RONE ).EQ.RZERO )
252 WRITE( NOUT, FMT = 9998 )EPS
254 * Check the reliability of ZMVCH using exact data.
259 A( I, J ) = MAX( I - J + 1, 0 )
265 YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
267 * YY holds the exact result. On exit from ZMVCH YT holds
268 * the result computed by ZMVCH.
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
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
286 * Test each subroutine in turn.
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 )
294 SRNAMT = SNAMES( ISNUM )
297 CALL ZCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
298 WRITE( NOUT, FMT = * )
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 )
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 )
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 )
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,
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,
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,
343 200 IF( FATAL.AND.SFATAL )
347 WRITE( NOUT, FMT = 9982 )
351 WRITE( NOUT, FMT = 9981 )
355 WRITE( NOUT, FMT = 9987 )
363 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
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 ',
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 ',
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' )
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 )
404 * Tests ZGEMV and ZGBMV.
406 * Auxiliary routine for test program for Level 2 Blas.
408 * -- Written on 10-August-1987.
409 * Richard Hanson, Sandia National Labs.
410 * Jeremy Du Croz, NAG Central Office.
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,
422 LOGICAL FATAL, REWI, TRACE
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 ),
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,
439 LOGICAL BANDED, FULL, NULL, RESET, SAME, TRAN
440 CHARACTER*1 TRANS, TRANSS
444 * .. External Functions ..
447 * .. External Subroutines ..
448 EXTERNAL ZGBMV, ZGEMV, ZMAKE, ZMVCH
449 * .. Intrinsic Functions ..
450 INTRINSIC ABS, MAX, MIN
451 * .. Scalars in Common ..
454 * .. Common blocks ..
455 COMMON /INFOC/INFOT, NOUTC, OK, LERR
456 * .. Data statements ..
458 * .. Executable Statements ..
459 FULL = SNAME( 3: 3 ).EQ.'E'
460 BANDED = SNAME( 3: 3 ).EQ.'B'
461 * Define the number of arguments.
464 ELSE IF( BANDED )THEN
478 $ M = MAX( N - ND, 0 )
480 $ M = MIN( N + ND, NMAX )
490 KL = MAX( KU - 1, 0 )
495 * Set LDA to 1 more than minimum value if room.
503 * Skip tests if not enough room.
507 NULL = N.LE.0.OR.M.LE.0
509 * Generate the matrix A.
512 CALL ZMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX, AA,
513 $ LDA, KL, KU, RESET, TRANSL )
516 TRANS = ICH( IC: IC )
517 TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
531 * Generate the vector X.
534 CALL ZMAKE( 'GE', ' ', ' ', 1, NL, X, 1, XX,
535 $ ABS( INCX ), 0, NL - 1, RESET, TRANSL )
538 XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO
551 * Generate the vector Y.
554 CALL ZMAKE( 'GE', ' ', ' ', 1, ML, Y, 1,
555 $ YY, ABS( INCY ), 0, ML - 1,
560 * Save every datum before calling the
583 * Call the subroutine.
587 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
588 $ TRANS, M, N, ALPHA, LDA, INCX, BETA,
592 CALL ZGEMV( TRANS, M, N, ALPHA, AA,
593 $ LDA, XX, INCX, BETA, YY,
595 ELSE IF( BANDED )THEN
597 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
598 $ TRANS, M, N, KL, KU, ALPHA, LDA,
602 CALL ZGBMV( TRANS, M, N, KL, KU, ALPHA,
603 $ AA, LDA, XX, INCX, BETA,
607 * Check if error-exit was taken incorrectly.
610 WRITE( NOUT, FMT = 9993 )
615 * See what data changed inside subroutines.
617 ISAME( 1 ) = TRANS.EQ.TRANSS
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
628 ISAME( 10 ) = LZE( YS, YY, LY )
630 ISAME( 10 ) = LZERES( 'GE', ' ', 1,
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
645 ISAME( 12 ) = LZE( YS, YY, LY )
647 ISAME( 12 ) = LZERES( 'GE', ' ', 1,
651 ISAME( 13 ) = INCYS.EQ.INCY
654 * If data was incorrectly changed, report
659 SAME = SAME.AND.ISAME( I )
660 IF( .NOT.ISAME( I ) )
661 $ WRITE( NOUT, FMT = 9998 )I
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
682 * Avoid repeating tests with M.le.0 or
705 IF( ERRMAX.LT.THRESH )THEN
706 WRITE( NOUT, FMT = 9999 )SNAME, NC
708 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
713 WRITE( NOUT, FMT = 9996 )SNAME
715 WRITE( NOUT, FMT = 9994 )NC, SNAME, TRANS, M, N, ALPHA, LDA,
717 ELSE IF( BANDED )THEN
718 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANS, M, N, KL, KU,
719 $ ALPHA, LDA, INCX, BETA, INCY
725 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
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 *',
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 )
750 * Tests ZHEMV, ZHBMV and ZHPMV.
752 * Auxiliary routine for test program for Level 2 Blas.
754 * -- Written on 10-August-1987.
755 * Richard Hanson, Sandia National Labs.
756 * Jeremy Du Croz, NAG Central Office.
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,
768 LOGICAL FATAL, REWI, TRACE
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 ),
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
789 * .. External Functions ..
792 * .. External Subroutines ..
793 EXTERNAL ZHBMV, ZHEMV, ZHPMV, ZMAKE, ZMVCH
794 * .. Intrinsic Functions ..
796 * .. Scalars in Common ..
799 * .. Common blocks ..
800 COMMON /INFOC/INFOT, NOUTC, OK, LERR
801 * .. Data statements ..
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.
810 ELSE IF( BANDED )THEN
812 ELSE IF( PACKED )THEN
834 * Set LDA to 1 more than minimum value if room.
842 * Skip tests if not enough room.
846 LAA = ( N*( N + 1 ) )/2
855 * Generate the matrix A.
858 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX, AA,
859 $ LDA, K, K, RESET, TRANSL )
865 * Generate the vector X.
868 CALL ZMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
869 $ ABS( INCX ), 0, N - 1, RESET, TRANSL )
872 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
885 * Generate the vector Y.
888 CALL ZMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
889 $ ABS( INCY ), 0, N - 1, RESET,
894 * Save every datum before calling the
915 * Call the subroutine.
919 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
920 $ UPLO, N, ALPHA, LDA, INCX, BETA, INCY
923 CALL ZHEMV( UPLO, N, ALPHA, AA, LDA, XX,
924 $ INCX, BETA, YY, INCY )
925 ELSE IF( BANDED )THEN
927 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
928 $ UPLO, N, K, ALPHA, LDA, INCX, BETA,
932 CALL ZHBMV( UPLO, N, K, ALPHA, AA, LDA,
933 $ XX, INCX, BETA, YY, INCY )
934 ELSE IF( PACKED )THEN
936 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
937 $ UPLO, N, ALPHA, INCX, BETA, INCY
940 CALL ZHPMV( UPLO, N, ALPHA, AA, XX, INCX,
944 * Check if error-exit was taken incorrectly.
947 WRITE( NOUT, FMT = 9992 )
952 * See what data changed inside subroutines.
954 ISAME( 1 ) = UPLO.EQ.UPLOS
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
964 ISAME( 9 ) = LZE( YS, YY, LY )
966 ISAME( 9 ) = LZERES( 'GE', ' ', 1, N,
967 $ YS, YY, ABS( INCY ) )
969 ISAME( 10 ) = INCYS.EQ.INCY
970 ELSE IF( BANDED )THEN
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
979 ISAME( 10 ) = LZE( YS, YY, LY )
981 ISAME( 10 ) = LZERES( 'GE', ' ', 1, N,
982 $ YS, YY, ABS( INCY ) )
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
992 ISAME( 8 ) = LZE( YS, YY, LY )
994 ISAME( 8 ) = LZERES( 'GE', ' ', 1, N,
995 $ YS, YY, ABS( INCY ) )
997 ISAME( 9 ) = INCYS.EQ.INCY
1000 * If data was incorrectly changed, report and
1005 SAME = SAME.AND.ISAME( I )
1006 IF( .NOT.ISAME( I ) )
1007 $ WRITE( NOUT, FMT = 9998 )I
1018 CALL ZMVCH( 'N', N, N, ALPHA, A, NMAX, X,
1019 $ INCX, BETA, Y, INCY, YT, G,
1020 $ YY, EPS, ERR, FATAL, NOUT,
1022 ERRMAX = MAX( ERRMAX, ERR )
1023 * If got really bad answer, report and
1028 * Avoid repeating tests with N.le.0
1048 IF( ERRMAX.LT.THRESH )THEN
1049 WRITE( NOUT, FMT = 9999 )SNAME, NC
1051 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1056 WRITE( NOUT, FMT = 9996 )SNAME
1058 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, LDA, INCX,
1060 ELSE IF( BANDED )THEN
1061 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, K, ALPHA, LDA,
1063 ELSE IF( PACKED )THEN
1064 WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, N, ALPHA, INCX,
1071 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
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,
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, '), ',
1088 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
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 )
1098 * Tests ZTRMV, ZTBMV, ZTPMV, ZTRSV, ZTBSV and ZTPSV.
1100 * Auxiliary routine for test program for Level 2 Blas.
1102 * -- Written on 10-August-1987.
1103 * Richard Hanson, Sandia National Labs.
1104 * Jeremy Du Croz, NAG Central Office.
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
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 ..
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
1133 * .. Local Arrays ..
1135 * .. External Functions ..
1137 EXTERNAL LZE, LZERES
1138 * .. External Subroutines ..
1139 EXTERNAL ZMAKE, ZMVCH, ZTBMV, ZTBSV, ZTPMV, ZTPSV,
1141 * .. Intrinsic Functions ..
1143 * .. Scalars in Common ..
1144 INTEGER INFOT, NOUTC
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.
1157 ELSE IF( BANDED )THEN
1159 ELSE IF( PACKED )THEN
1166 * Set up zero vector for ZMVCH.
1171 DO 110 IN = 1, NIDIM
1185 * Set LDA to 1 more than minimum value if room.
1193 * Skip tests if not enough room.
1197 LAA = ( N*( N + 1 ) )/2
1204 UPLO = ICHU( ICU: ICU )
1207 TRANS = ICHT( ICT: ICT )
1210 DIAG = ICHD( ICD: ICD )
1212 * Generate the matrix A.
1215 CALL ZMAKE( SNAME( 2: 3 ), UPLO, DIAG, N, N, A,
1216 $ NMAX, AA, LDA, K, K, RESET, TRANSL )
1222 * Generate the vector X.
1225 CALL ZMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
1226 $ ABS( INCX ), 0, N - 1, RESET,
1230 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
1235 * Save every datum before calling the subroutine.
1251 * Call the subroutine.
1253 IF( SNAME( 4: 5 ).EQ.'MV' )THEN
1256 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
1257 $ UPLO, TRANS, DIAG, N, LDA, INCX
1260 CALL ZTRMV( UPLO, TRANS, DIAG, N, AA, LDA,
1262 ELSE IF( BANDED )THEN
1264 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
1265 $ UPLO, TRANS, DIAG, N, K, LDA, INCX
1268 CALL ZTBMV( UPLO, TRANS, DIAG, N, K, AA,
1270 ELSE IF( PACKED )THEN
1272 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1273 $ UPLO, TRANS, DIAG, N, INCX
1276 CALL ZTPMV( UPLO, TRANS, DIAG, N, AA, XX,
1279 ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
1282 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
1283 $ UPLO, TRANS, DIAG, N, LDA, INCX
1286 CALL ZTRSV( UPLO, TRANS, DIAG, N, AA, LDA,
1288 ELSE IF( BANDED )THEN
1290 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
1291 $ UPLO, TRANS, DIAG, N, K, LDA, INCX
1294 CALL ZTBSV( UPLO, TRANS, DIAG, N, K, AA,
1296 ELSE IF( PACKED )THEN
1298 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1299 $ UPLO, TRANS, DIAG, N, INCX
1302 CALL ZTPSV( UPLO, TRANS, DIAG, N, AA, XX,
1307 * Check if error-exit was taken incorrectly.
1310 WRITE( NOUT, FMT = 9992 )
1315 * See what data changed inside subroutines.
1317 ISAME( 1 ) = UPLO.EQ.UPLOS
1318 ISAME( 2 ) = TRANS.EQ.TRANSS
1319 ISAME( 3 ) = DIAG.EQ.DIAGS
1320 ISAME( 4 ) = NS.EQ.N
1322 ISAME( 5 ) = LZE( AS, AA, LAA )
1323 ISAME( 6 ) = LDAS.EQ.LDA
1325 ISAME( 7 ) = LZE( XS, XX, LX )
1327 ISAME( 7 ) = LZERES( 'GE', ' ', 1, N, XS,
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
1336 ISAME( 8 ) = LZE( XS, XX, LX )
1338 ISAME( 8 ) = LZERES( 'GE', ' ', 1, N, XS,
1341 ISAME( 9 ) = INCXS.EQ.INCX
1342 ELSE IF( PACKED )THEN
1343 ISAME( 5 ) = LZE( AS, AA, LAA )
1345 ISAME( 6 ) = LZE( XS, XX, LX )
1347 ISAME( 6 ) = LZERES( 'GE', ' ', 1, N, XS,
1350 ISAME( 7 ) = INCXS.EQ.INCX
1353 * If data was incorrectly changed, report and
1358 SAME = SAME.AND.ISAME( I )
1359 IF( .NOT.ISAME( I ) )
1360 $ WRITE( NOUT, FMT = 9998 )I
1368 IF( SNAME( 4: 5 ).EQ.'MV' )THEN
1372 CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, X,
1373 $ INCX, ZERO, Z, INCX, XT, G,
1374 $ XX, EPS, ERR, FATAL, NOUT,
1376 ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
1378 * Compute approximation to original vector.
1381 Z( I ) = XX( 1 + ( I - 1 )*
1383 XX( 1 + ( I - 1 )*ABS( INCX ) )
1386 CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, Z,
1387 $ INCX, ZERO, X, INCX, XT, G,
1388 $ XX, EPS, ERR, FATAL, NOUT,
1391 ERRMAX = MAX( ERRMAX, ERR )
1392 * If got really bad answer, report and return.
1396 * Avoid repeating tests with N.le.0.
1414 IF( ERRMAX.LT.THRESH )THEN
1415 WRITE( NOUT, FMT = 9999 )SNAME, NC
1417 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1422 WRITE( NOUT, FMT = 9996 )SNAME
1424 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, DIAG, N, LDA,
1426 ELSE IF( BANDED )THEN
1427 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, DIAG, N, K,
1429 ELSE IF( PACKED )THEN
1430 WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, TRANS, DIAG, N, INCX
1436 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
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, ',
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 *',
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,
1461 * Tests ZGERC and ZGERU.
1463 * Auxiliary routine for test program for Level 2 Blas.
1465 * -- Written on 10-August-1987.
1466 * Richard Hanson, Sandia National Labs.
1467 * Jeremy Du Croz, NAG Central Office.
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
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,
1495 LOGICAL CONJ, NULL, RESET, SAME
1496 * .. Local Arrays ..
1499 * .. External Functions ..
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
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.
1520 DO 120 IN = 1, NIDIM
1526 $ M = MAX( N - ND, 0 )
1528 $ M = MIN( N + ND, NMAX )
1530 * Set LDA to 1 more than minimum value if room.
1534 * Skip tests if not enough room.
1538 NULL = N.LE.0.OR.M.LE.0
1544 * Generate the vector X.
1547 CALL ZMAKE( 'GE', ' ', ' ', 1, M, X, 1, XX, ABS( INCX ),
1548 $ 0, M - 1, RESET, TRANSL )
1551 XX( 1 + ABS( INCX )*( M/2 - 1 ) ) = ZERO
1558 * Generate the vector Y.
1561 CALL ZMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
1562 $ ABS( INCY ), 0, N - 1, RESET, TRANSL )
1565 YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
1571 * Generate the matrix A.
1574 CALL ZMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX,
1575 $ AA, LDA, M - 1, N - 1, RESET, TRANSL )
1579 * Save every datum before calling the subroutine.
1597 * Call the subroutine.
1600 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, M, N,
1601 $ ALPHA, INCX, INCY, LDA
1605 CALL ZGERC( M, N, ALPHA, XX, INCX, YY, INCY, AA,
1610 CALL ZGERU( M, N, ALPHA, XX, INCX, YY, INCY, AA,
1614 * Check if error-exit was taken incorrectly.
1617 WRITE( NOUT, FMT = 9993 )
1622 * See what data changed inside subroutine.
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
1632 ISAME( 8 ) = LZE( AS, AA, LAA )
1634 ISAME( 8 ) = LZERES( 'GE', ' ', M, N, AS, AA,
1637 ISAME( 9 ) = LDAS.EQ.LDA
1639 * If data was incorrectly changed, report and return.
1643 SAME = SAME.AND.ISAME( I )
1644 IF( .NOT.ISAME( I ) )
1645 $ WRITE( NOUT, FMT = 9998 )I
1654 * Check the result column by column.
1662 Z( I ) = X( M - I + 1 )
1669 W( 1 ) = Y( N - J + 1 )
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.
1683 * Avoid repeating tests with M.le.0 or N.le.0.
1699 IF( ERRMAX.LT.THRESH )THEN
1700 WRITE( NOUT, FMT = 9999 )SNAME, NC
1702 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1707 WRITE( NOUT, FMT = 9995 )J
1710 WRITE( NOUT, FMT = 9996 )SNAME
1711 WRITE( NOUT, FMT = 9994 )NC, SNAME, M, N, ALPHA, INCX, INCY, LDA
1716 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
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, ') ',
1728 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
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,
1739 * Tests ZHER and ZHPR.
1741 * Auxiliary routine for test program for Level 2 Blas.
1743 * -- Written on 10-August-1987.
1744 * Richard Hanson, Sandia National Labs.
1745 * Jeremy Du Croz, NAG Central Office.
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
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
1775 * .. Local Arrays ..
1778 * .. External Functions ..
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
1788 * .. Common blocks ..
1789 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1790 * .. Data statements ..
1792 * .. Executable Statements ..
1793 FULL = SNAME( 3: 3 ).EQ.'E'
1794 PACKED = SNAME( 3: 3 ).EQ.'P'
1795 * Define the number of arguments.
1798 ELSE IF( PACKED )THEN
1806 DO 100 IN = 1, NIDIM
1808 * Set LDA to 1 more than minimum value if room.
1812 * Skip tests if not enough room.
1816 LAA = ( N*( N + 1 ) )/2
1822 UPLO = ICH( IC: IC )
1829 * Generate the vector X.
1832 CALL ZMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
1833 $ 0, N - 1, RESET, TRANSL )
1836 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
1840 RALPHA = DBLE( ALF( IA ) )
1841 ALPHA = DCMPLX( RALPHA, RZERO )
1842 NULL = N.LE.0.OR.RALPHA.EQ.RZERO
1844 * Generate the matrix A.
1847 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX,
1848 $ AA, LDA, N - 1, N - 1, RESET, TRANSL )
1852 * Save every datum before calling the subroutine.
1866 * Call the subroutine.
1870 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
1874 CALL ZHER( UPLO, N, RALPHA, XX, INCX, AA, LDA )
1875 ELSE IF( PACKED )THEN
1877 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
1881 CALL ZHPR( UPLO, N, RALPHA, XX, INCX, AA )
1884 * Check if error-exit was taken incorrectly.
1887 WRITE( NOUT, FMT = 9992 )
1892 * See what data changed inside subroutines.
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
1900 ISAME( 6 ) = LZE( AS, AA, LAA )
1902 ISAME( 6 ) = LZERES( SNAME( 2: 3 ), UPLO, N, N, AS,
1905 IF( .NOT.PACKED )THEN
1906 ISAME( 7 ) = LDAS.EQ.LDA
1909 * If data was incorrectly changed, report and return.
1913 SAME = SAME.AND.ISAME( I )
1914 IF( .NOT.ISAME( I ) )
1915 $ WRITE( NOUT, FMT = 9998 )I
1924 * Check the result column by column.
1932 Z( I ) = X( N - I + 1 )
1937 W( 1 ) = DCONJG( Z( J ) )
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,
1958 ERRMAX = MAX( ERRMAX, ERR )
1959 * If got really bad answer, report and return.
1964 * Avoid repeating tests if N.le.0.
1979 IF( ERRMAX.LT.THRESH )THEN
1980 WRITE( NOUT, FMT = 9999 )SNAME, NC
1982 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1987 WRITE( NOUT, FMT = 9995 )J
1990 WRITE( NOUT, FMT = 9996 )SNAME
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
2000 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
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,',
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 *',
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,
2024 * Tests ZHER2 and ZHPR2.
2026 * Auxiliary routine for test program for Level 2 Blas.
2028 * -- Written on 10-August-1987.
2029 * Richard Hanson, Sandia National Labs.
2030 * Jeremy Du Croz, NAG Central Office.
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
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,
2058 LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER
2059 CHARACTER*1 UPLO, UPLOS
2061 * .. Local Arrays ..
2064 * .. External Functions ..
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
2074 * .. Common blocks ..
2075 COMMON /INFOC/INFOT, NOUTC, OK, LERR
2076 * .. Data statements ..
2078 * .. Executable Statements ..
2079 FULL = SNAME( 3: 3 ).EQ.'E'
2080 PACKED = SNAME( 3: 3 ).EQ.'P'
2081 * Define the number of arguments.
2084 ELSE IF( PACKED )THEN
2092 DO 140 IN = 1, NIDIM
2094 * Set LDA to 1 more than minimum value if room.
2098 * Skip tests if not enough room.
2102 LAA = ( N*( N + 1 ) )/2
2108 UPLO = ICH( IC: IC )
2115 * Generate the vector X.
2118 CALL ZMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
2119 $ 0, N - 1, RESET, TRANSL )
2122 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
2129 * Generate the vector Y.
2132 CALL ZMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
2133 $ ABS( INCY ), 0, N - 1, RESET, TRANSL )
2136 YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
2141 NULL = N.LE.0.OR.ALPHA.EQ.ZERO
2143 * Generate the matrix A.
2146 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A,
2147 $ NMAX, AA, LDA, N - 1, N - 1, RESET,
2152 * Save every datum before calling the subroutine.
2170 * Call the subroutine.
2174 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
2175 $ ALPHA, INCX, INCY, LDA
2178 CALL ZHER2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
2180 ELSE IF( PACKED )THEN
2182 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
2186 CALL ZHPR2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
2190 * Check if error-exit was taken incorrectly.
2193 WRITE( NOUT, FMT = 9992 )
2198 * See what data changed inside subroutines.
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
2208 ISAME( 8 ) = LZE( AS, AA, LAA )
2210 ISAME( 8 ) = LZERES( SNAME( 2: 3 ), UPLO, N, N,
2213 IF( .NOT.PACKED )THEN
2214 ISAME( 9 ) = LDAS.EQ.LDA
2217 * If data was incorrectly changed, report and return.
2221 SAME = SAME.AND.ISAME( I )
2222 IF( .NOT.ISAME( I ) )
2223 $ WRITE( NOUT, FMT = 9998 )I
2232 * Check the result column by column.
2240 Z( I, 1 ) = X( N - I + 1 )
2249 Z( I, 2 ) = Y( N - I + 1 )
2254 W( 1 ) = ALPHA*DCONJG( Z( J, 2 ) )
2255 W( 2 ) = DCONJG( ALPHA )*DCONJG( Z( J, 1 ) )
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,
2276 ERRMAX = MAX( ERRMAX, ERR )
2277 * If got really bad answer, report and return.
2282 * Avoid repeating tests with N.le.0.
2299 IF( ERRMAX.LT.THRESH )THEN
2300 WRITE( NOUT, FMT = 9999 )SNAME, NC
2302 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
2307 WRITE( NOUT, FMT = 9995 )J
2310 WRITE( NOUT, FMT = 9996 )SNAME
2312 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, INCX,
2314 ELSE IF( PACKED )THEN
2315 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, ALPHA, INCX, INCY
2321 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
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) ',
2333 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',(', F4.1, ',',
2334 $ F4.1, '), X,', I2, ', Y,', I2, ', A,', I3, ') ',
2336 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2342 SUBROUTINE ZCHKE( ISNUM, SRNAMT, NOUT )
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.
2348 * Auxiliary routine for test program for Level 2 Blas.
2350 * -- Written on 10-August-1987.
2351 * Richard Hanson, Sandia National Labs.
2352 * Jeremy Du Croz, NAG Central Office.
2354 * .. Scalar Arguments ..
2357 * .. Scalars in Common ..
2358 INTEGER INFOT, NOUTC
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.
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.
2378 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
2379 $ 90, 100, 110, 120, 130, 140, 150, 160,
2382 CALL ZGEMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2383 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2385 CALL ZGEMV( 'N', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2386 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2388 CALL ZGEMV( 'N', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2389 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2391 CALL ZGEMV( 'N', 2, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2392 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2394 CALL ZGEMV( 'N', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2395 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2397 CALL ZGEMV( 'N', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2398 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2401 CALL ZGBMV( '/', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2402 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2404 CALL ZGBMV( 'N', -1, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2405 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2407 CALL ZGBMV( 'N', 0, -1, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2408 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2410 CALL ZGBMV( 'N', 0, 0, -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2411 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2413 CALL ZGBMV( 'N', 2, 0, 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2414 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2416 CALL ZGBMV( 'N', 0, 0, 1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2417 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2419 CALL ZGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2420 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2422 CALL ZGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2423 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2426 CALL ZHEMV( '/', 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2427 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2429 CALL ZHEMV( 'U', -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2430 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2432 CALL ZHEMV( 'U', 2, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2433 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2435 CALL ZHEMV( 'U', 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2436 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2438 CALL ZHEMV( 'U', 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2439 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2442 CALL ZHBMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2443 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2445 CALL ZHBMV( 'U', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2446 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2448 CALL ZHBMV( 'U', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2449 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2451 CALL ZHBMV( 'U', 0, 1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2452 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2454 CALL ZHBMV( 'U', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2455 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2457 CALL ZHBMV( 'U', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2458 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2461 CALL ZHPMV( '/', 0, ALPHA, A, X, 1, BETA, Y, 1 )
2462 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2464 CALL ZHPMV( 'U', -1, ALPHA, A, X, 1, BETA, Y, 1 )
2465 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2467 CALL ZHPMV( 'U', 0, ALPHA, A, X, 0, BETA, Y, 1 )
2468 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2470 CALL ZHPMV( 'U', 0, ALPHA, A, X, 1, BETA, Y, 0 )
2471 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2474 CALL ZTRMV( '/', 'N', 'N', 0, A, 1, X, 1 )
2475 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2477 CALL ZTRMV( 'U', '/', 'N', 0, A, 1, X, 1 )
2478 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2480 CALL ZTRMV( 'U', 'N', '/', 0, A, 1, X, 1 )
2481 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2483 CALL ZTRMV( 'U', 'N', 'N', -1, A, 1, X, 1 )
2484 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2486 CALL ZTRMV( 'U', 'N', 'N', 2, A, 1, X, 1 )
2487 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2489 CALL ZTRMV( 'U', 'N', 'N', 0, A, 1, X, 0 )
2490 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2493 CALL ZTBMV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
2494 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2496 CALL ZTBMV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
2497 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2499 CALL ZTBMV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
2500 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2502 CALL ZTBMV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
2503 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2505 CALL ZTBMV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
2506 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2508 CALL ZTBMV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
2509 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2511 CALL ZTBMV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
2512 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2515 CALL ZTPMV( '/', 'N', 'N', 0, A, X, 1 )
2516 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2518 CALL ZTPMV( 'U', '/', 'N', 0, A, X, 1 )
2519 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2521 CALL ZTPMV( 'U', 'N', '/', 0, A, X, 1 )
2522 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2524 CALL ZTPMV( 'U', 'N', 'N', -1, A, X, 1 )
2525 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2527 CALL ZTPMV( 'U', 'N', 'N', 0, A, X, 0 )
2528 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2531 CALL ZTRSV( '/', 'N', 'N', 0, A, 1, X, 1 )
2532 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2534 CALL ZTRSV( 'U', '/', 'N', 0, A, 1, X, 1 )
2535 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2537 CALL ZTRSV( 'U', 'N', '/', 0, A, 1, X, 1 )
2538 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2540 CALL ZTRSV( 'U', 'N', 'N', -1, A, 1, X, 1 )
2541 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2543 CALL ZTRSV( 'U', 'N', 'N', 2, A, 1, X, 1 )
2544 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2546 CALL ZTRSV( 'U', 'N', 'N', 0, A, 1, X, 0 )
2547 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2550 CALL ZTBSV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
2551 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2553 CALL ZTBSV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
2554 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2556 CALL ZTBSV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
2557 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2559 CALL ZTBSV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
2560 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2562 CALL ZTBSV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
2563 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2565 CALL ZTBSV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
2566 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2568 CALL ZTBSV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
2569 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2572 CALL ZTPSV( '/', 'N', 'N', 0, A, X, 1 )
2573 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2575 CALL ZTPSV( 'U', '/', 'N', 0, A, X, 1 )
2576 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2578 CALL ZTPSV( 'U', 'N', '/', 0, A, X, 1 )
2579 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2581 CALL ZTPSV( 'U', 'N', 'N', -1, A, X, 1 )
2582 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2584 CALL ZTPSV( 'U', 'N', 'N', 0, A, X, 0 )
2585 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2588 CALL ZGERC( -1, 0, ALPHA, X, 1, Y, 1, A, 1 )
2589 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2591 CALL ZGERC( 0, -1, ALPHA, X, 1, Y, 1, A, 1 )
2592 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2594 CALL ZGERC( 0, 0, ALPHA, X, 0, Y, 1, A, 1 )
2595 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2597 CALL ZGERC( 0, 0, ALPHA, X, 1, Y, 0, A, 1 )
2598 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2600 CALL ZGERC( 2, 0, ALPHA, X, 1, Y, 1, A, 1 )
2601 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2604 CALL ZGERU( -1, 0, ALPHA, X, 1, Y, 1, A, 1 )
2605 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2607 CALL ZGERU( 0, -1, ALPHA, X, 1, Y, 1, A, 1 )
2608 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2610 CALL ZGERU( 0, 0, ALPHA, X, 0, Y, 1, A, 1 )
2611 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2613 CALL ZGERU( 0, 0, ALPHA, X, 1, Y, 0, A, 1 )
2614 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2616 CALL ZGERU( 2, 0, ALPHA, X, 1, Y, 1, A, 1 )
2617 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2620 CALL ZHER( '/', 0, RALPHA, X, 1, A, 1 )
2621 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2623 CALL ZHER( 'U', -1, RALPHA, X, 1, A, 1 )
2624 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2626 CALL ZHER( 'U', 0, RALPHA, X, 0, A, 1 )
2627 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2629 CALL ZHER( 'U', 2, RALPHA, X, 1, A, 1 )
2630 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2633 CALL ZHPR( '/', 0, RALPHA, X, 1, A )
2634 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2636 CALL ZHPR( 'U', -1, RALPHA, X, 1, A )
2637 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2639 CALL ZHPR( 'U', 0, RALPHA, X, 0, A )
2640 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2643 CALL ZHER2( '/', 0, ALPHA, X, 1, Y, 1, A, 1 )
2644 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2646 CALL ZHER2( 'U', -1, ALPHA, X, 1, Y, 1, A, 1 )
2647 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2649 CALL ZHER2( 'U', 0, ALPHA, X, 0, Y, 1, A, 1 )
2650 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2652 CALL ZHER2( 'U', 0, ALPHA, X, 1, Y, 0, A, 1 )
2653 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2655 CALL ZHER2( 'U', 2, ALPHA, X, 1, Y, 1, A, 1 )
2656 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2659 CALL ZHPR2( '/', 0, ALPHA, X, 1, Y, 1, A )
2660 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2662 CALL ZHPR2( 'U', -1, ALPHA, X, 1, Y, 1, A )
2663 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2665 CALL ZHPR2( 'U', 0, ALPHA, X, 0, Y, 1, A )
2666 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2668 CALL ZHPR2( 'U', 0, ALPHA, X, 1, Y, 0, A )
2669 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2672 WRITE( NOUT, FMT = 9999 )SRNAMT
2674 WRITE( NOUT, FMT = 9998 )SRNAMT
2678 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2679 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2685 SUBROUTINE ZMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL,
2686 $ KU, RESET, TRANSL )
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.
2693 * TYPE is 'GE', 'GB', 'HE', 'HB', 'HP', 'TR', 'TB' OR 'TP'.
2695 * Auxiliary routine for test program for Level 2 Blas.
2697 * -- Written on 10-August-1987.
2698 * Richard Hanson, Sandia National Labs.
2699 * Jeremy Du Croz, NAG Central Office.
2702 COMPLEX*16 ZERO, ONE
2703 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
2704 $ ONE = ( 1.0D0, 0.0D0 ) )
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 ..
2713 INTEGER KL, KU, LDA, M, N, NMAX
2715 CHARACTER*1 DIAG, UPLO
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 ..
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'
2735 * Generate data in array A.
2739 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
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
2749 A( J, I ) = DCONJG( A( I, J ) )
2757 $ A( J, J ) = DCMPLX( DBLE( A( J, J ) ), RZERO )
2759 $ A( J, J ) = A( J, J ) + ONE
2764 * Store elements in array AS in data structure required by routine.
2766 IF( TYPE.EQ.'GE' )THEN
2769 AA( I + ( J - 1 )*LDA ) = A( I, J )
2771 DO 40 I = M + 1, LDA
2772 AA( I + ( J - 1 )*LDA ) = ROGUE
2775 ELSE IF( TYPE.EQ.'GB' )THEN
2777 DO 60 I1 = 1, KU + 1 - J
2778 AA( I1 + ( J - 1 )*LDA ) = ROGUE
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 )
2784 AA( I3 + ( J - 1 )*LDA ) = ROGUE
2787 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'TR' )THEN
2804 DO 100 I = 1, IBEG - 1
2805 AA( I + ( J - 1 )*LDA ) = ROGUE
2807 DO 110 I = IBEG, IEND
2808 AA( I + ( J - 1 )*LDA ) = A( I, J )
2810 DO 120 I = IEND + 1, LDA
2811 AA( I + ( J - 1 )*LDA ) = ROGUE
2814 JJ = J + ( J - 1 )*LDA
2815 AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE )
2818 ELSE IF( TYPE.EQ.'HB'.OR.TYPE.EQ.'TB' )THEN
2822 IBEG = MAX( 1, KL + 2 - J )
2835 IEND = MIN( KL + 1, 1 + M - J )
2837 DO 140 I = 1, IBEG - 1
2838 AA( I + ( J - 1 )*LDA ) = ROGUE
2840 DO 150 I = IBEG, IEND
2841 AA( I + ( J - 1 )*LDA ) = A( I + J - KK, J )
2843 DO 160 I = IEND + 1, LDA
2844 AA( I + ( J - 1 )*LDA ) = ROGUE
2847 JJ = KK + ( J - 1 )*LDA
2848 AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE )
2851 ELSE IF( TYPE.EQ.'HP'.OR.TYPE.EQ.'TP' )THEN
2861 DO 180 I = IBEG, IEND
2863 AA( IOFF ) = A( I, J )
2866 $ AA( IOFF ) = ROGUE
2868 $ AA( IOFF ) = DCMPLX( DBLE( AA( IOFF ) ), RROGUE )
2878 SUBROUTINE ZMVCH( TRANS, M, N, ALPHA, A, NMAX, X, INCX, BETA, Y,
2879 $ INCY, YT, G, YY, EPS, ERR, FATAL, NOUT, MV )
2881 * Checks the results of the computational tests.
2883 * Auxiliary routine for test program for Level 2 Blas.
2885 * -- Written on 10-August-1987.
2886 * Richard Hanson, Sandia National Labs.
2887 * Jeremy Du Croz, NAG Central Office.
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
2900 * .. Array Arguments ..
2901 COMPLEX*16 A( NMAX, * ), X( * ), Y( * ), YT( * ), YY( * )
2902 DOUBLE PRECISION G( * )
2903 * .. Local Scalars ..
2905 DOUBLE PRECISION ERRI
2906 INTEGER I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL
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 ..
2916 CTRAN = TRANS.EQ.'C'
2917 IF( TRAN.OR.CTRAN )THEN
2939 * Compute expected result in YT using data in A, X and Y.
2940 * Compute gauges in G.
2949 YT( IY ) = YT( IY ) + A( J, I )*X( JX )
2950 G( IY ) = G( IY ) + ABS1( A( J, I ) )*ABS1( X( JX ) )
2953 ELSE IF( CTRAN )THEN
2955 YT( IY ) = YT( IY ) + DCONJG( A( J, I ) )*X( JX )
2956 G( IY ) = G( IY ) + ABS1( A( J, I ) )*ABS1( X( JX ) )
2961 YT( IY ) = YT( IY ) + A( I, J )*X( JX )
2962 G( IY ) = G( IY ) + ABS1( A( I, J ) )*ABS1( X( JX ) )
2966 YT( IY ) = ALPHA*YT( IY ) + BETA*Y( IY )
2967 G( IY ) = ABS1( ALPHA )*G( IY ) + ABS1( BETA )*ABS1( Y( IY ) )
2971 * Compute the error ratio for this result.
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 )
2982 * If the loop completes, all results are at least half accurate.
2985 * Report fatal error.
2988 WRITE( NOUT, FMT = 9999 )
2991 WRITE( NOUT, FMT = 9998 )I, YT( I ),
2992 $ YY( 1 + ( I - 1 )*ABS( INCY ) )
2994 WRITE( NOUT, FMT = 9998 )I,
2995 $ YY( 1 + ( I - 1 )*ABS( INCY ) ), YT( I )
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, ')' ) )
3010 LOGICAL FUNCTION LZE( RI, RJ, LR )
3012 * Tests if two arrays are identical.
3014 * Auxiliary routine for test program for Level 2 Blas.
3016 * -- Written on 10-August-1987.
3017 * Richard Hanson, Sandia National Labs.
3018 * Jeremy Du Croz, NAG Central Office.
3020 * .. Scalar Arguments ..
3022 * .. Array Arguments ..
3023 COMPLEX*16 RI( * ), RJ( * )
3024 * .. Local Scalars ..
3026 * .. Executable Statements ..
3028 IF( RI( I ).NE.RJ( I ) )
3040 LOGICAL FUNCTION LZERES( TYPE, UPLO, M, N, AA, AS, LDA )
3042 * Tests if selected elements in two arrays are equal.
3044 * TYPE is 'GE', 'HE' or 'HP'.
3046 * Auxiliary routine for test program for Level 2 Blas.
3048 * -- Written on 10-August-1987.
3049 * Richard Hanson, Sandia National Labs.
3050 * Jeremy Du Croz, NAG Central Office.
3052 * .. Scalar Arguments ..
3056 * .. Array Arguments ..
3057 COMPLEX*16 AA( LDA, * ), AS( LDA, * )
3058 * .. Local Scalars ..
3059 INTEGER I, IBEG, IEND, J
3061 * .. Executable Statements ..
3063 IF( TYPE.EQ.'GE' )THEN
3065 DO 10 I = M + 1, LDA
3066 IF( AA( I, J ).NE.AS( I, J ) )
3070 ELSE IF( TYPE.EQ.'HE' )THEN
3079 DO 30 I = 1, IBEG - 1
3080 IF( AA( I, J ).NE.AS( I, J ) )
3083 DO 40 I = IEND + 1, LDA
3084 IF( AA( I, J ).NE.AS( I, J ) )
3100 COMPLEX*16 FUNCTION ZBEG( RESET )
3102 * Generates complex numbers as pairs of random numbers uniformly
3103 * distributed between -0.5 and 0.5.
3105 * Auxiliary routine for test program for Level 2 Blas.
3107 * -- Written on 10-August-1987.
3108 * Richard Hanson, Sandia National Labs.
3109 * Jeremy Du Croz, NAG Central Office.
3111 * .. Scalar Arguments ..
3113 * .. Local Scalars ..
3114 INTEGER I, IC, J, MI, MJ
3115 * .. Save statement ..
3116 SAVE I, IC, J, MI, MJ
3117 * .. Intrinsic Functions ..
3119 * .. Executable Statements ..
3121 * Initialize local variables.
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
3140 I = I - 1000*( I/1000 )
3141 J = J - 1000*( J/1000 )
3146 ZBEG = DCMPLX( ( I - 500 )/1001.0D0, ( J - 500 )/1001.0D0 )
3152 DOUBLE PRECISION FUNCTION DDIFF( X, Y )
3154 * Auxiliary routine for test program for Level 2 Blas.
3156 * -- Written on 10-August-1987.
3157 * Richard Hanson, Sandia National Labs.
3159 * .. Scalar Arguments ..
3160 DOUBLE PRECISION X, Y
3161 * .. Executable Statements ..
3168 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3170 * Tests whether XERBLA has detected an error when it should.
3172 * Auxiliary routine for test program for Level 2 Blas.
3174 * -- Written on 10-August-1987.
3175 * Richard Hanson, Sandia National Labs.
3176 * Jeremy Du Croz, NAG Central Office.
3178 * .. Scalar Arguments ..
3182 * .. Executable Statements ..
3184 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3190 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3191 $ 'ETECTED BY ', A6, ' *****' )
3196 SUBROUTINE XERBLA( SRNAME, INFO )
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
3202 * XERBLA is an error handler for the Level 2 BLAS routines.
3204 * It is called by the Level 2 BLAS routines if an input parameter is
3207 * Auxiliary routine for test program for Level 2 Blas.
3209 * -- Written on 10-August-1987.
3210 * Richard Hanson, Sandia National Labs.
3211 * Jeremy Du Croz, NAG Central Office.
3213 * .. Scalar Arguments ..
3216 * .. Scalars in Common ..
3220 * .. Common blocks ..
3221 COMMON /INFOC/INFOT, NOUT, OK, LERR
3222 COMMON /SRNAMC/SRNAMT
3223 * .. Executable Statements ..
3225 IF( INFO.NE.INFOT )THEN
3226 IF( INFOT.NE.0 )THEN
3227 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3229 WRITE( NOUT, FMT = 9997 )INFO
3233 IF( SRNAME.NE.SRNAMT )THEN
3234 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
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,