⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_zblat1.f

📁 基本的C语言线性代数函数库,在linux下可直接编译;在windows下要显示地申明包含
💻 F
📖 第 1 页 / 共 3 页
字号:
     +                  (-0.1D0,-0.9D0), (-0.5D0,-0.3D0),     +                  (0.2D0,-0.8D0)/      DATA              CSIZE1/(0.0D0,0.0D0), (0.9D0,0.9D0),     +                  (1.63D0,1.73D0), (2.90D0,2.78D0)/      DATA              CSIZE3/(0.0D0,0.0D0), (0.0D0,0.0D0),     +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),     +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (1.17D0,1.17D0),     +                  (1.17D0,1.17D0), (1.17D0,1.17D0),     +                  (1.17D0,1.17D0), (1.17D0,1.17D0),     +                  (1.17D0,1.17D0), (1.17D0,1.17D0)/      DATA              CSIZE2/(0.0D0,0.0D0), (0.0D0,0.0D0),     +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),     +                  (0.0D0,0.0D0), (0.0D0,0.0D0), (1.54D0,1.54D0),     +                  (1.54D0,1.54D0), (1.54D0,1.54D0),     +                  (1.54D0,1.54D0), (1.54D0,1.54D0),     +                  (1.54D0,1.54D0), (1.54D0,1.54D0)/*     .. Executable Statements ..      DO 60 KI = 1, 4         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)*           .. initialize all argument arrays ..            DO 20 I = 1, 7               CX(I) = CX1(I)               CY(I) = CY1(I)   20       CONTINUE            IF (ICASE.EQ.1) THEN*              .. ZDOTCTEST ..               CALL ZDOTCTEST(N,CX,INCX,CY,INCY,ZTEMP)               CDOT(1) = ZTEMP               CALL CTEST(1,CDOT,CT6(KN,KI),CSIZE1(KN),SFAC)            ELSE IF (ICASE.EQ.2) THEN*              .. ZDOTUTEST ..               CALL ZDOTUTEST(N,CX,INCX,CY,INCY,ZTEMP)               CDOT(1) = ZTEMP               CALL CTEST(1,CDOT,CT7(KN,KI),CSIZE1(KN),SFAC)            ELSE IF (ICASE.EQ.3) THEN*              .. ZAXPYTEST ..               CALL ZAXPYTEST(N,CA,CX,INCX,CY,INCY)               CALL CTEST(LENY,CY,CT8(1,KN,KI),CSIZE2(1,KSIZE),SFAC)            ELSE IF (ICASE.EQ.4) THEN*              .. ZCOPYTEST ..               CALL ZCOPYTEST(N,CX,INCX,CY,INCY)               CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0D0)            ELSE IF (ICASE.EQ.5) THEN*              .. ZSWAPTEST ..               CALL ZSWAPTEST(N,CX,INCX,CY,INCY)               CALL CTEST(LENX,CX,CT10X(1,KN,KI),CSIZE3,1.0D0)               CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0D0)            ELSE               WRITE (NOUT,*) ' Shouldn''t be here in CHECK2'               STOP            END IF*   40    CONTINUE   60 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 CTEST(LEN,CCOMP,CTRUE,CSIZE,SFAC)*     **************************** CTEST *******************************     C.L. LAWSON, JPL, 1978 DEC 6**     .. Scalar Arguments ..      DOUBLE PRECISION SFAC      INTEGER          LEN*     .. Array Arguments ..      COMPLEX*16       CCOMP(LEN), CSIZE(LEN), CTRUE(LEN)*     .. Local Scalars ..      INTEGER          I*     .. Local Arrays ..      DOUBLE PRECISION SCOMP(20), SSIZE(20), STRUE(20)*     .. External Subroutines ..      EXTERNAL         STEST*     .. Intrinsic Functions ..      INTRINSIC        DIMAG, DBLE*     .. Executable Statements ..      DO 20 I = 1, LEN         SCOMP(2*I-1) = DBLE(CCOMP(I))         SCOMP(2*I) = DIMAG(CCOMP(I))         STRUE(2*I-1) = DBLE(CTRUE(I))         STRUE(2*I) = DIMAG(CTRUE(I))         SSIZE(2*I-1) = DBLE(CSIZE(I))         SSIZE(2*I) = DIMAG(CSIZE(I))   20 CONTINUE*      CALL STEST(2*LEN,SCOMP,STRUE,SSIZE,SFAC)      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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -