00001 PROGRAM SBLAT2
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 INTEGER NIN
00072 PARAMETER ( NIN = 5 )
00073 INTEGER NSUBS
00074 PARAMETER ( NSUBS = 16 )
00075 REAL ZERO, HALF, ONE
00076 PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
00077 INTEGER NMAX, INCMAX
00078 PARAMETER ( NMAX = 65, INCMAX = 2 )
00079 INTEGER NINMAX, NIDMAX, NKBMAX, NALMAX, NBEMAX
00080 PARAMETER ( NINMAX = 7, NIDMAX = 9, NKBMAX = 7,
00081 $ NALMAX = 7, NBEMAX = 7 )
00082
00083 REAL EPS, ERR, THRESH
00084 INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NINC, NKB,
00085 $ NOUT, NTRA
00086 LOGICAL FATAL, LTESTT, REWI, SAME, SFATAL, TRACE,
00087 $ TSTERR
00088 CHARACTER*1 TRANS
00089 CHARACTER*6 SNAMET
00090 CHARACTER*32 SNAPS, SUMMRY
00091
00092 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ),
00093 $ ALF( NALMAX ), AS( NMAX*NMAX ), BET( NBEMAX ),
00094 $ G( NMAX ), X( NMAX ), XS( NMAX*INCMAX ),
00095 $ XX( NMAX*INCMAX ), Y( NMAX ),
00096 $ YS( NMAX*INCMAX ), YT( NMAX ),
00097 $ YY( NMAX*INCMAX ), Z( 2*NMAX )
00098 INTEGER IDIM( NIDMAX ), INC( NINMAX ), KB( NKBMAX )
00099 LOGICAL LTEST( NSUBS )
00100 CHARACTER*6 SNAMES( NSUBS )
00101
00102 REAL SDIFF
00103 LOGICAL LSE
00104 EXTERNAL SDIFF, LSE
00105
00106 EXTERNAL SCHK1, SCHK2, SCHK3, SCHK4, SCHK5, SCHK6,
00107 $ SCHKE, SMVCH
00108
00109 INTRINSIC ABS, MAX, MIN
00110
00111 INTEGER INFOT, NOUTC
00112 LOGICAL LERR, OK
00113 CHARACTER*6 SRNAMT
00114
00115 COMMON /INFOC/INFOT, NOUTC, OK, LERR
00116 COMMON /SRNAMC/SRNAMT
00117
00118 DATA SNAMES/'SGEMV ', 'SGBMV ', 'SSYMV ', 'SSBMV ',
00119 $ 'SSPMV ', 'STRMV ', 'STBMV ', 'STPMV ',
00120 $ 'STRSV ', 'STBSV ', 'STPSV ', 'SGER ',
00121 $ 'SSYR ', 'SSPR ', 'SSYR2 ', 'SSPR2 '/
00122
00123
00124
00125
00126 READ( NIN, FMT = * )SUMMRY
00127 READ( NIN, FMT = * )NOUT
00128 OPEN( NOUT, FILE = SUMMRY, STATUS = 'UNKNOWN' )
00129 NOUTC = NOUT
00130
00131
00132
00133 READ( NIN, FMT = * )SNAPS
00134 READ( NIN, FMT = * )NTRA
00135 TRACE = NTRA.GE.0
00136 IF( TRACE )THEN
00137 OPEN( NTRA, FILE = SNAPS, STATUS = 'UNKNOWN' )
00138 END IF
00139
00140 READ( NIN, FMT = * )REWI
00141 REWI = REWI.AND.TRACE
00142
00143 READ( NIN, FMT = * )SFATAL
00144
00145 READ( NIN, FMT = * )TSTERR
00146
00147 READ( NIN, FMT = * )THRESH
00148
00149
00150
00151
00152 READ( NIN, FMT = * )NIDIM
00153 IF( NIDIM.LT.1.OR.NIDIM.GT.NIDMAX )THEN
00154 WRITE( NOUT, FMT = 9997 )'N', NIDMAX
00155 GO TO 230
00156 END IF
00157 READ( NIN, FMT = * )( IDIM( I ), I = 1, NIDIM )
00158 DO 10 I = 1, NIDIM
00159 IF( IDIM( I ).LT.0.OR.IDIM( I ).GT.NMAX )THEN
00160 WRITE( NOUT, FMT = 9996 )NMAX
00161 GO TO 230
00162 END IF
00163 10 CONTINUE
00164
00165 READ( NIN, FMT = * )NKB
00166 IF( NKB.LT.1.OR.NKB.GT.NKBMAX )THEN
00167 WRITE( NOUT, FMT = 9997 )'K', NKBMAX
00168 GO TO 230
00169 END IF
00170 READ( NIN, FMT = * )( KB( I ), I = 1, NKB )
00171 DO 20 I = 1, NKB
00172 IF( KB( I ).LT.0 )THEN
00173 WRITE( NOUT, FMT = 9995 )
00174 GO TO 230
00175 END IF
00176 20 CONTINUE
00177
00178 READ( NIN, FMT = * )NINC
00179 IF( NINC.LT.1.OR.NINC.GT.NINMAX )THEN
00180 WRITE( NOUT, FMT = 9997 )'INCX AND INCY', NINMAX
00181 GO TO 230
00182 END IF
00183 READ( NIN, FMT = * )( INC( I ), I = 1, NINC )
00184 DO 30 I = 1, NINC
00185 IF( INC( I ).EQ.0.OR.ABS( INC( I ) ).GT.INCMAX )THEN
00186 WRITE( NOUT, FMT = 9994 )INCMAX
00187 GO TO 230
00188 END IF
00189 30 CONTINUE
00190
00191 READ( NIN, FMT = * )NALF
00192 IF( NALF.LT.1.OR.NALF.GT.NALMAX )THEN
00193 WRITE( NOUT, FMT = 9997 )'ALPHA', NALMAX
00194 GO TO 230
00195 END IF
00196 READ( NIN, FMT = * )( ALF( I ), I = 1, NALF )
00197
00198 READ( NIN, FMT = * )NBET
00199 IF( NBET.LT.1.OR.NBET.GT.NBEMAX )THEN
00200 WRITE( NOUT, FMT = 9997 )'BETA', NBEMAX
00201 GO TO 230
00202 END IF
00203 READ( NIN, FMT = * )( BET( I ), I = 1, NBET )
00204
00205
00206
00207 WRITE( NOUT, FMT = 9993 )
00208 WRITE( NOUT, FMT = 9992 )( IDIM( I ), I = 1, NIDIM )
00209 WRITE( NOUT, FMT = 9991 )( KB( I ), I = 1, NKB )
00210 WRITE( NOUT, FMT = 9990 )( INC( I ), I = 1, NINC )
00211 WRITE( NOUT, FMT = 9989 )( ALF( I ), I = 1, NALF )
00212 WRITE( NOUT, FMT = 9988 )( BET( I ), I = 1, NBET )
00213 IF( .NOT.TSTERR )THEN
00214 WRITE( NOUT, FMT = * )
00215 WRITE( NOUT, FMT = 9980 )
00216 END IF
00217 WRITE( NOUT, FMT = * )
00218 WRITE( NOUT, FMT = 9999 )THRESH
00219 WRITE( NOUT, FMT = * )
00220
00221
00222
00223
00224 DO 40 I = 1, NSUBS
00225 LTEST( I ) = .FALSE.
00226 40 CONTINUE
00227 50 READ( NIN, FMT = 9984, END = 80 )SNAMET, LTESTT
00228 DO 60 I = 1, NSUBS
00229 IF( SNAMET.EQ.SNAMES( I ) )
00230 $ GO TO 70
00231 60 CONTINUE
00232 WRITE( NOUT, FMT = 9986 )SNAMET
00233 STOP
00234 70 LTEST( I ) = LTESTT
00235 GO TO 50
00236
00237 80 CONTINUE
00238 CLOSE ( NIN )
00239
00240
00241
00242 EPS = ONE
00243 90 CONTINUE
00244 IF( SDIFF( ONE + EPS, ONE ).EQ.ZERO )
00245 $ GO TO 100
00246 EPS = HALF*EPS
00247 GO TO 90
00248 100 CONTINUE
00249 EPS = EPS + EPS
00250 WRITE( NOUT, FMT = 9998 )EPS
00251
00252
00253
00254 N = MIN( 32, NMAX )
00255 DO 120 J = 1, N
00256 DO 110 I = 1, N
00257 A( I, J ) = MAX( I - J + 1, 0 )
00258 110 CONTINUE
00259 X( J ) = J
00260 Y( J ) = ZERO
00261 120 CONTINUE
00262 DO 130 J = 1, N
00263 YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3
00264 130 CONTINUE
00265
00266
00267 TRANS = 'N'
00268 CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X, 1, ZERO, Y, 1, YT, G,
00269 $ YY, EPS, ERR, FATAL, NOUT, .TRUE. )
00270 SAME = LSE( YY, YT, N )
00271 IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
00272 WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR
00273 STOP
00274 END IF
00275 TRANS = 'T'
00276 CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X, -1, ZERO, Y, -1, YT, G,
00277 $ YY, EPS, ERR, FATAL, NOUT, .TRUE. )
00278 SAME = LSE( YY, YT, N )
00279 IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN
00280 WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR
00281 STOP
00282 END IF
00283
00284
00285
00286 DO 210 ISNUM = 1, NSUBS
00287 WRITE( NOUT, FMT = * )
00288 IF( .NOT.LTEST( ISNUM ) )THEN
00289
00290 WRITE( NOUT, FMT = 9983 )SNAMES( ISNUM )
00291 ELSE
00292 SRNAMT = SNAMES( ISNUM )
00293
00294 IF( TSTERR )THEN
00295 CALL SCHKE( ISNUM, SNAMES( ISNUM ), NOUT )
00296 WRITE( NOUT, FMT = * )
00297 END IF
00298
00299 INFOT = 0
00300 OK = .TRUE.
00301 FATAL = .FALSE.
00302 GO TO ( 140, 140, 150, 150, 150, 160, 160,
00303 $ 160, 160, 160, 160, 170, 180, 180,
00304 $ 190, 190 )ISNUM
00305
00306 140 CALL SCHK1( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00307 $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF,
00308 $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS,
00309 $ X, XX, XS, Y, YY, YS, YT, G )
00310 GO TO 200
00311
00312 150 CALL SCHK2( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00313 $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF,
00314 $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS,
00315 $ X, XX, XS, Y, YY, YS, YT, G )
00316 GO TO 200
00317
00318
00319 160 CALL SCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00320 $ REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC,
00321 $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z )
00322 GO TO 200
00323
00324 170 CALL SCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00325 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,
00326 $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,
00327 $ YT, G, Z )
00328 GO TO 200
00329
00330 180 CALL SCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00331 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,
00332 $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,
00333 $ YT, G, Z )
00334 GO TO 200
00335
00336 190 CALL SCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,
00337 $ REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,
00338 $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,
00339 $ YT, G, Z )
00340
00341 200 IF( FATAL.AND.SFATAL )
00342 $ GO TO 220
00343 END IF
00344 210 CONTINUE
00345 WRITE( NOUT, FMT = 9982 )
00346 GO TO 240
00347
00348 220 CONTINUE
00349 WRITE( NOUT, FMT = 9981 )
00350 GO TO 240
00351
00352 230 CONTINUE
00353 WRITE( NOUT, FMT = 9987 )
00354
00355 240 CONTINUE
00356 IF( TRACE )
00357 $ CLOSE ( NTRA )
00358 CLOSE ( NOUT )
00359 STOP
00360
00361 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',
00362 $ 'S THAN', F8.2 )
00363 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 )
00364 9997 FORMAT( ' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',
00365 $ 'THAN ', I2 )
00366 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 )
00367 9995 FORMAT( ' VALUE OF K IS LESS THAN 0' )
00368 9994 FORMAT( ' ABSOLUTE VALUE OF INCX OR INCY IS 0 OR GREATER THAN ',
00369 $ I2 )
00370 9993 FORMAT( ' TESTS OF THE REAL LEVEL 2 BLAS', //' THE F',
00371 $ 'OLLOWING PARAMETER VALUES WILL BE USED:' )
00372 9992 FORMAT( ' FOR N ', 9I6 )
00373 9991 FORMAT( ' FOR K ', 7I6 )
00374 9990 FORMAT( ' FOR INCX AND INCY ', 7I6 )
00375 9989 FORMAT( ' FOR ALPHA ', 7F6.1 )
00376 9988 FORMAT( ' FOR BETA ', 7F6.1 )
00377 9987 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',
00378 $ /' ******* TESTS ABANDONED *******' )
00379 9986 FORMAT( ' SUBPROGRAM NAME ', A6, ' NOT RECOGNIZED', /' ******* T',
00380 $ 'ESTS ABANDONED *******' )
00381 9985 FORMAT( ' ERROR IN SMVCH - IN-LINE DOT PRODUCTS ARE BEING EVALU',
00382 $ 'ATED WRONGLY.', /' SMVCH WAS CALLED WITH TRANS = ', A1,
00383 $ ' AND RETURNED SAME = ', L1, ' AND ERR = ', F12.3, '.', /
00384 $ ' THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.'
00385 $ , /' ******* TESTS ABANDONED *******' )
00386 9984 FORMAT( A6, L2 )
00387 9983 FORMAT( 1X, A6, ' WAS NOT TESTED' )
00388 9982 FORMAT( /' END OF TESTS' )
00389 9981 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' )
00390 9980 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )
00391
00392
00393
00394 END
00395 SUBROUTINE SCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
00396 $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET,
00397 $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX,
00398 $ XS, Y, YY, YS, YT, G )
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409 REAL ZERO, HALF
00410 PARAMETER ( ZERO = 0.0, HALF = 0.5 )
00411
00412 REAL EPS, THRESH
00413 INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,
00414 $ NOUT, NTRA
00415 LOGICAL FATAL, REWI, TRACE
00416 CHARACTER*6 SNAME
00417
00418 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
00419 $ AS( NMAX*NMAX ), BET( NBET ), G( NMAX ),
00420 $ X( NMAX ), XS( NMAX*INCMAX ),
00421 $ XX( NMAX*INCMAX ), Y( NMAX ),
00422 $ YS( NMAX*INCMAX ), YT( NMAX ),
00423 $ YY( NMAX*INCMAX )
00424 INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB )
00425
00426 REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX, TRANSL
00427 INTEGER I, IA, IB, IC, IKU, IM, IN, INCX, INCXS, INCY,
00428 $ INCYS, IX, IY, KL, KLS, KU, KUS, LAA, LDA,
00429 $ LDAS, LX, LY, M, ML, MS, N, NARGS, NC, ND, NK,
00430 $ NL, NS
00431 LOGICAL BANDED, FULL, NULL, RESET, SAME, TRAN
00432 CHARACTER*1 TRANS, TRANSS
00433 CHARACTER*3 ICH
00434
00435 LOGICAL ISAME( 13 )
00436
00437 LOGICAL LSE, LSERES
00438 EXTERNAL LSE, LSERES
00439
00440 EXTERNAL SGBMV, SGEMV, SMAKE, SMVCH
00441
00442 INTRINSIC ABS, MAX, MIN
00443
00444 INTEGER INFOT, NOUTC
00445 LOGICAL LERR, OK
00446
00447 COMMON /INFOC/INFOT, NOUTC, OK, LERR
00448
00449 DATA ICH/'NTC'/
00450
00451 FULL = SNAME( 3: 3 ).EQ.'E'
00452 BANDED = SNAME( 3: 3 ).EQ.'B'
00453
00454 IF( FULL )THEN
00455 NARGS = 11
00456 ELSE IF( BANDED )THEN
00457 NARGS = 13
00458 END IF
00459
00460 NC = 0
00461 RESET = .TRUE.
00462 ERRMAX = ZERO
00463
00464 DO 120 IN = 1, NIDIM
00465 N = IDIM( IN )
00466 ND = N/2 + 1
00467
00468 DO 110 IM = 1, 2
00469 IF( IM.EQ.1 )
00470 $ M = MAX( N - ND, 0 )
00471 IF( IM.EQ.2 )
00472 $ M = MIN( N + ND, NMAX )
00473
00474 IF( BANDED )THEN
00475 NK = NKB
00476 ELSE
00477 NK = 1
00478 END IF
00479 DO 100 IKU = 1, NK
00480 IF( BANDED )THEN
00481 KU = KB( IKU )
00482 KL = MAX( KU - 1, 0 )
00483 ELSE
00484 KU = N - 1
00485 KL = M - 1
00486 END IF
00487
00488 IF( BANDED )THEN
00489 LDA = KL + KU + 1
00490 ELSE
00491 LDA = M
00492 END IF
00493 IF( LDA.LT.NMAX )
00494 $ LDA = LDA + 1
00495
00496 IF( LDA.GT.NMAX )
00497 $ GO TO 100
00498 LAA = LDA*N
00499 NULL = N.LE.0.OR.M.LE.0
00500
00501
00502
00503 TRANSL = ZERO
00504 CALL SMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX, AA,
00505 $ LDA, KL, KU, RESET, TRANSL )
00506
00507 DO 90 IC = 1, 3
00508 TRANS = ICH( IC: IC )
00509 TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
00510
00511 IF( TRAN )THEN
00512 ML = N
00513 NL = M
00514 ELSE
00515 ML = M
00516 NL = N
00517 END IF
00518
00519 DO 80 IX = 1, NINC
00520 INCX = INC( IX )
00521 LX = ABS( INCX )*NL
00522
00523
00524
00525 TRANSL = HALF
00526 CALL SMAKE( 'GE', ' ', ' ', 1, NL, X, 1, XX,
00527 $ ABS( INCX ), 0, NL - 1, RESET, TRANSL )
00528 IF( NL.GT.1 )THEN
00529 X( NL/2 ) = ZERO
00530 XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO
00531 END IF
00532
00533 DO 70 IY = 1, NINC
00534 INCY = INC( IY )
00535 LY = ABS( INCY )*ML
00536
00537 DO 60 IA = 1, NALF
00538 ALPHA = ALF( IA )
00539
00540 DO 50 IB = 1, NBET
00541 BETA = BET( IB )
00542
00543
00544
00545 TRANSL = ZERO
00546 CALL SMAKE( 'GE', ' ', ' ', 1, ML, Y, 1,
00547 $ YY, ABS( INCY ), 0, ML - 1,
00548 $ RESET, TRANSL )
00549
00550 NC = NC + 1
00551
00552
00553
00554
00555 TRANSS = TRANS
00556 MS = M
00557 NS = N
00558 KLS = KL
00559 KUS = KU
00560 ALS = ALPHA
00561 DO 10 I = 1, LAA
00562 AS( I ) = AA( I )
00563 10 CONTINUE
00564 LDAS = LDA
00565 DO 20 I = 1, LX
00566 XS( I ) = XX( I )
00567 20 CONTINUE
00568 INCXS = INCX
00569 BLS = BETA
00570 DO 30 I = 1, LY
00571 YS( I ) = YY( I )
00572 30 CONTINUE
00573 INCYS = INCY
00574
00575
00576
00577 IF( FULL )THEN
00578 IF( TRACE )
00579 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
00580 $ TRANS, M, N, ALPHA, LDA, INCX, BETA,
00581 $ INCY
00582 IF( REWI )
00583 $ REWIND NTRA
00584 CALL SGEMV( TRANS, M, N, ALPHA, AA,
00585 $ LDA, XX, INCX, BETA, YY,
00586 $ INCY )
00587 ELSE IF( BANDED )THEN
00588 IF( TRACE )
00589 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
00590 $ TRANS, M, N, KL, KU, ALPHA, LDA,
00591 $ INCX, BETA, INCY
00592 IF( REWI )
00593 $ REWIND NTRA
00594 CALL SGBMV( TRANS, M, N, KL, KU, ALPHA,
00595 $ AA, LDA, XX, INCX, BETA,
00596 $ YY, INCY )
00597 END IF
00598
00599
00600
00601 IF( .NOT.OK )THEN
00602 WRITE( NOUT, FMT = 9993 )
00603 FATAL = .TRUE.
00604 GO TO 130
00605 END IF
00606
00607
00608
00609 ISAME( 1 ) = TRANS.EQ.TRANSS
00610 ISAME( 2 ) = MS.EQ.M
00611 ISAME( 3 ) = NS.EQ.N
00612 IF( FULL )THEN
00613 ISAME( 4 ) = ALS.EQ.ALPHA
00614 ISAME( 5 ) = LSE( AS, AA, LAA )
00615 ISAME( 6 ) = LDAS.EQ.LDA
00616 ISAME( 7 ) = LSE( XS, XX, LX )
00617 ISAME( 8 ) = INCXS.EQ.INCX
00618 ISAME( 9 ) = BLS.EQ.BETA
00619 IF( NULL )THEN
00620 ISAME( 10 ) = LSE( YS, YY, LY )
00621 ELSE
00622 ISAME( 10 ) = LSERES( 'GE', ' ', 1,
00623 $ ML, YS, YY,
00624 $ ABS( INCY ) )
00625 END IF
00626 ISAME( 11 ) = INCYS.EQ.INCY
00627 ELSE IF( BANDED )THEN
00628 ISAME( 4 ) = KLS.EQ.KL
00629 ISAME( 5 ) = KUS.EQ.KU
00630 ISAME( 6 ) = ALS.EQ.ALPHA
00631 ISAME( 7 ) = LSE( AS, AA, LAA )
00632 ISAME( 8 ) = LDAS.EQ.LDA
00633 ISAME( 9 ) = LSE( XS, XX, LX )
00634 ISAME( 10 ) = INCXS.EQ.INCX
00635 ISAME( 11 ) = BLS.EQ.BETA
00636 IF( NULL )THEN
00637 ISAME( 12 ) = LSE( YS, YY, LY )
00638 ELSE
00639 ISAME( 12 ) = LSERES( 'GE', ' ', 1,
00640 $ ML, YS, YY,
00641 $ ABS( INCY ) )
00642 END IF
00643 ISAME( 13 ) = INCYS.EQ.INCY
00644 END IF
00645
00646
00647
00648
00649 SAME = .TRUE.
00650 DO 40 I = 1, NARGS
00651 SAME = SAME.AND.ISAME( I )
00652 IF( .NOT.ISAME( I ) )
00653 $ WRITE( NOUT, FMT = 9998 )I
00654 40 CONTINUE
00655 IF( .NOT.SAME )THEN
00656 FATAL = .TRUE.
00657 GO TO 130
00658 END IF
00659
00660 IF( .NOT.NULL )THEN
00661
00662
00663
00664 CALL SMVCH( TRANS, M, N, ALPHA, A,
00665 $ NMAX, X, INCX, BETA, Y,
00666 $ INCY, YT, G, YY, EPS, ERR,
00667 $ FATAL, NOUT, .TRUE. )
00668 ERRMAX = MAX( ERRMAX, ERR )
00669
00670
00671 IF( FATAL )
00672 $ GO TO 130
00673 ELSE
00674
00675
00676 GO TO 110
00677 END IF
00678
00679 50 CONTINUE
00680
00681 60 CONTINUE
00682
00683 70 CONTINUE
00684
00685 80 CONTINUE
00686
00687 90 CONTINUE
00688
00689 100 CONTINUE
00690
00691 110 CONTINUE
00692
00693 120 CONTINUE
00694
00695
00696
00697 IF( ERRMAX.LT.THRESH )THEN
00698 WRITE( NOUT, FMT = 9999 )SNAME, NC
00699 ELSE
00700 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
00701 END IF
00702 GO TO 140
00703
00704 130 CONTINUE
00705 WRITE( NOUT, FMT = 9996 )SNAME
00706 IF( FULL )THEN
00707 WRITE( NOUT, FMT = 9994 )NC, SNAME, TRANS, M, N, ALPHA, LDA,
00708 $ INCX, BETA, INCY
00709 ELSE IF( BANDED )THEN
00710 WRITE( NOUT, FMT = 9995 )NC, SNAME, TRANS, M, N, KL, KU,
00711 $ ALPHA, LDA, INCX, BETA, INCY
00712 END IF
00713
00714 140 CONTINUE
00715 RETURN
00716
00717 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
00718 $ 'S)' )
00719 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
00720 $ 'ANGED INCORRECTLY *******' )
00721 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
00722 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
00723 $ ' - SUSPECT *******' )
00724 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
00725 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', 4( I3, ',' ), F4.1,
00726 $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2, ') .' )
00727 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', 2( I3, ',' ), F4.1,
00728 $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2,
00729 $ ') .' )
00730 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
00731 $ '******' )
00732
00733
00734
00735 END
00736 SUBROUTINE SCHK2( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
00737 $ FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET,
00738 $ BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX,
00739 $ XS, Y, YY, YS, YT, G )
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750 REAL ZERO, HALF
00751 PARAMETER ( ZERO = 0.0, HALF = 0.5 )
00752
00753 REAL EPS, THRESH
00754 INTEGER INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,
00755 $ NOUT, NTRA
00756 LOGICAL FATAL, REWI, TRACE
00757 CHARACTER*6 SNAME
00758
00759 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
00760 $ AS( NMAX*NMAX ), BET( NBET ), G( NMAX ),
00761 $ X( NMAX ), XS( NMAX*INCMAX ),
00762 $ XX( NMAX*INCMAX ), Y( NMAX ),
00763 $ YS( NMAX*INCMAX ), YT( NMAX ),
00764 $ YY( NMAX*INCMAX )
00765 INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB )
00766
00767 REAL ALPHA, ALS, BETA, BLS, ERR, ERRMAX, TRANSL
00768 INTEGER I, IA, IB, IC, IK, IN, INCX, INCXS, INCY,
00769 $ INCYS, IX, IY, K, KS, LAA, LDA, LDAS, LX, LY,
00770 $ N, NARGS, NC, NK, NS
00771 LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME
00772 CHARACTER*1 UPLO, UPLOS
00773 CHARACTER*2 ICH
00774
00775 LOGICAL ISAME( 13 )
00776
00777 LOGICAL LSE, LSERES
00778 EXTERNAL LSE, LSERES
00779
00780 EXTERNAL SMAKE, SMVCH, SSBMV, SSPMV, SSYMV
00781
00782 INTRINSIC ABS, MAX
00783
00784 INTEGER INFOT, NOUTC
00785 LOGICAL LERR, OK
00786
00787 COMMON /INFOC/INFOT, NOUTC, OK, LERR
00788
00789 DATA ICH/'UL'/
00790
00791 FULL = SNAME( 3: 3 ).EQ.'Y'
00792 BANDED = SNAME( 3: 3 ).EQ.'B'
00793 PACKED = SNAME( 3: 3 ).EQ.'P'
00794
00795 IF( FULL )THEN
00796 NARGS = 10
00797 ELSE IF( BANDED )THEN
00798 NARGS = 11
00799 ELSE IF( PACKED )THEN
00800 NARGS = 9
00801 END IF
00802
00803 NC = 0
00804 RESET = .TRUE.
00805 ERRMAX = ZERO
00806
00807 DO 110 IN = 1, NIDIM
00808 N = IDIM( IN )
00809
00810 IF( BANDED )THEN
00811 NK = NKB
00812 ELSE
00813 NK = 1
00814 END IF
00815 DO 100 IK = 1, NK
00816 IF( BANDED )THEN
00817 K = KB( IK )
00818 ELSE
00819 K = N - 1
00820 END IF
00821
00822 IF( BANDED )THEN
00823 LDA = K + 1
00824 ELSE
00825 LDA = N
00826 END IF
00827 IF( LDA.LT.NMAX )
00828 $ LDA = LDA + 1
00829
00830 IF( LDA.GT.NMAX )
00831 $ GO TO 100
00832 IF( PACKED )THEN
00833 LAA = ( N*( N + 1 ) )/2
00834 ELSE
00835 LAA = LDA*N
00836 END IF
00837 NULL = N.LE.0
00838
00839 DO 90 IC = 1, 2
00840 UPLO = ICH( IC: IC )
00841
00842
00843
00844 TRANSL = ZERO
00845 CALL SMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX, AA,
00846 $ LDA, K, K, RESET, TRANSL )
00847
00848 DO 80 IX = 1, NINC
00849 INCX = INC( IX )
00850 LX = ABS( INCX )*N
00851
00852
00853
00854 TRANSL = HALF
00855 CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
00856 $ ABS( INCX ), 0, N - 1, RESET, TRANSL )
00857 IF( N.GT.1 )THEN
00858 X( N/2 ) = ZERO
00859 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
00860 END IF
00861
00862 DO 70 IY = 1, NINC
00863 INCY = INC( IY )
00864 LY = ABS( INCY )*N
00865
00866 DO 60 IA = 1, NALF
00867 ALPHA = ALF( IA )
00868
00869 DO 50 IB = 1, NBET
00870 BETA = BET( IB )
00871
00872
00873
00874 TRANSL = ZERO
00875 CALL SMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
00876 $ ABS( INCY ), 0, N - 1, RESET,
00877 $ TRANSL )
00878
00879 NC = NC + 1
00880
00881
00882
00883
00884 UPLOS = UPLO
00885 NS = N
00886 KS = K
00887 ALS = ALPHA
00888 DO 10 I = 1, LAA
00889 AS( I ) = AA( I )
00890 10 CONTINUE
00891 LDAS = LDA
00892 DO 20 I = 1, LX
00893 XS( I ) = XX( I )
00894 20 CONTINUE
00895 INCXS = INCX
00896 BLS = BETA
00897 DO 30 I = 1, LY
00898 YS( I ) = YY( I )
00899 30 CONTINUE
00900 INCYS = INCY
00901
00902
00903
00904 IF( FULL )THEN
00905 IF( TRACE )
00906 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
00907 $ UPLO, N, ALPHA, LDA, INCX, BETA, INCY
00908 IF( REWI )
00909 $ REWIND NTRA
00910 CALL SSYMV( UPLO, N, ALPHA, AA, LDA, XX,
00911 $ INCX, BETA, YY, INCY )
00912 ELSE IF( BANDED )THEN
00913 IF( TRACE )
00914 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
00915 $ UPLO, N, K, ALPHA, LDA, INCX, BETA,
00916 $ INCY
00917 IF( REWI )
00918 $ REWIND NTRA
00919 CALL SSBMV( UPLO, N, K, ALPHA, AA, LDA,
00920 $ XX, INCX, BETA, YY, INCY )
00921 ELSE IF( PACKED )THEN
00922 IF( TRACE )
00923 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
00924 $ UPLO, N, ALPHA, INCX, BETA, INCY
00925 IF( REWI )
00926 $ REWIND NTRA
00927 CALL SSPMV( UPLO, N, ALPHA, AA, XX, INCX,
00928 $ BETA, YY, INCY )
00929 END IF
00930
00931
00932
00933 IF( .NOT.OK )THEN
00934 WRITE( NOUT, FMT = 9992 )
00935 FATAL = .TRUE.
00936 GO TO 120
00937 END IF
00938
00939
00940
00941 ISAME( 1 ) = UPLO.EQ.UPLOS
00942 ISAME( 2 ) = NS.EQ.N
00943 IF( FULL )THEN
00944 ISAME( 3 ) = ALS.EQ.ALPHA
00945 ISAME( 4 ) = LSE( AS, AA, LAA )
00946 ISAME( 5 ) = LDAS.EQ.LDA
00947 ISAME( 6 ) = LSE( XS, XX, LX )
00948 ISAME( 7 ) = INCXS.EQ.INCX
00949 ISAME( 8 ) = BLS.EQ.BETA
00950 IF( NULL )THEN
00951 ISAME( 9 ) = LSE( YS, YY, LY )
00952 ELSE
00953 ISAME( 9 ) = LSERES( 'GE', ' ', 1, N,
00954 $ YS, YY, ABS( INCY ) )
00955 END IF
00956 ISAME( 10 ) = INCYS.EQ.INCY
00957 ELSE IF( BANDED )THEN
00958 ISAME( 3 ) = KS.EQ.K
00959 ISAME( 4 ) = ALS.EQ.ALPHA
00960 ISAME( 5 ) = LSE( AS, AA, LAA )
00961 ISAME( 6 ) = LDAS.EQ.LDA
00962 ISAME( 7 ) = LSE( XS, XX, LX )
00963 ISAME( 8 ) = INCXS.EQ.INCX
00964 ISAME( 9 ) = BLS.EQ.BETA
00965 IF( NULL )THEN
00966 ISAME( 10 ) = LSE( YS, YY, LY )
00967 ELSE
00968 ISAME( 10 ) = LSERES( 'GE', ' ', 1, N,
00969 $ YS, YY, ABS( INCY ) )
00970 END IF
00971 ISAME( 11 ) = INCYS.EQ.INCY
00972 ELSE IF( PACKED )THEN
00973 ISAME( 3 ) = ALS.EQ.ALPHA
00974 ISAME( 4 ) = LSE( AS, AA, LAA )
00975 ISAME( 5 ) = LSE( XS, XX, LX )
00976 ISAME( 6 ) = INCXS.EQ.INCX
00977 ISAME( 7 ) = BLS.EQ.BETA
00978 IF( NULL )THEN
00979 ISAME( 8 ) = LSE( YS, YY, LY )
00980 ELSE
00981 ISAME( 8 ) = LSERES( 'GE', ' ', 1, N,
00982 $ YS, YY, ABS( INCY ) )
00983 END IF
00984 ISAME( 9 ) = INCYS.EQ.INCY
00985 END IF
00986
00987
00988
00989
00990 SAME = .TRUE.
00991 DO 40 I = 1, NARGS
00992 SAME = SAME.AND.ISAME( I )
00993 IF( .NOT.ISAME( I ) )
00994 $ WRITE( NOUT, FMT = 9998 )I
00995 40 CONTINUE
00996 IF( .NOT.SAME )THEN
00997 FATAL = .TRUE.
00998 GO TO 120
00999 END IF
01000
01001 IF( .NOT.NULL )THEN
01002
01003
01004
01005 CALL SMVCH( 'N', N, N, ALPHA, A, NMAX, X,
01006 $ INCX, BETA, Y, INCY, YT, G,
01007 $ YY, EPS, ERR, FATAL, NOUT,
01008 $ .TRUE. )
01009 ERRMAX = MAX( ERRMAX, ERR )
01010
01011
01012 IF( FATAL )
01013 $ GO TO 120
01014 ELSE
01015
01016 GO TO 110
01017 END IF
01018
01019 50 CONTINUE
01020
01021 60 CONTINUE
01022
01023 70 CONTINUE
01024
01025 80 CONTINUE
01026
01027 90 CONTINUE
01028
01029 100 CONTINUE
01030
01031 110 CONTINUE
01032
01033
01034
01035 IF( ERRMAX.LT.THRESH )THEN
01036 WRITE( NOUT, FMT = 9999 )SNAME, NC
01037 ELSE
01038 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
01039 END IF
01040 GO TO 130
01041
01042 120 CONTINUE
01043 WRITE( NOUT, FMT = 9996 )SNAME
01044 IF( FULL )THEN
01045 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, LDA, INCX,
01046 $ BETA, INCY
01047 ELSE IF( BANDED )THEN
01048 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, K, ALPHA, LDA,
01049 $ INCX, BETA, INCY
01050 ELSE IF( PACKED )THEN
01051 WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, N, ALPHA, INCX,
01052 $ BETA, INCY
01053 END IF
01054
01055 130 CONTINUE
01056 RETURN
01057
01058 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
01059 $ 'S)' )
01060 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
01061 $ 'ANGED INCORRECTLY *******' )
01062 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
01063 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
01064 $ ' - SUSPECT *******' )
01065 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
01066 9995 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', AP',
01067 $ ', X,', I2, ',', F4.1, ', Y,', I2, ') .' )
01068 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', 2( I3, ',' ), F4.1,
01069 $ ', A,', I3, ', X,', I2, ',', F4.1, ', Y,', I2,
01070 $ ') .' )
01071 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', A,',
01072 $ I3, ', X,', I2, ',', F4.1, ', Y,', I2, ') .' )
01073 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
01074 $ '******' )
01075
01076
01077
01078 END
01079 SUBROUTINE SCHK3( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
01080 $ FATAL, NIDIM, IDIM, NKB, KB, NINC, INC, NMAX,
01081 $ INCMAX, A, AA, AS, X, XX, XS, XT, G, Z )
01082
01083
01084
01085
01086
01087
01088
01089
01090
01091
01092 REAL ZERO, HALF, ONE
01093 PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
01094
01095 REAL EPS, THRESH
01096 INTEGER INCMAX, NIDIM, NINC, NKB, NMAX, NOUT, NTRA
01097 LOGICAL FATAL, REWI, TRACE
01098 CHARACTER*6 SNAME
01099
01100 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ),
01101 $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ),
01102 $ XS( NMAX*INCMAX ), XT( NMAX ),
01103 $ XX( NMAX*INCMAX ), Z( NMAX )
01104 INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB )
01105
01106 REAL ERR, ERRMAX, TRANSL
01107 INTEGER I, ICD, ICT, ICU, IK, IN, INCX, INCXS, IX, K,
01108 $ KS, LAA, LDA, LDAS, LX, N, NARGS, NC, NK, NS
01109 LOGICAL BANDED, FULL, NULL, PACKED, RESET, SAME
01110 CHARACTER*1 DIAG, DIAGS, TRANS, TRANSS, UPLO, UPLOS
01111 CHARACTER*2 ICHD, ICHU
01112 CHARACTER*3 ICHT
01113
01114 LOGICAL ISAME( 13 )
01115
01116 LOGICAL LSE, LSERES
01117 EXTERNAL LSE, LSERES
01118
01119 EXTERNAL SMAKE, SMVCH, STBMV, STBSV, STPMV, STPSV,
01120 $ STRMV, STRSV
01121
01122 INTRINSIC ABS, MAX
01123
01124 INTEGER INFOT, NOUTC
01125 LOGICAL LERR, OK
01126
01127 COMMON /INFOC/INFOT, NOUTC, OK, LERR
01128
01129 DATA ICHU/'UL'/, ICHT/'NTC'/, ICHD/'UN'/
01130
01131 FULL = SNAME( 3: 3 ).EQ.'R'
01132 BANDED = SNAME( 3: 3 ).EQ.'B'
01133 PACKED = SNAME( 3: 3 ).EQ.'P'
01134
01135 IF( FULL )THEN
01136 NARGS = 8
01137 ELSE IF( BANDED )THEN
01138 NARGS = 9
01139 ELSE IF( PACKED )THEN
01140 NARGS = 7
01141 END IF
01142
01143 NC = 0
01144 RESET = .TRUE.
01145 ERRMAX = ZERO
01146
01147 DO 10 I = 1, NMAX
01148 Z( I ) = ZERO
01149 10 CONTINUE
01150
01151 DO 110 IN = 1, NIDIM
01152 N = IDIM( IN )
01153
01154 IF( BANDED )THEN
01155 NK = NKB
01156 ELSE
01157 NK = 1
01158 END IF
01159 DO 100 IK = 1, NK
01160 IF( BANDED )THEN
01161 K = KB( IK )
01162 ELSE
01163 K = N - 1
01164 END IF
01165
01166 IF( BANDED )THEN
01167 LDA = K + 1
01168 ELSE
01169 LDA = N
01170 END IF
01171 IF( LDA.LT.NMAX )
01172 $ LDA = LDA + 1
01173
01174 IF( LDA.GT.NMAX )
01175 $ GO TO 100
01176 IF( PACKED )THEN
01177 LAA = ( N*( N + 1 ) )/2
01178 ELSE
01179 LAA = LDA*N
01180 END IF
01181 NULL = N.LE.0
01182
01183 DO 90 ICU = 1, 2
01184 UPLO = ICHU( ICU: ICU )
01185
01186 DO 80 ICT = 1, 3
01187 TRANS = ICHT( ICT: ICT )
01188
01189 DO 70 ICD = 1, 2
01190 DIAG = ICHD( ICD: ICD )
01191
01192
01193
01194 TRANSL = ZERO
01195 CALL SMAKE( SNAME( 2: 3 ), UPLO, DIAG, N, N, A,
01196 $ NMAX, AA, LDA, K, K, RESET, TRANSL )
01197
01198 DO 60 IX = 1, NINC
01199 INCX = INC( IX )
01200 LX = ABS( INCX )*N
01201
01202
01203
01204 TRANSL = HALF
01205 CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX,
01206 $ ABS( INCX ), 0, N - 1, RESET,
01207 $ TRANSL )
01208 IF( N.GT.1 )THEN
01209 X( N/2 ) = ZERO
01210 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
01211 END IF
01212
01213 NC = NC + 1
01214
01215
01216
01217 UPLOS = UPLO
01218 TRANSS = TRANS
01219 DIAGS = DIAG
01220 NS = N
01221 KS = K
01222 DO 20 I = 1, LAA
01223 AS( I ) = AA( I )
01224 20 CONTINUE
01225 LDAS = LDA
01226 DO 30 I = 1, LX
01227 XS( I ) = XX( I )
01228 30 CONTINUE
01229 INCXS = INCX
01230
01231
01232
01233 IF( SNAME( 4: 5 ).EQ.'MV' )THEN
01234 IF( FULL )THEN
01235 IF( TRACE )
01236 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
01237 $ UPLO, TRANS, DIAG, N, LDA, INCX
01238 IF( REWI )
01239 $ REWIND NTRA
01240 CALL STRMV( UPLO, TRANS, DIAG, N, AA, LDA,
01241 $ XX, INCX )
01242 ELSE IF( BANDED )THEN
01243 IF( TRACE )
01244 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
01245 $ UPLO, TRANS, DIAG, N, K, LDA, INCX
01246 IF( REWI )
01247 $ REWIND NTRA
01248 CALL STBMV( UPLO, TRANS, DIAG, N, K, AA,
01249 $ LDA, XX, INCX )
01250 ELSE IF( PACKED )THEN
01251 IF( TRACE )
01252 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
01253 $ UPLO, TRANS, DIAG, N, INCX
01254 IF( REWI )
01255 $ REWIND NTRA
01256 CALL STPMV( UPLO, TRANS, DIAG, N, AA, XX,
01257 $ INCX )
01258 END IF
01259 ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
01260 IF( FULL )THEN
01261 IF( TRACE )
01262 $ WRITE( NTRA, FMT = 9993 )NC, SNAME,
01263 $ UPLO, TRANS, DIAG, N, LDA, INCX
01264 IF( REWI )
01265 $ REWIND NTRA
01266 CALL STRSV( UPLO, TRANS, DIAG, N, AA, LDA,
01267 $ XX, INCX )
01268 ELSE IF( BANDED )THEN
01269 IF( TRACE )
01270 $ WRITE( NTRA, FMT = 9994 )NC, SNAME,
01271 $ UPLO, TRANS, DIAG, N, K, LDA, INCX
01272 IF( REWI )
01273 $ REWIND NTRA
01274 CALL STBSV( UPLO, TRANS, DIAG, N, K, AA,
01275 $ LDA, XX, INCX )
01276 ELSE IF( PACKED )THEN
01277 IF( TRACE )
01278 $ WRITE( NTRA, FMT = 9995 )NC, SNAME,
01279 $ UPLO, TRANS, DIAG, N, INCX
01280 IF( REWI )
01281 $ REWIND NTRA
01282 CALL STPSV( UPLO, TRANS, DIAG, N, AA, XX,
01283 $ INCX )
01284 END IF
01285 END IF
01286
01287
01288
01289 IF( .NOT.OK )THEN
01290 WRITE( NOUT, FMT = 9992 )
01291 FATAL = .TRUE.
01292 GO TO 120
01293 END IF
01294
01295
01296
01297 ISAME( 1 ) = UPLO.EQ.UPLOS
01298 ISAME( 2 ) = TRANS.EQ.TRANSS
01299 ISAME( 3 ) = DIAG.EQ.DIAGS
01300 ISAME( 4 ) = NS.EQ.N
01301 IF( FULL )THEN
01302 ISAME( 5 ) = LSE( AS, AA, LAA )
01303 ISAME( 6 ) = LDAS.EQ.LDA
01304 IF( NULL )THEN
01305 ISAME( 7 ) = LSE( XS, XX, LX )
01306 ELSE
01307 ISAME( 7 ) = LSERES( 'GE', ' ', 1, N, XS,
01308 $ XX, ABS( INCX ) )
01309 END IF
01310 ISAME( 8 ) = INCXS.EQ.INCX
01311 ELSE IF( BANDED )THEN
01312 ISAME( 5 ) = KS.EQ.K
01313 ISAME( 6 ) = LSE( AS, AA, LAA )
01314 ISAME( 7 ) = LDAS.EQ.LDA
01315 IF( NULL )THEN
01316 ISAME( 8 ) = LSE( XS, XX, LX )
01317 ELSE
01318 ISAME( 8 ) = LSERES( 'GE', ' ', 1, N, XS,
01319 $ XX, ABS( INCX ) )
01320 END IF
01321 ISAME( 9 ) = INCXS.EQ.INCX
01322 ELSE IF( PACKED )THEN
01323 ISAME( 5 ) = LSE( AS, AA, LAA )
01324 IF( NULL )THEN
01325 ISAME( 6 ) = LSE( XS, XX, LX )
01326 ELSE
01327 ISAME( 6 ) = LSERES( 'GE', ' ', 1, N, XS,
01328 $ XX, ABS( INCX ) )
01329 END IF
01330 ISAME( 7 ) = INCXS.EQ.INCX
01331 END IF
01332
01333
01334
01335
01336 SAME = .TRUE.
01337 DO 40 I = 1, NARGS
01338 SAME = SAME.AND.ISAME( I )
01339 IF( .NOT.ISAME( I ) )
01340 $ WRITE( NOUT, FMT = 9998 )I
01341 40 CONTINUE
01342 IF( .NOT.SAME )THEN
01343 FATAL = .TRUE.
01344 GO TO 120
01345 END IF
01346
01347 IF( .NOT.NULL )THEN
01348 IF( SNAME( 4: 5 ).EQ.'MV' )THEN
01349
01350
01351
01352 CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X,
01353 $ INCX, ZERO, Z, INCX, XT, G,
01354 $ XX, EPS, ERR, FATAL, NOUT,
01355 $ .TRUE. )
01356 ELSE IF( SNAME( 4: 5 ).EQ.'SV' )THEN
01357
01358
01359
01360 DO 50 I = 1, N
01361 Z( I ) = XX( 1 + ( I - 1 )*
01362 $ ABS( INCX ) )
01363 XX( 1 + ( I - 1 )*ABS( INCX ) )
01364 $ = X( I )
01365 50 CONTINUE
01366 CALL SMVCH( TRANS, N, N, ONE, A, NMAX, Z,
01367 $ INCX, ZERO, X, INCX, XT, G,
01368 $ XX, EPS, ERR, FATAL, NOUT,
01369 $ .FALSE. )
01370 END IF
01371 ERRMAX = MAX( ERRMAX, ERR )
01372
01373 IF( FATAL )
01374 $ GO TO 120
01375 ELSE
01376
01377 GO TO 110
01378 END IF
01379
01380 60 CONTINUE
01381
01382 70 CONTINUE
01383
01384 80 CONTINUE
01385
01386 90 CONTINUE
01387
01388 100 CONTINUE
01389
01390 110 CONTINUE
01391
01392
01393
01394 IF( ERRMAX.LT.THRESH )THEN
01395 WRITE( NOUT, FMT = 9999 )SNAME, NC
01396 ELSE
01397 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
01398 END IF
01399 GO TO 130
01400
01401 120 CONTINUE
01402 WRITE( NOUT, FMT = 9996 )SNAME
01403 IF( FULL )THEN
01404 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, TRANS, DIAG, N, LDA,
01405 $ INCX
01406 ELSE IF( BANDED )THEN
01407 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, TRANS, DIAG, N, K,
01408 $ LDA, INCX
01409 ELSE IF( PACKED )THEN
01410 WRITE( NOUT, FMT = 9995 )NC, SNAME, UPLO, TRANS, DIAG, N, INCX
01411 END IF
01412
01413 130 CONTINUE
01414 RETURN
01415
01416 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
01417 $ 'S)' )
01418 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
01419 $ 'ANGED INCORRECTLY *******' )
01420 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
01421 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
01422 $ ' - SUSPECT *******' )
01423 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
01424 9995 FORMAT( 1X, I6, ': ', A6, '(', 3( '''', A1, ''',' ), I3, ', AP, ',
01425 $ 'X,', I2, ') .' )
01426 9994 FORMAT( 1X, I6, ': ', A6, '(', 3( '''', A1, ''',' ), 2( I3, ',' ),
01427 $ ' A,', I3, ', X,', I2, ') .' )
01428 9993 FORMAT( 1X, I6, ': ', A6, '(', 3( '''', A1, ''',' ), I3, ', A,',
01429 $ I3, ', X,', I2, ') .' )
01430 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
01431 $ '******' )
01432
01433
01434
01435 END
01436 SUBROUTINE SCHK4( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
01437 $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX,
01438 $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G,
01439 $ Z )
01440
01441
01442
01443
01444
01445
01446
01447
01448
01449
01450 REAL ZERO, HALF, ONE
01451 PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
01452
01453 REAL EPS, THRESH
01454 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
01455 LOGICAL FATAL, REWI, TRACE
01456 CHARACTER*6 SNAME
01457
01458 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
01459 $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ),
01460 $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ),
01461 $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ),
01462 $ YY( NMAX*INCMAX ), Z( NMAX )
01463 INTEGER IDIM( NIDIM ), INC( NINC )
01464
01465 REAL ALPHA, ALS, ERR, ERRMAX, TRANSL
01466 INTEGER I, IA, IM, IN, INCX, INCXS, INCY, INCYS, IX,
01467 $ IY, J, LAA, LDA, LDAS, LX, LY, M, MS, N, NARGS,
01468 $ NC, ND, NS
01469 LOGICAL NULL, RESET, SAME
01470
01471 REAL W( 1 )
01472 LOGICAL ISAME( 13 )
01473
01474 LOGICAL LSE, LSERES
01475 EXTERNAL LSE, LSERES
01476
01477 EXTERNAL SGER, SMAKE, SMVCH
01478
01479 INTRINSIC ABS, MAX, MIN
01480
01481 INTEGER INFOT, NOUTC
01482 LOGICAL LERR, OK
01483
01484 COMMON /INFOC/INFOT, NOUTC, OK, LERR
01485
01486
01487 NARGS = 9
01488
01489 NC = 0
01490 RESET = .TRUE.
01491 ERRMAX = ZERO
01492
01493 DO 120 IN = 1, NIDIM
01494 N = IDIM( IN )
01495 ND = N/2 + 1
01496
01497 DO 110 IM = 1, 2
01498 IF( IM.EQ.1 )
01499 $ M = MAX( N - ND, 0 )
01500 IF( IM.EQ.2 )
01501 $ M = MIN( N + ND, NMAX )
01502
01503
01504 LDA = M
01505 IF( LDA.LT.NMAX )
01506 $ LDA = LDA + 1
01507
01508 IF( LDA.GT.NMAX )
01509 $ GO TO 110
01510 LAA = LDA*N
01511 NULL = N.LE.0.OR.M.LE.0
01512
01513 DO 100 IX = 1, NINC
01514 INCX = INC( IX )
01515 LX = ABS( INCX )*M
01516
01517
01518
01519 TRANSL = HALF
01520 CALL SMAKE( 'GE', ' ', ' ', 1, M, X, 1, XX, ABS( INCX ),
01521 $ 0, M - 1, RESET, TRANSL )
01522 IF( M.GT.1 )THEN
01523 X( M/2 ) = ZERO
01524 XX( 1 + ABS( INCX )*( M/2 - 1 ) ) = ZERO
01525 END IF
01526
01527 DO 90 IY = 1, NINC
01528 INCY = INC( IY )
01529 LY = ABS( INCY )*N
01530
01531
01532
01533 TRANSL = ZERO
01534 CALL SMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
01535 $ ABS( INCY ), 0, N - 1, RESET, TRANSL )
01536 IF( N.GT.1 )THEN
01537 Y( N/2 ) = ZERO
01538 YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
01539 END IF
01540
01541 DO 80 IA = 1, NALF
01542 ALPHA = ALF( IA )
01543
01544
01545
01546 TRANSL = ZERO
01547 CALL SMAKE( SNAME( 2: 3 ), ' ', ' ', M, N, A, NMAX,
01548 $ AA, LDA, M - 1, N - 1, RESET, TRANSL )
01549
01550 NC = NC + 1
01551
01552
01553
01554 MS = M
01555 NS = N
01556 ALS = ALPHA
01557 DO 10 I = 1, LAA
01558 AS( I ) = AA( I )
01559 10 CONTINUE
01560 LDAS = LDA
01561 DO 20 I = 1, LX
01562 XS( I ) = XX( I )
01563 20 CONTINUE
01564 INCXS = INCX
01565 DO 30 I = 1, LY
01566 YS( I ) = YY( I )
01567 30 CONTINUE
01568 INCYS = INCY
01569
01570
01571
01572 IF( TRACE )
01573 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, M, N,
01574 $ ALPHA, INCX, INCY, LDA
01575 IF( REWI )
01576 $ REWIND NTRA
01577 CALL SGER( M, N, ALPHA, XX, INCX, YY, INCY, AA,
01578 $ LDA )
01579
01580
01581
01582 IF( .NOT.OK )THEN
01583 WRITE( NOUT, FMT = 9993 )
01584 FATAL = .TRUE.
01585 GO TO 140
01586 END IF
01587
01588
01589
01590 ISAME( 1 ) = MS.EQ.M
01591 ISAME( 2 ) = NS.EQ.N
01592 ISAME( 3 ) = ALS.EQ.ALPHA
01593 ISAME( 4 ) = LSE( XS, XX, LX )
01594 ISAME( 5 ) = INCXS.EQ.INCX
01595 ISAME( 6 ) = LSE( YS, YY, LY )
01596 ISAME( 7 ) = INCYS.EQ.INCY
01597 IF( NULL )THEN
01598 ISAME( 8 ) = LSE( AS, AA, LAA )
01599 ELSE
01600 ISAME( 8 ) = LSERES( 'GE', ' ', M, N, AS, AA,
01601 $ LDA )
01602 END IF
01603 ISAME( 9 ) = LDAS.EQ.LDA
01604
01605
01606
01607 SAME = .TRUE.
01608 DO 40 I = 1, NARGS
01609 SAME = SAME.AND.ISAME( I )
01610 IF( .NOT.ISAME( I ) )
01611 $ WRITE( NOUT, FMT = 9998 )I
01612 40 CONTINUE
01613 IF( .NOT.SAME )THEN
01614 FATAL = .TRUE.
01615 GO TO 140
01616 END IF
01617
01618 IF( .NOT.NULL )THEN
01619
01620
01621
01622 IF( INCX.GT.0 )THEN
01623 DO 50 I = 1, M
01624 Z( I ) = X( I )
01625 50 CONTINUE
01626 ELSE
01627 DO 60 I = 1, M
01628 Z( I ) = X( M - I + 1 )
01629 60 CONTINUE
01630 END IF
01631 DO 70 J = 1, N
01632 IF( INCY.GT.0 )THEN
01633 W( 1 ) = Y( J )
01634 ELSE
01635 W( 1 ) = Y( N - J + 1 )
01636 END IF
01637 CALL SMVCH( 'N', M, 1, ALPHA, Z, NMAX, W, 1,
01638 $ ONE, A( 1, J ), 1, YT, G,
01639 $ AA( 1 + ( J - 1 )*LDA ), EPS,
01640 $ ERR, FATAL, NOUT, .TRUE. )
01641 ERRMAX = MAX( ERRMAX, ERR )
01642
01643 IF( FATAL )
01644 $ GO TO 130
01645 70 CONTINUE
01646 ELSE
01647
01648 GO TO 110
01649 END IF
01650
01651 80 CONTINUE
01652
01653 90 CONTINUE
01654
01655 100 CONTINUE
01656
01657 110 CONTINUE
01658
01659 120 CONTINUE
01660
01661
01662
01663 IF( ERRMAX.LT.THRESH )THEN
01664 WRITE( NOUT, FMT = 9999 )SNAME, NC
01665 ELSE
01666 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
01667 END IF
01668 GO TO 150
01669
01670 130 CONTINUE
01671 WRITE( NOUT, FMT = 9995 )J
01672
01673 140 CONTINUE
01674 WRITE( NOUT, FMT = 9996 )SNAME
01675 WRITE( NOUT, FMT = 9994 )NC, SNAME, M, N, ALPHA, INCX, INCY, LDA
01676
01677 150 CONTINUE
01678 RETURN
01679
01680 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
01681 $ 'S)' )
01682 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
01683 $ 'ANGED INCORRECTLY *******' )
01684 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
01685 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
01686 $ ' - SUSPECT *******' )
01687 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
01688 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
01689 9994 FORMAT( 1X, I6, ': ', A6, '(', 2( I3, ',' ), F4.1, ', X,', I2,
01690 $ ', Y,', I2, ', A,', I3, ') .' )
01691 9993 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
01692 $ '******' )
01693
01694
01695
01696 END
01697 SUBROUTINE SCHK5( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
01698 $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX,
01699 $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G,
01700 $ Z )
01701
01702
01703
01704
01705
01706
01707
01708
01709
01710
01711 REAL ZERO, HALF, ONE
01712 PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
01713
01714 REAL EPS, THRESH
01715 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
01716 LOGICAL FATAL, REWI, TRACE
01717 CHARACTER*6 SNAME
01718
01719 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
01720 $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ),
01721 $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ),
01722 $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ),
01723 $ YY( NMAX*INCMAX ), Z( NMAX )
01724 INTEGER IDIM( NIDIM ), INC( NINC )
01725
01726 REAL ALPHA, ALS, ERR, ERRMAX, TRANSL
01727 INTEGER I, IA, IC, IN, INCX, INCXS, IX, J, JA, JJ, LAA,
01728 $ LDA, LDAS, LJ, LX, N, NARGS, NC, NS
01729 LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER
01730 CHARACTER*1 UPLO, UPLOS
01731 CHARACTER*2 ICH
01732
01733 REAL W( 1 )
01734 LOGICAL ISAME( 13 )
01735
01736 LOGICAL LSE, LSERES
01737 EXTERNAL LSE, LSERES
01738
01739 EXTERNAL SMAKE, SMVCH, SSPR, SSYR
01740
01741 INTRINSIC ABS, MAX
01742
01743 INTEGER INFOT, NOUTC
01744 LOGICAL LERR, OK
01745
01746 COMMON /INFOC/INFOT, NOUTC, OK, LERR
01747
01748 DATA ICH/'UL'/
01749
01750 FULL = SNAME( 3: 3 ).EQ.'Y'
01751 PACKED = SNAME( 3: 3 ).EQ.'P'
01752
01753 IF( FULL )THEN
01754 NARGS = 7
01755 ELSE IF( PACKED )THEN
01756 NARGS = 6
01757 END IF
01758
01759 NC = 0
01760 RESET = .TRUE.
01761 ERRMAX = ZERO
01762
01763 DO 100 IN = 1, NIDIM
01764 N = IDIM( IN )
01765
01766 LDA = N
01767 IF( LDA.LT.NMAX )
01768 $ LDA = LDA + 1
01769
01770 IF( LDA.GT.NMAX )
01771 $ GO TO 100
01772 IF( PACKED )THEN
01773 LAA = ( N*( N + 1 ) )/2
01774 ELSE
01775 LAA = LDA*N
01776 END IF
01777
01778 DO 90 IC = 1, 2
01779 UPLO = ICH( IC: IC )
01780 UPPER = UPLO.EQ.'U'
01781
01782 DO 80 IX = 1, NINC
01783 INCX = INC( IX )
01784 LX = ABS( INCX )*N
01785
01786
01787
01788 TRANSL = HALF
01789 CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
01790 $ 0, N - 1, RESET, TRANSL )
01791 IF( N.GT.1 )THEN
01792 X( N/2 ) = ZERO
01793 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
01794 END IF
01795
01796 DO 70 IA = 1, NALF
01797 ALPHA = ALF( IA )
01798 NULL = N.LE.0.OR.ALPHA.EQ.ZERO
01799
01800
01801
01802 TRANSL = ZERO
01803 CALL SMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A, NMAX,
01804 $ AA, LDA, N - 1, N - 1, RESET, TRANSL )
01805
01806 NC = NC + 1
01807
01808
01809
01810 UPLOS = UPLO
01811 NS = N
01812 ALS = ALPHA
01813 DO 10 I = 1, LAA
01814 AS( I ) = AA( I )
01815 10 CONTINUE
01816 LDAS = LDA
01817 DO 20 I = 1, LX
01818 XS( I ) = XX( I )
01819 20 CONTINUE
01820 INCXS = INCX
01821
01822
01823
01824 IF( FULL )THEN
01825 IF( TRACE )
01826 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
01827 $ ALPHA, INCX, LDA
01828 IF( REWI )
01829 $ REWIND NTRA
01830 CALL SSYR( UPLO, N, ALPHA, XX, INCX, AA, LDA )
01831 ELSE IF( PACKED )THEN
01832 IF( TRACE )
01833 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
01834 $ ALPHA, INCX
01835 IF( REWI )
01836 $ REWIND NTRA
01837 CALL SSPR( UPLO, N, ALPHA, XX, INCX, AA )
01838 END IF
01839
01840
01841
01842 IF( .NOT.OK )THEN
01843 WRITE( NOUT, FMT = 9992 )
01844 FATAL = .TRUE.
01845 GO TO 120
01846 END IF
01847
01848
01849
01850 ISAME( 1 ) = UPLO.EQ.UPLOS
01851 ISAME( 2 ) = NS.EQ.N
01852 ISAME( 3 ) = ALS.EQ.ALPHA
01853 ISAME( 4 ) = LSE( XS, XX, LX )
01854 ISAME( 5 ) = INCXS.EQ.INCX
01855 IF( NULL )THEN
01856 ISAME( 6 ) = LSE( AS, AA, LAA )
01857 ELSE
01858 ISAME( 6 ) = LSERES( SNAME( 2: 3 ), UPLO, N, N, AS,
01859 $ AA, LDA )
01860 END IF
01861 IF( .NOT.PACKED )THEN
01862 ISAME( 7 ) = LDAS.EQ.LDA
01863 END IF
01864
01865
01866
01867 SAME = .TRUE.
01868 DO 30 I = 1, NARGS
01869 SAME = SAME.AND.ISAME( I )
01870 IF( .NOT.ISAME( I ) )
01871 $ WRITE( NOUT, FMT = 9998 )I
01872 30 CONTINUE
01873 IF( .NOT.SAME )THEN
01874 FATAL = .TRUE.
01875 GO TO 120
01876 END IF
01877
01878 IF( .NOT.NULL )THEN
01879
01880
01881
01882 IF( INCX.GT.0 )THEN
01883 DO 40 I = 1, N
01884 Z( I ) = X( I )
01885 40 CONTINUE
01886 ELSE
01887 DO 50 I = 1, N
01888 Z( I ) = X( N - I + 1 )
01889 50 CONTINUE
01890 END IF
01891 JA = 1
01892 DO 60 J = 1, N
01893 W( 1 ) = Z( J )
01894 IF( UPPER )THEN
01895 JJ = 1
01896 LJ = J
01897 ELSE
01898 JJ = J
01899 LJ = N - J + 1
01900 END IF
01901 CALL SMVCH( 'N', LJ, 1, ALPHA, Z( JJ ), LJ, W,
01902 $ 1, ONE, A( JJ, J ), 1, YT, G,
01903 $ AA( JA ), EPS, ERR, FATAL, NOUT,
01904 $ .TRUE. )
01905 IF( FULL )THEN
01906 IF( UPPER )THEN
01907 JA = JA + LDA
01908 ELSE
01909 JA = JA + LDA + 1
01910 END IF
01911 ELSE
01912 JA = JA + LJ
01913 END IF
01914 ERRMAX = MAX( ERRMAX, ERR )
01915
01916 IF( FATAL )
01917 $ GO TO 110
01918 60 CONTINUE
01919 ELSE
01920
01921 IF( N.LE.0 )
01922 $ GO TO 100
01923 END IF
01924
01925 70 CONTINUE
01926
01927 80 CONTINUE
01928
01929 90 CONTINUE
01930
01931 100 CONTINUE
01932
01933
01934
01935 IF( ERRMAX.LT.THRESH )THEN
01936 WRITE( NOUT, FMT = 9999 )SNAME, NC
01937 ELSE
01938 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
01939 END IF
01940 GO TO 130
01941
01942 110 CONTINUE
01943 WRITE( NOUT, FMT = 9995 )J
01944
01945 120 CONTINUE
01946 WRITE( NOUT, FMT = 9996 )SNAME
01947 IF( FULL )THEN
01948 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, INCX, LDA
01949 ELSE IF( PACKED )THEN
01950 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, ALPHA, INCX
01951 END IF
01952
01953 130 CONTINUE
01954 RETURN
01955
01956 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
01957 $ 'S)' )
01958 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
01959 $ 'ANGED INCORRECTLY *******' )
01960 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
01961 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
01962 $ ' - SUSPECT *******' )
01963 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
01964 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
01965 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
01966 $ I2, ', AP) .' )
01967 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
01968 $ I2, ', A,', I3, ') .' )
01969 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
01970 $ '******' )
01971
01972
01973
01974 END
01975 SUBROUTINE SCHK6( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,
01976 $ FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC, NMAX,
01977 $ INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, YT, G,
01978 $ Z )
01979
01980
01981
01982
01983
01984
01985
01986
01987
01988
01989 REAL ZERO, HALF, ONE
01990 PARAMETER ( ZERO = 0.0, HALF = 0.5, ONE = 1.0 )
01991
01992 REAL EPS, THRESH
01993 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA
01994 LOGICAL FATAL, REWI, TRACE
01995 CHARACTER*6 SNAME
01996
01997 REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
01998 $ AS( NMAX*NMAX ), G( NMAX ), X( NMAX ),
01999 $ XS( NMAX*INCMAX ), XX( NMAX*INCMAX ),
02000 $ Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ),
02001 $ YY( NMAX*INCMAX ), Z( NMAX, 2 )
02002 INTEGER IDIM( NIDIM ), INC( NINC )
02003
02004 REAL ALPHA, ALS, ERR, ERRMAX, TRANSL
02005 INTEGER I, IA, IC, IN, INCX, INCXS, INCY, INCYS, IX,
02006 $ IY, J, JA, JJ, LAA, LDA, LDAS, LJ, LX, LY, N,
02007 $ NARGS, NC, NS
02008 LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER
02009 CHARACTER*1 UPLO, UPLOS
02010 CHARACTER*2 ICH
02011
02012 REAL W( 2 )
02013 LOGICAL ISAME( 13 )
02014
02015 LOGICAL LSE, LSERES
02016 EXTERNAL LSE, LSERES
02017
02018 EXTERNAL SMAKE, SMVCH, SSPR2, SSYR2
02019
02020 INTRINSIC ABS, MAX
02021
02022 INTEGER INFOT, NOUTC
02023 LOGICAL LERR, OK
02024
02025 COMMON /INFOC/INFOT, NOUTC, OK, LERR
02026
02027 DATA ICH/'UL'/
02028
02029 FULL = SNAME( 3: 3 ).EQ.'Y'
02030 PACKED = SNAME( 3: 3 ).EQ.'P'
02031
02032 IF( FULL )THEN
02033 NARGS = 9
02034 ELSE IF( PACKED )THEN
02035 NARGS = 8
02036 END IF
02037
02038 NC = 0
02039 RESET = .TRUE.
02040 ERRMAX = ZERO
02041
02042 DO 140 IN = 1, NIDIM
02043 N = IDIM( IN )
02044
02045 LDA = N
02046 IF( LDA.LT.NMAX )
02047 $ LDA = LDA + 1
02048
02049 IF( LDA.GT.NMAX )
02050 $ GO TO 140
02051 IF( PACKED )THEN
02052 LAA = ( N*( N + 1 ) )/2
02053 ELSE
02054 LAA = LDA*N
02055 END IF
02056
02057 DO 130 IC = 1, 2
02058 UPLO = ICH( IC: IC )
02059 UPPER = UPLO.EQ.'U'
02060
02061 DO 120 IX = 1, NINC
02062 INCX = INC( IX )
02063 LX = ABS( INCX )*N
02064
02065
02066
02067 TRANSL = HALF
02068 CALL SMAKE( 'GE', ' ', ' ', 1, N, X, 1, XX, ABS( INCX ),
02069 $ 0, N - 1, RESET, TRANSL )
02070 IF( N.GT.1 )THEN
02071 X( N/2 ) = ZERO
02072 XX( 1 + ABS( INCX )*( N/2 - 1 ) ) = ZERO
02073 END IF
02074
02075 DO 110 IY = 1, NINC
02076 INCY = INC( IY )
02077 LY = ABS( INCY )*N
02078
02079
02080
02081 TRANSL = ZERO
02082 CALL SMAKE( 'GE', ' ', ' ', 1, N, Y, 1, YY,
02083 $ ABS( INCY ), 0, N - 1, RESET, TRANSL )
02084 IF( N.GT.1 )THEN
02085 Y( N/2 ) = ZERO
02086 YY( 1 + ABS( INCY )*( N/2 - 1 ) ) = ZERO
02087 END IF
02088
02089 DO 100 IA = 1, NALF
02090 ALPHA = ALF( IA )
02091 NULL = N.LE.0.OR.ALPHA.EQ.ZERO
02092
02093
02094
02095 TRANSL = ZERO
02096 CALL SMAKE( SNAME( 2: 3 ), UPLO, ' ', N, N, A,
02097 $ NMAX, AA, LDA, N - 1, N - 1, RESET,
02098 $ TRANSL )
02099
02100 NC = NC + 1
02101
02102
02103
02104 UPLOS = UPLO
02105 NS = N
02106 ALS = ALPHA
02107 DO 10 I = 1, LAA
02108 AS( I ) = AA( I )
02109 10 CONTINUE
02110 LDAS = LDA
02111 DO 20 I = 1, LX
02112 XS( I ) = XX( I )
02113 20 CONTINUE
02114 INCXS = INCX
02115 DO 30 I = 1, LY
02116 YS( I ) = YY( I )
02117 30 CONTINUE
02118 INCYS = INCY
02119
02120
02121
02122 IF( FULL )THEN
02123 IF( TRACE )
02124 $ WRITE( NTRA, FMT = 9993 )NC, SNAME, UPLO, N,
02125 $ ALPHA, INCX, INCY, LDA
02126 IF( REWI )
02127 $ REWIND NTRA
02128 CALL SSYR2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
02129 $ AA, LDA )
02130 ELSE IF( PACKED )THEN
02131 IF( TRACE )
02132 $ WRITE( NTRA, FMT = 9994 )NC, SNAME, UPLO, N,
02133 $ ALPHA, INCX, INCY
02134 IF( REWI )
02135 $ REWIND NTRA
02136 CALL SSPR2( UPLO, N, ALPHA, XX, INCX, YY, INCY,
02137 $ AA )
02138 END IF
02139
02140
02141
02142 IF( .NOT.OK )THEN
02143 WRITE( NOUT, FMT = 9992 )
02144 FATAL = .TRUE.
02145 GO TO 160
02146 END IF
02147
02148
02149
02150 ISAME( 1 ) = UPLO.EQ.UPLOS
02151 ISAME( 2 ) = NS.EQ.N
02152 ISAME( 3 ) = ALS.EQ.ALPHA
02153 ISAME( 4 ) = LSE( XS, XX, LX )
02154 ISAME( 5 ) = INCXS.EQ.INCX
02155 ISAME( 6 ) = LSE( YS, YY, LY )
02156 ISAME( 7 ) = INCYS.EQ.INCY
02157 IF( NULL )THEN
02158 ISAME( 8 ) = LSE( AS, AA, LAA )
02159 ELSE
02160 ISAME( 8 ) = LSERES( SNAME( 2: 3 ), UPLO, N, N,
02161 $ AS, AA, LDA )
02162 END IF
02163 IF( .NOT.PACKED )THEN
02164 ISAME( 9 ) = LDAS.EQ.LDA
02165 END IF
02166
02167
02168
02169 SAME = .TRUE.
02170 DO 40 I = 1, NARGS
02171 SAME = SAME.AND.ISAME( I )
02172 IF( .NOT.ISAME( I ) )
02173 $ WRITE( NOUT, FMT = 9998 )I
02174 40 CONTINUE
02175 IF( .NOT.SAME )THEN
02176 FATAL = .TRUE.
02177 GO TO 160
02178 END IF
02179
02180 IF( .NOT.NULL )THEN
02181
02182
02183
02184 IF( INCX.GT.0 )THEN
02185 DO 50 I = 1, N
02186 Z( I, 1 ) = X( I )
02187 50 CONTINUE
02188 ELSE
02189 DO 60 I = 1, N
02190 Z( I, 1 ) = X( N - I + 1 )
02191 60 CONTINUE
02192 END IF
02193 IF( INCY.GT.0 )THEN
02194 DO 70 I = 1, N
02195 Z( I, 2 ) = Y( I )
02196 70 CONTINUE
02197 ELSE
02198 DO 80 I = 1, N
02199 Z( I, 2 ) = Y( N - I + 1 )
02200 80 CONTINUE
02201 END IF
02202 JA = 1
02203 DO 90 J = 1, N
02204 W( 1 ) = Z( J, 2 )
02205 W( 2 ) = Z( J, 1 )
02206 IF( UPPER )THEN
02207 JJ = 1
02208 LJ = J
02209 ELSE
02210 JJ = J
02211 LJ = N - J + 1
02212 END IF
02213 CALL SMVCH( 'N', LJ, 2, ALPHA, Z( JJ, 1 ),
02214 $ NMAX, W, 1, ONE, A( JJ, J ), 1,
02215 $ YT, G, AA( JA ), EPS, ERR, FATAL,
02216 $ NOUT, .TRUE. )
02217 IF( FULL )THEN
02218 IF( UPPER )THEN
02219 JA = JA + LDA
02220 ELSE
02221 JA = JA + LDA + 1
02222 END IF
02223 ELSE
02224 JA = JA + LJ
02225 END IF
02226 ERRMAX = MAX( ERRMAX, ERR )
02227
02228 IF( FATAL )
02229 $ GO TO 150
02230 90 CONTINUE
02231 ELSE
02232
02233 IF( N.LE.0 )
02234 $ GO TO 140
02235 END IF
02236
02237 100 CONTINUE
02238
02239 110 CONTINUE
02240
02241 120 CONTINUE
02242
02243 130 CONTINUE
02244
02245 140 CONTINUE
02246
02247
02248
02249 IF( ERRMAX.LT.THRESH )THEN
02250 WRITE( NOUT, FMT = 9999 )SNAME, NC
02251 ELSE
02252 WRITE( NOUT, FMT = 9997 )SNAME, NC, ERRMAX
02253 END IF
02254 GO TO 170
02255
02256 150 CONTINUE
02257 WRITE( NOUT, FMT = 9995 )J
02258
02259 160 CONTINUE
02260 WRITE( NOUT, FMT = 9996 )SNAME
02261 IF( FULL )THEN
02262 WRITE( NOUT, FMT = 9993 )NC, SNAME, UPLO, N, ALPHA, INCX,
02263 $ INCY, LDA
02264 ELSE IF( PACKED )THEN
02265 WRITE( NOUT, FMT = 9994 )NC, SNAME, UPLO, N, ALPHA, INCX, INCY
02266 END IF
02267
02268 170 CONTINUE
02269 RETURN
02270
02271 9999 FORMAT( ' ', A6, ' PASSED THE COMPUTATIONAL TESTS (', I6, ' CALL',
02272 $ 'S)' )
02273 9998 FORMAT( ' ******* FATAL ERROR - PARAMETER NUMBER ', I2, ' WAS CH',
02274 $ 'ANGED INCORRECTLY *******' )
02275 9997 FORMAT( ' ', A6, ' COMPLETED THE COMPUTATIONAL TESTS (', I6, ' C',
02276 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', F8.2,
02277 $ ' - SUSPECT *******' )
02278 9996 FORMAT( ' ******* ', A6, ' FAILED ON CALL NUMBER:' )
02279 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', I3 )
02280 9994 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
02281 $ I2, ', Y,', I2, ', AP) .' )
02282 9993 FORMAT( 1X, I6, ': ', A6, '(''', A1, ''',', I3, ',', F4.1, ', X,',
02283 $ I2, ', Y,', I2, ', A,', I3, ') .' )
02284 9992 FORMAT( ' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
02285 $ '******' )
02286
02287
02288
02289 END
02290 SUBROUTINE SCHKE( ISNUM, SRNAMT, NOUT )
02291
02292
02293
02294
02295
02296
02297
02298
02299
02300
02301
02302
02303 INTEGER ISNUM, NOUT
02304 CHARACTER*6 SRNAMT
02305
02306 INTEGER INFOT, NOUTC
02307 LOGICAL LERR, OK
02308
02309 REAL ALPHA, BETA
02310
02311 REAL A( 1, 1 ), X( 1 ), Y( 1 )
02312
02313 EXTERNAL CHKXER, SGBMV, SGEMV, SGER, SSBMV, SSPMV, SSPR,
02314 $ SSPR2, SSYMV, SSYR, SSYR2, STBMV, STBSV, STPMV,
02315 $ STPSV, STRMV, STRSV
02316
02317 COMMON /INFOC/INFOT, NOUTC, OK, LERR
02318
02319
02320
02321 OK = .TRUE.
02322
02323
02324 LERR = .FALSE.
02325 GO TO ( 10, 20, 30, 40, 50, 60, 70, 80,
02326 $ 90, 100, 110, 120, 130, 140, 150,
02327 $ 160 )ISNUM
02328 10 INFOT = 1
02329 CALL SGEMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02330 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02331 INFOT = 2
02332 CALL SGEMV( 'N', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02333 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02334 INFOT = 3
02335 CALL SGEMV( 'N', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02336 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02337 INFOT = 6
02338 CALL SGEMV( 'N', 2, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02339 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02340 INFOT = 8
02341 CALL SGEMV( 'N', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
02342 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02343 INFOT = 11
02344 CALL SGEMV( 'N', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
02345 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02346 GO TO 170
02347 20 INFOT = 1
02348 CALL SGBMV( '/', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02349 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02350 INFOT = 2
02351 CALL SGBMV( 'N', -1, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02352 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02353 INFOT = 3
02354 CALL SGBMV( 'N', 0, -1, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02355 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02356 INFOT = 4
02357 CALL SGBMV( 'N', 0, 0, -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02358 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02359 INFOT = 5
02360 CALL SGBMV( 'N', 2, 0, 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02361 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02362 INFOT = 8
02363 CALL SGBMV( 'N', 0, 0, 1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02364 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02365 INFOT = 10
02366 CALL SGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
02367 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02368 INFOT = 13
02369 CALL SGBMV( 'N', 0, 0, 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
02370 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02371 GO TO 170
02372 30 INFOT = 1
02373 CALL SSYMV( '/', 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02374 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02375 INFOT = 2
02376 CALL SSYMV( 'U', -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02377 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02378 INFOT = 5
02379 CALL SSYMV( 'U', 2, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02380 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02381 INFOT = 7
02382 CALL SSYMV( 'U', 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
02383 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02384 INFOT = 10
02385 CALL SSYMV( 'U', 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
02386 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02387 GO TO 170
02388 40 INFOT = 1
02389 CALL SSBMV( '/', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02390 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02391 INFOT = 2
02392 CALL SSBMV( 'U', -1, 0, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02393 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02394 INFOT = 3
02395 CALL SSBMV( 'U', 0, -1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02396 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02397 INFOT = 6
02398 CALL SSBMV( 'U', 0, 1, ALPHA, A, 1, X, 1, BETA, Y, 1 )
02399 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02400 INFOT = 8
02401 CALL SSBMV( 'U', 0, 0, ALPHA, A, 1, X, 0, BETA, Y, 1 )
02402 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02403 INFOT = 11
02404 CALL SSBMV( 'U', 0, 0, ALPHA, A, 1, X, 1, BETA, Y, 0 )
02405 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02406 GO TO 170
02407 50 INFOT = 1
02408 CALL SSPMV( '/', 0, ALPHA, A, X, 1, BETA, Y, 1 )
02409 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02410 INFOT = 2
02411 CALL SSPMV( 'U', -1, ALPHA, A, X, 1, BETA, Y, 1 )
02412 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02413 INFOT = 6
02414 CALL SSPMV( 'U', 0, ALPHA, A, X, 0, BETA, Y, 1 )
02415 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02416 INFOT = 9
02417 CALL SSPMV( 'U', 0, ALPHA, A, X, 1, BETA, Y, 0 )
02418 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02419 GO TO 170
02420 60 INFOT = 1
02421 CALL STRMV( '/', 'N', 'N', 0, A, 1, X, 1 )
02422 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02423 INFOT = 2
02424 CALL STRMV( 'U', '/', 'N', 0, A, 1, X, 1 )
02425 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02426 INFOT = 3
02427 CALL STRMV( 'U', 'N', '/', 0, A, 1, X, 1 )
02428 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02429 INFOT = 4
02430 CALL STRMV( 'U', 'N', 'N', -1, A, 1, X, 1 )
02431 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02432 INFOT = 6
02433 CALL STRMV( 'U', 'N', 'N', 2, A, 1, X, 1 )
02434 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02435 INFOT = 8
02436 CALL STRMV( 'U', 'N', 'N', 0, A, 1, X, 0 )
02437 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02438 GO TO 170
02439 70 INFOT = 1
02440 CALL STBMV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
02441 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02442 INFOT = 2
02443 CALL STBMV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
02444 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02445 INFOT = 3
02446 CALL STBMV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
02447 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02448 INFOT = 4
02449 CALL STBMV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
02450 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02451 INFOT = 5
02452 CALL STBMV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
02453 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02454 INFOT = 7
02455 CALL STBMV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
02456 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02457 INFOT = 9
02458 CALL STBMV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
02459 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02460 GO TO 170
02461 80 INFOT = 1
02462 CALL STPMV( '/', 'N', 'N', 0, A, X, 1 )
02463 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02464 INFOT = 2
02465 CALL STPMV( 'U', '/', 'N', 0, A, X, 1 )
02466 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02467 INFOT = 3
02468 CALL STPMV( 'U', 'N', '/', 0, A, X, 1 )
02469 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02470 INFOT = 4
02471 CALL STPMV( 'U', 'N', 'N', -1, A, X, 1 )
02472 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02473 INFOT = 7
02474 CALL STPMV( 'U', 'N', 'N', 0, A, X, 0 )
02475 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02476 GO TO 170
02477 90 INFOT = 1
02478 CALL STRSV( '/', 'N', 'N', 0, A, 1, X, 1 )
02479 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02480 INFOT = 2
02481 CALL STRSV( 'U', '/', 'N', 0, A, 1, X, 1 )
02482 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02483 INFOT = 3
02484 CALL STRSV( 'U', 'N', '/', 0, A, 1, X, 1 )
02485 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02486 INFOT = 4
02487 CALL STRSV( 'U', 'N', 'N', -1, A, 1, X, 1 )
02488 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02489 INFOT = 6
02490 CALL STRSV( 'U', 'N', 'N', 2, A, 1, X, 1 )
02491 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02492 INFOT = 8
02493 CALL STRSV( 'U', 'N', 'N', 0, A, 1, X, 0 )
02494 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02495 GO TO 170
02496 100 INFOT = 1
02497 CALL STBSV( '/', 'N', 'N', 0, 0, A, 1, X, 1 )
02498 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02499 INFOT = 2
02500 CALL STBSV( 'U', '/', 'N', 0, 0, A, 1, X, 1 )
02501 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02502 INFOT = 3
02503 CALL STBSV( 'U', 'N', '/', 0, 0, A, 1, X, 1 )
02504 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02505 INFOT = 4
02506 CALL STBSV( 'U', 'N', 'N', -1, 0, A, 1, X, 1 )
02507 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02508 INFOT = 5
02509 CALL STBSV( 'U', 'N', 'N', 0, -1, A, 1, X, 1 )
02510 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02511 INFOT = 7
02512 CALL STBSV( 'U', 'N', 'N', 0, 1, A, 1, X, 1 )
02513 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02514 INFOT = 9
02515 CALL STBSV( 'U', 'N', 'N', 0, 0, A, 1, X, 0 )
02516 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02517 GO TO 170
02518 110 INFOT = 1
02519 CALL STPSV( '/', 'N', 'N', 0, A, X, 1 )
02520 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02521 INFOT = 2
02522 CALL STPSV( 'U', '/', 'N', 0, A, X, 1 )
02523 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02524 INFOT = 3
02525 CALL STPSV( 'U', 'N', '/', 0, A, X, 1 )
02526 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02527 INFOT = 4
02528 CALL STPSV( 'U', 'N', 'N', -1, A, X, 1 )
02529 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02530 INFOT = 7
02531 CALL STPSV( 'U', 'N', 'N', 0, A, X, 0 )
02532 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02533 GO TO 170
02534 120 INFOT = 1
02535 CALL SGER( -1, 0, ALPHA, X, 1, Y, 1, A, 1 )
02536 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02537 INFOT = 2
02538 CALL SGER( 0, -1, ALPHA, X, 1, Y, 1, A, 1 )
02539 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02540 INFOT = 5
02541 CALL SGER( 0, 0, ALPHA, X, 0, Y, 1, A, 1 )
02542 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02543 INFOT = 7
02544 CALL SGER( 0, 0, ALPHA, X, 1, Y, 0, A, 1 )
02545 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02546 INFOT = 9
02547 CALL SGER( 2, 0, ALPHA, X, 1, Y, 1, A, 1 )
02548 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02549 GO TO 170
02550 130 INFOT = 1
02551 CALL SSYR( '/', 0, ALPHA, X, 1, A, 1 )
02552 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02553 INFOT = 2
02554 CALL SSYR( 'U', -1, ALPHA, X, 1, A, 1 )
02555 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02556 INFOT = 5
02557 CALL SSYR( 'U', 0, ALPHA, X, 0, A, 1 )
02558 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02559 INFOT = 7
02560 CALL SSYR( 'U', 2, ALPHA, X, 1, A, 1 )
02561 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02562 GO TO 170
02563 140 INFOT = 1
02564 CALL SSPR( '/', 0, ALPHA, X, 1, A )
02565 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02566 INFOT = 2
02567 CALL SSPR( 'U', -1, ALPHA, X, 1, A )
02568 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02569 INFOT = 5
02570 CALL SSPR( 'U', 0, ALPHA, X, 0, A )
02571 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02572 GO TO 170
02573 150 INFOT = 1
02574 CALL SSYR2( '/', 0, ALPHA, X, 1, Y, 1, A, 1 )
02575 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02576 INFOT = 2
02577 CALL SSYR2( 'U', -1, ALPHA, X, 1, Y, 1, A, 1 )
02578 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02579 INFOT = 5
02580 CALL SSYR2( 'U', 0, ALPHA, X, 0, Y, 1, A, 1 )
02581 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02582 INFOT = 7
02583 CALL SSYR2( 'U', 0, ALPHA, X, 1, Y, 0, A, 1 )
02584 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02585 INFOT = 9
02586 CALL SSYR2( 'U', 2, ALPHA, X, 1, Y, 1, A, 1 )
02587 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02588 GO TO 170
02589 160 INFOT = 1
02590 CALL SSPR2( '/', 0, ALPHA, X, 1, Y, 1, A )
02591 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02592 INFOT = 2
02593 CALL SSPR2( 'U', -1, ALPHA, X, 1, Y, 1, A )
02594 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02595 INFOT = 5
02596 CALL SSPR2( 'U', 0, ALPHA, X, 0, Y, 1, A )
02597 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02598 INFOT = 7
02599 CALL SSPR2( 'U', 0, ALPHA, X, 1, Y, 0, A )
02600 CALL CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
02601
02602 170 IF( OK )THEN
02603 WRITE( NOUT, FMT = 9999 )SRNAMT
02604 ELSE
02605 WRITE( NOUT, FMT = 9998 )SRNAMT
02606 END IF
02607 RETURN
02608
02609 9999 FORMAT( ' ', A6, ' PASSED THE TESTS OF ERROR-EXITS' )
02610 9998 FORMAT( ' ******* ', A6, ' FAILED THE TESTS OF ERROR-EXITS *****',
02611 $ '**' )
02612
02613
02614
02615 END
02616 SUBROUTINE SMAKE( TYPE, UPLO, DIAG, M, N, A, NMAX, AA, LDA, KL,
02617 $ KU, RESET, TRANSL )
02618
02619
02620
02621
02622
02623
02624
02625
02626
02627
02628
02629
02630
02631
02632
02633 REAL ZERO, ONE
02634 PARAMETER ( ZERO = 0.0, ONE = 1.0 )
02635 REAL ROGUE
02636 PARAMETER ( ROGUE = -1.0E10 )
02637
02638 REAL TRANSL
02639 INTEGER KL, KU, LDA, M, N, NMAX
02640 LOGICAL RESET
02641 CHARACTER*1 DIAG, UPLO
02642 CHARACTER*2 TYPE
02643
02644 REAL A( NMAX, * ), AA( * )
02645
02646 INTEGER I, I1, I2, I3, IBEG, IEND, IOFF, J, KK
02647 LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER
02648
02649 REAL SBEG
02650 EXTERNAL SBEG
02651
02652 INTRINSIC MAX, MIN
02653
02654 GEN = TYPE( 1: 1 ).EQ.'G'
02655 SYM = TYPE( 1: 1 ).EQ.'S'
02656 TRI = TYPE( 1: 1 ).EQ.'T'
02657 UPPER = ( SYM.OR.TRI ).AND.UPLO.EQ.'U'
02658 LOWER = ( SYM.OR.TRI ).AND.UPLO.EQ.'L'
02659 UNIT = TRI.AND.DIAG.EQ.'U'
02660
02661
02662
02663 DO 20 J = 1, N
02664 DO 10 I = 1, M
02665 IF( GEN.OR.( UPPER.AND.I.LE.J ).OR.( LOWER.AND.I.GE.J ) )
02666 $ THEN
02667 IF( ( I.LE.J.AND.J - I.LE.KU ).OR.
02668 $ ( I.GE.J.AND.I - J.LE.KL ) )THEN
02669 A( I, J ) = SBEG( RESET ) + TRANSL
02670 ELSE
02671 A( I, J ) = ZERO
02672 END IF
02673 IF( I.NE.J )THEN
02674 IF( SYM )THEN
02675 A( J, I ) = A( I, J )
02676 ELSE IF( TRI )THEN
02677 A( J, I ) = ZERO
02678 END IF
02679 END IF
02680 END IF
02681 10 CONTINUE
02682 IF( TRI )
02683 $ A( J, J ) = A( J, J ) + ONE
02684 IF( UNIT )
02685 $ A( J, J ) = ONE
02686 20 CONTINUE
02687
02688
02689
02690 IF( TYPE.EQ.'GE' )THEN
02691 DO 50 J = 1, N
02692 DO 30 I = 1, M
02693 AA( I + ( J - 1 )*LDA ) = A( I, J )
02694 30 CONTINUE
02695 DO 40 I = M + 1, LDA
02696 AA( I + ( J - 1 )*LDA ) = ROGUE
02697 40 CONTINUE
02698 50 CONTINUE
02699 ELSE IF( TYPE.EQ.'GB' )THEN
02700 DO 90 J = 1, N
02701 DO 60 I1 = 1, KU + 1 - J
02702 AA( I1 + ( J - 1 )*LDA ) = ROGUE
02703 60 CONTINUE
02704 DO 70 I2 = I1, MIN( KL + KU + 1, KU + 1 + M - J )
02705 AA( I2 + ( J - 1 )*LDA ) = A( I2 + J - KU - 1, J )
02706 70 CONTINUE
02707 DO 80 I3 = I2, LDA
02708 AA( I3 + ( J - 1 )*LDA ) = ROGUE
02709 80 CONTINUE
02710 90 CONTINUE
02711 ELSE IF( TYPE.EQ.'SY'.OR.TYPE.EQ.'TR' )THEN
02712 DO 130 J = 1, N
02713 IF( UPPER )THEN
02714 IBEG = 1
02715 IF( UNIT )THEN
02716 IEND = J - 1
02717 ELSE
02718 IEND = J
02719 END IF
02720 ELSE
02721 IF( UNIT )THEN
02722 IBEG = J + 1
02723 ELSE
02724 IBEG = J
02725 END IF
02726 IEND = N
02727 END IF
02728 DO 100 I = 1, IBEG - 1
02729 AA( I + ( J - 1 )*LDA ) = ROGUE
02730 100 CONTINUE
02731 DO 110 I = IBEG, IEND
02732 AA( I + ( J - 1 )*LDA ) = A( I, J )
02733 110 CONTINUE
02734 DO 120 I = IEND + 1, LDA
02735 AA( I + ( J - 1 )*LDA ) = ROGUE
02736 120 CONTINUE
02737 130 CONTINUE
02738 ELSE IF( TYPE.EQ.'SB'.OR.TYPE.EQ.'TB' )THEN
02739 DO 170 J = 1, N
02740 IF( UPPER )THEN
02741 KK = KL + 1
02742 IBEG = MAX( 1, KL + 2 - J )
02743 IF( UNIT )THEN
02744 IEND = KL
02745 ELSE
02746 IEND = KL + 1
02747 END IF
02748 ELSE
02749 KK = 1
02750 IF( UNIT )THEN
02751 IBEG = 2
02752 ELSE
02753 IBEG = 1
02754 END IF
02755 IEND = MIN( KL + 1, 1 + M - J )
02756 END IF
02757 DO 140 I = 1, IBEG - 1
02758 AA( I + ( J - 1 )*LDA ) = ROGUE
02759 140 CONTINUE
02760 DO 150 I = IBEG, IEND
02761 AA( I + ( J - 1 )*LDA ) = A( I + J - KK, J )
02762 150 CONTINUE
02763 DO 160 I = IEND + 1, LDA
02764 AA( I + ( J - 1 )*LDA ) = ROGUE
02765 160 CONTINUE
02766 170 CONTINUE
02767 ELSE IF( TYPE.EQ.'SP'.OR.TYPE.EQ.'TP' )THEN
02768 IOFF = 0
02769 DO 190 J = 1, N
02770 IF( UPPER )THEN
02771 IBEG = 1
02772 IEND = J
02773 ELSE
02774 IBEG = J
02775 IEND = N
02776 END IF
02777 DO 180 I = IBEG, IEND
02778 IOFF = IOFF + 1
02779 AA( IOFF ) = A( I, J )
02780 IF( I.EQ.J )THEN
02781 IF( UNIT )
02782 $ AA( IOFF ) = ROGUE
02783 END IF
02784 180 CONTINUE
02785 190 CONTINUE
02786 END IF
02787 RETURN
02788
02789
02790
02791 END
02792 SUBROUTINE SMVCH( TRANS, M, N, ALPHA, A, NMAX, X, INCX, BETA, Y,
02793 $ INCY, YT, G, YY, EPS, ERR, FATAL, NOUT, MV )
02794
02795
02796
02797
02798
02799
02800
02801
02802
02803
02804 REAL ZERO, ONE
02805 PARAMETER ( ZERO = 0.0, ONE = 1.0 )
02806
02807 REAL ALPHA, BETA, EPS, ERR
02808 INTEGER INCX, INCY, M, N, NMAX, NOUT
02809 LOGICAL FATAL, MV
02810 CHARACTER*1 TRANS
02811
02812 REAL A( NMAX, * ), G( * ), X( * ), Y( * ), YT( * ),
02813 $ YY( * )
02814
02815 REAL ERRI
02816 INTEGER I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL
02817 LOGICAL TRAN
02818
02819 INTRINSIC ABS, MAX, SQRT
02820
02821 TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'
02822 IF( TRAN )THEN
02823 ML = N
02824 NL = M
02825 ELSE
02826 ML = M
02827 NL = N
02828 END IF
02829 IF( INCX.LT.0 )THEN
02830 KX = NL
02831 INCXL = -1
02832 ELSE
02833 KX = 1
02834 INCXL = 1
02835 END IF
02836 IF( INCY.LT.0 )THEN
02837 KY = ML
02838 INCYL = -1
02839 ELSE
02840 KY = 1
02841 INCYL = 1
02842 END IF
02843
02844
02845
02846
02847 IY = KY
02848 DO 30 I = 1, ML
02849 YT( IY ) = ZERO
02850 G( IY ) = ZERO
02851 JX = KX
02852 IF( TRAN )THEN
02853 DO 10 J = 1, NL
02854 YT( IY ) = YT( IY ) + A( J, I )*X( JX )
02855 G( IY ) = G( IY ) + ABS( A( J, I )*X( JX ) )
02856 JX = JX + INCXL
02857 10 CONTINUE
02858 ELSE
02859 DO 20 J = 1, NL
02860 YT( IY ) = YT( IY ) + A( I, J )*X( JX )
02861 G( IY ) = G( IY ) + ABS( A( I, J )*X( JX ) )
02862 JX = JX + INCXL
02863 20 CONTINUE
02864 END IF
02865 YT( IY ) = ALPHA*YT( IY ) + BETA*Y( IY )
02866 G( IY ) = ABS( ALPHA )*G( IY ) + ABS( BETA*Y( IY ) )
02867 IY = IY + INCYL
02868 30 CONTINUE
02869
02870
02871
02872 ERR = ZERO
02873 DO 40 I = 1, ML
02874 ERRI = ABS( YT( I ) - YY( 1 + ( I - 1 )*ABS( INCY ) ) )/EPS
02875 IF( G( I ).NE.ZERO )
02876 $ ERRI = ERRI/G( I )
02877 ERR = MAX( ERR, ERRI )
02878 IF( ERR*SQRT( EPS ).GE.ONE )
02879 $ GO TO 50
02880 40 CONTINUE
02881
02882 GO TO 70
02883
02884
02885
02886 50 FATAL = .TRUE.
02887 WRITE( NOUT, FMT = 9999 )
02888 DO 60 I = 1, ML
02889 IF( MV )THEN
02890 WRITE( NOUT, FMT = 9998 )I, YT( I ),
02891 $ YY( 1 + ( I - 1 )*ABS( INCY ) )
02892 ELSE
02893 WRITE( NOUT, FMT = 9998 )I,
02894 $ YY( 1 + ( I - 1 )*ABS( INCY ) ), YT(I)
02895 END IF
02896 60 CONTINUE
02897
02898 70 CONTINUE
02899 RETURN
02900
02901 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
02902 $ 'F ACCURATE *******', /' EXPECTED RESULT COMPU',
02903 $ 'TED RESULT' )
02904 9998 FORMAT( 1X, I7, 2G18.6 )
02905
02906
02907
02908 END
02909 LOGICAL FUNCTION LSE( RI, RJ, LR )
02910
02911
02912
02913
02914
02915
02916
02917
02918
02919
02920 INTEGER LR
02921
02922 REAL RI( * ), RJ( * )
02923
02924 INTEGER I
02925
02926 DO 10 I = 1, LR
02927 IF( RI( I ).NE.RJ( I ) )
02928 $ GO TO 20
02929 10 CONTINUE
02930 LSE = .TRUE.
02931 GO TO 30
02932 20 CONTINUE
02933 LSE = .FALSE.
02934 30 RETURN
02935
02936
02937
02938 END
02939 LOGICAL FUNCTION LSERES( TYPE, UPLO, M, N, AA, AS, LDA )
02940
02941
02942
02943
02944
02945
02946
02947
02948
02949
02950
02951
02952 INTEGER LDA, M, N
02953 CHARACTER*1 UPLO
02954 CHARACTER*2 TYPE
02955
02956 REAL AA( LDA, * ), AS( LDA, * )
02957
02958 INTEGER I, IBEG, IEND, J
02959 LOGICAL UPPER
02960
02961 UPPER = UPLO.EQ.'U'
02962 IF( TYPE.EQ.'GE' )THEN
02963 DO 20 J = 1, N
02964 DO 10 I = M + 1, LDA
02965 IF( AA( I, J ).NE.AS( I, J ) )
02966 $ GO TO 70
02967 10 CONTINUE
02968 20 CONTINUE
02969 ELSE IF( TYPE.EQ.'SY' )THEN
02970 DO 50 J = 1, N
02971 IF( UPPER )THEN
02972 IBEG = 1
02973 IEND = J
02974 ELSE
02975 IBEG = J
02976 IEND = N
02977 END IF
02978 DO 30 I = 1, IBEG - 1
02979 IF( AA( I, J ).NE.AS( I, J ) )
02980 $ GO TO 70
02981 30 CONTINUE
02982 DO 40 I = IEND + 1, LDA
02983 IF( AA( I, J ).NE.AS( I, J ) )
02984 $ GO TO 70
02985 40 CONTINUE
02986 50 CONTINUE
02987 END IF
02988
02989 60 CONTINUE
02990 LSERES = .TRUE.
02991 GO TO 80
02992 70 CONTINUE
02993 LSERES = .FALSE.
02994 80 RETURN
02995
02996
02997
02998 END
02999 REAL FUNCTION SBEG( RESET )
03000
03001
03002
03003
03004
03005
03006
03007
03008
03009
03010 LOGICAL RESET
03011
03012 INTEGER I, IC, MI
03013
03014 SAVE I, IC, MI
03015
03016 INTRINSIC REAL
03017
03018 IF( RESET )THEN
03019
03020 MI = 891
03021 I = 7
03022 IC = 0
03023 RESET = .FALSE.
03024 END IF
03025
03026
03027
03028
03029
03030
03031
03032 IC = IC + 1
03033 10 I = I*MI
03034 I = I - 1000*( I/1000 )
03035 IF( IC.GE.5 )THEN
03036 IC = 0
03037 GO TO 10
03038 END IF
03039 SBEG = REAL( I - 500 )/1001.0
03040 RETURN
03041
03042
03043
03044 END
03045 REAL FUNCTION SDIFF( X, Y )
03046
03047
03048
03049
03050
03051
03052
03053 REAL X, Y
03054
03055 SDIFF = X - Y
03056 RETURN
03057
03058
03059
03060 END
03061 SUBROUTINE CHKXER( SRNAMT, INFOT, NOUT, LERR, OK )
03062
03063
03064
03065
03066
03067
03068
03069
03070
03071
03072 INTEGER INFOT, NOUT
03073 LOGICAL LERR, OK
03074 CHARACTER*6 SRNAMT
03075
03076 IF( .NOT.LERR )THEN
03077 WRITE( NOUT, FMT = 9999 )INFOT, SRNAMT
03078 OK = .FALSE.
03079 END IF
03080 LERR = .FALSE.
03081 RETURN
03082
03083 9999 FORMAT( ' ***** ILLEGAL VALUE OF PARAMETER NUMBER ', I2, ' NOT D',
03084 $ 'ETECTED BY ', A6, ' *****' )
03085
03086
03087
03088 END
03089 SUBROUTINE XERBLA( SRNAME, INFO )
03090
03091
03092
03093
03094
03095
03096
03097
03098
03099
03100
03101
03102
03103
03104
03105
03106
03107 INTEGER INFO
03108 CHARACTER*6 SRNAME
03109
03110 INTEGER INFOT, NOUT
03111 LOGICAL LERR, OK
03112 CHARACTER*6 SRNAMT
03113
03114 COMMON /INFOC/INFOT, NOUT, OK, LERR
03115 COMMON /SRNAMC/SRNAMT
03116
03117 LERR = .TRUE.
03118 IF( INFO.NE.INFOT )THEN
03119 IF( INFOT.NE.0 )THEN
03120 WRITE( NOUT, FMT = 9999 )INFO, INFOT
03121 ELSE
03122 WRITE( NOUT, FMT = 9997 )INFO
03123 END IF
03124 OK = .FALSE.
03125 END IF
03126 IF( SRNAME.NE.SRNAMT )THEN
03127 WRITE( NOUT, FMT = 9998 )SRNAME, SRNAMT
03128 OK = .FALSE.
03129 END IF
03130 RETURN
03131
03132 9999 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6, ' INSTEAD',
03133 $ ' OF ', I2, ' *******' )
03134 9998 FORMAT( ' ******* XERBLA WAS CALLED WITH SRNAME = ', A6, ' INSTE',
03135 $ 'AD OF ', A6, ' *******' )
03136 9997 FORMAT( ' ******* XERBLA WAS CALLED WITH INFO = ', I6,
03137 $ ' *******' )
03138
03139
03140
03141 END
03142