*DECK SBLAT2 SUBROUTINE SBLAT2 (NOUT, KPRINT, IPASS) C***BEGIN PROLOGUE SBLAT2 C***PURPOSE Driver for testing Level 2 BLAS single precision C subroutines. C***LIBRARY SLATEC (BLAS) C***CATEGORY A3A C***TYPE SINGLE PRECISION (SBLAT2-S, DBLAT2-D, CBLAT2-C) C***KEYWORDS BLAS, QUICK CHECK DRIVER C***AUTHOR Du Croz, J. J., (NAG) C Hanson, R. J., (SNLA) C***DESCRIPTION C C Test program for the REAL Level 2 Blas. C C***REFERENCES Dongarra, J. J., Du Croz, J. J., Hammarling, S. and C Hanson, R. J. An extended set of Fortran Basic C Linear Algebra Subprograms. ACM TOMS, Vol. 14, No. 1, C pp. 1-17, March 1988. C***ROUTINES CALLED LSE, R1MACH, SCHK12, SCHK22, SCHK32, SCHK42, C SCHK52, SCHK62, SCHKE2, SMVCH, XERCLR C***REVISION HISTORY (YYMMDD) C 870810 DATE WRITTEN C 910619 Modified to meet SLATEC code and prologue standards. (BKS) C 930315 Removed unused variables. (WRB) C 930618 Code modified to improve PASS/FAIL reporting. (BKS, WRB) C***END PROLOGUE SBLAT2 C .. Parameters .. INTEGER NSUBS PARAMETER ( NSUBS = 16) REAL ZERO, ONE PARAMETER ( ZERO = 0.0, ONE = 1.0 ) INTEGER NMAX, INCMAX PARAMETER ( NMAX = 65, INCMAX = 2 ) C .. Scalar Arguments .. INTEGER IPASS, KPRINT C .. Local Scalars .. LOGICAL FTL, FTL1, FTL2 REAL EPS, ERR, THRESH INTEGER I, ISNUM, J, N, NALF, NBET, NIDIM, NINC, NKB, $ NOUT PARAMETER (NIDIM=6, NKB=4,NINC=4, NALF=3, NBET=3) LOGICAL SAME, TSTERR CHARACTER*1 TRANS C .. Local Arrays .. REAL A( NMAX, NMAX ), AA( NMAX*NMAX ), $ ALF( NALF ), AS( NMAX*NMAX ), BET( NBET ), $ G( NMAX ), X( NMAX ), XS( NMAX*INCMAX ), $ XX( NMAX*INCMAX ), Y( NMAX ), $ YS( NMAX*INCMAX ), YT( NMAX ), $ YY( NMAX*INCMAX ), Z( 2*NMAX ) INTEGER IDIM( NIDIM ), INC( NINC ), KB( NKB ) LOGICAL LTEST( NSUBS ) CHARACTER*6 SNAMES( NSUBS ) C .. External Functions .. REAL R1MACH LOGICAL LSE EXTERNAL LSE, R1MACH C .. External Subroutines .. EXTERNAL SCHK12, SCHK22, SCHK32, SCHK42, SCHK52, SCHK62, $ SCHKE2, SMVCH C .. Intrinsic Functions .. INTRINSIC ABS, MAX, MIN C .. Data statements .. DATA SNAMES/'SGEMV ', 'SGBMV ', 'SSYMV ', 'SSBMV ', $ 'SSPMV ', 'STRMV ', 'STBMV ', 'STPMV ', $ 'STRSV ', 'STBSV ', 'STPSV ', 'SGER ', $ 'SSYR ', 'SSPR ', 'SSYR2 ', 'SSPR2 '/ DATA IDIM/0,1,2,3,5,9/ DATA KB/0,1,2,4/ DATA INC/1,2,-1,-2/ DATA ALF/0.0,1.0,0.7/ DATA BET/0.0,1.0,0.9/ C***FIRST EXECUTABLE STATEMENT SBLAT2 C C Set the flag that indicates whether error exits are to be tested. C TSTERR=.TRUE. C C Set the threshold value of the test ratio C THRESH=16.0 C C Initialize IPASS to 1 assuming everything will pass. C IPASS = 1 C C Report values of parameters. C IF (KPRINT .GE. 3) THEN WRITE( NOUT, FMT = 9993 ) WRITE( NOUT, FMT = 9992 )( IDIM( I ), I = 1, NIDIM ) WRITE( NOUT, FMT = 9991 )( KB( I ), I = 1, NKB ) WRITE( NOUT, FMT = 9990 )( INC( I ), I = 1, NINC ) WRITE( NOUT, FMT = 9989 )( ALF( I ), I = 1, NALF ) WRITE( NOUT, FMT = 9988 )( BET( I ), I = 1, NBET ) IF( .NOT.TSTERR )THEN WRITE( NOUT, FMT = 9980 ) END IF WRITE( NOUT, FMT = 9999 )THRESH ENDIF C C Set names of subroutines and flags which indicate C whether they are to be tested. C DO 40 I = 1, NSUBS LTEST( I ) = .TRUE. 40 CONTINUE C C Set EPS (the machine precision). C EPS = R1MACH (4) C C Check the reliability of SMVCH using exact data. C N = MIN( 32, NMAX ) DO 120 J = 1, N DO 110 I = 1, N A( I, J ) = MAX( I - J + 1, 0 ) 110 CONTINUE X( J ) = J Y( J ) = ZERO 120 CONTINUE DO 130 J = 1, N YY( J ) = J*( ( J + 1 )*J )/2 - ( ( J + 1 )*J*( J - 1 ) )/3 130 CONTINUE C YY holds the exact result. On exit from SMVCH YT holds C the result computed by SMVCH. TRANS = 'N' FTL = .FALSE. CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X, 1, ZERO, Y, 1, YT, G, $ YY, EPS, ERR, FTL, NOUT, .TRUE., KPRINT ) SAME = LSE( YY, YT, N ) IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN IPASS = 0 IF (KPRINT .GE. 2) THEN WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR END IF ENDIF TRANS = 'T' FTL = .FALSE. CALL SMVCH( TRANS, N, N, ONE, A, NMAX, X, -1, ZERO, Y, -1, YT, G, $ YY, EPS, ERR, FTL, NOUT, .TRUE., KPRINT ) SAME = LSE( YY, YT, N ) IF( .NOT.SAME.OR.ERR.NE.ZERO )THEN IPASS = 0 IF (KPRINT .GE. 2) THEN WRITE( NOUT, FMT = 9985 )TRANS, SAME, ERR END IF ENDIF C C Test each subroutine in turn. C DO 210 ISNUM = 1, NSUBS IF( .NOT.LTEST( ISNUM ) )THEN C Subprogram is not to be tested. WRITE( NOUT, FMT = 9983 )SNAMES( ISNUM ) ELSE C Test error exits. FTL1 = .FALSE. IF( TSTERR )THEN CALL SCHKE2( ISNUM, SNAMES( ISNUM ), NOUT, KPRINT, FTL1) END IF C Test computations. FTL2 = .FALSE. CALL XERCLR GO TO ( 140, 140, 150, 150, 150, 160, 160, $ 160, 160, 160, 160, 170, 180, 180, $ 190, 190 )ISNUM C Test SGEMV, 01, and SGBMV, 02. 140 CALL SCHK12( SNAMES( ISNUM ), EPS, THRESH, NOUT, KPRINT, $ FTL2, NIDIM, IDIM, NKB, KB, NALF, ALF, $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, $ X, XX, XS, Y, YY, YS, YT, G ) GO TO 200 C Test SSYMV, 03, SSBMV, 04, and SSPMV, 05. 150 CALL SCHK22( SNAMES( ISNUM ), EPS, THRESH, NOUT, KPRINT, $ FTL2, NIDIM, IDIM, NKB, KB, NALF, ALF, $ NBET, BET, NINC, INC, NMAX, INCMAX, A, AA, AS, $ X, XX, XS, Y, YY, YS, YT, G ) GO TO 200 C Test STRMV, 06, STBMV, 07, STPMV, 08, C STRSV, 09, STBSV, 10, and STPSV, 11. 160 CALL SCHK32( SNAMES( ISNUM ), EPS, THRESH, NOUT, KPRINT, $ FTL2, NIDIM, IDIM, NKB, KB, NINC, INC, $ NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z ) GO TO 200 C Test SGER, 12. 170 CALL SCHK42( SNAMES( ISNUM ), EPS, THRESH, NOUT, KPRINT, $ FTL2, NIDIM, IDIM, NALF, ALF, NINC, INC, $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, $ YT, G, Z ) GO TO 200 C Test SSYR, 13, and SSPR, 14. 180 CALL SCHK52( SNAMES( ISNUM ), EPS, THRESH, NOUT, KPRINT, $ FTL2, NIDIM, IDIM, NALF, ALF, NINC, INC, $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, $ YT, G, Z ) GO TO 200 C Test SSYR2, 15, and SSPR2, 16. 190 CALL SCHK62( SNAMES( ISNUM ), EPS, THRESH, NOUT, KPRINT, $ FTL2, NIDIM, IDIM, NALF, ALF, NINC, INC, $ NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS, $ YT, G, Z ) C 200 IF (FTL1 .OR. FTL2 ) THEN IPASS = 0 ENDIF END IF 210 CONTINUE RETURN C 9999 FORMAT( ' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES', $ 'S THAN', F8.2 ) 9993 FORMAT( ' TESTS OF THE REAL LEVEL 2 BLAS', //' THE F', $ 'OLLOWING PARAMETER VALUES WILL BE USED:' ) 9992 FORMAT( ' FOR N ', 9I6 ) 9991 FORMAT( ' FOR K ', 7I6 ) 9990 FORMAT( ' FOR INCX AND INCY ', 7I6 ) 9989 FORMAT( ' FOR ALPHA ', 7F6.1 ) 9988 FORMAT( ' FOR BETA ', 7F6.1 ) 9985 FORMAT( ' ERROR IN SMVCH - IN-LINE DOT PRODUCTS ARE BEING EVALU', $ 'ATED WRONGLY.', /' SMVCH WAS CALLED WITH TRANS = ', A1, $ ' AND RETURNED SAME = ', L1, ' AND ERR = ', F12.3, '.', / $ ' THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE', $ ' COMPILER.') 9983 FORMAT( 1X, A6, ' WAS NOT TESTED' ) 9980 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' ) C C End of SBLAT2. C END