From f49eb48e0c8145581606cce146fe76f157eabb3b Mon Sep 17 00:00:00 2001 From: edoapra Date: Thu, 13 Feb 2020 17:52:06 +0000 Subject: [PATCH] fixes for flang bug on arithmetic if https://github.com/flang-compiler/flang/issues/844 https://github.com/nwchemgit/nwchem/pull/179 --- src/ddscf/fast/{sint.f => sint.F} | 29 +++++++++++++++++++++++++++++ src/ddscf/fast/{vsint.f => vsint.F} | 23 +++++++++++++++++++++++ 2 files changed, 52 insertions(+) rename src/ddscf/fast/{sint.f => sint.F} (98%) rename src/ddscf/fast/{vsint.f => vsint.F} (99%) diff --git a/src/ddscf/fast/sint.f b/src/ddscf/fast/sint.F similarity index 98% rename from src/ddscf/fast/sint.f rename to src/ddscf/fast/sint.F index 7b7e0b9b22..7f042f6120 100644 --- a/src/ddscf/fast/sint.f +++ b/src/ddscf/fast/sint.F @@ -77,6 +77,7 @@ SUBROUTINE SINT1(N,WAR,WAS,XH,X,IFAC) DOUBLE PRECISION T1 DOUBLE PRECISION T2 DOUBLE PRECISION WAR(*),WAS(*),X(*),XH(*) + integer*4 n4 INTEGER IFAC(*) DATA SQRT3/1.73205080756888D0/ C @@ -86,7 +87,12 @@ SUBROUTINE SINT1(N,WAR,WAS,XH,X,IFAC) XH(I) = WAR(I) WAR(I) = X(I) 100 CONTINUE +#if 1 + n4=n-2 + IF (n4) 101,102,103 +#else IF (N-2) 101,102,103 +#endif 101 XH(1) = XH(1) + XH(1) GO TO 106 102 XHOLD = SQRT3* (XH(1)+XH(2)) @@ -241,6 +247,7 @@ SUBROUTINE RFFTI1(N,WA,IFAC) DOUBLE PRECISION ARG DOUBLE PRECISION WA(*) INTEGER IFAC(*),NTRYH(4) + integer*4 n4 DATA NTRYH(1),NTRYH(2),NTRYH(3),NTRYH(4)/4,2,3,5/ C C FFTPACK 5.0 auxiliary routine @@ -250,13 +257,23 @@ SUBROUTINE RFFTI1(N,WA,IFAC) NTRY = 0 J = 0 101 J = J + 1 +#if 1 + n4=j-4 + IF (n4) 102,102,103 +#else IF (J-4) 102,102,103 +#endif 102 NTRY = NTRYH(J) GO TO 104 103 NTRY = NTRY + 2 104 NQ = NL/NTRY NR = NL - NTRY*NQ +#if 1 + n4=NR + IF (n4) 101,105,101 +#else IF (NR) 101,105,101 +#endif 105 NF = NF + 1 IFAC(NF+2) = NTRY NL = NQ @@ -318,6 +335,7 @@ SUBROUTINE RADF2(IDO,L1,CC,CH,WA1) DOUBLE PRECISION TR2 DOUBLE PRECISION TI2 DOUBLE PRECISION CH(IDO,2,L1),CC(IDO,L1,2),WA1(*) + integer*4 n4 C C FFTPACK 5.0 auxiliary routine C @@ -325,7 +343,12 @@ SUBROUTINE RADF2(IDO,L1,CC,CH,WA1) CH(1,1,K) = CC(1,K,1) + CC(1,K,2) CH(IDO,2,K) = CC(1,K,1) - CC(1,K,2) 101 CONTINUE +#if 1 + n4=ido-2 + IF (n4) 107,105,102 +#else IF (IDO-2) 107,105,102 +#endif 102 IDP2 = IDO + 2 DO 104 K = 1,L1 DO 103 I = 3,IDO,2 @@ -439,6 +462,7 @@ SUBROUTINE RADF4(IDO,L1,CC,CH,WA1,WA2,WA3) DOUBLE PRECISION TI3 DOUBLE PRECISION TR3 DOUBLE PRECISION CC(IDO,L1,4),CH(IDO,4,L1),WA1(*),WA2(*),WA3(*) + integer*4 n4 DATA HSQT2/.7071067811865475D0/ C C FFTPACK 5.0 auxiliary routine @@ -451,7 +475,12 @@ SUBROUTINE RADF4(IDO,L1,CC,CH,WA1,WA2,WA3) CH(IDO,2,K) = CC(1,K,1) - CC(1,K,3) CH(1,3,K) = CC(1,K,4) - CC(1,K,2) 101 CONTINUE +#if 1 + n4=ido-2 + IF (n4) 107,105,102 +#else IF (IDO-2) 107,105,102 +#endif 102 IDP2 = IDO + 2 DO 104 K = 1,L1 DO 103 I = 3,IDO,2 diff --git a/src/ddscf/fast/vsint.f b/src/ddscf/fast/vsint.F similarity index 99% rename from src/ddscf/fast/vsint.f rename to src/ddscf/fast/vsint.F index 28642472e8..9d1ad0ea15 100644 --- a/src/ddscf/fast/vsint.f +++ b/src/ddscf/fast/vsint.F @@ -172,6 +172,7 @@ SUBROUTINE VRADF2 (MP,IDO,L1,CC,CH,MDIMC,WA1) C C VRFFTPK, VERSION 1, AUGUST 1985 C + integer*4 n4 DIMENSION CH(MDIMC,IDO,2,L1) ,CC(MDIMC,IDO,L1,2) , 1 WA1(IDO) DO 101 K=1,L1 @@ -180,7 +181,12 @@ SUBROUTINE VRADF2 (MP,IDO,L1,CC,CH,MDIMC,WA1) CH(M,IDO,2,K) = CC(M,1,K,1)-CC(M,1,K,2) 1001 CONTINUE 101 CONTINUE +#if 1 + n4=ido-2 + IF (n4) 107,105,102 +#else IF (IDO-2) 107,105,102 +#endif 102 IDP2 = IDO+2 DO 104 K=1,L1 DO 103 I=3,IDO,2 @@ -258,6 +264,7 @@ SUBROUTINE VRADF4 (MP,IDO,L1,CC,CH,MDIMC,WA1,WA2,WA3) C DIMENSION CC(MDIMC,IDO,L1,4) ,CH(MDIMC,IDO,4,L1) , 1 WA1(IDO) ,WA2(IDO) ,WA3(IDO) + integer*4 n4 HSQT2=SQRT(2.d0)/2.d0 DO 101 K=1,L1 DO 1001 M=1,MP @@ -269,7 +276,12 @@ SUBROUTINE VRADF4 (MP,IDO,L1,CC,CH,MDIMC,WA1,WA2,WA3) CH(M,1,3,K) = CC(M,1,K,4)-CC(M,1,K,2) 1001 CONTINUE 101 CONTINUE +#if 1 + n4=ido-2 + IF (n4) 107,105,102 +#else IF (IDO-2) 107,105,102 +#endif 102 IDP2 = IDO+2 DO 104 K=1,L1 DO 103 I=3,IDO,2 @@ -965,19 +977,30 @@ SUBROUTINE VRFTI1 (N,WA,FAC) C VRFFTPK, VERSION 1, AUGUST 1985 C DIMENSION WA(N) ,FAC(15) ,NTRYH(4) + integer*4 n4 DATA NTRYH(1),NTRYH(2),NTRYH(3),NTRYH(4)/4,2,3,5/ NTRY = 0 NL = N NF = 0 J = 0 101 J = J+1 +#if 1 + n4=j-4 + IF (n4) 102,102,103 +#else IF (J-4) 102,102,103 +#endif 102 NTRY = NTRYH(J) GO TO 104 103 NTRY = NTRY+2 104 NQ = NL/NTRY NR = NL-NTRY*NQ +#if 1 + n4=n5 + IF (n4) 101,105,101 +#else IF (NR) 101,105,101 +#endif 105 NF = NF+1 FAC(NF+2) = NTRY NL = NQ