3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
19 *> Test program for the REAL 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 16 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 34 lines:
26 *> 'sblat2.out' NAME OF SUMMARY OUTPUT FILE
27 *> 6 UNIT NUMBER OF SUMMARY FILE
28 *> 'SBLAT2.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 1.0 0.7 VALUES OF ALPHA
42 *> 3 NUMBER OF VALUES OF BETA
43 *> 0.0 1.0 0.9 VALUES OF BETA
44 *> SGEMV T PUT F FOR NO TEST. SAME COLUMNS.
45 *> SGBMV T PUT F FOR NO TEST. SAME COLUMNS.
46 *> SSYMV T PUT F FOR NO TEST. SAME COLUMNS.
47 *> SSBMV T PUT F FOR NO TEST. SAME COLUMNS.
48 *> SSPMV T PUT F FOR NO TEST. SAME COLUMNS.
49 *> STRMV T PUT F FOR NO TEST. SAME COLUMNS.
50 *> STBMV T PUT F FOR NO TEST. SAME COLUMNS.
51 *> STPMV T PUT F FOR NO TEST. SAME COLUMNS.
52 *> STRSV T PUT F FOR NO TEST. SAME COLUMNS.
53 *> STBSV T PUT F FOR NO TEST. SAME COLUMNS.
54 *> STPSV T PUT F FOR NO TEST. SAME COLUMNS.
55 *> SGER T PUT F FOR NO TEST. SAME COLUMNS.
56 *> SSYR T PUT F FOR NO TEST. SAME COLUMNS.
57 *> SSPR T PUT F FOR NO TEST. SAME COLUMNS.
58 *> SSYR2 T PUT F FOR NO TEST. SAME COLUMNS.
59 *> SSPR2 T PUT F FOR NO TEST. SAME COLUMNS.
66 *> Dongarra J. J., Du Croz J. J., Hammarling S. and Hanson R. J..
67 *> An extended set of Fortran Basic Linear Algebra Subprograms.
69 *> Technical Memoranda Nos. 41 (revision 3) and 81, Mathematics
70 *> and Computer Science Division, Argonne National Laboratory,
71 *> 9700 South Cass Avenue, Argonne, Illinois 60439, US.
75 *> NAG Technical Reports TR3/87 and TR4/87, Numerical Algorithms
76 *> Group Ltd., NAG Central Office, 256 Banbury Road, Oxford
77 *> OX2 7DE, UK, and Numerical Algorithms Group Inc., 1101 31st
78 *> Street, Suite 100, Downers Grove, Illinois 60515-1263, USA.
81 *> -- Written on 10-August-1987.
82 *> Richard Hanson, Sandia National Labs.
83 *> Jeremy Du Croz, NAG Central Office.
85 *> 10-9-00: Change STATUS='NEW' to 'UNKNOWN' so that the testers
86 *> can be run multiple times without deleting generated
87 *> output files (susan)
93 *> \author Univ. of Tennessee
94 *> \author Univ. of California Berkeley
95 *> \author Univ. of Colorado Denver
100 *> \ingroup single_blas_testing
102 * =====================================================================
105 * -- Reference BLAS test routine (version 3.7.0) --
106 * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
107 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
110 * =====================================================================
114 PARAMETER ( NIN = 5 )
116 PARAMETER ( NSUBS = 16 )
118 PARAMETER ( ZERO = 0.0, ONE = 1.0 )
120 PARAMETER ( NMAX = 65, INCMAX = 2 )
121 INTEGER NINMAX, NIDMAX, NKBMAX, NALMAX, NBEMAX
122 PARAMETER ( NINMAX = 7, NIDMAX = 9, NKBMAX = 7,
123 $ NALMAX = 7, NBEMAX = 7 )
124 * .. Local Scalars ..
125 REAL EPS, ERR, THRESH
126 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NINC, NKB,
128 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
132 CHARACTER*32 SNAPS, SUMMRY
134 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ),
135 $ ALF( NALMAX ), AS( NMAX*NMAX ), BET( NBEMAX ),
136 $ G( NMAX ), X( NMAX ), XS( NMAX*INCMAX ),
137 $ XX( NMAX*INCMAX ), Y( NMAX ),
138 $ YS( NMAX*INCMAX ), YT( NMAX ),
139 $ YY( NMAX*INCMAX ), Z( 2*NMAX )
140 INTEGER IDIM( NIDMAX ), INC( NINMAX ), KB( NKBMAX )
141 LOGICAL LTEST( NSUBS )
142 CHARACTER*6 SNAMES( NSUBS )
143 * .. External Functions ..
147 * .. External Subroutines ..
148 EXTERNAL SCHK1, SCHK2, SCHK3, SCHK4, SCHK5, SCHK6,
150 * .. Intrinsic Functions ..
151 INTRINSIC ABS, MAX, MIN
152 * .. Scalars in Common ..
156 * .. Common blocks ..
157 COMMON /INFOC/INFOT, NOUTC, OK, LERR
158 COMMON /SRNAMC/SRNAMT
159 * .. Data statements ..
160 DATA SNAMES/'SGEMV ', 'SGBMV ', 'SSYMV ', 'SSBMV ',
161 $ 'SSPMV ', 'STRMV ', 'STBMV ', 'STPMV ',
162 $ 'STRSV ', 'STBSV ', 'STPSV ', 'SGER ',
163 $ 'SSYR ', 'SSPR ', 'SSYR2 ', 'SSPR2 '/
164 * .. Executable Statements ..
166 * Read name and unit number for summary output file and open file.
168 READ( NIN, FMT = * )SUMMRY
169 READ( NIN, FMT = * )NOUT
170 OPEN( NOUT, FILE = SUMMRY, STATUS = 'UNKNOWN' )
173 * Read name and unit number for snapshot output file and open file.
175 READ( NIN, FMT = * )SNAPS
176 READ( NIN, FMT = * )NTRA
179 OPEN( NTRA, FILE = SNAPS, STATUS = 'UNKNOWN' )
181 * Read the flag that directs rewinding of the snapshot file.
182 READ( NIN, FMT = * )REWI
183 REWI = REWI.AND.TRACE
184 * Read the flag that directs stopping on any failure.
185 READ( NIN, FMT = * )SFATAL
186 * Read the flag that indicates whether error exits are to be tested.
187 READ( NIN, FMT = * )TSTERR
188 * Read the threshold value of the test ratio
189 READ( NIN, FMT = * )THRESH
191 * Read and check the parameter values for the tests.
194 READ( NIN, FMT = * )NIDIM
195 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
196 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
199 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
201 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
202 WRITE( NOUT, FMT = 9996 )NMAX
207 READ( NIN, FMT = * )NKB
208 IF( NKB.LT.1.OR.NKB.GT.NKBMAX )THEN
209 WRITE( NOUT, FMT = 9997 )'K', NKBMAX
212 READ( NIN, FMT = * )( KB( I ), I = 1, NKB )
214 IF( KB( I ).LT.0 )THEN
215 WRITE( NOUT, FMT = 9995 )
219 * Values of INCX and INCY
220 READ( NIN, FMT = * )NINC
221 IF( NINC.LT.1.OR.NINC.GT.NINMAX )THEN
222 WRITE( NOUT, FMT = 9997 )'INCX AND INCY', NINMAX
225 READ( NIN, FMT = * )( INC( I ), I = 1, NINC )
227 IF( INC( I ).EQ.0.OR.ABS( INC( I ) ).GT.INCMAX )THEN
228 WRITE( NOUT, FMT = 9994 )INCMAX
233 READ( NIN, FMT = * )NALF
234 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
235 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
238 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
240 READ( NIN, FMT = * )NBET
241 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
242 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
245 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
247 * Report values of parameters.
249 WRITE( NOUT, FMT = 9993 )
250 WRITE( NOUT, FMT = 9992 )( IDIM( I ), I = 1, NIDIM )
251 WRITE( NOUT, FMT = 9991 )( KB( I ), I = 1, NKB )
252 WRITE( NOUT, FMT = 9990 )( INC( I ), I = 1, NINC )
253 WRITE( NOUT, FMT = 9989 )( ALF( I ), I = 1, NALF )
254 WRITE( NOUT, FMT = 9988 )( BET( I ), I = 1, NBET )
255 IF( .NOT.TSTERR )THEN
256 WRITE( NOUT, FMT = * )
257 WRITE( NOUT, FMT = 9980 )
259 WRITE( NOUT, FMT = * )
260 WRITE( NOUT, FMT = 9999 )THRESH
261 WRITE( NOUT, FMT = * )
263 * Read names of subroutines and flags which indicate
264 * whether they are to be tested.
269 50 READ( NIN, FMT = 9984, END = 80 )SNAMET, LTESTT
271 IF( SNAMET.EQ.SNAMES( I ) )
274 WRITE( NOUT, FMT = 9986 )SNAMET
276 70 LTEST( I ) = LTESTT
282 * Compute EPS (the machine precision).
285 WRITE( NOUT, FMT = 9998 )EPS
287 * Check the reliability of SMVCH using exact data.
292 A( I, J ) = MAX( I - J + 1, 0 )
298 YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
300 * YY holds the exact result. On exit from SMVCH YT holds
301 * the result computed by SMVCH.
303 CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X, 1, ZERO, Y, 1, YT, G,
304 $ YY, EPS, ERR, FATAL, NOUT, .TRUE. )
305 SAME = LSE( YY, YT, N )
306 IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
307 WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR
311 CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X, -1, ZERO, Y, -1, YT, G,
312 $ YY, EPS, ERR, FATAL, NOUT, .TRUE. )
313 SAME = LSE( YY, YT, N )
314 IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
315 WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR
319 * Test each subroutine in turn.
321 DO 210 ISNUM = 1, NSUBS
322 WRITE( NOUT, FMT = * )
323 IF( .NOT.LTEST( ISNUM ) )THEN
324 * Subprogram is not to be tested.
325 WRITE( NOUT, FMT = 9983 )SNAMES( ISNUM )
327 SRNAMT = SNAMES( ISNUM )
330 CALL SCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
331 WRITE( NOUT, FMT = * )
337 GO TO ( 140, 140, 150, 150, 150, 160, 160,
338 $ 160, 160, 160, 160, 170, 180, 180,
340 * Test SGEMV, 01, and SGBMV, 02.
341 140 CALL SCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
342 $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF,
343 $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS,
344 $ X, XX, XS, Y, YY, YS, YT, G )
346 * Test SSYMV, 03, SSBMV, 04, and SSPMV, 05.
347 150 CALL SCHK2( 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 STRMV, 06, STBMV, 07, STPMV, 08,
353 * STRSV, 09, STBSV, 10, and STPSV, 11.
354 160 CALL SCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
355 $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC,
356 $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z )
359 170 CALL SCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
360 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,
361 $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,
364 * Test SSYR, 13, and SSPR, 14.
365 180 CALL SCHK5( 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 SSYR2, 15, and SSPR2, 16.
371 190 CALL SCHK6( 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 200 IF( FATAL.AND.SFATAL )
380 WRITE( NOUT, FMT = 9982 )
384 WRITE( NOUT, FMT = 9981 )
388 WRITE( NOUT, FMT = 9987 )
396 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
398 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 )
399 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
401 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
402 9995 FORMAT( ' VALUE OF K IS LESS THAN 0' )
403 9994 FORMAT( ' ABSOLUTE VALUE OF INCX OR INCY IS 0 OR GREATER THAN ',
405 9993 FORMAT( ' TESTS OF THE REAL LEVEL 2 BLAS', //' THE F',
406 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
407 9992 FORMAT( ' FOR N ', 9I6 )
408 9991 FORMAT( ' FOR K ', 7I6 )
409 9990 FORMAT( ' FOR INCX AND INCY ', 7I6 )
410 9989 FORMAT( ' FOR ALPHA ', 7F6.1 )
411 9988 FORMAT( ' FOR BETA ', 7F6.1 )
412 9987 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
413 $ /' ******* TESTS ABANDONED *******' )
414 9986 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
415 $ 'ESTS ABANDONED *******' )
416 9985 FORMAT( ' ERROR IN SMVCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
417 $ 'ATED WRONGLY.', /' SMVCH WAS CALLED WITH TRANS = ', A1,
418 $ ' AND RETURNED SAME = ', L1, ' AND ERR = ', F12.3, '.', /
419 $ ' THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.'
420 $ , /' ******* TESTS ABANDONED *******' )
421 9984 FORMAT( A6, L2 )
422 9983 FORMAT( 1X, A6, ' WAS NOT TESTED' )
423 9982 FORMAT( /' END OF TESTS' )
424 9981 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
425 9980 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
430 SUBROUTINE SCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
431 $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET,
432 $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX,
433 $ XS, Y, YY, YS, YT, G )
435 * Tests SGEMV and SGBMV.
437 * Auxiliary routine for test program for Level 2 Blas.
439 * -- Written on 10-August-1987.
440 * Richard Hanson, Sandia National Labs.
441 * Jeremy Du Croz, NAG Central Office.
445 PARAMETER ( ZERO = 0.0, HALF = 0.5 )
446 * .. Scalar Arguments ..
448 INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,
450 LOGICAL FATAL, REWI, TRACE
452 * .. Array Arguments ..
453 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
454 $ AS( NMAX*NMAX ), BET( NBET ), G( NMAX ),
455 $ X( NMAX ), XS( NMAX*INCMAX ),
456 $ XX( NMAX*INCMAX ), Y( NMAX ),
457 $ YS( NMAX*INCMAX ), YT( NMAX ),
459 INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB )
460 * .. Local Scalars ..
461 REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX, TRANSL
462 INTEGER I, IA, IB, IC, IKU, IM, IN, INCX, INCXS, INCY,
463 $ INCYS, IX, IY, KL, KLS, KU, KUS, LAA, LDA,
464 $ LDAS, LX, LY, M, ML, MS, N, NARGS, NC, ND, NK,
466 LOGICAL BANDED, FULL, NULL, RESET, SAME, TRAN
467 CHARACTER*1 TRANS, TRANSS
471 * .. External Functions ..
474 * .. External Subroutines ..
475 EXTERNAL SGBMV, SGEMV, SMAKE, SMVCH
476 * .. Intrinsic Functions ..
477 INTRINSIC ABS, MAX, MIN
478 * .. Scalars in Common ..
481 * .. Common blocks ..
482 COMMON /INFOC/INFOT, NOUTC, OK, LERR
483 * .. Data statements ..
485 * .. Executable Statements ..
486 FULL = SNAME( 3: 3 ).EQ.'E'
487 BANDED = SNAME( 3: 3 ).EQ.'B'
488 * Define the number of arguments.
491 ELSE IF( BANDED )THEN
505 $ M = MAX( N - ND, 0 )
507 $ M = MIN( N + ND, NMAX )
517 KL = MAX( KU - 1, 0 )
522 * Set LDA to 1 more than minimum value if room.
530 * Skip tests if not enough room.
534 NULL = N.LE.0.OR.M.LE.0
536 * Generate the matrix A.
539 CALL SMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX, AA,
540 $ LDA, KL, KU, RESET, TRANSL )
543 TRANS = ICH( IC: IC )
544 TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
558 * Generate the vector X.
561 CALL SMAKE( 'GE', ' ', ' ', 1, NL, X, 1, XX,
562 $ ABS( INCX ), 0, NL - 1, RESET, TRANSL )
565 XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO
578 * Generate the vector Y.
581 CALL SMAKE( 'GE', ' ', ' ', 1, ML, Y, 1,
582 $ YY, ABS( INCY ), 0, ML - 1,
587 * Save every datum before calling the
610 * Call the subroutine.
614 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
615 $ TRANS, M, N, ALPHA, LDA, INCX, BETA,
619 CALL SGEMV( TRANS, M, N, ALPHA, AA,
620 $ LDA, XX, INCX, BETA, YY,
622 ELSE IF( BANDED )THEN
624 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
625 $ TRANS, M, N, KL, KU, ALPHA, LDA,
629 CALL SGBMV( TRANS, M, N, KL, KU, ALPHA,
630 $ AA, LDA, XX, INCX, BETA,
634 * Check if error-exit was taken incorrectly.
637 WRITE( NOUT, FMT = 9993 )
642 * See what data changed inside subroutines.
644 ISAME( 1 ) = TRANS.EQ.TRANSS
648 ISAME( 4 ) = ALS.EQ.ALPHA
649 ISAME( 5 ) = LSE( AS, AA, LAA )
650 ISAME( 6 ) = LDAS.EQ.LDA
651 ISAME( 7 ) = LSE( XS, XX, LX )
652 ISAME( 8 ) = INCXS.EQ.INCX
653 ISAME( 9 ) = BLS.EQ.BETA
655 ISAME( 10 ) = LSE( YS, YY, LY )
657 ISAME( 10 ) = LSERES( 'GE', ' ', 1,
661 ISAME( 11 ) = INCYS.EQ.INCY
662 ELSE IF( BANDED )THEN
663 ISAME( 4 ) = KLS.EQ.KL
664 ISAME( 5 ) = KUS.EQ.KU
665 ISAME( 6 ) = ALS.EQ.ALPHA
666 ISAME( 7 ) = LSE( AS, AA, LAA )
667 ISAME( 8 ) = LDAS.EQ.LDA
668 ISAME( 9 ) = LSE( XS, XX, LX )
669 ISAME( 10 ) = INCXS.EQ.INCX
670 ISAME( 11 ) = BLS.EQ.BETA
672 ISAME( 12 ) = LSE( YS, YY, LY )
674 ISAME( 12 ) = LSERES( 'GE', ' ', 1,
678 ISAME( 13 ) = INCYS.EQ.INCY
681 * If data was incorrectly changed, report
686 SAME = SAME.AND.ISAME( I )
687 IF( .NOT.ISAME( I ) )
688 $ WRITE( NOUT, FMT = 9998 )I
699 CALL SMVCH( TRANS, M, N, ALPHA, A,
700 $ NMAX, X, INCX, BETA, Y,
701 $ INCY, YT, G, YY, EPS, ERR,
702 $ FATAL, NOUT, .TRUE. )
703 ERRMAX = MAX( ERRMAX, ERR )
704 * If got really bad answer, report and
709 * Avoid repeating tests with M.le.0 or
732 IF( ERRMAX.LT.THRESH )THEN
733 WRITE( NOUT, FMT = 9999 )SNAME, NC
735 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
740 WRITE( NOUT, FMT = 9996 )SNAME
742 WRITE( NOUT, FMT = 9994 )NC, SNAME, TRANS, M, N, ALPHA, LDA,
744 ELSE IF( BANDED )THEN
745 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANS, M, N, KL, KU,
746 $ ALPHA, LDA, INCX, BETA, INCY
752 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
754 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
755 $ 'ANGED INCORRECTLY *******' )
756 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
757 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
758 $ ' - SUSPECT *******' )
759 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
760 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', 4( I3, ',' ), F4.1,
761 $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2, ') .' )
762 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', 2( I3, ',' ), F4.1,
763 $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2,
765 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
771 SUBROUTINE SCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
772 $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET,
773 $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX,
774 $ XS, Y, YY, YS, YT, G )
776 * Tests SSYMV, SSBMV and SSPMV.
778 * Auxiliary routine for test program for Level 2 Blas.
780 * -- Written on 10-August-1987.
781 * Richard Hanson, Sandia National Labs.
782 * Jeremy Du Croz, NAG Central Office.
786 PARAMETER ( ZERO = 0.0, HALF = 0.5 )
787 * .. Scalar Arguments ..
789 INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,
791 LOGICAL FATAL, REWI, TRACE
793 * .. Array Arguments ..
794 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
795 $ AS( NMAX*NMAX ), BET( NBET ), G( NMAX ),
796 $ X( NMAX ), XS( NMAX*INCMAX ),
797 $ XX( NMAX*INCMAX ), Y( NMAX ),
798 $ YS( NMAX*INCMAX ), YT( NMAX ),
800 INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB )
801 * .. Local Scalars ..
802 REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX, TRANSL
803 INTEGER I, IA, IB, IC, IK, IN, INCX, INCXS, INCY,
804 $ INCYS, IX, IY, K, KS, LAA, LDA, LDAS, LX, LY,
805 $ N, NARGS, NC, NK, NS
806 LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME
807 CHARACTER*1 UPLO, UPLOS
811 * .. External Functions ..
814 * .. External Subroutines ..
815 EXTERNAL SMAKE, SMVCH, SSBMV, SSPMV, SSYMV
816 * .. Intrinsic Functions ..
818 * .. Scalars in Common ..
821 * .. Common blocks ..
822 COMMON /INFOC/INFOT, NOUTC, OK, LERR
823 * .. Data statements ..
825 * .. Executable Statements ..
826 FULL = SNAME( 3: 3 ).EQ.'Y'
827 BANDED = SNAME( 3: 3 ).EQ.'B'
828 PACKED = SNAME( 3: 3 ).EQ.'P'
829 * Define the number of arguments.
832 ELSE IF( BANDED )THEN
834 ELSE IF( PACKED )THEN
856 * Set LDA to 1 more than minimum value if room.
864 * Skip tests if not enough room.
868 LAA = ( N*( N + 1 ) )/2
877 * Generate the matrix A.
880 CALL SMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX, AA,
881 $ LDA, K, K, RESET, TRANSL )
887 * Generate the vector X.
890 CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
891 $ ABS( INCX ), 0, N - 1, RESET, TRANSL )
894 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
907 * Generate the vector Y.
910 CALL SMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
911 $ ABS( INCY ), 0, N - 1, RESET,
916 * Save every datum before calling the
937 * Call the subroutine.
941 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
942 $ UPLO, N, ALPHA, LDA, INCX, BETA, INCY
945 CALL SSYMV( UPLO, N, ALPHA, AA, LDA, XX,
946 $ INCX, BETA, YY, INCY )
947 ELSE IF( BANDED )THEN
949 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
950 $ UPLO, N, K, ALPHA, LDA, INCX, BETA,
954 CALL SSBMV( UPLO, N, K, ALPHA, AA, LDA,
955 $ XX, INCX, BETA, YY, INCY )
956 ELSE IF( PACKED )THEN
958 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
959 $ UPLO, N, ALPHA, INCX, BETA, INCY
962 CALL SSPMV( UPLO, N, ALPHA, AA, XX, INCX,
966 * Check if error-exit was taken incorrectly.
969 WRITE( NOUT, FMT = 9992 )
974 * See what data changed inside subroutines.
976 ISAME( 1 ) = UPLO.EQ.UPLOS
979 ISAME( 3 ) = ALS.EQ.ALPHA
980 ISAME( 4 ) = LSE( AS, AA, LAA )
981 ISAME( 5 ) = LDAS.EQ.LDA
982 ISAME( 6 ) = LSE( XS, XX, LX )
983 ISAME( 7 ) = INCXS.EQ.INCX
984 ISAME( 8 ) = BLS.EQ.BETA
986 ISAME( 9 ) = LSE( YS, YY, LY )
988 ISAME( 9 ) = LSERES( 'GE', ' ', 1, N,
989 $ YS, YY, ABS( INCY ) )
991 ISAME( 10 ) = INCYS.EQ.INCY
992 ELSE IF( BANDED )THEN
994 ISAME( 4 ) = ALS.EQ.ALPHA
995 ISAME( 5 ) = LSE( AS, AA, LAA )
996 ISAME( 6 ) = LDAS.EQ.LDA
997 ISAME( 7 ) = LSE( XS, XX, LX )
998 ISAME( 8 ) = INCXS.EQ.INCX
999 ISAME( 9 ) = BLS.EQ.BETA
1001 ISAME( 10 ) = LSE( YS, YY, LY )
1003 ISAME( 10 ) = LSERES( 'GE', ' ', 1, N,
1004 $ YS, YY, ABS( INCY ) )
1006 ISAME( 11 ) = INCYS.EQ.INCY
1007 ELSE IF( PACKED )THEN
1008 ISAME( 3 ) = ALS.EQ.ALPHA
1009 ISAME( 4 ) = LSE( AS, AA, LAA )
1010 ISAME( 5 ) = LSE( XS, XX, LX )
1011 ISAME( 6 ) = INCXS.EQ.INCX
1012 ISAME( 7 ) = BLS.EQ.BETA
1014 ISAME( 8 ) = LSE( YS, YY, LY )
1016 ISAME( 8 ) = LSERES( 'GE', ' ', 1, N,
1017 $ YS, YY, ABS( INCY ) )
1019 ISAME( 9 ) = INCYS.EQ.INCY
1022 * If data was incorrectly changed, report and
1027 SAME = SAME.AND.ISAME( I )
1028 IF( .NOT.ISAME( I ) )
1029 $ WRITE( NOUT, FMT = 9998 )I
1040 CALL SMVCH( 'N', N, N, ALPHA, A, NMAX, X,
1041 $ INCX, BETA, Y, INCY, YT, G,
1042 $ YY, EPS, ERR, FATAL, NOUT,
1044 ERRMAX = MAX( ERRMAX, ERR )
1045 * If got really bad answer, report and
1050 * Avoid repeating tests with N.le.0
1070 IF( ERRMAX.LT.THRESH )THEN
1071 WRITE( NOUT, FMT = 9999 )SNAME, NC
1073 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1078 WRITE( NOUT, FMT = 9996 )SNAME
1080 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, LDA, INCX,
1082 ELSE IF( BANDED )THEN
1083 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, K, ALPHA, LDA,
1085 ELSE IF( PACKED )THEN
1086 WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, N, ALPHA, INCX,
1093 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1095 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1096 $ 'ANGED INCORRECTLY *******' )
1097 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1098 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1099 $ ' - SUSPECT *******' )
1100 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1101 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', AP',
1102 $ ', X,', I2, ',', F4.1, ', Y,', I2, ') .' )
1103 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', 2( I3, ',' ), F4.1,
1104 $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2,
1106 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', A,',
1107 $ I3, ', X,', I2, ',', F4.1, ', Y,', I2, ') .' )
1108 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1114 SUBROUTINE SCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1115 $ FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, NMAX,
1116 $ INCMAX, A, AA, AS, X, XX, XS, XT, G, Z )
1118 * Tests STRMV, STBMV, STPMV, STRSV, STBSV and STPSV.
1120 * Auxiliary routine for test program for Level 2 Blas.
1122 * -- Written on 10-August-1987.
1123 * Richard Hanson, Sandia National Labs.
1124 * Jeremy Du Croz, NAG Central Office.
1127 REAL ZERO, HALF, ONE
1128 PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
1129 * .. Scalar Arguments ..
1131 INTEGER INCMAX, NIDIM, NINC, NKB, NMAX, NOUT, NTRA
1132 LOGICAL FATAL, REWI, TRACE
1134 * .. Array Arguments ..
1135 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ),
1136 $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ),
1137 $ XS( NMAX*INCMAX ), XT( NMAX ),
1138 $ XX( NMAX*INCMAX ), Z( NMAX )
1139 INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB )
1140 * .. Local Scalars ..
1141 REAL ERR, ERRMAX, TRANSL
1142 INTEGER I, ICD, ICT, ICU, IK, IN, INCX, INCXS, IX, K,
1143 $ KS, LAA, LDA, LDAS, LX, N, NARGS, NC, NK, NS
1144 LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME
1145 CHARACTER*1 DIAG, DIAGS, TRANS, TRANSS, UPLO, UPLOS
1146 CHARACTER*2 ICHD, ICHU
1148 * .. Local Arrays ..
1150 * .. External Functions ..
1152 EXTERNAL LSE, LSERES
1153 * .. External Subroutines ..
1154 EXTERNAL SMAKE, SMVCH, STBMV, STBSV, STPMV, STPSV,
1156 * .. Intrinsic Functions ..
1158 * .. Scalars in Common ..
1159 INTEGER INFOT, NOUTC
1161 * .. Common blocks ..
1162 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1163 * .. Data statements ..
1164 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/
1165 * .. Executable Statements ..
1166 FULL = SNAME( 3: 3 ).EQ.'R'
1167 BANDED = SNAME( 3: 3 ).EQ.'B'
1168 PACKED = SNAME( 3: 3 ).EQ.'P'
1169 * Define the number of arguments.
1172 ELSE IF( BANDED )THEN
1174 ELSE IF( PACKED )THEN
1181 * Set up zero vector for SMVCH.
1186 DO 110 IN = 1, NIDIM
1200 * Set LDA to 1 more than minimum value if room.
1208 * Skip tests if not enough room.
1212 LAA = ( N*( N + 1 ) )/2
1219 UPLO = ICHU( ICU: ICU )
1222 TRANS = ICHT( ICT: ICT )
1225 DIAG = ICHD( ICD: ICD )
1227 * Generate the matrix A.
1230 CALL SMAKE( SNAME( 2: 3 ), UPLO, DIAG, N, N, A,
1231 $ NMAX, AA, LDA, K, K, RESET, TRANSL )
1237 * Generate the vector X.
1240 CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
1241 $ ABS( INCX ), 0, N - 1, RESET,
1245 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
1250 * Save every datum before calling the subroutine.
1266 * Call the subroutine.
1268 IF( SNAME( 4: 5 ).EQ.'MV' )THEN
1271 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
1272 $ UPLO, TRANS, DIAG, N, LDA, INCX
1275 CALL STRMV( UPLO, TRANS, DIAG, N, AA, LDA,
1277 ELSE IF( BANDED )THEN
1279 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
1280 $ UPLO, TRANS, DIAG, N, K, LDA, INCX
1283 CALL STBMV( UPLO, TRANS, DIAG, N, K, AA,
1285 ELSE IF( PACKED )THEN
1287 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1288 $ UPLO, TRANS, DIAG, N, INCX
1291 CALL STPMV( UPLO, TRANS, DIAG, N, AA, XX,
1294 ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
1297 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
1298 $ UPLO, TRANS, DIAG, N, LDA, INCX
1301 CALL STRSV( UPLO, TRANS, DIAG, N, AA, LDA,
1303 ELSE IF( BANDED )THEN
1305 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
1306 $ UPLO, TRANS, DIAG, N, K, LDA, INCX
1309 CALL STBSV( UPLO, TRANS, DIAG, N, K, AA,
1311 ELSE IF( PACKED )THEN
1313 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
1314 $ UPLO, TRANS, DIAG, N, INCX
1317 CALL STPSV( UPLO, TRANS, DIAG, N, AA, XX,
1322 * Check if error-exit was taken incorrectly.
1325 WRITE( NOUT, FMT = 9992 )
1330 * See what data changed inside subroutines.
1332 ISAME( 1 ) = UPLO.EQ.UPLOS
1333 ISAME( 2 ) = TRANS.EQ.TRANSS
1334 ISAME( 3 ) = DIAG.EQ.DIAGS
1335 ISAME( 4 ) = NS.EQ.N
1337 ISAME( 5 ) = LSE( AS, AA, LAA )
1338 ISAME( 6 ) = LDAS.EQ.LDA
1340 ISAME( 7 ) = LSE( XS, XX, LX )
1342 ISAME( 7 ) = LSERES( 'GE', ' ', 1, N, XS,
1345 ISAME( 8 ) = INCXS.EQ.INCX
1346 ELSE IF( BANDED )THEN
1347 ISAME( 5 ) = KS.EQ.K
1348 ISAME( 6 ) = LSE( AS, AA, LAA )
1349 ISAME( 7 ) = LDAS.EQ.LDA
1351 ISAME( 8 ) = LSE( XS, XX, LX )
1353 ISAME( 8 ) = LSERES( 'GE', ' ', 1, N, XS,
1356 ISAME( 9 ) = INCXS.EQ.INCX
1357 ELSE IF( PACKED )THEN
1358 ISAME( 5 ) = LSE( AS, AA, LAA )
1360 ISAME( 6 ) = LSE( XS, XX, LX )
1362 ISAME( 6 ) = LSERES( 'GE', ' ', 1, N, XS,
1365 ISAME( 7 ) = INCXS.EQ.INCX
1368 * If data was incorrectly changed, report and
1373 SAME = SAME.AND.ISAME( I )
1374 IF( .NOT.ISAME( I ) )
1375 $ WRITE( NOUT, FMT = 9998 )I
1383 IF( SNAME( 4: 5 ).EQ.'MV' )THEN
1387 CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X,
1388 $ INCX, ZERO, Z, INCX, XT, G,
1389 $ XX, EPS, ERR, FATAL, NOUT,
1391 ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
1393 * Compute approximation to original vector.
1396 Z( I ) = XX( 1 + ( I - 1 )*
1398 XX( 1 + ( I - 1 )*ABS( INCX ) )
1401 CALL SMVCH( TRANS, N, N, ONE, A, NMAX, Z,
1402 $ INCX, ZERO, X, INCX, XT, G,
1403 $ XX, EPS, ERR, FATAL, NOUT,
1406 ERRMAX = MAX( ERRMAX, ERR )
1407 * If got really bad answer, report and return.
1411 * Avoid repeating tests with N.le.0.
1429 IF( ERRMAX.LT.THRESH )THEN
1430 WRITE( NOUT, FMT = 9999 )SNAME, NC
1432 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1437 WRITE( NOUT, FMT = 9996 )SNAME
1439 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, DIAG, N, LDA,
1441 ELSE IF( BANDED )THEN
1442 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, DIAG, N, K,
1444 ELSE IF( PACKED )THEN
1445 WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, TRANS, DIAG, N, INCX
1451 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1453 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1454 $ 'ANGED INCORRECTLY *******' )
1455 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1456 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1457 $ ' - SUSPECT *******' )
1458 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1459 9995 FORMAT( 1X, I6, ': ', A6, '(', 3( '''', A1, ''',' ), I3, ', AP, ',
1461 9994 FORMAT( 1X, I6, ': ', A6, '(', 3( '''', A1, ''',' ), 2( I3, ',' ),
1462 $ ' A,', I3, ', X,', I2, ') .' )
1463 9993 FORMAT( 1X, I6, ': ', A6, '(', 3( '''', A1, ''',' ), I3, ', A,',
1464 $ I3, ', X,', I2, ') .' )
1465 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1471 SUBROUTINE SCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1472 $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX,
1473 $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G,
1478 * Auxiliary routine for test program for Level 2 Blas.
1480 * -- Written on 10-August-1987.
1481 * Richard Hanson, Sandia National Labs.
1482 * Jeremy Du Croz, NAG Central Office.
1485 REAL ZERO, HALF, ONE
1486 PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
1487 * .. Scalar Arguments ..
1489 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
1490 LOGICAL FATAL, REWI, TRACE
1492 * .. Array Arguments ..
1493 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1494 $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ),
1495 $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ),
1496 $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ),
1497 $ YY( NMAX*INCMAX ), Z( NMAX )
1498 INTEGER IDIM( NIDIM ), INC( NINC )
1499 * .. Local Scalars ..
1500 REAL ALPHA, ALS, ERR, ERRMAX, TRANSL
1501 INTEGER I, IA, IM, IN, INCX, INCXS, INCY, INCYS, IX,
1502 $ IY, J, LAA, LDA, LDAS, LX, LY, M, MS, N, NARGS,
1504 LOGICAL NULL, RESET, SAME
1505 * .. Local Arrays ..
1508 * .. External Functions ..
1510 EXTERNAL LSE, LSERES
1511 * .. External Subroutines ..
1512 EXTERNAL SGER, SMAKE, SMVCH
1513 * .. Intrinsic Functions ..
1514 INTRINSIC ABS, MAX, MIN
1515 * .. Scalars in Common ..
1516 INTEGER INFOT, NOUTC
1518 * .. Common blocks ..
1519 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1520 * .. Executable Statements ..
1521 * Define the number of arguments.
1528 DO 120 IN = 1, NIDIM
1534 $ M = MAX( N - ND, 0 )
1536 $ M = MIN( N + ND, NMAX )
1538 * Set LDA to 1 more than minimum value if room.
1542 * Skip tests if not enough room.
1546 NULL = N.LE.0.OR.M.LE.0
1552 * Generate the vector X.
1555 CALL SMAKE( 'GE', ' ', ' ', 1, M, X, 1, XX, ABS( INCX ),
1556 $ 0, M - 1, RESET, TRANSL )
1559 XX( 1 + ABS( INCX )*( M/2 - 1 ) ) = ZERO
1566 * Generate the vector Y.
1569 CALL SMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
1570 $ ABS( INCY ), 0, N - 1, RESET, TRANSL )
1573 YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
1579 * Generate the matrix A.
1582 CALL SMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX,
1583 $ AA, LDA, M - 1, N - 1, RESET, TRANSL )
1587 * Save every datum before calling the subroutine.
1605 * Call the subroutine.
1608 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, M, N,
1609 $ ALPHA, INCX, INCY, LDA
1612 CALL SGER( M, N, ALPHA, XX, INCX, YY, INCY, AA,
1615 * Check if error-exit was taken incorrectly.
1618 WRITE( NOUT, FMT = 9993 )
1623 * See what data changed inside subroutine.
1625 ISAME( 1 ) = MS.EQ.M
1626 ISAME( 2 ) = NS.EQ.N
1627 ISAME( 3 ) = ALS.EQ.ALPHA
1628 ISAME( 4 ) = LSE( XS, XX, LX )
1629 ISAME( 5 ) = INCXS.EQ.INCX
1630 ISAME( 6 ) = LSE( YS, YY, LY )
1631 ISAME( 7 ) = INCYS.EQ.INCY
1633 ISAME( 8 ) = LSE( AS, AA, LAA )
1635 ISAME( 8 ) = LSERES( 'GE', ' ', M, N, AS, AA,
1638 ISAME( 9 ) = LDAS.EQ.LDA
1640 * If data was incorrectly changed, report and return.
1644 SAME = SAME.AND.ISAME( I )
1645 IF( .NOT.ISAME( I ) )
1646 $ WRITE( NOUT, FMT = 9998 )I
1655 * Check the result column by column.
1663 Z( I ) = X( M - I + 1 )
1670 W( 1 ) = Y( N - J + 1 )
1672 CALL SMVCH( 'N', M, 1, ALPHA, Z, NMAX, W, 1,
1673 $ ONE, A( 1, J ), 1, YT, G,
1674 $ AA( 1 + ( J - 1 )*LDA ), EPS,
1675 $ ERR, FATAL, NOUT, .TRUE. )
1676 ERRMAX = MAX( ERRMAX, ERR )
1677 * If got really bad answer, report and return.
1682 * Avoid repeating tests with M.le.0 or N.le.0.
1698 IF( ERRMAX.LT.THRESH )THEN
1699 WRITE( NOUT, FMT = 9999 )SNAME, NC
1701 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1706 WRITE( NOUT, FMT = 9995 )J
1709 WRITE( NOUT, FMT = 9996 )SNAME
1710 WRITE( NOUT, FMT = 9994 )NC, SNAME, M, N, ALPHA, INCX, INCY, LDA
1715 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1717 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1718 $ 'ANGED INCORRECTLY *******' )
1719 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1720 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1721 $ ' - SUSPECT *******' )
1722 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1723 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
1724 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( I3, ',' ), F4.1, ', X,', I2,
1725 $ ', Y,', I2, ', A,', I3, ') .' )
1726 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
1732 SUBROUTINE SCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
1733 $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX,
1734 $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G,
1737 * Tests SSYR and SSPR.
1739 * Auxiliary routine for test program for Level 2 Blas.
1741 * -- Written on 10-August-1987.
1742 * Richard Hanson, Sandia National Labs.
1743 * Jeremy Du Croz, NAG Central Office.
1746 REAL ZERO, HALF, ONE
1747 PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
1748 * .. Scalar Arguments ..
1750 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
1751 LOGICAL FATAL, REWI, TRACE
1753 * .. Array Arguments ..
1754 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
1755 $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ),
1756 $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ),
1757 $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ),
1758 $ YY( NMAX*INCMAX ), Z( NMAX )
1759 INTEGER IDIM( NIDIM ), INC( NINC )
1760 * .. Local Scalars ..
1761 REAL ALPHA, ALS, ERR, ERRMAX, TRANSL
1762 INTEGER I, IA, IC, IN, INCX, INCXS, IX, J, JA, JJ, LAA,
1763 $ LDA, LDAS, LJ, LX, N, NARGS, NC, NS
1764 LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER
1765 CHARACTER*1 UPLO, UPLOS
1767 * .. Local Arrays ..
1770 * .. External Functions ..
1772 EXTERNAL LSE, LSERES
1773 * .. External Subroutines ..
1774 EXTERNAL SMAKE, SMVCH, SSPR, SSYR
1775 * .. Intrinsic Functions ..
1777 * .. Scalars in Common ..
1778 INTEGER INFOT, NOUTC
1780 * .. Common blocks ..
1781 COMMON /INFOC/INFOT, NOUTC, OK, LERR
1782 * .. Data statements ..
1784 * .. Executable Statements ..
1785 FULL = SNAME( 3: 3 ).EQ.'Y'
1786 PACKED = SNAME( 3: 3 ).EQ.'P'
1787 * Define the number of arguments.
1790 ELSE IF( PACKED )THEN
1798 DO 100 IN = 1, NIDIM
1800 * Set LDA to 1 more than minimum value if room.
1804 * Skip tests if not enough room.
1808 LAA = ( N*( N + 1 ) )/2
1814 UPLO = ICH( IC: IC )
1821 * Generate the vector X.
1824 CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
1825 $ 0, N - 1, RESET, TRANSL )
1828 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
1833 NULL = N.LE.0.OR.ALPHA.EQ.ZERO
1835 * Generate the matrix A.
1838 CALL SMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX,
1839 $ AA, LDA, N - 1, N - 1, RESET, TRANSL )
1843 * Save every datum before calling the subroutine.
1857 * Call the subroutine.
1861 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
1865 CALL SSYR( UPLO, N, ALPHA, XX, INCX, AA, LDA )
1866 ELSE IF( PACKED )THEN
1868 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
1872 CALL SSPR( UPLO, N, ALPHA, XX, INCX, AA )
1875 * Check if error-exit was taken incorrectly.
1878 WRITE( NOUT, FMT = 9992 )
1883 * See what data changed inside subroutines.
1885 ISAME( 1 ) = UPLO.EQ.UPLOS
1886 ISAME( 2 ) = NS.EQ.N
1887 ISAME( 3 ) = ALS.EQ.ALPHA
1888 ISAME( 4 ) = LSE( XS, XX, LX )
1889 ISAME( 5 ) = INCXS.EQ.INCX
1891 ISAME( 6 ) = LSE( AS, AA, LAA )
1893 ISAME( 6 ) = LSERES( SNAME( 2: 3 ), UPLO, N, N, AS,
1896 IF( .NOT.PACKED )THEN
1897 ISAME( 7 ) = LDAS.EQ.LDA
1900 * If data was incorrectly changed, report and return.
1904 SAME = SAME.AND.ISAME( I )
1905 IF( .NOT.ISAME( I ) )
1906 $ WRITE( NOUT, FMT = 9998 )I
1915 * Check the result column by column.
1923 Z( I ) = X( N - I + 1 )
1936 CALL SMVCH( 'N', LJ, 1, ALPHA, Z( JJ ), LJ, W,
1937 $ 1, ONE, A( JJ, J ), 1, YT, G,
1938 $ AA( JA ), EPS, ERR, FATAL, NOUT,
1949 ERRMAX = MAX( ERRMAX, ERR )
1950 * If got really bad answer, report and return.
1955 * Avoid repeating tests if N.le.0.
1970 IF( ERRMAX.LT.THRESH )THEN
1971 WRITE( NOUT, FMT = 9999 )SNAME, NC
1973 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1978 WRITE( NOUT, FMT = 9995 )J
1981 WRITE( NOUT, FMT = 9996 )SNAME
1983 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, INCX, LDA
1984 ELSE IF( PACKED )THEN
1985 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, ALPHA, INCX
1991 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1993 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
1994 $ 'ANGED INCORRECTLY *******' )
1995 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
1996 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
1997 $ ' - SUSPECT *******' )
1998 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
1999 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
2000 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
2002 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
2003 $ I2, ', A,', I3, ') .' )
2004 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2010 SUBROUTINE SCHK6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
2011 $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX,
2012 $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G,
2015 * Tests SSYR2 and SSPR2.
2017 * Auxiliary routine for test program for Level 2 Blas.
2019 * -- Written on 10-August-1987.
2020 * Richard Hanson, Sandia National Labs.
2021 * Jeremy Du Croz, NAG Central Office.
2024 REAL ZERO, HALF, ONE
2025 PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
2026 * .. Scalar Arguments ..
2028 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
2029 LOGICAL FATAL, REWI, TRACE
2031 * .. Array Arguments ..
2032 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
2033 $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ),
2034 $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ),
2035 $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ),
2036 $ YY( NMAX*INCMAX ), Z( NMAX, 2 )
2037 INTEGER IDIM( NIDIM ), INC( NINC )
2038 * .. Local Scalars ..
2039 REAL ALPHA, ALS, ERR, ERRMAX, TRANSL
2040 INTEGER I, IA, IC, IN, INCX, INCXS, INCY, INCYS, IX,
2041 $ IY, J, JA, JJ, LAA, LDA, LDAS, LJ, LX, LY, N,
2043 LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER
2044 CHARACTER*1 UPLO, UPLOS
2046 * .. Local Arrays ..
2049 * .. External Functions ..
2051 EXTERNAL LSE, LSERES
2052 * .. External Subroutines ..
2053 EXTERNAL SMAKE, SMVCH, SSPR2, SSYR2
2054 * .. Intrinsic Functions ..
2056 * .. Scalars in Common ..
2057 INTEGER INFOT, NOUTC
2059 * .. Common blocks ..
2060 COMMON /INFOC/INFOT, NOUTC, OK, LERR
2061 * .. Data statements ..
2063 * .. Executable Statements ..
2064 FULL = SNAME( 3: 3 ).EQ.'Y'
2065 PACKED = SNAME( 3: 3 ).EQ.'P'
2066 * Define the number of arguments.
2069 ELSE IF( PACKED )THEN
2077 DO 140 IN = 1, NIDIM
2079 * Set LDA to 1 more than minimum value if room.
2083 * Skip tests if not enough room.
2087 LAA = ( N*( N + 1 ) )/2
2093 UPLO = ICH( IC: IC )
2100 * Generate the vector X.
2103 CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
2104 $ 0, N - 1, RESET, TRANSL )
2107 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
2114 * Generate the vector Y.
2117 CALL SMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
2118 $ ABS( INCY ), 0, N - 1, RESET, TRANSL )
2121 YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
2126 NULL = N.LE.0.OR.ALPHA.EQ.ZERO
2128 * Generate the matrix A.
2131 CALL SMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A,
2132 $ NMAX, AA, LDA, N - 1, N - 1, RESET,
2137 * Save every datum before calling the subroutine.
2155 * Call the subroutine.
2159 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
2160 $ ALPHA, INCX, INCY, LDA
2163 CALL SSYR2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
2165 ELSE IF( PACKED )THEN
2167 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
2171 CALL SSPR2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
2175 * Check if error-exit was taken incorrectly.
2178 WRITE( NOUT, FMT = 9992 )
2183 * See what data changed inside subroutines.
2185 ISAME( 1 ) = UPLO.EQ.UPLOS
2186 ISAME( 2 ) = NS.EQ.N
2187 ISAME( 3 ) = ALS.EQ.ALPHA
2188 ISAME( 4 ) = LSE( XS, XX, LX )
2189 ISAME( 5 ) = INCXS.EQ.INCX
2190 ISAME( 6 ) = LSE( YS, YY, LY )
2191 ISAME( 7 ) = INCYS.EQ.INCY
2193 ISAME( 8 ) = LSE( AS, AA, LAA )
2195 ISAME( 8 ) = LSERES( SNAME( 2: 3 ), UPLO, N, N,
2198 IF( .NOT.PACKED )THEN
2199 ISAME( 9 ) = LDAS.EQ.LDA
2202 * If data was incorrectly changed, report and return.
2206 SAME = SAME.AND.ISAME( I )
2207 IF( .NOT.ISAME( I ) )
2208 $ WRITE( NOUT, FMT = 9998 )I
2217 * Check the result column by column.
2225 Z( I, 1 ) = X( N - I + 1 )
2234 Z( I, 2 ) = Y( N - I + 1 )
2248 CALL SMVCH( 'N', LJ, 2, ALPHA, Z( JJ, 1 ),
2249 $ NMAX, W, 1, ONE, A( JJ, J ), 1,
2250 $ YT, G, AA( JA ), EPS, ERR, FATAL,
2261 ERRMAX = MAX( ERRMAX, ERR )
2262 * If got really bad answer, report and return.
2267 * Avoid repeating tests with N.le.0.
2284 IF( ERRMAX.LT.THRESH )THEN
2285 WRITE( NOUT, FMT = 9999 )SNAME, NC
2287 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
2292 WRITE( NOUT, FMT = 9995 )J
2295 WRITE( NOUT, FMT = 9996 )SNAME
2297 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, INCX,
2299 ELSE IF( PACKED )THEN
2300 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, ALPHA, INCX, INCY
2306 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
2308 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
2309 $ 'ANGED INCORRECTLY *******' )
2310 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
2311 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
2312 $ ' - SUSPECT *******' )
2313 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
2314 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
2315 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
2316 $ I2, ', Y,', I2, ', AP) .' )
2317 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
2318 $ I2, ', Y,', I2, ', A,', I3, ') .' )
2319 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2325 SUBROUTINE SCHKE( ISNUM, SRNAMT, NOUT )
2327 * Tests the error exits from the Level 2 Blas.
2328 * Requires a special version of the error-handling routine XERBLA.
2329 * ALPHA, BETA, A, X and Y should not need to be defined.
2331 * Auxiliary routine for test program for Level 2 Blas.
2333 * -- Written on 10-August-1987.
2334 * Richard Hanson, Sandia National Labs.
2335 * Jeremy Du Croz, NAG Central Office.
2337 * .. Scalar Arguments ..
2340 * .. Scalars in Common ..
2341 INTEGER INFOT, NOUTC
2343 * .. Local Scalars ..
2345 * .. Local Arrays ..
2346 REAL A( 1, 1 ), X( 1 ), Y( 1 )
2347 * .. External Subroutines ..
2348 EXTERNAL CHKXER, SGBMV, SGEMV, SGER, SSBMV, SSPMV, SSPR,
2349 $ SSPR2, SSYMV, SSYR, SSYR2, STBMV, STBSV, STPMV,
2350 $ STPSV, STRMV, STRSV
2351 * .. Common blocks ..
2352 COMMON /INFOC/INFOT, NOUTC, OK, LERR
2353 * .. Executable Statements ..
2354 * OK is set to .FALSE. by the special version of XERBLA or by CHKXER
2355 * if anything is wrong.
2357 * LERR is set to .TRUE. by the special version of XERBLA each time
2358 * it is called, and is then tested and re-set by CHKXER.
2360 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
2361 $ 90, 100, 110, 120, 130, 140, 150,
2364 CALL SGEMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2365 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2367 CALL SGEMV( 'N', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2368 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2370 CALL SGEMV( 'N', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2371 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2373 CALL SGEMV( 'N', 2, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2374 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2376 CALL SGEMV( 'N', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2377 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2379 CALL SGEMV( 'N', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2380 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2383 CALL SGBMV( '/', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2384 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2386 CALL SGBMV( 'N', -1, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2387 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2389 CALL SGBMV( 'N', 0, -1, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2390 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2392 CALL SGBMV( 'N', 0, 0, -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2393 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2395 CALL SGBMV( 'N', 2, 0, 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2396 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2398 CALL SGBMV( 'N', 0, 0, 1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2399 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2401 CALL SGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2402 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2404 CALL SGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2405 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2408 CALL SSYMV( '/', 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2409 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2411 CALL SSYMV( 'U', -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2412 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2414 CALL SSYMV( 'U', 2, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2415 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2417 CALL SSYMV( 'U', 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2418 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2420 CALL SSYMV( 'U', 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2421 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2424 CALL SSBMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2425 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2427 CALL SSBMV( 'U', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2428 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2430 CALL SSBMV( 'U', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2431 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2433 CALL SSBMV( 'U', 0, 1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2434 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2436 CALL SSBMV( 'U', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2437 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2439 CALL SSBMV( 'U', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2440 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2443 CALL SSPMV( '/', 0, ALPHA, A, X, 1, BETA, Y, 1 )
2444 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2446 CALL SSPMV( 'U', -1, ALPHA, A, X, 1, BETA, Y, 1 )
2447 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2449 CALL SSPMV( 'U', 0, ALPHA, A, X, 0, BETA, Y, 1 )
2450 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2452 CALL SSPMV( 'U', 0, ALPHA, A, X, 1, BETA, Y, 0 )
2453 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2456 CALL STRMV( '/', 'N', 'N', 0, A, 1, X, 1 )
2457 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2459 CALL STRMV( 'U', '/', 'N', 0, A, 1, X, 1 )
2460 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2462 CALL STRMV( 'U', 'N', '/', 0, A, 1, X, 1 )
2463 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2465 CALL STRMV( 'U', 'N', 'N', -1, A, 1, X, 1 )
2466 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2468 CALL STRMV( 'U', 'N', 'N', 2, A, 1, X, 1 )
2469 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2471 CALL STRMV( 'U', 'N', 'N', 0, A, 1, X, 0 )
2472 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2475 CALL STBMV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
2476 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2478 CALL STBMV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
2479 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2481 CALL STBMV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
2482 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2484 CALL STBMV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
2485 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2487 CALL STBMV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
2488 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2490 CALL STBMV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
2491 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2493 CALL STBMV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
2494 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2497 CALL STPMV( '/', 'N', 'N', 0, A, X, 1 )
2498 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2500 CALL STPMV( 'U', '/', 'N', 0, A, X, 1 )
2501 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2503 CALL STPMV( 'U', 'N', '/', 0, A, X, 1 )
2504 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2506 CALL STPMV( 'U', 'N', 'N', -1, A, X, 1 )
2507 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2509 CALL STPMV( 'U', 'N', 'N', 0, A, X, 0 )
2510 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2513 CALL STRSV( '/', 'N', 'N', 0, A, 1, X, 1 )
2514 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2516 CALL STRSV( 'U', '/', 'N', 0, A, 1, X, 1 )
2517 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2519 CALL STRSV( 'U', 'N', '/', 0, A, 1, X, 1 )
2520 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2522 CALL STRSV( 'U', 'N', 'N', -1, A, 1, X, 1 )
2523 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2525 CALL STRSV( 'U', 'N', 'N', 2, A, 1, X, 1 )
2526 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2528 CALL STRSV( 'U', 'N', 'N', 0, A, 1, X, 0 )
2529 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2532 CALL STBSV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
2533 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2535 CALL STBSV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
2536 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2538 CALL STBSV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
2539 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2541 CALL STBSV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
2542 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2544 CALL STBSV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
2545 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2547 CALL STBSV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
2548 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2550 CALL STBSV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
2551 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2554 CALL STPSV( '/', 'N', 'N', 0, A, X, 1 )
2555 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2557 CALL STPSV( 'U', '/', 'N', 0, A, X, 1 )
2558 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2560 CALL STPSV( 'U', 'N', '/', 0, A, X, 1 )
2561 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2563 CALL STPSV( 'U', 'N', 'N', -1, A, X, 1 )
2564 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2566 CALL STPSV( 'U', 'N', 'N', 0, A, X, 0 )
2567 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2570 CALL SGER( -1, 0, ALPHA, X, 1, Y, 1, A, 1 )
2571 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2573 CALL SGER( 0, -1, ALPHA, X, 1, Y, 1, A, 1 )
2574 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2576 CALL SGER( 0, 0, ALPHA, X, 0, Y, 1, A, 1 )
2577 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2579 CALL SGER( 0, 0, ALPHA, X, 1, Y, 0, A, 1 )
2580 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2582 CALL SGER( 2, 0, ALPHA, X, 1, Y, 1, A, 1 )
2583 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2586 CALL SSYR( '/', 0, ALPHA, X, 1, A, 1 )
2587 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2589 CALL SSYR( 'U', -1, ALPHA, X, 1, A, 1 )
2590 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2592 CALL SSYR( 'U', 0, ALPHA, X, 0, A, 1 )
2593 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2595 CALL SSYR( 'U', 2, ALPHA, X, 1, A, 1 )
2596 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2599 CALL SSPR( '/', 0, ALPHA, X, 1, A )
2600 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2602 CALL SSPR( 'U', -1, ALPHA, X, 1, A )
2603 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2605 CALL SSPR( 'U', 0, ALPHA, X, 0, A )
2606 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2609 CALL SSYR2( '/', 0, ALPHA, X, 1, Y, 1, A, 1 )
2610 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2612 CALL SSYR2( 'U', -1, ALPHA, X, 1, Y, 1, A, 1 )
2613 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2615 CALL SSYR2( 'U', 0, ALPHA, X, 0, Y, 1, A, 1 )
2616 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2618 CALL SSYR2( 'U', 0, ALPHA, X, 1, Y, 0, A, 1 )
2619 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2621 CALL SSYR2( 'U', 2, ALPHA, X, 1, Y, 1, A, 1 )
2622 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2625 CALL SSPR2( '/', 0, ALPHA, X, 1, Y, 1, A )
2626 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2628 CALL SSPR2( 'U', -1, ALPHA, X, 1, Y, 1, A )
2629 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2631 CALL SSPR2( 'U', 0, ALPHA, X, 0, Y, 1, A )
2632 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2634 CALL SSPR2( 'U', 0, ALPHA, X, 1, Y, 0, A )
2635 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2638 WRITE( NOUT, FMT = 9999 )SRNAMT
2640 WRITE( NOUT, FMT = 9998 )SRNAMT
2644 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2645 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2651 SUBROUTINE SMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL,
2652 $ KU, RESET, TRANSL )
2654 * Generates values for an M by N matrix A within the bandwidth
2655 * defined by KL and KU.
2656 * Stores the values in the array AA in the data structure required
2657 * by the routine, with unwanted elements set to rogue value.
2659 * TYPE is 'GE', 'GB', 'SY', 'SB', 'SP', 'TR', 'TB' OR 'TP'.
2661 * Auxiliary routine for test program for Level 2 Blas.
2663 * -- Written on 10-August-1987.
2664 * Richard Hanson, Sandia National Labs.
2665 * Jeremy Du Croz, NAG Central Office.
2669 PARAMETER ( ZERO = 0.0, ONE = 1.0 )
2671 PARAMETER ( ROGUE = -1.0E10 )
2672 * .. Scalar Arguments ..
2674 INTEGER KL, KU, LDA, M, N, NMAX
2676 CHARACTER*1 DIAG, UPLO
2678 * .. Array Arguments ..
2679 REAL A( NMAX, * ), AA( * )
2680 * .. Local Scalars ..
2681 INTEGER I, I1, I2, I3, IBEG, IEND, IOFF, J, KK
2682 LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER
2683 * .. External Functions ..
2686 * .. Intrinsic Functions ..
2688 * .. Executable Statements ..
2689 GEN = TYPE( 1: 1 ).EQ.'G'
2690 SYM = TYPE( 1: 1 ).EQ.'S'
2691 TRI = TYPE( 1: 1 ).EQ.'T'
2692 UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U'
2693 LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L'
2694 UNIT = TRI.AND.DIAG.EQ.'U'
2696 * Generate data in array A.
2700 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2702 IF( ( I.LE.J.AND.J - I.LE.KU ).OR.
2703 $ ( I.GE.J.AND.I - J.LE.KL ) )THEN
2704 A( I, J ) = SBEG( RESET ) + TRANSL
2710 A( J, I ) = A( I, J )
2718 $ A( J, J ) = A( J, J ) + ONE
2723 * Store elements in array AS in data structure required by routine.
2725 IF( TYPE.EQ.'GE' )THEN
2728 AA( I + ( J - 1 )*LDA ) = A( I, J )
2730 DO 40 I = M + 1, LDA
2731 AA( I + ( J - 1 )*LDA ) = ROGUE
2734 ELSE IF( TYPE.EQ.'GB' )THEN
2736 DO 60 I1 = 1, KU + 1 - J
2737 AA( I1 + ( J - 1 )*LDA ) = ROGUE
2739 DO 70 I2 = I1, MIN( KL + KU + 1, KU + 1 + M - J )
2740 AA( I2 + ( J - 1 )*LDA ) = A( I2 + J - KU - 1, J )
2743 AA( I3 + ( J - 1 )*LDA ) = ROGUE
2746 ELSE IF( TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
2763 DO 100 I = 1, IBEG - 1
2764 AA( I + ( J - 1 )*LDA ) = ROGUE
2766 DO 110 I = IBEG, IEND
2767 AA( I + ( J - 1 )*LDA ) = A( I, J )
2769 DO 120 I = IEND + 1, LDA
2770 AA( I + ( J - 1 )*LDA ) = ROGUE
2773 ELSE IF( TYPE.EQ.'SB'.OR.TYPE.EQ.'TB' )THEN
2777 IBEG = MAX( 1, KL + 2 - J )
2790 IEND = MIN( KL + 1, 1 + M - J )
2792 DO 140 I = 1, IBEG - 1
2793 AA( I + ( J - 1 )*LDA ) = ROGUE
2795 DO 150 I = IBEG, IEND
2796 AA( I + ( J - 1 )*LDA ) = A( I + J - KK, J )
2798 DO 160 I = IEND + 1, LDA
2799 AA( I + ( J - 1 )*LDA ) = ROGUE
2802 ELSE IF( TYPE.EQ.'SP'.OR.TYPE.EQ.'TP' )THEN
2812 DO 180 I = IBEG, IEND
2814 AA( IOFF ) = A( I, J )
2817 $ AA( IOFF ) = ROGUE
2827 SUBROUTINE SMVCH( TRANS, M, N, ALPHA, A, NMAX, X, INCX, BETA, Y,
2828 $ INCY, YT, G, YY, EPS, ERR, FATAL, NOUT, MV )
2830 * Checks the results of the computational tests.
2832 * Auxiliary routine for test program for Level 2 Blas.
2834 * -- Written on 10-August-1987.
2835 * Richard Hanson, Sandia National Labs.
2836 * Jeremy Du Croz, NAG Central Office.
2840 PARAMETER ( ZERO = 0.0, ONE = 1.0 )
2841 * .. Scalar Arguments ..
2842 REAL ALPHA, BETA, EPS, ERR
2843 INTEGER INCX, INCY, M, N, NMAX, NOUT
2846 * .. Array Arguments ..
2847 REAL A( NMAX, * ), G( * ), X( * ), Y( * ), YT( * ),
2849 * .. Local Scalars ..
2851 INTEGER I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL
2853 * .. Intrinsic Functions ..
2854 INTRINSIC ABS, MAX, SQRT
2855 * .. Executable Statements ..
2856 TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
2879 * Compute expected result in YT using data in A, X and Y.
2880 * Compute gauges in G.
2889 YT( IY ) = YT( IY ) + A( J, I )*X( JX )
2890 G( IY ) = G( IY ) + ABS( A( J, I )*X( JX ) )
2895 YT( IY ) = YT( IY ) + A( I, J )*X( JX )
2896 G( IY ) = G( IY ) + ABS( A( I, J )*X( JX ) )
2900 YT( IY ) = ALPHA*YT( IY ) + BETA*Y( IY )
2901 G( IY ) = ABS( ALPHA )*G( IY ) + ABS( BETA*Y( IY ) )
2905 * Compute the error ratio for this result.
2909 ERRI = ABS( YT( I ) - YY( 1 + ( I - 1 )*ABS( INCY ) ) )/EPS
2910 IF( G( I ).NE.ZERO )
2911 $ ERRI = ERRI/G( I )
2912 ERR = MAX( ERR, ERRI )
2913 IF( ERR*SQRT( EPS ).GE.ONE )
2916 * If the loop completes, all results are at least half accurate.
2919 * Report fatal error.
2922 WRITE( NOUT, FMT = 9999 )
2925 WRITE( NOUT, FMT = 9998 )I, YT( I ),
2926 $ YY( 1 + ( I - 1 )*ABS( INCY ) )
2928 WRITE( NOUT, FMT = 9998 )I,
2929 $ YY( 1 + ( I - 1 )*ABS( INCY ) ), YT(I)
2936 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2937 $ 'F ACCURATE *******', /' EXPECTED RESULT COMPU',
2939 9998 FORMAT( 1X, I7, 2G18.6 )
2944 LOGICAL FUNCTION LSE( RI, RJ, LR )
2946 * Tests if two arrays are identical.
2948 * Auxiliary routine for test program for Level 2 Blas.
2950 * -- Written on 10-August-1987.
2951 * Richard Hanson, Sandia National Labs.
2952 * Jeremy Du Croz, NAG Central Office.
2954 * .. Scalar Arguments ..
2956 * .. Array Arguments ..
2957 REAL RI( * ), RJ( * )
2958 * .. Local Scalars ..
2960 * .. Executable Statements ..
2962 IF( RI( I ).NE.RJ( I ) )
2974 LOGICAL FUNCTION LSERES( TYPE, UPLO, M, N, AA, AS, LDA )
2976 * Tests if selected elements in two arrays are equal.
2978 * TYPE is 'GE', 'SY' or 'SP'.
2980 * Auxiliary routine for test program for Level 2 Blas.
2982 * -- Written on 10-August-1987.
2983 * Richard Hanson, Sandia National Labs.
2984 * Jeremy Du Croz, NAG Central Office.
2986 * .. Scalar Arguments ..
2990 * .. Array Arguments ..
2991 REAL AA( LDA, * ), AS( LDA, * )
2992 * .. Local Scalars ..
2993 INTEGER I, IBEG, IEND, J
2995 * .. Executable Statements ..
2997 IF( TYPE.EQ.'GE' )THEN
2999 DO 10 I = M + 1, LDA
3000 IF( AA( I, J ).NE.AS( I, J ) )
3004 ELSE IF( TYPE.EQ.'SY' )THEN
3013 DO 30 I = 1, IBEG - 1
3014 IF( AA( I, J ).NE.AS( I, J ) )
3017 DO 40 I = IEND + 1, LDA
3018 IF( AA( I, J ).NE.AS( I, J ) )
3033 REAL FUNCTION SBEG( RESET )
3035 * Generates random numbers uniformly distributed between -0.5 and 0.5.
3037 * Auxiliary routine for test program for Level 2 Blas.
3039 * -- Written on 10-August-1987.
3040 * Richard Hanson, Sandia National Labs.
3041 * Jeremy Du Croz, NAG Central Office.
3043 * .. Scalar Arguments ..
3045 * .. Local Scalars ..
3047 * .. Save statement ..
3049 * .. Intrinsic Functions ..
3051 * .. Executable Statements ..
3053 * Initialize local variables.
3060 * The sequence of values of I is bounded between 1 and 999.
3061 * If initial I = 1,2,3,6,7 or 9, the period will be 50.
3062 * If initial I = 4 or 8, the period will be 25.
3063 * If initial I = 5, the period will be 10.
3064 * IC is used to break up the period by skipping 1 value of I in 6.
3068 I = I - 1000*( I/1000 )
3073 SBEG = REAL( I - 500 )/1001.0
3079 REAL FUNCTION SDIFF( X, Y )
3081 * Auxiliary routine for test program for Level 2 Blas.
3083 * -- Written on 10-August-1987.
3084 * Richard Hanson, Sandia National Labs.
3086 * .. Scalar Arguments ..
3088 * .. Executable Statements ..
3095 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3097 * Tests whether XERBLA has detected an error when it should.
3099 * Auxiliary routine for test program for Level 2 Blas.
3101 * -- Written on 10-August-1987.
3102 * Richard Hanson, Sandia National Labs.
3103 * Jeremy Du Croz, NAG Central Office.
3105 * .. Scalar Arguments ..
3109 * .. Executable Statements ..
3111 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3117 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3118 $ 'ETECTED BY ', A6, ' *****' )
3123 SUBROUTINE XERBLA( SRNAME, INFO )
3125 * This is a special version of XERBLA to be used only as part of
3126 * the test program for testing error exits from the Level 2 BLAS
3129 * XERBLA is an error handler for the Level 2 BLAS routines.
3131 * It is called by the Level 2 BLAS routines if an input parameter is
3134 * Auxiliary routine for test program for Level 2 Blas.
3136 * -- Written on 10-August-1987.
3137 * Richard Hanson, Sandia National Labs.
3138 * Jeremy Du Croz, NAG Central Office.
3140 * .. Scalar Arguments ..
3143 * .. Scalars in Common ..
3147 * .. Common blocks ..
3148 COMMON /INFOC/INFOT, NOUT, OK, LERR
3149 COMMON /SRNAMC/SRNAMT
3150 * .. Executable Statements ..
3152 IF( INFO.NE.INFOT )THEN
3153 IF( INFOT.NE.0 )THEN
3154 WRITE( NOUT, FMT = 9999 )INFO, INFOT
3156 WRITE( NOUT, FMT = 9997 )INFO
3160 IF( SRNAME.NE.SRNAMT )THEN
3161 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3166 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
3167 $ ' OF ', I2, ' *******' )
3168 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
3169 $ 'AD OF ', A6, ' *******' )
3170 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,