LAPACK  3.4.0
LAPACK: Linear Algebra PACKage
sblat1.f
Go to the documentation of this file.
00001 *> \brief \b SBLAT1
00002 *
00003 *  =========== DOCUMENTATION ===========
00004 *
00005 * Online html documentation available at 
00006 *            http://www.netlib.org/lapack/explore-html/ 
00007 *
00008 *  Definition:
00009 *  ===========
00010 *
00011 *       PROGRAM SBLAT1
00012 * 
00013 *
00014 *> \par Purpose:
00015 *  =============
00016 *>
00017 *> \verbatim
00018 *>
00019 *>    Test program for the REAL Level 1 BLAS.
00020 *>
00021 *>    Based upon the original BLAS test routine together with:
00022 *>    F06EAF Example Program Text
00023 *> \endverbatim
00024 *
00025 *  Authors:
00026 *  ========
00027 *
00028 *> \author Univ. of Tennessee 
00029 *> \author Univ. of California Berkeley 
00030 *> \author Univ. of Colorado Denver 
00031 *> \author NAG Ltd. 
00032 *
00033 *> \date November 2011
00034 *
00035 *> \ingroup single_blas_testing
00036 *
00037 *  =====================================================================      PROGRAM SBLAT1
00038 *
00039 *  -- Reference BLAS test routine (version 3.4.0) --
00040 *  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
00041 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
00042 *     November 2011
00043 *
00044 *  =====================================================================
00045 *
00046 *     .. Parameters ..
00047       INTEGER          NOUT
00048       PARAMETER        (NOUT=6)
00049 *     .. Scalars in Common ..
00050       INTEGER          ICASE, INCX, INCY, N
00051       LOGICAL          PASS
00052 *     .. Local Scalars ..
00053       REAL             SFAC
00054       INTEGER          IC
00055 *     .. External Subroutines ..
00056       EXTERNAL         CHECK0, CHECK1, CHECK2, CHECK3, HEADER
00057 *     .. Common blocks ..
00058       COMMON           /COMBLA/ICASE, N, INCX, INCY, PASS
00059 *     .. Data statements ..
00060       DATA             SFAC/9.765625E-4/
00061 *     .. Executable Statements ..
00062       WRITE (NOUT,99999)
00063       DO 20 IC = 1, 13
00064          ICASE = IC
00065          CALL HEADER
00066 *
00067 *        .. Initialize  PASS,  INCX,  and INCY for a new case. ..
00068 *        .. the value 9999 for INCX or INCY will appear in the ..
00069 *        .. detailed  output, if any, for cases  that do not involve ..
00070 *        .. these parameters ..
00071 *
00072          PASS = .TRUE.
00073          INCX = 9999
00074          INCY = 9999
00075          IF (ICASE.EQ.3 .OR. ICASE.EQ.11) THEN
00076             CALL CHECK0(SFAC)
00077          ELSE IF (ICASE.EQ.7 .OR. ICASE.EQ.8 .OR. ICASE.EQ.9 .OR.
00078      +            ICASE.EQ.10) THEN
00079             CALL CHECK1(SFAC)
00080          ELSE IF (ICASE.EQ.1 .OR. ICASE.EQ.2 .OR. ICASE.EQ.5 .OR.
00081      +            ICASE.EQ.6 .OR. ICASE.EQ.12 .OR. ICASE.EQ.13) THEN
00082             CALL CHECK2(SFAC)
00083          ELSE IF (ICASE.EQ.4) THEN
00084             CALL CHECK3(SFAC)
00085          END IF
00086 *        -- Print
00087          IF (PASS) WRITE (NOUT,99998)
00088    20 CONTINUE
00089       STOP
00090 *
00091 99999 FORMAT (' Real BLAS Test Program Results',/1X)
00092 99998 FORMAT ('                                    ----- PASS -----')
00093       END
00094       SUBROUTINE HEADER
00095 *     .. Parameters ..
00096       INTEGER          NOUT
00097       PARAMETER        (NOUT=6)
00098 *     .. Scalars in Common ..
00099       INTEGER          ICASE, INCX, INCY, N
00100       LOGICAL          PASS
00101 *     .. Local Arrays ..
00102       CHARACTER*6      L(13)
00103 *     .. Common blocks ..
00104       COMMON           /COMBLA/ICASE, N, INCX, INCY, PASS
00105 *     .. Data statements ..
00106       DATA             L(1)/' SDOT '/
00107       DATA             L(2)/'SAXPY '/
00108       DATA             L(3)/'SROTG '/
00109       DATA             L(4)/' SROT '/
00110       DATA             L(5)/'SCOPY '/
00111       DATA             L(6)/'SSWAP '/
00112       DATA             L(7)/'SNRM2 '/
00113       DATA             L(8)/'SASUM '/
00114       DATA             L(9)/'SSCAL '/
00115       DATA             L(10)/'ISAMAX'/
00116       DATA             L(11)/'SROTMG'/
00117       DATA             L(12)/'SROTM '/
00118       DATA             L(13)/'SDSDOT'/
00119 *     .. Executable Statements ..
00120       WRITE (NOUT,99999) ICASE, L(ICASE)
00121       RETURN
00122 *
00123 99999 FORMAT (/' Test of subprogram number',I3,12X,A6)
00124       END
00125       SUBROUTINE CHECK0(SFAC)
00126 *     .. Parameters ..
00127       INTEGER           NOUT
00128       PARAMETER         (NOUT=6)
00129 *     .. Scalar Arguments ..
00130       REAL              SFAC
00131 *     .. Scalars in Common ..
00132       INTEGER           ICASE, INCX, INCY, N
00133       LOGICAL           PASS
00134 *     .. Local Scalars ..
00135       REAL              D12, SA, SB, SC, SS
00136       INTEGER           I, K
00137 *     .. Local Arrays ..
00138       REAL              DA1(8), DATRUE(8), DB1(8), DBTRUE(8), DC1(8),
00139      +                  DS1(8), DAB(4,9), DTEMP(9), DTRUE(9,9)
00140 *     .. External Subroutines ..
00141       EXTERNAL          SROTG, SROTMG, STEST1
00142 *     .. Common blocks ..
00143       COMMON            /COMBLA/ICASE, N, INCX, INCY, PASS
00144 *     .. Data statements ..
00145       DATA              DA1/0.3E0, 0.4E0, -0.3E0, -0.4E0, -0.3E0, 0.0E0,
00146      +                  0.0E0, 1.0E0/
00147       DATA              DB1/0.4E0, 0.3E0, 0.4E0, 0.3E0, -0.4E0, 0.0E0,
00148      +                  1.0E0, 0.0E0/
00149       DATA              DC1/0.6E0, 0.8E0, -0.6E0, 0.8E0, 0.6E0, 1.0E0,
00150      +                  0.0E0, 1.0E0/
00151       DATA              DS1/0.8E0, 0.6E0, 0.8E0, -0.6E0, 0.8E0, 0.0E0,
00152      +                  1.0E0, 0.0E0/
00153       DATA              DATRUE/0.5E0, 0.5E0, 0.5E0, -0.5E0, -0.5E0,
00154      +                  0.0E0, 1.0E0, 1.0E0/
00155       DATA              DBTRUE/0.0E0, 0.6E0, 0.0E0, -0.6E0, 0.0E0,
00156      +                  0.0E0, 1.0E0, 0.0E0/
00157 *     INPUT FOR MODIFIED GIVENS
00158       DATA DAB/ .1E0,.3E0,1.2E0,.2E0,
00159      A          .7E0, .2E0, .6E0, 4.2E0,
00160      B          0.E0,0.E0,0.E0,0.E0,
00161      C          4.E0, -1.E0, 2.E0, 4.E0,
00162      D          6.E-10, 2.E-2, 1.E5, 10.E0,
00163      E          4.E10, 2.E-2, 1.E-5, 10.E0,
00164      F          2.E-10, 4.E-2, 1.E5, 10.E0,
00165      G          2.E10, 4.E-2, 1.E-5, 10.E0,
00166      H          4.E0, -2.E0, 8.E0, 4.E0    /
00167 *    TRUE RESULTS FOR MODIFIED GIVENS
00168       DATA DTRUE/0.E0,0.E0, 1.3E0, .2E0, 0.E0,0.E0,0.E0, .5E0, 0.E0,
00169      A           0.E0,0.E0, 4.5E0, 4.2E0, 1.E0, .5E0, 0.E0,0.E0,0.E0,
00170      B           0.E0,0.E0,0.E0,0.E0, -2.E0, 0.E0,0.E0,0.E0,0.E0,
00171      C           0.E0,0.E0,0.E0, 4.E0, -1.E0, 0.E0,0.E0,0.E0,0.E0,
00172      D           0.E0, 15.E-3, 0.E0, 10.E0, -1.E0, 0.E0, -1.E-4,
00173      E           0.E0, 1.E0,
00174      F           0.E0,0.E0, 6144.E-5, 10.E0, -1.E0, 4096.E0, -1.E6,
00175      G           0.E0, 1.E0,
00176      H           0.E0,0.E0,15.E0,10.E0,-1.E0, 5.E-5, 0.E0,1.E0,0.E0,
00177      I           0.E0,0.E0, 15.E0, 10.E0, -1. E0, 5.E5, -4096.E0,
00178      J           1.E0, 4096.E-6,
00179      K           0.E0,0.E0, 7.E0, 4.E0, 0.E0,0.E0, -.5E0, -.25E0, 0.E0/
00180 *                   4096 = 2 ** 12
00181       DATA D12  /4096.E0/
00182       DTRUE(1,1) = 12.E0 / 130.E0
00183       DTRUE(2,1) = 36.E0 / 130.E0
00184       DTRUE(7,1) = -1.E0 / 6.E0
00185       DTRUE(1,2) = 14.E0 / 75.E0
00186       DTRUE(2,2) = 49.E0 / 75.E0
00187       DTRUE(9,2) = 1.E0 / 7.E0
00188       DTRUE(1,5) = 45.E-11 * (D12 * D12)
00189       DTRUE(3,5) = 4.E5 / (3.E0 * D12)
00190       DTRUE(6,5) = 1.E0 / D12
00191       DTRUE(8,5) = 1.E4 / (3.E0 * D12)
00192       DTRUE(1,6) = 4.E10 / (1.5E0 * D12 * D12)
00193       DTRUE(2,6) = 2.E-2 / 1.5E0
00194       DTRUE(8,6) = 5.E-7 * D12
00195       DTRUE(1,7) = 4.E0 / 150.E0
00196       DTRUE(2,7) = (2.E-10 / 1.5E0) * (D12 * D12)
00197       DTRUE(7,7) = -DTRUE(6,5)
00198       DTRUE(9,7) = 1.E4 / D12
00199       DTRUE(1,8) = DTRUE(1,7)
00200       DTRUE(2,8) = 2.E10 / (1.5E0 * D12 * D12)
00201       DTRUE(1,9) = 32.E0 / 7.E0
00202       DTRUE(2,9) = -16.E0 / 7.E0
00203 *     .. Executable Statements ..
00204 *
00205 *     Compute true values which cannot be prestored
00206 *     in decimal notation
00207 *
00208       DBTRUE(1) = 1.0E0/0.6E0
00209       DBTRUE(3) = -1.0E0/0.6E0
00210       DBTRUE(5) = 1.0E0/0.6E0
00211 *
00212       DO 20 K = 1, 8
00213 *        .. Set N=K for identification in output if any ..
00214          N = K
00215          IF (ICASE.EQ.3) THEN
00216 *           .. SROTG ..
00217             IF (K.GT.8) GO TO 40
00218             SA = DA1(K)
00219             SB = DB1(K)
00220             CALL SROTG(SA,SB,SC,SS)
00221             CALL STEST1(SA,DATRUE(K),DATRUE(K),SFAC)
00222             CALL STEST1(SB,DBTRUE(K),DBTRUE(K),SFAC)
00223             CALL STEST1(SC,DC1(K),DC1(K),SFAC)
00224             CALL STEST1(SS,DS1(K),DS1(K),SFAC)
00225          ELSEIF (ICASE.EQ.11) THEN
00226 *           .. SROTMG ..
00227             DO I=1,4
00228                DTEMP(I)= DAB(I,K)
00229                DTEMP(I+4) = 0.0
00230             END DO
00231             DTEMP(9) = 0.0
00232             CALL SROTMG(DTEMP(1),DTEMP(2),DTEMP(3),DTEMP(4),DTEMP(5))
00233             CALL STEST(9,DTEMP,DTRUE(1,K),DTRUE(1,K),SFAC)
00234          ELSE
00235             WRITE (NOUT,*) ' Shouldn''t be here in CHECK0'
00236             STOP
00237          END IF
00238    20 CONTINUE
00239    40 RETURN
00240       END
00241       SUBROUTINE CHECK1(SFAC)
00242 *     .. Parameters ..
00243       INTEGER           NOUT
00244       PARAMETER         (NOUT=6)
00245 *     .. Scalar Arguments ..
00246       REAL              SFAC
00247 *     .. Scalars in Common ..
00248       INTEGER           ICASE, INCX, INCY, N
00249       LOGICAL           PASS
00250 *     .. Local Scalars ..
00251       INTEGER           I, LEN, NP1
00252 *     .. Local Arrays ..
00253       REAL              DTRUE1(5), DTRUE3(5), DTRUE5(8,5,2), DV(8,5,2),
00254      +                  SA(10), STEMP(1), STRUE(8), SX(8)
00255       INTEGER           ITRUE2(5)
00256 *     .. External Functions ..
00257       REAL              SASUM, SNRM2
00258       INTEGER           ISAMAX
00259       EXTERNAL          SASUM, SNRM2, ISAMAX
00260 *     .. External Subroutines ..
00261       EXTERNAL          ITEST1, SSCAL, STEST, STEST1
00262 *     .. Intrinsic Functions ..
00263       INTRINSIC         MAX
00264 *     .. Common blocks ..
00265       COMMON            /COMBLA/ICASE, N, INCX, INCY, PASS
00266 *     .. Data statements ..
00267       DATA              SA/0.3E0, -1.0E0, 0.0E0, 1.0E0, 0.3E0, 0.3E0,
00268      +                  0.3E0, 0.3E0, 0.3E0, 0.3E0/
00269       DATA              DV/0.1E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0,
00270      +                  2.0E0, 2.0E0, 0.3E0, 3.0E0, 3.0E0, 3.0E0, 3.0E0,
00271      +                  3.0E0, 3.0E0, 3.0E0, 0.3E0, -0.4E0, 4.0E0,
00272      +                  4.0E0, 4.0E0, 4.0E0, 4.0E0, 4.0E0, 0.2E0,
00273      +                  -0.6E0, 0.3E0, 5.0E0, 5.0E0, 5.0E0, 5.0E0,
00274      +                  5.0E0, 0.1E0, -0.3E0, 0.5E0, -0.1E0, 6.0E0,
00275      +                  6.0E0, 6.0E0, 6.0E0, 0.1E0, 8.0E0, 8.0E0, 8.0E0,
00276      +                  8.0E0, 8.0E0, 8.0E0, 8.0E0, 0.3E0, 9.0E0, 9.0E0,
00277      +                  9.0E0, 9.0E0, 9.0E0, 9.0E0, 9.0E0, 0.3E0, 2.0E0,
00278      +                  -0.4E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0,
00279      +                  0.2E0, 3.0E0, -0.6E0, 5.0E0, 0.3E0, 2.0E0,
00280      +                  2.0E0, 2.0E0, 0.1E0, 4.0E0, -0.3E0, 6.0E0,
00281      +                  -0.5E0, 7.0E0, -0.1E0, 3.0E0/
00282       DATA              DTRUE1/0.0E0, 0.3E0, 0.5E0, 0.7E0, 0.6E0/
00283       DATA              DTRUE3/0.0E0, 0.3E0, 0.7E0, 1.1E0, 1.0E0/
00284       DATA              DTRUE5/0.10E0, 2.0E0, 2.0E0, 2.0E0, 2.0E0,
00285      +                  2.0E0, 2.0E0, 2.0E0, -0.3E0, 3.0E0, 3.0E0,
00286      +                  3.0E0, 3.0E0, 3.0E0, 3.0E0, 3.0E0, 0.0E0, 0.0E0,
00287      +                  4.0E0, 4.0E0, 4.0E0, 4.0E0, 4.0E0, 4.0E0,
00288      +                  0.20E0, -0.60E0, 0.30E0, 5.0E0, 5.0E0, 5.0E0,
00289      +                  5.0E0, 5.0E0, 0.03E0, -0.09E0, 0.15E0, -0.03E0,
00290      +                  6.0E0, 6.0E0, 6.0E0, 6.0E0, 0.10E0, 8.0E0,
00291      +                  8.0E0, 8.0E0, 8.0E0, 8.0E0, 8.0E0, 8.0E0,
00292      +                  0.09E0, 9.0E0, 9.0E0, 9.0E0, 9.0E0, 9.0E0,
00293      +                  9.0E0, 9.0E0, 0.09E0, 2.0E0, -0.12E0, 2.0E0,
00294      +                  2.0E0, 2.0E0, 2.0E0, 2.0E0, 0.06E0, 3.0E0,
00295      +                  -0.18E0, 5.0E0, 0.09E0, 2.0E0, 2.0E0, 2.0E0,
00296      +                  0.03E0, 4.0E0, -0.09E0, 6.0E0, -0.15E0, 7.0E0,
00297      +                  -0.03E0, 3.0E0/
00298       DATA              ITRUE2/0, 1, 2, 2, 3/
00299 *     .. Executable Statements ..
00300       DO 80 INCX = 1, 2
00301          DO 60 NP1 = 1, 5
00302             N = NP1 - 1
00303             LEN = 2*MAX(N,1)
00304 *           .. Set vector arguments ..
00305             DO 20 I = 1, LEN
00306                SX(I) = DV(I,NP1,INCX)
00307    20       CONTINUE
00308 *
00309             IF (ICASE.EQ.7) THEN
00310 *              .. SNRM2 ..
00311                STEMP(1) = DTRUE1(NP1)
00312                CALL STEST1(SNRM2(N,SX,INCX),STEMP(1),STEMP,SFAC)
00313             ELSE IF (ICASE.EQ.8) THEN
00314 *              .. SASUM ..
00315                STEMP(1) = DTRUE3(NP1)
00316                CALL STEST1(SASUM(N,SX,INCX),STEMP(1),STEMP,SFAC)
00317             ELSE IF (ICASE.EQ.9) THEN
00318 *              .. SSCAL ..
00319                CALL SSCAL(N,SA((INCX-1)*5+NP1),SX,INCX)
00320                DO 40 I = 1, LEN
00321                   STRUE(I) = DTRUE5(I,NP1,INCX)
00322    40          CONTINUE
00323                CALL STEST(LEN,SX,STRUE,STRUE,SFAC)
00324             ELSE IF (ICASE.EQ.10) THEN
00325 *              .. ISAMAX ..
00326                CALL ITEST1(ISAMAX(N,SX,INCX),ITRUE2(NP1))
00327             ELSE
00328                WRITE (NOUT,*) ' Shouldn''t be here in CHECK1'
00329                STOP
00330             END IF
00331    60    CONTINUE
00332    80 CONTINUE
00333       RETURN
00334       END
00335       SUBROUTINE CHECK2(SFAC)
00336 *     .. Parameters ..
00337       INTEGER           NOUT
00338       PARAMETER         (NOUT=6)
00339 *     .. Scalar Arguments ..
00340       REAL              SFAC
00341 *     .. Scalars in Common ..
00342       INTEGER           ICASE, INCX, INCY, N
00343       LOGICAL           PASS
00344 *     .. Local Scalars ..
00345       REAL              SA
00346       INTEGER           I, J, KI, KN, KNI, KPAR, KSIZE, LENX, LENY,
00347      $                  MX, MY 
00348 *     .. Local Arrays ..
00349       REAL              DT10X(7,4,4), DT10Y(7,4,4), DT7(4,4),
00350      $                  DT8(7,4,4), DX1(7),
00351      $                  DY1(7), SSIZE1(4), SSIZE2(14,2), SSIZE3(4),
00352      $                  SSIZE(7), STX(7), STY(7), SX(7), SY(7),
00353      $                  DPAR(5,4), DT19X(7,4,16),DT19XA(7,4,4),
00354      $                  DT19XB(7,4,4), DT19XC(7,4,4),DT19XD(7,4,4),
00355      $                  DT19Y(7,4,16), DT19YA(7,4,4),DT19YB(7,4,4),
00356      $                  DT19YC(7,4,4), DT19YD(7,4,4), DTEMP(5),
00357      $                  ST7B(4,4)
00358       INTEGER           INCXS(4), INCYS(4), LENS(4,2), NS(4)
00359 *     .. External Functions ..
00360       REAL              SDOT, SDSDOT
00361       EXTERNAL          SDOT, SDSDOT
00362 *     .. External Subroutines ..
00363       EXTERNAL          SAXPY, SCOPY, SROTM, SSWAP, STEST, STEST1
00364 *     .. Intrinsic Functions ..
00365       INTRINSIC         ABS, MIN
00366 *     .. Common blocks ..
00367       COMMON            /COMBLA/ICASE, N, INCX, INCY, PASS
00368 *     .. Data statements ..
00369       EQUIVALENCE (DT19X(1,1,1),DT19XA(1,1,1)),(DT19X(1,1,5),
00370      A   DT19XB(1,1,1)),(DT19X(1,1,9),DT19XC(1,1,1)),
00371      B   (DT19X(1,1,13),DT19XD(1,1,1))
00372       EQUIVALENCE (DT19Y(1,1,1),DT19YA(1,1,1)),(DT19Y(1,1,5),
00373      A   DT19YB(1,1,1)),(DT19Y(1,1,9),DT19YC(1,1,1)),
00374      B   (DT19Y(1,1,13),DT19YD(1,1,1))
00375 
00376       DATA              SA/0.3E0/
00377       DATA              INCXS/1, 2, -2, -1/
00378       DATA              INCYS/1, -2, 1, -2/
00379       DATA              LENS/1, 1, 2, 4, 1, 1, 3, 7/
00380       DATA              NS/0, 1, 2, 4/
00381       DATA              DX1/0.6E0, 0.1E0, -0.5E0, 0.8E0, 0.9E0, -0.3E0,
00382      +                  -0.4E0/
00383       DATA              DY1/0.5E0, -0.9E0, 0.3E0, 0.7E0, -0.6E0, 0.2E0,
00384      +                  0.8E0/
00385       DATA              DT7/0.0E0, 0.30E0, 0.21E0, 0.62E0, 0.0E0,
00386      +                  0.30E0, -0.07E0, 0.85E0, 0.0E0, 0.30E0, -0.79E0,
00387      +                  -0.74E0, 0.0E0, 0.30E0, 0.33E0, 1.27E0/
00388       DATA              ST7B/ .1, .4, .31, .72,     .1, .4, .03, .95,
00389      +                  .1, .4, -.69, -.64,   .1, .4, .43, 1.37/
00390       DATA              DT8/0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00391      +                  0.0E0, 0.68E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00392      +                  0.0E0, 0.0E0, 0.68E0, -0.87E0, 0.0E0, 0.0E0,
00393      +                  0.0E0, 0.0E0, 0.0E0, 0.68E0, -0.87E0, 0.15E0,
00394      +                  0.94E0, 0.0E0, 0.0E0, 0.0E0, 0.5E0, 0.0E0,
00395      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.68E0,
00396      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00397      +                  0.35E0, -0.9E0, 0.48E0, 0.0E0, 0.0E0, 0.0E0,
00398      +                  0.0E0, 0.38E0, -0.9E0, 0.57E0, 0.7E0, -0.75E0,
00399      +                  0.2E0, 0.98E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0,
00400      +                  0.0E0, 0.0E0, 0.0E0, 0.68E0, 0.0E0, 0.0E0,
00401      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.35E0, -0.72E0,
00402      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.38E0,
00403      +                  -0.63E0, 0.15E0, 0.88E0, 0.0E0, 0.0E0, 0.0E0,
00404      +                  0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00405      +                  0.68E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00406      +                  0.0E0, 0.68E0, -0.9E0, 0.33E0, 0.0E0, 0.0E0,
00407      +                  0.0E0, 0.0E0, 0.68E0, -0.9E0, 0.33E0, 0.7E0,
00408      +                  -0.75E0, 0.2E0, 1.04E0/
00409       DATA              DT10X/0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00410      +                  0.0E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00411      +                  0.0E0, 0.5E0, -0.9E0, 0.0E0, 0.0E0, 0.0E0,
00412      +                  0.0E0, 0.0E0, 0.5E0, -0.9E0, 0.3E0, 0.7E0,
00413      +                  0.0E0, 0.0E0, 0.0E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0,
00414      +                  0.0E0, 0.0E0, 0.0E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0,
00415      +                  0.0E0, 0.0E0, 0.0E0, 0.3E0, 0.1E0, 0.5E0, 0.0E0,
00416      +                  0.0E0, 0.0E0, 0.0E0, 0.8E0, 0.1E0, -0.6E0,
00417      +                  0.8E0, 0.3E0, -0.3E0, 0.5E0, 0.6E0, 0.0E0,
00418      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.5E0, 0.0E0,
00419      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, -0.9E0,
00420      +                  0.1E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.7E0,
00421      +                  0.1E0, 0.3E0, 0.8E0, -0.9E0, -0.3E0, 0.5E0,
00422      +                  0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00423      +                  0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00424      +                  0.5E0, 0.3E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00425      +                  0.5E0, 0.3E0, -0.6E0, 0.8E0, 0.0E0, 0.0E0,
00426      +                  0.0E0/
00427       DATA              DT10Y/0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00428      +                  0.0E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00429      +                  0.0E0, 0.6E0, 0.1E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00430      +                  0.0E0, 0.6E0, 0.1E0, -0.5E0, 0.8E0, 0.0E0,
00431      +                  0.0E0, 0.0E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00432      +                  0.0E0, 0.0E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00433      +                  0.0E0, 0.0E0, -0.5E0, -0.9E0, 0.6E0, 0.0E0,
00434      +                  0.0E0, 0.0E0, 0.0E0, -0.4E0, -0.9E0, 0.9E0,
00435      +                  0.7E0, -0.5E0, 0.2E0, 0.6E0, 0.5E0, 0.0E0,
00436      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.6E0, 0.0E0,
00437      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, -0.5E0,
00438      +                  0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00439      +                  -0.4E0, 0.9E0, -0.5E0, 0.6E0, 0.0E0, 0.0E0,
00440      +                  0.0E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00441      +                  0.0E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00442      +                  0.0E0, 0.6E0, -0.9E0, 0.1E0, 0.0E0, 0.0E0,
00443      +                  0.0E0, 0.0E0, 0.6E0, -0.9E0, 0.1E0, 0.7E0,
00444      +                  -0.5E0, 0.2E0, 0.8E0/
00445       DATA              SSIZE1/0.0E0, 0.3E0, 1.6E0, 3.2E0/
00446       DATA              SSIZE2/0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00447      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00448      +                  0.0E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0,
00449      +                  1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0,
00450      +                  1.17E0, 1.17E0, 1.17E0/
00451       DATA              SSIZE3/ .1, .4, 1.7, 3.3 /
00452 *
00453 *                         FOR DROTM
00454 *
00455       DATA DPAR/-2.E0,  0.E0,0.E0,0.E0,0.E0,
00456      A          -1.E0,  2.E0, -3.E0, -4.E0,  5.E0,
00457      B           0.E0,  0.E0,  2.E0, -3.E0,  0.E0,
00458      C           1.E0,  5.E0,  2.E0,  0.E0, -4.E0/
00459 *                        TRUE X RESULTS F0R ROTATIONS DROTM
00460       DATA DT19XA/.6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00461      A            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00462      B            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00463      C            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00464      D            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00465      E           -.8E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00466      F           -.9E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00467      G           3.5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00468      H            .6E0,   .1E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00469      I           -.8E0,  3.8E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00470      J           -.9E0,  2.8E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00471      K           3.5E0,  -.4E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00472      L            .6E0,   .1E0,  -.5E0,   .8E0,          0.E0,0.E0,0.E0,
00473      M           -.8E0,  3.8E0, -2.2E0, -1.2E0,          0.E0,0.E0,0.E0,
00474      N           -.9E0,  2.8E0, -1.4E0, -1.3E0,          0.E0,0.E0,0.E0,
00475      O           3.5E0,  -.4E0, -2.2E0,  4.7E0,          0.E0,0.E0,0.E0/
00476 *
00477       DATA DT19XB/.6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00478      A            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00479      B            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00480      C            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00481      D            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00482      E           -.8E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00483      F           -.9E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00484      G           3.5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00485      H            .6E0,   .1E0,  -.5E0,             0.E0,0.E0,0.E0,0.E0,
00486      I           0.E0,    .1E0, -3.0E0,             0.E0,0.E0,0.E0,0.E0,
00487      J           -.3E0,   .1E0, -2.0E0,             0.E0,0.E0,0.E0,0.E0,
00488      K           3.3E0,   .1E0, -2.0E0,             0.E0,0.E0,0.E0,0.E0,
00489      L            .6E0,   .1E0,  -.5E0,   .8E0,   .9E0,  -.3E0,  -.4E0,
00490      M          -2.0E0,   .1E0,  1.4E0,   .8E0,   .6E0,  -.3E0, -2.8E0,
00491      N          -1.8E0,   .1E0,  1.3E0,   .8E0,  0.E0,   -.3E0, -1.9E0,
00492      O           3.8E0,   .1E0, -3.1E0,   .8E0,  4.8E0,  -.3E0, -1.5E0 /
00493 *
00494       DATA DT19XC/.6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00495      A            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00496      B            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00497      C            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00498      D            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00499      E           -.8E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00500      F           -.9E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00501      G           3.5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00502      H            .6E0,   .1E0,  -.5E0,             0.E0,0.E0,0.E0,0.E0,
00503      I           4.8E0,   .1E0, -3.0E0,             0.E0,0.E0,0.E0,0.E0,
00504      J           3.3E0,   .1E0, -2.0E0,             0.E0,0.E0,0.E0,0.E0,
00505      K           2.1E0,   .1E0, -2.0E0,             0.E0,0.E0,0.E0,0.E0,
00506      L            .6E0,   .1E0,  -.5E0,   .8E0,   .9E0,  -.3E0,  -.4E0,
00507      M          -1.6E0,   .1E0, -2.2E0,   .8E0,  5.4E0,  -.3E0, -2.8E0,
00508      N          -1.5E0,   .1E0, -1.4E0,   .8E0,  3.6E0,  -.3E0, -1.9E0,
00509      O           3.7E0,   .1E0, -2.2E0,   .8E0,  3.6E0,  -.3E0, -1.5E0 /
00510 *
00511       DATA DT19XD/.6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00512      A            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00513      B            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00514      C            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00515      D            .6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00516      E           -.8E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00517      F           -.9E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00518      G           3.5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00519      H            .6E0,   .1E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00520      I           -.8E0, -1.0E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00521      J           -.9E0,  -.8E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00522      K           3.5E0,   .8E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00523      L            .6E0,   .1E0,  -.5E0,   .8E0,          0.E0,0.E0,0.E0,
00524      M           -.8E0, -1.0E0,  1.4E0, -1.6E0,          0.E0,0.E0,0.E0,
00525      N           -.9E0,  -.8E0,  1.3E0, -1.6E0,          0.E0,0.E0,0.E0,
00526      O           3.5E0,   .8E0, -3.1E0,  4.8E0,          0.E0,0.E0,0.E0/
00527 *                        TRUE Y RESULTS FOR ROTATIONS DROTM
00528       DATA DT19YA/.5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00529      A            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00530      B            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00531      C            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00532      D            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00533      E            .7E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00534      F           1.7E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00535      G          -2.6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00536      H            .5E0,  -.9E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00537      I            .7E0, -4.8E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00538      J           1.7E0,  -.7E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00539      K          -2.6E0,  3.5E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00540      L            .5E0,  -.9E0,   .3E0,   .7E0,          0.E0,0.E0,0.E0,
00541      M            .7E0, -4.8E0,  3.0E0,  1.1E0,          0.E0,0.E0,0.E0,
00542      N           1.7E0,  -.7E0,  -.7E0,  2.3E0,          0.E0,0.E0,0.E0,
00543      O          -2.6E0,  3.5E0,  -.7E0, -3.6E0,          0.E0,0.E0,0.E0/
00544 *
00545       DATA DT19YB/.5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00546      A            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00547      B            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00548      C            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00549      D            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00550      E            .7E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00551      F           1.7E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00552      G          -2.6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00553      H            .5E0,  -.9E0,   .3E0,             0.E0,0.E0,0.E0,0.E0,
00554      I           4.0E0,  -.9E0,  -.3E0,             0.E0,0.E0,0.E0,0.E0,
00555      J           -.5E0,  -.9E0,  1.5E0,             0.E0,0.E0,0.E0,0.E0,
00556      K          -1.5E0,  -.9E0, -1.8E0,             0.E0,0.E0,0.E0,0.E0,
00557      L            .5E0,  -.9E0,   .3E0,   .7E0,  -.6E0,   .2E0,   .8E0,
00558      M           3.7E0,  -.9E0, -1.2E0,   .7E0, -1.5E0,   .2E0,  2.2E0,
00559      N           -.3E0,  -.9E0,  2.1E0,   .7E0, -1.6E0,   .2E0,  2.0E0,
00560      O          -1.6E0,  -.9E0, -2.1E0,   .7E0,  2.9E0,   .2E0, -3.8E0 /
00561 *
00562       DATA DT19YC/.5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00563      A            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00564      B            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00565      C            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00566      D            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00567      E            .7E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00568      F           1.7E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00569      G          -2.6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00570      H            .5E0,  -.9E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00571      I           4.0E0, -6.3E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00572      J           -.5E0,   .3E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00573      K          -1.5E0,  3.0E0,             0.E0,0.E0,0.E0,0.E0,0.E0,
00574      L            .5E0,  -.9E0,   .3E0,   .7E0,          0.E0,0.E0,0.E0,
00575      M           3.7E0, -7.2E0,  3.0E0,  1.7E0,          0.E0,0.E0,0.E0,
00576      N           -.3E0,   .9E0,  -.7E0,  1.9E0,          0.E0,0.E0,0.E0,
00577      O          -1.6E0,  2.7E0,  -.7E0, -3.4E0,          0.E0,0.E0,0.E0/
00578 *
00579       DATA DT19YD/.5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00580      A            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00581      B            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00582      C            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00583      D            .5E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00584      E            .7E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00585      F           1.7E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00586      G          -2.6E0,                  0.E0,0.E0,0.E0,0.E0,0.E0,0.E0,
00587      H            .5E0,  -.9E0,   .3E0,             0.E0,0.E0,0.E0,0.E0,
00588      I            .7E0,  -.9E0,  1.2E0,             0.E0,0.E0,0.E0,0.E0,
00589      J           1.7E0,  -.9E0,   .5E0,             0.E0,0.E0,0.E0,0.E0,
00590      K          -2.6E0,  -.9E0, -1.3E0,             0.E0,0.E0,0.E0,0.E0,
00591      L            .5E0,  -.9E0,   .3E0,   .7E0,  -.6E0,   .2E0,   .8E0,
00592      M            .7E0,  -.9E0,  1.2E0,   .7E0, -1.5E0,   .2E0,  1.6E0,
00593      N           1.7E0,  -.9E0,   .5E0,   .7E0, -1.6E0,   .2E0,  2.4E0,
00594      O          -2.6E0,  -.9E0, -1.3E0,   .7E0,  2.9E0,   .2E0, -4.0E0 /
00595 *
00596 *     .. Executable Statements ..
00597 *
00598       DO 120 KI = 1, 4
00599          INCX = INCXS(KI)
00600          INCY = INCYS(KI)
00601          MX = ABS(INCX)
00602          MY = ABS(INCY)
00603 *
00604          DO 100 KN = 1, 4
00605             N = NS(KN)
00606             KSIZE = MIN(2,KN)
00607             LENX = LENS(KN,MX)
00608             LENY = LENS(KN,MY)
00609 *           .. Initialize all argument arrays ..
00610             DO 20 I = 1, 7
00611                SX(I) = DX1(I)
00612                SY(I) = DY1(I)
00613    20       CONTINUE
00614 *
00615             IF (ICASE.EQ.1) THEN
00616 *              .. SDOT ..
00617                CALL STEST1(SDOT(N,SX,INCX,SY,INCY),DT7(KN,KI),SSIZE1(KN)
00618      +                     ,SFAC)
00619             ELSE IF (ICASE.EQ.2) THEN
00620 *              .. SAXPY ..
00621                CALL SAXPY(N,SA,SX,INCX,SY,INCY)
00622                DO 40 J = 1, LENY
00623                   STY(J) = DT8(J,KN,KI)
00624    40          CONTINUE
00625                CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC)
00626             ELSE IF (ICASE.EQ.5) THEN
00627 *              .. SCOPY ..
00628                DO 60 I = 1, 7
00629                   STY(I) = DT10Y(I,KN,KI)
00630    60          CONTINUE
00631                CALL SCOPY(N,SX,INCX,SY,INCY)
00632                CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.0E0)
00633             ELSE IF (ICASE.EQ.6) THEN
00634 *              .. SSWAP ..
00635                CALL SSWAP(N,SX,INCX,SY,INCY)
00636                DO 80 I = 1, 7
00637                   STX(I) = DT10X(I,KN,KI)
00638                   STY(I) = DT10Y(I,KN,KI)
00639    80          CONTINUE
00640                CALL STEST(LENX,SX,STX,SSIZE2(1,1),1.0E0)
00641                CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.0E0)
00642             ELSEIF (ICASE.EQ.12) THEN
00643 *              .. SROTM ..
00644                KNI=KN+4*(KI-1)
00645                DO KPAR=1,4
00646                   DO I=1,7
00647                      SX(I) = DX1(I)
00648                      SY(I) = DY1(I)
00649                      STX(I)= DT19X(I,KPAR,KNI)
00650                      STY(I)= DT19Y(I,KPAR,KNI)
00651                   END DO
00652 *
00653                   DO I=1,5
00654                      DTEMP(I) = DPAR(I,KPAR)
00655                   END DO
00656 *
00657                   DO  I=1,LENX
00658                      SSIZE(I)=STX(I)
00659                   END DO
00660 *                   SEE REMARK ABOVE ABOUT DT11X(1,2,7)
00661 *                       AND DT11X(5,3,8).
00662                   IF ((KPAR .EQ. 2) .AND. (KNI .EQ. 7))
00663      $               SSIZE(1) = 2.4E0
00664                   IF ((KPAR .EQ. 3) .AND. (KNI .EQ. 8))
00665      $               SSIZE(5) = 1.8E0
00666 *
00667                   CALL   SROTM(N,SX,INCX,SY,INCY,DTEMP)
00668                   CALL   STEST(LENX,SX,STX,SSIZE,SFAC)
00669                   CALL   STEST(LENY,SY,STY,STY,SFAC)
00670                END DO
00671             ELSEIF (ICASE.EQ.13) THEN
00672 *              .. SDSROT ..
00673                CALL STEST1 (SDSDOT(N,.1,SX,INCX,SY,INCY),
00674      $                 ST7B(KN,KI),SSIZE3(KN),SFAC)
00675             ELSE
00676                WRITE (NOUT,*) ' Shouldn''t be here in CHECK2'
00677                STOP
00678             END IF
00679   100    CONTINUE
00680   120 CONTINUE
00681       RETURN
00682       END
00683       SUBROUTINE CHECK3(SFAC)
00684 *     .. Parameters ..
00685       INTEGER           NOUT
00686       PARAMETER         (NOUT=6)
00687 *     .. Scalar Arguments ..
00688       REAL              SFAC
00689 *     .. Scalars in Common ..
00690       INTEGER           ICASE, INCX, INCY, N
00691       LOGICAL           PASS
00692 *     .. Local Scalars ..
00693       REAL              SC, SS
00694       INTEGER           I, K, KI, KN, KSIZE, LENX, LENY, MX, MY
00695 *     .. Local Arrays ..
00696       REAL              COPYX(5), COPYY(5), DT9X(7,4,4), DT9Y(7,4,4),
00697      +                  DX1(7), DY1(7), MWPC(11), MWPS(11), MWPSTX(5),
00698      +                  MWPSTY(5), MWPTX(11,5), MWPTY(11,5), MWPX(5),
00699      +                  MWPY(5), SSIZE2(14,2), STX(7), STY(7), SX(7),
00700      +                  SY(7)
00701       INTEGER           INCXS(4), INCYS(4), LENS(4,2), MWPINX(11),
00702      +                  MWPINY(11), MWPN(11), NS(4)
00703 *     .. External Subroutines ..
00704       EXTERNAL          SROT, STEST
00705 *     .. Intrinsic Functions ..
00706       INTRINSIC         ABS, MIN
00707 *     .. Common blocks ..
00708       COMMON            /COMBLA/ICASE, N, INCX, INCY, PASS
00709 *     .. Data statements ..
00710       DATA              INCXS/1, 2, -2, -1/
00711       DATA              INCYS/1, -2, 1, -2/
00712       DATA              LENS/1, 1, 2, 4, 1, 1, 3, 7/
00713       DATA              NS/0, 1, 2, 4/
00714       DATA              DX1/0.6E0, 0.1E0, -0.5E0, 0.8E0, 0.9E0, -0.3E0,
00715      +                  -0.4E0/
00716       DATA              DY1/0.5E0, -0.9E0, 0.3E0, 0.7E0, -0.6E0, 0.2E0,
00717      +                  0.8E0/
00718       DATA              SC, SS/0.8E0, 0.6E0/
00719       DATA              DT9X/0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00720      +                  0.0E0, 0.78E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00721      +                  0.0E0, 0.0E0, 0.78E0, -0.46E0, 0.0E0, 0.0E0,
00722      +                  0.0E0, 0.0E0, 0.0E0, 0.78E0, -0.46E0, -0.22E0,
00723      +                  1.06E0, 0.0E0, 0.0E0, 0.0E0, 0.6E0, 0.0E0,
00724      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.78E0,
00725      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00726      +                  0.66E0, 0.1E0, -0.1E0, 0.0E0, 0.0E0, 0.0E0,
00727      +                  0.0E0, 0.96E0, 0.1E0, -0.76E0, 0.8E0, 0.90E0,
00728      +                  -0.3E0, -0.02E0, 0.6E0, 0.0E0, 0.0E0, 0.0E0,
00729      +                  0.0E0, 0.0E0, 0.0E0, 0.78E0, 0.0E0, 0.0E0,
00730      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, -0.06E0, 0.1E0,
00731      +                  -0.1E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.90E0,
00732      +                  0.1E0, -0.22E0, 0.8E0, 0.18E0, -0.3E0, -0.02E0,
00733      +                  0.6E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00734      +                  0.78E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00735      +                  0.0E0, 0.78E0, 0.26E0, 0.0E0, 0.0E0, 0.0E0,
00736      +                  0.0E0, 0.0E0, 0.78E0, 0.26E0, -0.76E0, 1.12E0,
00737      +                  0.0E0, 0.0E0, 0.0E0/
00738       DATA              DT9Y/0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00739      +                  0.0E0, 0.04E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00740      +                  0.0E0, 0.0E0, 0.04E0, -0.78E0, 0.0E0, 0.0E0,
00741      +                  0.0E0, 0.0E0, 0.0E0, 0.04E0, -0.78E0, 0.54E0,
00742      +                  0.08E0, 0.0E0, 0.0E0, 0.0E0, 0.5E0, 0.0E0,
00743      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.04E0,
00744      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.7E0,
00745      +                  -0.9E0, -0.12E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00746      +                  0.64E0, -0.9E0, -0.30E0, 0.7E0, -0.18E0, 0.2E0,
00747      +                  0.28E0, 0.5E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00748      +                  0.0E0, 0.0E0, 0.04E0, 0.0E0, 0.0E0, 0.0E0,
00749      +                  0.0E0, 0.0E0, 0.0E0, 0.7E0, -1.08E0, 0.0E0,
00750      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.64E0, -1.26E0,
00751      +                  0.54E0, 0.20E0, 0.0E0, 0.0E0, 0.0E0, 0.5E0,
00752      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00753      +                  0.04E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00754      +                  0.0E0, 0.04E0, -0.9E0, 0.18E0, 0.0E0, 0.0E0,
00755      +                  0.0E0, 0.0E0, 0.04E0, -0.9E0, 0.18E0, 0.7E0,
00756      +                  -0.18E0, 0.2E0, 0.16E0/
00757       DATA              SSIZE2/0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00758      +                  0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0, 0.0E0,
00759      +                  0.0E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0,
00760      +                  1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0, 1.17E0,
00761      +                  1.17E0, 1.17E0, 1.17E0/
00762 *     .. Executable Statements ..
00763 *
00764       DO 60 KI = 1, 4
00765          INCX = INCXS(KI)
00766          INCY = INCYS(KI)
00767          MX = ABS(INCX)
00768          MY = ABS(INCY)
00769 *
00770          DO 40 KN = 1, 4
00771             N = NS(KN)
00772             KSIZE = MIN(2,KN)
00773             LENX = LENS(KN,MX)
00774             LENY = LENS(KN,MY)
00775 *
00776             IF (ICASE.EQ.4) THEN
00777 *              .. SROT ..
00778                DO 20 I = 1, 7
00779                   SX(I) = DX1(I)
00780                   SY(I) = DY1(I)
00781                   STX(I) = DT9X(I,KN,KI)
00782                   STY(I) = DT9Y(I,KN,KI)
00783    20          CONTINUE
00784                CALL SROT(N,SX,INCX,SY,INCY,SC,SS)
00785                CALL STEST(LENX,SX,STX,SSIZE2(1,KSIZE),SFAC)
00786                CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC)
00787             ELSE
00788                WRITE (NOUT,*) ' Shouldn''t be here in CHECK3'
00789                STOP
00790             END IF
00791    40    CONTINUE
00792    60 CONTINUE
00793 *
00794       MWPC(1) = 1
00795       DO 80 I = 2, 11
00796          MWPC(I) = 0
00797    80 CONTINUE
00798       MWPS(1) = 0
00799       DO 100 I = 2, 6
00800          MWPS(I) = 1
00801   100 CONTINUE
00802       DO 120 I = 7, 11
00803          MWPS(I) = -1
00804   120 CONTINUE
00805       MWPINX(1) = 1
00806       MWPINX(2) = 1
00807       MWPINX(3) = 1
00808       MWPINX(4) = -1
00809       MWPINX(5) = 1
00810       MWPINX(6) = -1
00811       MWPINX(7) = 1
00812       MWPINX(8) = 1
00813       MWPINX(9) = -1
00814       MWPINX(10) = 1
00815       MWPINX(11) = -1
00816       MWPINY(1) = 1
00817       MWPINY(2) = 1
00818       MWPINY(3) = -1
00819       MWPINY(4) = -1
00820       MWPINY(5) = 2
00821       MWPINY(6) = 1
00822       MWPINY(7) = 1
00823       MWPINY(8) = -1
00824       MWPINY(9) = -1
00825       MWPINY(10) = 2
00826       MWPINY(11) = 1
00827       DO 140 I = 1, 11
00828          MWPN(I) = 5
00829   140 CONTINUE
00830       MWPN(5) = 3
00831       MWPN(10) = 3
00832       DO 160 I = 1, 5
00833          MWPX(I) = I
00834          MWPY(I) = I
00835          MWPTX(1,I) = I
00836          MWPTY(1,I) = I
00837          MWPTX(2,I) = I
00838          MWPTY(2,I) = -I
00839          MWPTX(3,I) = 6 - I
00840          MWPTY(3,I) = I - 6
00841          MWPTX(4,I) = I
00842          MWPTY(4,I) = -I
00843          MWPTX(6,I) = 6 - I
00844          MWPTY(6,I) = I - 6
00845          MWPTX(7,I) = -I
00846          MWPTY(7,I) = I
00847          MWPTX(8,I) = I - 6
00848          MWPTY(8,I) = 6 - I
00849          MWPTX(9,I) = -I
00850          MWPTY(9,I) = I
00851          MWPTX(11,I) = I - 6
00852          MWPTY(11,I) = 6 - I
00853   160 CONTINUE
00854       MWPTX(5,1) = 1
00855       MWPTX(5,2) = 3
00856       MWPTX(5,3) = 5
00857       MWPTX(5,4) = 4
00858       MWPTX(5,5) = 5
00859       MWPTY(5,1) = -1
00860       MWPTY(5,2) = 2
00861       MWPTY(5,3) = -2
00862       MWPTY(5,4) = 4
00863       MWPTY(5,5) = -3
00864       MWPTX(10,1) = -1
00865       MWPTX(10,2) = -3
00866       MWPTX(10,3) = -5
00867       MWPTX(10,4) = 4
00868       MWPTX(10,5) = 5
00869       MWPTY(10,1) = 1
00870       MWPTY(10,2) = 2
00871       MWPTY(10,3) = 2
00872       MWPTY(10,4) = 4
00873       MWPTY(10,5) = 3
00874       DO 200 I = 1, 11
00875          INCX = MWPINX(I)
00876          INCY = MWPINY(I)
00877          DO 180 K = 1, 5
00878             COPYX(K) = MWPX(K)
00879             COPYY(K) = MWPY(K)
00880             MWPSTX(K) = MWPTX(I,K)
00881             MWPSTY(K) = MWPTY(I,K)
00882   180    CONTINUE
00883          CALL SROT(MWPN(I),COPYX,INCX,COPYY,INCY,MWPC(I),MWPS(I))
00884          CALL STEST(5,COPYX,MWPSTX,MWPSTX,SFAC)
00885          CALL STEST(5,COPYY,MWPSTY,MWPSTY,SFAC)
00886   200 CONTINUE
00887       RETURN
00888       END
00889       SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC)
00890 *     ********************************* STEST **************************
00891 *
00892 *     THIS SUBR COMPARES ARRAYS  SCOMP() AND STRUE() OF LENGTH LEN TO
00893 *     SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE
00894 *     NEGLIGIBLE.
00895 *
00896 *     C. L. LAWSON, JPL, 1974 DEC 10
00897 *
00898 *     .. Parameters ..
00899       INTEGER          NOUT
00900       PARAMETER        (NOUT=6)
00901 *     .. Scalar Arguments ..
00902       REAL             SFAC
00903       INTEGER          LEN
00904 *     .. Array Arguments ..
00905       REAL             SCOMP(LEN), SSIZE(LEN), STRUE(LEN)
00906 *     .. Scalars in Common ..
00907       INTEGER          ICASE, INCX, INCY, N
00908       LOGICAL          PASS
00909 *     .. Local Scalars ..
00910       REAL             SD
00911       INTEGER          I
00912 *     .. External Functions ..
00913       REAL             SDIFF
00914       EXTERNAL         SDIFF
00915 *     .. Intrinsic Functions ..
00916       INTRINSIC        ABS
00917 *     .. Common blocks ..
00918       COMMON           /COMBLA/ICASE, N, INCX, INCY, PASS
00919 *     .. Executable Statements ..
00920 *
00921       DO 40 I = 1, LEN
00922          SD = SCOMP(I) - STRUE(I)
00923          IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0E0)
00924      +       GO TO 40
00925 *
00926 *                             HERE    SCOMP(I) IS NOT CLOSE TO STRUE(I).
00927 *
00928          IF ( .NOT. PASS) GO TO 20
00929 *                             PRINT FAIL MESSAGE AND HEADER.
00930          PASS = .FALSE.
00931          WRITE (NOUT,99999)
00932          WRITE (NOUT,99998)
00933    20    WRITE (NOUT,99997) ICASE, N, INCX, INCY, I, SCOMP(I),
00934      +     STRUE(I), SD, SSIZE(I)
00935    40 CONTINUE
00936       RETURN
00937 *
00938 99999 FORMAT ('                                       FAIL')
00939 99998 FORMAT (/' CASE  N INCX INCY  I                            ',
00940      +       ' COMP(I)                             TRUE(I)  DIFFERENCE',
00941      +       '     SIZE(I)',/1X)
00942 99997 FORMAT (1X,I4,I3,2I5,I3,2E36.8,2E12.4)
00943       END
00944       SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC)
00945 *     ************************* STEST1 *****************************
00946 *
00947 *     THIS IS AN INTERFACE SUBROUTINE TO ACCOMODATE THE FORTRAN
00948 *     REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE
00949 *     ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT.
00950 *
00951 *     C.L. LAWSON, JPL, 1978 DEC 6
00952 *
00953 *     .. Scalar Arguments ..
00954       REAL              SCOMP1, SFAC, STRUE1
00955 *     .. Array Arguments ..
00956       REAL              SSIZE(*)
00957 *     .. Local Arrays ..
00958       REAL              SCOMP(1), STRUE(1)
00959 *     .. External Subroutines ..
00960       EXTERNAL          STEST
00961 *     .. Executable Statements ..
00962 *
00963       SCOMP(1) = SCOMP1
00964       STRUE(1) = STRUE1
00965       CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC)
00966 *
00967       RETURN
00968       END
00969       REAL             FUNCTION SDIFF(SA,SB)
00970 *     ********************************* SDIFF **************************
00971 *     COMPUTES DIFFERENCE OF TWO NUMBERS.  C. L. LAWSON, JPL 1974 FEB 15
00972 *
00973 *     .. Scalar Arguments ..
00974       REAL                            SA, SB
00975 *     .. Executable Statements ..
00976       SDIFF = SA - SB
00977       RETURN
00978       END
00979       SUBROUTINE ITEST1(ICOMP,ITRUE)
00980 *     ********************************* ITEST1 *************************
00981 *
00982 *     THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR
00983 *     EQUALITY.
00984 *     C. L. LAWSON, JPL, 1974 DEC 10
00985 *
00986 *     .. Parameters ..
00987       INTEGER           NOUT
00988       PARAMETER         (NOUT=6)
00989 *     .. Scalar Arguments ..
00990       INTEGER           ICOMP, ITRUE
00991 *     .. Scalars in Common ..
00992       INTEGER           ICASE, INCX, INCY, N
00993       LOGICAL           PASS
00994 *     .. Local Scalars ..
00995       INTEGER           ID
00996 *     .. Common blocks ..
00997       COMMON            /COMBLA/ICASE, N, INCX, INCY, PASS
00998 *     .. Executable Statements ..
00999 *
01000       IF (ICOMP.EQ.ITRUE) GO TO 40
01001 *
01002 *                            HERE ICOMP IS NOT EQUAL TO ITRUE.
01003 *
01004       IF ( .NOT. PASS) GO TO 20
01005 *                             PRINT FAIL MESSAGE AND HEADER.
01006       PASS = .FALSE.
01007       WRITE (NOUT,99999)
01008       WRITE (NOUT,99998)
01009    20 ID = ICOMP - ITRUE
01010       WRITE (NOUT,99997) ICASE, N, INCX, INCY, ICOMP, ITRUE, ID
01011    40 CONTINUE
01012       RETURN
01013 *
01014 99999 FORMAT ('                                       FAIL')
01015 99998 FORMAT (/' CASE  N INCX INCY                               ',
01016      +       ' COMP                                TRUE     DIFFERENCE',
01017      +       /1X)
01018 99997 FORMAT (1X,I4,I3,2I5,2I36,I12)
01019       END
 All Files Functions