dblat1.f

来自「基于Blas CLapck的.用过的人知道是干啥的」· F 代码 · 共 770 行 · 第 1/3 页

F
770
字号
         INCX = INCXS(KI)         INCY = INCYS(KI)         MX = ABS(INCX)         MY = ABS(INCY)*         DO 40 KN = 1, 4            N = NS(KN)            KSIZE = MIN(2,KN)            LENX = LENS(KN,MX)            LENY = LENS(KN,MY)*            IF (ICASE.EQ.4) THEN*              .. DROT ..               DO 20 I = 1, 7                  SX(I) = DX1(I)                  SY(I) = DY1(I)                  STX(I) = DT9X(I,KN,KI)                  STY(I) = DT9Y(I,KN,KI)   20          CONTINUE               CALL DROT(N,SX,INCX,SY,INCY,SC,SS)               CALL STEST(LENX,SX,STX,SSIZE2(1,KSIZE),SFAC)               CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC)            ELSE               WRITE (NOUT,*) ' Shouldn''t be here in CHECK3'               STOP            END IF   40    CONTINUE   60 CONTINUE*      MWPC(1) = 1      DO 80 I = 2, 11         MWPC(I) = 0   80 CONTINUE      MWPS(1) = 0      DO 100 I = 2, 6         MWPS(I) = 1  100 CONTINUE      DO 120 I = 7, 11         MWPS(I) = -1  120 CONTINUE      MWPINX(1) = 1      MWPINX(2) = 1      MWPINX(3) = 1      MWPINX(4) = -1      MWPINX(5) = 1      MWPINX(6) = -1      MWPINX(7) = 1      MWPINX(8) = 1      MWPINX(9) = -1      MWPINX(10) = 1      MWPINX(11) = -1      MWPINY(1) = 1      MWPINY(2) = 1      MWPINY(3) = -1      MWPINY(4) = -1      MWPINY(5) = 2      MWPINY(6) = 1      MWPINY(7) = 1      MWPINY(8) = -1      MWPINY(9) = -1      MWPINY(10) = 2      MWPINY(11) = 1      DO 140 I = 1, 11         MWPN(I) = 5  140 CONTINUE      MWPN(5) = 3      MWPN(10) = 3      DO 160 I = 1, 5         MWPX(I) = I         MWPY(I) = I         MWPTX(1,I) = I         MWPTY(1,I) = I         MWPTX(2,I) = I         MWPTY(2,I) = -I         MWPTX(3,I) = 6 - I         MWPTY(3,I) = I - 6         MWPTX(4,I) = I         MWPTY(4,I) = -I         MWPTX(6,I) = 6 - I         MWPTY(6,I) = I - 6         MWPTX(7,I) = -I         MWPTY(7,I) = I         MWPTX(8,I) = I - 6         MWPTY(8,I) = 6 - I         MWPTX(9,I) = -I         MWPTY(9,I) = I         MWPTX(11,I) = I - 6         MWPTY(11,I) = 6 - I  160 CONTINUE      MWPTX(5,1) = 1      MWPTX(5,2) = 3      MWPTX(5,3) = 5      MWPTX(5,4) = 4      MWPTX(5,5) = 5      MWPTY(5,1) = -1      MWPTY(5,2) = 2      MWPTY(5,3) = -2      MWPTY(5,4) = 4      MWPTY(5,5) = -3      MWPTX(10,1) = -1      MWPTX(10,2) = -3      MWPTX(10,3) = -5      MWPTX(10,4) = 4      MWPTX(10,5) = 5      MWPTY(10,1) = 1      MWPTY(10,2) = 2      MWPTY(10,3) = 2      MWPTY(10,4) = 4      MWPTY(10,5) = 3      DO 200 I = 1, 11         INCX = MWPINX(I)         INCY = MWPINY(I)         DO 180 K = 1, 5            COPYX(K) = MWPX(K)            COPYY(K) = MWPY(K)            MWPSTX(K) = MWPTX(I,K)            MWPSTY(K) = MWPTY(I,K)  180    CONTINUE         CALL DROT(MWPN(I),COPYX,INCX,COPYY,INCY,MWPC(I),MWPS(I))         CALL STEST(5,COPYX,MWPSTX,MWPSTX,SFAC)         CALL STEST(5,COPYY,MWPSTY,MWPSTY,SFAC)  200 CONTINUE      RETURN      END      SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC)*     ********************************* STEST ****************************     THIS SUBR COMPARES ARRAYS  SCOMP() AND STRUE() OF LENGTH LEN TO*     SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE*     NEGLIGIBLE.**     C. L. LAWSON, JPL, 1974 DEC 10**     .. Parameters ..      INTEGER          NOUT      PARAMETER        (NOUT=6)*     .. Scalar Arguments ..      DOUBLE PRECISION SFAC      INTEGER          LEN*     .. Array Arguments ..      DOUBLE PRECISION SCOMP(LEN), SSIZE(LEN), STRUE(LEN)*     .. Scalars in Common ..      INTEGER          ICASE, INCX, INCY, MODE, N      LOGICAL          PASS*     .. Local Scalars ..      DOUBLE PRECISION SD      INTEGER          I*     .. External Functions ..      DOUBLE PRECISION SDIFF      EXTERNAL         SDIFF*     .. Intrinsic Functions ..      INTRINSIC        ABS*     .. Common blocks ..      COMMON           /COMBLA/ICASE, N, INCX, INCY, MODE, PASS*     .. Executable Statements ..*      DO 40 I = 1, LEN         SD = SCOMP(I) - STRUE(I)         IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0D0)     +       GO TO 40**                             HERE    SCOMP(I) IS NOT CLOSE TO STRUE(I).*         IF ( .NOT. PASS) GO TO 20*                             PRINT FAIL MESSAGE AND HEADER.         PASS = .FALSE.         WRITE (NOUT,99999)         WRITE (NOUT,99998)   20    WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, I, SCOMP(I),     +     STRUE(I), SD, SSIZE(I)   40 CONTINUE      RETURN*99999 FORMAT ('                                       FAIL')99998 FORMAT (/' CASE  N INCX INCY MODE  I                            ',     +       ' COMP(I)                             TRUE(I)  DIFFERENCE',     +       '     SIZE(I)',/1X)99997 FORMAT (1X,I4,I3,3I5,I3,2D36.8,2D12.4)      END      SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC)*     ************************* STEST1 *******************************     THIS IS AN INTERFACE SUBROUTINE TO ACCOMODATE THE FORTRAN*     REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE*     ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT.**     C.L. LAWSON, JPL, 1978 DEC 6**     .. Scalar Arguments ..      DOUBLE PRECISION  SCOMP1, SFAC, STRUE1*     .. Array Arguments ..      DOUBLE PRECISION  SSIZE(*)*     .. Local Arrays ..      DOUBLE PRECISION  SCOMP(1), STRUE(1)*     .. External Subroutines ..      EXTERNAL          STEST*     .. Executable Statements ..*      SCOMP(1) = SCOMP1      STRUE(1) = STRUE1      CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC)*      RETURN      END      DOUBLE PRECISION FUNCTION SDIFF(SA,SB)*     ********************************* SDIFF ***************************     COMPUTES DIFFERENCE OF TWO NUMBERS.  C. L. LAWSON, JPL 1974 FEB 15**     .. Scalar Arguments ..      DOUBLE PRECISION                SA, SB*     .. Executable Statements ..      SDIFF = SA - SB      RETURN      END      SUBROUTINE ITEST1(ICOMP,ITRUE)*     ********************************* ITEST1 ***************************     THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR*     EQUALITY.*     C. L. LAWSON, JPL, 1974 DEC 10**     .. Parameters ..      INTEGER           NOUT      PARAMETER         (NOUT=6)*     .. Scalar Arguments ..      INTEGER           ICOMP, ITRUE*     .. Scalars in Common ..      INTEGER           ICASE, INCX, INCY, MODE, N      LOGICAL           PASS*     .. Local Scalars ..      INTEGER           ID*     .. Common blocks ..      COMMON            /COMBLA/ICASE, N, INCX, INCY, MODE, PASS*     .. Executable Statements ..*      IF (ICOMP.EQ.ITRUE) GO TO 40**                            HERE ICOMP IS NOT EQUAL TO ITRUE.*      IF ( .NOT. PASS) GO TO 20*                             PRINT FAIL MESSAGE AND HEADER.      PASS = .FALSE.      WRITE (NOUT,99999)      WRITE (NOUT,99998)   20 ID = ICOMP - ITRUE      WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, ICOMP, ITRUE, ID   40 CONTINUE      RETURN*99999 FORMAT ('                                       FAIL')99998 FORMAT (/' CASE  N INCX INCY MODE                               ',     +       ' COMP                                TRUE     DIFFERENCE',     +       /1X)99997 FORMAT (1X,I4,I3,3I5,2I36,I12)      END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?