Merge pull request #3709 from nursik/develop
[platform/upstream/openblas.git] / test / sblat2.f
1 *> \brief \b SBLAT2
2 *
3 *  =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at
6 *            http://www.netlib.org/lapack/explore-html/
7 *
8 *  Definition:
9 *  ===========
10 *
11 *       PROGRAM SBLAT2
12 *
13 *
14 *> \par Purpose:
15 *  =============
16 *>
17 *> \verbatim
18 *>
19 *> Test program for the REAL Level 2 Blas.
20 *>
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.
60 *>
61 *> Further Details
62 *> ===============
63 *>
64 *>    See:
65 *>
66 *>       Dongarra J. J., Du Croz J. J., Hammarling S.  and Hanson R. J..
67 *>       An  extended  set of Fortran  Basic Linear Algebra Subprograms.
68 *>
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.
72 *>
73 *>       Or
74 *>
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.
79 *>
80 *>
81 *> -- Written on 10-August-1987.
82 *>    Richard Hanson, Sandia National Labs.
83 *>    Jeremy Du Croz, NAG Central Office.
84 *>
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)
88 *> \endverbatim
89 *
90 *  Authors:
91 *  ========
92 *
93 *> \author Univ. of Tennessee
94 *> \author Univ. of California Berkeley
95 *> \author Univ. of Colorado Denver
96 *> \author NAG Ltd.
97 *
98 *> \date April 2012
99 *
100 *> \ingroup single_blas_testing
101 *
102 *  =====================================================================
103       PROGRAM SBLAT2
104 *
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..--
108 *     April 2012
109 *
110 *  =====================================================================
111 *
112 *     .. Parameters ..
113       INTEGER            NIN
114       PARAMETER          ( NIN = 5 )
115       INTEGER            NSUBS
116       PARAMETER          ( NSUBS = 16 )
117       REAL               ZERO, ONE
118       PARAMETER          ( ZERO = 0.0, ONE = 1.0 )
119       INTEGER            NMAX, INCMAX
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,
127      $                   NOUT, NTRA
128       LOGICAL            FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
129      $                   TSTERR
130       CHARACTER*1        TRANS
131       CHARACTER*6        SNAMET
132       CHARACTER*32       SNAPS, SUMMRY
133 *     .. Local Arrays ..
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 ..
144       REAL               SDIFF
145       LOGICAL            LSE
146       EXTERNAL           SDIFF, LSE
147 *     .. External Subroutines ..
148       EXTERNAL           SCHK1, SCHK2, SCHK3, SCHK4, SCHK5, SCHK6,
149      $                   SCHKE, SMVCH
150 *     .. Intrinsic Functions ..
151       INTRINSIC          ABS, MAX, MIN
152 *     .. Scalars in Common ..
153       INTEGER            INFOT, NOUTC
154       LOGICAL            LERR, OK
155       CHARACTER*6        SRNAMT
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 ..
165 *
166 *     Read name and unit number for summary output file and open file.
167 *
168       READ( NIN, FMT = * )SUMMRY
169       READ( NIN, FMT = * )NOUT
170       OPEN( NOUT, FILE = SUMMRY, STATUS = 'UNKNOWN' )
171       NOUTC = NOUT
172 *
173 *     Read name and unit number for snapshot output file and open file.
174 *
175       READ( NIN, FMT = * )SNAPS
176       READ( NIN, FMT = * )NTRA
177       TRACE = NTRA.GE.0
178       IF( TRACE )THEN
179          OPEN( NTRA, FILE = SNAPS, STATUS = 'UNKNOWN' )
180       END IF
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
190 *
191 *     Read and check the parameter values for the tests.
192 *
193 *     Values of N
194       READ( NIN, FMT = * )NIDIM
195       IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
196          WRITE( NOUT, FMT = 9997 )'N', NIDMAX
197          GO TO 230
198       END IF
199       READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
200       DO 10 I = 1, NIDIM
201          IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
202             WRITE( NOUT, FMT = 9996 )NMAX
203             GO TO 230
204          END IF
205    10 CONTINUE
206 *     Values of K
207       READ( NIN, FMT = * )NKB
208       IF( NKB.LT.1.OR.NKB.GT.NKBMAX )THEN
209          WRITE( NOUT, FMT = 9997 )'K', NKBMAX
210          GO TO 230
211       END IF
212       READ( NIN, FMT = * )( KB( I ), I = 1, NKB )
213       DO 20 I = 1, NKB
214          IF( KB( I ).LT.0 )THEN
215             WRITE( NOUT, FMT = 9995 )
216             GO TO 230
217          END IF
218    20 CONTINUE
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
223          GO TO 230
224       END IF
225       READ( NIN, FMT = * )( INC( I ), I = 1, NINC )
226       DO 30 I = 1, NINC
227          IF( INC( I ).EQ.0.OR.ABS( INC( I ) ).GT.INCMAX )THEN
228             WRITE( NOUT, FMT = 9994 )INCMAX
229             GO TO 230
230          END IF
231    30 CONTINUE
232 *     Values of ALPHA
233       READ( NIN, FMT = * )NALF
234       IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
235          WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
236          GO TO 230
237       END IF
238       READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
239 *     Values of BETA
240       READ( NIN, FMT = * )NBET
241       IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
242          WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
243          GO TO 230
244       END IF
245       READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
246 *
247 *     Report values of parameters.
248 *
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 )
258       END IF
259       WRITE( NOUT, FMT = * )
260       WRITE( NOUT, FMT = 9999 )THRESH
261       WRITE( NOUT, FMT = * )
262 *
263 *     Read names of subroutines and flags which indicate
264 *     whether they are to be tested.
265 *
266       DO 40 I = 1, NSUBS
267          LTEST( I ) = .FALSE.
268    40 CONTINUE
269    50 READ( NIN, FMT = 9984, END = 80 )SNAMET, LTESTT
270       DO 60 I = 1, NSUBS
271          IF( SNAMET.EQ.SNAMES( I ) )
272      $      GO TO 70
273    60 CONTINUE
274       WRITE( NOUT, FMT = 9986 )SNAMET
275       STOP
276    70 LTEST( I ) = LTESTT
277       GO TO 50
278 *
279    80 CONTINUE
280       CLOSE ( NIN )
281 *
282 *     Compute EPS (the machine precision).
283 *
284       EPS = EPSILON(ZERO)
285       WRITE( NOUT, FMT = 9998 )EPS
286 *
287 *     Check the reliability of SMVCH using exact data.
288 *
289       N = MIN( 32, NMAX )
290       DO 120 J = 1, N
291          DO 110 I = 1, N
292             A( I, J ) = MAX( I - J + 1, 0 )
293   110    CONTINUE
294          X( J ) = J
295          Y( J ) = ZERO
296   120 CONTINUE
297       DO 130 J = 1, N
298          YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
299   130 CONTINUE
300 *     YY holds the exact result. On exit from SMVCH YT holds
301 *     the result computed by SMVCH.
302       TRANS = 'N'
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
308          STOP
309       END IF
310       TRANS = 'T'
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
316          STOP
317       END IF
318 *
319 *     Test each subroutine in turn.
320 *
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 )
326          ELSE
327             SRNAMT = SNAMES( ISNUM )
328 *           Test error exits.
329             IF( TSTERR )THEN
330                CALL SCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
331                WRITE( NOUT, FMT = * )
332             END IF
333 *           Test computations.
334             INFOT = 0
335             OK = .TRUE.
336             FATAL = .FALSE.
337             GO TO ( 140, 140, 150, 150, 150, 160, 160,
338      $              160, 160, 160, 160, 170, 180, 180,
339      $              190, 190 )ISNUM
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 )
345             GO TO 200
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 )
351             GO TO 200
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 )
357             GO TO 200
358 *           Test SGER, 12.
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,
362      $                  YT, G, Z )
363             GO TO 200
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,
368      $                  YT, G, Z )
369             GO TO 200
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,
374      $                  YT, G, Z )
375 *
376   200       IF( FATAL.AND.SFATAL )
377      $         GO TO 220
378          END IF
379   210 CONTINUE
380       WRITE( NOUT, FMT = 9982 )
381       GO TO 240
382 *
383   220 CONTINUE
384       WRITE( NOUT, FMT = 9981 )
385       GO TO 240
386 *
387   230 CONTINUE
388       WRITE( NOUT, FMT = 9987 )
389 *
390   240 CONTINUE
391       IF( TRACE )
392      $   CLOSE ( NTRA )
393       CLOSE ( NOUT )
394       STOP
395 *
396  9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
397      $      'S THAN', F8.2 )
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 ',
400      $      'THAN ', I2 )
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 ',
404      $      I2 )
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' )
426 *
427 *     End of SBLAT2.
428 *
429       END
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 )
434 *
435 *  Tests SGEMV and SGBMV.
436 *
437 *  Auxiliary routine for test program for Level 2 Blas.
438 *
439 *  -- Written on 10-August-1987.
440 *     Richard Hanson, Sandia National Labs.
441 *     Jeremy Du Croz, NAG Central Office.
442 *
443 *     .. Parameters ..
444       REAL               ZERO, HALF
445       PARAMETER          ( ZERO = 0.0, HALF = 0.5 )
446 *     .. Scalar Arguments ..
447       REAL               EPS, THRESH
448       INTEGER            INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,
449      $                   NOUT, NTRA
450       LOGICAL            FATAL, REWI, TRACE
451       CHARACTER*6        SNAME
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 ),
458      $                   YY( NMAX*INCMAX )
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,
465      $                   NL, NS
466       LOGICAL            BANDED, FULL, NULL, RESET, SAME, TRAN
467       CHARACTER*1        TRANS, TRANSS
468       CHARACTER*3        ICH
469 *     .. Local Arrays ..
470       LOGICAL            ISAME( 13 )
471 *     .. External Functions ..
472       LOGICAL            LSE, LSERES
473       EXTERNAL           LSE, LSERES
474 *     .. External Subroutines ..
475       EXTERNAL           SGBMV, SGEMV, SMAKE, SMVCH
476 *     .. Intrinsic Functions ..
477       INTRINSIC          ABS, MAX, MIN
478 *     .. Scalars in Common ..
479       INTEGER            INFOT, NOUTC
480       LOGICAL            LERR, OK
481 *     .. Common blocks ..
482       COMMON             /INFOC/INFOT, NOUTC, OK, LERR
483 *     .. Data statements ..
484       DATA               ICH/'NTC'/
485 *     .. Executable Statements ..
486       FULL = SNAME( 3: 3 ).EQ.'E'
487       BANDED = SNAME( 3: 3 ).EQ.'B'
488 *     Define the number of arguments.
489       IF( FULL )THEN
490          NARGS = 11
491       ELSE IF( BANDED )THEN
492          NARGS = 13
493       END IF
494 *
495       NC = 0
496       RESET = .TRUE.
497       ERRMAX = ZERO
498 *
499       DO 120 IN = 1, NIDIM
500          N = IDIM( IN )
501          ND = N/2 + 1
502 *
503          DO 110 IM = 1, 2
504             IF( IM.EQ.1 )
505      $         M = MAX( N - ND, 0 )
506             IF( IM.EQ.2 )
507      $         M = MIN( N + ND, NMAX )
508 *
509             IF( BANDED )THEN
510                NK = NKB
511             ELSE
512                NK = 1
513             END IF
514             DO 100 IKU = 1, NK
515                IF( BANDED )THEN
516                   KU = KB( IKU )
517                   KL = MAX( KU - 1, 0 )
518                ELSE
519                   KU = N - 1
520                   KL = M - 1
521                END IF
522 *              Set LDA to 1 more than minimum value if room.
523                IF( BANDED )THEN
524                   LDA = KL + KU + 1
525                ELSE
526                   LDA = M
527                END IF
528                IF( LDA.LT.NMAX )
529      $            LDA = LDA + 1
530 *              Skip tests if not enough room.
531                IF( LDA.GT.NMAX )
532      $            GO TO 100
533                LAA = LDA*N
534                NULL = N.LE.0.OR.M.LE.0
535 *
536 *              Generate the matrix A.
537 *
538                TRANSL = ZERO
539                CALL SMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX, AA,
540      $                     LDA, KL, KU, RESET, TRANSL )
541 *
542                DO 90 IC = 1, 3
543                   TRANS = ICH( IC: IC )
544                   TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
545 *
546                   IF( TRAN )THEN
547                      ML = N
548                      NL = M
549                   ELSE
550                      ML = M
551                      NL = N
552                   END IF
553 *
554                   DO 80 IX = 1, NINC
555                      INCX = INC( IX )
556                      LX = ABS( INCX )*NL
557 *
558 *                    Generate the vector X.
559 *
560                      TRANSL = HALF
561                      CALL SMAKE( 'GE', ' ', ' ', 1, NL, X, 1, XX,
562      $                           ABS( INCX ), 0, NL - 1, RESET, TRANSL )
563                      IF( NL.GT.1 )THEN
564                         X( NL/2 ) = ZERO
565                         XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO
566                      END IF
567 *
568                      DO 70 IY = 1, NINC
569                         INCY = INC( IY )
570                         LY = ABS( INCY )*ML
571 *
572                         DO 60 IA = 1, NALF
573                            ALPHA = ALF( IA )
574 *
575                            DO 50 IB = 1, NBET
576                               BETA = BET( IB )
577 *
578 *                             Generate the vector Y.
579 *
580                               TRANSL = ZERO
581                               CALL SMAKE( 'GE', ' ', ' ', 1, ML, Y, 1,
582      $                                    YY, ABS( INCY ), 0, ML - 1,
583      $                                    RESET, TRANSL )
584 *
585                               NC = NC + 1
586 *
587 *                             Save every datum before calling the
588 *                             subroutine.
589 *
590                               TRANSS = TRANS
591                               MS = M
592                               NS = N
593                               KLS = KL
594                               KUS = KU
595                               ALS = ALPHA
596                               DO 10 I = 1, LAA
597                                  AS( I ) = AA( I )
598    10                         CONTINUE
599                               LDAS = LDA
600                               DO 20 I = 1, LX
601                                  XS( I ) = XX( I )
602    20                         CONTINUE
603                               INCXS = INCX
604                               BLS = BETA
605                               DO 30 I = 1, LY
606                                  YS( I ) = YY( I )
607    30                         CONTINUE
608                               INCYS = INCY
609 *
610 *                             Call the subroutine.
611 *
612                               IF( FULL )THEN
613                                  IF( TRACE )
614      $                              WRITE( NTRA, FMT = 9994 )NC, SNAME,
615      $                              TRANS, M, N, ALPHA, LDA, INCX, BETA,
616      $                              INCY
617                                  IF( REWI )
618      $                              REWIND NTRA
619                                  CALL SGEMV( TRANS, M, N, ALPHA, AA,
620      $                                       LDA, XX, INCX, BETA, YY,
621      $                                       INCY )
622                               ELSE IF( BANDED )THEN
623                                  IF( TRACE )
624      $                              WRITE( NTRA, FMT = 9995 )NC, SNAME,
625      $                              TRANS, M, N, KL, KU, ALPHA, LDA,
626      $                              INCX, BETA, INCY
627                                  IF( REWI )
628      $                              REWIND NTRA
629                                  CALL SGBMV( TRANS, M, N, KL, KU, ALPHA,
630      $                                       AA, LDA, XX, INCX, BETA,
631      $                                       YY, INCY )
632                               END IF
633 *
634 *                             Check if error-exit was taken incorrectly.
635 *
636                               IF( .NOT.OK )THEN
637                                  WRITE( NOUT, FMT = 9993 )
638                                  FATAL = .TRUE.
639                                  GO TO 130
640                               END IF
641 *
642 *                             See what data changed inside subroutines.
643 *
644                               ISAME( 1 ) = TRANS.EQ.TRANSS
645                               ISAME( 2 ) = MS.EQ.M
646                               ISAME( 3 ) = NS.EQ.N
647                               IF( FULL )THEN
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
654                                  IF( NULL )THEN
655                                     ISAME( 10 ) = LSE( YS, YY, LY )
656                                  ELSE
657                                     ISAME( 10 ) = LSERES( 'GE', ' ', 1,
658      $                                            ML, YS, YY,
659      $                                            ABS( INCY ) )
660                                  END IF
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
671                                  IF( NULL )THEN
672                                     ISAME( 12 ) = LSE( YS, YY, LY )
673                                  ELSE
674                                     ISAME( 12 ) = LSERES( 'GE', ' ', 1,
675      $                                            ML, YS, YY,
676      $                                            ABS( INCY ) )
677                                  END IF
678                                  ISAME( 13 ) = INCYS.EQ.INCY
679                               END IF
680 *
681 *                             If data was incorrectly changed, report
682 *                             and return.
683 *
684                               SAME = .TRUE.
685                               DO 40 I = 1, NARGS
686                                  SAME = SAME.AND.ISAME( I )
687                                  IF( .NOT.ISAME( I ) )
688      $                              WRITE( NOUT, FMT = 9998 )I
689    40                         CONTINUE
690                               IF( .NOT.SAME )THEN
691                                  FATAL = .TRUE.
692                                  GO TO 130
693                               END IF
694 *
695                               IF( .NOT.NULL )THEN
696 *
697 *                                Check the result.
698 *
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
705 *                                return.
706                                  IF( FATAL )
707      $                              GO TO 130
708                               ELSE
709 *                                Avoid repeating tests with M.le.0 or
710 *                                N.le.0.
711                                  GO TO 110
712                               END IF
713 *
714    50                      CONTINUE
715 *
716    60                   CONTINUE
717 *
718    70                CONTINUE
719 *
720    80             CONTINUE
721 *
722    90          CONTINUE
723 *
724   100       CONTINUE
725 *
726   110    CONTINUE
727 *
728   120 CONTINUE
729 *
730 *     Report result.
731 *
732       IF( ERRMAX.LT.THRESH )THEN
733          WRITE( NOUT, FMT = 9999 )SNAME, NC
734       ELSE
735          WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
736       END IF
737       GO TO 140
738 *
739   130 CONTINUE
740       WRITE( NOUT, FMT = 9996 )SNAME
741       IF( FULL )THEN
742          WRITE( NOUT, FMT = 9994 )NC, SNAME, TRANS, M, N, ALPHA, LDA,
743      $      INCX, BETA, INCY
744       ELSE IF( BANDED )THEN
745          WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANS, M, N, KL, KU,
746      $      ALPHA, LDA, INCX, BETA, INCY
747       END IF
748 *
749   140 CONTINUE
750       RETURN
751 *
752  9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
753      $      'S)' )
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,
764      $      ')         .' )
765  9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
766      $      '******' )
767 *
768 *     End of SCHK1.
769 *
770       END
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 )
775 *
776 *  Tests SSYMV, SSBMV and SSPMV.
777 *
778 *  Auxiliary routine for test program for Level 2 Blas.
779 *
780 *  -- Written on 10-August-1987.
781 *     Richard Hanson, Sandia National Labs.
782 *     Jeremy Du Croz, NAG Central Office.
783 *
784 *     .. Parameters ..
785       REAL               ZERO, HALF
786       PARAMETER          ( ZERO = 0.0, HALF = 0.5 )
787 *     .. Scalar Arguments ..
788       REAL               EPS, THRESH
789       INTEGER            INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,
790      $                   NOUT, NTRA
791       LOGICAL            FATAL, REWI, TRACE
792       CHARACTER*6        SNAME
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 ),
799      $                   YY( NMAX*INCMAX )
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
808       CHARACTER*2        ICH
809 *     .. Local Arrays ..
810       LOGICAL            ISAME( 13 )
811 *     .. External Functions ..
812       LOGICAL            LSE, LSERES
813       EXTERNAL           LSE, LSERES
814 *     .. External Subroutines ..
815       EXTERNAL           SMAKE, SMVCH, SSBMV, SSPMV, SSYMV
816 *     .. Intrinsic Functions ..
817       INTRINSIC          ABS, MAX
818 *     .. Scalars in Common ..
819       INTEGER            INFOT, NOUTC
820       LOGICAL            LERR, OK
821 *     .. Common blocks ..
822       COMMON             /INFOC/INFOT, NOUTC, OK, LERR
823 *     .. Data statements ..
824       DATA               ICH/'UL'/
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.
830       IF( FULL )THEN
831          NARGS = 10
832       ELSE IF( BANDED )THEN
833          NARGS = 11
834       ELSE IF( PACKED )THEN
835          NARGS = 9
836       END IF
837 *
838       NC = 0
839       RESET = .TRUE.
840       ERRMAX = ZERO
841 *
842       DO 110 IN = 1, NIDIM
843          N = IDIM( IN )
844 *
845          IF( BANDED )THEN
846             NK = NKB
847          ELSE
848             NK = 1
849          END IF
850          DO 100 IK = 1, NK
851             IF( BANDED )THEN
852                K = KB( IK )
853             ELSE
854                K = N - 1
855             END IF
856 *           Set LDA to 1 more than minimum value if room.
857             IF( BANDED )THEN
858                LDA = K + 1
859             ELSE
860                LDA = N
861             END IF
862             IF( LDA.LT.NMAX )
863      $         LDA = LDA + 1
864 *           Skip tests if not enough room.
865             IF( LDA.GT.NMAX )
866      $         GO TO 100
867             IF( PACKED )THEN
868                LAA = ( N*( N + 1 ) )/2
869             ELSE
870                LAA = LDA*N
871             END IF
872             NULL = N.LE.0
873 *
874             DO 90 IC = 1, 2
875                UPLO = ICH( IC: IC )
876 *
877 *              Generate the matrix A.
878 *
879                TRANSL = ZERO
880                CALL SMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX, AA,
881      $                     LDA, K, K, RESET, TRANSL )
882 *
883                DO 80 IX = 1, NINC
884                   INCX = INC( IX )
885                   LX = ABS( INCX )*N
886 *
887 *                 Generate the vector X.
888 *
889                   TRANSL = HALF
890                   CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
891      $                        ABS( INCX ), 0, N - 1, RESET, TRANSL )
892                   IF( N.GT.1 )THEN
893                      X( N/2 ) = ZERO
894                      XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
895                   END IF
896 *
897                   DO 70 IY = 1, NINC
898                      INCY = INC( IY )
899                      LY = ABS( INCY )*N
900 *
901                      DO 60 IA = 1, NALF
902                         ALPHA = ALF( IA )
903 *
904                         DO 50 IB = 1, NBET
905                            BETA = BET( IB )
906 *
907 *                          Generate the vector Y.
908 *
909                            TRANSL = ZERO
910                            CALL SMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
911      $                                 ABS( INCY ), 0, N - 1, RESET,
912      $                                 TRANSL )
913 *
914                            NC = NC + 1
915 *
916 *                          Save every datum before calling the
917 *                          subroutine.
918 *
919                            UPLOS = UPLO
920                            NS = N
921                            KS = K
922                            ALS = ALPHA
923                            DO 10 I = 1, LAA
924                               AS( I ) = AA( I )
925    10                      CONTINUE
926                            LDAS = LDA
927                            DO 20 I = 1, LX
928                               XS( I ) = XX( I )
929    20                      CONTINUE
930                            INCXS = INCX
931                            BLS = BETA
932                            DO 30 I = 1, LY
933                               YS( I ) = YY( I )
934    30                      CONTINUE
935                            INCYS = INCY
936 *
937 *                          Call the subroutine.
938 *
939                            IF( FULL )THEN
940                               IF( TRACE )
941      $                           WRITE( NTRA, FMT = 9993 )NC, SNAME,
942      $                           UPLO, N, ALPHA, LDA, INCX, BETA, INCY
943                               IF( REWI )
944      $                           REWIND NTRA
945                               CALL SSYMV( UPLO, N, ALPHA, AA, LDA, XX,
946      $                                    INCX, BETA, YY, INCY )
947                            ELSE IF( BANDED )THEN
948                               IF( TRACE )
949      $                           WRITE( NTRA, FMT = 9994 )NC, SNAME,
950      $                           UPLO, N, K, ALPHA, LDA, INCX, BETA,
951      $                           INCY
952                               IF( REWI )
953      $                           REWIND NTRA
954                               CALL SSBMV( UPLO, N, K, ALPHA, AA, LDA,
955      $                                    XX, INCX, BETA, YY, INCY )
956                            ELSE IF( PACKED )THEN
957                               IF( TRACE )
958      $                           WRITE( NTRA, FMT = 9995 )NC, SNAME,
959      $                           UPLO, N, ALPHA, INCX, BETA, INCY
960                               IF( REWI )
961      $                           REWIND NTRA
962                               CALL SSPMV( UPLO, N, ALPHA, AA, XX, INCX,
963      $                                    BETA, YY, INCY )
964                            END IF
965 *
966 *                          Check if error-exit was taken incorrectly.
967 *
968                            IF( .NOT.OK )THEN
969                               WRITE( NOUT, FMT = 9992 )
970                               FATAL = .TRUE.
971                               GO TO 120
972                            END IF
973 *
974 *                          See what data changed inside subroutines.
975 *
976                            ISAME( 1 ) = UPLO.EQ.UPLOS
977                            ISAME( 2 ) = NS.EQ.N
978                            IF( FULL )THEN
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
985                               IF( NULL )THEN
986                                  ISAME( 9 ) = LSE( YS, YY, LY )
987                               ELSE
988                                  ISAME( 9 ) = LSERES( 'GE', ' ', 1, N,
989      $                                        YS, YY, ABS( INCY ) )
990                               END IF
991                               ISAME( 10 ) = INCYS.EQ.INCY
992                            ELSE IF( BANDED )THEN
993                               ISAME( 3 ) = KS.EQ.K
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
1000                               IF( NULL )THEN
1001                                  ISAME( 10 ) = LSE( YS, YY, LY )
1002                               ELSE
1003                                  ISAME( 10 ) = LSERES( 'GE', ' ', 1, N,
1004      $                                         YS, YY, ABS( INCY ) )
1005                               END IF
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
1013                               IF( NULL )THEN
1014                                  ISAME( 8 ) = LSE( YS, YY, LY )
1015                               ELSE
1016                                  ISAME( 8 ) = LSERES( 'GE', ' ', 1, N,
1017      $                                        YS, YY, ABS( INCY ) )
1018                               END IF
1019                               ISAME( 9 ) = INCYS.EQ.INCY
1020                            END IF
1021 *
1022 *                          If data was incorrectly changed, report and
1023 *                          return.
1024 *
1025                            SAME = .TRUE.
1026                            DO 40 I = 1, NARGS
1027                               SAME = SAME.AND.ISAME( I )
1028                               IF( .NOT.ISAME( I ) )
1029      $                           WRITE( NOUT, FMT = 9998 )I
1030    40                      CONTINUE
1031                            IF( .NOT.SAME )THEN
1032                               FATAL = .TRUE.
1033                               GO TO 120
1034                            END IF
1035 *
1036                            IF( .NOT.NULL )THEN
1037 *
1038 *                             Check the result.
1039 *
1040                               CALL SMVCH( 'N', N, N, ALPHA, A, NMAX, X,
1041      $                                    INCX, BETA, Y, INCY, YT, G,
1042      $                                    YY, EPS, ERR, FATAL, NOUT,
1043      $                                    .TRUE. )
1044                               ERRMAX = MAX( ERRMAX, ERR )
1045 *                             If got really bad answer, report and
1046 *                             return.
1047                               IF( FATAL )
1048      $                           GO TO 120
1049                            ELSE
1050 *                             Avoid repeating tests with N.le.0
1051                               GO TO 110
1052                            END IF
1053 *
1054    50                   CONTINUE
1055 *
1056    60                CONTINUE
1057 *
1058    70             CONTINUE
1059 *
1060    80          CONTINUE
1061 *
1062    90       CONTINUE
1063 *
1064   100    CONTINUE
1065 *
1066   110 CONTINUE
1067 *
1068 *     Report result.
1069 *
1070       IF( ERRMAX.LT.THRESH )THEN
1071          WRITE( NOUT, FMT = 9999 )SNAME, NC
1072       ELSE
1073          WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1074       END IF
1075       GO TO 130
1076 *
1077   120 CONTINUE
1078       WRITE( NOUT, FMT = 9996 )SNAME
1079       IF( FULL )THEN
1080          WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, LDA, INCX,
1081      $      BETA, INCY
1082       ELSE IF( BANDED )THEN
1083          WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, K, ALPHA, LDA,
1084      $      INCX, BETA, INCY
1085       ELSE IF( PACKED )THEN
1086          WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, N, ALPHA, INCX,
1087      $      BETA, INCY
1088       END IF
1089 *
1090   130 CONTINUE
1091       RETURN
1092 *
1093  9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1094      $      'S)' )
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,
1105      $      ')         .' )
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 *',
1109      $      '******' )
1110 *
1111 *     End of SCHK2.
1112 *
1113       END
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 )
1117 *
1118 *  Tests STRMV, STBMV, STPMV, STRSV, STBSV and STPSV.
1119 *
1120 *  Auxiliary routine for test program for Level 2 Blas.
1121 *
1122 *  -- Written on 10-August-1987.
1123 *     Richard Hanson, Sandia National Labs.
1124 *     Jeremy Du Croz, NAG Central Office.
1125 *
1126 *     .. Parameters ..
1127       REAL               ZERO, HALF, ONE
1128       PARAMETER          ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
1129 *     .. Scalar Arguments ..
1130       REAL               EPS, THRESH
1131       INTEGER            INCMAX, NIDIM, NINC, NKB, NMAX, NOUT, NTRA
1132       LOGICAL            FATAL, REWI, TRACE
1133       CHARACTER*6        SNAME
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
1147       CHARACTER*3        ICHT
1148 *     .. Local Arrays ..
1149       LOGICAL            ISAME( 13 )
1150 *     .. External Functions ..
1151       LOGICAL            LSE, LSERES
1152       EXTERNAL           LSE, LSERES
1153 *     .. External Subroutines ..
1154       EXTERNAL           SMAKE, SMVCH, STBMV, STBSV, STPMV, STPSV,
1155      $                   STRMV, STRSV
1156 *     .. Intrinsic Functions ..
1157       INTRINSIC          ABS, MAX
1158 *     .. Scalars in Common ..
1159       INTEGER            INFOT, NOUTC
1160       LOGICAL            LERR, OK
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.
1170       IF( FULL )THEN
1171          NARGS = 8
1172       ELSE IF( BANDED )THEN
1173          NARGS = 9
1174       ELSE IF( PACKED )THEN
1175          NARGS = 7
1176       END IF
1177 *
1178       NC = 0
1179       RESET = .TRUE.
1180       ERRMAX = ZERO
1181 *     Set up zero vector for SMVCH.
1182       DO 10 I = 1, NMAX
1183          Z( I ) = ZERO
1184    10 CONTINUE
1185 *
1186       DO 110 IN = 1, NIDIM
1187          N = IDIM( IN )
1188 *
1189          IF( BANDED )THEN
1190             NK = NKB
1191          ELSE
1192             NK = 1
1193          END IF
1194          DO 100 IK = 1, NK
1195             IF( BANDED )THEN
1196                K = KB( IK )
1197             ELSE
1198                K = N - 1
1199             END IF
1200 *           Set LDA to 1 more than minimum value if room.
1201             IF( BANDED )THEN
1202                LDA = K + 1
1203             ELSE
1204                LDA = N
1205             END IF
1206             IF( LDA.LT.NMAX )
1207      $         LDA = LDA + 1
1208 *           Skip tests if not enough room.
1209             IF( LDA.GT.NMAX )
1210      $         GO TO 100
1211             IF( PACKED )THEN
1212                LAA = ( N*( N + 1 ) )/2
1213             ELSE
1214                LAA = LDA*N
1215             END IF
1216             NULL = N.LE.0
1217 *
1218             DO 90 ICU = 1, 2
1219                UPLO = ICHU( ICU: ICU )
1220 *
1221                DO 80 ICT = 1, 3
1222                   TRANS = ICHT( ICT: ICT )
1223 *
1224                   DO 70 ICD = 1, 2
1225                      DIAG = ICHD( ICD: ICD )
1226 *
1227 *                    Generate the matrix A.
1228 *
1229                      TRANSL = ZERO
1230                      CALL SMAKE( SNAME( 2: 3 ), UPLO, DIAG, N, N, A,
1231      $                           NMAX, AA, LDA, K, K, RESET, TRANSL )
1232 *
1233                      DO 60 IX = 1, NINC
1234                         INCX = INC( IX )
1235                         LX = ABS( INCX )*N
1236 *
1237 *                       Generate the vector X.
1238 *
1239                         TRANSL = HALF
1240                         CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
1241      $                              ABS( INCX ), 0, N - 1, RESET,
1242      $                              TRANSL )
1243                         IF( N.GT.1 )THEN
1244                            X( N/2 ) = ZERO
1245                            XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
1246                         END IF
1247 *
1248                         NC = NC + 1
1249 *
1250 *                       Save every datum before calling the subroutine.
1251 *
1252                         UPLOS = UPLO
1253                         TRANSS = TRANS
1254                         DIAGS = DIAG
1255                         NS = N
1256                         KS = K
1257                         DO 20 I = 1, LAA
1258                            AS( I ) = AA( I )
1259    20                   CONTINUE
1260                         LDAS = LDA
1261                         DO 30 I = 1, LX
1262                            XS( I ) = XX( I )
1263    30                   CONTINUE
1264                         INCXS = INCX
1265 *
1266 *                       Call the subroutine.
1267 *
1268                         IF( SNAME( 4: 5 ).EQ.'MV' )THEN
1269                            IF( FULL )THEN
1270                               IF( TRACE )
1271      $                           WRITE( NTRA, FMT = 9993 )NC, SNAME,
1272      $                           UPLO, TRANS, DIAG, N, LDA, INCX
1273                               IF( REWI )
1274      $                           REWIND NTRA
1275                               CALL STRMV( UPLO, TRANS, DIAG, N, AA, LDA,
1276      $                                    XX, INCX )
1277                            ELSE IF( BANDED )THEN
1278                               IF( TRACE )
1279      $                           WRITE( NTRA, FMT = 9994 )NC, SNAME,
1280      $                           UPLO, TRANS, DIAG, N, K, LDA, INCX
1281                               IF( REWI )
1282      $                           REWIND NTRA
1283                               CALL STBMV( UPLO, TRANS, DIAG, N, K, AA,
1284      $                                    LDA, XX, INCX )
1285                            ELSE IF( PACKED )THEN
1286                               IF( TRACE )
1287      $                           WRITE( NTRA, FMT = 9995 )NC, SNAME,
1288      $                           UPLO, TRANS, DIAG, N, INCX
1289                               IF( REWI )
1290      $                           REWIND NTRA
1291                               CALL STPMV( UPLO, TRANS, DIAG, N, AA, XX,
1292      $                                    INCX )
1293                            END IF
1294                         ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
1295                            IF( FULL )THEN
1296                               IF( TRACE )
1297      $                           WRITE( NTRA, FMT = 9993 )NC, SNAME,
1298      $                           UPLO, TRANS, DIAG, N, LDA, INCX
1299                               IF( REWI )
1300      $                           REWIND NTRA
1301                               CALL STRSV( UPLO, TRANS, DIAG, N, AA, LDA,
1302      $                                    XX, INCX )
1303                            ELSE IF( BANDED )THEN
1304                               IF( TRACE )
1305      $                           WRITE( NTRA, FMT = 9994 )NC, SNAME,
1306      $                           UPLO, TRANS, DIAG, N, K, LDA, INCX
1307                               IF( REWI )
1308      $                           REWIND NTRA
1309                               CALL STBSV( UPLO, TRANS, DIAG, N, K, AA,
1310      $                                    LDA, XX, INCX )
1311                            ELSE IF( PACKED )THEN
1312                               IF( TRACE )
1313      $                           WRITE( NTRA, FMT = 9995 )NC, SNAME,
1314      $                           UPLO, TRANS, DIAG, N, INCX
1315                               IF( REWI )
1316      $                           REWIND NTRA
1317                               CALL STPSV( UPLO, TRANS, DIAG, N, AA, XX,
1318      $                                    INCX )
1319                            END IF
1320                         END IF
1321 *
1322 *                       Check if error-exit was taken incorrectly.
1323 *
1324                         IF( .NOT.OK )THEN
1325                            WRITE( NOUT, FMT = 9992 )
1326                            FATAL = .TRUE.
1327                            GO TO 120
1328                         END IF
1329 *
1330 *                       See what data changed inside subroutines.
1331 *
1332                         ISAME( 1 ) = UPLO.EQ.UPLOS
1333                         ISAME( 2 ) = TRANS.EQ.TRANSS
1334                         ISAME( 3 ) = DIAG.EQ.DIAGS
1335                         ISAME( 4 ) = NS.EQ.N
1336                         IF( FULL )THEN
1337                            ISAME( 5 ) = LSE( AS, AA, LAA )
1338                            ISAME( 6 ) = LDAS.EQ.LDA
1339                            IF( NULL )THEN
1340                               ISAME( 7 ) = LSE( XS, XX, LX )
1341                            ELSE
1342                               ISAME( 7 ) = LSERES( 'GE', ' ', 1, N, XS,
1343      $                                     XX, ABS( INCX ) )
1344                            END IF
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
1350                            IF( NULL )THEN
1351                               ISAME( 8 ) = LSE( XS, XX, LX )
1352                            ELSE
1353                               ISAME( 8 ) = LSERES( 'GE', ' ', 1, N, XS,
1354      $                                     XX, ABS( INCX ) )
1355                            END IF
1356                            ISAME( 9 ) = INCXS.EQ.INCX
1357                         ELSE IF( PACKED )THEN
1358                            ISAME( 5 ) = LSE( AS, AA, LAA )
1359                            IF( NULL )THEN
1360                               ISAME( 6 ) = LSE( XS, XX, LX )
1361                            ELSE
1362                               ISAME( 6 ) = LSERES( 'GE', ' ', 1, N, XS,
1363      $                                     XX, ABS( INCX ) )
1364                            END IF
1365                            ISAME( 7 ) = INCXS.EQ.INCX
1366                         END IF
1367 *
1368 *                       If data was incorrectly changed, report and
1369 *                       return.
1370 *
1371                         SAME = .TRUE.
1372                         DO 40 I = 1, NARGS
1373                            SAME = SAME.AND.ISAME( I )
1374                            IF( .NOT.ISAME( I ) )
1375      $                        WRITE( NOUT, FMT = 9998 )I
1376    40                   CONTINUE
1377                         IF( .NOT.SAME )THEN
1378                            FATAL = .TRUE.
1379                            GO TO 120
1380                         END IF
1381 *
1382                         IF( .NOT.NULL )THEN
1383                            IF( SNAME( 4: 5 ).EQ.'MV' )THEN
1384 *
1385 *                             Check the result.
1386 *
1387                               CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X,
1388      $                                    INCX, ZERO, Z, INCX, XT, G,
1389      $                                    XX, EPS, ERR, FATAL, NOUT,
1390      $                                    .TRUE. )
1391                            ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
1392 *
1393 *                             Compute approximation to original vector.
1394 *
1395                               DO 50 I = 1, N
1396                                  Z( I ) = XX( 1 + ( I - 1 )*
1397      $                                    ABS( INCX ) )
1398                                  XX( 1 + ( I - 1 )*ABS( INCX ) )
1399      $                              = X( I )
1400    50                         CONTINUE
1401                               CALL SMVCH( TRANS, N, N, ONE, A, NMAX, Z,
1402      $                                    INCX, ZERO, X, INCX, XT, G,
1403      $                                    XX, EPS, ERR, FATAL, NOUT,
1404      $                                    .FALSE. )
1405                            END IF
1406                            ERRMAX = MAX( ERRMAX, ERR )
1407 *                          If got really bad answer, report and return.
1408                            IF( FATAL )
1409      $                        GO TO 120
1410                         ELSE
1411 *                          Avoid repeating tests with N.le.0.
1412                            GO TO 110
1413                         END IF
1414 *
1415    60                CONTINUE
1416 *
1417    70             CONTINUE
1418 *
1419    80          CONTINUE
1420 *
1421    90       CONTINUE
1422 *
1423   100    CONTINUE
1424 *
1425   110 CONTINUE
1426 *
1427 *     Report result.
1428 *
1429       IF( ERRMAX.LT.THRESH )THEN
1430          WRITE( NOUT, FMT = 9999 )SNAME, NC
1431       ELSE
1432          WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1433       END IF
1434       GO TO 130
1435 *
1436   120 CONTINUE
1437       WRITE( NOUT, FMT = 9996 )SNAME
1438       IF( FULL )THEN
1439          WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, DIAG, N, LDA,
1440      $      INCX
1441       ELSE IF( BANDED )THEN
1442          WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, DIAG, N, K,
1443      $      LDA, INCX
1444       ELSE IF( PACKED )THEN
1445          WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, TRANS, DIAG, N, INCX
1446       END IF
1447 *
1448   130 CONTINUE
1449       RETURN
1450 *
1451  9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1452      $      'S)' )
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, ',
1460      $      'X,', I2, ')                        .' )
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 *',
1466      $      '******' )
1467 *
1468 *     End of SCHK3.
1469 *
1470       END
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,
1474      $                  Z )
1475 *
1476 *  Tests SGER.
1477 *
1478 *  Auxiliary routine for test program for Level 2 Blas.
1479 *
1480 *  -- Written on 10-August-1987.
1481 *     Richard Hanson, Sandia National Labs.
1482 *     Jeremy Du Croz, NAG Central Office.
1483 *
1484 *     .. Parameters ..
1485       REAL               ZERO, HALF, ONE
1486       PARAMETER          ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
1487 *     .. Scalar Arguments ..
1488       REAL               EPS, THRESH
1489       INTEGER            INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
1490       LOGICAL            FATAL, REWI, TRACE
1491       CHARACTER*6        SNAME
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,
1503      $                   NC, ND, NS
1504       LOGICAL            NULL, RESET, SAME
1505 *     .. Local Arrays ..
1506       REAL               W( 1 )
1507       LOGICAL            ISAME( 13 )
1508 *     .. External Functions ..
1509       LOGICAL            LSE, LSERES
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
1517       LOGICAL            LERR, OK
1518 *     .. Common blocks ..
1519       COMMON             /INFOC/INFOT, NOUTC, OK, LERR
1520 *     .. Executable Statements ..
1521 *     Define the number of arguments.
1522       NARGS = 9
1523 *
1524       NC = 0
1525       RESET = .TRUE.
1526       ERRMAX = ZERO
1527 *
1528       DO 120 IN = 1, NIDIM
1529          N = IDIM( IN )
1530          ND = N/2 + 1
1531 *
1532          DO 110 IM = 1, 2
1533             IF( IM.EQ.1 )
1534      $         M = MAX( N - ND, 0 )
1535             IF( IM.EQ.2 )
1536      $         M = MIN( N + ND, NMAX )
1537 *
1538 *           Set LDA to 1 more than minimum value if room.
1539             LDA = M
1540             IF( LDA.LT.NMAX )
1541      $         LDA = LDA + 1
1542 *           Skip tests if not enough room.
1543             IF( LDA.GT.NMAX )
1544      $         GO TO 110
1545             LAA = LDA*N
1546             NULL = N.LE.0.OR.M.LE.0
1547 *
1548             DO 100 IX = 1, NINC
1549                INCX = INC( IX )
1550                LX = ABS( INCX )*M
1551 *
1552 *              Generate the vector X.
1553 *
1554                TRANSL = HALF
1555                CALL SMAKE( 'GE', ' ', ' ', 1, M, X, 1, XX, ABS( INCX ),
1556      $                     0, M - 1, RESET, TRANSL )
1557                IF( M.GT.1 )THEN
1558                   X( M/2 ) = ZERO
1559                   XX( 1 + ABS( INCX )*( M/2 - 1 ) ) = ZERO
1560                END IF
1561 *
1562                DO 90 IY = 1, NINC
1563                   INCY = INC( IY )
1564                   LY = ABS( INCY )*N
1565 *
1566 *                 Generate the vector Y.
1567 *
1568                   TRANSL = ZERO
1569                   CALL SMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
1570      $                        ABS( INCY ), 0, N - 1, RESET, TRANSL )
1571                   IF( N.GT.1 )THEN
1572                      Y( N/2 ) = ZERO
1573                      YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
1574                   END IF
1575 *
1576                   DO 80 IA = 1, NALF
1577                      ALPHA = ALF( IA )
1578 *
1579 *                    Generate the matrix A.
1580 *
1581                      TRANSL = ZERO
1582                      CALL SMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX,
1583      $                           AA, LDA, M - 1, N - 1, RESET, TRANSL )
1584 *
1585                      NC = NC + 1
1586 *
1587 *                    Save every datum before calling the subroutine.
1588 *
1589                      MS = M
1590                      NS = N
1591                      ALS = ALPHA
1592                      DO 10 I = 1, LAA
1593                         AS( I ) = AA( I )
1594    10                CONTINUE
1595                      LDAS = LDA
1596                      DO 20 I = 1, LX
1597                         XS( I ) = XX( I )
1598    20                CONTINUE
1599                      INCXS = INCX
1600                      DO 30 I = 1, LY
1601                         YS( I ) = YY( I )
1602    30                CONTINUE
1603                      INCYS = INCY
1604 *
1605 *                    Call the subroutine.
1606 *
1607                      IF( TRACE )
1608      $                  WRITE( NTRA, FMT = 9994 )NC, SNAME, M, N,
1609      $                  ALPHA, INCX, INCY, LDA
1610                      IF( REWI )
1611      $                  REWIND NTRA
1612                      CALL SGER( M, N, ALPHA, XX, INCX, YY, INCY, AA,
1613      $                          LDA )
1614 *
1615 *                    Check if error-exit was taken incorrectly.
1616 *
1617                      IF( .NOT.OK )THEN
1618                         WRITE( NOUT, FMT = 9993 )
1619                         FATAL = .TRUE.
1620                         GO TO 140
1621                      END IF
1622 *
1623 *                    See what data changed inside subroutine.
1624 *
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
1632                      IF( NULL )THEN
1633                         ISAME( 8 ) = LSE( AS, AA, LAA )
1634                      ELSE
1635                         ISAME( 8 ) = LSERES( 'GE', ' ', M, N, AS, AA,
1636      $                               LDA )
1637                      END IF
1638                      ISAME( 9 ) = LDAS.EQ.LDA
1639 *
1640 *                    If data was incorrectly changed, report and return.
1641 *
1642                      SAME = .TRUE.
1643                      DO 40 I = 1, NARGS
1644                         SAME = SAME.AND.ISAME( I )
1645                         IF( .NOT.ISAME( I ) )
1646      $                     WRITE( NOUT, FMT = 9998 )I
1647    40                CONTINUE
1648                      IF( .NOT.SAME )THEN
1649                         FATAL = .TRUE.
1650                         GO TO 140
1651                      END IF
1652 *
1653                      IF( .NOT.NULL )THEN
1654 *
1655 *                       Check the result column by column.
1656 *
1657                         IF( INCX.GT.0 )THEN
1658                            DO 50 I = 1, M
1659                               Z( I ) = X( I )
1660    50                      CONTINUE
1661                         ELSE
1662                            DO 60 I = 1, M
1663                               Z( I ) = X( M - I + 1 )
1664    60                      CONTINUE
1665                         END IF
1666                         DO 70 J = 1, N
1667                            IF( INCY.GT.0 )THEN
1668                               W( 1 ) = Y( J )
1669                            ELSE
1670                               W( 1 ) = Y( N - J + 1 )
1671                            END IF
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.
1678                            IF( FATAL )
1679      $                        GO TO 130
1680    70                   CONTINUE
1681                      ELSE
1682 *                       Avoid repeating tests with M.le.0 or N.le.0.
1683                         GO TO 110
1684                      END IF
1685 *
1686    80             CONTINUE
1687 *
1688    90          CONTINUE
1689 *
1690   100       CONTINUE
1691 *
1692   110    CONTINUE
1693 *
1694   120 CONTINUE
1695 *
1696 *     Report result.
1697 *
1698       IF( ERRMAX.LT.THRESH )THEN
1699          WRITE( NOUT, FMT = 9999 )SNAME, NC
1700       ELSE
1701          WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1702       END IF
1703       GO TO 150
1704 *
1705   130 CONTINUE
1706       WRITE( NOUT, FMT = 9995 )J
1707 *
1708   140 CONTINUE
1709       WRITE( NOUT, FMT = 9996 )SNAME
1710       WRITE( NOUT, FMT = 9994 )NC, SNAME, M, N, ALPHA, INCX, INCY, LDA
1711 *
1712   150 CONTINUE
1713       RETURN
1714 *
1715  9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1716      $      'S)' )
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 *',
1727      $      '******' )
1728 *
1729 *     End of SCHK4.
1730 *
1731       END
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,
1735      $                  Z )
1736 *
1737 *  Tests SSYR and SSPR.
1738 *
1739 *  Auxiliary routine for test program for Level 2 Blas.
1740 *
1741 *  -- Written on 10-August-1987.
1742 *     Richard Hanson, Sandia National Labs.
1743 *     Jeremy Du Croz, NAG Central Office.
1744 *
1745 *     .. Parameters ..
1746       REAL               ZERO, HALF, ONE
1747       PARAMETER          ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
1748 *     .. Scalar Arguments ..
1749       REAL               EPS, THRESH
1750       INTEGER            INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
1751       LOGICAL            FATAL, REWI, TRACE
1752       CHARACTER*6        SNAME
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
1766       CHARACTER*2        ICH
1767 *     .. Local Arrays ..
1768       REAL               W( 1 )
1769       LOGICAL            ISAME( 13 )
1770 *     .. External Functions ..
1771       LOGICAL            LSE, LSERES
1772       EXTERNAL           LSE, LSERES
1773 *     .. External Subroutines ..
1774       EXTERNAL           SMAKE, SMVCH, SSPR, SSYR
1775 *     .. Intrinsic Functions ..
1776       INTRINSIC          ABS, MAX
1777 *     .. Scalars in Common ..
1778       INTEGER            INFOT, NOUTC
1779       LOGICAL            LERR, OK
1780 *     .. Common blocks ..
1781       COMMON             /INFOC/INFOT, NOUTC, OK, LERR
1782 *     .. Data statements ..
1783       DATA               ICH/'UL'/
1784 *     .. Executable Statements ..
1785       FULL = SNAME( 3: 3 ).EQ.'Y'
1786       PACKED = SNAME( 3: 3 ).EQ.'P'
1787 *     Define the number of arguments.
1788       IF( FULL )THEN
1789          NARGS = 7
1790       ELSE IF( PACKED )THEN
1791          NARGS = 6
1792       END IF
1793 *
1794       NC = 0
1795       RESET = .TRUE.
1796       ERRMAX = ZERO
1797 *
1798       DO 100 IN = 1, NIDIM
1799          N = IDIM( IN )
1800 *        Set LDA to 1 more than minimum value if room.
1801          LDA = N
1802          IF( LDA.LT.NMAX )
1803      $      LDA = LDA + 1
1804 *        Skip tests if not enough room.
1805          IF( LDA.GT.NMAX )
1806      $      GO TO 100
1807          IF( PACKED )THEN
1808             LAA = ( N*( N + 1 ) )/2
1809          ELSE
1810             LAA = LDA*N
1811          END IF
1812 *
1813          DO 90 IC = 1, 2
1814             UPLO = ICH( IC: IC )
1815             UPPER = UPLO.EQ.'U'
1816 *
1817             DO 80 IX = 1, NINC
1818                INCX = INC( IX )
1819                LX = ABS( INCX )*N
1820 *
1821 *              Generate the vector X.
1822 *
1823                TRANSL = HALF
1824                CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
1825      $                     0, N - 1, RESET, TRANSL )
1826                IF( N.GT.1 )THEN
1827                   X( N/2 ) = ZERO
1828                   XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
1829                END IF
1830 *
1831                DO 70 IA = 1, NALF
1832                   ALPHA = ALF( IA )
1833                   NULL = N.LE.0.OR.ALPHA.EQ.ZERO
1834 *
1835 *                 Generate the matrix A.
1836 *
1837                   TRANSL = ZERO
1838                   CALL SMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX,
1839      $                        AA, LDA, N - 1, N - 1, RESET, TRANSL )
1840 *
1841                   NC = NC + 1
1842 *
1843 *                 Save every datum before calling the subroutine.
1844 *
1845                   UPLOS = UPLO
1846                   NS = N
1847                   ALS = ALPHA
1848                   DO 10 I = 1, LAA
1849                      AS( I ) = AA( I )
1850    10             CONTINUE
1851                   LDAS = LDA
1852                   DO 20 I = 1, LX
1853                      XS( I ) = XX( I )
1854    20             CONTINUE
1855                   INCXS = INCX
1856 *
1857 *                 Call the subroutine.
1858 *
1859                   IF( FULL )THEN
1860                      IF( TRACE )
1861      $                  WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
1862      $                  ALPHA, INCX, LDA
1863                      IF( REWI )
1864      $                  REWIND NTRA
1865                      CALL SSYR( UPLO, N, ALPHA, XX, INCX, AA, LDA )
1866                   ELSE IF( PACKED )THEN
1867                      IF( TRACE )
1868      $                  WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
1869      $                  ALPHA, INCX
1870                      IF( REWI )
1871      $                  REWIND NTRA
1872                      CALL SSPR( UPLO, N, ALPHA, XX, INCX, AA )
1873                   END IF
1874 *
1875 *                 Check if error-exit was taken incorrectly.
1876 *
1877                   IF( .NOT.OK )THEN
1878                      WRITE( NOUT, FMT = 9992 )
1879                      FATAL = .TRUE.
1880                      GO TO 120
1881                   END IF
1882 *
1883 *                 See what data changed inside subroutines.
1884 *
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
1890                   IF( NULL )THEN
1891                      ISAME( 6 ) = LSE( AS, AA, LAA )
1892                   ELSE
1893                      ISAME( 6 ) = LSERES( SNAME( 2: 3 ), UPLO, N, N, AS,
1894      $                            AA, LDA )
1895                   END IF
1896                   IF( .NOT.PACKED )THEN
1897                      ISAME( 7 ) = LDAS.EQ.LDA
1898                   END IF
1899 *
1900 *                 If data was incorrectly changed, report and return.
1901 *
1902                   SAME = .TRUE.
1903                   DO 30 I = 1, NARGS
1904                      SAME = SAME.AND.ISAME( I )
1905                      IF( .NOT.ISAME( I ) )
1906      $                  WRITE( NOUT, FMT = 9998 )I
1907    30             CONTINUE
1908                   IF( .NOT.SAME )THEN
1909                      FATAL = .TRUE.
1910                      GO TO 120
1911                   END IF
1912 *
1913                   IF( .NOT.NULL )THEN
1914 *
1915 *                    Check the result column by column.
1916 *
1917                      IF( INCX.GT.0 )THEN
1918                         DO 40 I = 1, N
1919                            Z( I ) = X( I )
1920    40                   CONTINUE
1921                      ELSE
1922                         DO 50 I = 1, N
1923                            Z( I ) = X( N - I + 1 )
1924    50                   CONTINUE
1925                      END IF
1926                      JA = 1
1927                      DO 60 J = 1, N
1928                         W( 1 ) = Z( J )
1929                         IF( UPPER )THEN
1930                            JJ = 1
1931                            LJ = J
1932                         ELSE
1933                            JJ = J
1934                            LJ = N - J + 1
1935                         END IF
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,
1939      $                              .TRUE. )
1940                         IF( FULL )THEN
1941                            IF( UPPER )THEN
1942                               JA = JA + LDA
1943                            ELSE
1944                               JA = JA + LDA + 1
1945                            END IF
1946                         ELSE
1947                            JA = JA + LJ
1948                         END IF
1949                         ERRMAX = MAX( ERRMAX, ERR )
1950 *                       If got really bad answer, report and return.
1951                         IF( FATAL )
1952      $                     GO TO 110
1953    60                CONTINUE
1954                   ELSE
1955 *                    Avoid repeating tests if N.le.0.
1956                      IF( N.LE.0 )
1957      $                  GO TO 100
1958                   END IF
1959 *
1960    70          CONTINUE
1961 *
1962    80       CONTINUE
1963 *
1964    90    CONTINUE
1965 *
1966   100 CONTINUE
1967 *
1968 *     Report result.
1969 *
1970       IF( ERRMAX.LT.THRESH )THEN
1971          WRITE( NOUT, FMT = 9999 )SNAME, NC
1972       ELSE
1973          WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
1974       END IF
1975       GO TO 130
1976 *
1977   110 CONTINUE
1978       WRITE( NOUT, FMT = 9995 )J
1979 *
1980   120 CONTINUE
1981       WRITE( NOUT, FMT = 9996 )SNAME
1982       IF( FULL )THEN
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
1986       END IF
1987 *
1988   130 CONTINUE
1989       RETURN
1990 *
1991  9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
1992      $      'S)' )
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,',
2001      $      I2, ', AP)                           .' )
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 *',
2005      $      '******' )
2006 *
2007 *     End of SCHK5.
2008 *
2009       END
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,
2013      $                  Z )
2014 *
2015 *  Tests SSYR2 and SSPR2.
2016 *
2017 *  Auxiliary routine for test program for Level 2 Blas.
2018 *
2019 *  -- Written on 10-August-1987.
2020 *     Richard Hanson, Sandia National Labs.
2021 *     Jeremy Du Croz, NAG Central Office.
2022 *
2023 *     .. Parameters ..
2024       REAL               ZERO, HALF, ONE
2025       PARAMETER          ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
2026 *     .. Scalar Arguments ..
2027       REAL               EPS, THRESH
2028       INTEGER            INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
2029       LOGICAL            FATAL, REWI, TRACE
2030       CHARACTER*6        SNAME
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,
2042      $                   NARGS, NC, NS
2043       LOGICAL            FULL, NULL, PACKED, RESET, SAME, UPPER
2044       CHARACTER*1        UPLO, UPLOS
2045       CHARACTER*2        ICH
2046 *     .. Local Arrays ..
2047       REAL               W( 2 )
2048       LOGICAL            ISAME( 13 )
2049 *     .. External Functions ..
2050       LOGICAL            LSE, LSERES
2051       EXTERNAL           LSE, LSERES
2052 *     .. External Subroutines ..
2053       EXTERNAL           SMAKE, SMVCH, SSPR2, SSYR2
2054 *     .. Intrinsic Functions ..
2055       INTRINSIC          ABS, MAX
2056 *     .. Scalars in Common ..
2057       INTEGER            INFOT, NOUTC
2058       LOGICAL            LERR, OK
2059 *     .. Common blocks ..
2060       COMMON             /INFOC/INFOT, NOUTC, OK, LERR
2061 *     .. Data statements ..
2062       DATA               ICH/'UL'/
2063 *     .. Executable Statements ..
2064       FULL = SNAME( 3: 3 ).EQ.'Y'
2065       PACKED = SNAME( 3: 3 ).EQ.'P'
2066 *     Define the number of arguments.
2067       IF( FULL )THEN
2068          NARGS = 9
2069       ELSE IF( PACKED )THEN
2070          NARGS = 8
2071       END IF
2072 *
2073       NC = 0
2074       RESET = .TRUE.
2075       ERRMAX = ZERO
2076 *
2077       DO 140 IN = 1, NIDIM
2078          N = IDIM( IN )
2079 *        Set LDA to 1 more than minimum value if room.
2080          LDA = N
2081          IF( LDA.LT.NMAX )
2082      $      LDA = LDA + 1
2083 *        Skip tests if not enough room.
2084          IF( LDA.GT.NMAX )
2085      $      GO TO 140
2086          IF( PACKED )THEN
2087             LAA = ( N*( N + 1 ) )/2
2088          ELSE
2089             LAA = LDA*N
2090          END IF
2091 *
2092          DO 130 IC = 1, 2
2093             UPLO = ICH( IC: IC )
2094             UPPER = UPLO.EQ.'U'
2095 *
2096             DO 120 IX = 1, NINC
2097                INCX = INC( IX )
2098                LX = ABS( INCX )*N
2099 *
2100 *              Generate the vector X.
2101 *
2102                TRANSL = HALF
2103                CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
2104      $                     0, N - 1, RESET, TRANSL )
2105                IF( N.GT.1 )THEN
2106                   X( N/2 ) = ZERO
2107                   XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
2108                END IF
2109 *
2110                DO 110 IY = 1, NINC
2111                   INCY = INC( IY )
2112                   LY = ABS( INCY )*N
2113 *
2114 *                 Generate the vector Y.
2115 *
2116                   TRANSL = ZERO
2117                   CALL SMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
2118      $                        ABS( INCY ), 0, N - 1, RESET, TRANSL )
2119                   IF( N.GT.1 )THEN
2120                      Y( N/2 ) = ZERO
2121                      YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
2122                   END IF
2123 *
2124                   DO 100 IA = 1, NALF
2125                      ALPHA = ALF( IA )
2126                      NULL = N.LE.0.OR.ALPHA.EQ.ZERO
2127 *
2128 *                    Generate the matrix A.
2129 *
2130                      TRANSL = ZERO
2131                      CALL SMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A,
2132      $                           NMAX, AA, LDA, N - 1, N - 1, RESET,
2133      $                           TRANSL )
2134 *
2135                      NC = NC + 1
2136 *
2137 *                    Save every datum before calling the subroutine.
2138 *
2139                      UPLOS = UPLO
2140                      NS = N
2141                      ALS = ALPHA
2142                      DO 10 I = 1, LAA
2143                         AS( I ) = AA( I )
2144    10                CONTINUE
2145                      LDAS = LDA
2146                      DO 20 I = 1, LX
2147                         XS( I ) = XX( I )
2148    20                CONTINUE
2149                      INCXS = INCX
2150                      DO 30 I = 1, LY
2151                         YS( I ) = YY( I )
2152    30                CONTINUE
2153                      INCYS = INCY
2154 *
2155 *                    Call the subroutine.
2156 *
2157                      IF( FULL )THEN
2158                         IF( TRACE )
2159      $                     WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
2160      $                     ALPHA, INCX, INCY, LDA
2161                         IF( REWI )
2162      $                     REWIND NTRA
2163                         CALL SSYR2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
2164      $                              AA, LDA )
2165                      ELSE IF( PACKED )THEN
2166                         IF( TRACE )
2167      $                     WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
2168      $                     ALPHA, INCX, INCY
2169                         IF( REWI )
2170      $                     REWIND NTRA
2171                         CALL SSPR2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
2172      $                              AA )
2173                      END IF
2174 *
2175 *                    Check if error-exit was taken incorrectly.
2176 *
2177                      IF( .NOT.OK )THEN
2178                         WRITE( NOUT, FMT = 9992 )
2179                         FATAL = .TRUE.
2180                         GO TO 160
2181                      END IF
2182 *
2183 *                    See what data changed inside subroutines.
2184 *
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
2192                      IF( NULL )THEN
2193                         ISAME( 8 ) = LSE( AS, AA, LAA )
2194                      ELSE
2195                         ISAME( 8 ) = LSERES( SNAME( 2: 3 ), UPLO, N, N,
2196      $                               AS, AA, LDA )
2197                      END IF
2198                      IF( .NOT.PACKED )THEN
2199                         ISAME( 9 ) = LDAS.EQ.LDA
2200                      END IF
2201 *
2202 *                    If data was incorrectly changed, report and return.
2203 *
2204                      SAME = .TRUE.
2205                      DO 40 I = 1, NARGS
2206                         SAME = SAME.AND.ISAME( I )
2207                         IF( .NOT.ISAME( I ) )
2208      $                     WRITE( NOUT, FMT = 9998 )I
2209    40                CONTINUE
2210                      IF( .NOT.SAME )THEN
2211                         FATAL = .TRUE.
2212                         GO TO 160
2213                      END IF
2214 *
2215                      IF( .NOT.NULL )THEN
2216 *
2217 *                       Check the result column by column.
2218 *
2219                         IF( INCX.GT.0 )THEN
2220                            DO 50 I = 1, N
2221                               Z( I, 1 ) = X( I )
2222    50                      CONTINUE
2223                         ELSE
2224                            DO 60 I = 1, N
2225                               Z( I, 1 ) = X( N - I + 1 )
2226    60                      CONTINUE
2227                         END IF
2228                         IF( INCY.GT.0 )THEN
2229                            DO 70 I = 1, N
2230                               Z( I, 2 ) = Y( I )
2231    70                      CONTINUE
2232                         ELSE
2233                            DO 80 I = 1, N
2234                               Z( I, 2 ) = Y( N - I + 1 )
2235    80                      CONTINUE
2236                         END IF
2237                         JA = 1
2238                         DO 90 J = 1, N
2239                            W( 1 ) = Z( J, 2 )
2240                            W( 2 ) = Z( J, 1 )
2241                            IF( UPPER )THEN
2242                               JJ = 1
2243                               LJ = J
2244                            ELSE
2245                               JJ = J
2246                               LJ = N - J + 1
2247                            END IF
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,
2251      $                                 NOUT, .TRUE. )
2252                            IF( FULL )THEN
2253                               IF( UPPER )THEN
2254                                  JA = JA + LDA
2255                               ELSE
2256                                  JA = JA + LDA + 1
2257                               END IF
2258                            ELSE
2259                               JA = JA + LJ
2260                            END IF
2261                            ERRMAX = MAX( ERRMAX, ERR )
2262 *                          If got really bad answer, report and return.
2263                            IF( FATAL )
2264      $                        GO TO 150
2265    90                   CONTINUE
2266                      ELSE
2267 *                       Avoid repeating tests with N.le.0.
2268                         IF( N.LE.0 )
2269      $                     GO TO 140
2270                      END IF
2271 *
2272   100             CONTINUE
2273 *
2274   110          CONTINUE
2275 *
2276   120       CONTINUE
2277 *
2278   130    CONTINUE
2279 *
2280   140 CONTINUE
2281 *
2282 *     Report result.
2283 *
2284       IF( ERRMAX.LT.THRESH )THEN
2285          WRITE( NOUT, FMT = 9999 )SNAME, NC
2286       ELSE
2287          WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
2288       END IF
2289       GO TO 170
2290 *
2291   150 CONTINUE
2292       WRITE( NOUT, FMT = 9995 )J
2293 *
2294   160 CONTINUE
2295       WRITE( NOUT, FMT = 9996 )SNAME
2296       IF( FULL )THEN
2297          WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, INCX,
2298      $      INCY, LDA
2299       ELSE IF( PACKED )THEN
2300          WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, ALPHA, INCX, INCY
2301       END IF
2302 *
2303   170 CONTINUE
2304       RETURN
2305 *
2306  9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
2307      $      'S)' )
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 *',
2320      $      '******' )
2321 *
2322 *     End of SCHK6.
2323 *
2324       END
2325       SUBROUTINE SCHKE( ISNUM, SRNAMT, NOUT )
2326 *
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.
2330 *
2331 *  Auxiliary routine for test program for Level 2 Blas.
2332 *
2333 *  -- Written on 10-August-1987.
2334 *     Richard Hanson, Sandia National Labs.
2335 *     Jeremy Du Croz, NAG Central Office.
2336 *
2337 *     .. Scalar Arguments ..
2338       INTEGER            ISNUM, NOUT
2339       CHARACTER*6        SRNAMT
2340 *     .. Scalars in Common ..
2341       INTEGER            INFOT, NOUTC
2342       LOGICAL            LERR, OK
2343 *     .. Local Scalars ..
2344       REAL               ALPHA, BETA
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.
2356       OK = .TRUE.
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.
2359       LERR = .FALSE.
2360       GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
2361      $        90, 100, 110, 120, 130, 140, 150,
2362      $        160 )ISNUM
2363    10 INFOT = 1
2364       CALL SGEMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2365       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2366       INFOT = 2
2367       CALL SGEMV( 'N', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2368       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2369       INFOT = 3
2370       CALL SGEMV( 'N', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2371       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2372       INFOT = 6
2373       CALL SGEMV( 'N', 2, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2374       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2375       INFOT = 8
2376       CALL SGEMV( 'N', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2377       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2378       INFOT = 11
2379       CALL SGEMV( 'N', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2380       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2381       GO TO 170
2382    20 INFOT = 1
2383       CALL SGBMV( '/', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2384       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2385       INFOT = 2
2386       CALL SGBMV( 'N', -1, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2387       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2388       INFOT = 3
2389       CALL SGBMV( 'N', 0, -1, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2390       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2391       INFOT = 4
2392       CALL SGBMV( 'N', 0, 0, -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2393       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2394       INFOT = 5
2395       CALL SGBMV( 'N', 2, 0, 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2396       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2397       INFOT = 8
2398       CALL SGBMV( 'N', 0, 0, 1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2399       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2400       INFOT = 10
2401       CALL SGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2402       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2403       INFOT = 13
2404       CALL SGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2405       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2406       GO TO 170
2407    30 INFOT = 1
2408       CALL SSYMV( '/', 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2409       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2410       INFOT = 2
2411       CALL SSYMV( 'U', -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2412       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2413       INFOT = 5
2414       CALL SSYMV( 'U', 2, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2415       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2416       INFOT = 7
2417       CALL SSYMV( 'U', 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2418       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2419       INFOT = 10
2420       CALL SSYMV( 'U', 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2421       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2422       GO TO 170
2423    40 INFOT = 1
2424       CALL SSBMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2425       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2426       INFOT = 2
2427       CALL SSBMV( 'U', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2428       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2429       INFOT = 3
2430       CALL SSBMV( 'U', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2431       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2432       INFOT = 6
2433       CALL SSBMV( 'U', 0, 1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
2434       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2435       INFOT = 8
2436       CALL SSBMV( 'U', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
2437       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2438       INFOT = 11
2439       CALL SSBMV( 'U', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
2440       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2441       GO TO 170
2442    50 INFOT = 1
2443       CALL SSPMV( '/', 0, ALPHA, A, X, 1, BETA, Y, 1 )
2444       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2445       INFOT = 2
2446       CALL SSPMV( 'U', -1, ALPHA, A, X, 1, BETA, Y, 1 )
2447       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2448       INFOT = 6
2449       CALL SSPMV( 'U', 0, ALPHA, A, X, 0, BETA, Y, 1 )
2450       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2451       INFOT = 9
2452       CALL SSPMV( 'U', 0, ALPHA, A, X, 1, BETA, Y, 0 )
2453       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2454       GO TO 170
2455    60 INFOT = 1
2456       CALL STRMV( '/', 'N', 'N', 0, A, 1, X, 1 )
2457       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2458       INFOT = 2
2459       CALL STRMV( 'U', '/', 'N', 0, A, 1, X, 1 )
2460       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2461       INFOT = 3
2462       CALL STRMV( 'U', 'N', '/', 0, A, 1, X, 1 )
2463       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2464       INFOT = 4
2465       CALL STRMV( 'U', 'N', 'N', -1, A, 1, X, 1 )
2466       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2467       INFOT = 6
2468       CALL STRMV( 'U', 'N', 'N', 2, A, 1, X, 1 )
2469       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2470       INFOT = 8
2471       CALL STRMV( 'U', 'N', 'N', 0, A, 1, X, 0 )
2472       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2473       GO TO 170
2474    70 INFOT = 1
2475       CALL STBMV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
2476       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2477       INFOT = 2
2478       CALL STBMV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
2479       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2480       INFOT = 3
2481       CALL STBMV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
2482       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2483       INFOT = 4
2484       CALL STBMV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
2485       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2486       INFOT = 5
2487       CALL STBMV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
2488       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2489       INFOT = 7
2490       CALL STBMV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
2491       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2492       INFOT = 9
2493       CALL STBMV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
2494       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2495       GO TO 170
2496    80 INFOT = 1
2497       CALL STPMV( '/', 'N', 'N', 0, A, X, 1 )
2498       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2499       INFOT = 2
2500       CALL STPMV( 'U', '/', 'N', 0, A, X, 1 )
2501       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2502       INFOT = 3
2503       CALL STPMV( 'U', 'N', '/', 0, A, X, 1 )
2504       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2505       INFOT = 4
2506       CALL STPMV( 'U', 'N', 'N', -1, A, X, 1 )
2507       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2508       INFOT = 7
2509       CALL STPMV( 'U', 'N', 'N', 0, A, X, 0 )
2510       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2511       GO TO 170
2512    90 INFOT = 1
2513       CALL STRSV( '/', 'N', 'N', 0, A, 1, X, 1 )
2514       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2515       INFOT = 2
2516       CALL STRSV( 'U', '/', 'N', 0, A, 1, X, 1 )
2517       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2518       INFOT = 3
2519       CALL STRSV( 'U', 'N', '/', 0, A, 1, X, 1 )
2520       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2521       INFOT = 4
2522       CALL STRSV( 'U', 'N', 'N', -1, A, 1, X, 1 )
2523       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2524       INFOT = 6
2525       CALL STRSV( 'U', 'N', 'N', 2, A, 1, X, 1 )
2526       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2527       INFOT = 8
2528       CALL STRSV( 'U', 'N', 'N', 0, A, 1, X, 0 )
2529       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2530       GO TO 170
2531   100 INFOT = 1
2532       CALL STBSV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
2533       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2534       INFOT = 2
2535       CALL STBSV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
2536       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2537       INFOT = 3
2538       CALL STBSV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
2539       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2540       INFOT = 4
2541       CALL STBSV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
2542       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2543       INFOT = 5
2544       CALL STBSV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
2545       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2546       INFOT = 7
2547       CALL STBSV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
2548       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2549       INFOT = 9
2550       CALL STBSV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
2551       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2552       GO TO 170
2553   110 INFOT = 1
2554       CALL STPSV( '/', 'N', 'N', 0, A, X, 1 )
2555       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2556       INFOT = 2
2557       CALL STPSV( 'U', '/', 'N', 0, A, X, 1 )
2558       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2559       INFOT = 3
2560       CALL STPSV( 'U', 'N', '/', 0, A, X, 1 )
2561       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2562       INFOT = 4
2563       CALL STPSV( 'U', 'N', 'N', -1, A, X, 1 )
2564       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2565       INFOT = 7
2566       CALL STPSV( 'U', 'N', 'N', 0, A, X, 0 )
2567       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2568       GO TO 170
2569   120 INFOT = 1
2570       CALL SGER( -1, 0, ALPHA, X, 1, Y, 1, A, 1 )
2571       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2572       INFOT = 2
2573       CALL SGER( 0, -1, ALPHA, X, 1, Y, 1, A, 1 )
2574       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2575       INFOT = 5
2576       CALL SGER( 0, 0, ALPHA, X, 0, Y, 1, A, 1 )
2577       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2578       INFOT = 7
2579       CALL SGER( 0, 0, ALPHA, X, 1, Y, 0, A, 1 )
2580       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2581       INFOT = 9
2582       CALL SGER( 2, 0, ALPHA, X, 1, Y, 1, A, 1 )
2583       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2584       GO TO 170
2585   130 INFOT = 1
2586       CALL SSYR( '/', 0, ALPHA, X, 1, A, 1 )
2587       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2588       INFOT = 2
2589       CALL SSYR( 'U', -1, ALPHA, X, 1, A, 1 )
2590       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2591       INFOT = 5
2592       CALL SSYR( 'U', 0, ALPHA, X, 0, A, 1 )
2593       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2594       INFOT = 7
2595       CALL SSYR( 'U', 2, ALPHA, X, 1, A, 1 )
2596       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2597       GO TO 170
2598   140 INFOT = 1
2599       CALL SSPR( '/', 0, ALPHA, X, 1, A )
2600       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2601       INFOT = 2
2602       CALL SSPR( 'U', -1, ALPHA, X, 1, A )
2603       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2604       INFOT = 5
2605       CALL SSPR( 'U', 0, ALPHA, X, 0, A )
2606       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2607       GO TO 170
2608   150 INFOT = 1
2609       CALL SSYR2( '/', 0, ALPHA, X, 1, Y, 1, A, 1 )
2610       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2611       INFOT = 2
2612       CALL SSYR2( 'U', -1, ALPHA, X, 1, Y, 1, A, 1 )
2613       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2614       INFOT = 5
2615       CALL SSYR2( 'U', 0, ALPHA, X, 0, Y, 1, A, 1 )
2616       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2617       INFOT = 7
2618       CALL SSYR2( 'U', 0, ALPHA, X, 1, Y, 0, A, 1 )
2619       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2620       INFOT = 9
2621       CALL SSYR2( 'U', 2, ALPHA, X, 1, Y, 1, A, 1 )
2622       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2623       GO TO 170
2624   160 INFOT = 1
2625       CALL SSPR2( '/', 0, ALPHA, X, 1, Y, 1, A )
2626       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2627       INFOT = 2
2628       CALL SSPR2( 'U', -1, ALPHA, X, 1, Y, 1, A )
2629       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2630       INFOT = 5
2631       CALL SSPR2( 'U', 0, ALPHA, X, 0, Y, 1, A )
2632       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2633       INFOT = 7
2634       CALL SSPR2( 'U', 0, ALPHA, X, 1, Y, 0, A )
2635       CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
2636 *
2637   170 IF( OK )THEN
2638          WRITE( NOUT, FMT = 9999 )SRNAMT
2639       ELSE
2640          WRITE( NOUT, FMT = 9998 )SRNAMT
2641       END IF
2642       RETURN
2643 *
2644  9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
2645  9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
2646      $      '**' )
2647 *
2648 *     End of SCHKE.
2649 *
2650       END
2651       SUBROUTINE SMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL,
2652      $                  KU, RESET, TRANSL )
2653 *
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.
2658 *
2659 *  TYPE is 'GE', 'GB', 'SY', 'SB', 'SP', 'TR', 'TB' OR 'TP'.
2660 *
2661 *  Auxiliary routine for test program for Level 2 Blas.
2662 *
2663 *  -- Written on 10-August-1987.
2664 *     Richard Hanson, Sandia National Labs.
2665 *     Jeremy Du Croz, NAG Central Office.
2666 *
2667 *     .. Parameters ..
2668       REAL               ZERO, ONE
2669       PARAMETER          ( ZERO = 0.0, ONE = 1.0 )
2670       REAL               ROGUE
2671       PARAMETER          ( ROGUE = -1.0E10 )
2672 *     .. Scalar Arguments ..
2673       REAL               TRANSL
2674       INTEGER            KL, KU, LDA, M, N, NMAX
2675       LOGICAL            RESET
2676       CHARACTER*1        DIAG, UPLO
2677       CHARACTER*2        TYPE
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 ..
2684       REAL               SBEG
2685       EXTERNAL           SBEG
2686 *     .. Intrinsic Functions ..
2687       INTRINSIC          MAX, MIN
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'
2695 *
2696 *     Generate data in array A.
2697 *
2698       DO 20 J = 1, N
2699          DO 10 I = 1, M
2700             IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
2701      $          THEN
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
2705                ELSE
2706                   A( I, J ) = ZERO
2707                END IF
2708                IF( I.NE.J )THEN
2709                   IF( SYM )THEN
2710                      A( J, I ) = A( I, J )
2711                   ELSE IF( TRI )THEN
2712                      A( J, I ) = ZERO
2713                   END IF
2714                END IF
2715             END IF
2716    10    CONTINUE
2717          IF( TRI )
2718      $      A( J, J ) = A( J, J ) + ONE
2719          IF( UNIT )
2720      $      A( J, J ) = ONE
2721    20 CONTINUE
2722 *
2723 *     Store elements in array AS in data structure required by routine.
2724 *
2725       IF( TYPE.EQ.'GE' )THEN
2726          DO 50 J = 1, N
2727             DO 30 I = 1, M
2728                AA( I + ( J - 1 )*LDA ) = A( I, J )
2729    30       CONTINUE
2730             DO 40 I = M + 1, LDA
2731                AA( I + ( J - 1 )*LDA ) = ROGUE
2732    40       CONTINUE
2733    50    CONTINUE
2734       ELSE IF( TYPE.EQ.'GB' )THEN
2735          DO 90 J = 1, N
2736             DO 60 I1 = 1, KU + 1 - J
2737                AA( I1 + ( J - 1 )*LDA ) = ROGUE
2738    60       CONTINUE
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 )
2741    70       CONTINUE
2742             DO 80 I3 = I2, LDA
2743                AA( I3 + ( J - 1 )*LDA ) = ROGUE
2744    80       CONTINUE
2745    90    CONTINUE
2746       ELSE IF( TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
2747          DO 130 J = 1, N
2748             IF( UPPER )THEN
2749                IBEG = 1
2750                IF( UNIT )THEN
2751                   IEND = J - 1
2752                ELSE
2753                   IEND = J
2754                END IF
2755             ELSE
2756                IF( UNIT )THEN
2757                   IBEG = J + 1
2758                ELSE
2759                   IBEG = J
2760                END IF
2761                IEND = N
2762             END IF
2763             DO 100 I = 1, IBEG - 1
2764                AA( I + ( J - 1 )*LDA ) = ROGUE
2765   100       CONTINUE
2766             DO 110 I = IBEG, IEND
2767                AA( I + ( J - 1 )*LDA ) = A( I, J )
2768   110       CONTINUE
2769             DO 120 I = IEND + 1, LDA
2770                AA( I + ( J - 1 )*LDA ) = ROGUE
2771   120       CONTINUE
2772   130    CONTINUE
2773       ELSE IF( TYPE.EQ.'SB'.OR.TYPE.EQ.'TB' )THEN
2774          DO 170 J = 1, N
2775             IF( UPPER )THEN
2776                KK = KL + 1
2777                IBEG = MAX( 1, KL + 2 - J )
2778                IF( UNIT )THEN
2779                   IEND = KL
2780                ELSE
2781                   IEND = KL + 1
2782                END IF
2783             ELSE
2784                KK = 1
2785                IF( UNIT )THEN
2786                   IBEG = 2
2787                ELSE
2788                   IBEG = 1
2789                END IF
2790                IEND = MIN( KL + 1, 1 + M - J )
2791             END IF
2792             DO 140 I = 1, IBEG - 1
2793                AA( I + ( J - 1 )*LDA ) = ROGUE
2794   140       CONTINUE
2795             DO 150 I = IBEG, IEND
2796                AA( I + ( J - 1 )*LDA ) = A( I + J - KK, J )
2797   150       CONTINUE
2798             DO 160 I = IEND + 1, LDA
2799                AA( I + ( J - 1 )*LDA ) = ROGUE
2800   160       CONTINUE
2801   170    CONTINUE
2802       ELSE IF( TYPE.EQ.'SP'.OR.TYPE.EQ.'TP' )THEN
2803          IOFF = 0
2804          DO 190 J = 1, N
2805             IF( UPPER )THEN
2806                IBEG = 1
2807                IEND = J
2808             ELSE
2809                IBEG = J
2810                IEND = N
2811             END IF
2812             DO 180 I = IBEG, IEND
2813                IOFF = IOFF + 1
2814                AA( IOFF ) = A( I, J )
2815                IF( I.EQ.J )THEN
2816                   IF( UNIT )
2817      $               AA( IOFF ) = ROGUE
2818                END IF
2819   180       CONTINUE
2820   190    CONTINUE
2821       END IF
2822       RETURN
2823 *
2824 *     End of SMAKE.
2825 *
2826       END
2827       SUBROUTINE SMVCH( TRANS, M, N, ALPHA, A, NMAX, X, INCX, BETA, Y,
2828      $                  INCY, YT, G, YY, EPS, ERR, FATAL, NOUT, MV )
2829 *
2830 *  Checks the results of the computational tests.
2831 *
2832 *  Auxiliary routine for test program for Level 2 Blas.
2833 *
2834 *  -- Written on 10-August-1987.
2835 *     Richard Hanson, Sandia National Labs.
2836 *     Jeremy Du Croz, NAG Central Office.
2837 *
2838 *     .. Parameters ..
2839       REAL               ZERO, ONE
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
2844       LOGICAL            FATAL, MV
2845       CHARACTER*1        TRANS
2846 *     .. Array Arguments ..
2847       REAL               A( NMAX, * ), G( * ), X( * ), Y( * ), YT( * ),
2848      $                   YY( * )
2849 *     .. Local Scalars ..
2850       REAL               ERRI
2851       INTEGER            I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL
2852       LOGICAL            TRAN
2853 *     .. Intrinsic Functions ..
2854       INTRINSIC          ABS, MAX, SQRT
2855 *     .. Executable Statements ..
2856       TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
2857       IF( TRAN )THEN
2858          ML = N
2859          NL = M
2860       ELSE
2861          ML = M
2862          NL = N
2863       END IF
2864       IF( INCX.LT.0 )THEN
2865          KX = NL
2866          INCXL = -1
2867       ELSE
2868          KX = 1
2869          INCXL = 1
2870       END IF
2871       IF( INCY.LT.0 )THEN
2872          KY = ML
2873          INCYL = -1
2874       ELSE
2875          KY = 1
2876          INCYL = 1
2877       END IF
2878 *
2879 *     Compute expected result in YT using data in A, X and Y.
2880 *     Compute gauges in G.
2881 *
2882       IY = KY
2883       DO 30 I = 1, ML
2884          YT( IY ) = ZERO
2885          G( IY ) = ZERO
2886          JX = KX
2887          IF( TRAN )THEN
2888             DO 10 J = 1, NL
2889                YT( IY ) = YT( IY ) + A( J, I )*X( JX )
2890                G( IY ) = G( IY ) + ABS( A( J, I )*X( JX ) )
2891                JX = JX + INCXL
2892    10       CONTINUE
2893          ELSE
2894             DO 20 J = 1, NL
2895                YT( IY ) = YT( IY ) + A( I, J )*X( JX )
2896                G( IY ) = G( IY ) + ABS( A( I, J )*X( JX ) )
2897                JX = JX + INCXL
2898    20       CONTINUE
2899          END IF
2900          YT( IY ) = ALPHA*YT( IY ) + BETA*Y( IY )
2901          G( IY ) = ABS( ALPHA )*G( IY ) + ABS( BETA*Y( IY ) )
2902          IY = IY + INCYL
2903    30 CONTINUE
2904 *
2905 *     Compute the error ratio for this result.
2906 *
2907       ERR = ZERO
2908       DO 40 I = 1, ML
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 )
2914      $      GO TO 50
2915    40 CONTINUE
2916 *     If the loop completes, all results are at least half accurate.
2917       GO TO 70
2918 *
2919 *     Report fatal error.
2920 *
2921    50 FATAL = .TRUE.
2922       WRITE( NOUT, FMT = 9999 )
2923       DO 60 I = 1, ML
2924          IF( MV )THEN
2925             WRITE( NOUT, FMT = 9998 )I, YT( I ),
2926      $         YY( 1 + ( I - 1 )*ABS( INCY ) )
2927          ELSE
2928             WRITE( NOUT, FMT = 9998 )I,
2929      $         YY( 1 + ( I - 1 )*ABS( INCY ) ), YT(I)
2930          END IF
2931    60 CONTINUE
2932 *
2933    70 CONTINUE
2934       RETURN
2935 *
2936  9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
2937      $      'F ACCURATE *******', /'           EXPECTED RESULT   COMPU',
2938      $      'TED RESULT' )
2939  9998 FORMAT( 1X, I7, 2G18.6 )
2940 *
2941 *     End of SMVCH.
2942 *
2943       END
2944       LOGICAL FUNCTION LSE( RI, RJ, LR )
2945 *
2946 *  Tests if two arrays are identical.
2947 *
2948 *  Auxiliary routine for test program for Level 2 Blas.
2949 *
2950 *  -- Written on 10-August-1987.
2951 *     Richard Hanson, Sandia National Labs.
2952 *     Jeremy Du Croz, NAG Central Office.
2953 *
2954 *     .. Scalar Arguments ..
2955       INTEGER            LR
2956 *     .. Array Arguments ..
2957       REAL               RI( * ), RJ( * )
2958 *     .. Local Scalars ..
2959       INTEGER            I
2960 *     .. Executable Statements ..
2961       DO 10 I = 1, LR
2962          IF( RI( I ).NE.RJ( I ) )
2963      $      GO TO 20
2964    10 CONTINUE
2965       LSE = .TRUE.
2966       GO TO 30
2967    20 CONTINUE
2968       LSE = .FALSE.
2969    30 RETURN
2970 *
2971 *     End of LSE.
2972 *
2973       END
2974       LOGICAL FUNCTION LSERES( TYPE, UPLO, M, N, AA, AS, LDA )
2975 *
2976 *  Tests if selected elements in two arrays are equal.
2977 *
2978 *  TYPE is 'GE', 'SY' or 'SP'.
2979 *
2980 *  Auxiliary routine for test program for Level 2 Blas.
2981 *
2982 *  -- Written on 10-August-1987.
2983 *     Richard Hanson, Sandia National Labs.
2984 *     Jeremy Du Croz, NAG Central Office.
2985 *
2986 *     .. Scalar Arguments ..
2987       INTEGER            LDA, M, N
2988       CHARACTER*1        UPLO
2989       CHARACTER*2        TYPE
2990 *     .. Array Arguments ..
2991       REAL               AA( LDA, * ), AS( LDA, * )
2992 *     .. Local Scalars ..
2993       INTEGER            I, IBEG, IEND, J
2994       LOGICAL            UPPER
2995 *     .. Executable Statements ..
2996       UPPER = UPLO.EQ.'U'
2997       IF( TYPE.EQ.'GE' )THEN
2998          DO 20 J = 1, N
2999             DO 10 I = M + 1, LDA
3000                IF( AA( I, J ).NE.AS( I, J ) )
3001      $            GO TO 70
3002    10       CONTINUE
3003    20    CONTINUE
3004       ELSE IF( TYPE.EQ.'SY' )THEN
3005          DO 50 J = 1, N
3006             IF( UPPER )THEN
3007                IBEG = 1
3008                IEND = J
3009             ELSE
3010                IBEG = J
3011                IEND = N
3012             END IF
3013             DO 30 I = 1, IBEG - 1
3014                IF( AA( I, J ).NE.AS( I, J ) )
3015      $            GO TO 70
3016    30       CONTINUE
3017             DO 40 I = IEND + 1, LDA
3018                IF( AA( I, J ).NE.AS( I, J ) )
3019      $            GO TO 70
3020    40       CONTINUE
3021    50    CONTINUE
3022       END IF
3023 *
3024       LSERES = .TRUE.
3025       GO TO 80
3026    70 CONTINUE
3027       LSERES = .FALSE.
3028    80 RETURN
3029 *
3030 *     End of LSERES.
3031 *
3032       END
3033       REAL FUNCTION SBEG( RESET )
3034 *
3035 *  Generates random numbers uniformly distributed between -0.5 and 0.5.
3036 *
3037 *  Auxiliary routine for test program for Level 2 Blas.
3038 *
3039 *  -- Written on 10-August-1987.
3040 *     Richard Hanson, Sandia National Labs.
3041 *     Jeremy Du Croz, NAG Central Office.
3042 *
3043 *     .. Scalar Arguments ..
3044       LOGICAL            RESET
3045 *     .. Local Scalars ..
3046       INTEGER            I, IC, MI
3047 *     .. Save statement ..
3048       SAVE               I, IC, MI
3049 *     .. Intrinsic Functions ..
3050       INTRINSIC          REAL
3051 *     .. Executable Statements ..
3052       IF( RESET )THEN
3053 *        Initialize local variables.
3054          MI = 891
3055          I = 7
3056          IC = 0
3057          RESET = .FALSE.
3058       END IF
3059 *
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.
3065 *
3066       IC = IC + 1
3067    10 I = I*MI
3068       I = I - 1000*( I/1000 )
3069       IF( IC.GE.5 )THEN
3070          IC = 0
3071          GO TO 10
3072       END IF
3073       SBEG = REAL( I - 500 )/1001.0
3074       RETURN
3075 *
3076 *     End of SBEG.
3077 *
3078       END
3079       REAL FUNCTION SDIFF( X, Y )
3080 *
3081 *  Auxiliary routine for test program for Level 2 Blas.
3082 *
3083 *  -- Written on 10-August-1987.
3084 *     Richard Hanson, Sandia National Labs.
3085 *
3086 *     .. Scalar Arguments ..
3087       REAL               X, Y
3088 *     .. Executable Statements ..
3089       SDIFF = X - Y
3090       RETURN
3091 *
3092 *     End of SDIFF.
3093 *
3094       END
3095       SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
3096 *
3097 *  Tests whether XERBLA has detected an error when it should.
3098 *
3099 *  Auxiliary routine for test program for Level 2 Blas.
3100 *
3101 *  -- Written on 10-August-1987.
3102 *     Richard Hanson, Sandia National Labs.
3103 *     Jeremy Du Croz, NAG Central Office.
3104 *
3105 *     .. Scalar Arguments ..
3106       INTEGER            INFOT, NOUT
3107       LOGICAL            LERR, OK
3108       CHARACTER*6        SRNAMT
3109 *     .. Executable Statements ..
3110       IF( .NOT.LERR )THEN
3111          WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
3112          OK = .FALSE.
3113       END IF
3114       LERR = .FALSE.
3115       RETURN
3116 *
3117  9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
3118      $      'ETECTED BY ', A6, ' *****' )
3119 *
3120 *     End of CHKXER.
3121 *
3122       END
3123       SUBROUTINE XERBLA( SRNAME, INFO )
3124 *
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
3127 *  routines.
3128 *
3129 *  XERBLA  is an error handler for the Level 2 BLAS routines.
3130 *
3131 *  It is called by the Level 2 BLAS routines if an input parameter is
3132 *  invalid.
3133 *
3134 *  Auxiliary routine for test program for Level 2 Blas.
3135 *
3136 *  -- Written on 10-August-1987.
3137 *     Richard Hanson, Sandia National Labs.
3138 *     Jeremy Du Croz, NAG Central Office.
3139 *
3140 *     .. Scalar Arguments ..
3141       INTEGER            INFO
3142       CHARACTER*6        SRNAME
3143 *     .. Scalars in Common ..
3144       INTEGER            INFOT, NOUT
3145       LOGICAL            LERR, OK
3146       CHARACTER*6        SRNAMT
3147 *     .. Common blocks ..
3148       COMMON             /INFOC/INFOT, NOUT, OK, LERR
3149       COMMON             /SRNAMC/SRNAMT
3150 *     .. Executable Statements ..
3151       LERR = .TRUE.
3152       IF( INFO.NE.INFOT )THEN
3153          IF( INFOT.NE.0 )THEN
3154             WRITE( NOUT, FMT = 9999 )INFO, INFOT
3155          ELSE
3156             WRITE( NOUT, FMT = 9997 )INFO
3157          END IF
3158          OK = .FALSE.
3159       END IF
3160       IF( SRNAME.NE.SRNAMT )THEN
3161          WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
3162          OK = .FALSE.
3163       END IF
3164       RETURN
3165 *
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,
3171      $      ' *******' )
3172 *
3173 *     End of XERBLA
3174 *
3175       END
3176