diff --git a/tests/SetEpsTestCasesFromScratch/f77/Makefile b/tests/SetEpsTestCasesFromScratch/f77/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..246d1222da1336f125659b20d1856a4905d1f98d
--- /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 0000000000000000000000000000000000000000..d4839456790eb5b2cb8d560f56616f7d3432a629
--- /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 0000000000000000000000000000000000000000..6841ba89f000e319e3c37e61c774fbb097ad5784
--- /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 0000000000000000000000000000000000000000..f5a8e515567c4f4d1e9bde28d4efd172018c2af5
--- /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 0000000000000000000000000000000000000000..768825cb831b12aad6368388adb7ebaf3656f791
--- /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
Binary files /dev/null and b/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps001.log differ
diff --git a/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps004.log b/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps004.log
new file mode 100644
index 0000000000000000000000000000000000000000..a851395f53c8fb965813dff69a69c879f8039f6a
Binary files /dev/null and b/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps004.log differ
diff --git a/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps006.log b/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps006.log
new file mode 100644
index 0000000000000000000000000000000000000000..58cff9d956f25913fa66096d764d8464719edfb9
Binary files /dev/null and b/tests/SetEpsTestCasesFromScratch/f77/epsLog/seteps006.log differ