sblat1.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* .. SROT .. 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 SROT(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 SROT(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 .. 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 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 + -
显示快捷键?