C Copy of INTEGRAL FORTRAN WRITTEN BY Jay Rasaiah
C MODIFIED INPUT TO RUN ON IMAC by E.LOVEJOY June 18 2024, Rev 8.01
C
C Compiled with:
C gfortran -g -fcheck=all -std=legacy -o integral integral.f
C -fcheck=all enables array bound checks at run time
C **********************************************************************INT00020
C THIS IS VERSION 1.57 WHICH USES LESS MEMORY AND IS FASTER THAN *INT00030
C VERSION 1.55 AND CALC THE SHORT-RANGED DIR CORR FUNCTION(DCS) INT00040
C PROGRAM RESTRICTED TO SYMMETRICALLY CHARGED ELECTROLYTES. *INT00050
C SOLVES HNC EQ BY ITERATIONUSING ISEINGS FAST FOURIER TRANSFORM FFT3S*INT00060
C IF (CONC.EQ.0) READS A NEW SET OF ION AND WELL SIZE PARAMETERS. *INT00070
C IF REM=0.0, NO REMAINDER ADDED TO G(I,J), T(2,4), G4(I,J) *INT00080
C IF REM.NE.0.0, DEBYE-HUCKEL REMAINDER ADDED *INT00090
C PRIMITIVE MODEL PLUS TWO SQUARE WELLS *INT00100
C SPAC IS NEAREST FRACTION OF A(1,2) THAT IS CLOSEST TO *INT00110
C MAX(COEFF1*DEBYE/FNN,COEFF2*A(1,2)/FNN) *INT00120
C DELA = DLN(ACTCO)/DLNC, CALC FROM COMPRESSIBILITY EQUATION. *INT00130
C DELB = LIMIT(DELB) AS BETA GOES TO ZERO *INT00140
C BETA MEAS DEVIATION FROM ELECTRONEUTRALITY *INT00150
C OSM IS CALCULATED FROM THE PRESSURE EQUATION *INT00160
C XENERGY AND DFX/DP FROM INDEP EQNS ASSUMING NO TEMP AND PRESS DEP *INT00170
C OF THE SHORT RANGE POTENTIAL XENERGY IS IN CALS PER MOLE OF SOLUTE *INT00180
C XVOLUME IN CC PER MOLE OF SOLUTE *INT00190
C DRF IS THE DIELECTRIC RESPONSE FUNCTION FOR THE HNC EQN *INT00200
C DRDF IS THE DIELECTRIC RESPONSE FUNCTION FOR THE DHLL *INT00210
C CONVGA = (C(1)*G(1,1)-C(2)*G(2,2))/GM12-C(1)+C(2) *INT00220
C CONVGB = 100*(G(1,2)-G(2,1))/GM12 *INT00230
C DCS(=ZETA) IS THE SHORT-RANGED DIRECT CORRELATION FUNCTION *INT00240
C CONVERGENCE CRITERION USEFUL ONLY FOR UNSYMMETRICAL SYSTEMS *INT00250
C IF EX.EQ.2.0, PRINTS XR,DCS,H *INT00260
C IF EX.EQ.3.0, PRINTS XR,DCS,H AND CHARGE DENSITY *INT00270
C IF EX.EQ.0.0, QUITS *INT00280
C IF CHARGE = 0.0, REPEATS CALC WITH SAME SPACING AS CHARGED SYSTEM *INT00290
C BUT WITH Z1 = Z2 = 0.0.FICTITIOUS CHARGE DENSITY ALSO CALC *INT00300
C IF ICC.GT.0, ITERATION BEGINS WITH TAU OF PRECEDING CONC *INT00310
C IF ICC.LT.0, READ TAU GENERATED IN A PREVIOUS EXECUTION *INT00320
C IF ICC.EQ.0, TAU CAL IN LAMBDA APPROXIMATION *INT00330
C WRITES TAU ON NDSK2 IN ALL CASES *INT00340
C SIX SUBRUTNIES ADJ,TRAP,SIMPSON,FFT3S,SETFT,RSA
C NIONS is number positive and negative ions 2 for NaCl and ZnSO4
C **************************DIMENSIONS**********************************INT00350
INTEGER MNM
PARAMETER (MNM = 2048)
REAL*8 DATE,TIME INT00360
DIMENSION A(2,2)
DIMENSION A1(2,2)
DIMENSION B(80)
DIMENSION BA(2,2)
DIMENSION B1(2,2)
DIMENSION C(2)
DIMENSION CB(2,2)
DIMENSION CONV(MNM,2,2)
DIMENSION C1(2,2)
DIMENSION DC(MNM,2,2)
DIMENSION DRF(MNM)
DIMENSION DRDF(MNM)
DIMENSION E(2,2)
DIMENSION FNU(2)
DIMENSION F2(2)
DIMENSION F4(2)
DIMENSION G(2,2)
DIMENSION GA(2,2)
DIMENSION GB(2,2)
DIMENSION GC(2,2)
DIMENSION GM(2,2)
DIMENSION GW(2,2)
DIMENSION G4(2,2)
C DIMENSION H(MNM,2,2)
REAL H(MNM,2,2)
DIMENSION LINT(2,2)
DIMENSION MINT(2,2)
DIMENSION NINT(2,2)
DIMENSION PHI(MNM,2,2)
DIMENSION P1(MNM,2,2)
DIMENSION Q(MNM,2,2)
DIMENSION Q1(MNM,2,2)
DIMENSION RHO(2,MNM)
DIMENSION RQO(2,MNM)
DIMENSION R2(2)
DIMENSION R4(2)
DIMENSION T(2,2)
DIMENSION TAU(MNM,2,2)
DIMENSION TCONV(MNM,2,2)
DIMENSION TH(MNM,2,2)
DIMENSION TM(2,2)
DIMENSION TPHI(MNM,2,2)
DIMENSION TQ(MNM,2,2)
DIMENSION TTAU(MNM,2,2)
DIMENSION TW(2,2)
DIMENSION TZETA(MNM,2,2)
DIMENSION W(2,2)
C DIMENSION XR(MNM)
REAL XR(MNM)
DIMENSION Y(2)
DIMENSION Y1(MNM)
DIMENSION Z(2)
DIMENSION ZA(2)
DIMENSION ZETA(MNM,2,2)
EQUIVALENCE (H,TH,PHI,TPHI,TTAU)
EQUIVALENCE (ZETA,TZETA,RHO,DRF,DC)
EQUIVALENCE (TAU,P1,CONV,TCONV)
EQUIVALENCE (RQO,DRDF)
EQUIVALENCE (XR,Y1)
EQUIVALENCE (B(6),Z(1)),(B(8),D),(B(9),TEMP),(B(10),A1(1,1)),
*(B(14),COEFF1),(B(15),DEBYE),(B(16),SPAC),(B(17),FNN),(B(18),CONC)
*,(B(19),DELA),(B(20),OSM),(B(21),CONTAC),(B(22),REMAIN),
*(B(23),FITER),(B(24),G(1,1)),(B(28),T(1,1)),(B(32),FNGARB),
*(B(33),DELB),(B(34),DIFF),(B(35),CONVG1),(B(36),CONVG2),
*(B(37),GA(1,1)),(B(5),DT),(B(4),DP),(B(41),GB(1,1)),
*(B(45),G4(1,1)),(B(49),F2(1)),(B(51),F4(1)),(B(52),COEFF2)
COMMON /JAY/ H,XR
C******************************* Hunting for issues********************
C Gfortran has some other nifty flags for ID of various issues:
C -ffpe-trap=invalid,zero,overflow
C gfortran -g -ffpe-trap=invalid,zero,overflow -std=legacy -fcheck=all
C******************************* DATE TIME FIX ************************
CHARACTER*25 date_string
CHARACTER*100 command
command = 'date "+%Y-%m-%d %H:%M:%S" > date.txt'
CALL SYSTEM(command)
OPEN(UNIT=1, FILE='date.txt', STATUS='OLD')
READ(1, '(A)') date_string
CLOSE(1)
C ******************************* CONSTANTS ****************************INT00600
C PROGRAM CONSTANTS *INT00610
DATA PI/3.141593/ INT00620
PRINT *, date_string
C CALL TIMER(DATE,TIME,IVIRT,ITOT) INT00630
NRDR = 5 INT00640
NPRT = 7 INT00650
NPUN = 7 INT00660
NDSK = 8 INT00670
NDSK2 = 9 INT00680
NIONS = 2 INT00690
PI2 = 2.*PI INT00700
PI4 = 4.*PI INT00710
PI43 = PI4/3. INT00720
PIPI = PI*PI INT00730
C **********************************************************************INT00740
C CONSTANTS FOR SUBROUTINE FFT3S *INT01430
F0 = 0. INT01440
RL = SPAC1*FNN INT01450
C **********************************************************************INT01460
C*****used to stop crashing of H MINT PHI TPHI TCONV CONV ZETA*******
I = 1
J = 1
IF (J .LT. 1) THEN
J = J + 1
END IF
IF (I .LT. 1) THEN
I = I + 1
END IF
DO 10 I = 1,80 INT00750
10 B(I) = 0.0 INT00760
B(3) = 1.57 INT00770
C20 READ(NRDR,9001) M1 INT00780
C20 READ(NRDR,*) M1 INT00780
C READ(NRDR,*) (Z(I),FNU(I),I=1,NIONS)
M1 = 11
C Z(1) = 1.0
Z(1) = 2.0
Z(2) = -1.0 INT00790
ZE = Z(1) INT00800
ZA(1) = Z(1) INT00810
ZA(2) = Z(2) INT00820
FNU(1) = 1.0
FNU(2) = 2.0
C25 READ(NRDR,*) D,TEMP,DT,DP
D = 78.358
T = 298.15
TEMP = 298.15
DT = 0.0
DP = 0.0
C30 READ(NRDR,*) A(1,1),BA(1,1),CB(1,1),A(1,2),BA(1,2),CB(1,2),A(2, INT00840
C *2),BA(2,2),CB(2,2) INT00850
A(1,1) = 4.2
A(1,2) = 4.2
A(2,1) = A(1,2) INT00860
A(2,2) = A (1,1)
BA(1,1) = 0
BA(2,2) = BA(1,1)
BA(1,2) = 0.0
BA(2,1) = BA(1,2)
CB(1,1) = 0.0
CB(2,2) = CB(1,1)
CB(1,2) = 0.0 INT00870
CB(2,1) = CB(1,2) INT00880
C35 READ(NRDR,*) E(1,1),W(1,1),E(1,2),W(1,2),E(2,2),W(2,2) INT00890
E(1,1)= 0.0
E(1,2)= 0.0
E(2,1) = E(1,2) INT00900
E(2,2) = E(1,1) INT00900
W(1,1) = 0.0
W(1,2) = 0.0
W(2,1) = W(1,2)
W(2,2) = W(1,1)
C40 READ(NRDR,*)CONC,COEFF1,COEFF2,EX,REM,CHARGE,MAX,I2,NCD,IC, INT00920
C *NR,IR,ICC
CONC = 0.1 INT00930
COEFF1=1.0
COEFF2=1.0
EX = 3.0
REM = 1.0
CHARGE = 1.0
MAX = 6
I2 =2
ICC= 1
C NCD =
C IC =
IR = 1
NR = 5
C REWIND NDSK2 INT00940
C IF(ICC.LT.0)READ(NDSK2,9003)(((TAU(K,I,J),I=1,NIONS),J=1,NIONS),K=INT00950
C *1,N) INT00960
C REWIND NDSK2 INT00970
IF (EX.EQ.0.0) GO TO 5050 INT00980
C IF(CONC.EQ.0.0) GO TO 30 INT00990
9001 FORMAT(I3) INT01000
9002 FORMAT(8F10.5) INT01010
9003 FORMAT(4F10.5) INT01020
9004 FORMAT(9F5.2) INT01030
9005 FORMAT(6F10.5) INT01040
9006 FORMAT(1F10.7,5F5.2,7I5) INT01050
WRITE(NPRT,9100)B(3), date_string
9100 FORMAT(1H1, 38X, 'HNC VERSION ', F4.2, ' - IBM 370/148 - ', A25)
C WRITE(NPRT,9100)B(3),DATE,TIME INT01060
C9100 FORMAT(1H1,38X,'HNC VERSION ',F4.2,' - IBM 370/148 - ',A8,2X,A8) INT01070
C**** N=2**M1=2048 for M1=11, ***************************************
N=2**M1 INT01090
N2=N/2 INT01100
FNN = N INT01120
FC = 0.0 INT01130
FNO = 0.0 INT01140
CC = 0.0 INT01150
DO 50 I = 1,NIONS INT01160
FNO = FNU(I)+FNO INT01170
C(I) = FNU(I)*CONC*6.0233*1.E-04 INT01180
CC = C(I)+CC INT01190
50 FC = C(I)*Z(I)**2+FC
C********************************************************************** INT01200
C Electron charge e=4.8032x10E10 cm**3/2 g**1/2 s**-2 (esu)
C Boltzconst k=1.3803x10E-16 cm**2 s**2/K INT01200
C Bjerrum length |z+z+|e**2/DkT=16.714x1.E+04/DT
C***********************************************************************
FL1 = 16.7094*1.E+04/(D*TEMP) INT01210
FL = PI4*FL1 INT01220
FK = (FC*FL)**0.5 INT01230
FKFK = FK*FK INT01240
DEBYE = 1./FK INT01250
FKA = A(1,2)/DEBYE INT01260
C REWIND NDSK INT01270
C WRITE(NDSK,9101)A(1,1),A(1,2),A(2,2),D,TEMP,CONC,FKA,DEBYE,Z(1),Z(INT01280
C *2) INT01290
9101 FORMAT(3F8.5,2F8.4,3F10.6,2F5.1) INT01300
SPAC1 = COEFF1*DEBYE/FNN INT01310
SPAC2 = COEFF2*A(1,2)/FNN INT01320
IF(SPAC2.GT.SPAC1) SPAC1=SPAC2 INT01330
S1 = A(1,2)/SPAC1 INT01340
L = S1+1. INT01350
S2 = L INT01360
IF (S2-S1.GT.0.5) GO TO 60 INT01370
SPAC1 = A(1,2)/S2 INT01380
GO TO 70 INT01390
60 SPAC1 = A(1,2)/(S2-1.) INT01400
70 CONTINUE INT01410
C **********************************************************************INT01420
C CONSTANTS FOR SUBROUTINE FFT3S *INT01430
F0 = 0. INT01440
RL = SPAC1*FNN INT01450
C FX,FY and FZ are Debye Huckel remainders for ?
C **********************************************************************INT01460
FI = 1.0 INT01470
SPAC = SPAC1 INT01480
DO 80 K = 1,N INT01490
XR(K) = SPAC1*FI INT01500
80 FI = FI+1. INT01510
XN = XR(N) INT01520
FKN = FK*XN INT01530
IF (REM.EQ.0.0) GO TO 90 INT01540
FX = FL*(1.+FKN)*EXP(-FKN)/FKFK INT01550
FY = FL*EXP(-FKN)/FK INT01560
FZ = FL*EXP(-FKN)*(FKN**3+3.*FKN**2+6.*FKN+6.)/(FKFK*FKFK) INT01570
GO TO 100 INT01580
90 FX = 0.0 INT01590
FY = 0.0 INT01600
FZ = 0.0 INT01610
100 CONTINUE INT01620
DO 110 I = 1,NIONS INT01630
DO 110 J = 1,NIONS INT01640
CALL ADJ (A(I,J),A1(I,J),MINT(I,J),SPAC1) INT01650
CALL ADJ (BA(I,J),B1(I,J),NINT(I,J),SPAC1) INT01660
CALL ADJ (CB(I,J),C1(I,J),LINT(I,J),SPAC1) INT01670
110 CONTINUE INT01680
GO TO 130 INT01690
120 PRINT *, date_string
C 120 CALL TIMER(DATE,TIME,IVIRT,ITOT) INT01700
WRITE(NPRT,9100)B(3),date_string INT01710
C WRITE(NPRT,9100)B(3),DATE,TIME INT01710
Z(1) = 0.0 INT01720
Z(2) = 0.0 INT01730
ZE = 0.0 INT01740
CHARGE = 20.0 INT01750
REM = 0.0 INT01760
DEBYE = 0.0 INT01770
BETA = 0.0 INT01780
CONVGA = 0.0 INT01790
130 WRITE(NPRT,9103) Z(1),Z(2),D,TEMP,DT,DP,A1(1,1),A1(2,2),A1(1,2), INT01800
*B1(1,1),B1(2,2),B1(1,2),C1(1,1),C1(2,2),C1(1,2),E(1,1),E(2,2), INT01810
*E(1,2),W(1,1),W(2,2),W(1,2),COEFF1,COEFF2,SPAC1,N,REM,CONC,DEBYE INT01820
9103 FORMAT('Z1=',F5.1,3X,'Z2=',F5.1,/,'DIEL CONST=',F7.3,3X,'TEMP=', INT01830
*F7.3,'DLND/DLNT=',F10.5,3X,'DLND/DP=',F7.3,/,'A11=',F6.3,3X,'A22='INT01840
*,F6.3,3X,'A12=',F6.3,/,'B11=',F6.3,3X,'B22=',F6.3,3X,'B12=',F6.3,/INT01850
*'C11=',F6.3,3X,'C22=',F6.3,3X,'C12=',F6.3,/, INT01860
*'E11=',F6.3,3X,'E22=',F6.3,3X,'E12=',F6.3,/, INT01870
*'W11=',F6.3,3X,'W22=',F6.3,3X,'W12=',F6.3,/, INT01880
*'COEFF1=',F7.4,3X,'COEFF2=',F7.4,3X,'SPAC1=',F7.4,3X,'N=',I4,3X, INT01890
*'REM=',F7.4,/,'CONC=',F10.6,3X,'DEBYE=',F10.5,/) INT01900
C *** CALC OF Q,Q1,AND TQ INT01910
C WRITE(6,5558) INT01920
5558 FORMAT(1X,'HO') INT01930
DO 180 I = 1,NIONS INT01940
DO 180 J = 1,NIONS INT01950
AB = A1(I,J)+B1(I,J) INT01960
BC = AB+C1(I,J) INT01970
DO 180 K = 1,N INT01980
Q(K,I,J) = -Z(I)*Z(J)*FL*EXP(-FK*XR(K))/(PI4*XR(K)) INT01990
IF (XR(K) .LT. A1(I,J)) GO TO 170 INT02000
IF(ABS(XR(K)-AB).LT.1.E-04) GO TO 160 INT02010
IF ((XR(K)-AB).LT.1.E-07) GO TO 150 INT02020
IF(ABS(XR(K)-BC).LT.1.E-04) GO TO 140 INT02030
IF((XR(K)-BC).LT.1.E-07) GO TO 160 INT02040
140 Q1(K,I,J) = EXP(Q(K,I,J)) INT02050
GO TO 180 INT02060
150 Q1(K,I,J) = EXP(Q(K,I,J)-E(I,J)) INT02070
GO TO 180 INT02080
160 Q1(K,I,J) = EXP(Q(K,I,J)-W(I,J)) INT02090
GO TO 180 INT02100
170 Q1(K,I,J) = 0.0 INT02110
180 CONTINUE INT02120
C WRITE(6,5557) INT02130
5557 FORMAT(1X,'HA') INT02140
DO 190 I = 1,NIONS INT02150
DO 190 J = 1,NIONS INT02160
190 CALL FFT3S(F0,Q(1,I,J),M1,RL,TQ(1,I,J),1) INT02170
C***************** Distributution ************************************
C CALC OF APPROX DISTRIBUTION FUNCTIONS after counter I1 =0 *INT02190
1010 I1 = 0 INT02210
IF (ICC.NE.0) GO TO 1070 INT02220
DO 1020 I = 1,NIONS INT02230
DO 1020 J = 1,NIONS INT02240
DO 1020 K = 1,N INT02250
1020 PHI(K,I,J) = Q1(K,I,J)-1. INT02260
DO 1030 I = 1,NIONS INT02270
DO 1030 J = 1,NIONS INT02280
PHI(MINT(I,J),I,J) = (PHI(MINT(I,J),I,J)-1.)*.5 INT02290
1030 CALL FFT3S(F0,PHI(1,I,J),M1,RL,TPHI(1,I,J),1) INT02300
DO 1040 I = 1,NIONS INT02310
DO 1040 J = 1,NIONS INT02320
DO 1040 K = 1,N INT02330
TCONV(K,I,J) = 0.0 INT02340
DO 1040 L = 1,NIONS INT02350
1040 TCONV(K,I,J) = TPHI(K,I,L)*TPHI(K,L,J)*C(L)+TCONV(K,I,J) INT02360
DO 1050 I = 1,NIONS INT02370
DO 1050 J = 1,NIONS INT02380
1050 CALL FFT3S(F0,TCONV(1,I,J),M1,RL,CONV(1,I,J),-1) INT02390
DO 1060 I = 1,NIONS INT02400
DO 1060 J = 1,NIONS INT02410
DO 1060 K = 1,N INT02420
1060 TAU(K,I,J) = CONV(K,I,J)+Q(K,I,J)*XR(K)*FK*.5 INT02430
1070 DO 1080 I = 1,NIONS INT02440
DO 1080 J = 1,NIONS INT02450
DO 1075 K = 1,N INT02460
1075 H(K,I,J) = Q1(K,I,J)*(1.+TAU(K,I,J))-1. INT02470
IF (MINT(I,J) < 1) THEN
MINT(I,J) = 1
END IF
H(MINT(I,J),I,J) = (H(MINT(I,J),I,J)-1.)*.5 INT02480
DO 1080 K = 1,N INT02490
1080 ZETA(K,I,J) = H(K,I,J)-Q(K,I,J)-TAU(K,I,J) INT02500
IF (ICC.NE.0) GO TO 1090 INT02510
WRITE(NPRT,9104) INT02520
9104 FORMAT(38H0RESULTS OF TRIANGLE TERM IN DIST FUNC) INT02530
GO TO 1100 INT02540
1090 IF(ICC.GT.0) GO TO 1112 INT02550
WRITE(NPRT,9105) INT02560
9105 FORMAT(1H0,'RESULTS USING PRECEDING TAU AT PRESENT CONC') INT02570
GO TO 1100 INT02580
1112 WRITE(NPRT,9102) INT02590
9102 FORMAT(1H0,'RESULTS USING PREVIOUS TAU STORED ON DISK') INT02600
1100 WRITE(NPRT,9106) INT02610
9106 FORMAT(6X,4HDELA,9X,4HDELB,9X,4HDIFF,10X,3HOSM,7X,7HXENERGY,5X, INT02620
*7HXVOLUME,4X,4HITER,6X,4HBETA,7X,6HCONVGA,7X,6HCONVGB) INT02630
GO TO 3010 INT02640
C***************** HNC ***********************************************
C SOLVE HNC INTEGRAL EQUATION BY ITERATION *INT02660
2010 WRITE(NPRT,9107) CONTAC,SQ1,SQ2,REMAIN,FG INT02680
WRITE(NPRT,5555)ZE INT02690
IF(ZE.EQ.0.0) GO TO 2020 INT02700
5555 FORMAT(1X,F10.5) INT02710
WRITE(NPRT,9108) INT02720
WRITE(NPRT,9109) (Z(I),F2(I),R2(I),Y(I),F4(I),R4(I),I=1,NIONS) INT02730
WRITE(NPRT,9110) S2,CS2,E2,S4,CS4,E4 INT02740
2020 WRITE(NPRT,9111) INT02750
9111 FORMAT(19H0RESULTS OF HNC EQN) INT02760
WRITE(NPRT,9106) INT02770
2030 CONTINUE INT02780
DO 2040 I = 1,NIONS INT02790
DO 2040 J = 1,NIONS INT02800
2040 CALL FFT3S(F0,H(1,I,J),M1,RL,TH(1,I,J),1) INT02810
DO 2050 I = 1,NIONS INT02820
DO 2050 J = 1,NIONS INT02830
2050 CALL FFT3S(F0,ZETA(1,I,J),M1,RL,TZETA(1,I,J),1) INT02840
DO 2070 I = 1,NIONS INT02850
DO 2070 J = 1,NIONS INT02860
DO 2070 K = 1,N INT02870
SUM1 = 0.0 INT02880
DO 2060 L = 1,NIONS INT02890
2060 SUM1 = TZETA(K,I,L)*TH(K,L,J)*C(L)+SUM1 INT02900
2070 P1(K,I,J) = SUM1 INT02910
DO 2090 I = 1,NIONS INT02920
DO 2090 J = 1,NIONS INT02930
DO 2090 K = 1,N INT02940
P2 = 0.0 INT02950
P3 = 0.0 INT02960
DO 2080 L = 1,NIONS INT02970
P2 = TQ(K,I,L)*TZETA(K,L,J)*C(L)+P2 INT02980
2080 P3 = TQ(K,I,L)*P1(K,L,J)*C(L)+P3 INT02990
2090 TTAU(K,I,J) = P1(K,I,J)+P2+P3 INT03000
DO 2100 I = 1,NIONS INT03010
DO 2100 J = 1,NIONS INT03020
2100 CALL FFT3S(F0,TTAU(1,I,J),M1,RL,TAU(1,I,J),-1) INT03030
I1 = I1+1 INT03040
2110 DO 2120 I = 1,NIONS INT03050
DO 2120 J = 1,NIONS INT03060
C WRITE(7,5556) INT03070
5556 FORMAT(1X,'HI') INT03080
DO 2115 K = 1,N INT03090
C somethign about this raises the floating point exception
C looking deeper, the math library doesnt like that something here has
C an inf value. if is a valid float though. line 39 of
C math_errf.c library.
C it probably would preffer IMPLICIT NONE
C
2115 H(K,I,J) = Q1(K,I,J)*EXP(TAU(K,I,J))-1. INT03100
H(MINT(I,J),I,J) = (H(MINT(I,J),I,J)-1.)*.5 INT03110
DO 2120 K = 1,N INT03120
2120 ZETA(K,I,J) = H(K,I,J)-Q(K,I,J)-TAU(K,I,J) INT03130
IF (I1.EQ.MAX) GO TO 3010 INT03140
IF ((I1/I2)*I2.EQ.I1) GO TO 3010 INT03150
GO TO 2030
C**************** XEnergy*********************************************
C DELA,DELB,OSM,XENERGY,DFX/DP *INT03180
3010 CONTAC = 0.0 INT03200
SQ1 = 0.0 INT03210
SQ2 = 0.0 INT03220
REMAIN = 0.0 INT03230
XE = 0.0 INT03240
DO 3020 I = 1,NIONS INT03250
DO 3020 J = 1,NIONS INT03260
NA = MINT(I,J) INT03270
HNA = H(NA,I,J) INT03280
H(NA,I,J) = HNA*2.+1. INT03290
AA = A(I,J)**3 INT03300
NB = NA +NINT(I,J) INT03310
BB = (A(I,J)+BA(I,J))**3 INT03320
NC = NB+LINT(I,J) INT03330
AC = (A(I,J)+BA(I,J)+CB(I,J))**3 INT03340
AD = PI4*(A1(I,J)-A(I,J)) INT03350
CALL TRAP(NA,NB,I,J,SUM1,SUM2,SUM3) INT03360
T(I,J) = PI4*SUM1*SPAC1 INT03370
G(I,J) = PI4*SUM2*SPAC1 INT03380
G4(I,J) = PI4*SUM3*SPAC1 INT03390
GM(I,J) = G(I,J) INT03400
TM(I,J) = T(I,J) INT03410
XE = XE + FNU(I)*FNU(J)*E(I,J)*(PI43*(BB-AA)+G(I,J)) INT03420
CALL TRAP(NB,NC,I,J,SUM1,SUM2,SUM3) INT03430
T(I,J) = PI4*SUM1*SPAC1 INT03440
G(I,J) = PI4*SUM2*SPAC1 INT03450
G4(I,J) = PI4*SUM3*SPAC1+G4(I,J) INT03460
GW(I,J) = G(I,J) INT03470
TW(I,J) = T(I,J) INT03480
XE = XE+FNU(I)*FNU(J)*W(I,J)*(PI43*(AC-BB)+G(I,J)) INT03490
ERROR1 = -Z(I)*Z(J)*FY+AD*H(NA,I,J)*XR(NA) INT03500
ERROR2 = -Z(I)*Z(J)*FX+AD*H(NA,I,J)*XR(NA)**2 INT03510
ERROR3 = -Z(I)*Z(J)*FZ+AD*H(NA,I,J)*XR(NA)**4 INT03520
C PRINT *, "*****From xEnergy*******"
C PRINT *, "NC",NC,"N",N,"I",I,"J",J
C PRINT *,"SUM1",SUM1,"SUM2",SUM2,"SUM3",SUM3
CALL SIMP(NC,N,I,J,SUM1,SUM2,SUM3) INT03530
T(I,J) = PI43*SPAC1*SUM1-PI2*A(I,J)**2+TW(I,J)+TM(I,J)+ERROR1 INT03540
G(I,J) = PI43*(SPAC1*SUM2-A(I,J)**3)+GM(I,J)+GW(I,J)+ERROR2 INT03560
G4(I,J) = PI43*SPAC1*SUM3-2.513234*A(I,J)**5+G4(I,J)+ERROR3 INT03570
GA(I,J) = H(NA,I,J)+1. INT03580
GB(I,J) = H(NB,I,J)+1. INT03590
GC(I,J) = H(NC,I,J)+1. INT03600
CONTAC = CONTAC + FNU(I)*FNU(J)*GA(I,J)*AA INT03610
SQ1 = SQ1+FNU(I)*FNU(J)*(GB(I,J)*BB*(1.-EXP(-E(I,J)+W(I,J)))) INT03620
SQ2 = SQ2+FNU(I)*FNU(J)*(GC(I,J)*AC*(1.-EXP(-W(I,J)))) INT03630
REMAIN = REMAIN + Z(I)*Z(J)*FNU(I)*FNU(J)*T(I,J) INT03640
IF(I1.EQ.MAX) GO TO 3011 INT03650
H(NA,I,J) = HNA INT03660
GO TO 3020 INT03670
3011 DC(NA,I,J) = DC(NA,I,J)+HNA+1. INT03680
3020 CONTINUE INT03690
CONTAC = CONTAC*2.09439*CC/FNO**2 INT03700
SQ1 = SQ1*2.09439*CC/FNO**2 INT03710
SQ2 = SQ2*2.09439*CC/FNO**2 INT03720
REMAIN = REMAIN*FL1*CC/(6.*FNO**2) INT03730
OSM = 1.+CONTAC+SQ1+SQ2+REMAIN INT03740
XE = 1.97827*TEMP*(3.*(1.+DT)*REMAIN*FNO+XE*CC*0.5/FNO) INT03750
XFP = -8.31467*1.E-05*TEMP*DP*3.*REMAIN*FNO INT03760
GM12 = (G(1,2)+G(2,1))*.5 INT03770
CONVGB = 100*(G(1,2)-G(2,1))/GM12 INT03780
IF (ZE.EQ.0.0) GO TO 3050 INT03790
S2 = 0.0 INT03800
S4 = 0.0 INT03810
DO 3040 I = 1,NIONS INT03820
SUM1 = 0.0 INT03830
SUM2 = 0.0 INT03840
DO 3030 J = 1,NIONS INT03850
SUM1 = SUM1 + C(J)*Z(J)*G(I,J) INT03860
3030 SUM2 = SUM2 + C(J)*Z(J)*G4(I,J) INT03870
F2(I) = SUM1 INT03880
F4(I) = SUM2 INT03890
Y(I) = 6.*Z(I)/FKFK INT03900
R2(I) = 1.+F2(I)/Z(I) INT03910
R4(I) = 1. + F4(I)/Y(I) INT03920
S2 = C(I)*Z(I)*F2(I)+S2 INT03930
3040 S4 = C(I)*Z(I)*F4(I)+S4 INT03940
CONVGA = (C(1)*G(1,1)-C(2)*G(2,2))/GM12 - C(1)+C(2) INT03950
CS2 = FKFK/FL INT03960
CS4 = 6./FL INT03970
E2 = 1.+S2/CS2 INT03980
E4 = 1.+S4/CS4 INT03990
BETA = FNO*R2(1)*R2(2)/(FNU(1)*R2(2)+FNU(2)*R2(1)) INT04000
3050 CONTINUE INT04010
FG = 1.0/(CC*GM12) INT04020
DELA = (FG-1.0-FG*BETA)/(1.0+FG*BETA) INT04030
DELB = FG-1.0 INT04040
DIFF = DELA-DELB INT04050
ITER = I1 INT04060
FITER = ITER INT04070
WRITE(NPRT,9112) DELA,DELB,DIFF,OSM,XE,XFP,ITER,BETA,CONVGA,CONVGBINT04080
9112 FORMAT( 6E13.4,I5,3E13.4) INT04090
IF (I1.EQ.MAX) GO TO 3060 INT04100
IF(I1.EQ.0) GO TO 2010 INT04110
IF ((I1/I2)*I2.EQ.I1) GO TO 2030 INT04120
3060 WRITE(NPRT,9113) INT04130
9113 FORMAT(15H0MATRIX G(I,J),21X,15HMATRIX GM(I,J),20X, INT04140
*15HMATRIX GW(I,J),20X,15HMATRIX G4(I,J)) INT04150
WRITE(NPRT,9114) ((G(I,J),J=1,NIONS),(GM(I,L),L=1,NIONS),(GW(I,M),INT04160
*M=1,NIONS),(G4(I,K),K=1,NIONS),I=1,NIONS) INT04170
9114 FORMAT(1X,2E14.6,6X,2E14.6,6X,2E14.6,6X,2E14.6) INT04180
WRITE(NPRT,9115) INT04190
9115 FORMAT(15H0MATRIX T(I,J),21X,15HMATRIX TM(I,J),20X, INT04200
*15HMATRIX TW(I,J)) INT04210
WRITE(NPRT,9116)((T(I,J),J=1,NIONS),(TM(I,L),L=1,NIONS),(TW(I,M),MINT04220
*=1,NIONS),I=1,NIONS) INT04230
9116 FORMAT(1X,2E14.6,6X,2E14.6,6X,2E14.6) INT04240
WRITE(NPRT,9117) INT04250
9117 FORMAT(16H0MATRIX GA(I,J),20X,15HMATRIX GB(I,J),20X, INT04260
*15HMATRIX GC(I,J)) INT04270
WRITE(NPRT,9118) ((GA(I,J),J=1,NIONS),(GB(I,L),L=1,NIONS),(GC(I,M)INT04280
*,M=1,NIONS),I=1,NIONS) INT04290
9118 FORMAT(1X,2E14.6,6X,2E14.6,6X,2E14.6) INT04300
WRITE(NPRT,9119) INT04310
9119 FORMAT(17H0MATRIX MINT(I,J),3X,16HMATRIX NINT(I,J),3X, INT04320
*16HMATRIX LINT(I,J)) INT04330
WRITE(NPRT,9120) ((MINT(I,J),J=1,NIONS),(NINT(I,L),L=1,NIONS),(LININT04340
*T(I,M),M=1,NIONS),I=1,NIONS) INT04350
9120 FORMAT(1X,2I4,13X,2I4,13X,2I4) INT04360
WRITE(NPRT,9107) CONTAC,SQ1,SQ2,REMAIN,FG INT04370
9107 FORMAT(8H0CONTAC=,1P,E12.4,3X,'SQUARE1=',1P,E12.4,3X,'SQUARE2=', INT04380
*1P,E12.4,3X,'REMAIN=',1P,E12.4,3X,'GAMMA=',1P,E12.4) INT04390
IF (ZE.EQ.0.0) GO TO 3070 INT04400
WRITE(NPRT,9108) INT04410
9108 FORMAT(6X,1HZ,13X,2HF2,12X,2HR2,12X,1HY,13X,2HF4,12X,2HR4) INT04420
WRITE(NPRT,9109) (Z(I),F2(I),R2(I),Y(I),F4(I),R4(I),I=1,NIONS) INT04430
9109 FORMAT(1X,6E14.6) INT04440
WRITE(NPRT,9110) S2,CS2,E2,S4,CS4,E4 INT04450
9110 FORMAT('S2=',E14.6,2X,'CS2=',1P,E14.6,2X,'E2=',1P,E14.6,2X,'S4=' INT04460
*,1P,E14.6,2X,'CS4=',1P,E14.6,2X,'E4=',1P,E14.6) INT04470
3070 CONTINUE INT04480
WRITE(NPRT,9121) INT04490
9121 FORMAT(7X,5HXR(N),7X,9H Q(1,1,N),5X,8HH(1,1,N),5X,9H Q(1,2,N), INT04500
*6X,8HH(1,2,N),5X,9H Q(2,2,N),6X,8HH(2,2,N)) INT04510
WRITE(NPRT,9122) XR(N),Q(N,1,1),H(N,1,1),Q(N,1,2),H(N,1,2), INT04520
*Q(N,2,2),H(N,2,2) INT04530
9122 FORMAT(7E14.4//) INT04540
IF(EX.NE.2.0.AND.EX.NE.3.0) GO TO 4070 INT04550
3080 WRITE(NPRT,9123) INT04560
9123 FORMAT(7X,5HXR(K),6X,10H DC(1,1,K),5X,8HH(1,1,K),5X,10H DC(1,2,K),INT04570
*5X,8HH(1,2,K),5X,10H DC(2,1,K),5X,8HH(2,1,K),5X,10H DC(2,2,K), INT04580
*5X,8HH(2,2,K)) INT04590
WRITE(NPRT,9124)(XR(K),((DC(K,I,J),H(K,I,J),J=1,NIONS),I=1,NIONS) INT04600
*,K=1,N) INT04610
WRITE(NDSK,9125)C1,C2 INT04620
WRITE(NDSK,9133)FO,N,M1,RL,((MINT(I,J),I=1,2),J=1,2) INT04630
9133 FORMAT(F8.4,2I4,F8.4,4I15.6) INT04640
WRITE(NDSK,9126)(XR(K),H(K,1,1),H(K,1,2),K=1,N) INT04650
WRITE(NDSK2,9003)(((TAU(K,I,J),I=1,NIONS),J=1,NIONS),K=1,N) INT04660
REWIND NDSK2 INT04670
9124 FORMAT(1X,1P,9E14.4) INT04680
C ERIC some issue with this line format
9125 FORMAT(1X,A8,2E16.6) INT04690
9126 FORMAT(2E16.7) INT04700
IF (ZE.EQ.0.0) GO TO 4030 INT04710
IF (EX.NE.3.0) GO TO 4070 INT04720
C **********************************************************************INT04730
C CALC OF CHARGE DENSITY *INT04740
C **********************************************************************INT04750
DO 4020 K = 1,N INT04760
DO 4020 I = 1,NIONS INT04770
SUM1 = 0.0 INT04780
SUM2 = 0.0 INT04790
DO 4010 J = 1,NIONS INT04800
SUM1 = SUM1 + FNU(J)*Z(J)*H(K,I,J) INT04810
4010 SUM2 = SUM2 + FNU(J)*Z(J)*Q(K,I,J) INT04820
RHO(I,K) = SUM1*XR(K)**2 INT04830
4020 RQO(I,K) = SUM2*XR(K)**2 INT04840
GO TO 4060 INT04850
4030 Z(1) = 1.0 INT04860
Z(2) = -1.0 INT04870
DO 4050 K = 1,N INT04880
DO 4050 I = 1,NIONS INT04890
SUM1 = 0.0 INT04900
DO 4040 J = 1,NIONS INT04910
4040 SUM1 = SUM1+FNU(J)*Z(J)*H(K,I,J) INT04920
RHO(I,K) = SUM1*XR(K)**2 INT04930
4050 RQO(I,K) = 0.0 INT04940
4060 WRITE(NPRT,9127) INT04950
9127 FORMAT('1CHARGE DENSITY'///1X,9X,'XR',11X,'RHO1',10X,'RQO1',11X, INT04960
*'RHO2',10X,'RQO2') INT04970
C PRINT *, 'NCD:' , NCD
C PRINT *, 'K:' , K
C PRINT *, 'IC:' , IC
WRITE(NPRT,9128)(XR(K),RHO(1,K),RQO(1,K),RHO(2,K),RQO(2,K),K=1,NCDINT04980
*,IC) INT04990
PRINT *, 'NR:' , NR
9128 FORMAT(1X,1P,5E14.4) INT05000
WRITE(NDSK,9126)(RHO(1,K),RHO(2,K),K=1,N2) INT05010
9129 FORMAT(2E16.7) INT05020
REWIND NDSK INT05030
4070 CONTINUE INT05040
B(1) = 0.0 INT05050
B(2) = 1.0 INT05060
Z(1) = ZA(1) INT05070
Z(2) = ZA(2) INT05080
ZE = Z(1) INT05090
IF (ZE.EQ.0.0) GO TO 5040 INT05100
C **********************************************************************INT05110
C CALC OF DIELECTRIC RESPONSE FUNCTION INT05120
C **********************************************************************INT05130
DO 5010 I = 1,NIONS INT05140
DO 5010 J = 1,NIONS INT05150
H(MINT(I,J),I,J) = (H(MINT(I,J),I,J)-1.)*.5 INT05160
5010 CALL FFT3S(F0,H(1,I,J),M1,RL,TH(1,I,J),1) INT05170
SPACT = PI2/(2.*FNN-1.)/SPAC1 INT05180
TK = 1.0 INT05190
DO 5030 K = 1,N INT05200
Y1(K) = TK*SPACT INT05210
SUM = 0.0 INT05220
DO 5020 I = 1,NIONS INT05230
DO 5020 J = 1,NIONS INT05240
5020 SUM = SUM + C(I)*C(J)*Z(I)*Z(J)*TH(K,I,J) INT05250
Y1K2 = Y1(K)**2 INT05260
DRF(K) = 1.-(FKFK/Y1K2)*(1.+SUM/FC) INT05270
DRDF(K) = 1.-FKFK/(FKFK+Y1K2) INT05280
5030 TK = TK+1. INT05290
WRITE(NPRT,9130) INT05300
9130 FORMAT('1DIELECTRIC RESPONSE FUNCTION'///1X,3(9X,'YK',12X,'DRF', INT05310
*11X,'DRDF')) INT05320
WRITE(NPRT,9131)(Y1(K),DRF(K),DRDF(K),K=1,NR,IR) INT05330
9131 FORMAT(1X,1P,9E14.4) INT05340
5040 CONTINUE
C5040 CALL TIMER(DATE,TIME,IVIRT,ITOT) INT05350
C RVIRT=FLOAT(IVIRT)*1.E-6 INT05360
C WRITE(NPRT,9132)TIME,DATE,RVIRT INT05370
WRITE(NPRT,9132)date_string INT05370
C9132 FORMAT(//////////'END OF EXECUTION AT',A8,' ON ',A8,5X,F8.3, INT05380
C *' SECONDS USED') INT05390
9132 FORMAT(//////////'END EXECUTION ON ',A20) INT05390
IF (ABS(CHARGE-0.0).LT.1.E-04) GO TO 120 INT05400
C GOTO 40 INT05410
C Program loop
5050 CONTINUE INT05420
STOP INT05430
END INT05440
C ****Program stops and ends ****************************************
C************************ SUBROUTINES *******************************
C************************ ADJ ***************************************
SUBROUTINE ADJ(A,A1,M,SPAC1) INT05450
S1 = A/SPAC1 INT05460
L = S1+1 INT05470
S2 = L INT05480
IF(S2-S1.GE.0.5) GO TO 10 INT05490
A1 = S2*SPAC1 INT05500
M = L INT05510
GO TO 20 INT05520
10 A1 = (S2-1.)*SPAC1 INT05530
M = L-1 INT05540
20 CONTINUE INT05550
RETURN INT05560
END
C************************ TRAP ***************************************
SUBROUTINE TRAP(N1,N11,I,J,SUM1,SUM2,SUM3) INT05580
DIMENSION H(2048,2,2),XR(2048) INT05590
COMMON/JAY/ H,XR INT05600
IF (N11.EQ.N1) GO TO 20 INT05610
SUM1 = (H(N1,I,J)*XR(N1)+H(N11,I,J)*XR(N11))*.5 INT05620
SUM2 = (H(N1,I,J)*XR(N1)**2+H(N11,I,J)*XR(N11)**2)*.5 INT05630
SUM3 = (H(N1,I,J)*XR(N1)**4+H(N11,I,J)*XR(N11)**4)*.5 INT05640
L1 = N1+1 INT05650
L2 = N11-1 INT05660
IF (N11.EQ.L1) GO TO 30 INT05670
DO 10 K = L1,L2 INT05680
SUM1 = SUM1 + H(K,I,J)*XR(K) INT05690
SUM3 = SUM3 + H(K,I,J)*XR(K)**4 INT05700
10 SUM2 = SUM2 + H(K,I,J)*XR(K)**2 INT05710
GO TO 30 INT05720
20 SUM1 = 0.0 INT05730
SUM2 = 0.0 INT05740
SUM3 = 0.0 INT05750
30 RETURN INT05760
END
C********************** SIMPSON **************************************
SUBROUTINE SIMP(NC,N,I,J,SUM1,SUM2,SUM3) INT05780
DIMENSION H(2048,2,2),XR(2048) INT05790
COMMON /JAY/ H,XR INT05800
SUM1 = H(NC,I,J)*XR(NC) INT05810
SUM2 = SUM1*XR(NC) INT05820
SUM3 = SUM2*XR(NC)**2 INT05830
C PRINT *, 'NC:',NC
C Setting NC to 1 for testing??
NC = 1
N2 = (N-NC-2)/2
C PRINT *, '**N2:', N2
DO 10 K = 1,N2 INT05850
K4 = NC+2*K-1 INT05860
K5 = K4+1 INT05870
K6 = NC+2*N2+1 INT05880
K7 = K6+1 INT05890
SUM1 = SUM1 + 4.*H(K4,I,J)*XR(K4)+2.*H(K5,I,J)*XR(K5) INT05900
SUM3 = SUM3 + 4.*H(K4,I,J)*XR(K4)**4+2.*H(K5,I,J)*XR(K5)**4 INT05910
10 SUM2 = SUM2 + 4.*H(K4,I,J)*XR(K4)**2+2.*H(K5,I,J)*XR(K5)**2 INT05920
SUM1 = SUM1 + 4.*H(K6,I,J)*XR(K6)+2.*H(K7,I,J)*XR(K7) INT05930
SUM2 = SUM2 + 4.*H(K6,I,J)*XR(K6)**2+2.*H(K7,I,J)*XR(K7)**2 INT05940
SUM3 = SUM3 + 4.*H(K6,I,J)*XR(K6)**4+2.*H(K7,I,J)*XR(K7)**4 INT05950
RETURN INT05960
END
C**************** Fast Fourier Transform *************************
SUBROUTINE FFT3S(F0,F,MM,RL,T,MODE) INT05990
C FAST FOURIER TRANSFORM OF 3-DIMENSIONAL CENTROSYMMETRIC FUNCTION INT06000
DIMENSION F(2048),T(1) INT06010
COMMON /FDATA/ N,N2,FF,RTTWO,NC,NS,ND,NR INT06020
COMMON /FWORK/ W(12288) INT06030
C DIMENSION OF W SHOULD BE .GE. 3*N INT06040
C FIXED DATA PREPARATION INT06050
DATA PI/3.141593/,M/-1/ INT06060
MD = MM+1 INT06070
CALL SETFT(MD,M) INT06080
N = 2**MM INT06090
RN = FLOAT(N) INT06100
DR = RL/RN INT06110
RL3 = RL*RL*RL INT06120
C = 4.*RL3*FF/RN INT06130
CC = 0.0 INT06140
A = 1.0 INT06150
IF(IABS(MODE)-2)202,200,201 INT06160
200 CC = 0.5*PI*DR*DR*DR*F(1) INT06170
A = .125*RN*RN*RN/(RL3*RL3) INT06180
GOTO 202 INT06190
201 CC = F0 INT06200
202 IF(MODE.GT.0)GOTO 203 INT06210
C = 1.0/C INT06220
CC = A*CC INT06230
203 CONTINUE INT06240
C COPY INPUT VECTOR INTO WORKING STORAGE INT06250
DO 204 I=1,N INT06260
204 W(ND+I+1) = C*FF*F(I)*I INT06270
C Eric Starts debugging here
C RETURN
C END
CALL RSA(M) INT06280
C COPY INTO OUTPUT VECTOR
C N eq 2048
C DO 205 I=1,N
DO 205 I=1,1
205 T(I) = W(NR+I+1)/FLOAT(I)+CC INT06310
RETURN INT06320
END INT06330
C**************************** SETFT **********************************
SUBROUTINE SETFT(MM,M) INT06340
C PREPARE FIXED DATA FOR FAST FOURIER TRANSFORM INT06350
COMMON /FDATA/ N,N2,F,RTTWO,NC,NS,NDATA,NRES INT06360
COMMON /FWORK/ W(12288) INT06370
IF(MM.LT.0)RETURN INT06380
IF(MM.EQ.M)RETURN INT06390
M = MM INT06400
N = 2**M INT06410
N2 = N/2 INT06420
F = 1.0/FLOAT(N) INT06430
DA = 6.2831853071796D0*F INT06440
RTTWO = SQRT(2.0) INT06450
F = SQRT(F) INT06460
N1 = (N2-1)/2 INT06470
NC = 0 INT06480
NS = N1 INT06490
NDATA = N1+N1 INT06500
IF(N1.LE.0)RETURN INT06510
DO 10 I=1,N1 INT06520
A = FLOAT(I)*DA INT06530
W(I) = COS(A) INT06540
10 W(N1+I) = SIN(A) INT06550
RETURN INT06560
END
C************************** RSA *************************************
SUBROUTINE RSA(M) INT06580
C REAL ODD ANALYSIS OR SYNTHESIS INT06590
COMMON /FDATA/ N,N2,F,RTTWO,NC,NS,NDATA,NRES INT06600
COMMON /FWORK/ W(12288) INT06610
NQ = N2 INT06620
NIB = NDATA +1 INT06630
NOB = NDATA+N2+2 INT06640
DO 200 L = 1,M INT06650
NIM = NIB+NQ INT06660
NIE = NIM+NQ INT06670
NQH = NQ/2 INT06680
NQL = (NQ-1)/2 INT06690
NOM = NOB+NQL+1 INT06700
C TPRIME = 0 INT06710
IF(NQL.EQ.0)GOTO 20 INT06720
DO 10 IT = 1,NQL INT06730
W(NOB+IT)=W(NIB+IT)-W(NIM-IT) INT06740
10 W(NOM+IT) = W(NIB+IT)+W(NIM-IT) INT06750
20 IF(NQH.NE.NQL) W(NOM) = 2.0*W(NIB+NQH)
C ?? 0.LT.TPRIME.LT.NP/2. INT06770
NO1 = NQ INT06780
NO2 = N2-NQ INT06790
IF(NO1-NO2)40,80,120 INT06800
40 NI=NO1+NO1 INT06810
W(NOB+NO1) = W(NIB+NI)+W(NIM+NI) INT06820
W(NOB+NO2) = -W(NIB+NI)+W(NIM+NI) INT06830
IF(NQL.EQ.0)GOTO 60 INT06840
CC = W(NC+NO1) INT06850
SS = W(NS+NO1) INT06860
DO 50 IT = 1,NQL INT06870
RE = CC*W(NIE+NI-IT)-SS*W(NIM+NI-IT) INT06880
AI = SS*W(NIE+NI-IT)+CC*W(NIM+NI-IT) INT06890
W(NOM+NO1+IT) = W(NIM+NI+IT)-RE INT06900
W(NOM+NO2+IT) = W(NIM+NI+IT)+RE INT06910
W(NOB+NO1+IT) = W(NIB+NI+IT)+AI INT06920
50 W(NOB+NO2+IT) = -W(NIB+NI+IT)+AI INT06930
60 IF(NQH.EQ.NQL)GOTO 70 INT06940
NR = NO1/2 INT06950
W(NOM+NO1) = 2.0*(W(NS+NR)*W(NIM+NI+NQH)+W(NC+NR)*W(NIB+NI+NQH)) INT06960
W(NOM+NO2) = 2.0*(W(NC+NR)*W(NIM+NI+NQH)-W(NS+NR)*W(NIB+NI+NQH)) INT06970
70 NO1 = NO1+NQ INT06980
NO2 = NO2-NQ INT06990
IF(NO1-NO2)40,80,120 INT07000
80 W(NOB+NO1)=W(NIM) INT07010
IF(NQL.EQ.0)GOTO 100 INT07020
DO 90 IT = 1,NQL INT07030
W(NOM+NO1+IT) = W(NIM+IT) INT07040
90 W(NOB+NO1+IT) = W(NIE-IT) INT07050
100 IF(NQH.NE.NQL)W(NOM+NO1) = RTTWO*W(NIM+NQH) INT07060
120 NT = NIB INT07070
NIB = NOB INT07080
NOB = NT INT07090
NQ = NQH INT07100
200 CONTINUE INT07110
NRES = NIB-1 INT07120
RETURN INT07130
END INT07140