3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
19 *> Test program for the COMPLEX*16 Level 2 Blas.
21 *> The program must be driven by a short data file. The first 18 records
22 *> of the file are read using list-directed input, the last 17 records
23 *> are read using the format ( A6, L2 ). An annotated example of a data
24 *> file can be obtained by deleting the first 3 characters from the
25 *> following 35 lines:
26 *> 'zblat2.out' NAME OF SUMMARY OUTPUT FILE
27 *> 6 UNIT NUMBER OF SUMMARY FILE
28 *> 'CBLA2T.SNAP' NAME OF SNAPSHOT OUTPUT FILE
29 *> -1 UNIT NUMBER OF SNAPSHOT FILE (NOT USED IF .LT. 0)
30 *> F LOGICAL FLAG, T TO REWIND SNAPSHOT FILE AFTER EACH RECORD.
31 *> F LOGICAL FLAG, T TO STOP ON FAILURES.
32 *> T LOGICAL FLAG, T TO TEST ERROR EXITS.
33 *> 16.0 THRESHOLD VALUE OF TEST RATIO
34 *> 6 NUMBER OF VALUES OF N
35 *> 0 1 2 3 5 9 VALUES OF N
36 *> 4 NUMBER OF VALUES OF K
37 *> 0 1 2 4 VALUES OF K
38 *> 4 NUMBER OF VALUES OF INCX AND INCY
39 *> 1 2 -1 -2 VALUES OF INCX AND INCY
40 *> 3 NUMBER OF VALUES OF ALPHA
41 *> (0.0,0.0) (1.0,0.0) (0.7,-0.9) VALUES OF ALPHA
42 *> 3 NUMBER OF VALUES OF BETA
43 *> (0.0,0.0) (1.0,0.0) (1.3,-1.1) VALUES OF BETA
44 *> ZGEMV T PUT F FOR NO TEST. SAME COLUMNS.
45 *> ZGBMV T PUT F FOR NO TEST. SAME COLUMNS.
46 *> ZHEMV T PUT F FOR NO TEST. SAME COLUMNS.
47 *> ZHBMV T PUT F FOR NO TEST. SAME COLUMNS.
48 *> ZHPMV T PUT F FOR NO TEST. SAME COLUMNS.
49 *> ZTRMV T PUT F FOR NO TEST. SAME COLUMNS.
50 *> ZTBMV T PUT F FOR NO TEST. SAME COLUMNS.
51 *> ZTPMV T PUT F FOR NO TEST. SAME COLUMNS.
52 *> ZTRSV T PUT F FOR NO TEST. SAME COLUMNS.
53 *> ZTBSV T PUT F FOR NO TEST. SAME COLUMNS.
54 *> ZTPSV T PUT F FOR NO TEST. SAME COLUMNS.
55 *> ZGERC T PUT F FOR NO TEST. SAME COLUMNS.
56 *> ZGERU T PUT F FOR NO TEST. SAME COLUMNS.
57 *> ZHER T PUT F FOR NO TEST. SAME COLUMNS.
58 *> ZHPR T PUT F FOR NO TEST. SAME COLUMNS.
59 *> ZHER2 T PUT F FOR NO TEST. SAME COLUMNS.
60 *> ZHPR2 T PUT F FOR NO TEST. SAME COLUMNS.
67 *> Dongarra J. J., Du Croz J. J., Hammarling S. and Hanson R. J..
68 *> An extended set of Fortran Basic Linear Algebra Subprograms.
70 *> Technical Memoranda Nos. 41 (revision 3) and 81, Mathematics
71 *> and Computer Science Division, Argonne National Laboratory,
72 *> 9700 South Cass Avenue, Argonne, Illinois 60439, US.
76 *> NAG Technical Reports TR3/87 and TR4/87, Numerical Algorithms
77 *> Group Ltd., NAG Central Office, 256 Banbury Road, Oxford
78 *> OX2 7DE, UK, and Numerical Algorithms Group Inc., 1101 31st
79 *> Street, Suite 100, Downers Grove, Illinois 60515-1263, USA.
82 *> -- Written on 10-August-1987.
83 *> Richard Hanson, Sandia National Labs.
84 *> Jeremy Du Croz, NAG Central Office.
86 *> 10-9-00: Change STATUS='NEW' to 'UNKNOWN' so that the testers
87 *> can be run multiple times without deleting generated
88 *> output files (susan)
94 *> \author Univ. of Tennessee
95 *> \author Univ. of California Berkeley
96 *> \author Univ. of Colorado Denver
101 *> \ingroup complex16_blas_testing
103 * =====================================================================
106 * -- Reference BLAS test routine (version 3.7.0) --
107 * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
108 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
111 * =====================================================================
115 PARAMETER ( NIN = 5 )
117 PARAMETER ( NSUBS = 17 )
119 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
120 $ ONE = ( 1.0D0, 0.0D0 ) )
121 DOUBLE PRECISION RZERO
122 PARAMETER ( RZERO = 0.0D0 )
124 PARAMETER ( NMAX = 65, INCMAX = 2 )
125 INTEGER NINMAX, NIDMAX, NKBMAX, NALMAX, NBEMAX
126 PARAMETER ( NINMAX = 7, NIDMAX = 9, NKBMAX = 7,
127 $ NALMAX = 7, NBEMAX = 7 )
128 * .. Local Scalars ..
129 DOUBLE PRECISION EPS, ERR, THRESH
130 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NINC, NKB,
132 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
136 CHARACTER*32 SNAPS, SUMMRY
138 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ),
139 $ ALF( NALMAX ), AS( NMAX*NMAX ), BET( NBEMAX ),
140 $ X( NMAX ), XS( NMAX*INCMAX ),
141 $ XX( NMAX*INCMAX ), Y( NMAX ),
142 $ YS( NMAX*INCMAX ), YT( NMAX ),
143 $ YY( NMAX*INCMAX ), Z( 2*NMAX )
144 DOUBLE PRECISION G( NMAX )
145 INTEGER IDIM( NIDMAX ), INC( NINMAX ), KB( NKBMAX )
146 LOGICAL LTEST( NSUBS )
147 CHARACTER*6 SNAMES( NSUBS )
148 * .. External Functions ..
149 DOUBLE PRECISION DDIFF
152 * .. External Subroutines ..
153 EXTERNAL ZCHK1, ZCHK2, ZCHK3, ZCHK4, ZCHK5, ZCHK6,
155 * .. Intrinsic Functions ..
156 INTRINSIC ABS, MAX, MIN
157 * .. Scalars in Common ..
161 * .. Common blocks ..
162 COMMON /INFOC/INFOT, NOUTC, OK, LERR
163 COMMON /SRNAMC/SRNAMT
164 * .. Data statements ..
165 DATA SNAMES/'ZGEMV ', 'ZGBMV ', 'ZHEMV ', 'ZHBMV ',
166 $ 'ZHPMV ', 'ZTRMV ', 'ZTBMV ', 'ZTPMV ',
167 $ 'ZTRSV ', 'ZTBSV ', 'ZTPSV ', 'ZGERC ',
168 $ 'ZGERU ', 'ZHER ', 'ZHPR ', 'ZHER2 ',
170 * .. Executable Statements ..
172 * Read name and unit number for summary output file and open file.
174 READ( NIN, FMT = * )SUMMRY
175 READ( NIN, FMT = * )NOUT
176 OPEN( NOUT, FILE = SUMMRY, STATUS = 'UNKNOWN' )
179 * Read name and unit number for snapshot output file and open file.
181 READ( NIN, FMT = * )SNAPS
182 READ( NIN, FMT = * )NTRA
185 OPEN( NTRA, FILE = SNAPS, STATUS = 'UNKNOWN' )
187 * Read the flag that directs rewinding of the snapshot file.
188 READ( NIN, FMT = * )REWI
189 REWI = REWI.AND.TRACE
190 * Read the flag that directs stopping on any failure.
191 READ( NIN, FMT = * )SFATAL
192 * Read the flag that indicates whether error exits are to be tested.
193 READ( NIN, FMT = * )TSTERR
194 * Read the threshold value of the test ratio
195 READ( NIN, FMT = * )THRESH
197 * Read and check the parameter values for the tests.
200 READ( NIN, FMT = * )NIDIM
201 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
202 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
205 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
207 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
208 WRITE( NOUT, FMT = 9996 )NMAX
213 READ( NIN, FMT = * )NKB
214 IF( NKB.LT.1.OR.NKB.GT.NKBMAX )THEN
215 WRITE( NOUT, FMT = 9997 )'K', NKBMAX
218 READ( NIN, FMT = * )( KB( I ), I = 1, NKB )
220 IF( KB( I ).LT.0 )THEN
221 WRITE( NOUT, FMT = 9995 )
225 * Values of INCX and INCY
226 READ( NIN, FMT = * )NINC
227 IF( NINC.LT.1.OR.NINC.GT.NINMAX )THEN
228 WRITE( NOUT, FMT = 9997 )'INCX AND INCY', NINMAX
231 READ( NIN, FMT = * )( INC( I ), I = 1, NINC )
233 IF( INC( I ).EQ.0.OR.ABS( INC( I ) ).GT.INCMAX )THEN
234 WRITE( NOUT, FMT = 9994 )INCMAX
239 READ( NIN, FMT = * )NALF
240 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
241 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
244 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
246 READ( NIN, FMT = * )NBET
247 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
248 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
251 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
253 * Report values of parameters.
255 WRITE( NOUT, FMT = 9993 )
256 WRITE( NOUT, FMT = 9992 )( IDIM( I ), I = 1, NIDIM )
257 WRITE( NOUT, FMT = 9991 )( KB( I ), I = 1, NKB )
258 WRITE( NOUT, FMT = 9990 )( INC( I ), I = 1, NINC )
259 WRITE( NOUT, FMT = 9989 )( ALF( I ), I = 1, NALF )
260 WRITE( NOUT, FMT = 9988 )( BET( I ), I = 1, NBET )
261 IF( .NOT.TSTERR )THEN
262 WRITE( NOUT, FMT = * )
263 WRITE( NOUT, FMT = 9980 )
265 WRITE( NOUT, FMT = * )
266 WRITE( NOUT, FMT = 9999 )THRESH
267 WRITE( NOUT, FMT = * )
269 * Read names of subroutines and flags which indicate
270 * whether they are to be tested.
275 50 READ( NIN, FMT = 9984, END = 80 )SNAMET, LTESTT
277 IF( SNAMET.EQ.SNAMES( I ) )
280 WRITE( NOUT, FMT = 9986 )SNAMET
282 70 LTEST( I ) = LTESTT
288 * Compute EPS (the machine precision).
291 WRITE( NOUT, FMT = 9998 )EPS
293 * Check the reliability of ZMVCH using exact data.
298 A( I, J ) = MAX( I - J + 1, 0 )
304 YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
306 * YY holds the exact result. On exit from ZMVCH YT holds
307 * the result computed by ZMVCH.
309 CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, X, 1, ZERO, Y, 1, YT, G,
310 $ YY, EPS, ERR, FATAL, NOUT, .TRUE. )
311 SAME = LZE( YY, YT, N )
312 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
313 WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR
317 CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, X, -1, ZERO, Y, -1, YT, G,
318 $ YY, EPS, ERR, FATAL, NOUT, .TRUE. )
319 SAME = LZE( YY, YT, N )
320 IF( .NOT.SAME.OR.ERR.NE.RZERO )THEN
321 WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR
325 * Test each subroutine in turn.
327 DO 210 ISNUM = 1, NSUBS
328 WRITE( NOUT, FMT = * )
329 IF( .NOT.LTEST( ISNUM ) )THEN
330 * Subprogram is not to be tested.
331 WRITE( NOUT, FMT = 9983 )SNAMES( ISNUM )
333 SRNAMT = SNAMES( ISNUM )
336 CALL ZCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
337 WRITE( NOUT, FMT = * )
343 GO TO ( 140, 140, 150, 150, 150, 160, 160,
344 $ 160, 160, 160, 160, 170, 170, 180,
345 $ 180, 190, 190 )ISNUM
346 * Test ZGEMV, 01, and ZGBMV, 02.
347 140 CALL ZCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
348 $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF,
349 $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS,
350 $ X, XX, XS, Y, YY, YS, YT, G )
352 * Test ZHEMV, 03, ZHBMV, 04, and ZHPMV, 05.
353 150 CALL ZCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
354 $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF,
355 $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS,
356 $ X, XX, XS, Y, YY, YS, YT, G )
358 * Test ZTRMV, 06, ZTBMV, 07, ZTPMV, 08,
359 * ZTRSV, 09, ZTBSV, 10, and ZTPSV, 11.
360 160 CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
361 $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC,
362 $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z )
364 * Test ZGERC, 12, ZGERU, 13.
365 170 CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
366 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,
367 $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,
370 * Test ZHER, 14, and ZHPR, 15.
371 180 CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
372 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,
373 $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,
376 * Test ZHER2, 16, and ZHPR2, 17.
377 190 CALL ZCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
378 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,
379 $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,
382 200 IF( FATAL.AND.SFATAL )
386 WRITE( NOUT, FMT = 9982 )
390 WRITE( NOUT, FMT = 9981 )
394 WRITE( NOUT, FMT = 9987 )
402 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
404 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, D9.1 )
405 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
407 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
408 9995 FORMAT( ' VALUE OF K IS LESS THAN 0' )
409 9994 FORMAT( ' ABSOLUTE VALUE OF INCX OR INCY IS 0 OR GREATER THAN ',
411 9993 FORMAT( ' TESTS OF THE COMPLEX*16 LEVEL 2 BLAS', //' THE F',
412 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
413 9992 FORMAT( ' FOR N ', 9I6 )
414 9991 FORMAT( ' FOR K ', 7I6 )
415 9990 FORMAT( ' FOR INCX AND INCY ', 7I6 )
416 9989 FORMAT( ' FOR ALPHA ',
417 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
418 9988 FORMAT( ' FOR BETA ',
419 $ 7( '(', F4.1, ',', F4.1, ') ', : ) )
420 9987 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
421 $ /' ******* TESTS ABANDONED *******' )
422 9986 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
423 $ 'ESTS ABANDONED *******' )
424 9985 FORMAT( ' ERROR IN ZMVCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
425 $ 'ATED WRONGLY.', /' ZMVCH WAS CALLED WITH TRANS = ', A1,
426 $ ' AND RETURNED SAME = ', L1, ' AND ERR = ', F12.3, '.', /
427 $ ' THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.'
428 $ , /' ******* TESTS ABANDONED *******' )
429 9984 FORMAT( A6, L2 )
430 9983 FORMAT( 1X, A6, ' WAS NOT TESTED' )
431 9982 FORMAT( /' END OF TESTS' )
432 9981 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
433 9980 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
438 SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
439 $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET,
440 $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX,
441 $ XS, Y, YY, YS, YT, G )
443 * Tests ZGEMV and ZGBMV.
445 * Auxiliary routine for test program for Level 2 Blas.
447 * -- Written on 10-August-1987.
448 * Richard Hanson, Sandia National Labs.
449 * Jeremy Du Croz, NAG Central Office.
452 COMPLEX*16 ZERO, HALF
453 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
454 $ HALF = ( 0.5D0, 0.0D0 ) )
455 DOUBLE PRECISION RZERO
456 PARAMETER ( RZERO = 0.0D0 )
457 * .. Scalar Arguments ..
458 DOUBLE PRECISION EPS, THRESH
459 INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,
461 LOGICAL FATAL, REWI, TRACE
463 * .. Array Arguments ..
464 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
465 $ AS( NMAX*NMAX ), BET( NBET ), X( NMAX ),
466 $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ),
467 $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ),
469 DOUBLE PRECISION G( NMAX )
470 INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB )
471 * .. Local Scalars ..
472 COMPLEX*16 ALPHA, ALS, BETA, BLS, TRANSL
473 DOUBLE PRECISION ERR, ERRMAX
474 INTEGER I, IA, IB, IC, IKU, IM, IN, INCX, INCXS, INCY,
475 $ INCYS, IX, IY, KL, KLS, KU, KUS, LAA, LDA,
476 $ LDAS, LX, LY, M, ML, MS, N, NARGS, NC, ND, NK,
478 LOGICAL BANDED, FULL, NULL, RESET, SAME, TRAN
479 CHARACTER*1 TRANS, TRANSS
483 * .. External Functions ..
486 * .. External Subroutines ..
487 EXTERNAL ZGBMV, ZGEMV, ZMAKE, ZMVCH
488 * .. Intrinsic Functions ..
489 INTRINSIC ABS, MAX, MIN
490 * .. Scalars in Common ..
493 * .. Common blocks ..
494 COMMON /INFOC/INFOT, NOUTC, OK, LERR
495 * .. Data statements ..
497 * .. Executable Statements ..
498 FULL = SNAME( 3: 3 ).EQ.'E'
499 BANDED = SNAME( 3: 3 ).EQ.'B'
500 * Define the number of arguments.
503 ELSE IF( BANDED )THEN
517 $ M = MAX( N - ND, 0 )
519 $ M = MIN( N + ND, NMAX )
529 KL = MAX( KU - 1, 0 )
534 * Set LDA to 1 more than minimum value if room.
542 * Skip tests if not enough room.
546 NULL = N.LE.0.OR.M.LE.0
548 * Generate the matrix A.
551 CALL ZMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX, AA,
552 $ LDA, KL, KU, RESET, TRANSL )
555 TRANS = ICH( IC: IC )
556 TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
570 * Generate the vector X.
573 CALL ZMAKE( 'GE', ' ', ' ', 1, NL, X, 1, XX,
574 $ ABS( INCX ), 0, NL - 1, RESET, TRANSL )
577 XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO
590 * Generate the vector Y.
593 CALL ZMAKE( 'GE', ' ', ' ', 1, ML, Y, 1,
594 $ YY, ABS( INCY ), 0, ML - 1,
599 * Save every datum before calling the
622 * Call the subroutine.
626 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
627 $ TRANS, M, N, ALPHA, LDA, INCX, BETA,
631 CALL ZGEMV( TRANS, M, N, ALPHA, AA,
632 $ LDA, XX, INCX, BETA, YY,
634 ELSE IF( BANDED )THEN
636 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
637 $ TRANS, M, N, KL, KU, ALPHA, LDA,
641 CALL ZGBMV( TRANS, M, N, KL, KU, ALPHA,
642 $ AA, LDA, XX, INCX, BETA,
646 * Check if error-exit was taken incorrectly.
649 WRITE( NOUT, FMT = 9993 )
654 * See what data changed inside subroutines.
656 ISAME( 1 ) = TRANS.EQ.TRANSS
660 ISAME( 4 ) = ALS.EQ.ALPHA
661 ISAME( 5 ) = LZE( AS, AA, LAA )
662 ISAME( 6 ) = LDAS.EQ.LDA
663 ISAME( 7 ) = LZE( XS, XX, LX )
664 ISAME( 8 ) = INCXS.EQ.INCX
665 ISAME( 9 ) = BLS.EQ.BETA
667 ISAME( 10 ) = LZE( YS, YY, LY )
669 ISAME( 10 ) = LZERES( 'GE', ' ', 1,
673 ISAME( 11 ) = INCYS.EQ.INCY
674 ELSE IF( BANDED )THEN
675 ISAME( 4 ) = KLS.EQ.KL
676 ISAME( 5 ) = KUS.EQ.KU
677 ISAME( 6 ) = ALS.EQ.ALPHA
678 ISAME( 7 ) = LZE( AS, AA, LAA )
679 ISAME( 8 ) = LDAS.EQ.LDA
680 ISAME( 9 ) = LZE( XS, XX, LX )
681 ISAME( 10 ) = INCXS.EQ.INCX
682 ISAME( 11 ) = BLS.EQ.BETA
684 ISAME( 12 ) = LZE( YS, YY, LY )
686 ISAME( 12 ) = LZERES( 'GE', ' ', 1,
690 ISAME( 13 ) = INCYS.EQ.INCY
693 * If data was incorrectly changed, report
698 SAME = SAME.AND.ISAME( I )
699 IF( .NOT.ISAME( I ) )
700 $ WRITE( NOUT, FMT = 9998 )I
711 CALL ZMVCH( TRANS, M, N, ALPHA, A,
712 $ NMAX, X, INCX, BETA, Y,
713 $ INCY, YT, G, YY, EPS, ERR,
714 $ FATAL, NOUT, .TRUE. )
715 ERRMAX = MAX( ERRMAX, ERR )
716 * If got really bad answer, report and
721 * Avoid repeating tests with M.le.0 or
744 IF( ERRMAX.LT.THRESH )THEN
745 WRITE( NOUT, FMT = 9999 )SNAME, NC
747 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
752 WRITE( NOUT, FMT = 9996 )SNAME
754 WRITE( NOUT, FMT = 9994 )NC, SNAME, TRANS, M, N, ALPHA, LDA,
756 ELSE IF( BANDED )THEN
757 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANS, M, N, KL, KU,
758 $ ALPHA, LDA, INCX, BETA, INCY
764 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
766 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
767 $ 'ANGED INCORRECTLY *******' )
768 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
769 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
770 $ ' - SUSPECT *******' )
771 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
772 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', 4( I3, ',' ), '(',
773 $ F4.1, ',', F4.1, '), A,', I3, ', X,', I2, ',(', F4.1, ',',
774 $ F4.1, '), Y,', I2, ') .' )
775 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', 2( I3, ',' ), '(',
776 $ F4.1, ',', F4.1, '), A,', I3, ', X,', I2, ',(', F4.1, ',',
777 $ F4.1, '), Y,', I2, ') .' )
778 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
784 SUBROUTINE ZCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
785 $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET,
786 $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX,
787 $ XS, Y, YY, YS, YT, G )
789 * Tests ZHEMV, ZHBMV and ZHPMV.
791 * Auxiliary routine for test program for Level 2 Blas.
793 * -- Written on 10-August-1987.
794 * Richard Hanson, Sandia National Labs.
795 * Jeremy Du Croz, NAG Central Office.
798 COMPLEX*16 ZERO, HALF
799 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
800 $ HALF = ( 0.5D0, 0.0D0 ) )
801 DOUBLE PRECISION RZERO
802 PARAMETER ( RZERO = 0.0D0 )
803 * .. Scalar Arguments ..
804 DOUBLE PRECISION EPS, THRESH
805 INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,
807 LOGICAL FATAL, REWI, TRACE
809 * .. Array Arguments ..
810 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
811 $ AS( NMAX*NMAX ), BET( NBET ), X( NMAX ),
812 $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ),
813 $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ),
815 DOUBLE PRECISION G( NMAX )
816 INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB )
817 * .. Local Scalars ..
818 COMPLEX*16 ALPHA, ALS, BETA, BLS, TRANSL
819 DOUBLE PRECISION ERR, ERRMAX
820 INTEGER I, IA, IB, IC, IK, IN, INCX, INCXS, INCY,
821 $ INCYS, IX, IY, K, KS, LAA, LDA, LDAS, LX, LY,
822 $ N, NARGS, NC, NK, NS
823 LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME
824 CHARACTER*1 UPLO, UPLOS
828 * .. External Functions ..
831 * .. External Subroutines ..
832 EXTERNAL ZHBMV, ZHEMV, ZHPMV, ZMAKE, ZMVCH
833 * .. Intrinsic Functions ..
835 * .. Scalars in Common ..
838 * .. Common blocks ..
839 COMMON /INFOC/INFOT, NOUTC, OK, LERR
840 * .. Data statements ..
842 * .. Executable Statements ..
843 FULL = SNAME( 3: 3 ).EQ.'E'
844 BANDED = SNAME( 3: 3 ).EQ.'B'
845 PACKED = SNAME( 3: 3 ).EQ.'P'
846 * Define the number of arguments.
849 ELSE IF( BANDED )THEN
851 ELSE IF( PACKED )THEN
873 * Set LDA to 1 more than minimum value if room.
881 * Skip tests if not enough room.
885 LAA = ( N*( N + 1 ) )/2
894 * Generate the matrix A.
897 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX, AA,
898 $ LDA, K, K, RESET, TRANSL )
904 * Generate the vector X.
907 CALL ZMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
908 $ ABS( INCX ), 0, N - 1, RESET, TRANSL )
911 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
924 * Generate the vector Y.
927 CALL ZMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
928 $ ABS( INCY ), 0, N - 1, RESET,
933 * Save every datum before calling the
954 * Call the subroutine.
958 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
959 $ UPLO, N, ALPHA, LDA, INCX, BETA, INCY
962 CALL ZHEMV( UPLO, N, ALPHA, AA, LDA, XX,
963 $ INCX, BETA, YY, INCY )
964 ELSE IF( BANDED )THEN
966 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
967 $ UPLO, N, K, ALPHA, LDA, INCX, BETA,
971 CALL ZHBMV( UPLO, N, K, ALPHA, AA, LDA,
972 $ XX, INCX, BETA, YY, INCY )
973 ELSE IF( PACKED )THEN
975 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
976 $ UPLO, N, ALPHA, INCX, BETA, INCY
979 CALL ZHPMV( UPLO, N, ALPHA, AA, XX, INCX,
983 * Check if error-exit was taken incorrectly.
986 WRITE( NOUT, FMT = 9992 )
991 * See what data changed inside subroutines.
993 ISAME( 1 ) = UPLO.EQ.UPLOS
996 ISAME( 3 ) = ALS.EQ.ALPHA
997 ISAME( 4 ) = LZE( AS, AA, LAA )
998 ISAME( 5 ) = LDAS.EQ.LDA
999 ISAME( 6 ) = LZE( XS, XX, LX )
1000 ISAME( 7 ) = INCXS.EQ.INCX
1001 ISAME( 8 ) = BLS.EQ.BETA
1003 ISAME( 9 ) = LZE( YS, YY, LY )
1005 ISAME( 9 ) = LZERES( 'GE', ' ', 1, N,
1006 $ YS, YY, ABS( INCY ) )
1008 ISAME( 10 ) = INCYS.EQ.INCY
1009 ELSE IF( BANDED )THEN
1010 ISAME( 3 ) = KS.EQ.K
1011 ISAME( 4 ) = ALS.EQ.ALPHA
1012 ISAME( 5 ) = LZE( AS, AA, LAA )
1013 ISAME( 6 ) = LDAS.EQ.LDA
1014 ISAME( 7 ) = LZE( XS, XX, LX )
1015 ISAME( 8 ) = INCXS.EQ.INCX
1016 ISAME( 9 ) = BLS.EQ.BETA
1018 ISAME( 10 ) = LZE( YS, YY, LY )
1020 ISAME( 10 ) = LZERES( 'GE', ' ', 1, N,
1021 $ YS, YY, ABS( INCY ) )
1023 ISAME( 11 ) = INCYS.EQ.INCY
1024 ELSE IF( PACKED )THEN
1025 ISAME( 3 ) = ALS.EQ.ALPHA
1026 ISAME( 4 ) = LZE( AS, AA, LAA )
1027 ISAME( 5 ) = LZE( XS, XX, LX )
1028 ISAME( 6 ) = INCXS.EQ.INCX
1029 ISAME( 7 ) = BLS.EQ.BETA
1031 ISAME( 8 ) = LZE( YS, YY, LY )
1033 ISAME( 8 ) = LZERES( 'GE', ' ', 1, N,
1034 $ YS, YY, ABS( INCY ) )
1036 ISAME( 9 ) = INCYS.EQ.INCY
1039 * If data was incorrectly changed, report and
1044 SAME = SAME.AND.ISAME( I )
1045 IF( .NOT.ISAME( I ) )
1046 $ WRITE( NOUT, FMT = 9998 )I
1057 CALL ZMVCH( 'N', N, N, ALPHA, A, NMAX, X,
1058 $ INCX, BETA, Y, INCY, YT, G,
1059 $ YY, EPS, ERR, FATAL, NOUT,
1061 ERRMAX = MAX( ERRMAX, ERR )
1062 * If got really bad answer, report and
1067 * Avoid repeating tests with N.le.0
1087 IF( ERRMAX.LT.THRESH )THEN
1088 WRITE( NOUT, FMT = 9999 )SNAME, NC
1090 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1095 WRITE( NOUT, FMT = 9996 )SNAME
1097 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, LDA, INCX,
1099 ELSE IF( BANDED )THEN
1100 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, K, ALPHA, LDA,
1102 ELSE IF( PACKED )THEN
1103 WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, N, ALPHA, INCX,
1110 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1112 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1113 $ 'ANGED INCORRECTLY *******' )
1114 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1115 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1116 $ ' - SUSPECT *******' )
1117 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1118 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',(', F4.1, ',',
1119 $ F4.1, '), AP, X,', I2, ',(', F4.1, ',', F4.1, '), Y,', I2,
1121 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', 2( I3, ',' ), '(',
1122 $ F4.1, ',', F4.1, '), A,', I3, ', X,', I2, ',(', F4.1, ',',
1123 $ F4.1, '), Y,', I2, ') .' )
1124 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',(', F4.1, ',',
1125 $ F4.1, '), A,', I3, ', X,', I2, ',(', F4.1, ',', F4.1, '), ',
1127 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1133 SUBROUTINE ZCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1134 $ FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, NMAX,
1135 $ INCMAX, A, AA, AS, X, XX, XS, XT, G, Z )
1137 * Tests ZTRMV, ZTBMV, ZTPMV, ZTRSV, ZTBSV and ZTPSV.
1139 * Auxiliary routine for test program for Level 2 Blas.
1141 * -- Written on 10-August-1987.
1142 * Richard Hanson, Sandia National Labs.
1143 * Jeremy Du Croz, NAG Central Office.
1146 COMPLEX*16 ZERO, HALF, ONE
1147 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
1148 $ HALF = ( 0.5D0, 0.0D0 ),
1149 $ ONE = ( 1.0D0, 0.0D0 ) )
1150 DOUBLE PRECISION RZERO
1151 PARAMETER ( RZERO = 0.0D0 )
1152 * .. Scalar Arguments ..
1153 DOUBLE PRECISION EPS, THRESH
1154 INTEGER INCMAX, NIDIM, NINC, NKB, NMAX, NOUT, NTRA
1155 LOGICAL FATAL, REWI, TRACE
1157 * .. Array Arguments ..
1158 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ),
1159 $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ),
1160 $ XT( NMAX ), XX( NMAX*INCMAX ), Z( NMAX )
1161 DOUBLE PRECISION G( NMAX )
1162 INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB )
1163 * .. Local Scalars ..
1165 DOUBLE PRECISION ERR, ERRMAX
1166 INTEGER I, ICD, ICT, ICU, IK, IN, INCX, INCXS, IX, K,
1167 $ KS, LAA, LDA, LDAS, LX, N, NARGS, NC, NK, NS
1168 LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME
1169 CHARACTER*1 DIAG, DIAGS, TRANS, TRANSS, UPLO, UPLOS
1170 CHARACTER*2 ICHD, ICHU
1172 * .. Local Arrays ..
1174 * .. External Functions ..
1176 EXTERNAL LZE, LZERES
1177 * .. External Subroutines ..
1178 EXTERNAL ZMAKE, ZMVCH, ZTBMV, ZTBSV, ZTPMV, ZTPSV,
1180 * .. Intrinsic Functions ..
1182 * .. Scalars in Common ..
1183 INTEGER INFOT, NOUTC
1185 * .. Common blocks ..
1186 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1187 * .. Data statements ..
1188 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/
1189 * .. Executable Statements ..
1190 FULL = SNAME( 3: 3 ).EQ.'R'
1191 BANDED = SNAME( 3: 3 ).EQ.'B'
1192 PACKED = SNAME( 3: 3 ).EQ.'P'
1193 * Define the number of arguments.
1196 ELSE IF( BANDED )THEN
1198 ELSE IF( PACKED )THEN
1205 * Set up zero vector for ZMVCH.
1210 DO 110 IN = 1, NIDIM
1224 * Set LDA to 1 more than minimum value if room.
1232 * Skip tests if not enough room.
1236 LAA = ( N*( N + 1 ) )/2
1243 UPLO = ICHU( ICU: ICU )
1246 TRANS = ICHT( ICT: ICT )
1249 DIAG = ICHD( ICD: ICD )
1251 * Generate the matrix A.
1254 CALL ZMAKE( SNAME( 2: 3 ), UPLO, DIAG, N, N, A,
1255 $ NMAX, AA, LDA, K, K, RESET, TRANSL )
1261 * Generate the vector X.
1264 CALL ZMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
1265 $ ABS( INCX ), 0, N - 1, RESET,
1269 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
1274 * Save every datum before calling the subroutine.
1290 * Call the subroutine.
1292 IF( SNAME( 4: 5 ).EQ.'MV' )THEN
1295 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
1296 $ UPLO, TRANS, DIAG, N, LDA, INCX
1299 CALL ZTRMV( UPLO, TRANS, DIAG, N, AA, LDA,
1301 ELSE IF( BANDED )THEN
1303 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
1304 $ UPLO, TRANS, DIAG, N, K, LDA, INCX
1307 CALL ZTBMV( UPLO, TRANS, DIAG, N, K, AA,
1309 ELSE IF( PACKED )THEN
1311 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1312 $ UPLO, TRANS, DIAG, N, INCX
1315 CALL ZTPMV( UPLO, TRANS, DIAG, N, AA, XX,
1318 ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
1321 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
1322 $ UPLO, TRANS, DIAG, N, LDA, INCX
1325 CALL ZTRSV( UPLO, TRANS, DIAG, N, AA, LDA,
1327 ELSE IF( BANDED )THEN
1329 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
1330 $ UPLO, TRANS, DIAG, N, K, LDA, INCX
1333 CALL ZTBSV( UPLO, TRANS, DIAG, N, K, AA,
1335 ELSE IF( PACKED )THEN
1337 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1338 $ UPLO, TRANS, DIAG, N, INCX
1341 CALL ZTPSV( UPLO, TRANS, DIAG, N, AA, XX,
1346 * Check if error-exit was taken incorrectly.
1349 WRITE( NOUT, FMT = 9992 )
1354 * See what data changed inside subroutines.
1356 ISAME( 1 ) = UPLO.EQ.UPLOS
1357 ISAME( 2 ) = TRANS.EQ.TRANSS
1358 ISAME( 3 ) = DIAG.EQ.DIAGS
1359 ISAME( 4 ) = NS.EQ.N
1361 ISAME( 5 ) = LZE( AS, AA, LAA )
1362 ISAME( 6 ) = LDAS.EQ.LDA
1364 ISAME( 7 ) = LZE( XS, XX, LX )
1366 ISAME( 7 ) = LZERES( 'GE', ' ', 1, N, XS,
1369 ISAME( 8 ) = INCXS.EQ.INCX
1370 ELSE IF( BANDED )THEN
1371 ISAME( 5 ) = KS.EQ.K
1372 ISAME( 6 ) = LZE( AS, AA, LAA )
1373 ISAME( 7 ) = LDAS.EQ.LDA
1375 ISAME( 8 ) = LZE( XS, XX, LX )
1377 ISAME( 8 ) = LZERES( 'GE', ' ', 1, N, XS,
1380 ISAME( 9 ) = INCXS.EQ.INCX
1381 ELSE IF( PACKED )THEN
1382 ISAME( 5 ) = LZE( AS, AA, LAA )
1384 ISAME( 6 ) = LZE( XS, XX, LX )
1386 ISAME( 6 ) = LZERES( 'GE', ' ', 1, N, XS,
1389 ISAME( 7 ) = INCXS.EQ.INCX
1392 * If data was incorrectly changed, report and
1397 SAME = SAME.AND.ISAME( I )
1398 IF( .NOT.ISAME( I ) )
1399 $ WRITE( NOUT, FMT = 9998 )I
1407 IF( SNAME( 4: 5 ).EQ.'MV' )THEN
1411 CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, X,
1412 $ INCX, ZERO, Z, INCX, XT, G,
1413 $ XX, EPS, ERR, FATAL, NOUT,
1415 ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
1417 * Compute approximation to original vector.
1420 Z( I ) = XX( 1 + ( I - 1 )*
1422 XX( 1 + ( I - 1 )*ABS( INCX ) )
1425 CALL ZMVCH( TRANS, N, N, ONE, A, NMAX, Z,
1426 $ INCX, ZERO, X, INCX, XT, G,
1427 $ XX, EPS, ERR, FATAL, NOUT,
1430 ERRMAX = MAX( ERRMAX, ERR )
1431 * If got really bad answer, report and return.
1435 * Avoid repeating tests with N.le.0.
1453 IF( ERRMAX.LT.THRESH )THEN
1454 WRITE( NOUT, FMT = 9999 )SNAME, NC
1456 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1461 WRITE( NOUT, FMT = 9996 )SNAME
1463 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, DIAG, N, LDA,
1465 ELSE IF( BANDED )THEN
1466 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, DIAG, N, K,
1468 ELSE IF( PACKED )THEN
1469 WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, TRANS, DIAG, N, INCX
1475 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1477 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1478 $ 'ANGED INCORRECTLY *******' )
1479 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1480 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1481 $ ' - SUSPECT *******' )
1482 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1483 9995 FORMAT( 1X, I6, ': ', A6, '(', 3( '''', A1, ''',' ), I3, ', AP, ',
1485 9994 FORMAT( 1X, I6, ': ', A6, '(', 3( '''', A1, ''',' ), 2( I3, ',' ),
1486 $ ' A,', I3, ', X,', I2, ') .' )
1487 9993 FORMAT( 1X, I6, ': ', A6, '(', 3( '''', A1, ''',' ), I3, ', A,',
1488 $ I3, ', X,', I2, ') .' )
1489 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1495 SUBROUTINE ZCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1496 $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX,
1497 $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G,
1500 * Tests ZGERC and ZGERU.
1502 * Auxiliary routine for test program for Level 2 Blas.
1504 * -- Written on 10-August-1987.
1505 * Richard Hanson, Sandia National Labs.
1506 * Jeremy Du Croz, NAG Central Office.
1509 COMPLEX*16 ZERO, HALF, ONE
1510 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
1511 $ HALF = ( 0.5D0, 0.0D0 ),
1512 $ ONE = ( 1.0D0, 0.0D0 ) )
1513 DOUBLE PRECISION RZERO
1514 PARAMETER ( RZERO = 0.0D0 )
1515 * .. Scalar Arguments ..
1516 DOUBLE PRECISION EPS, THRESH
1517 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
1518 LOGICAL FATAL, REWI, TRACE
1520 * .. Array Arguments ..
1521 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1522 $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ),
1523 $ XX( NMAX*INCMAX ), Y( NMAX ),
1524 $ YS( NMAX*INCMAX ), YT( NMAX ),
1525 $ YY( NMAX*INCMAX ), Z( NMAX )
1526 DOUBLE PRECISION G( NMAX )
1527 INTEGER IDIM( NIDIM ), INC( NINC )
1528 * .. Local Scalars ..
1529 COMPLEX*16 ALPHA, ALS, TRANSL
1530 DOUBLE PRECISION ERR, ERRMAX
1531 INTEGER I, IA, IM, IN, INCX, INCXS, INCY, INCYS, IX,
1532 $ IY, J, LAA, LDA, LDAS, LX, LY, M, MS, N, NARGS,
1534 LOGICAL CONJ, NULL, RESET, SAME
1535 * .. Local Arrays ..
1538 * .. External Functions ..
1540 EXTERNAL LZE, LZERES
1541 * .. External Subroutines ..
1542 EXTERNAL ZGERC, ZGERU, ZMAKE, ZMVCH
1543 * .. Intrinsic Functions ..
1544 INTRINSIC ABS, DCONJG, MAX, MIN
1545 * .. Scalars in Common ..
1546 INTEGER INFOT, NOUTC
1548 * .. Common blocks ..
1549 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1550 * .. Executable Statements ..
1551 CONJ = SNAME( 5: 5 ).EQ.'C'
1552 * Define the number of arguments.
1559 DO 120 IN = 1, NIDIM
1565 $ M = MAX( N - ND, 0 )
1567 $ M = MIN( N + ND, NMAX )
1569 * Set LDA to 1 more than minimum value if room.
1573 * Skip tests if not enough room.
1577 NULL = N.LE.0.OR.M.LE.0
1583 * Generate the vector X.
1586 CALL ZMAKE( 'GE', ' ', ' ', 1, M, X, 1, XX, ABS( INCX ),
1587 $ 0, M - 1, RESET, TRANSL )
1590 XX( 1 + ABS( INCX )*( M/2 - 1 ) ) = ZERO
1597 * Generate the vector Y.
1600 CALL ZMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
1601 $ ABS( INCY ), 0, N - 1, RESET, TRANSL )
1604 YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
1610 * Generate the matrix A.
1613 CALL ZMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX,
1614 $ AA, LDA, M - 1, N - 1, RESET, TRANSL )
1618 * Save every datum before calling the subroutine.
1636 * Call the subroutine.
1639 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, M, N,
1640 $ ALPHA, INCX, INCY, LDA
1644 CALL ZGERC( M, N, ALPHA, XX, INCX, YY, INCY, AA,
1649 CALL ZGERU( M, N, ALPHA, XX, INCX, YY, INCY, AA,
1653 * Check if error-exit was taken incorrectly.
1656 WRITE( NOUT, FMT = 9993 )
1661 * See what data changed inside subroutine.
1663 ISAME( 1 ) = MS.EQ.M
1664 ISAME( 2 ) = NS.EQ.N
1665 ISAME( 3 ) = ALS.EQ.ALPHA
1666 ISAME( 4 ) = LZE( XS, XX, LX )
1667 ISAME( 5 ) = INCXS.EQ.INCX
1668 ISAME( 6 ) = LZE( YS, YY, LY )
1669 ISAME( 7 ) = INCYS.EQ.INCY
1671 ISAME( 8 ) = LZE( AS, AA, LAA )
1673 ISAME( 8 ) = LZERES( 'GE', ' ', M, N, AS, AA,
1676 ISAME( 9 ) = LDAS.EQ.LDA
1678 * If data was incorrectly changed, report and return.
1682 SAME = SAME.AND.ISAME( I )
1683 IF( .NOT.ISAME( I ) )
1684 $ WRITE( NOUT, FMT = 9998 )I
1693 * Check the result column by column.
1701 Z( I ) = X( M - I + 1 )
1708 W( 1 ) = Y( N - J + 1 )
1711 $ W( 1 ) = DCONJG( W( 1 ) )
1712 CALL ZMVCH( 'N', M, 1, ALPHA, Z, NMAX, W, 1,
1713 $ ONE, A( 1, J ), 1, YT, G,
1714 $ AA( 1 + ( J - 1 )*LDA ), EPS,
1715 $ ERR, FATAL, NOUT, .TRUE. )
1716 ERRMAX = MAX( ERRMAX, ERR )
1717 * If got really bad answer, report and return.
1722 * Avoid repeating tests with M.le.0 or N.le.0.
1738 IF( ERRMAX.LT.THRESH )THEN
1739 WRITE( NOUT, FMT = 9999 )SNAME, NC
1741 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1746 WRITE( NOUT, FMT = 9995 )J
1749 WRITE( NOUT, FMT = 9996 )SNAME
1750 WRITE( NOUT, FMT = 9994 )NC, SNAME, M, N, ALPHA, INCX, INCY, LDA
1755 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1757 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1758 $ 'ANGED INCORRECTLY *******' )
1759 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1760 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1761 $ ' - SUSPECT *******' )
1762 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1763 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1764 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( I3, ',' ), '(', F4.1, ',', F4.1,
1765 $ '), X,', I2, ', Y,', I2, ', A,', I3, ') ',
1767 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1773 SUBROUTINE ZCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1774 $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX,
1775 $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G,
1778 * Tests ZHER and ZHPR.
1780 * Auxiliary routine for test program for Level 2 Blas.
1782 * -- Written on 10-August-1987.
1783 * Richard Hanson, Sandia National Labs.
1784 * Jeremy Du Croz, NAG Central Office.
1787 COMPLEX*16 ZERO, HALF, ONE
1788 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
1789 $ HALF = ( 0.5D0, 0.0D0 ),
1790 $ ONE = ( 1.0D0, 0.0D0 ) )
1791 DOUBLE PRECISION RZERO
1792 PARAMETER ( RZERO = 0.0D0 )
1793 * .. Scalar Arguments ..
1794 DOUBLE PRECISION EPS, THRESH
1795 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
1796 LOGICAL FATAL, REWI, TRACE
1798 * .. Array Arguments ..
1799 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1800 $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ),
1801 $ XX( NMAX*INCMAX ), Y( NMAX ),
1802 $ YS( NMAX*INCMAX ), YT( NMAX ),
1803 $ YY( NMAX*INCMAX ), Z( NMAX )
1804 DOUBLE PRECISION G( NMAX )
1805 INTEGER IDIM( NIDIM ), INC( NINC )
1806 * .. Local Scalars ..
1807 COMPLEX*16 ALPHA, TRANSL
1808 DOUBLE PRECISION ERR, ERRMAX, RALPHA, RALS
1809 INTEGER I, IA, IC, IN, INCX, INCXS, IX, J, JA, JJ, LAA,
1810 $ LDA, LDAS, LJ, LX, N, NARGS, NC, NS
1811 LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER
1812 CHARACTER*1 UPLO, UPLOS
1814 * .. Local Arrays ..
1817 * .. External Functions ..
1819 EXTERNAL LZE, LZERES
1820 * .. External Subroutines ..
1821 EXTERNAL ZHER, ZHPR, ZMAKE, ZMVCH
1822 * .. Intrinsic Functions ..
1823 INTRINSIC ABS, DBLE, DCMPLX, DCONJG, MAX
1824 * .. Scalars in Common ..
1825 INTEGER INFOT, NOUTC
1827 * .. Common blocks ..
1828 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1829 * .. Data statements ..
1831 * .. Executable Statements ..
1832 FULL = SNAME( 3: 3 ).EQ.'E'
1833 PACKED = SNAME( 3: 3 ).EQ.'P'
1834 * Define the number of arguments.
1837 ELSE IF( PACKED )THEN
1845 DO 100 IN = 1, NIDIM
1847 * Set LDA to 1 more than minimum value if room.
1851 * Skip tests if not enough room.
1855 LAA = ( N*( N + 1 ) )/2
1861 UPLO = ICH( IC: IC )
1868 * Generate the vector X.
1871 CALL ZMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
1872 $ 0, N - 1, RESET, TRANSL )
1875 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
1879 RALPHA = DBLE( ALF( IA ) )
1880 ALPHA = DCMPLX( RALPHA, RZERO )
1881 NULL = N.LE.0.OR.RALPHA.EQ.RZERO
1883 * Generate the matrix A.
1886 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX,
1887 $ AA, LDA, N - 1, N - 1, RESET, TRANSL )
1891 * Save every datum before calling the subroutine.
1905 * Call the subroutine.
1909 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
1913 CALL ZHER( UPLO, N, RALPHA, XX, INCX, AA, LDA )
1914 ELSE IF( PACKED )THEN
1916 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
1920 CALL ZHPR( UPLO, N, RALPHA, XX, INCX, AA )
1923 * Check if error-exit was taken incorrectly.
1926 WRITE( NOUT, FMT = 9992 )
1931 * See what data changed inside subroutines.
1933 ISAME( 1 ) = UPLO.EQ.UPLOS
1934 ISAME( 2 ) = NS.EQ.N
1935 ISAME( 3 ) = RALS.EQ.RALPHA
1936 ISAME( 4 ) = LZE( XS, XX, LX )
1937 ISAME( 5 ) = INCXS.EQ.INCX
1939 ISAME( 6 ) = LZE( AS, AA, LAA )
1941 ISAME( 6 ) = LZERES( SNAME( 2: 3 ), UPLO, N, N, AS,
1944 IF( .NOT.PACKED )THEN
1945 ISAME( 7 ) = LDAS.EQ.LDA
1948 * If data was incorrectly changed, report and return.
1952 SAME = SAME.AND.ISAME( I )
1953 IF( .NOT.ISAME( I ) )
1954 $ WRITE( NOUT, FMT = 9998 )I
1963 * Check the result column by column.
1971 Z( I ) = X( N - I + 1 )
1976 W( 1 ) = DCONJG( Z( J ) )
1984 CALL ZMVCH( 'N', LJ, 1, ALPHA, Z( JJ ), LJ, W,
1985 $ 1, ONE, A( JJ, J ), 1, YT, G,
1986 $ AA( JA ), EPS, ERR, FATAL, NOUT,
1997 ERRMAX = MAX( ERRMAX, ERR )
1998 * If got really bad answer, report and return.
2003 * Avoid repeating tests if N.le.0.
2018 IF( ERRMAX.LT.THRESH )THEN
2019 WRITE( NOUT, FMT = 9999 )SNAME, NC
2021 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
2026 WRITE( NOUT, FMT = 9995 )J
2029 WRITE( NOUT, FMT = 9996 )SNAME
2031 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, RALPHA, INCX, LDA
2032 ELSE IF( PACKED )THEN
2033 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, RALPHA, INCX
2039 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
2041 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
2042 $ 'ANGED INCORRECTLY *******' )
2043 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
2044 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
2045 $ ' - SUSPECT *******' )
2046 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
2047 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
2048 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
2050 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
2051 $ I2, ', A,', I3, ') .' )
2052 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2058 SUBROUTINE ZCHK6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
2059 $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX,
2060 $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G,
2063 * Tests ZHER2 and ZHPR2.
2065 * Auxiliary routine for test program for Level 2 Blas.
2067 * -- Written on 10-August-1987.
2068 * Richard Hanson, Sandia National Labs.
2069 * Jeremy Du Croz, NAG Central Office.
2072 COMPLEX*16 ZERO, HALF, ONE
2073 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
2074 $ HALF = ( 0.5D0, 0.0D0 ),
2075 $ ONE = ( 1.0D0, 0.0D0 ) )
2076 DOUBLE PRECISION RZERO
2077 PARAMETER ( RZERO = 0.0D0 )
2078 * .. Scalar Arguments ..
2079 DOUBLE PRECISION EPS, THRESH
2080 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
2081 LOGICAL FATAL, REWI, TRACE
2083 * .. Array Arguments ..
2084 COMPLEX*16 A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
2085 $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ),
2086 $ XX( NMAX*INCMAX ), Y( NMAX ),
2087 $ YS( NMAX*INCMAX ), YT( NMAX ),
2088 $ YY( NMAX*INCMAX ), Z( NMAX, 2 )
2089 DOUBLE PRECISION G( NMAX )
2090 INTEGER IDIM( NIDIM ), INC( NINC )
2091 * .. Local Scalars ..
2092 COMPLEX*16 ALPHA, ALS, TRANSL
2093 DOUBLE PRECISION ERR, ERRMAX
2094 INTEGER I, IA, IC, IN, INCX, INCXS, INCY, INCYS, IX,
2095 $ IY, J, JA, JJ, LAA, LDA, LDAS, LJ, LX, LY, N,
2097 LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER
2098 CHARACTER*1 UPLO, UPLOS
2100 * .. Local Arrays ..
2103 * .. External Functions ..
2105 EXTERNAL LZE, LZERES
2106 * .. External Subroutines ..
2107 EXTERNAL ZHER2, ZHPR2, ZMAKE, ZMVCH
2108 * .. Intrinsic Functions ..
2109 INTRINSIC ABS, DCONJG, MAX
2110 * .. Scalars in Common ..
2111 INTEGER INFOT, NOUTC
2113 * .. Common blocks ..
2114 COMMON /INFOC/INFOT, NOUTC, OK, LERR
2115 * .. Data statements ..
2117 * .. Executable Statements ..
2118 FULL = SNAME( 3: 3 ).EQ.'E'
2119 PACKED = SNAME( 3: 3 ).EQ.'P'
2120 * Define the number of arguments.
2123 ELSE IF( PACKED )THEN
2131 DO 140 IN = 1, NIDIM
2133 * Set LDA to 1 more than minimum value if room.
2137 * Skip tests if not enough room.
2141 LAA = ( N*( N + 1 ) )/2
2147 UPLO = ICH( IC: IC )
2154 * Generate the vector X.
2157 CALL ZMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
2158 $ 0, N - 1, RESET, TRANSL )
2161 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
2168 * Generate the vector Y.
2171 CALL ZMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
2172 $ ABS( INCY ), 0, N - 1, RESET, TRANSL )
2175 YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
2180 NULL = N.LE.0.OR.ALPHA.EQ.ZERO
2182 * Generate the matrix A.
2185 CALL ZMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A,
2186 $ NMAX, AA, LDA, N - 1, N - 1, RESET,
2191 * Save every datum before calling the subroutine.
2209 * Call the subroutine.
2213 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
2214 $ ALPHA, INCX, INCY, LDA
2217 CALL ZHER2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
2219 ELSE IF( PACKED )THEN
2221 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
2225 CALL ZHPR2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
2229 * Check if error-exit was taken incorrectly.
2232 WRITE( NOUT, FMT = 9992 )
2237 * See what data changed inside subroutines.
2239 ISAME( 1 ) = UPLO.EQ.UPLOS
2240 ISAME( 2 ) = NS.EQ.N
2241 ISAME( 3 ) = ALS.EQ.ALPHA
2242 ISAME( 4 ) = LZE( XS, XX, LX )
2243 ISAME( 5 ) = INCXS.EQ.INCX
2244 ISAME( 6 ) = LZE( YS, YY, LY )
2245 ISAME( 7 ) = INCYS.EQ.INCY
2247 ISAME( 8 ) = LZE( AS, AA, LAA )
2249 ISAME( 8 ) = LZERES( SNAME( 2: 3 ), UPLO, N, N,
2252 IF( .NOT.PACKED )THEN
2253 ISAME( 9 ) = LDAS.EQ.LDA
2256 * If data was incorrectly changed, report and return.
2260 SAME = SAME.AND.ISAME( I )
2261 IF( .NOT.ISAME( I ) )
2262 $ WRITE( NOUT, FMT = 9998 )I
2271 * Check the result column by column.
2279 Z( I, 1 ) = X( N - I + 1 )
2288 Z( I, 2 ) = Y( N - I + 1 )
2293 W( 1 ) = ALPHA*DCONJG( Z( J, 2 ) )
2294 W( 2 ) = DCONJG( ALPHA )*DCONJG( Z( J, 1 ) )
2302 CALL ZMVCH( 'N', LJ, 2, ONE, Z( JJ, 1 ),
2303 $ NMAX, W, 1, ONE, A( JJ, J ), 1,
2304 $ YT, G, AA( JA ), EPS, ERR, FATAL,
2315 ERRMAX = MAX( ERRMAX, ERR )
2316 * If got really bad answer, report and return.
2321 * Avoid repeating tests with N.le.0.
2338 IF( ERRMAX.LT.THRESH )THEN
2339 WRITE( NOUT, FMT = 9999 )SNAME, NC
2341 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
2346 WRITE( NOUT, FMT = 9995 )J
2349 WRITE( NOUT, FMT = 9996 )SNAME
2351 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, INCX,
2353 ELSE IF( PACKED )THEN
2354 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, ALPHA, INCX, INCY
2360 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
2362 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
2363 $ 'ANGED INCORRECTLY *******' )
2364 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
2365 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
2366 $ ' - SUSPECT *******' )
2367 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
2368 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
2369 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',(', F4.1, ',',
2370 $ F4.1, '), X,', I2, ', Y,', I2, ', AP) ',
2372 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',(', F4.1, ',',
2373 $ F4.1, '), X,', I2, ', Y,', I2, ', A,', I3, ') ',
2375 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2381 SUBROUTINE ZCHKE( ISNUM, SRNAMT, NOUT )
2383 * Tests the error exits from the Level 2 Blas.
2384 * Requires a special version of the error-handling routine XERBLA.
2385 * ALPHA, RALPHA, BETA, A, X and Y should not need to be defined.
2387 * Auxiliary routine for test program for Level 2 Blas.
2389 * -- Written on 10-August-1987.
2390 * Richard Hanson, Sandia National Labs.
2391 * Jeremy Du Croz, NAG Central Office.
2393 * .. Scalar Arguments ..
2396 * .. Scalars in Common ..
2397 INTEGER INFOT, NOUTC
2399 * .. Local Scalars ..
2400 COMPLEX*16 ALPHA, BETA
2401 DOUBLE PRECISION RALPHA
2402 * .. Local Arrays ..
2403 COMPLEX*16 A( 1, 1 ), X( 1 ), Y( 1 )
2404 * .. External Subroutines ..
2405 EXTERNAL CHKXER, ZGBMV, ZGEMV, ZGERC, ZGERU, ZHBMV,
2406 $ ZHEMV, ZHER, ZHER2, ZHPMV, ZHPR, ZHPR2, ZTBMV,
2407 $ ZTBSV, ZTPMV, ZTPSV, ZTRMV, ZTRSV
2408 * .. Common blocks ..
2409 COMMON /INFOC/INFOT, NOUTC, OK, LERR
2410 * .. Executable Statements ..
2411 * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
2412 * if anything is wrong.
2414 * LERR is set to .TRUE. by the special version of XERBLA each time
2415 * it is called, and is then tested and re-set by CHKXER.
2417 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
2418 $ 90, 100, 110, 120, 130, 140, 150, 160,
2421 CALL ZGEMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2422 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2424 CALL ZGEMV( 'N', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2425 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2427 CALL ZGEMV( 'N', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2428 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2430 CALL ZGEMV( 'N', 2, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2431 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2433 CALL ZGEMV( 'N', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2434 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2436 CALL ZGEMV( 'N', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2437 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2440 CALL ZGBMV( '/', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2441 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2443 CALL ZGBMV( 'N', -1, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2444 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2446 CALL ZGBMV( 'N', 0, -1, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2447 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2449 CALL ZGBMV( 'N', 0, 0, -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2450 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2452 CALL ZGBMV( 'N', 2, 0, 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2453 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2455 CALL ZGBMV( 'N', 0, 0, 1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2456 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2458 CALL ZGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2459 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2461 CALL ZGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2462 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2465 CALL ZHEMV( '/', 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2466 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2468 CALL ZHEMV( 'U', -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2469 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2471 CALL ZHEMV( 'U', 2, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2472 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2474 CALL ZHEMV( 'U', 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2475 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2477 CALL ZHEMV( 'U', 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2478 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2481 CALL ZHBMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2482 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2484 CALL ZHBMV( 'U', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2485 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2487 CALL ZHBMV( 'U', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2488 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2490 CALL ZHBMV( 'U', 0, 1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2491 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2493 CALL ZHBMV( 'U', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2494 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2496 CALL ZHBMV( 'U', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2497 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2500 CALL ZHPMV( '/', 0, ALPHA, A, X, 1, BETA, Y, 1 )
2501 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2503 CALL ZHPMV( 'U', -1, ALPHA, A, X, 1, BETA, Y, 1 )
2504 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2506 CALL ZHPMV( 'U', 0, ALPHA, A, X, 0, BETA, Y, 1 )
2507 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2509 CALL ZHPMV( 'U', 0, ALPHA, A, X, 1, BETA, Y, 0 )
2510 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2513 CALL ZTRMV( '/', 'N', 'N', 0, A, 1, X, 1 )
2514 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2516 CALL ZTRMV( 'U', '/', 'N', 0, A, 1, X, 1 )
2517 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2519 CALL ZTRMV( 'U', 'N', '/', 0, A, 1, X, 1 )
2520 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2522 CALL ZTRMV( 'U', 'N', 'N', -1, A, 1, X, 1 )
2523 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2525 CALL ZTRMV( 'U', 'N', 'N', 2, A, 1, X, 1 )
2526 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2528 CALL ZTRMV( 'U', 'N', 'N', 0, A, 1, X, 0 )
2529 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2532 CALL ZTBMV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
2533 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2535 CALL ZTBMV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
2536 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2538 CALL ZTBMV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
2539 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2541 CALL ZTBMV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
2542 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2544 CALL ZTBMV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
2545 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2547 CALL ZTBMV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
2548 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2550 CALL ZTBMV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
2551 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2554 CALL ZTPMV( '/', 'N', 'N', 0, A, X, 1 )
2555 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2557 CALL ZTPMV( 'U', '/', 'N', 0, A, X, 1 )
2558 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2560 CALL ZTPMV( 'U', 'N', '/', 0, A, X, 1 )
2561 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2563 CALL ZTPMV( 'U', 'N', 'N', -1, A, X, 1 )
2564 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2566 CALL ZTPMV( 'U', 'N', 'N', 0, A, X, 0 )
2567 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2570 CALL ZTRSV( '/', 'N', 'N', 0, A, 1, X, 1 )
2571 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2573 CALL ZTRSV( 'U', '/', 'N', 0, A, 1, X, 1 )
2574 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2576 CALL ZTRSV( 'U', 'N', '/', 0, A, 1, X, 1 )
2577 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2579 CALL ZTRSV( 'U', 'N', 'N', -1, A, 1, X, 1 )
2580 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2582 CALL ZTRSV( 'U', 'N', 'N', 2, A, 1, X, 1 )
2583 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2585 CALL ZTRSV( 'U', 'N', 'N', 0, A, 1, X, 0 )
2586 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2589 CALL ZTBSV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
2590 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2592 CALL ZTBSV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
2593 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2595 CALL ZTBSV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
2596 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2598 CALL ZTBSV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
2599 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2601 CALL ZTBSV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
2602 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2604 CALL ZTBSV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
2605 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2607 CALL ZTBSV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
2608 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2611 CALL ZTPSV( '/', 'N', 'N', 0, A, X, 1 )
2612 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2614 CALL ZTPSV( 'U', '/', 'N', 0, A, X, 1 )
2615 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2617 CALL ZTPSV( 'U', 'N', '/', 0, A, X, 1 )
2618 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2620 CALL ZTPSV( 'U', 'N', 'N', -1, A, X, 1 )
2621 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2623 CALL ZTPSV( 'U', 'N', 'N', 0, A, X, 0 )
2624 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2627 CALL ZGERC( -1, 0, ALPHA, X, 1, Y, 1, A, 1 )
2628 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2630 CALL ZGERC( 0, -1, ALPHA, X, 1, Y, 1, A, 1 )
2631 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2633 CALL ZGERC( 0, 0, ALPHA, X, 0, Y, 1, A, 1 )
2634 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2636 CALL ZGERC( 0, 0, ALPHA, X, 1, Y, 0, A, 1 )
2637 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2639 CALL ZGERC( 2, 0, ALPHA, X, 1, Y, 1, A, 1 )
2640 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2643 CALL ZGERU( -1, 0, ALPHA, X, 1, Y, 1, A, 1 )
2644 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2646 CALL ZGERU( 0, -1, ALPHA, X, 1, Y, 1, A, 1 )
2647 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2649 CALL ZGERU( 0, 0, ALPHA, X, 0, Y, 1, A, 1 )
2650 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2652 CALL ZGERU( 0, 0, ALPHA, X, 1, Y, 0, A, 1 )
2653 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2655 CALL ZGERU( 2, 0, ALPHA, X, 1, Y, 1, A, 1 )
2656 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2659 CALL ZHER( '/', 0, RALPHA, X, 1, A, 1 )
2660 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2662 CALL ZHER( 'U', -1, RALPHA, X, 1, A, 1 )
2663 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2665 CALL ZHER( 'U', 0, RALPHA, X, 0, A, 1 )
2666 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2668 CALL ZHER( 'U', 2, RALPHA, X, 1, A, 1 )
2669 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2672 CALL ZHPR( '/', 0, RALPHA, X, 1, A )
2673 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2675 CALL ZHPR( 'U', -1, RALPHA, X, 1, A )
2676 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2678 CALL ZHPR( 'U', 0, RALPHA, X, 0, A )
2679 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2682 CALL ZHER2( '/', 0, ALPHA, X, 1, Y, 1, A, 1 )
2683 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2685 CALL ZHER2( 'U', -1, ALPHA, X, 1, Y, 1, A, 1 )
2686 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2688 CALL ZHER2( 'U', 0, ALPHA, X, 0, Y, 1, A, 1 )
2689 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2691 CALL ZHER2( 'U', 0, ALPHA, X, 1, Y, 0, A, 1 )
2692 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2694 CALL ZHER2( 'U', 2, ALPHA, X, 1, Y, 1, A, 1 )
2695 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2698 CALL ZHPR2( '/', 0, ALPHA, X, 1, Y, 1, A )
2699 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2701 CALL ZHPR2( 'U', -1, ALPHA, X, 1, Y, 1, A )
2702 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2704 CALL ZHPR2( 'U', 0, ALPHA, X, 0, Y, 1, A )
2705 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2707 CALL ZHPR2( 'U', 0, ALPHA, X, 1, Y, 0, A )
2708 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2711 WRITE( NOUT, FMT = 9999 )SRNAMT
2713 WRITE( NOUT, FMT = 9998 )SRNAMT
2717 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2718 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2724 SUBROUTINE ZMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL,
2725 $ KU, RESET, TRANSL )
2727 * Generates values for an M by N matrix A within the bandwidth
2728 * defined by KL and KU.
2729 * Stores the values in the array AA in the data structure required
2730 * by the routine, with unwanted elements set to rogue value.
2732 * TYPE is 'GE', 'GB', 'HE', 'HB', 'HP', 'TR', 'TB' OR 'TP'.
2734 * Auxiliary routine for test program for Level 2 Blas.
2736 * -- Written on 10-August-1987.
2737 * Richard Hanson, Sandia National Labs.
2738 * Jeremy Du Croz, NAG Central Office.
2741 COMPLEX*16 ZERO, ONE
2742 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ),
2743 $ ONE = ( 1.0D0, 0.0D0 ) )
2745 PARAMETER ( ROGUE = ( -1.0D10, 1.0D10 ) )
2746 DOUBLE PRECISION RZERO
2747 PARAMETER ( RZERO = 0.0D0 )
2748 DOUBLE PRECISION RROGUE
2749 PARAMETER ( RROGUE = -1.0D10 )
2750 * .. Scalar Arguments ..
2752 INTEGER KL, KU, LDA, M, N, NMAX
2754 CHARACTER*1 DIAG, UPLO
2756 * .. Array Arguments ..
2757 COMPLEX*16 A( NMAX, * ), AA( * )
2758 * .. Local Scalars ..
2759 INTEGER I, I1, I2, I3, IBEG, IEND, IOFF, J, JJ, KK
2760 LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER
2761 * .. External Functions ..
2764 * .. Intrinsic Functions ..
2765 INTRINSIC DBLE, DCMPLX, DCONJG, MAX, MIN
2766 * .. Executable Statements ..
2767 GEN = TYPE( 1: 1 ).EQ.'G'
2768 SYM = TYPE( 1: 1 ).EQ.'H'
2769 TRI = TYPE( 1: 1 ).EQ.'T'
2770 UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U'
2771 LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L'
2772 UNIT = TRI.AND.DIAG.EQ.'U'
2774 * Generate data in array A.
2778 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2780 IF( ( I.LE.J.AND.J - I.LE.KU ).OR.
2781 $ ( I.GE.J.AND.I - J.LE.KL ) )THEN
2782 A( I, J ) = ZBEG( RESET ) + TRANSL
2788 A( J, I ) = DCONJG( A( I, J ) )
2796 $ A( J, J ) = DCMPLX( DBLE( A( J, J ) ), RZERO )
2798 $ A( J, J ) = A( J, J ) + ONE
2803 * Store elements in array AS in data structure required by routine.
2805 IF( TYPE.EQ.'GE' )THEN
2808 AA( I + ( J - 1 )*LDA ) = A( I, J )
2810 DO 40 I = M + 1, LDA
2811 AA( I + ( J - 1 )*LDA ) = ROGUE
2814 ELSE IF( TYPE.EQ.'GB' )THEN
2816 DO 60 I1 = 1, KU + 1 - J
2817 AA( I1 + ( J - 1 )*LDA ) = ROGUE
2819 DO 70 I2 = I1, MIN( KL + KU + 1, KU + 1 + M - J )
2820 AA( I2 + ( J - 1 )*LDA ) = A( I2 + J - KU - 1, J )
2823 AA( I3 + ( J - 1 )*LDA ) = ROGUE
2826 ELSE IF( TYPE.EQ.'HE'.OR.TYPE.EQ.'TR' )THEN
2843 DO 100 I = 1, IBEG - 1
2844 AA( I + ( J - 1 )*LDA ) = ROGUE
2846 DO 110 I = IBEG, IEND
2847 AA( I + ( J - 1 )*LDA ) = A( I, J )
2849 DO 120 I = IEND + 1, LDA
2850 AA( I + ( J - 1 )*LDA ) = ROGUE
2853 JJ = J + ( J - 1 )*LDA
2854 AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE )
2857 ELSE IF( TYPE.EQ.'HB'.OR.TYPE.EQ.'TB' )THEN
2861 IBEG = MAX( 1, KL + 2 - J )
2874 IEND = MIN( KL + 1, 1 + M - J )
2876 DO 140 I = 1, IBEG - 1
2877 AA( I + ( J - 1 )*LDA ) = ROGUE
2879 DO 150 I = IBEG, IEND
2880 AA( I + ( J - 1 )*LDA ) = A( I + J - KK, J )
2882 DO 160 I = IEND + 1, LDA
2883 AA( I + ( J - 1 )*LDA ) = ROGUE
2886 JJ = KK + ( J - 1 )*LDA
2887 AA( JJ ) = DCMPLX( DBLE( AA( JJ ) ), RROGUE )
2890 ELSE IF( TYPE.EQ.'HP'.OR.TYPE.EQ.'TP' )THEN
2900 DO 180 I = IBEG, IEND
2902 AA( IOFF ) = A( I, J )
2905 $ AA( IOFF ) = ROGUE
2907 $ AA( IOFF ) = DCMPLX( DBLE( AA( IOFF ) ), RROGUE )
2917 SUBROUTINE ZMVCH( TRANS, M, N, ALPHA, A, NMAX, X, INCX, BETA, Y,
2918 $ INCY, YT, G, YY, EPS, ERR, FATAL, NOUT, MV )
2920 * Checks the results of the computational tests.
2922 * Auxiliary routine for test program for Level 2 Blas.
2924 * -- Written on 10-August-1987.
2925 * Richard Hanson, Sandia National Labs.
2926 * Jeremy Du Croz, NAG Central Office.
2930 PARAMETER ( ZERO = ( 0.0D0, 0.0D0 ) )
2931 DOUBLE PRECISION RZERO, RONE
2932 PARAMETER ( RZERO = 0.0D0, RONE = 1.0D0 )
2933 * .. Scalar Arguments ..
2934 COMPLEX*16 ALPHA, BETA
2935 DOUBLE PRECISION EPS, ERR
2936 INTEGER INCX, INCY, M, N, NMAX, NOUT
2939 * .. Array Arguments ..
2940 COMPLEX*16 A( NMAX, * ), X( * ), Y( * ), YT( * ), YY( * )
2941 DOUBLE PRECISION G( * )
2942 * .. Local Scalars ..
2944 DOUBLE PRECISION ERRI
2945 INTEGER I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL
2947 * .. Intrinsic Functions ..
2948 INTRINSIC ABS, DBLE, DCONJG, DIMAG, MAX, SQRT
2949 * .. Statement Functions ..
2950 DOUBLE PRECISION ABS1
2951 * .. Statement Function definitions ..
2952 ABS1( C ) = ABS( DBLE( C ) ) + ABS( DIMAG( C ) )
2953 * .. Executable Statements ..
2955 CTRAN = TRANS.EQ.'C'
2956 IF( TRAN.OR.CTRAN )THEN
2978 * Compute expected result in YT using data in A, X and Y.
2979 * Compute gauges in G.
2988 YT( IY ) = YT( IY ) + A( J, I )*X( JX )
2989 G( IY ) = G( IY ) + ABS1( A( J, I ) )*ABS1( X( JX ) )
2992 ELSE IF( CTRAN )THEN
2994 YT( IY ) = YT( IY ) + DCONJG( A( J, I ) )*X( JX )
2995 G( IY ) = G( IY ) + ABS1( A( J, I ) )*ABS1( X( JX ) )
3000 YT( IY ) = YT( IY ) + A( I, J )*X( JX )
3001 G( IY ) = G( IY ) + ABS1( A( I, J ) )*ABS1( X( JX ) )
3005 YT( IY ) = ALPHA*YT( IY ) + BETA*Y( IY )
3006 G( IY ) = ABS1( ALPHA )*G( IY ) + ABS1( BETA )*ABS1( Y( IY ) )
3010 * Compute the error ratio for this result.
3014 ERRI = ABS( YT( I ) - YY( 1 + ( I - 1 )*ABS( INCY ) ) )/EPS
3015 IF( G( I ).NE.RZERO )
3016 $ ERRI = ERRI/G( I )
3017 ERR = MAX( ERR, ERRI )
3018 IF( ERR*SQRT( EPS ).GE.RONE )
3021 * If the loop completes, all results are at least half accurate.
3024 * Report fatal error.
3027 WRITE( NOUT, FMT = 9999 )
3030 WRITE( NOUT, FMT = 9998 )I, YT( I ),
3031 $ YY( 1 + ( I - 1 )*ABS( INCY ) )
3033 WRITE( NOUT, FMT = 9998 )I,
3034 $ YY( 1 + ( I - 1 )*ABS( INCY ) ), YT( I )
3041 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3042 $ 'F ACCURATE *******', /' EXPECTED RE',
3043 $ 'SULT COMPUTED RESULT' )
3044 9998 FORMAT( 1X, I7, 2( ' (', G15.6, ',', G15.6, ')' ) )
3049 LOGICAL FUNCTION LZE( RI, RJ, LR )
3051 * Tests if two arrays are identical.
3053 * Auxiliary routine for test program for Level 2 Blas.
3055 * -- Written on 10-August-1987.
3056 * Richard Hanson, Sandia National Labs.
3057 * Jeremy Du Croz, NAG Central Office.
3059 * .. Scalar Arguments ..
3061 * .. Array Arguments ..
3062 COMPLEX*16 RI( * ), RJ( * )
3063 * .. Local Scalars ..
3065 * .. Executable Statements ..
3067 IF( RI( I ).NE.RJ( I ) )
3079 LOGICAL FUNCTION LZERES( TYPE, UPLO, M, N, AA, AS, LDA )
3081 * Tests if selected elements in two arrays are equal.
3083 * TYPE is 'GE', 'HE' or 'HP'.
3085 * Auxiliary routine for test program for Level 2 Blas.
3087 * -- Written on 10-August-1987.
3088 * Richard Hanson, Sandia National Labs.
3089 * Jeremy Du Croz, NAG Central Office.
3091 * .. Scalar Arguments ..
3095 * .. Array Arguments ..
3096 COMPLEX*16 AA( LDA, * ), AS( LDA, * )
3097 * .. Local Scalars ..
3098 INTEGER I, IBEG, IEND, J
3100 * .. Executable Statements ..
3102 IF( TYPE.EQ.'GE' )THEN
3104 DO 10 I = M + 1, LDA
3105 IF( AA( I, J ).NE.AS( I, J ) )
3109 ELSE IF( TYPE.EQ.'HE' )THEN
3118 DO 30 I = 1, IBEG - 1
3119 IF( AA( I, J ).NE.AS( I, J ) )
3122 DO 40 I = IEND + 1, LDA
3123 IF( AA( I, J ).NE.AS( I, J ) )
3138 COMPLEX*16 FUNCTION ZBEG( RESET )
3140 * Generates complex numbers as pairs of random numbers uniformly
3141 * distributed between -0.5 and 0.5.
3143 * Auxiliary routine for test program for Level 2 Blas.
3145 * -- Written on 10-August-1987.
3146 * Richard Hanson, Sandia National Labs.
3147 * Jeremy Du Croz, NAG Central Office.
3149 * .. Scalar Arguments ..
3151 * .. Local Scalars ..
3152 INTEGER I, IC, J, MI, MJ
3153 * .. Save statement ..
3154 SAVE I, IC, J, MI, MJ
3155 * .. Intrinsic Functions ..
3157 * .. Executable Statements ..
3159 * Initialize local variables.
3168 * The sequence of values of I or J is bounded between 1 and 999.
3169 * If initial I or J = 1,2,3,6,7 or 9, the period will be 50.
3170 * If initial I or J = 4 or 8, the period will be 25.
3171 * If initial I or J = 5, the period will be 10.
3172 * IC is used to break up the period by skipping 1 value of I or J
3178 I = I - 1000*( I/1000 )
3179 J = J - 1000*( J/1000 )
3184 ZBEG = DCMPLX( ( I - 500 )/1001.0D0, ( J - 500 )/1001.0D0 )
3190 DOUBLE PRECISION FUNCTION DDIFF( X, Y )
3192 * Auxiliary routine for test program for Level 2 Blas.
3194 * -- Written on 10-August-1987.
3195 * Richard Hanson, Sandia National Labs.
3197 * .. Scalar Arguments ..
3198 DOUBLE PRECISION X, Y
3199 * .. Executable Statements ..
3206 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3208 * Tests whether XERBLA has detected an error when it should.
3210 * Auxiliary routine for test program for Level 2 Blas.
3212 * -- Written on 10-August-1987.
3213 * Richard Hanson, Sandia National Labs.
3214 * Jeremy Du Croz, NAG Central Office.
3216 * .. Scalar Arguments ..
3220 * .. Executable Statements ..
3222 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3228 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3229 $ 'ETECTED BY ', A6, ' *****' )
3234 SUBROUTINE XERBLA( SRNAME, INFO )
3236 * This is a special version of XERBLA to be used only as part of
3237 * the test program for testing error exits from the Level 2 BLAS
3240 * XERBLA is an error handler for the Level 2 BLAS routines.
3242 * It is called by the Level 2 BLAS routines if an input parameter is
3245 * Auxiliary routine for test program for Level 2 Blas.
3247 * -- Written on 10-August-1987.
3248 * Richard Hanson, Sandia National Labs.
3249 * Jeremy Du Croz, NAG Central Office.
3251 * .. Scalar Arguments ..
3254 * .. Scalars in Common ..
3258 * .. Common blocks ..
3259 COMMON /INFOC/INFOT, NOUT, OK, LERR
3260 COMMON /SRNAMC/SRNAMT
3261 * .. Executable Statements ..
3263 IF( INFO.NE.INFOT )THEN
3264 IF( INFOT.NE.0 )THEN
3265 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3267 WRITE( NOUT, FMT = 9997 )INFO
3271 IF( SRNAME.NE.SRNAMT )THEN
3272 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3277 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
3278 $ ' OF ', I2, ' *******' )
3279 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
3280 $ 'AD OF ', A6, ' *******' )
3281 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,