From 191f51ecd7ae8d4d1ed1299f04f8339def8e1891 Mon Sep 17 00:00:00 2001 From: kamischi <karl-michael.schindler@web.de> Date: Fri, 23 Aug 2024 11:29:12 +0200 Subject: [PATCH] add f77 test case --- tests/SetEpsTestCasesFromScratch/f77/Makefile | 20 + tests/SetEpsTestCasesFromScratch/f77/README | 13 + .../f77/change_working_dir.for | 25 + tests/SetEpsTestCasesFromScratch/f77/doRun.sh | 15 + tests/SetEpsTestCasesFromScratch/f77/eels.for | 877 ++++++++++++++++++ .../f77/epsLog/seteps001.log | Bin 0 -> 15090 bytes .../f77/epsLog/seteps004.log | Bin 0 -> 15090 bytes .../f77/epsLog/seteps006.log | Bin 0 -> 24947 bytes 8 files changed, 950 insertions(+) create mode 100644 tests/SetEpsTestCasesFromScratch/f77/Makefile create mode 100644 tests/SetEpsTestCasesFromScratch/f77/README create mode 100755 tests/SetEpsTestCasesFromScratch/f77/change_working_dir.for create mode 100755 tests/SetEpsTestCasesFromScratch/f77/doRun.sh create mode 100644 tests/SetEpsTestCasesFromScratch/f77/eels.for create mode 100644 tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps001.log create mode 100644 tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps004.log create mode 100644 tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps006.log diff --git a/tests/SetEpsTestCasesFromScratch/f77/Makefile b/tests/SetEpsTestCasesFromScratch/f77/Makefile new file mode 100644 index 0000000..246d122 --- /dev/null +++ b/tests/SetEpsTestCasesFromScratch/f77/Makefile @@ -0,0 +1,20 @@ +# the fortran compiler +FC = gfortran + +# the options for the fortran compiler +FFLAGS = -g -gdwarf-2 -fbounds-check -fcheck=all -O0 + +# the implicit rule for compiling for files +%.o: %.for ; $(FC) $(FFLAGS) -c -o $@ $< + +all: eels + +eels: change_working_dir.o eels.for + $(FC) $(FFLAGS) -o eels eels.for change_working_dir.o + +clean: + rm -f *.o + rm -rf *.dSYM + rm -f eels + +.PHONY: all clean diff --git a/tests/SetEpsTestCasesFromScratch/f77/README b/tests/SetEpsTestCasesFromScratch/f77/README new file mode 100644 index 0000000..d483945 --- /dev/null +++ b/tests/SetEpsTestCasesFromScratch/f77/README @@ -0,0 +1,13 @@ +Command for compilation: + +> make + +Command for execution: + +> doRun.sh + +Cleanup: + +> make clean + +KMS \ No newline at end of file diff --git a/tests/SetEpsTestCasesFromScratch/f77/change_working_dir.for b/tests/SetEpsTestCasesFromScratch/f77/change_working_dir.for new file mode 100755 index 0000000..6841ba8 --- /dev/null +++ b/tests/SetEpsTestCasesFromScratch/f77/change_working_dir.for @@ -0,0 +1,25 @@ + subroutine change_working_dir() + +C This routine gets the first argument of the commandline and takes it +C as the path to change the working directory +C used intrinsic routines: +C iarg returns the number of commandline arguments without the program cname. +C chdir changes the directory and returns 0 on success. +C trim removes blanks from strings. + + character(256) argument + integer status + + if (iargc() == 1) then + call getarg(1, argument) + status = chdir(trim(argument)) + if (status /= 0) then + write (*,*) '*** Change directory failed ***' + write (*,*) 'Directory tried: ', trim(argument) + write (*,*) 'Error code (see: man chdir): ', status + write (*,*) 'Continuing in the start directory' + endif + endif + + return + end diff --git a/tests/SetEpsTestCasesFromScratch/f77/doRun.sh b/tests/SetEpsTestCasesFromScratch/f77/doRun.sh new file mode 100755 index 0000000..f5a8e51 --- /dev/null +++ b/tests/SetEpsTestCasesFromScratch/f77/doRun.sh @@ -0,0 +1,15 @@ +#!/bin/sh -v +cp ../inputFIles/eelsin001 eelsin +./eels +mv seteps.log epsLog/seteps001.log + +cp ../inputFIles/eelsin004 eelsin +./eels +mv seteps.log epsLog/seteps004.log + +cp ../inputFIles/eelsin006 eelsin +./eels +mv seteps.log epsLog/seteps006.log + +rm eelsin +rm EELSOU diff --git a/tests/SetEpsTestCasesFromScratch/f77/eels.for b/tests/SetEpsTestCasesFromScratch/f77/eels.for new file mode 100644 index 0000000..768825c --- /dev/null +++ b/tests/SetEpsTestCasesFromScratch/f77/eels.for @@ -0,0 +1,877 @@ + PROGRAM EELS ABTI0030 +C ****************************************************************** ABTI0031 +C * * ABTI0032 +C * COMPUTE THE CLASSICAL EELS SPECTRUM OF AN ARBITRARY PLANE- * ABTI0033 +C * STATIFIED MEDIUM MADE FROM ISOTROPIC MATERIALS IN SPECULAR * ABTI0034 +C * GEOMETRY USING THE DIELECTRIC THEORY OF EELS. * ABTI0035 +C * * ABTI0036 +C ****************************************************************** ABTI0037 + PARAMETER(LMAX=100,JMAX=300,NT=5) ABTI0038 + LOGICAL RATION,USER ABTI0039 + CHARACTER CONTRL*10,NAME*10,COMMEN*72 ABTI0040 + DOUBLE PRECISION A,ACOEF,AERR,ALPHA,ARGMIN,ARGMAX,B,BCOEF,BETA, ABTI0041 + ,C1,C2,CCOEF,COSPSI,DLIMF,DW,DX,E0,ELLEPS,ENER,EPSINF,EPSMAC, ABTI0042 + ,FACRU,F,F0,F1,FPIC,FUN,OSC,PHIA,PHIB,PI,PREFAC,PSIA,PSII,QRAT, ABTI0043 + ,RERR,RU,SINPSI,T,TANPSI,TABLE,THETA,THICK,UM,WIDT,WMIN,WMAX,WN, ABTI0044 + ,WPIC,X,XMIN,XMAX,Z,Z1,Z2 ABTI0045 + COMPLEX EPS ABTI0046 + DIMENSION COMMEN(2),EPSINF(LMAX),NOS(LMAX),OSC(3,JMAX),TABLE(NT) ABTI0047 + DIMENSION NAME(LMAX) + COMMON/PARAM/ACOEF,BCOEF,CCOEF,ELLEPS,COSPSI,SINPSI,TANPSI, ABTI0048 + 1 RU,UM,DLIMF,WN,USER,RATION ABTI0049 + COMMON/MULAYR/EPS(LMAX),THICK(LMAX),ARGMIN,ARGMAX,EPSMAC, ABTI0050 + 2 LAYERS,NPER ABTI0051 + EXTERNAL FUN ABTI0052 + QRAT(X) = (1.0D0+X*(BETA+C1*X))/((1.0D0+X*(BETA+C2*X))* ABTI0053 + * (1.0D0+ALPHA*X)**2) ABTI0054 + DATA AERR/0.0D0/,RERR/1.0D-06/,F/0.0D0/,F1/0.0D0/ ABTI0055 + +C **** log modification start + open(unit = 99, file = 'seteps.log') +C **** log modification end + +C ABTI0056 +C *** MACHINE-DEPENDENT CONSTANTS ABTI0057 +C *** EPSMAC + 1.0 = EPSMAC , COSH(ARGMIN) = 1.0 , TANH(ARGMAX) = 1.0 ABTI0058 +C ABTI0059 + PI = 4.0D0*ATAN(1.0D0) ABTI0060 + EPSMAC = 1.0D0 ABTI0061 + 1 EPSMAC = EPSMAC/2.0D0 ABTI0062 + IF(1.0D0+EPSMAC.GT.1.0D0) GOTO 1 ABTI0063 + ARGMIN = SQRT(2.0D0*EPSMAC) ABTI0064 + ARGMAX = 0.5D0*LOG(2.0D0/EPSMAC) ABTI0065 +C ABTI0066 +C *** READ SPECTROMETER PARAMETERS ABTI0067 +C ABTI0068 + call change_working_dir() + OPEN(UNIT=11,FILE='EELSIN') ABTI0069 +C IMPACT ENERGY (EV) ABTI0070 + READ(11,*) E0 ABTI0071 +C INCIDENCE ANGLE (%) ABTI0072 + READ(11,*) THETA ABTI0073 +C ANGULAR APERTURES OF THE ELLIPTIC DETECTOR (%) ABTI0074 + READ(11,*) PHIA ABTI0075 + READ(11,*) PHIB ABTI0076 +C ENERGY-LOSS INTERVAL AND STEP SIZE (CM**-1) ABTI0077 + READ(11,*) WMIN ABTI0078 + READ(11,*) WMAX ABTI0079 + READ(11,*) DW ABTI0080 +C COMMENT LINES ABTI0081 + READ(11,'(A72)') (COMMEN(K),K=1,2) ABTI0082 +C ABTI0083 + WRITE(6,100) E0,THETA,PHIA,PHIB,WMIN,WMAX,DW,(COMMEN(K),K=1,2) ABTI0084 + IF(PHIA.LE.0.0D0 .OR. PHIB.LE.0.0D0) STOP '*** WRONG INPUT ***' ABTI0085 + IF(E0.LE.0.0D0 .OR. THETA+PHIA.GE.90.0D0) STOP '*** BAD INPUT ***'ABTI0086 + DLIMF = 0.0D0 ABTI0087 + RATION = .FALSE. ABTI0088 +C ABTI0089 +C *** READ TARGET SPECIFICATIONS ABTI0090 +C ABTI0091 + READ(11,*) LAYERS,NPER ABTI0092 + USER = LAYERS.EQ.0 ABTI0093 + IF(USER) GOTO 15 ABTI0094 + NEPS = LAYERS ABTI0095 + IF(NPER.EQ.-1) THEN ABTI0096 + NEPS = LAYERS+1 ABTI0097 + NPER = 1 ABTI0098 + WRITE(6,*) 'THE SUBSTRATE IS A ANISOTROPIC UNIAXIAL MATERIAL' ABTI0099 + ENDIF ABTI0100 + IF(LAYERS.LT.0 .OR. NPER.LT.1 .OR. NPER.GT.LAYERS) STOP ABTI0101 + . '*** INVALID TARGET SPECIFICATIONS ***' ABTI0102 + IF(NEPS.GT.LMAX) STOP '*** TOO MANY LAYERS ***' ABTI0103 + WRITE(6,101) LAYERS,NPER ABTI0104 + IF(LAYERS.EQ.1) RATION = .TRUE. ABTI0105 + LSTART = LAYERS-NPER+1 ABTI0106 + JOS = 0 ABTI0107 + DO 10 L=1,NEPS ABTI0108 + IF(L.LE.LAYERS) READ(11,102) NAME(L),THICK(L) ABTI0109 + READ(11,*) EPSINF(L),NOS(L) ABTI0110 + WRITE(6,103) +C IF(L.EQ.LSTART) WRITE(6,103) ABTI0111 + IF(NOS(L).LE.0) THEN ABTI0112 + IF(L.LE.LAYERS) WRITE(6,104) L,NAME(L),THICK(L),EPSINF(L) ABTI0113 + IF(L.GT.LAYERS) WRITE(6,105) EPSINF(L) ABTI0114 + ELSE ABTI0115 + DO 5 J=1,NOS(L) ABTI0116 + JOS = JOS+1 ABTI0117 + IF(JOS.GT.JMAX) STOP '*** TOO MANY OSCILLATORS ***' ABTI0118 + READ(11,*) (OSC(K,JOS),K=1,3) ABTI0119 + IF((J==NOS(L)/2+1).AND.(NOS(L).GT.1)) THEN + WRITE(6,114) + WRITE(6,115) + ENDIF + IF(J.EQ.1) THEN ABTI0120 + IF(L.LE.LAYERS) WRITE(6,104) L,NAME(L),THICK(L), ABTI0121 + , EPSINF(L),(OSC(I,JOS),I=1,3) ABTI0122 + IF(L.GT.LAYERS) WRITE(6,105) ABTI0123 + . EPSINF(L),(OSC(I,JOS),I=1,3) ABTI0124 + ELSE ABTI0125 + WRITE(6,106) (OSC(I,JOS),I=1,3) ABTI0126 + ENDIF ABTI0127 + 5 CONTINUE ABTI0128 + ENDIF ABTI0129 + 10 CONTINUE ABTI0130 + WRITE(6,*) ABTI0131 + READ(11,102,END=15) CONTRL ABTI0132 + IF(CONTRL.EQ.'IMAGE') THEN ABTI0133 +C *** IMAGE-CHARGE SCREENING FACTOR ABTI0134 + IF(LAYERS.EQ.1 .AND. NEPS.EQ.2) THEN ABTI0135 + DLIMF = SQRT(EPSINF(1)*EPSINF(2)) ABTI0136 + ELSE ABTI0137 + DLIMF = EPSINF(1) ABTI0138 + ENDIF ABTI0139 + DLIMF = (DLIMF-1.0D0)/(DLIMF+1.0D0) ABTI0140 + ENDIF ABTI0141 +C ABTI0142 +C *** INITIALIZE CONSTANTS ABTI0143 +C ABTI0144 + 15 OPEN(UNIT=12,FILE='EELSOU') ABTI0145 + WRITE(12,107) E0,THETA,PHIA,PHIB,COMMEN(1) ABTI0146 + NW = 1+INT((WMAX-WMIN)/DW) ABTI0147 + NOUT = 1+NW/20 ABTI0148 + ENER = 8.065D+03*E0 ABTI0149 + PSIA = PHIA/180.0D0*PI ABTI0150 + PSII = THETA/180.0D0*PI ABTI0151 + COSPSI = COS(PSII) ABTI0152 + SINPSI = SIN(PSII) ABTI0153 + TANPSI = TAN(PSII) ABTI0154 + PREFAC = SQRT(2.555D+05/E0)/(1.37D+02*COSPSI) ABTI0155 + FACRU = PSIA/COSPSI*SQRT(0.2624664D0*E0) ABTI0156 + ELLEPS = (1.0D0-PHIA/PHIB)*(1.0D0+PHIA/PHIB) ABTI0157 + ACOEF = SINPSI**2+ELLEPS*COSPSI**2 ABTI0158 + BCOEF = SINPSI*COSPSI ABTI0159 + IF(DLIMF.GT.0.0D0) THEN ABTI0160 + RATION = .FALSE. ABTI0161 + WRITE(6,108) DLIMF ABTI0162 +C *** DLIMF : HALF THE LENGTH UNIT IMPOSED BY THE IMAGE FORCE ABTI0163 + DLIMF = 1.80D0*DLIMF/(E0*COSPSI**2) ABTI0164 + ENDIF ABTI0165 + IF(.NOT.RATION) GOTO 35 ABTI0166 +C ABTI0167 +C *** SET UP COEFFICIENTS FOR THE RATIONAL APPROXIMATION TO THE INTEGRALABTI0168 +C ABTI0169 + WRITE(6,*) '==> SET UP A RATIONAL APPROXIMATION TO THE INTEGRAL' ABTI0170 + CALL QUANC8(FUN,0.0D0,PI/2.0D0,AERR,RERR,ALPHA,C1,NOFU,C2) ABTI0171 + ALPHA = (2.0D0/PI)**2*ALPHA ABTI0172 + C1 = 2.0D0/PI/SQRT(1.0D0-ELLEPS)*SINPSI*ALPHA**2 ABTI0173 + IF(C1.GT.0.99D0) GOTO 30 ABTI0174 + C2 = 3.0D0*ALPHA**2/(1.0D0-C1) ABTI0175 + C1 = C1*C2 ABTI0176 + XMIN = WMIN/(2.0D0*ENER*PSIA) ABTI0177 + XMAX = WMAX/(2.0D0*ENER*PSIA) ABTI0178 + IF(XMIN.LE.0.0D0) XMIN = 0.0D0 ABTI0179 + DX = MAX(0.02D0,(XMAX-XMIN)/NT) ABTI0180 + Z1 = 0.0D0 ABTI0181 + Z2 = 0.0D0 ABTI0182 + DO 20 I=1,NT ABTI0183 + X = XMIN+I*DX ABTI0184 + CALL QUEELS(X,F,AERR,RERR,FACRU) ABTI0185 + TABLE(I) = F ABTI0186 + F = F*(1.0D0+ALPHA*X)**2 ABTI0187 + IF(ABS(C2*F-C1).LT.C2*RERR) GOTO 20 ABTI0188 + Z = (1.0D0-F)/(C2*F-C1) ABTI0189 + IF(Z.LE.0.0D0) GOTO 20 ABTI0190 + Z1 = Z1+X*Z*(X**2-Z) ABTI0191 + Z2 = Z2+(X*Z)**2 ABTI0192 + 20 CONTINUE ABTI0193 + IF(Z2.EQ.0.0D0) GOTO 30 ABTI0194 + BETA = Z1/Z2 ABTI0195 + Z = 0.0D0 ABTI0196 + DO 25 I=1,NT ABTI0197 + X = XMIN+I*DX ABTI0198 + Z = Z+(TABLE(I)-QRAT(X))**2 ABTI0199 + 25 CONTINUE ABTI0200 + Z = SQRT(Z)/NT ABTI0201 + IF(Z.GT.5.0D-03) GOTO 30 ABTI0202 + WRITE(6,109) ALPHA,C1,C2,BETA,Z ABTI0203 + GOTO 35 ABTI0204 + 30 WRITE(6,*) '===> CANNOT DO IT' ABTI0205 + RATION = .FALSE. ABTI0206 +C ABTI0207 +C *** LOOP OVER THE ENERGY LOSSES ABTI0208 +C ABTI0209 + 35 WRITE(6,110) ABTI0210 + +C **** log modification start + write (99, '(i5, i5)') neps, layers + write (99, '(a)') mode + do i = 1, neps + write (99, '(a, g15.7, i5)') name(i), epsinf(i), nos(i) + do j = 1, nos(i) + write (99, '(3g15.7)') osc(1,j), osc(2,j), osc(3,j) + enddo + enddo + write (99, *) +C **** log modification end + + DO 50 IW=1,NW ABTI0211 + F0 = F1 ABTI0212 + F1 = F ABTI0213 + F = 0.0D0 ABTI0214 + WN = WMIN+(IW-1)*DW ABTI0215 + IF(WN.LT.0.0D0) GOTO 45 ABTI0216 + IF(WN.EQ.0.0D0) GOTO 40 ABTI0217 + IF(.NOT.USER) CALL SETEPS(NEPS,NOS,OSC,JOS,EPSINF,WN,NAME) ABTI0218 + X = WN/(2.0D0*ENER*PSIA) ABTI0219 + IF(RATION) THEN ABTI0220 + F = QRAT(X)*AIMAG(-2.0/(1.0+EPS(1))) ABTI0221 + ELSE ABTI0222 + CALL QUEELS(X,F,AERR,RERR,FACRU) ABTI0223 + ENDIF ABTI0224 + F = PREFAC*F/WN ABTI0225 + 40 WRITE(12,111) WN,F ABTI0226 +C *** LOCALIZE A PEAK USING A PARABOLIC INTERPOLATION ABTI0227 + IF(IW.LT.3) GOTO 45 ABTI0228 + IF(F1-F0.LE.AERR) GOTO 45 ABTI0229 + IF(F1-F.LE.AERR) GOTO 45 ABTI0230 + A = (F1-F0)+(F1-F) ABTI0231 + IF(A.LE.4.0D0*RERR*F1) GOTO 45 ABTI0232 + B = 0.5D0*(F1-F0+3.0D0*(F1-F)) ABTI0233 + T = B/A ABTI0234 + WPIC = WN-T*DW ABTI0235 + FPIC = F+0.5D0*B*T ABTI0236 + WIDT = SQRT(8.0D0*FPIC/A)*DW ABTI0237 + WRITE(6,112) WPIC,FPIC,WIDT ABTI0238 + 45 IF(MOD(IW,NOUT).EQ.0) WRITE(6,113) 100.0*IW/NW,WN,F ABTI0239 + 50 CONTINUE ABTI0240 + CLOSE(UNIT=11) ABTI0241 + CLOSE(UNIT=12) ABTI0242 + +C **** log modification start + close (unit = 99) +C **** log modification end + + STOP ABTI0243 + 100 FORMAT(' PROGRAM EELS (MARCH 1990)'/' E0 =',F6.2,' EV , THETA =',ABTI0244 + , F5.1,'% , PHIA =',F5.2,'% , PHIB =',F5.2,'%'/ ABTI0245 + . ' ENERGY LOSSES FROM',G11.4,' TO',G11.4,' , STEP =',G11.4,ABTI0246 + , ' CM**-1'//(1X,A72)) ABTI0247 + 101 FORMAT(I3,' LAYER(S), NPER =',I2//' L',2X,'MATERIAL',7X, ABTI0248 + , 'THICKNESS',5X,'EPSINF',4X,'WTO , WP',5X,'Q',7X,'GAM/WTO') ABTI0249 + 102 FORMAT(A10,D15.5) ABTI0250 + 103 FORMAT(1X,72('-')) ABTI0251 + 104 FORMAT(1X,I3,2X,A10,G15.3,F10.4,F12.4,F10.4,F9.4) ABTI0252 + 105 FORMAT(31X,F10.4,F12.4,F10.4,F9.4) ABTI0253 + 106 FORMAT(41X,F12.4,F10.4,F9.4) ABTI0254 + 107 FORMAT('E0 =',F6.2,' THETA =',F5.1,' PHIA =',F5.2,' PHIB =',F5.2/ ABTI0255 + . A72) ABTI0256 + 108 FORMAT(' ==> ELECTRON ATTRACTED BY AN IMAGE CHARGE =',F6.3) ABTI0257 + 109 FORMAT(5X,'ALPHA =',F9.4,4X,'C1 =',F9.4,4X,'C2 =',F9.4,4X, ABTI0258 + , 'BETA =',F9.4/5X,'ACCURACY =',E9.2) ABTI0259 + 110 FORMAT(//' RUN (%) WN (CM**-1) PCL(WN) (CM) |', ABTI0260 + , ' PEAK LOCATION AMPLITUDE WIDTH') ABTI0261 + 111 FORMAT(2E15.7) ABTI0262 + 112 FORMAT(40X,F10.2,D12.4,F10.2) ABTI0263 + 113 FORMAT(2X,F5.1,3X,F11.3,D14.5) ABTI0264 + 114 FORMAT(45X,'WLO , WP',5X,'Q',7X,'GAM/WLO') + 115 FORMAT(45X,28('-')) + END ABTI0265 + SUBROUTINE QUEELS(X,F,AERR,RERR,FACRU) ABTI0266 +C ****************************************************************** ABTI0267 +C * * ABTI0268 +C * PERFORM Q-SPACE INTEGRATION FOR COMPUTING THE EELS SPECTRUM OF * ABTI0269 +C * A ISOTROPIC TARGET USING POLAR COORDINATES. * ABTI0270 +C * * ABTI0271 +C * X IS THE DIMENSIONLESS ENERGY LOSS HBAR*OMEGA/(2*E0*PHIA) * ABTI0272 +C * AERR AND RERR ARE THE DESIRED ABSOLUTE AND RELATIVE ACCURACIES * ABTI0273 +C * FACRU*X IS THE UNITS OF WAVEVECTORS OMEGA/V_PERPENDICULAR * ABTI0274 +C * F IS THE Q-INTEGRAL MULTIPLIED BY (2/PI)**2 * ABTI0275 +C * * ABTI0276 +C ****************************************************************** ABTI0277 + LOGICAL RATION,USER ABTI0278 + DOUBLE PRECISION ACOEF,AERR,BCOEF,CCOEF,COSPSI,DLIMF,ELLEPS, ABTI0279 + ,ERROR,F,FACRU,FINT1,FINT2,FINT3,FLAG,RERR,RU,SINPSI,U1,U2,UM,UT, ABTI0280 + ,TANPSI,WN,X,Y ABTI0281 + DIMENSION ERROR(3),FLAG(3) ABTI0282 + COMMON/PARAM/ACOEF,BCOEF,CCOEF,ELLEPS,COSPSI,SINPSI,TANPSI, ABTI0283 + , RU,UM,DLIMF,WN,USER,RATION ABTI0284 + EXTERNAL FINT1,FINT2,FINT3 ABTI0285 + F = 0.0D0 ABTI0286 + IF(X.LE.0.0D0) RETURN ABTI0287 + RU = FACRU*X ABTI0288 + CCOEF = COSPSI**2/X ABTI0289 + UT = CCOEF-BCOEF ABTI0290 + U1 = ABS(UT) ABTI0291 + U2 = CCOEF+BCOEF ABTI0292 + IF(UT.GT.0.0D0) THEN ABTI0293 + CALL QUANC8(FINT1,0.0D0,U1,AERR,RERR,Y,ERROR(1),NOFU,FLAG(1)) ABTI0294 + F = Y ABTI0295 + ELSE ABTI0296 + FLAG(1) = 0.0D0 ABTI0297 + ENDIF ABTI0298 + IF(U2.GT.U1) THEN ABTI0299 + CALL QUANC8(FINT2,U1,U2,AERR,RERR,Y,ERROR(2),NOFU,FLAG(2)) ABTI0300 + F = F+Y ABTI0301 + ELSE ABTI0302 + FLAG(2) = 0.0D0 ABTI0303 + ENDIF ABTI0304 + IF(ABS(ACOEF).GT.X*(1.0D0-ELLEPS)*BCOEF) THEN ABTI0305 + UM = SQRT(CCOEF/X/(1.0D0-ELLEPS)+BCOEF**2/ACOEF) ABTI0306 + IF(UM.GT.U2) THEN ABTI0307 + CALL QUANC8(FINT3,U2,UM,AERR,RERR,Y,ERROR(3),NOFU,FLAG(3)) ABTI0308 + F = F+Y ABTI0309 + ENDIF ABTI0310 + IF(UM.LT.U1) THEN ABTI0311 + CALL QUANC8(FINT3,UM,U1,AERR,RERR,Y,ERROR(3),NOFU,FLAG(3)) ABTI0312 + F = F-Y ABTI0313 + ENDIF ABTI0314 + ELSE ABTI0315 + FLAG(3) = 0.0D0 ABTI0316 + ENDIF ABTI0317 + ISTOP = 0 ABTI0318 + DO 5 IE=1,3 ABTI0319 + IF(FLAG(IE).EQ.0.0D0) GOTO 5 ABTI0320 + WRITE(6,100) IE,FLAG(IE),ERROR(IE) ABTI0321 + IF(FLAG(IE)-AINT(FLAG(IE)).GT.0.5D-02) ISTOP = ISTOP+1 ABTI0322 + 5 CONTINUE ABTI0323 + IF(ISTOP.GT.0) STOP '*** EXECUTION ABORTED ***' ABTI0324 + F = (2.0D0/3.141592653589793238D0)**2*F ABTI0325 + RETURN ABTI0326 + 100 FORMAT(' +++ FLAG(',I1,') =',F10.5,', ERROR =',D11.4,' +++') ABTI0327 + END ABTI0328 + SUBROUTINE QUANC8(FUN,A,B,ABSERR,RELERR,RESULT,ERREST,NOFUN,FLAG) ABTI0329 +C ABTI0330 +C ESTIMATE THE INTEGRAL OF FUN(X) FROM A TO B ABTI0331 +C TO A USER PROVIDED TOLERANCE. ABTI0332 +C AN AUTOMATIC ADAPTIVE ROUTINE BASED ON ABTI0333 +C THE 8-PANEL NEWTON-COTES RULE (G. FORSYTHE ET AL, 1977, P. 92) ABTI0334 +C ABTI0335 +C INPUT .. ABTI0336 +C ABTI0337 +C FUN THE NAME OF THE INTEGRAND FUNCTION SUBPROGRAM FUN(X). ABTI0338 +C A THE LOWER LIMIT OF INTEGRATION. ABTI0339 +C B THE UPPER LIMIT OF INTEGRATION.(B MAY BE LESS THAN A.) ABTI0340 +C RELERR A RELATIVE ERROR TOLERANCE. (SHOULD BE NON-NEGATIVE) ABTI0341 +C ABSERR AN ABSOLUTE ERROR TOLERANCE. (SHOULD BE NON-NEGATIVE) ABTI0342 +C ABTI0343 +C OUTPUT .. ABTI0344 +C ABTI0345 +C RESULT AN APPROXIMATION TO THE INTEGRAL HOPEFULLY SATISFYING THE ABTI0346 +C LEAST STRINGENT OF THE TWO ERROR TOLERANCES. ABTI0347 +C ERREST AN ESTIMATE OF THE MAGNITUDE OF THE ACTUAL ERROR. ABTI0348 +C NOFUN THE NUMBER OF FUNCTION VALUES USED IN CALCULATION OF RESULT.ABTI0349 +C FLAG A RELIABILITY INDICATOR. IF FLAG IS ZERO, THEN RESULT ABTI0350 +C PROBABLY SATISFIES THE ERROR TOLERANCE. IF FLAG IS ABTI0351 +C XXX.YYY , THEN XXX = THE NUMBER OF INTERVALS WHICH HAVE ABTI0352 +C NOT CONVERGED AND 0.YYY = THE FRACTION OF THE INTERVAL ABTI0353 +C LEFT TO DO WHEN THE LIMIT ON NOFUN WAS APPROACHED. ABTI0354 +C ABTI0355 + DOUBLE PRECISION FUN, A, B, ABSERR, RELERR, RESULT, ERREST, FLAG ABTI0356 + DOUBLE PRECISION W0,W1,W2,W3,W4,AREA,X0,F0,STONE,STEP,COR11,TEMP ABTI0357 + DOUBLE PRECISION QPREV,QNOW,QDIFF,QLEFT,ESTERR,TOLERR ABTI0358 + DOUBLE PRECISION QRIGHT(31),F(16),X(16),FSAVE(8,30),XSAVE(8,30) ABTI0359 + DOUBLE PRECISION DABS,DMAX1 ABTI0360 + INTEGER NOFUN ABTI0361 + INTEGER LEVMIN,LEVMAX,LEVOUT,NOMAX,NOFIN,LEV,NIM,I,J ABTI0362 +C ABTI0363 +C *** STAGE 1 *** GENERAL INITIALIZATION ABTI0364 +C SET CONSTANTS. ABTI0365 +C ABTI0366 + LEVMIN = 1 ABTI0367 + LEVMAX = 30 ABTI0368 + LEVOUT = 6 ABTI0369 + NOMAX = 5000 ABTI0370 + NOFIN = NOMAX - 8*(LEVMAX-LEVOUT+2**(LEVOUT+1)) ABTI0371 +C ABTI0372 +C TROUBLE WHEN NOFUN REACHES NOFIN ABTI0373 +C ABTI0374 + W0 = 3956.0D0 / 14175.0D0 ABTI0375 + W1 = 23552.0D0 / 14175.0D0 ABTI0376 + W2 = -3712.0D0 / 14175.0D0 ABTI0377 + W3 = 41984.0D0 / 14175.0D0 ABTI0378 + W4 = -18160.0D0 / 14175.0D0 ABTI0379 +C ABTI0380 +C INITIALIZE RUNNING SUMS TO ZERO. ABTI0381 +C ABTI0382 + FLAG = 0.0D0 ABTI0383 + RESULT = 0.0D0 ABTI0384 + COR11 = 0.0D0 ABTI0385 + ERREST = 0.0D0 ABTI0386 + AREA = 0.0D0 ABTI0387 + NOFUN = 0 ABTI0388 + IF (A .EQ. B) RETURN ABTI0389 +C ABTI0390 +C *** STAGE 2 *** INITIALIZATION FOR FIRST INTERVAL ABTI0391 +C ABTI0392 + LEV = 0 ABTI0393 + NIM = 1 ABTI0394 + X0 = A ABTI0395 + X(16) = B ABTI0396 + QPREV = 0.0D0 ABTI0397 + F0 = FUN(X0) ABTI0398 + STONE = (B - A) / 16.0D0 ABTI0399 + X(8) = (X0 + X(16)) / 2.0D0 ABTI0400 + X(4) = (X0 + X(8)) / 2.0D0 ABTI0401 + X(12) = (X(8) + X(16)) / 2.0D0 ABTI0402 + X(2) = (X0 + X(4)) / 2.0D0 ABTI0403 + X(6) = (X(4) + X(8)) / 2.0D0 ABTI0404 + X(10) = (X(8) + X(12)) / 2.0D0 ABTI0405 + X(14) = (X(12) + X(16)) / 2.0D0 ABTI0406 + DO 25 J = 2, 16, 2 ABTI0407 + F(J) = FUN(X(J)) ABTI0408 + 25 CONTINUE ABTI0409 + NOFUN = 9 ABTI0410 +C ABTI0411 +C *** STAGE 3 *** CENTRAL CALCULATION ABTI0412 +C REQUIRES QPREV,X0,X2,X4,...,X16,F0,F2,F4,...,F16. ABTI0413 +C CALCULATES X1,X3,...X15, F1,F3,...F15,QLEFT,QRIGHT,QNOW,QDIFF,AREA. ABTI0414 +C ABTI0415 + 30 X(1) = (X0 + X(2)) / 2.0D0 ABTI0416 + F(1) = FUN(X(1)) ABTI0417 + DO 35 J = 3, 15, 2 ABTI0418 + X(J) = (X(J-1) + X(J+1)) / 2.0D0 ABTI0419 + F(J) = FUN(X(J)) ABTI0420 + 35 CONTINUE ABTI0421 + NOFUN = NOFUN + 8 ABTI0422 + STEP = (X(16) - X0) / 16.0D0 ABTI0423 + QLEFT = (W0*(F0 + F(8)) + W1*(F(1)+F(7)) + W2*(F(2)+F(6)) ABTI0424 + 1 + W3*(F(3)+F(5)) + W4*F(4)) * STEP ABTI0425 + QRIGHT(LEV+1)=(W0*(F(8)+F(16))+W1*(F(9)+F(15))+W2*(F(10)+F(14)) ABTI0426 + 1 + W3*(F(11)+F(13)) + W4*F(12)) * STEP ABTI0427 + QNOW = QLEFT + QRIGHT(LEV+1) ABTI0428 + QDIFF = QNOW - QPREV ABTI0429 + AREA = AREA + QDIFF ABTI0430 +C ABTI0431 +C *** STAGE 4 *** INTERVAL CONVERGENCE TEST ABTI0432 +C ABTI0433 + ESTERR = DABS(QDIFF) / 1023.0D0 ABTI0434 + TOLERR = DMAX1(ABSERR,RELERR*DABS(AREA)) * (STEP/STONE) ABTI0435 + IF (LEV .LT. LEVMIN) GO TO 50 ABTI0436 + IF (LEV .GE. LEVMAX) GO TO 62 ABTI0437 + IF (NOFUN .GT. NOFIN) GO TO 60 ABTI0438 + IF (ESTERR .LE. TOLERR) GO TO 70 ABTI0439 +C ABTI0440 +C *** STAGE 5 *** NO CONVERGENCE ABTI0441 +C LOCATE NEXT INTERVAL. ABTI0442 +C ABTI0443 + 50 NIM = 2*NIM ABTI0444 + LEV = LEV+1 ABTI0445 +C ABTI0446 +C STORE RIGHT HAND ELEMENTS FOR FUTURE USE. ABTI0447 +C ABTI0448 + DO 52 I = 1, 8 ABTI0449 + FSAVE(I,LEV) = F(I+8) ABTI0450 + XSAVE(I,LEV) = X(I+8) ABTI0451 + 52 CONTINUE ABTI0452 +C ABTI0453 +C ASSEMBLE LEFT HAND ELEMENTS FOR IMMEDIATE USE. ABTI0454 +C ABTI0455 + QPREV = QLEFT ABTI0456 + DO 55 I = 1, 8 ABTI0457 + J = -I ABTI0458 + F(2*J+18) = F(J+9) ABTI0459 + X(2*J+18) = X(J+9) ABTI0460 + 55 CONTINUE ABTI0461 + GO TO 30 ABTI0462 +C ABTI0463 +C *** STAGE 6 *** TROUBLE SECTION ABTI0464 +C NUMBER OF FUNCTION VALUES IS ABOUT TO EXCEED LIMIT. ABTI0465 +C ABTI0466 + 60 NOFIN = 2*NOFIN ABTI0467 + LEVMAX = LEVOUT ABTI0468 + FLAG = FLAG + (B - X0) / (B - A) ABTI0469 + GO TO 70 ABTI0470 +C ABTI0471 +C CURRENT LEVEL IS LEVMAX. ABTI0472 +C ABTI0473 + 62 FLAG = FLAG + 1.0D0 ABTI0474 +C ABTI0475 +C *** STAGE 7 *** INTERVAL CONVERGED ABTI0476 +C ADD CONTRIBUTIONS INTO RUNNING SUMS. ABTI0477 +C ABTI0478 + 70 RESULT = RESULT + QNOW ABTI0479 + ERREST = ERREST + ESTERR ABTI0480 + COR11 = COR11 + QDIFF / 1023.0D0 ABTI0481 +C ABTI0482 +C LOCATE NEXT INTERVAL. ABTI0483 +C ABTI0484 + 72 IF (NIM .EQ. 2*(NIM/2)) GO TO 75 ABTI0485 + NIM = NIM/2 ABTI0486 + LEV = LEV-1 ABTI0487 + GO TO 72 ABTI0488 + 75 NIM = NIM + 1 ABTI0489 + IF (LEV .LE. 0) GO TO 80 ABTI0490 +C ABTI0491 +C ASSEMBLE ELEMENTS REQUIRED FOR THE NEXT INTERVAL. ABTI0492 +C ABTI0493 + QPREV = QRIGHT(LEV) ABTI0494 + X0 = X(16) ABTI0495 + F0 = F(16) ABTI0496 + DO 78 I = 1, 8 ABTI0497 + F(2*I) = FSAVE(I,LEV) ABTI0498 + X(2*I) = XSAVE(I,LEV) ABTI0499 + 78 CONTINUE ABTI0500 + GO TO 30 ABTI0501 +C ABTI0502 +C *** STAGE 8 *** FINALIZE AND RETURN ABTI0503 +C ABTI0504 + 80 RESULT = RESULT + COR11 ABTI0505 +C ABTI0506 +C MAKE SURE ERREST NOT LESS THAN ROUNDOFF LEVEL. ABTI0507 +C ABTI0508 + IF (ERREST .EQ. 0.0D0) RETURN ABTI0509 + 82 TEMP = DABS(RESULT) + ERREST ABTI0510 + IF (TEMP .NE. DABS(RESULT)) RETURN ABTI0511 + ERREST = 2.0D0*ERREST ABTI0512 + GO TO 82 ABTI0513 + END ABTI0514 + SUBROUTINE SETEPS(NEPS,NOS,OSC,JOS,EPSINF,WN,NAME) ABTI0515 +C ****************************************************************** ABTI0516 +C * * ABTI0517 +C * SET UP LONG-WAVELENGTH DIELECTRIC FUNCTIONS OF THE LAYERS FOR * ABTI0518 +C * THE PRESENT FREQUENCY WN (IN CM**-1) * ABTI0519 +C * * ABTI0520 +C ****************************************************************** ABTI0521 + PARAMETER(LMAX=100) ABTI0522 + CHARACTER NAME*10 + DOUBLE PRECISION ARGMIN,ARGMAX,EPSINF,EPSMAC,OSC,THICK,WN,X ABTI0523 + COMPLEX DENO,EPS,DENO1,DENO2 ABTI0524 + DIMENSION NOS(NEPS),OSC(3,JOS),EPSINF(NEPS),NAME(NEPS) ABTI0525 + COMMON/MULAYR/EPS(LMAX),THICK(LMAX),ARGMIN,ARGMAX,EPSMAC, ABTI0526 + , LAYERS,NPER ABTI0527 + J = 0 ABTI0528 + DO 2 L=1,NEPS + M = NOS(L)/2 + DENO1 = CMPLX(1.0D0,0.0D0) + DENO2 = CMPLX(1.0D0,0.0D0) + IF(NOS(L).GT.1) THEN + DO 1 K=1,M + J = J+1 + DENO1 = DENO1*(OSC(1,J+M)**2-WN**2-CMPLX(0.0,WN*OSC(3,J+M))) + DENO2 = DENO2*(OSC(1,J )**2-WN**2-CMPLX(0.0,WN*OSC(3,J ))) + 1 CONTINUE + EPS(L) = EPSINF(L)*DENO1/DENO2 + ELSE IF(NAME(L).EQ.'metal') THEN + J = J+1 + EPS(L) = -OSC(1,J)**2/( WN**2+CMPLX(0.0D0,WN*OSC(3,J)) ) + ELSE + EPS(L) = EPSINF(L) + J = J+1 + X = WN/OSC(1,J) + DENO = X*CMPLX(X,OSC(3,J)) + IF(OSC(2,J).GE.0.0D0) DENO = 1.0-DENO + IF(ABS(DENO).EQ.0.0) DENO = EPSMAC + EPS(L) = EPS(L)+OSC(2,J)/DENO + ENDIF + 2 CONTINUE ABTI0538 + IF(NEPS.EQ.LAYERS+1) THEN ABTI0540 +C THE SUBSTRATE IS A ANISOTROPIC UNIAXIAL MATERIAL ABTI0541 + EPS(LAYERS) = SQRT(EPS(LAYERS)*EPS(LAYERS+1)) ABTI0542 + IF(AIMAG(EPS(LAYERS)).LT.0.0) EPS(LAYERS) = -EPS(LAYERS) ABTI0543 + ENDIF ABTI0544 + +C **** log modification start + write (99, '(30g15.7)') wn, (eps(j), j = 1, neps) +C **** log modification end + + RETURN ABTI0545 + END ABTI0546 + DOUBLE PRECISION FUNCTION FUN(PHI) ABTI0547 +C ****************************************************************** ABTI0548 +C * * ABTI0549 +C * INTEGRAND OF THE EXPRESSION OF THE 1ST ORDER TERM IN THE * ABTI0550 +C * EXPANSION OF THE EELS INTEGRAL FOR A HOMOGENEOUS TARGET. * ABTI0551 +C * * ABTI0552 +C ****************************************************************** ABTI0553 + LOGICAL USER,RATION ABTI0554 + DOUBLE PRECISION ACOEF,BCOEF,CCOEF,COSPSI,DLIMF,ELLEPS,PHI,RU, ABTI0555 + ,SINPHI,SINPSI,TANPSI,UM,WN ABTI0556 + COMMON/PARAM/ACOEF,BCOEF,CCOEF,ELLEPS,COSPSI,SINPSI,TANPSI, ABTI0557 + , RU,UM,DLIMF,WN,USER,RATION ABTI0558 + SINPHI = SIN(PHI) ABTI0559 + FUN = SQRT((1.0D0-ELLEPS+ELLEPS*SINPHI**2)*(1.0D0-SINPSI*SINPHI)* ABTI0560 + * (1.0D0+SINPSI*SINPHI)) ABTI0561 + RETURN ABTI0562 + END ABTI0563 + DOUBLE PRECISION FUNCTION FINT1(U) ABTI0564 +C ****************************************************************** ABTI0565 +C * * ABTI0566 +C * INTEGRATION OVER THE AZIMUTAL ANGLE FROM 0.0 TO PI * ABTI0567 +C * * ABTI0568 +C ****************************************************************** ABTI0569 + LOGICAL RATION,USER ABTI0570 + DOUBLE PRECISION ACOEF,BCOEF,CCOEF,COSPSI,DEN,DIF,DLIMF,E,ELLEPS, ABTI0571 + ,PI,ROM,ROP,RU,SINPSI,SUM,SURLOS,U,UM,USURLO,T,TANPSI,WN ABTI0572 + COMMON/PARAM/ACOEF,BCOEF,CCOEF,ELLEPS,COSPSI,SINPSI,TANPSI, ABTI0573 + , RU,UM,DLIMF,WN,USER,RATION ABTI0574 + DATA PI/3.141592653589793238D0/ ABTI0575 + IF(U.EQ.0.0D0) THEN ABTI0576 + FINT1 = 0.0D0 ABTI0577 + RETURN ABTI0578 + ENDIF ABTI0579 + E = TANPSI*U ABTI0580 + ROM = (1.0D0-E)**2+U**2 ABTI0581 + ROP = (1.0D0+E)**2+U**2 ABTI0582 + SUM = ROP+ROM ABTI0583 + ROM = SQRT(ROM) ABTI0584 + ROP = SQRT(ROP) ABTI0585 + DIF = ROP-ROM ABTI0586 + DEN = SQRT((2.0D0-DIF)*(2.0D0+DIF))*ROP*ROM ABTI0587 + FINT1 = PI*U**2*(4.0D0*SUM-DIF**2*(SUM-ROP*ROM))/DEN**3 ABTI0588 + IF(RATION) RETURN ABTI0589 + IF(USER) THEN ABTI0590 + FINT1 = FINT1*USURLO(RU*U,WN) ABTI0591 + ELSE ABTI0592 + FINT1 = FINT1*SURLOS(RU*U) ABTI0593 + IF(DLIMF.GT.0.0D0) THEN ABTI0594 + T = RU*U*DLIMF ABTI0595 + FINT1 = FINT1*(1.D0+T*LOG(T/(T+0.26D0)))**2/(1.D0+1.40D0*T) ABTI0596 + ENDIF ABTI0597 + ENDIF ABTI0598 + RETURN ABTI0599 + END ABTI0600 + DOUBLE PRECISION FUNCTION FINT2(U) ABTI0601 +C ****************************************************************** ABTI0602 +C * * ABTI0603 +C * INTEGRATION OVER THE AZIMUTAL ANGLE FROM 0.0 TO PHI < PI * ABTI0604 +C * * ABTI0605 +C ****************************************************************** ABTI0606 + LOGICAL RATION,USER ABTI0607 + DOUBLE PRECISION A,ARG,B,B2,C,CCOEF,COSPSI,DLIMF,ELLEPS,PHI, ABTI0608 + ,PHINT,RU,SINPSI,SURLOS,U,UM,USURLO,T,TANPSI,WN,X ABTI0609 + COMMON/PARAM/A,B,CCOEF,ELLEPS,COSPSI,SINPSI,TANPSI,RU,UM,DLIMF, ABTI0610 + , WN,USER,RATION ABTI0611 + IF(U.EQ.0.0D0) THEN ABTI0612 + FINT2 = 0.0D0 ABTI0613 + RETURN ABTI0614 + ENDIF ABTI0615 + B2 = B**2 ABTI0616 + C = (1.0D0-ELLEPS)*(COSPSI*U)**2+(B-CCOEF)*(B+CCOEF) ABTI0617 + IF(ABS(A*C).GT.1.0D-03*B2) THEN ABTI0618 + X = (B-SQRT(B2-A*C))/A ABTI0619 + ELSE ABTI0620 + X = A*C/B2 ABTI0621 + X = 0.5D0*C*(1.D0+0.25D0*X*(1.D0+0.5D0*X*(1.D0+0.625D0*X)))/B ABTI0622 + ENDIF ABTI0623 + ARG = X/U ABTI0624 + IF(ABS(ARG).GT.1.0D0) ARG = SIGN(1.0D0,ARG) ABTI0625 + PHI = ACOS(ARG) ABTI0626 + FINT2 = PHINT(PHI,TANPSI,U) ABTI0627 + IF(RATION) RETURN ABTI0628 + IF(USER) THEN ABTI0629 + FINT2 = FINT2*USURLO(RU*U,WN) ABTI0630 + ELSE ABTI0631 + FINT2 = FINT2*SURLOS(RU*U) ABTI0632 + IF(DLIMF.GT.0.0D0) THEN ABTI0633 + T = RU*U*DLIMF ABTI0634 + FINT2 = FINT2*(1.D0+T*LOG(T/(T+0.26D0)))**2/(1.D0+1.40D0*T) ABTI0635 + ENDIF ABTI0636 + ENDIF ABTI0637 + RETURN ABTI0638 + END ABTI0639 + DOUBLE PRECISION FUNCTION FINT3(U) ABTI0640 +C ****************************************************************** ABTI0641 +C * * ABTI0642 +C * INTEGRATION OVER THE AZIMUTAL ANGLE FROM PHI1 > 0 TO PHI2 < PI * ABTI0643 +C * * ABTI0644 +C ****************************************************************** ABTI0645 + LOGICAL RATION,USER ABTI0646 + DOUBLE PRECISION A,ARG,B,CCOEF,COSPSI,DLIMF,ELLEPS,PHI1,PHI2, ABTI0647 + ,PHINT,SINPSI,SURLOS,RAC,RU,U,UM,USURLO,T,TANPSI,WN ABTI0648 + COMMON/PARAM/A,B,CCOEF,ELLEPS,COSPSI,SINPSI,TANPSI,RU,UM,DLIMF, ABTI0649 + , WN,USER,RATION ABTI0650 + IF(U.EQ.0.0D0) THEN ABTI0651 + FINT3 = 0.0D0 ABTI0652 + RETURN ABTI0653 + ENDIF ABTI0654 + RAC = SIGN(1.0D0,A)*COSPSI*SQRT((1.0D0-ELLEPS)*A*(UM-U)*(UM+U)) ABTI0655 + ARG = (B-RAC)/(U*A) ABTI0656 + IF(ABS(ARG).GT.1.0D0) ARG = SIGN(1.0D0,ARG) ABTI0657 + PHI2 = ACOS(ARG) ABTI0658 + FINT3 = PHINT(PHI2,TANPSI,U) ABTI0659 + ARG = (B+RAC)/(U*A) ABTI0660 + IF(ABS(ARG).GT.1.0D0) ARG = SIGN(1.0D0,ARG) ABTI0661 + PHI1 = ACOS(ARG) ABTI0662 + FINT3 = FINT3-PHINT(PHI1,TANPSI,U) ABTI0663 + IF(RATION) RETURN ABTI0664 + IF(USER) THEN ABTI0665 + FINT3 = FINT3*USURLO(RU*U,WN) ABTI0666 + ELSE ABTI0667 + FINT3 = FINT3*SURLOS(RU*U) ABTI0668 + IF(DLIMF.GT.0.0D0) THEN ABTI0669 + T = RU*U*DLIMF ABTI0670 + FINT3 = FINT3*(1.D0+T*LOG(T/(T+0.26D0)))**2/(1.D0+1.40D0*T) ABTI0671 + ENDIF ABTI0672 + ENDIF ABTI0673 + RETURN ABTI0674 + END ABTI0675 + DOUBLE PRECISION FUNCTION PHINT(PHI,A,U) ABTI0676 +C ****************************************************************** ABTI0677 +C * * ABTI0678 +C * EVALUATE THE INTEGRAL FROM ZERO TO PHI OF * ABTI0679 +C * * ABTI0680 +C * U 2 * ABTI0681 +C * ( ----------------------------- ) DPHI * ABTI0682 +C * 2 2 * ABTI0683 +C * (1 - A * U * COS(PHI)) + U * ABTI0684 +C * * ABTI0685 +C * FOR 0 <= PHI <= PI , U >= 0 AND A >= 0 * ABTI0686 +C * * ABTI0687 +C ****************************************************************** ABTI0688 + DOUBLE PRECISION A,AI,AR,BI,BR,C,CPR,D,E,ESR,PI,PHI,QR,RI,RM,ROOT,ABTI0689 + ,RP,RR,S,SPR,TM,TP,U,U2,X,ZETA,ZETAI,ZETAR,ZR ABTI0690 + PI = 3.141592653589793238D0 ABTI0691 + C = COS(PHI) ABTI0692 + S = SIN(PHI) ABTI0693 + U2 = U**2 ABTI0694 + E = A*U ABTI0695 + IF(U.LT.1.0D0 .AND. E.LT.1.0D-02*(1.0D0+U2)) GOTO 5 ABTI0696 + RM = SQRT((1.0D0-E)**2+U2) ABTI0697 + RP = SQRT((1.0D0+E)**2+U2) ABTI0698 + ROOT = SQRT(RM*RP) ABTI0699 + TM = 0.5D0*ATAN2(U,1.0D0-E) ABTI0700 + TP = 0.5D0*ATAN2(U,1.0D0+E) ABTI0701 + CPR = COS(TM+TP) ABTI0702 + SPR = SIN(TM+TP) ABTI0703 + IF(C.GE.0.0D0) GOTO 2 ABTI0704 + IF(ABS(S).GT.1.0D-07) GOTO 1 ABTI0705 + RR = -PI/ROOT*CPR ABTI0706 + RI = PI/ROOT*SPR ABTI0707 + AR = -RR+U*RI ABTI0708 + AI = -RI-U*RR ABTI0709 + GOTO 4 ABTI0710 + 1 X = (1.0D0-C)/S ABTI0711 + GOTO 3 ABTI0712 + 2 X = S/(1.0D0+C) ABTI0713 + 3 ZETA = SQRT(RM/RP) ABTI0714 + ZETAR = -ZETA*SIN(TM-TP) ABTI0715 + ZETAI = ZETA*COS(TM-TP) ABTI0716 + BR = 0.5D0*LOG(((ZETAR+X)**2+ZETAI**2)/((ZETAR-X)**2+ZETAI**2)) ABTI0717 + BI = ATAN2(ZETAI,ZETAR+X)-ATAN2(ZETAI,ZETAR-X) ABTI0718 + RR = -1.0D0/ROOT*(BR*SPR-BI*CPR) ABTI0719 + RI = -1.0D0/ROOT*(BI*SPR+BR*CPR) ABTI0720 + D = E*S/((1.0D0-E*C)**2+U2) ABTI0721 + AR = D*(1.0D0-E*C)-RR+U*RI ABTI0722 + AI = -D*U-RI-U*RR ABTI0723 + 4 QR = 1.0D0/(RM*RP)*(AR*(CPR-SPR)*(CPR+SPR)+2.0D0*AI*CPR*SPR) ABTI0724 + PHINT = 0.5D0*(RI/U-QR) ABTI0725 + RETURN ABTI0726 + 5 ZR = 1.0D0+U2 ABTI0727 + ESR = E/ZR ABTI0728 + PHINT = U2/ZR**2*((( (4.D0/3.D0)*(2.0D0+C**2)*S*(5.0D0-3.0D0*U2)* ABTI0729 + * ESR + (PHI+C*S)*(5.D0-U2))*ESR + 4.0D0*S)*ESR + PHI) ABTI0730 + RETURN ABTI0731 + END ABTI0732 + DOUBLE PRECISION FUNCTION SURLOS(DK) ABTI0733 +C ****************************************************************** ABTI0734 +C * * ABTI0735 +C * EELS SURFACE LOSS FUNCTION FOR AN ARBITRARY MULTILAYERED TARGET* ABTI0736 +C * * ABTI0737 +C ****************************************************************** ABTI0738 + PARAMETER(LMAX=100) ABTI0739 + LOGICAL STATIC,ZERO ABTI0740 + DOUBLE PRECISION ARG,ARGMIN,ARGMAX,CN,CNM1,D,DK,EPSMAC,SN,SNM1,TN ABTI0741 + COMPLEX A,B,CSI,EPS,PNM2,PNM1,PN,PP,QNM2,QNM1,QN,QP,Z ABTI0742 + DIMENSION ARG(LMAX) ABTI0743 + COMMON/MULAYR/EPS(LMAX),D(LMAX),ARGMIN,ARGMAX,EPSMAC,LAYERS,NPER ABTI0744 + ZERO(Z) = REAL(Z).EQ.0.0 .AND. AIMAG(Z).EQ.0.0 ABTI0745 + LSTART = LAYERS-NPER+1 ABTI0746 + STATIC = .TRUE. ABTI0747 + N = 1 ABTI0748 + 1 ARG(N) = DK*D(N) ABTI0749 + IF(ARG(N).GT.ARGMAX .OR. ZERO(EPS(N))) GOTO 10 ABTI0750 + IF(N.GE.LSTART .AND. ARG(N).GT.ARGMIN) STATIC = .FALSE. ABTI0751 + N = N+1 ABTI0752 + IF(N.LE.LAYERS) GOTO 1 ABTI0753 +C ABTI0754 +C *** PERIODIC CONTINUED FRACTION, PERIOD = NPER ABTI0755 +C ABTI0756 + IF(NPER.GT.1) GOTO 2 ABTI0757 + CSI = EPS(LAYERS) ABTI0758 + GOTO 9 ABTI0759 + 2 IF(STATIC) GOTO 5 ABTI0760 + CN = COSH(ARG(LSTART)) ABTI0761 + SN = SINH(ARG(LSTART)) ABTI0762 + PNM1 = 1.0 ABTI0763 + PN = CN ABTI0764 + PP = EPS(LSTART)*SN ABTI0765 + QNM1 = 0.0 ABTI0766 + QN = SN/EPS(LSTART) ABTI0767 + QP = PN ABTI0768 + DO 3 N=LSTART+1,LAYERS ABTI0769 + CNM1 = CN ABTI0770 + SNM1 = SN ABTI0771 + CN = COSH(ARG(N)) ABTI0772 + SN = SINH(ARG(N)) ABTI0773 + A = EPS(N)*SN ABTI0774 + PP = CN*PP+A*PN ABTI0775 + QP = CN*QP+A*QN ABTI0776 + B = (EPS(N-1)/EPS(N))*(SN/SNM1) ABTI0777 + A = CNM1*B+CN ABTI0778 + PNM2 = PNM1 ABTI0779 + PNM1 = PN ABTI0780 + QNM2 = QNM1 ABTI0781 + QNM1 = QN ABTI0782 + PN = A*PNM1-B*PNM2 ABTI0783 + QN = A*QNM1-B*QNM2 ABTI0784 + 3 CONTINUE ABTI0785 + IF(ZERO(QN)) GOTO 4 ABTI0786 + A = 0.5*(PN-QP)/QN ABTI0787 + B = SQRT(A**2+PP/QN) ABTI0788 + PN = A-PN/QN ABTI0789 + IF(ABS(PN+B).GT.ABS(PN-B)) B = -B ABTI0790 + CSI = A+B ABTI0791 + GOTO 9 ABTI0792 + 4 A = QP-PN ABTI0793 + IF(ZERO(A)) GOTO 12 ABTI0794 + CSI = PP/A ABTI0795 + GOTO 9 ABTI0796 +C ABTI0797 +C *** SMALL-DK LIMIT OF THE PERIODIC TAIL ABTI0798 +C ABTI0799 + 5 PN = 0.0 ABTI0800 + QN = 0.0 ABTI0801 + DO 6 N=LSTART,LAYERS ABTI0802 + PN = PN+D(N)*EPS(N) ABTI0803 + QN = QN+D(N)/EPS(N) ABTI0804 + 6 CONTINUE ABTI0805 + IF(ZERO(QN)) GOTO 12 ABTI0806 + CSI = SQRT(PN/QN) ABTI0807 + IF(AIMAG(CSI).GT.0.0) GOTO 9 ABTI0808 + IF(AIMAG(CSI).LT.0.0) THEN ABTI0809 + CSI = -CSI ABTI0810 + ELSE ABTI0811 + IF(REAL(QN).LT.0.0) CSI = -CSI ABTI0812 + ENDIF ABTI0813 + 9 N = LSTART ABTI0814 + GOTO 11 ABTI0815 + 10 CSI = EPS(N) ABTI0816 +C ABTI0817 +C *** BACKWARD ALGORITHM ABTI0818 +C ABTI0819 + 11 N = N-1 ABTI0820 + IF(N.LE.0) GOTO 15 ABTI0821 + IF(ARG(N).EQ.0.0D0) GOTO 11 ABTI0822 + T = TANH(ARG(N)) ABTI0823 + B = EPS(N)+CSI*T ABTI0824 + IF(ZERO(B)) GOTO 13 ABTI0825 + CSI = EPS(N)*(CSI+T*EPS(N))/B ABTI0826 + GOTO 11 ABTI0827 + 12 N = LSTART ABTI0828 + 13 IF(N.LE.1) GOTO 14 ABTI0829 + N = N-1 ABTI0830 + CSI = EPS(N)/TANH(ARG(N)) ABTI0831 + GOTO 11 ABTI0832 + 14 SURLOS = 0.0D0 ABTI0833 + GOTO 17 ABTI0834 + 15 A = CSI+1.0 ABTI0835 + IF(ZERO(A)) GOTO 16 ABTI0836 + SURLOS = AIMAG(-2.0/A) ABTI0837 + GOTO 17 ABTI0838 + 16 SURLOS = 2.0D0/EPSMAC ABTI0839 + 17 RETURN + END ABTI0841 + DOUBLE PRECISION FUNCTION USURLO(DQ,WN) ABTI0842 +C ****************************************************************** ABTI0843 +C * * ABTI0844 +C * USER-SUPPLIED DIELECTRIC SURFACE LOSS FUNCTION AIMAG(G(DQ,WN)) * ABTI0845 +C * INPUT ARGUMENTS : * ABTI0846 +C * DQ : MODULUS OF THE TWO-DIMENSIONAL SURFACE WAVE VECTOR * ABTI0847 +C * (ANGSTROEM**-1) * ABTI0848 +C * WN : FREQUENCY (CM**-1) * ABTI0849 +C * * ABTI0850 +C ****************************************************************** ABTI0851 + DOUBLE PRECISION DQ,WN ABTI0852 + USURLO = 1.0D0 ABTI0853 + RETURN ABTI0854 + END ABTI0855 diff --git a/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps001.log b/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps001.log new file mode 100644 index 0000000000000000000000000000000000000000..cdd1cfa4e76e9347f7b76b7104d26940d549e9d9 GIT binary patch literal 15090 zcmZXbNp5txj)imd2DysZKwPMA7Er@N?WFcUd>^GNQVbhNApQGT!Jdbd{P}!7k^esN z-+%u3&p-eE@Bjawe7C>KGi%`Md>{Yi|5BUJ^^dWw?_NxJ)-QzcKi?4l6?hHz&p#<X zHN}wkk>QDT*4Wo?FLe5YZnGpsw>H|W^6f&GUvx_$7`m5SYE!h6R3vFVjiP6dIBQyh zt+U7P***3B(Vq`;kJ)BZbo--aA2oM9d-gi2YT5p1IZBNxNeZ>4I*#1!kCrp^tQJf$ zkJQvA?T?nT$ElK}lu&bhlxW$0v_!Bx;|d7TGUd=qm`9TSqh)$x7~?|E(vxc0f3yTW zVl=tS$g|toKU$_I)fUy4srH(N+PnW~nVy`p`7#kFJ*$@ekCr7C^G@oml&q4BKU$XA z`wF9FlYw*0CgYEmb(E;-kO-2{mWjmP<BygNIo0z(TQUodKU(%y#}ZT|$+4%n!)BfR zN6XRT4!VU-BMh_m{G;V;A+MlY=sYo^`f~ngnV-;7Q}5&&dJ8MaM3VWVWqx8CS#6Rf zx`&<pqh)?l?^WX@_kw>ki|3D)`N=a_g~<3l49$iZwwe;be5Fi%>RV9JvQRDFuo1aq z*lI59LN{VV<GaLMdr@D;u+=m)AsW|5ud@?L+BAz}*lHRY6AZOrDY2Gup|_d`%_qfd zF-TQQ#Jl`-$sN6xg|ZqgcS?^XHjQt7vPzqsoo2R*Tt<(nTxhRlc}SI}^`r*musDft zJFv4W<wPU4ChTo-663Fy__}KhQb5~VjFy(^SIZfud8gJo!Z!a#doAljh+6L8$U28c zEE+qT)CUuocj_#Wx~cX~-k0?$iK?)b4o{1CGhJw}Wd)F{p>wUVX?(}*wXDww7)8%U z@Ue^N(lUE3MXoC^+X%Vt0=>~*%l0HXiB`5w9))B!$zIF$lsNZ~CBA#24eipk&-Plj zrx6%-b|q4}R^(W`mhBl-Hr29^6kD+PE?&z{--)|bizFk48ZTcKuVsH=0oHd$32{c# zvUn}~Q|U@7w<JTe?i!2NvLkn}&ONE1xoelA`nsqZPt3{ka^?}P-Vm$Ta$xUb6?yhN zMz+dUy_VyluANTuiPQ_ImDbo;y_QfolJBimg07KvtMOgEmh;JJ?6w31H1#5xBro~d zA^J)4X|*2?0h+=UcDS!NdC8BV=hUbYG&)*$jW79m(c}i%a;iP(lxZcV<x74H-BZhN zrU`nKa(U+^KL^ccN9BW{b0+KU?3er)x<>8Af}V7#^-)X9m;4xd=C_IQPw}DnlyaTz zd`V8{4*7Y1Sr~JLXvw$xZ0AeRLjv5;6TV{A=OsVyk2C#J%9Em-@N4t@OMVPJs7-JE zMsAAFTj-V~FZns>LZ+oFszxT|P41Wc7<$Zd_z7pvBqdpXy3h7nQe%xNeaIB*@w8q% zT*OM{Lhz#{%oB!uRiBsq97!6*jL!9b3-g3h>^8I{dCAW~Q%`W-$sK$JZ%QWjOMVWT zoDXF?kAF%}nPl39_F9f-RJyTBLiEl}^|vHmOEL{t9`B^5Q$(BASVp0{`cQGDbF7bE zlFXXl5k=0X@;fvU-NvR}{1gV4YcXFY&wZ%RIm}JZ7dmIil4e8l+^0wk28}^D86%*v z-V~gcRCBVSAA9Gg&(L;jUUGZxQ|d!0)9OQBRR$WZRa9T6rFgy_uKAJpEwD0FSTUHQ z%S);KiCQK<=Bqpn@@}&$Ez6xfVFl?-M<4hHwP=6TmfLAbry%}!QRQr56ilxg-wXx! z*>s9pNUkM^pht(8YENUxbLjG<S;9MIeA)x$rHaZgFG)Q2p;OT24_gO4A?tgz+GwXG zor1=3n9`@iZ4&dQo$a)wQ&8MBss=G89Z}Jq`_L(vo9C(D^GS(%qE(aHe{0#`RmA_v z9l|0d_`RL&d`azZy<2aP0uEs}w9~Rvoo3wb074MKOv{CKT6QGqZ*dYdl$nX%?CrTv zpD?@{POTz{GMfd<9nXEJp)`&&&wn7$j7pc5p8E_c1d?inVC6x0Yqd|F`%Gb`GaY-U zO52Bkt4%!jkzt9{QuKUiaW=s)Bj4VM_ybOSB*}zqW1!cwJ@=8pfVIVP9uNvfW0o>| zd+x)zd{otJz|kr1a=s$gb049e5mqN3%@=`?;xP6|advW7T+gCngFn({;D9E#=RQ$F zmH>azYZ{^k$hS)p&wUt*S6Cf%mD;t7|3<rrrJd0{&YVWQ9uG9jeCfFlO@^@ALkQ=~ z(k{c=OcJLhN;2mvdxRm7JbRJ0Byrs5TSyjZW3SvfVxn@L?YPfZ#?4&S^9e>rZ8N$1 zt>rgTz{A@NMD8H2H#WmBUf%f%!KObR?=bZe;Kq@Y<360tU_6b-M%gs%uvuC<?(>aM zB{m7im$Hi)!6sb@v6F;#Vj5?5{oo9^=8g7RN_7gG2B2l-lNcb)JMZFW8~7_r4EoOD zClrJ+=Pnpq?%S8&DSVMV-0==s9OGqg$9=vd(>sECo=l>B?h>%hcHHONnY_AH9~#G$ z?jRqv(N0UMCNrW|HY_9qr1j$Ie2K}J<Fuzy0cdf??bEyXd2K>6AgIbs)r9U?FQz2k z-l?6KvwkVz-9}WonPwasj?oD4*Mh_^w94vWcHHMn2(q9$d!G-<z=xZbtn}`)3-e`w zwVku6MTKcsz7-3yyK?Bla0``s(UUz|U|dqP<33+uVF+?MAl(&LSyW}meZEo#6O-I~ zHgZ92j3Y}8ur>cTBNw~LgN79lV|#V5<aXTW3;&L6yqAGFpO#kHo|~3#@AJ*FQ;Nz8 zC|s4{U;9pW+~+Iv4)y!=2AGnJZ5mbCai4F-9gO?Of)p3*ZQMRP?(-%53D7<6BR33> ziNt1C+Tm@J1c!jrX<kwl!!+*0P~gzS;7P4@Ho^W<{bfPNeZG7WwMpx@uwJ6nJny*A zmts#p*aJLg3!{eJn7y&^<x6yy;&b{XY@GGrCfHjNuO(HoVQ|isFD8M4T;?5#48HbH zzgR!hTo0Od*lM+Uf`uHKEGAoyFYzpWe2=nA632bM!~rAVHSaV!v27FK?)TXdU(x|j zroouQc$?Nf+i3}!LBMJiTCn9*#*rQO`ATuZ+;(<qflZs(V4dx_&o_3O)U0Q2U>c>5 z@0H$0yXpg)sN6J{^Y|HKv2{SkFsCIG3{~>@l1|J8++}aaeZFLA<YG$urEIUrHIv)< zGQtN7byI%K7aXDY*Pu&o$9?F<%!qt#Fz7bNOIJ49Ye{Yuz6{L`kL}i3mN+eG+|*dp zvO;}~S7pb2=-f<oTm$IYg}V&fEWlFT*~Is3>Pwmw6N&LE20Vu*MhC@8&t^8g?i=zC z_hH^2?*f+JpcZjkXY)MM%+J}}jGiq&XleR(zr#-)8h=pkPoD>!4oO({{^34+HcM4Q zM<&KS$}aQ|_hHA!?#p~h6RNf);v^>tc}dEjI=J?O7e8Uz{6Vun*{jKA6EgnV46`); zL371;c_%>DZ@HZ>CuNde@OlSs$g-C;v^Z;N>A4SF2g-0d323%#v`j-gEh!N6@>7vP zbB{`KGqlqZX3y^CY@patb6-pv8`^0p%Ud=NDmNE*jL}woJojNS%u>VdxmmL@oGPPc z=)El{^9{Fzuji2@&`N9uES~#Ns^qF#(VbvVdjuB?vPHPh?kogtz9bCfqQqubjPKFJ zkjA$ZbGJWXOXkt=R_#&}V%#9u{XF66(c-%^19At$R`b0!S#o>s1AU><oK6CoT}w7T z$lm=vn-WV}p2`NAj&{u?XzbBKOm|V0+X)E5<i*4BeDT}|YQ#iz-S02}W~)_P$oR8q zzV$*=j_WSxOH0pvDltggd8<9E7go2Zsgii^Q^}o?4x0f@@p+xK&vshU8mNMH8^rA! zXpL{yz_;9xH16Ik8!AjF*!?`iqertIY-g525-H}E4b*3k=5hl&iCSWBu6o#EST=a> z0|8`+JADT<`Jas86?f<Lg?<y!XL~CPRKB;~z<hE`QixHi&096sSRk}O#99{g+^1mS zGpvf-1^V$`!)~<Ga;<#`6gh06D>-aa2A$MPg25;$ipIj-<}@Z#kER)nGYKFGA=xf1 zJ@?^*xLmfX$&wQrX^my0f1jNp)IA;U!`ZZLB1Z&UTDrZ@mtm9=dpb90f`r|$p`Dhj z26)i0*KlGJ+Da~V&&?&dmxLLF5^-#j2Ytt;|Kj#ONCN9(i==4G2~|=_Joga_O_MS- zg1uK8OG~%+;cOO@9It2dbfOryFP{6z>YZ}(c2~IoV-&V|r+DteCV}L!+fMAq^}qHs z((twk^c?PUrX$YIOvT1yi|0O29|F|sAhqN)mZhcVKI}*Zpb-nHB@WDjp8GIkQ&O#` z@wSDX(F)*ww)3T|zf0Q$aCsg<vQ2eN)Lu*aB_>yU2b^UrjE%oXvuPwT4;pKqhXYFz z&waQoLQwM#y>b*|>-2PgHt)uUbtyJROyCyZp8Lr2DjtPsoN$={xi_1*JFhS00s?5< zhgBKu(LC?DkF4xunV?#7dkkroZ<m&S?-Lmm*sr|vJliN1B7Byiot6+&Hl~Mb3Yw(e zLAK9!z68y}Z<|bfNsw@9cuC@X$ymWY;B2=9&34S93j5slX1uI}O|)uRsLwVRSI>Q* z{`h9EoR%c?YOW}cmeq3~*=7-gT2G(^Oaj{H+46Wv7*DTPO*CR|8MO}bn;tFij*M$2 zd26u)K`e;QKWJWdojDDgpfQK5+@AYz%}pX&Z{R^7ELeTXJ4AmralsI%7L+$<c6Y?f zl^-<sgjZC_+^~!PmiyB3D}<XifBBMi6}hHz-`oc@w@`3y%S(caiQdpxzZ5hJTGB`5 z=H@OMTW3RRa)Tzr`6tzqt7U1JcJ`&EpyjU9-nPgfz~aKtUQ6ydAcQIjD^Q^`ioUrI zXY(G`UJ9_H8!$M_H0qd>n>nD;9gdcfCUm{`;YSWlHR8VQLT7lvQhIsk<~~Tm&v;v5 zHj#Ho){EgE?rg{(`Cw?C@Lh9Sy}1u(^K65+TUt*dV?^C*EJ^OY4`>WV2~jq~GKwc7 zmOD515j5Fy)e~O6v92;LZ|(y+;*5*o@!A0%X1=_+kD$q`_qt6g1kY30idqcb+y`{W zb=>*NTj-4@b1r+|+(+bQ<HT`_mbPLqUb(O}d&@@;Sneo>W`%LRjCR~dMi$u{uUFYi z65i18Xjo&=aUaemap*M~RZL3PTTm88UJ`iJIPVJh<-*iq8*LheM{{Fvy+>vnOSd*( zI_`r_2to*rN<t%lAA7Diaoh(qyO!4oOG~!OZ$sSZD`JH%@*wtoOuo@E@RC$*;<yiJ zE@iK`i3}OA2#XWPeT3%XyR(nQCTx*N9y{Cn5{`?-S4misP(sIkV!7mYdmql`hOt^@ zW1&Q0GhaIHLp>qG)44AeNg&|1IU`4%ceu)*41Q{F-VI#48G5Nh!&|vcwJfG-U2nAU zg-6o>xgxf+*)!~cW@+iT4-w0Ae8y-)v*tIp&fS7LyYrY$-{hbrSO4$&YMt%4kK`q+ z`Idy~(q>n9zdsvV`mVE<cOv$`ID~ueBYlT!E8CwyfFU#1N!*<mXkHJ}$5cysvv>70 zxAy^!H+UavXg<kyO3a#0ZkQ-V)4YS@nULg{#U{;hA9}HLhO?E!f)Hv_)6m|RQ1f)X zTPJhaifT4ctS?DeWb*VyUy*Tk;BM3+mb;!GG>eM!Zbr~-U-rPh<aXRg&c;2qD<F^1 zSt~Lm%Ad`ive@foULmFHZ41lRA2e4NR~8coumrV<<330d<?k@8Rt4z}I{i1d_mSnU zJS@G?+#lG?4Yl!-Ku+FE7l}bixm-W2Ke7>Dy1kE_&9ZDi;a=#@UnI<F=pQX9v3lPi zfxw5yXy_kbQa0c4UuUz*fr1$N$Cpgl+{%l|7MiHx9jl^m?z7h8l<)JF2uZjN#kYq3 z@g=(iz2^oU+0-=C^5#Brwme(kEpJJ}+k2Xvo&BRF1w!9cO5#B|$|cE<mRvB<)sB|z zt4SsE&dq&968axSThTm0U@fYW+}vlOStOi$DJdB2P=m>RbDxEV%3D-X6lumL_sxA4 zn%jGu(8)^dzyEX#>Bu7=gT%%4cQ8CUr5-K1vhwogK5{npyXFSUA_dvxzPZmr!x?NJ z3;Dpai#YAGe<HSVpJwwVJacl<trm3L2T5S9Soqi*mc?b~h5peJ8cSj-dN9>xLp$yx zXQSp`m`GGX5MVPVx8pv7=Ct!#1vKmf60CAN?gN^4?UZnp1h+%I4E+<aBh!ABvvGIK zTGO(@?S15IBE$ZgjrBKTTf{o<BWOfD_fp6$PeHGG;<%5X*_fDj<l>*)Q@P#V2Q&|I z$VAnW+#tja{i7vYi)**eGjkRTW)sJK<m{Gs^QvdFykd&hvmN&lw3twPG0vfBSsirT zN3Lb%t^aBU;(1=aL555c$9>jwW!`6M&hrXS8of#4wB&3u=e$4RY~CrdiZrx~SkP=9 z&nrpL+%w&BJMJTrz}0Qr!e3ob0nGD``+z2Cvvok)8*`m`$8jG)vv@x@?npvC;X+j9 ycHBqMY@l|lUKW(UhKN=N9rqD5SJhTy*&&mqYHyaacdY`=MW9VE2*u6aM*kPW8>Scl literal 0 HcmV?d00001 diff --git a/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps004.log b/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps004.log new file mode 100644 index 0000000000000000000000000000000000000000..a851395f53c8fb965813dff69a69c879f8039f6a GIT binary patch literal 15090 zcmZvjS&rnm4n^y$KWY`Zfi^S`yLgLv`$r#2HmNjipn!}DhJvIxTwW=Detv!;|9;}% zKY#xD^Y?%MmlyXlt{LQcUdO-u6-TWlUiW|g%U_2~xMI?me?`28EwI=4w}q>g66U>R z4m0H|7kRm))0gzPrPJ&=U$d)p`I26XA(BSR>FP_-wRZcGUdD@bZxQWHdU)wPRg=~# z0_(%FHfE{WKR?^bJXMq0+q{ad-9D_$Q#C0wk1N{RA6DkEoFICah$ekGbZPQoWge<Y zE~#D3q`#~j_ul@b)N{XD<7?LL^e-#>dRsI}VaReS{bglO@-|P3rI)K@`CIhnh4)}n ze}^#<FzGKVn_3xiDOc1u>0eg1$I3WIN>^2Xk1s206-9aC%y@8bt>`_ztlW!<^dMV^ zc=_a#{<5+>9*m=ecGYF{lK!%?JRXdFV%VYgmz7!9?v)svx;yjB%KXG&?5utj)q8$f znRM+oLcQjCDSFFR$s<;4HYD|TD`i|+t(;$0Mq4|wwngmxvT`R2-xX``?2g8F4BO15 z$di}hiIZ4Mi-(mlY%@>kv=>`zOQvn3#mX4AnZKoV?J`=sx_U6Ovu~dy&Ei<<Xjjts zj$xbmYwe-CQ*vxat%_7Gw|3WvErA%c3K8RnmD|B$RUX)NN`F|{mZD3#Qp_x3BYHVa z>Qk#?&WT!OR>lu2tHw!|{n$n?f2R*CcL5Pi(iqf}l^k38!%EAB)Ox<6#Yy_GGOH%3 zH1yVb5~%>r%A|Qo*$me%xm%MDE2HjC3S`=Dh)X(uSQ(x=7~`1vO6$X0`oqfImc%Ed zalUrAZ)tBO^$baQVyyI?ou*sbTS@cZ!boR)V%3MZaXyLN^iCn4*-*TdakuKFNhtYh z=I`RIj245mowHv?YX5t8$n;0=&~v+nR-aftth9<8>X_FyWBG*2<<{P%O!N+g)egOH z@Uy>qqk?Er6>{iTHY@9gl}U3xu$gD>)DJ78#$X6}Ud^(hepsn>a83%yn1{5tGR$Y^ z={l7}(`p}Y@N-%j##6s%YlPtb@bcgdett>s)Z)KpW#d_2-rdsP%AlxVmV^UOX>Vny zE6HW;Ofq!qfRXrp?`0?|ouv3|z_&EH!H;P6^t7-c9j|Ag=QTqdvHQIY+Fe<8T*FX7 zyur^}`tDLe`z6s0gxG<wHTkeoJK*S)!MY3Gmj19(E5vB5J&v_+@N;OAiH`m9XGk(+ zLwNB9Kfk24OO1k0#?gyW?B(w~yRKdEcdZtK^g}1Dm~CX57`0Hod0DxT=P$$o{C@Tl zd?&@nq;K%^OYfqZL_jaerfc8e=a+QSwF7CJ4g16!{QQ#Mfx&<E2?)!EX5tNgeo1S! z?^4*pQ6X;db4ri>)w1>gG~}Z7gh9-CkRG`|{L?#)CRzQKaDV%IZ1^H;w~7aY?oRU9 zCy!ljM7jb@`GkCx>`wC7hpc_NYp(#jV6}=d!fTQrfA_*rM@Hz{9{c2xmJ<-6)??N% zO+5C=Lwj*gZ1s`F%qU(Ht(rXn8p<|fS?RG)?wUItXey(x>FurT8+M7_Va5vpsnQ<% z<h~otl3sPtc87W9y_a1(V4DrIb}B8sJ@(06r;Ij(Xrj53Jod@>O%&y6OfUc??XC&D z=QL4l-w4^O8+uG0`{b_vZavWekG&)i-fK7Ycay#|lKDIPy=>ZdS|dam)x?J76EK2X zyFDGSRT}$Izmvy4x$ROWJ}Fb+x9yI{KDjA|U^t3bJF?hgA7WZH$yA7&mRNdw?30`J zhL**w4OF+Zx3X$IX-NRJu`S7CpIo(`v;;N7=%60-*e5fA%G*3G4u~AXn#p6ITy^Gd zk<A-B$d=w7`{Zg73-|z-YW+?g`{b$>q6Ic@7K>Qnb$GU(3$x{_xT;PnL_9p`u}?0_ z64fc-a)<lU+hd<xc0luW6|#-$V;+<=eQ8qEgH?zHJ|TMUwf$Ze&G|YaS$t%g$3D4e zjfJin7xav-?XeF$(t2C;?uq!$7T+HG<f1*THg>+*<dr=3$ysNT+6aFrMbpGvnRUvj zjao&oH)+3@B#*q!QxU)B;qMRZlXVgRnnVzXY4U-6vLd`%<n1E{Kd?{MzC&Ap1l>lj zz5KvF#zR!*`757#dn=PgRc`&FeT&6w?GNn3Ff4EL)JzG6WR<_Sw6C#AJ9kZhon*7C zynIJ&%1^DTiPQoz+S-0ElOm;>Xku-HvaQL7m5O6)9CTOfJAhQDiOsGxQf{U(3;6^4 zMDqzlH{-neB!6I^Xg&!b>U-Q2z4Hh5fd>&M@Bn=xS**L0Kd=vT`4&bxLKWET3PIwm z49ZtghlJ|2wLh>=*xSMSG%08wt5pP;Ut4GHBD6iEl_<8X{J=h8H!)dzfM%xElk9mP zw&39kAkN4%V_5SC_6eJ)Uu#Rm+LVz!_91m1f0sdEbc@04u@8p~Ph~5ekvr}HURHYS zlV*J;T?(euSdDMtx?b6kVD`mjJf*W8)0iAdJSV-&q(}p-u54HnBF#%{Hk3xoi&kT^ z$3C!SPaP~Yda9=FrN=&Ul(MuIO{7b0s(tyyV;^wC6S1X2vlZ*yGy<phP#&3nC7s(c z&10W5g8I9X4fB+C5u2Ex9=$nLfe^9X@w^X5KqgJqY{$-f>_g)+X?C7oFJHBM;;~OM zj10iT$|FuZ_DS91n}Z=JYTF%;eNx+lFyCG>r1NQ|$37JM8{8l*4nC@;$3CfPWrK9? zAiQPtveILp)N~SH(*+M6(mrB2aeH=0C{vg@^`OT-bdLu;f<5ryk@Fb+&Yfyj%Jk2a zXKVYsq+hEh#5ZSZD($fkVD;&jC3fP(SRzItuSqazFx#1F9{T{YHFqLO4&F3Pyp=`I zyowwG%%j@hhhE#Pg=16M<0t<G9-ACDm`^<RNrvz^l@cqL8EfY~_DRq;`>R-+-C-_K zy*>6}VA7orpvQw#f<|y2%*x@FK=UOKZEe4o3^}(Z3`VdP#@lC)eel6k?ICf9lOyLn z?~_0{x;B`N0}9o|V;{}|mZFGc>6hW?fS&h(O?cuPJt6sRCczHp6Xx(olOc%OI6Qph zrFDwNzZ{Jk3o5kRJ9naTc$^%UYZ{Zo-g;?e<se>UCeb=5r<rc;O=pQu2K4t05+tgK zNiS`?Ln((W*9uWQ_5q1LQ3W|NVTsnuwYJATkWx?1=MD<1#@iQ<eIUG^yhI6ln$0^> z&fiwvL$+86@xv^2XyUAlQzu5KK{D;o+hd<-_=FP}w%VAS;;~PhTEA%xAnIdxJobrG zD_d?wrVPz_xi|2#k|@$_5DXDF`Lg`&u@6V#x;s!3)WP-PCGD{fU|r*zG5V~?LIA!s zfe(JNffHcn9nDL6oR`*$3?+dkr?j{7hKsV73~J}ZSUmQLU27F21BZszNx1gnH0k^5 z%UYWdWrxI!<r9y6I3UvsQ79ms=$o{+638fT^FT64Z#dTWRyNZc_(-N%#Cq(*;hSbd zDUxXxCm#Dm>+_HdoKDy&ZSmNLLw3^}ga_0W8<tNz_K9_q8p}$G6J(D`dn=i5<!zpv z<t)R{BM0zqcdEq+jObO3Z2<*4X-59NG;3FUVzU$o+e=$~XEH5q_b)3w_KA1PTY8f$ zH^IH7y_HmH)kLtSO#*U`{mz}NEGRPwXBl=Ii?ZdV^==FEja-LVA-Od1*arloSu8|P zHf~04|GYIZj)TvE!VJw6Zgn{6-3-Jhf(H*~xOnUnlhtowD&sz&TzY%#6I0aQkch#) zN2@LE_mZ;t_*;%TaHG83(%#CbJaXpno%*dviOJVl$+`Nowp_`XM?I0lA)fvALU<7n zsM3Jqab&T_K3p=<Y~bww;%1Y4c<Jr257%%s=c8NzG}J2xeQ!-{p695J&V9s*$39%s z(fSSD!CBp*iL)|Hy+sBC0#dRrMT)*P;bc~`0e}Ekpy;uB?8CW>Ml6%jMJ;@MQa$#8 zi+Qj;Jda%9(dtt@_JNny-3gR3t_#@O-paAJ0}&V}g3jWkdh8R%z8trtsSsRI(X~DH z30*mk93W$oVdUzu54cr#K44ZgKDK)76Sz7iU(G{4!`s_AH!Pjoou(6d611M|<`G}x zrL{{z({LJOJq^ClOY2>WG^r=|g-nU>>ah<v>e(GozVK`sgVkf7P!-!V=rR{u-;uWe z$_94(sSq47Qmd>tRF8e&1WlT3xLfnm+hd<#eJ26PK##Wb9{T`eb#1vy)QxB3(ty(& zM7eg7y@W7=Gqs5I*oP}8CQUO)$Ig4~6FBtJwLxL+$Oeyn!VLo?ss?C1SgjIJ_VzbX zt!wkuTx^n;%Y&Zx2{xy}o3AU(Chhl<8@IZ)^oAp1J@(-m$Aj6RuI9;ZK><0vDe=$R zaGLZ>t5qKRgs2lEL>KeC-H+vL!>_HCjdY)I)QZ`_P)^!z@IZ?peeAr)K7jyNy}>@o z*cQ1T_}-nMXGeenxn`;ug7co2beT7BWqqzAbE(O&W_7#|(pqDMas%~R#5(MQw6e}f zQz5KN!5=wI#s(xy6G|{=YGU+?Du;c9eK((QE(MKk(%#CU$P`Egk8C$eIF0j~SgmU0 z<#FFfu3r51H%GWS>8@*!FgvP=!#+qWwomZ9=P6coybsdK`#=>^?d^sGINoVu++&jY zvfG__x&Qjs+fKz(qc|NrTXoonfk>HQ20CWI0~I*z1GH2OkvNQ|4q7%i?1QwPjRH)G zD!Y>-!|7XZPIbh=JV?t4!m+luvX~~7uRiV)Rmb~)v`mvK?3PV1Ld?H4fq~hI{G{5s zWn-*dbJz!h+<Ka%)^X>I;_TLDg3`66fNba~*&vrG-kM~^C$t6Xpxw1-j`!hoN!eSZ z@t}2A`IW|d?HhK9zbg%L?Dn}daoC5oEn)=*035`OE$yx3mY}@N!(}NDo>iabuutJM zLVH@ptOMamkiGT3A+)SbDdL1ov1W7Fr@*UeRPjaU-9!j~zqVl?t{5;0XdP@0`*1#I zm8}pb$Gw8)un*FP!V1jrH1sGm(925hm1-T7v6(qSyt(}CuumC7IXosdFofOrkzez? z*S^8!@*pq(U~Fr<y&OZ&(-H?IOpJ<@q`bV>z6Z*+Hl2jo%GUN)c0KK+ymDf5=<Tpi z8GSFd*5+2~O{6WKIPAkzXuq)$N|i$f)x=>Rr1e&665@CqRyyp1v~mSV%Sn^gs^)kf z&L;F!910%?8#Bx~k@H|xRxUxvGDX|YJM2^Bx~Q1NLq5yTrOZl)eUMh(2WjqzSl^Mu z&-Y%kC3|VsX0d4#`uZIg;`?oxqS-n<gGt<{giW-la@YrH+j%+O<dT)Fwf53sAEb3c zhla>-VTyfLvwdj-K2p6&L~4qy?XASiDh)ENb~B@S>_ajr)|A_{$B86e+IcYQy%}!l zF_YM&%e_1=Z8^_ack;2#@jj4~J4Df)0~StFHz->k^w@`=8r_?PwA{6@6C3UmI!*3N zIBRX*KF$FbdH&nqpa8Ak3<dD9=5LRE`ZS~joH?<k9M`{M5QMI~BR65VJEwc;u@86P zweQe)etFPiA1G>#Z^|Z<fK_{seYl^wQfv8yF^(Hqs)@%wPzB}_N^mkRta<Fy?Y<@# zctChZpLe_ute*8W;n|Mc%YZ%SL13LI%99ci3$B&FB~H4>KHMuc4^lPnviSEu-G`5$ literal 0 HcmV?d00001 diff --git a/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps006.log b/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps006.log new file mode 100644 index 0000000000000000000000000000000000000000..58cff9d956f25913fa66096d764d8464719edfb9 GIT binary patch literal 24947 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Ⓢ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 literal 0 HcmV?d00001 -- GitLab