📄 c_cblat1.f
字号:
+ (-0.1E0,-0.9E0), (-0.5E0,-0.3E0), + (0.2E0,-0.8E0)/ DATA CSIZE1/(0.0E0,0.0E0), (0.9E0,0.9E0), + (1.63E0,1.73E0), (2.90E0,2.78E0)/ DATA CSIZE3/(0.0E0,0.0E0), (0.0E0,0.0E0), + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + (0.0E0,0.0E0), (0.0E0,0.0E0), (1.17E0,1.17E0), + (1.17E0,1.17E0), (1.17E0,1.17E0), + (1.17E0,1.17E0), (1.17E0,1.17E0), + (1.17E0,1.17E0), (1.17E0,1.17E0)/ DATA CSIZE2/(0.0E0,0.0E0), (0.0E0,0.0E0), + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), + (0.0E0,0.0E0), (0.0E0,0.0E0), (1.54E0,1.54E0), + (1.54E0,1.54E0), (1.54E0,1.54E0), + (1.54E0,1.54E0), (1.54E0,1.54E0), + (1.54E0,1.54E0), (1.54E0,1.54E0)/* .. 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* .. CDOTCTEST .. CALL CDOTCTEST(N,CX,INCX,CY,INCY,CTEMP) CDOT(1) = CTEMP CALL CTEST(1,CDOT,CT6(KN,KI),CSIZE1(KN),SFAC) ELSE IF (ICASE.EQ.2) THEN* .. CDOTUTEST .. CALL CDOTUTEST(N,CX,INCX,CY,INCY,CTEMP) CDOT(1) = CTEMP CALL CTEST(1,CDOT,CT7(KN,KI),CSIZE1(KN),SFAC) ELSE IF (ICASE.EQ.3) THEN* .. CAXPYTEST .. CALL CAXPYTEST(N,CA,CX,INCX,CY,INCY) CALL CTEST(LENY,CY,CT8(1,KN,KI),CSIZE2(1,KSIZE),SFAC) ELSE IF (ICASE.EQ.4) THEN* .. CCOPYTEST .. CALL CCOPYTEST(N,CX,INCX,CY,INCY) CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0E0) ELSE IF (ICASE.EQ.5) THEN* .. CSWAPTEST .. CALL CSWAPTEST(N,CX,INCX,CY,INCY) CALL CTEST(LENX,CX,CT10X(1,KN,KI),CSIZE3,1.0E0) CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0E0) 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 .. REAL SFAC INTEGER LEN* .. Array Arguments .. REAL SCOMP(LEN), SSIZE(LEN), STRUE(LEN)* .. Scalars in Common .. INTEGER ICASE, INCX, INCY, MODE, N LOGICAL PASS* .. Local Scalars .. REAL SD INTEGER I* .. External Functions .. REAL 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.0E0) + 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,2E36.8,2E12.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 .. REAL SCOMP1, SFAC, STRUE1* .. Array Arguments .. REAL SSIZE(*)* .. Local Arrays .. REAL 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 REAL FUNCTION SDIFF(SA,SB)* ********************************* SDIFF *************************** COMPUTES DIFFERENCE OF TWO NUMBERS. C. L. LAWSON, JPL 1974 FEB 15** .. Scalar Arguments .. REAL 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 .. REAL SFAC INTEGER LEN* .. Array Arguments .. COMPLEX CCOMP(LEN), CSIZE(LEN), CTRUE(LEN)* .. Local Scalars .. INTEGER I* .. Local Arrays .. REAL SCOMP(20), SSIZE(20), STRUE(20)* .. External Subroutines .. EXTERNAL STEST* .. Intrinsic Functions .. INTRINSIC AIMAG, REAL* .. Executable Statements .. DO 20 I = 1, LEN SCOMP(2*I-1) = REAL(CCOMP(I)) SCOMP(2*I) = AIMAG(CCOMP(I)) STRUE(2*I-1) = REAL(CTRUE(I)) STRUE(2*I) = AIMAG(CTRUE(I)) SSIZE(2*I-1) = REAL(CSIZE(I)) SSIZE(2*I) = AIMAG(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 + -