Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
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
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)