From 8dfdeabf136819348975e9d97235e45ad056454d Mon Sep 17 00:00:00 2001
From: kamischi <karl-michael.schindler@web.de>
Date: Fri, 13 Jan 2023 17:08:23 +0100
Subject: [PATCH] Initial commit

First tests works and a source code listing with number of execution for each line is obtained, but some more refinements, like automation and similar, are required.
---
 source/f90/fcat-analysis/Makefile             |   87 +
 source/f90/fcat-analysis/bosin                |    6 +
 source/f90/fcat-analysis/boson_all-fcat.f90   | 1609 +++++++++++++
 source/f90/fcat-analysis/boson_all.f90        |  972 ++++++++
 source/f90/fcat-analysis/bosonf90_fcat_output | 1104 +++++++++
 source/f90/fcat-analysis/bosou                |  853 +++++++
 source/f90/fcat-analysis/eels_all-fcat.f90    | 2085 +++++++++++++++++
 source/f90/fcat-analysis/eels_all.f90         | 1353 +++++++++++
 source/f90/fcat-analysis/eelsf90_fcat_output  | 1142 +++++++++
 source/f90/fcat-analysis/eelsin               |   16 +
 source/f90/fcat-analysis/eelsou               |  328 +++
 11 files changed, 9555 insertions(+)
 create mode 100644 source/f90/fcat-analysis/Makefile
 create mode 100644 source/f90/fcat-analysis/bosin
 create mode 100644 source/f90/fcat-analysis/boson_all-fcat.f90
 create mode 100644 source/f90/fcat-analysis/boson_all.f90
 create mode 100644 source/f90/fcat-analysis/bosonf90_fcat_output
 create mode 100644 source/f90/fcat-analysis/bosou
 create mode 100644 source/f90/fcat-analysis/eels_all-fcat.f90
 create mode 100644 source/f90/fcat-analysis/eels_all.f90
 create mode 100644 source/f90/fcat-analysis/eelsf90_fcat_output
 create mode 100644 source/f90/fcat-analysis/eelsin
 create mode 100644 source/f90/fcat-analysis/eelsou

diff --git a/source/f90/fcat-analysis/Makefile b/source/f90/fcat-analysis/Makefile
new file mode 100644
index 0000000..a519b00
--- /dev/null
+++ b/source/f90/fcat-analysis/Makefile
@@ -0,0 +1,87 @@
+.SUFFIXES: .c .f .f90 .F90 .for .FOR .ftn .FTN .o
+
+# the fortran compiler
+FC = gfortran 
+
+# the options for the fortran compiler
+# FFLAGS = -fbounds-check
+# FFLAGS = -O3 -ff2c -gw
+FFLAGS = -g -gdwarf-2 -fbounds-check -fcheck=all -fdiagnostics-color=auto
+
+# fcat tool
+FCAT = fcat
+
+# Stuff for the python modules
+# Python3 and its numpy must be installed.
+PYTHON3 = python3
+
+# the implicit rule for compiling for files
+# %.o: %.for ; $(FC) $(FFLAGS) -c -o $@ $<
+#%-fcat.f90: %.f90 ; fcat -count %.f90 > %-fcat.f90
+%.o:        %-fcat.f90 ; $(FC) $(FFLAGS) -c $< 
+%_mod.mod:  %.f90 ; $(FC) $(FFLAGS) -c $<
+
+all: boson eels eels-boson pylibs
+
+bosonmods = sicot_mod.mod sintr_mod.mod rcffi_mod.mod
+doboson-fcat.f90: doboson.f90
+	$(FCAT) -count doboson.f90 > doboson-fcat.f90
+doboson.o: doboson-fcat.f90 $(bosonmods)
+
+sicot_mod.mod: sintr_mod.mod
+
+bosonsubs = doboson.o respon.o sicot.o sintr.o rcffi.o o1.o o2.o
+boson-fcat.f90: boson.f90
+	$(FCAT) -count boson.f90 > boson-fcat.f90
+boson: boson-fcat.f90 change_working_dir.o $(bosonsubs) $(bosonmods)
+	$(FC) $(FFLAGS) -o bosonf90 boson-fcat.f90 change_working_dir.o $(bosonsubs) 
+
+eelsmods = quanc8_mod.mod queels_mod.mod seteps_mod.mod
+doeels-fcat.f90: doeels.f90
+	$(FCAT) -count doeels.f90 > doeels-fcat.f90
+doeels.o: doeels-fcat.f90 $(eelsmods)
+
+queels_mod.mod: quanc8_mod.mod fint1_mod.mod fint2_mod.mod fint3_mod.mod
+quanc8_mod.mod: fun_mod.mod
+fint1_mod.mod: surlos_mod.mod
+fint2_mod.mod: surlos_mod.mod
+fint3_mod.mod: surlos_mod.mod
+
+eelssubs = doeels.o usurlo.o quanc8.o fun.o queels.o fint1.o fint2.o fint3.o surlos.o seteps.o phint.o qrat.o
+eels-fcat.f90: eels.f90
+	$(FCAT) -count eels.f90 > eels-fcat.f90
+eels: eels-fcat.f90 change_working_dir.o $(eelssubs) $(eelsmods)
+	$(FC) $(FFLAGS) -o eelsf90 eels-fcat.f90 change_working_dir.o $(eelssubs)
+
+eels-boson: eels-boson.f90 change_working_dir.o $(eelssubs) $(eelsmods) $(bosonsubs) $(bosonmods)
+	$(FC) $(FFLAGS) -o eels-boson eels-boson.f90 change_working_dir.o $(eelssubs) $(bosonsubs)
+
+pylibs: doeels-py doboson-py
+
+doeels-py: doeels.f90 quanc8.f90 surlos.f90 fint1.f90 fint2.f90 fint3.f90 queels.f90 phint.f90 qrat.f90 usurlo.f90
+	$(PYTHON3) -m numpy.f2py -c seteps.f90 doeels.f90 quanc8.f90 surlos.f90 fint1.f90 fint2.f90 fint3.f90 queels.f90 phint.f90 qrat.f90 usurlo.f90 -m doeels
+
+doboson-py: doboson.f90 sicot.f90 sintr.f90 rcffi.f90 respon.f90 o1.f90 o2.f90
+	$(PYTHON3) -m numpy.f2py -c o1.f90 o2.f90 sintr.f90 rcffi.f90 respon.f90 sicot.f90 doboson.f90 -m doboson
+
+fcat: eelsf90 bosonf90
+	./eelsf90 > eelsf90_fcat_output
+	fcat -count  eels.f90 eelsf90_fcat_output
+#	fcat -report eels.f90 eelsf90_fcat_output
+	./bosonf90 > bosonf90_fcat_output
+	fcat -count  boson.f90 bosonf90_fcat_output
+	fcat -count  doboson.f90 bosonf90_fcat_output
+#	fcat -report boson.f90 bosonf90_fcat_output
+
+clean:
+	rm -f *.o
+	rm -rf *.dSYM
+	rm -rf *.mod
+	rm -rf *.so
+	rm -rf *-fcat.*
+	rm -f bosonf90   bosonf90.exe
+	rm -f eelsf90    eelsf90.exe
+	rm -f eels-boson eels-boson.exe
+
+.PHONY: all clean pylibs fcat
+
diff --git a/source/f90/fcat-analysis/bosin b/source/f90/fcat-analysis/bosin
new file mode 100644
index 0000000..7dd3315
--- /dev/null
+++ b/source/f90/fcat-analysis/bosin
@@ -0,0 +1,6 @@
+ 300.0      t
+  25.0      width
+   0.5      gauss
+   0.3      asym
+-500.0      emin
+1200.0      emax
diff --git a/source/f90/fcat-analysis/boson_all-fcat.f90 b/source/f90/fcat-analysis/boson_all-fcat.f90
new file mode 100644
index 0000000..9660331
--- /dev/null
+++ b/source/f90/fcat-analysis/boson_all-fcat.f90
@@ -0,0 +1,1609 @@
+program boson
+
+! *******************************************************************
+! *                                                                 *
+! * perform the quantum-mechanical complement to the classical step *
+! * of the dielectric theory of eels in specular geometry using a   *
+! * suitable thermodynamical average of the quantized surface       *
+! * harmonic oscillators                                            *
+! *                                                                 *
+! *******************************************************************
+
+  implicit none
+
+  integer, parameter :: mmax=14, nmax=2**mmax
+  double precision :: asym, emax, emin, gauss, t, width, wmin, wmax, y
+  double precision :: p2(nmax)
+  integer :: i, np, ioStatus
+  character (len = 72) :: comment(2)
+  double precision, allocatable :: xout(:), yout(:)
+  integer :: nout
+
+! *** read input parameters
+
+      call FCAT_boson_all(1)
+  call change_working_dir()
+      call FCAT_boson_all(2)
+  open(unit = 13, file = 'bosin')
+! target temperature (Kelvin)
+      call FCAT_boson_all(3)
+  read(13, *) t
+! width of the instrumental response (cm**-1)
+      call FCAT_boson_all(4)
+  read(13, *) width
+! fraction of gaussian for the instrumental response
+      call FCAT_boson_all(5)
+  read(13, *) gauss
+! asymmetry of the instrumental response
+      call FCAT_boson_all(6)
+  read(13, *) asym
+! lower and upper energy losses for this computation (cm**-1)
+      call FCAT_boson_all(7)
+  read(13, *) emin
+      call FCAT_boson_all(8)
+  read(13, *) emax
+      call FCAT_boson_all(9)
+  close(unit=13)
+
+      call FCAT_boson_all(10)
+  write(*,*) 'program boson (September 2020)'
+      call FCAT_boson_all(11)
+  write(*,'(a, f6.1, a, f7.2, a)') ' t =', t, ' K, width =', width, ' cm**-1'
+      call FCAT_boson_all(12)
+  write(*,'(a, f5.2, a, f5.2)') ' gauss =', gauss, ', asym =', asym
+      call FCAT_boson_all(13)
+  write(*,'(a, g11.4, a, g11.4, a)') ' energy losses from', emin, ' to', emax, ' cm**-1'
+
+! *** read the table of values of the classical loss spectrum
+
+      call FCAT_boson_all(14)
+  open(unit = 12, file = 'eelsou')
+      call FCAT_boson_all(15)
+  read(12, '(a48)') comment(1)
+      call FCAT_boson_all(16)
+  read(12, '(a72)') comment(2)
+      call FCAT_boson_all(17)
+  np = 0
+      call FCAT_boson_all(18)
+  do
+      call FCAT_boson_all(19)
+    read(12, *, IOSTAT = ioStatus) wmax, y
+      call FCAT_boson_all(20)
+    if (ioStatus /= 0) exit
+      call FCAT_boson_all(21)
+    if (wmax < 0.0d0) cycle
+      call FCAT_boson_all(22)
+    np = np + 1
+      call FCAT_boson_all(23)
+    p2(np) = y
+      call FCAT_boson_all(24)
+    if (np == 1) wmin = wmax
+      call FCAT_boson_all(25)
+    if (np < nmax) cycle
+      call FCAT_boson_all(26)
+  enddo
+      call FCAT_boson_all(27)
+  close(unit = 12)
+
+      call FCAT_boson_all(28)
+  if (np <= 0) then 
+      call FCAT_boson_all_rep()
+       stop '*** no input values for pcl ***'
+       endif
+
+      call FCAT_boson_all(29)
+  write(*,*) comment(2)
+      call FCAT_boson_all(30)
+  write(*,'(a, i6, a, g15.7, a, g15.7)') ' read', np, ' values of pcl from', wmin, ' to', wmax
+
+! length calculation for xout, yout.
+!
+      call FCAT_boson_all(31)
+  nout = 2**14
+      call FCAT_boson_all(32)
+  allocate (xout(nout))
+      call FCAT_boson_all(33)
+  allocate (yout(nout))
+
+      call FCAT_boson_all(34)
+  call doboson(t, width, gauss, asym, emin, emax, wmin, wmax, np, p2, xout, yout, nout)
+
+      call FCAT_boson_all(35)
+  open(unit = 14, file = 'bosou')
+      call FCAT_boson_all(36)
+  write(14, '(a, a, f6.1, a, f5.2)') comment(1), 'T =', t, ' GAUSS =', gauss
+      call FCAT_boson_all(37)
+  write(14, *) comment(2)
+      call FCAT_boson_all(38)
+  do i = 1, nout
+      call FCAT_boson_all(39)
+    write(14, '(2e15.7)') xout(i), yout(i)
+      call FCAT_boson_all(40)
+  end do
+      call FCAT_boson_all(41)
+  close(unit = 14)
+      call FCAT_boson_all(42)
+  write(*,*) nout, ' values written on disk'
+
+      call FCAT_boson_all(43)
+  deallocate (xout, yout)
+      call FCAT_boson_all(44)
+      call FCAT_boson_all_rep()
+  stop
+      call FCAT_boson_all_rep()
+end program boson
+subroutine change_working_dir()
+
+! This routine gets the first argument of the commandline and takes it
+! as the path to change the working directory
+! used intrinsic routines:
+! iarg returns the number of commandline arguments without the program cname.
+! chdir changes the directory and returns 0 on success.
+! trim removes blanks from strings.
+
+  character (len = 256) :: argument
+  integer :: status
+
+      call FCAT_boson_all(45)
+  if (iargc() == 1) then
+      call FCAT_boson_all(46)
+    call getarg(1, argument)
+      call FCAT_boson_all(47)
+    status = chdir(trim(argument))
+      call FCAT_boson_all(48)
+    if (status /= 0) then
+      call FCAT_boson_all(49)
+      write (*,*) '*** change directory failed ***'
+      call FCAT_boson_all(50)
+      write (*,*) 'directory tried: ', trim(argument)
+      call FCAT_boson_all(51)
+      write (*,*) 'error code (see: man chdir): ', status
+      call FCAT_boson_all(52)
+      write (*,*) 'continuing in the start directory'
+      call FCAT_boson_all(53)
+    end if
+      call FCAT_boson_all(54)
+  end if
+
+      call FCAT_boson_all(55)
+  return
+end subroutine change_working_dir
+double precision function respon(w, width)
+
+!*******************************************************************
+!                                                                  *
+! instrumental response of the spectrometer for the frequency w    *
+! width is the full width at half maximum of the response function *
+!                                                                  *
+!*******************************************************************
+
+  implicit none
+  double precision, intent(in) :: w, width
+
+  double precision :: u
+
+      call FCAT_boson_all(56)
+  u = 1.25d0 * w / width
+      call FCAT_boson_all(57)
+  if (u <= -1.0d0 .or. u >= 2.0d0) then
+      call FCAT_boson_all(58)
+     respon = 0.0d0
+  elseif (u > 1.0d0) then
+      call FCAT_boson_all(59)
+      call FCAT_boson_all(60)
+     respon = 4.0d0 + 2 * dsqrt((u - 1.0d0)**3) - 3 * u
+  elseif (u > 0.0d0) then
+      call FCAT_boson_all(61)
+      call FCAT_boson_all(62)
+     respon = 2.0d0 - 4 * dsqrt(u**3) + 3 * u
+  else
+      call FCAT_boson_all(63)
+      call FCAT_boson_all(64)
+     respon = 2 * dsqrt((u + 1.0d0)**3)
+      call FCAT_boson_all(65)
+  endif
+      call FCAT_boson_all(66)
+  return
+      call FCAT_boson_all_rep()
+end function respon
+module sicot_mod
+contains
+subroutine sicot(f, m, h, x0)
+
+! *******************************************************************
+! *                                                                 *
+! * integral transform g(y, x0) of a real function f(x) defined by  *
+! *                                                                 *
+! * g(x0, y) = integral of f(x)/tanh(x/x0)*(1-cos(x*y)) dx          *
+! *                                                                 *
+! * f(x) is tabulated on the mesh of points xj = (j-1/2)*h ,        *
+! * j = 1, 2, ..., n ,  with n = 2**m                               *
+! * g(x0, y) is computed on the mesh of points yk = k*2pi/(n*h) ,   *
+! * k = 0, 1, 2, ..., n-1                                           *
+! *                                                                 *
+! * input ...                                                       *
+! * f(j) contains the value of f(xj) , j = 1, 2, ..., n             *
+! * m is such that n = 2**iabs(m)                                   *
+! * h is the step size (must be positive)                           *
+! *                                                                 *
+! * output ...                                                      *
+! * f(k+1) contains g(x0, yk), k = 0, 1, ..., n-1                   *
+! *                                                                 *
+! * computing remarks ...                                           *
+! * f is a real array with dimension n or more                      *
+! * it is supposed that f(x) is zero for x > n*h                    *
+! * external reference : sintr (sine transform of a real function). *
+! *                                                                 *
+! *******************************************************************
+
+  use sintr_mod
+
+  implicit none
+
+  double precision, intent(in out) :: f(*)
+  integer, intent(in) :: m
+  double precision, intent(in) :: h
+  double precision, intent(in) :: x0
+
+  double precision :: a, b, c, d, e, s, sa
+  integer :: i, j, msign, n
+
+  logical :: debug
+
+      call FCAT_boson_all(67)
+  debug = .false.
+      call FCAT_boson_all(68)
+  if (m == 0) then
+      call FCAT_boson_all(69)
+    f(1) = 0.0d0
+      call FCAT_boson_all(70)
+    return
+      call FCAT_boson_all(71)
+  endif
+
+      call FCAT_boson_all(72)
+  if (h <= 0.0d0) then
+      call FCAT_boson_all(73)
+    if (debug) write(*,*) ' *** incorrect step size in <sicot>, h =', h, ' ***'
+      call FCAT_boson_all(74)
+      call FCAT_boson_all_rep()
+    stop
+      call FCAT_boson_all(75)
+  endif
+
+      call FCAT_boson_all(76)
+  if (x0 < 0.0d0) then
+      call FCAT_boson_all(77)
+    if (debug) write(*,*) ' *** incorrect input in <sicot>, x0 =', x0, ' ***'
+      call FCAT_boson_all(78)
+      call FCAT_boson_all_rep()
+    stop
+      call FCAT_boson_all(79)
+  endif
+
+      call FCAT_boson_all(80)
+  n = 2**iabs(m)
+
+! *** evaluate the integral from xj to infinity of f(x)/tanh(x/x0) dx
+! and store the result in f(j)
+
+      call FCAT_boson_all(81)
+  c = 0.0d0
+      call FCAT_boson_all(82)
+  if (x0 > h / 16) then
+      call FCAT_boson_all(83)
+    c = dexp(-h / x0)
+      call FCAT_boson_all(84)
+  endif
+      call FCAT_boson_all(85)
+  s = 1.0d0 - c
+      call FCAT_boson_all(86)
+  e = c**2
+      call FCAT_boson_all(87)
+  a = 0.25d0 * h
+      call FCAT_boson_all(88)
+  b = 0.25d0 * x0
+      call FCAT_boson_all(89)
+  do i = 1, n
+      call FCAT_boson_all(90)
+    if (i < n) then
+      call FCAT_boson_all(91)
+      f(i) = f(i) + f(i+1)
+      call FCAT_boson_all(92)
+    endif
+      call FCAT_boson_all(93)
+    d = a
+      call FCAT_boson_all(94)
+    if (s /= 1.0d0) then
+      call FCAT_boson_all(95)
+      sa = s
+      call FCAT_boson_all(96)
+      c = c * e
+      call FCAT_boson_all(97)
+      s = 1.0d0 - c
+      call FCAT_boson_all(98)
+      d = d + b * dlog(s / sa)
+      call FCAT_boson_all(99)
+    endif
+      call FCAT_boson_all(100)
+    f(i) = f(i) * d
+      call FCAT_boson_all(101)
+  enddo
+
+      call FCAT_boson_all(102)
+  j = n
+      call FCAT_boson_all(103)
+  do i = 2, n
+      call FCAT_boson_all(104)
+    j = j - 1
+      call FCAT_boson_all(105)
+    f(j) = f(j) + f(j + 1)
+      call FCAT_boson_all(106)
+  enddo
+! alternative, but not yet tested:
+!  do j = n - 1, 1, -1
+!    f(j) = f(j) + f(j + 1)
+!  enddo
+      call FCAT_boson_all(107)
+  msign = -iabs(m)
+      call FCAT_boson_all(108)
+  call sintr(f, msign, h)
+      call FCAT_boson_all(109)
+  return
+end subroutine sicot
+end module sicot_mod
+module sintr_mod
+contains
+subroutine sintr(f, msign, h)
+
+! *******************************************************************
+! *                                                                 *
+! * integral sine transform of a real function f(x)                 *
+! *                                                                 *
+! * g(y) = integral from zero to infinity of f(x)*sin(x*y) dx       *
+! * if msign >= 0 or                                                *
+! * g(y) = y * integral from zero to infinity of f(x)*sin(x*y) dx   *
+! * if msign < 0                                                    *
+! *                                                                 *
+! * f(x) is tabulated on the mesh of points xj = (j-1/2)*h ,        *
+! * j = 1, 2, ..., n ,  with n = 2**iabs(msig)                      *
+! * g(y) is computed on the mesh of points yk = k*2pi/(n*h) ,       *
+! * k = 0, 1, 2, ..., n-1                                           *
+! *                                                                 *
+! * input ...                                                       *
+! * f(j) contains the value of f(xj) , j = 1, 2, ..., n             *
+! * msign is such that n = 2**iabs(msign)                           *
+! * h is the step size (must be positive)                           *
+! *                                                                 *
+! * output ...                                                      *
+! * f(k+1) contains g(yk), k = 0, 1, ..., n-1                       *
+! *                                                                 *
+! * computing remarks ...                                           *
+! * f is a real array with dimension n or more                      *
+! * it is supposed that f(x) is zero for x > n*h                    *
+! *                                                                 *
+! *******************************************************************
+
+  implicit none
+
+  double precision, intent(in out) :: f(*)
+  integer, intent(in) :: msign
+  double precision, intent(in) :: h
+
+  double precision :: a, c, ca, d, e, fnp1, s, sa, ti, ti1, ti2, tr, tr1, tr2
+  double precision :: ui, ur, wi, wr
+  integer :: i, i2, ip2, j, j2, k, l, le, le1, m2, n, n2, nm1, nv2
+
+  logical :: debug
+
+      call FCAT_boson_all(110)
+  debug = .false.
+      call FCAT_boson_all(111)
+  if (h <= 0.0d0) then
+      call FCAT_boson_all(112)
+    if (debug) write(*,*) ' *** incorrect step size in <sintr>, h: ', h, ' ***'
+      call FCAT_boson_all(113)
+      call FCAT_boson_all_rep()
+    stop
+      call FCAT_boson_all(114)
+  endif
+
+      call FCAT_boson_all(115)
+  if (msign == 0) then
+      call FCAT_boson_all(116)
+    f(1) = 0.0d0
+      call FCAT_boson_all(117)
+    return
+      call FCAT_boson_all(118)
+  endif
+
+! *** for j and k = 0, 1, 2 ... n/2-1, compute
+! s1 = sum ( f(2*j+1)*cos(4*pi*k*j/n) - f(2*j+2)*sin(4*pi*k*j/n) )
+! s2 = sum ( f(2*j+1)*sin(4*pi*k*j/n) + f(2*j+2)*cos(4*pi*k*j/n) )
+! store s1 in f(2*k+1) and s2 in f(2*k+2)
+! (adapted from cfft routine, cern library member d704)
+
+      call FCAT_boson_all(119)
+  m2 = iabs(msign) - 1
+      call FCAT_boson_all(120)
+  n = 2**m2
+      call FCAT_boson_all(121)
+  if (n /= 1) then
+      call FCAT_boson_all(122)
+    nv2 = n / 2
+      call FCAT_boson_all(123)
+    nm1 = n - 1
+      call FCAT_boson_all(124)
+    j = 1
+      call FCAT_boson_all(125)
+    do i = 1, nm1
+      call FCAT_boson_all(126)
+      if (i < j) then
+      call FCAT_boson_all(127)
+        i2 = i + i
+      call FCAT_boson_all(128)
+        j2 = j + j
+      call FCAT_boson_all(129)
+        ti = f(j2)
+      call FCAT_boson_all(130)
+        f(j2) = f(i2)
+      call FCAT_boson_all(131)
+        f(i2) = ti
+      call FCAT_boson_all(132)
+        i2 = i2 - 1
+      call FCAT_boson_all(133)
+        j2 = j2 - 1
+      call FCAT_boson_all(134)
+        tr = f(j2)
+      call FCAT_boson_all(135)
+        f(j2) = f(i2)
+      call FCAT_boson_all(136)
+        f(i2) = tr
+      call FCAT_boson_all(137)
+      endif
+      call FCAT_boson_all(138)
+      k = nv2
+      call FCAT_boson_all(139)
+      do while (j > k)
+      call FCAT_boson_all(140)
+        j = j - k
+      call FCAT_boson_all(141)
+        k = k / 2
+      call FCAT_boson_all(142)
+      enddo
+      call FCAT_boson_all(143)
+      j = j + k
+      call FCAT_boson_all(144)
+    enddo
+      call FCAT_boson_all(145)
+    do i = 1, n, 2
+      call FCAT_boson_all(146)
+      i2 = i + i
+      call FCAT_boson_all(147)
+      ti = f(i2 + 2)
+      call FCAT_boson_all(148)
+      f(i2 + 2) = f(i2) - ti
+      call FCAT_boson_all(149)
+      f(i2) = f(i2) + ti
+      call FCAT_boson_all(150)
+      i2 = i2 - 1
+      call FCAT_boson_all(151)
+      tr = f(i2 + 2)
+      call FCAT_boson_all(152)
+      f(i2 + 2) = f(i2) - tr
+      call FCAT_boson_all(153)
+      f(i2) = f(i2) + tr
+      call FCAT_boson_all(154)
+    enddo
+      call FCAT_boson_all(155)
+    if (m2 /= 1) then
+      call FCAT_boson_all(156)
+      c = 0.0d0
+      call FCAT_boson_all(157)
+      s = 1.0d0
+      call FCAT_boson_all(158)
+      le = 2
+      call FCAT_boson_all(159)
+      do l = 2, m2
+      call FCAT_boson_all(160)
+        wr = c
+      call FCAT_boson_all(161)
+        wi = s
+      call FCAT_boson_all(162)
+        ur = wr
+      call FCAT_boson_all(163)
+        ui = wi
+      call FCAT_boson_all(164)
+        c = dsqrt(c * 0.5d0 + 0.5d0 )
+      call FCAT_boson_all(165)
+        s = s / (c + c)
+      call FCAT_boson_all(166)
+        le1 = le
+      call FCAT_boson_all(167)
+        le = le1 + le1
+      call FCAT_boson_all(168)
+        do i = 1, n, le
+      call FCAT_boson_all(169)
+          i2 = i + i
+      call FCAT_boson_all(170)
+          ip2 = i2 + le
+      call FCAT_boson_all(171)
+          ti = f(ip2)
+      call FCAT_boson_all(172)
+          f(ip2) = f(i2) - ti
+      call FCAT_boson_all(173)
+          f(i2) = f(i2) + ti
+      call FCAT_boson_all(174)
+          i2 = i2 - 1
+      call FCAT_boson_all(175)
+          ip2 = ip2 - 1
+      call FCAT_boson_all(176)
+          tr = f(ip2)
+      call FCAT_boson_all(177)
+          f(ip2) = f(i2) - tr
+      call FCAT_boson_all(178)
+          f(i2) = f(i2) + tr
+      call FCAT_boson_all(179)
+        enddo
+      call FCAT_boson_all(180)
+        do j = 2, le1
+      call FCAT_boson_all(181)
+          do i = j, n, le
+      call FCAT_boson_all(182)
+            i2 = i + i
+      call FCAT_boson_all(183)
+            ip2 = i2 + le
+      call FCAT_boson_all(184)
+            tr = f(ip2 - 1) * ur - f(ip2) * ui
+      call FCAT_boson_all(185)
+            ti = f(ip2) * ur + f(ip2 - 1) * ui
+      call FCAT_boson_all(186)
+            f(ip2) = f(i2) - ti
+      call FCAT_boson_all(187)
+            f(i2) = f(i2) + ti
+      call FCAT_boson_all(188)
+            i2 = i2 - 1
+      call FCAT_boson_all(189)
+            ip2 = ip2 - 1
+      call FCAT_boson_all(190)
+            f(ip2) = f(i2) - tr
+      call FCAT_boson_all(191)
+            f(i2) = f(i2) + tr
+      call FCAT_boson_all(192)
+          enddo
+      call FCAT_boson_all(193)
+          tr = ur * wr - ui * wi
+      call FCAT_boson_all(194)
+          ui = ui * wr + ur * wi
+      call FCAT_boson_all(195)
+          ur = tr
+      call FCAT_boson_all(196)
+        enddo
+      call FCAT_boson_all(197)
+      enddo
+      call FCAT_boson_all(198)
+    endif
+      call FCAT_boson_all(199)
+  endif
+
+! *** for j and k = 0, 1 ... n-1, transform the array f so obtained into
+! sum f(j+1)*cos(2*pi*k*j/n) and sum f(j+1)*sin(2*pi*k*j/n)
+! and multiply the results by (1 - cos(2*pi*k/n)) and sin(2*pi*k/n)
+
+      call FCAT_boson_all(200)
+  fnp1 = 4 * (f(1) - f(2))
+      call FCAT_boson_all(201)
+  a = 3.141592653589793238d0 / n
+      call FCAT_boson_all(202)
+  n2 = n + 1
+      call FCAT_boson_all(203)
+  n = 2 * n
+      call FCAT_boson_all(204)
+  if (n2 /= 2) then
+      call FCAT_boson_all(205)
+    c = 1.0d0
+      call FCAT_boson_all(206)
+    s = 0.0d0
+      call FCAT_boson_all(207)
+    ca = dcos(a)
+      call FCAT_boson_all(208)
+    sa = dsin(a)
+      call FCAT_boson_all(209)
+    k = n + 1
+      call FCAT_boson_all(210)
+    do j = 3, n2, 2
+      call FCAT_boson_all(211)
+      k = k - 2
+      call FCAT_boson_all(212)
+      d = c
+      call FCAT_boson_all(213)
+      c = d * ca - s * sa
+      call FCAT_boson_all(214)
+      s = d * sa + s * ca
+      call FCAT_boson_all(215)
+      tr1 = f(j) + f(k)
+      call FCAT_boson_all(216)
+      ti1 = f(j + 1) - f(k + 1)
+      call FCAT_boson_all(217)
+      d = f(j) - f(k)
+      call FCAT_boson_all(218)
+      e = f(j + 1) + f(k + 1)
+      call FCAT_boson_all(219)
+      tr2 = d * s + e * c
+      call FCAT_boson_all(220)
+      ti2 = e * s - d * c
+      call FCAT_boson_all(221)
+      f(j) = (1.0d0 - c) * (tr1 + tr2)
+      call FCAT_boson_all(222)
+      f(j + 1) = s * (ti1 + ti2)
+      call FCAT_boson_all(223)
+      f(k) = (1.0d0 + c) * (tr1 - tr2)
+      call FCAT_boson_all(224)
+      f(k + 1) = s * (ti2 - ti1)
+      call FCAT_boson_all(225)
+    enddo
+      call FCAT_boson_all(226)
+    n2 = n2 - 1
+      call FCAT_boson_all(227)
+    do j = 2, n2
+      call FCAT_boson_all(228)
+      j2 = j + j
+      call FCAT_boson_all(229)
+      f(j) = f(j2 - 1) + f(j2)
+      call FCAT_boson_all(230)
+    enddo
+      call FCAT_boson_all(231)
+    do j = 2, n2
+      call FCAT_boson_all(232)
+      f(n + 2 - j) = f(j)
+      call FCAT_boson_all(233)
+    enddo
+      call FCAT_boson_all(234)
+    n2 = n2 + 1
+      call FCAT_boson_all(235)
+  endif
+      call FCAT_boson_all(236)
+  f(n2) = fnp1
+      call FCAT_boson_all(237)
+  if (msign >= 0) then
+
+! *** normalization
+
+      call FCAT_boson_all(238)
+    c = 0.0d0
+      call FCAT_boson_all(239)
+    a = (a + a) / h
+      call FCAT_boson_all(240)
+    do j = 2, n
+      call FCAT_boson_all(241)
+      c = c + a
+      call FCAT_boson_all(242)
+      f(j) = f(j) / c
+      call FCAT_boson_all(243)
+    enddo
+      call FCAT_boson_all(244)
+  endif
+      call FCAT_boson_all(245)
+  f(1) = 0.0d0
+      call FCAT_boson_all(246)
+  return
+end subroutine sintr
+end module sintr_mod
+module rcffi_mod
+contains
+subroutine rcffi(ar, ai, msign, h)
+
+!   *******************************************************************
+!   *                                                                 *
+!   * using a radix-two fast-fourier-transform technique, rcffi       *
+!   * computes the fourier integral transform of a real function      *
+!   * f(x) or the inverse fourier transform of a complex function     *
+!   * such that g(-y) = conj(g(y)).                                   *
+!   * (adapted from cfft routine, cern library member d704)           *
+!   *                                                                 *
+!   * g(y) = integral f(x) * cexp(-i * x * y) dx    (msign < 0)       *
+!   *                                                                 *
+!   * f(x) = 1 / (2 * pi) integral g(y) * cexp(+i * y * x) dy  (msign > 0)    *
+!   *                                                                 *
+!   * f(x) is tabulated on the meshes of points defined by            *
+!   * xj = j * hx and -xj = -j * hx,  j = 0, +1, ..., n-2, n-1        *
+!   * ar(j+1) contains f(+xj) and ai(j+1) contains f(-xj)             *
+!   * (input when msign < 0 , output when msign >0)                   *
+!   * ar(1) may be different from ai(1)                               *
+!   *                                                                 *
+!   * g(y) is tabulated on the mesh of points defined by              *
+!   * yk = k * hy  , k = 0, 1, ..., n - 2, n - 1                      *
+!   * ar(j+1) contains real(g(yk)) and ai(j+1) contains aimag(g(yk))  *
+!   * (output when msign > 0 , input when msign < 0)                  *
+!   * remark :  g(-yk) = conj(g(+yk))                                 *
+!   *                                                                 *
+!   * n = 2**iabs(msign)  (msign is an input)                         *
+!   *                                                                 *
+!   * the step sizes satisfy                                          *
+!   * hy = (2 * pi) / (n * hx)   or    hx = (2 * pi) / (n * hy)       *
+!   * h is an input (h = hx if msign < 0 , h = hy if msign > 0)       *
+!   * h must be positive                                              *
+!   *                                                                 *
+!   * ar and ai are two real arrays with dimension n (input and       *
+!   * output)                                                         *
+!   *                                                                 *
+!   *******************************************************************
+
+  implicit none
+
+  double precision, intent(in out) :: ar(*)
+  double precision, intent(in out) :: ai(*)
+  integer, intent(in)  :: msign
+  double precision, intent(in) :: h
+
+  double precision :: a, as, c, s, t, ti, tr, ui, ur, wi, wr
+  integer :: i, ip, j, k, l, le, le1, m, n, nm1, nv2
+  logical :: debug
+
+      call FCAT_boson_all(247)
+  debug = .false.
+      call FCAT_boson_all(248)
+  as = 0.0d0
+      call FCAT_boson_all(249)
+  if (msign == 0) then
+      call FCAT_boson_all(250)
+    return
+      call FCAT_boson_all(251)
+  endif
+
+      call FCAT_boson_all(252)
+  if (h <= 0.0d0) then
+      call FCAT_boson_all(253)
+    if (debug) write(*,*) ' *** negative step size in <rcffi>, h = ', h, ' *** '
+      call FCAT_boson_all(254)
+      call FCAT_boson_all_rep()
+    stop
+      call FCAT_boson_all(255)
+  endif
+
+! *** initialization
+
+      call FCAT_boson_all(256)
+  m = iabs(msign)
+      call FCAT_boson_all(257)
+  n = 2**m
+      call FCAT_boson_all(258)
+  if (msign > 0) then
+      call FCAT_boson_all(259)
+    ar(1) = 0.5d0 * ar(1)
+  else
+      call FCAT_boson_all(260)
+      call FCAT_boson_all(261)
+    as = ar(1) - ai(1)
+      call FCAT_boson_all(262)
+    ar(1) = 0.5d0 * (ar(1) + ai(1))
+      call FCAT_boson_all(263)
+    do i = 2, n
+      call FCAT_boson_all(264)
+      ar(i) = ar(i) + ai(n - i + 2)
+      call FCAT_boson_all(265)
+    enddo
+      call FCAT_boson_all(266)
+    do i = 1, n
+      call FCAT_boson_all(267)
+      ai(i) = 0.0d0
+      call FCAT_boson_all(268)
+    enddo
+      call FCAT_boson_all(269)
+  endif
+! *** discrete fast-fourier transform
+      call FCAT_boson_all(270)
+  nv2 = n / 2
+      call FCAT_boson_all(271)
+  nm1 = n - 1
+      call FCAT_boson_all(272)
+  j = 1
+      call FCAT_boson_all(273)
+  do i = 1, nm1
+      call FCAT_boson_all(274)
+    if (i < j) then
+      call FCAT_boson_all(275)
+      tr = ar(j)
+      call FCAT_boson_all(276)
+      ar(j) = ar(i)
+      call FCAT_boson_all(277)
+      ar(i) = tr
+      call FCAT_boson_all(278)
+      ti = ai(j)
+      call FCAT_boson_all(279)
+      ai(j) = ai(i)
+      call FCAT_boson_all(280)
+      ai(i) = ti
+      call FCAT_boson_all(281)
+    endif
+      call FCAT_boson_all(282)
+    k = nv2
+      call FCAT_boson_all(283)
+    do while (j > k)
+      call FCAT_boson_all(284)
+      j = j - k
+      call FCAT_boson_all(285)
+      k = k / 2
+      call FCAT_boson_all(286)
+    enddo
+      call FCAT_boson_all(287)
+    j = j + k
+      call FCAT_boson_all(288)
+  enddo
+      call FCAT_boson_all(289)
+  do i = 1, n, 2
+      call FCAT_boson_all(290)
+    tr = ar(i + 1)
+      call FCAT_boson_all(291)
+    ar(i + 1) = ar(i) - tr
+      call FCAT_boson_all(292)
+    ar(i) = ar(i) + tr
+      call FCAT_boson_all(293)
+    ti = ai(i + 1)
+      call FCAT_boson_all(294)
+    ai(i + 1) = ai(i) - ti
+      call FCAT_boson_all(295)
+    ai(i) = ai(i) + ti
+      call FCAT_boson_all(296)
+  enddo
+      call FCAT_boson_all(297)
+  if (m == 1) return
+      call FCAT_boson_all(298)
+  c = 0.0d0
+      call FCAT_boson_all(299)
+  s = dble(isign(1, msign))
+      call FCAT_boson_all(300)
+  le = 2
+      call FCAT_boson_all(301)
+  do l = 2, m
+      call FCAT_boson_all(302)
+    wr = c
+      call FCAT_boson_all(303)
+    ur = wr
+      call FCAT_boson_all(304)
+    wi = s
+      call FCAT_boson_all(305)
+    ui = wi
+      call FCAT_boson_all(306)
+    c = dsqrt(c * 0.5d0 + 0.5d0)
+      call FCAT_boson_all(307)
+    s = wi / (c + c)
+      call FCAT_boson_all(308)
+    le1 = le
+      call FCAT_boson_all(309)
+    le = le1 + le1
+      call FCAT_boson_all(310)
+    do i = 1, n, le
+      call FCAT_boson_all(311)
+      ip = i + le1
+      call FCAT_boson_all(312)
+      tr = ar(ip)
+      call FCAT_boson_all(313)
+      ar(ip) = ar(i) - tr
+      call FCAT_boson_all(314)
+      ar(i)  = ar(i) + tr
+      call FCAT_boson_all(315)
+      ti = ai(ip)
+      call FCAT_boson_all(316)
+      ai(ip) = ai(i) - ti
+      call FCAT_boson_all(317)
+      ai(i)  = ai(i) + ti
+      call FCAT_boson_all(318)
+    enddo
+      call FCAT_boson_all(319)
+    do j = 2, le1
+      call FCAT_boson_all(320)
+      do i = j, n, le
+      call FCAT_boson_all(321)
+        ip = i + le1
+      call FCAT_boson_all(322)
+        tr = ar(ip) * ur - ai(ip) * ui
+      call FCAT_boson_all(323)
+        ti = ar(ip) * ui + ai(ip) * ur
+      call FCAT_boson_all(324)
+        ar(ip) = ar(i) - tr
+      call FCAT_boson_all(325)
+        ar(i)  = ar(i) + tr
+      call FCAT_boson_all(326)
+        ai(ip) = ai(i) - ti
+      call FCAT_boson_all(327)
+        ai(i)  = ai(i) + ti
+      call FCAT_boson_all(328)
+      enddo
+      call FCAT_boson_all(329)
+      tr = ur
+      call FCAT_boson_all(330)
+      ur = tr * wr - ui * wi
+      call FCAT_boson_all(331)
+      ui = tr * wi + ui * wr
+      call FCAT_boson_all(332)
+    enddo
+      call FCAT_boson_all(333)
+  enddo
+
+! *** correction of the discrete fft, using a trapezoidal approximation
+! *** for the variations of the input function
+
+      call FCAT_boson_all(334)
+  c = h
+      call FCAT_boson_all(335)
+  if (msign >= 0) then
+      call FCAT_boson_all(336)
+    c = c / 3.141592653589793238d0
+      call FCAT_boson_all(337)
+    ai(1) = ar(1)
+      call FCAT_boson_all(338)
+    do i = 2, n
+      call FCAT_boson_all(339)
+      ai(i) = ar(n - i + 2)
+      call FCAT_boson_all(340)
+    enddo
+      call FCAT_boson_all(341)
+  endif
+      call FCAT_boson_all(342)
+  ar(1) = c * ar(1)
+      call FCAT_boson_all(343)
+  ai(1) = c * ai(1)
+      call FCAT_boson_all(344)
+  a = 3.141592653589793238d0 / n
+      call FCAT_boson_all(345)
+  wr = dcos(a)
+      call FCAT_boson_all(346)
+  wi = dsin(a)
+      call FCAT_boson_all(347)
+  t = dsqrt(c)
+      call FCAT_boson_all(348)
+  a = a / t
+      call FCAT_boson_all(349)
+  c = 0.0d0
+      call FCAT_boson_all(350)
+  ur = 1.0d0
+      call FCAT_boson_all(351)
+  ui = 0.0d0
+      call FCAT_boson_all(352)
+  do i = 2, n
+      call FCAT_boson_all(353)
+    c = c + a
+      call FCAT_boson_all(354)
+    tr = ur
+      call FCAT_boson_all(355)
+    ur = wr * tr - wi * ui
+      call FCAT_boson_all(356)
+    ui = wi * tr + wr * ui
+      call FCAT_boson_all(357)
+    ti = ui / c
+      call FCAT_boson_all(358)
+    tr = ti**2
+      call FCAT_boson_all(359)
+    ar(i) = ar(i) * tr
+      call FCAT_boson_all(360)
+    ai(i) = ai(i) * tr
+      call FCAT_boson_all(361)
+    if (msign <= 0) then
+      call FCAT_boson_all(362)
+      if (as /= 0.0d0) then
+      call FCAT_boson_all(363)
+        ai(i) = ai(i) - as * (t - ur * ti) / (2 * c)
+      call FCAT_boson_all(364)
+      endif
+      call FCAT_boson_all(365)
+    endif
+      call FCAT_boson_all(366)
+  enddo
+      call FCAT_boson_all(367)
+  return
+end subroutine rcffi
+end module rcffi_mod
+subroutine doboson(t, width, gauss, asym, emin, emax, wmin, wmax, np, p, xout, yout, nout)
+
+! *******************************************************************
+! *                                                                 *
+! * perform the quantum-mechanical complement to the classical step *
+! * of the dielectric theory of eels in specular geometry using a   *
+! * suitable thermodynamical average of the quantized surface       *
+! * harmonic oscillators                                            *
+! *                                                                 *
+! * t:      Target temperature                                      *
+! * width:  Width of instrumental response (cm**-1)                 *
+! * gauss:  Fraction of gaussian for the instrumental response      *
+! * asym:   Asymmetry of the instrumental response                  *
+! * emin:   Lower loss energy for this computation (cm**-1)         *
+! * emax:   Upper loss energy for this computation (cm**-1)         *
+! * wmin:   Lower loss energy of the eels computation (cm**-1)      *
+! * wmax:   Upper loss energy of the eels computation (cm**-1)      *
+! * np:     Number of points of the eels computation                *
+! * p:      Intensities of the eels computation                     *
+! * xout:   Energies of this computation                            *
+! * yout:   Intensities of this computation                         *
+! * nout:   Number of points of this computation                    *
+! *******************************************************************
+
+  use rcffi_mod
+  use sicot_mod
+  use sintr_mod
+
+  implicit none
+
+  double precision, intent(in) :: t, width, gauss, asym, emin, emax, wmin
+  double precision, intent(in out) :: wmax
+  integer, intent(in) :: np
+  double precision, intent(in) :: p(np)
+  double precision, intent(in out) :: xout(nout), yout(nout)
+  integer, intent(in out) :: nout
+
+  integer, parameter :: mmax = 14, nmax = 2**mmax
+  double precision :: a, a1, a2, alfa, anorm, b, cp2, dwn, fac, fi
+  double precision :: fm, fm0, fm1, fp1, fmpic, fp, fp0, fppic, fr, g1, g2
+  double precision :: h, pi, sigma, sp2, test, u
+  double precision :: wmpic, wppic, wn, x, x1, x2, x3
+  double precision :: o1, o2, respon
+
+  external o1, o2
+
+  integer :: i, imax, imin, istep, j, jmin, jmax, m, n
+  logical :: picm, picp
+  double precision, allocatable :: p1(:), p2(:)
+  double precision :: r1(nmax), r2(nmax)
+
+  logical :: debug
+
+! remark : the two arrays r1 and r2 are used for fourier
+! transforming the user-supplied instrumental response of the
+! spectrometer that has to be coded in the external routine
+! respon called when the input parameter gauss is < 0 or > 1.
+! with 0 <= gauss <= 1, r1 and r2 are not used.
+
+! *** rational approximations for ei(u) * exp(-u) + e1(u) * exp(+u)
+! *** in the intervals (0, 1.3) and (1.3, infinity) <accuracy : 4.e-04>
+! *** used for fourier transforming half-lorentzian functions
+
+
+      call FCAT_boson_all(368)
+  debug = .false.
+      call FCAT_boson_all(369)
+  data fm1 / 0.0d0 /, fp1 / 0.0d0 /
+      call FCAT_boson_all(370)
+  pi = 4 * datan(1.0d0)
+
+      call FCAT_boson_all(371)
+  dwn = (wmax - wmin) / (np - 1)
+
+! *** redefine the frequency interval (0, wmax) to be used for the
+! *** fourier transforms
+
+      call FCAT_boson_all(372)
+  if (debug) write(*,*) 'wmin: ', wmin, 'wmax: ', wmax, 'dwn: ', dwn
+      call FCAT_boson_all(373)
+  jmin = int(0.5d0 + wmin / dwn)
+      call FCAT_boson_all(374)
+  if ((jmin - 0.5d0) * dwn < wmin) then
+      call FCAT_boson_all(375)
+    jmin = jmin + 1
+      call FCAT_boson_all(376)
+  endif
+      call FCAT_boson_all(377)
+  fac = ((jmin - 0.5d0) * dwn - wmin) / dwn
+      call FCAT_boson_all(378)
+  jmax = int(0.5d0 + wmax / dwn)
+      call FCAT_boson_all(379)
+  test = dmax1(1.5d0 * dabs(emin), 1.5d0 * dabs(emax), 6 * wmax)
+      call FCAT_boson_all(380)
+  n = 2
+      call FCAT_boson_all(381)
+  do m = 2, mmax
+      call FCAT_boson_all(382)
+    n = 2 * n
+      call FCAT_boson_all(383)
+    wmax = n * dwn
+      call FCAT_boson_all(384)
+    if (wmax >= test) exit
+      call FCAT_boson_all(385)
+  enddo
+      call FCAT_boson_all(386)
+  if (wmax < test) then
+      call FCAT_boson_all(387)
+    m = mmax
+      call FCAT_boson_all(388)
+    n = nmax
+      call FCAT_boson_all(389)
+    wmax = n * dwn
+      call FCAT_boson_all(390)
+    if (debug) write(*,*) ' +++ n has been fixed at', nmax, ' = 2**', mmax, ' +++'
+      call FCAT_boson_all(391)
+  endif
+      call FCAT_boson_all(392)
+  if (debug) then
+      call FCAT_boson_all(393)
+    write(*,*) ' classical spectrum redefined from 0.0 to', wmax
+      call FCAT_boson_all(394)
+    write(*,*) ' step size =', dwn, ', ', n, ' (= 2**', m, ') points'
+      call FCAT_boson_all(395)
+  endif
+
+      call FCAT_boson_all(396)
+  allocate (p1(n))
+      call FCAT_boson_all(397)
+  allocate (p2(n))
+
+      call FCAT_boson_all(398)
+  p1 = 0
+
+! *** interpolate pcl on a suitable mesh in (0, wmax)
+      call FCAT_boson_all(399)
+  i = 1
+      call FCAT_boson_all(400)
+  do j = jmin, min(jmax, n)
+      call FCAT_boson_all(401)
+    p1(j) = p(i) + fac * (p(i + 1) - p(i))
+      call FCAT_boson_all(402)
+    i = i + 1
+      call FCAT_boson_all(403)
+  enddo
+
+      call FCAT_boson_all(404)
+  p2 = p1
+
+! *** characteristic function f(tau)
+
+      call FCAT_boson_all(405)
+  call sicot(p1, m, dwn, 1.39d0 * t)
+      call FCAT_boson_all(406)
+  call sintr(p2, m, dwn)
+      call FCAT_boson_all(407)
+  h = (pi + pi) / wmax
+      call FCAT_boson_all(408)
+  if (gauss < 0.0d0 .or. gauss > 1.0d0) then
+
+! *** broaden the spectrum by convoluting the characteristic function
+! *** with a user-supplied response function (arbitrary normalization)
+
+      call FCAT_boson_all(409)
+    if (debug) write(*,*) '==> switch to a user-supplied instrumental response'
+      call FCAT_boson_all(410)
+    alfa = dmax1(4 * dwn, width)
+      call FCAT_boson_all(411)
+    if (alfa > width) then
+      call FCAT_boson_all(412)
+      if (debug) write(*,*) ' +++ width has been enlarged to', alfa, ' +++'
+      call FCAT_boson_all(413)
+    endif
+      call FCAT_boson_all(414)
+    if (alfa < 10 * dwn) then
+      call FCAT_boson_all(415)
+      if (debug) then
+      call FCAT_boson_all(416)
+        write(*,*) ' ... poor representation of the response function ...'
+      call FCAT_boson_all(417)
+        write(*,*) 'the step size (', dwn, ') should be reduced'
+      call FCAT_boson_all(418)
+      endif
+      call FCAT_boson_all(419)
+    endif
+! make a table of the response function
+      call FCAT_boson_all(420)
+    r1(1) = respon(0.0d0, alfa)
+      call FCAT_boson_all(421)
+    r2(1) = r1(1)
+      call FCAT_boson_all(422)
+    do i = 2, n
+      call FCAT_boson_all(423)
+      x = (i - 1) * dwn
+      call FCAT_boson_all(424)
+      r1(i) = respon( x, alfa)
+      call FCAT_boson_all(425)
+      r2(i) = respon(-x, alfa)
+      call FCAT_boson_all(426)
+    enddo
+! fourier transform it
+      call FCAT_boson_all(427)
+    call rcffi(r1, r2, -m, dwn)
+! normalization of the response function, and convolution
+      call FCAT_boson_all(428)
+    anorm = r1(1)
+      call FCAT_boson_all(429)
+    do i = 1, n
+      call FCAT_boson_all(430)
+      fac = dexp(-p1(i)) / anorm
+      call FCAT_boson_all(431)
+      cp2 = fac * dcos(p2(i))
+      call FCAT_boson_all(432)
+      sp2 = fac * dsin(p2(i))
+      call FCAT_boson_all(433)
+      p1(i) = r1(i) * cp2 + r2(i) * sp2
+      call FCAT_boson_all(434)
+      p2(i) = r2(i) * cp2 - r1(i) * sp2
+      call FCAT_boson_all(435)
+    enddo
+      call FCAT_boson_all(436)
+    alfa = alfa / 2
+
+  else
+
+! *** broaden the spectrum by convoluting the characteristic function by
+! *** a weighted sum of a lorentzian and a gaussian response functions
+
+      call FCAT_boson_all(437)
+      call FCAT_boson_all(438)
+    alfa = dmax1(1.5d0 * dwn, width)
+      call FCAT_boson_all(439)
+    if (alfa > width) then
+      call FCAT_boson_all(440)
+      if (debug) write(*,*) ' +++ width has been enlarged to', alfa, ' +++'
+      call FCAT_boson_all(441)
+    endif
+      call FCAT_boson_all(442)
+    if (alfa > 0.5d0 * wmax / pi) then
+      call FCAT_boson_all(443)
+      call FCAT_boson_all_rep()
+      stop '*** width is too large, nothing done ***'
+      call FCAT_boson_all(444)
+    endif
+      call FCAT_boson_all(445)
+    alfa = 0.5d0 * alfa
+      call FCAT_boson_all(446)
+    sigma = alfa / 1.66511d0
+      call FCAT_boson_all(447)
+    a1 = (1.0d0 - asym) / 2 * (1.0d0 - gauss)
+      call FCAT_boson_all(448)
+    a2 = (1.0d0 + asym) / 2 * (1.0d0 - gauss)
+      call FCAT_boson_all(449)
+    if (a1 < 0.0d0 .or. a2 < 0.0d0) then
+      call FCAT_boson_all(450)
+      call FCAT_boson_all_rep()
+      stop '*** invalid input : asym should be in (-1, +1) ***'
+      call FCAT_boson_all(451)
+    endif
+      call FCAT_boson_all(452)
+    g1 = (1.0d0 - asym) * alfa
+      call FCAT_boson_all(453)
+    g2 = (1.0d0 + asym) * alfa
+      call FCAT_boson_all(454)
+    p1(1) = 1.0d0
+      call FCAT_boson_all(455)
+    p2(1) = 0.0d0
+      call FCAT_boson_all(456)
+    do i = 2, n
+      call FCAT_boson_all(457)
+      x = (i - 1) * h
+      call FCAT_boson_all(458)
+      fr = 0.0d0
+      call FCAT_boson_all(459)
+      fi = 0.0d0
+      call FCAT_boson_all(460)
+      if (a1 /= 0.0d0) then
+      call FCAT_boson_all(461)
+        x1 = g1 * x
+      call FCAT_boson_all(462)
+        if (x1 <= 100.0d0) then
+      call FCAT_boson_all(463)
+          fr = a1 * dexp(-x1)
+      call FCAT_boson_all(464)
+        endif
+      call FCAT_boson_all(465)
+        if (a1 /= a2) then
+      call FCAT_boson_all(466)
+          if (x1 <= 1.3d0) then
+      call FCAT_boson_all(467)
+            fi = a1 * o1(x1)
+          else
+      call FCAT_boson_all(468)
+      call FCAT_boson_all(469)
+            fi = a1 * o2(x1)
+      call FCAT_boson_all(470)
+          endif
+      call FCAT_boson_all(471)
+        endif
+      call FCAT_boson_all(472)
+      endif
+      call FCAT_boson_all(473)
+      if (a2 /= 0.0d0) then
+      call FCAT_boson_all(474)
+        x2 = g2 * x
+      call FCAT_boson_all(475)
+        if (x2 <= 100.0d0) then
+      call FCAT_boson_all(476)
+          fr = fr + a2 * dexp(-x2)
+      call FCAT_boson_all(477)
+        endif
+      call FCAT_boson_all(478)
+        if (a2 /= a1) then
+      call FCAT_boson_all(479)
+          if (x2 <= 1.3d0) then
+      call FCAT_boson_all(480)
+            fi = fi - a2 * o1(x2)
+          else
+      call FCAT_boson_all(481)
+      call FCAT_boson_all(482)
+            fi = fi - a2 * o2(x2)
+      call FCAT_boson_all(483)
+          endif
+      call FCAT_boson_all(484)
+        endif
+      call FCAT_boson_all(485)
+      endif
+      call FCAT_boson_all(486)
+      if (gauss /= 0.0d0) then
+      call FCAT_boson_all(487)
+        x3 = sigma * x
+      call FCAT_boson_all(488)
+        if (x3 <= 10.0d0) then
+      call FCAT_boson_all(489)
+          fr = fr + gauss * dexp(-x3**2)
+      call FCAT_boson_all(490)
+        endif
+      call FCAT_boson_all(491)
+      endif
+      call FCAT_boson_all(492)
+      fi = fi / pi
+      call FCAT_boson_all(493)
+      fac = dexp(-p1(i))
+      call FCAT_boson_all(494)
+      cp2 = fac * dcos(p2(i))
+      call FCAT_boson_all(495)
+      sp2 = fac * dsin(p2(i))
+      call FCAT_boson_all(496)
+      p1(i) = fr * cp2 + fi * sp2
+      call FCAT_boson_all(497)
+      p2(i) = fi * cp2 - fr * sp2
+      call FCAT_boson_all(498)
+    enddo
+      call FCAT_boson_all(499)
+    if (dabs(fi) > 1.0d-03) then
+      call FCAT_boson_all(500)
+      if (debug) then
+      call FCAT_boson_all(501)
+        write(*,*) ' ... poor representation of the response function ...'
+      call FCAT_boson_all(502)
+        write(*,*) 'the step size (', dwn, ') should be reduced'
+      call FCAT_boson_all(503)
+      endif
+      call FCAT_boson_all(504)
+    endif
+      call FCAT_boson_all(505)
+  endif
+
+! *** full eels spectrum
+
+      call FCAT_boson_all(506)
+   call rcffi(p1, p2, m, h)
+
+! *** output
+
+      call FCAT_boson_all(507)
+  istep = max(int(alfa / dwn / 10), 1)
+      call FCAT_boson_all(508)
+  nout = 0
+      call FCAT_boson_all(509)
+  if (emin <= 0.0d0) then
+      call FCAT_boson_all(510)
+    imin = n - int(dabs(emin) / dwn)
+      call FCAT_boson_all(511)
+    if ((imin - n) * dwn < emin) then
+      call FCAT_boson_all(512)
+      imin = imin + 1
+      call FCAT_boson_all(513)
+    endif
+      call FCAT_boson_all(514)
+    do i = imin, n
+      call FCAT_boson_all(515)
+      j = n - i
+      call FCAT_boson_all(516)
+      if (mod(j, istep) > 0) cycle
+      call FCAT_boson_all(517)
+      x = -j * dwn
+      call FCAT_boson_all(518)
+      if (x > emax) exit
+      call FCAT_boson_all(519)
+      nout = nout + 1
+      call FCAT_boson_all(520)
+      xout(nout)= x
+      call FCAT_boson_all(521)
+      yout(nout)= p2(j + 1)
+      call FCAT_boson_all(522)
+    enddo
+      call FCAT_boson_all(523)
+  endif
+      call FCAT_boson_all(524)
+  if (x <= emax) then
+      call FCAT_boson_all(525)
+    if (emax >= dwn) then
+      call FCAT_boson_all(526)
+      imax = int(emax / dwn) + 1
+      call FCAT_boson_all(527)
+      if ((imax - 1) * dwn > emax) then
+      call FCAT_boson_all(528)
+        imax = imax - 1
+      call FCAT_boson_all(529)
+      endif
+      call FCAT_boson_all(530)
+      if (imax >= 2) then
+      call FCAT_boson_all(531)
+        do i = 2, imax
+      call FCAT_boson_all(532)
+          if (mod(i - 1, istep) > 0) cycle
+      call FCAT_boson_all(533)
+          x = (i - 1) * dwn
+      call FCAT_boson_all(534)
+          if (x < emin) cycle
+      call FCAT_boson_all(535)
+          nout = nout + 1
+      call FCAT_boson_all(536)
+          xout(nout) = x
+      call FCAT_boson_all(537)
+          yout(nout) = p1(i)
+      call FCAT_boson_all(538)
+        enddo
+      call FCAT_boson_all(539)
+      endif
+      call FCAT_boson_all(540)
+    endif
+      call FCAT_boson_all(541)
+  endif
+      call FCAT_boson_all(542)
+  if (debug) write(*,*) nout, ' values, step size =', istep * dwn
+
+! *** analyze the spectrum
+
+      call FCAT_boson_all(543)
+  if (debug) write(*,*) ' peak location    amplitude'
+      call FCAT_boson_all(544)
+  wn = 0.0d0
+      call FCAT_boson_all(545)
+  fm = p1(1)
+      call FCAT_boson_all(546)
+  fp = p2(1)
+      call FCAT_boson_all(547)
+  if (p2(2) < fp .and. p1(2) < fp) then
+      call FCAT_boson_all(548)
+    if (debug) write(*, '(f13.2, e13.4)') wn, fp
+      call FCAT_boson_all(549)
+  endif
+      call FCAT_boson_all(550)
+  fac = 5.0d-06 * fp * dwn
+      call FCAT_boson_all(551)
+  imax = 2 + int(dmax1(dabs(emin), dabs(emax)) / dwn)
+      call FCAT_boson_all(552)
+  do i = 2, imax
+      call FCAT_boson_all(553)
+    fm0 = fm1
+      call FCAT_boson_all(554)
+    fp0 = fp1
+      call FCAT_boson_all(555)
+    fm1 = fm
+      call FCAT_boson_all(556)
+    fp1 = fp
+      call FCAT_boson_all(557)
+    fm = p2(i)
+      call FCAT_boson_all(558)
+    fp = p1(i)
+      call FCAT_boson_all(559)
+    if (i == 2) cycle
+      call FCAT_boson_all(560)
+    picm = .false.
+      call FCAT_boson_all(561)
+    picp = .false.
+      call FCAT_boson_all(562)
+    wn = (i - 1) * dwn
+      call FCAT_boson_all(563)
+    if ((fm1 >= fm0) .and. (fm1 >= fm)) then
+      call FCAT_boson_all(564)
+      a = (fm1 - fm0) + (fm1 - fm)
+      call FCAT_boson_all(565)
+      if (a >= fac) then
+      call FCAT_boson_all(566)
+        b = 0.5d0 * ((fm1 - fm0) + 3 * (fm1 - fm))
+      call FCAT_boson_all(567)
+        u = b / a
+      call FCAT_boson_all(568)
+        wmpic = -wn + u * dwn
+      call FCAT_boson_all(569)
+        fmpic = fm + 0.5d0 * b * u
+      call FCAT_boson_all(570)
+        picm = .true.
+      call FCAT_boson_all(571)
+      endif
+      call FCAT_boson_all(572)
+    endif
+      call FCAT_boson_all(573)
+    if ((fp1 >= fp0) .and. (fp1 >= fp)) then
+      call FCAT_boson_all(574)
+      a = (fp1 - fp0) + (fp1 - fp)
+      call FCAT_boson_all(575)
+      if (a >= fac) then
+      call FCAT_boson_all(576)
+        b = 0.5d0 * ((fp1 - fp0) + 3 * (fp1 - fp))
+      call FCAT_boson_all(577)
+        u = b / a
+      call FCAT_boson_all(578)
+        wppic = wn - u * dwn
+      call FCAT_boson_all(579)
+        fppic = fp + 0.5d0 * b * u
+      call FCAT_boson_all(580)
+        picp = .true.
+      call FCAT_boson_all(581)
+        if (picp) then
+      call FCAT_boson_all(582)
+          if (picm) then
+      call FCAT_boson_all(583)
+            if (debug) write(*, '(2(f13.2, e13.4, 5x))') wppic, fppic, wmpic, fmpic
+          else
+      call FCAT_boson_all(584)
+      call FCAT_boson_all(585)
+            if (debug) write(*, '(f13.2, e13.4)') wppic, fppic
+      call FCAT_boson_all(586)
+          endif
+      call FCAT_boson_all(587)
+        endif
+      call FCAT_boson_all(588)
+      endif
+      call FCAT_boson_all(589)
+    endif
+      call FCAT_boson_all(590)
+    if (picm .and. (.not. picp)) then
+      call FCAT_boson_all(591)
+      if (debug) write(*, '(33x, f13.2, e13.4)') wmpic, fmpic
+      call FCAT_boson_all(592)
+    endif
+      call FCAT_boson_all(593)
+  enddo
+      call FCAT_boson_all(594)
+  deallocate (p1)
+      call FCAT_boson_all(595)
+  deallocate (p2)
+      call FCAT_boson_all(596)
+  return
+end subroutine doboson
+double precision function o1(u)
+
+  implicit none
+
+  double precision, intent(in) :: u
+  double precision :: u2
+
+      call FCAT_boson_all(597)
+  u2 = u**2
+      call FCAT_boson_all(598)
+  o1 = -dsinh(u) * dlog(u2) + u * ((0.03114d0 * u2 + 0.41666d0) * u2 + 0.84557d0)
+
+      call FCAT_boson_all(599)
+  return
+end function o1
+double precision function o2(u)
+
+  implicit none
+
+  double precision, intent(in) :: u
+  double precision :: u2
+
+      call FCAT_boson_all(600)
+  u2 = 1 / u**2
+      call FCAT_boson_all(601)
+  o2 = (((202.91d0 * u2 + 932.21d0) * u2 + 41.740d0) * u2 + 2.0d0) /  &
+       (((540.88d0 * u2 + 345.67d0) * u2 + 18.961d0) * u2 + 1.0d0) / u
+
+      call FCAT_boson_all(602)
+  return
+end function o2
+       module FCAT_boson_all_mod
+        double precision,dimension (603):: &
+     &   FCAT_boson_all_counter = 0
+        integer :: FCAT_boson_all_nline = 602
+       end module FCAT_boson_all_mod
+       subroutine FCAT_boson_all(n)
+         use FCAT_boson_all_mod
+         integer :: n
+         FCAT_boson_all_counter(n) = &
+     &    FCAT_boson_all_counter(n)  + 1
+         if (FCAT_boson_all_counter(n) == 1) then
+           write(*,"(a,i10)") "FCAT_boson_all_",n
+         endif
+       end subroutine FCAT_boson_all
+       subroutine FCAT_boson_all_rep()
+          use FCAT_boson_all_mod
+          integer :: i
+          do i = 1, FCAT_boson_all_nline
+             write(*,"(a,i10,i10)") &
+     &      "FCAT_boson_all_count",i, &
+     &      int(FCAT_boson_all_counter(i)+0.1)
+          end do
+       end subroutine FCAT_boson_all_rep
diff --git a/source/f90/fcat-analysis/boson_all.f90 b/source/f90/fcat-analysis/boson_all.f90
new file mode 100644
index 0000000..67edb5b
--- /dev/null
+++ b/source/f90/fcat-analysis/boson_all.f90
@@ -0,0 +1,972 @@
+program boson
+
+! *******************************************************************
+! *                                                                 *
+! * perform the quantum-mechanical complement to the classical step *
+! * of the dielectric theory of eels in specular geometry using a   *
+! * suitable thermodynamical average of the quantized surface       *
+! * harmonic oscillators                                            *
+! *                                                                 *
+! *******************************************************************
+
+  implicit none
+
+  integer, parameter :: mmax=14, nmax=2**mmax
+  double precision :: asym, emax, emin, gauss, t, width, wmin, wmax, y
+  double precision :: p2(nmax)
+  integer :: i, np, ioStatus
+  character (len = 72) :: comment(2)
+  double precision, allocatable :: xout(:), yout(:)
+  integer :: nout
+
+! *** read input parameters
+
+  call change_working_dir()
+  open(unit = 13, file = 'bosin')
+! target temperature (Kelvin)
+  read(13, *) t
+! width of the instrumental response (cm**-1)
+  read(13, *) width
+! fraction of gaussian for the instrumental response
+  read(13, *) gauss
+! asymmetry of the instrumental response
+  read(13, *) asym
+! lower and upper energy losses for this computation (cm**-1)
+  read(13, *) emin
+  read(13, *) emax
+  close(unit=13)
+
+  write(*,*) 'program boson (September 2020)'
+  write(*,'(a, f6.1, a, f7.2, a)') ' t =', t, ' K, width =', width, ' cm**-1'
+  write(*,'(a, f5.2, a, f5.2)') ' gauss =', gauss, ', asym =', asym
+  write(*,'(a, g11.4, a, g11.4, a)') ' energy losses from', emin, ' to', emax, ' cm**-1'
+
+! *** read the table of values of the classical loss spectrum
+
+  open(unit = 12, file = 'eelsou')
+  read(12, '(a48)') comment(1)
+  read(12, '(a72)') comment(2)
+  np = 0
+  do
+    read(12, *, IOSTAT = ioStatus) wmax, y
+    if (ioStatus /= 0) exit
+    if (wmax < 0.0d0) cycle
+    np = np + 1
+    p2(np) = y
+    if (np == 1) wmin = wmax
+    if (np < nmax) cycle
+  enddo
+  close(unit = 12)
+
+  if (np <= 0) stop '*** no input values for pcl ***'
+
+  write(*,*) comment(2)
+  write(*,'(a, i6, a, g15.7, a, g15.7)') ' read', np, ' values of pcl from', wmin, ' to', wmax
+
+! length calculation for xout, yout.
+!
+  nout = 2**14
+  allocate (xout(nout))
+  allocate (yout(nout))
+
+  call doboson(t, width, gauss, asym, emin, emax, wmin, wmax, np, p2, xout, yout, nout)
+
+  open(unit = 14, file = 'bosou')
+  write(14, '(a, a, f6.1, a, f5.2)') comment(1), 'T =', t, ' GAUSS =', gauss
+  write(14, *) comment(2)
+  do i = 1, nout
+    write(14, '(2e15.7)') xout(i), yout(i)
+  end do
+  close(unit = 14)
+  write(*,*) nout, ' values written on disk'
+
+  deallocate (xout, yout)
+  stop
+end program boson
+subroutine change_working_dir()
+
+! This routine gets the first argument of the commandline and takes it
+! as the path to change the working directory
+! used intrinsic routines:
+! iarg returns the number of commandline arguments without the program cname.
+! chdir changes the directory and returns 0 on success.
+! trim removes blanks from strings.
+
+  character (len = 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'
+    end if
+  end if
+
+  return
+end subroutine change_working_dir
+double precision function respon(w, width)
+
+!*******************************************************************
+!                                                                  *
+! instrumental response of the spectrometer for the frequency w    *
+! width is the full width at half maximum of the response function *
+!                                                                  *
+!*******************************************************************
+
+  implicit none
+  double precision, intent(in) :: w, width
+
+  double precision :: u
+
+  u = 1.25d0 * w / width
+  if (u <= -1.0d0 .or. u >= 2.0d0) then
+     respon = 0.0d0
+  elseif (u > 1.0d0) then
+     respon = 4.0d0 + 2 * dsqrt((u - 1.0d0)**3) - 3 * u
+  elseif (u > 0.0d0) then
+     respon = 2.0d0 - 4 * dsqrt(u**3) + 3 * u
+  else
+     respon = 2 * dsqrt((u + 1.0d0)**3)
+  endif
+  return
+end function respon
+module sicot_mod
+contains
+subroutine sicot(f, m, h, x0)
+
+! *******************************************************************
+! *                                                                 *
+! * integral transform g(y, x0) of a real function f(x) defined by  *
+! *                                                                 *
+! * g(x0, y) = integral of f(x)/tanh(x/x0)*(1-cos(x*y)) dx          *
+! *                                                                 *
+! * f(x) is tabulated on the mesh of points xj = (j-1/2)*h ,        *
+! * j = 1, 2, ..., n ,  with n = 2**m                               *
+! * g(x0, y) is computed on the mesh of points yk = k*2pi/(n*h) ,   *
+! * k = 0, 1, 2, ..., n-1                                           *
+! *                                                                 *
+! * input ...                                                       *
+! * f(j) contains the value of f(xj) , j = 1, 2, ..., n             *
+! * m is such that n = 2**iabs(m)                                   *
+! * h is the step size (must be positive)                           *
+! *                                                                 *
+! * output ...                                                      *
+! * f(k+1) contains g(x0, yk), k = 0, 1, ..., n-1                   *
+! *                                                                 *
+! * computing remarks ...                                           *
+! * f is a real array with dimension n or more                      *
+! * it is supposed that f(x) is zero for x > n*h                    *
+! * external reference : sintr (sine transform of a real function). *
+! *                                                                 *
+! *******************************************************************
+
+  use sintr_mod
+
+  implicit none
+
+  double precision, intent(in out) :: f(*)
+  integer, intent(in) :: m
+  double precision, intent(in) :: h
+  double precision, intent(in) :: x0
+
+  double precision :: a, b, c, d, e, s, sa
+  integer :: i, j, msign, n
+
+  logical :: debug
+
+  debug = .false.
+  if (m == 0) then
+    f(1) = 0.0d0
+    return
+  endif
+
+  if (h <= 0.0d0) then
+    if (debug) write(*,*) ' *** incorrect step size in <sicot>, h =', h, ' ***'
+    stop
+  endif
+
+  if (x0 < 0.0d0) then
+    if (debug) write(*,*) ' *** incorrect input in <sicot>, x0 =', x0, ' ***'
+    stop
+  endif
+
+  n = 2**iabs(m)
+
+! *** evaluate the integral from xj to infinity of f(x)/tanh(x/x0) dx
+! and store the result in f(j)
+
+  c = 0.0d0
+  if (x0 > h / 16) then
+    c = dexp(-h / x0)
+  endif
+  s = 1.0d0 - c
+  e = c**2
+  a = 0.25d0 * h
+  b = 0.25d0 * x0
+  do i = 1, n
+    if (i < n) then
+      f(i) = f(i) + f(i+1)
+    endif
+    d = a
+    if (s /= 1.0d0) then
+      sa = s
+      c = c * e
+      s = 1.0d0 - c
+      d = d + b * dlog(s / sa)
+    endif
+    f(i) = f(i) * d
+  enddo
+
+  j = n
+  do i = 2, n
+    j = j - 1
+    f(j) = f(j) + f(j + 1)
+  enddo
+! alternative, but not yet tested:
+!  do j = n - 1, 1, -1
+!    f(j) = f(j) + f(j + 1)
+!  enddo
+  msign = -iabs(m)
+  call sintr(f, msign, h)
+  return
+end subroutine sicot
+end module sicot_mod
+module sintr_mod
+contains
+subroutine sintr(f, msign, h)
+
+! *******************************************************************
+! *                                                                 *
+! * integral sine transform of a real function f(x)                 *
+! *                                                                 *
+! * g(y) = integral from zero to infinity of f(x)*sin(x*y) dx       *
+! * if msign >= 0 or                                                *
+! * g(y) = y * integral from zero to infinity of f(x)*sin(x*y) dx   *
+! * if msign < 0                                                    *
+! *                                                                 *
+! * f(x) is tabulated on the mesh of points xj = (j-1/2)*h ,        *
+! * j = 1, 2, ..., n ,  with n = 2**iabs(msig)                      *
+! * g(y) is computed on the mesh of points yk = k*2pi/(n*h) ,       *
+! * k = 0, 1, 2, ..., n-1                                           *
+! *                                                                 *
+! * input ...                                                       *
+! * f(j) contains the value of f(xj) , j = 1, 2, ..., n             *
+! * msign is such that n = 2**iabs(msign)                           *
+! * h is the step size (must be positive)                           *
+! *                                                                 *
+! * output ...                                                      *
+! * f(k+1) contains g(yk), k = 0, 1, ..., n-1                       *
+! *                                                                 *
+! * computing remarks ...                                           *
+! * f is a real array with dimension n or more                      *
+! * it is supposed that f(x) is zero for x > n*h                    *
+! *                                                                 *
+! *******************************************************************
+
+  implicit none
+
+  double precision, intent(in out) :: f(*)
+  integer, intent(in) :: msign
+  double precision, intent(in) :: h
+
+  double precision :: a, c, ca, d, e, fnp1, s, sa, ti, ti1, ti2, tr, tr1, tr2
+  double precision :: ui, ur, wi, wr
+  integer :: i, i2, ip2, j, j2, k, l, le, le1, m2, n, n2, nm1, nv2
+
+  logical :: debug
+
+  debug = .false.
+  if (h <= 0.0d0) then
+    if (debug) write(*,*) ' *** incorrect step size in <sintr>, h: ', h, ' ***'
+    stop
+  endif
+
+  if (msign == 0) then
+    f(1) = 0.0d0
+    return
+  endif
+
+! *** for j and k = 0, 1, 2 ... n/2-1, compute
+! s1 = sum ( f(2*j+1)*cos(4*pi*k*j/n) - f(2*j+2)*sin(4*pi*k*j/n) )
+! s2 = sum ( f(2*j+1)*sin(4*pi*k*j/n) + f(2*j+2)*cos(4*pi*k*j/n) )
+! store s1 in f(2*k+1) and s2 in f(2*k+2)
+! (adapted from cfft routine, cern library member d704)
+
+  m2 = iabs(msign) - 1
+  n = 2**m2
+  if (n /= 1) then
+    nv2 = n / 2
+    nm1 = n - 1
+    j = 1
+    do i = 1, nm1
+      if (i < j) then
+        i2 = i + i
+        j2 = j + j
+        ti = f(j2)
+        f(j2) = f(i2)
+        f(i2) = ti
+        i2 = i2 - 1
+        j2 = j2 - 1
+        tr = f(j2)
+        f(j2) = f(i2)
+        f(i2) = tr
+      endif
+      k = nv2
+      do while (j > k)
+        j = j - k
+        k = k / 2
+      enddo
+      j = j + k
+    enddo
+    do i = 1, n, 2
+      i2 = i + i
+      ti = f(i2 + 2)
+      f(i2 + 2) = f(i2) - ti
+      f(i2) = f(i2) + ti
+      i2 = i2 - 1
+      tr = f(i2 + 2)
+      f(i2 + 2) = f(i2) - tr
+      f(i2) = f(i2) + tr
+    enddo
+    if (m2 /= 1) then
+      c = 0.0d0
+      s = 1.0d0
+      le = 2
+      do l = 2, m2
+        wr = c
+        wi = s
+        ur = wr
+        ui = wi
+        c = dsqrt(c * 0.5d0 + 0.5d0 )
+        s = s / (c + c)
+        le1 = le
+        le = le1 + le1
+        do i = 1, n, le
+          i2 = i + i
+          ip2 = i2 + le
+          ti = f(ip2)
+          f(ip2) = f(i2) - ti
+          f(i2) = f(i2) + ti
+          i2 = i2 - 1
+          ip2 = ip2 - 1
+          tr = f(ip2)
+          f(ip2) = f(i2) - tr
+          f(i2) = f(i2) + tr
+        enddo
+        do j = 2, le1
+          do i = j, n, le
+            i2 = i + i
+            ip2 = i2 + le
+            tr = f(ip2 - 1) * ur - f(ip2) * ui
+            ti = f(ip2) * ur + f(ip2 - 1) * ui
+            f(ip2) = f(i2) - ti
+            f(i2) = f(i2) + ti
+            i2 = i2 - 1
+            ip2 = ip2 - 1
+            f(ip2) = f(i2) - tr
+            f(i2) = f(i2) + tr
+          enddo
+          tr = ur * wr - ui * wi
+          ui = ui * wr + ur * wi
+          ur = tr
+        enddo
+      enddo
+    endif
+  endif
+
+! *** for j and k = 0, 1 ... n-1, transform the array f so obtained into
+! sum f(j+1)*cos(2*pi*k*j/n) and sum f(j+1)*sin(2*pi*k*j/n)
+! and multiply the results by (1 - cos(2*pi*k/n)) and sin(2*pi*k/n)
+
+  fnp1 = 4 * (f(1) - f(2))
+  a = 3.141592653589793238d0 / n
+  n2 = n + 1
+  n = 2 * n
+  if (n2 /= 2) then
+    c = 1.0d0
+    s = 0.0d0
+    ca = dcos(a)
+    sa = dsin(a)
+    k = n + 1
+    do j = 3, n2, 2
+      k = k - 2
+      d = c
+      c = d * ca - s * sa
+      s = d * sa + s * ca
+      tr1 = f(j) + f(k)
+      ti1 = f(j + 1) - f(k + 1)
+      d = f(j) - f(k)
+      e = f(j + 1) + f(k + 1)
+      tr2 = d * s + e * c
+      ti2 = e * s - d * c
+      f(j) = (1.0d0 - c) * (tr1 + tr2)
+      f(j + 1) = s * (ti1 + ti2)
+      f(k) = (1.0d0 + c) * (tr1 - tr2)
+      f(k + 1) = s * (ti2 - ti1)
+    enddo
+    n2 = n2 - 1
+    do j = 2, n2
+      j2 = j + j
+      f(j) = f(j2 - 1) + f(j2)
+    enddo
+    do j = 2, n2
+      f(n + 2 - j) = f(j)
+    enddo
+    n2 = n2 + 1
+  endif
+  f(n2) = fnp1
+  if (msign >= 0) then
+
+! *** normalization
+
+    c = 0.0d0
+    a = (a + a) / h
+    do j = 2, n
+      c = c + a
+      f(j) = f(j) / c
+    enddo
+  endif
+  f(1) = 0.0d0
+  return
+end subroutine sintr
+end module sintr_mod
+module rcffi_mod
+contains
+subroutine rcffi(ar, ai, msign, h)
+
+!   *******************************************************************
+!   *                                                                 *
+!   * using a radix-two fast-fourier-transform technique, rcffi       *
+!   * computes the fourier integral transform of a real function      *
+!   * f(x) or the inverse fourier transform of a complex function     *
+!   * such that g(-y) = conj(g(y)).                                   *
+!   * (adapted from cfft routine, cern library member d704)           *
+!   *                                                                 *
+!   * g(y) = integral f(x) * cexp(-i * x * y) dx    (msign < 0)       *
+!   *                                                                 *
+!   * f(x) = 1 / (2 * pi) integral g(y) * cexp(+i * y * x) dy  (msign > 0)    *
+!   *                                                                 *
+!   * f(x) is tabulated on the meshes of points defined by            *
+!   * xj = j * hx and -xj = -j * hx,  j = 0, +1, ..., n-2, n-1        *
+!   * ar(j+1) contains f(+xj) and ai(j+1) contains f(-xj)             *
+!   * (input when msign < 0 , output when msign >0)                   *
+!   * ar(1) may be different from ai(1)                               *
+!   *                                                                 *
+!   * g(y) is tabulated on the mesh of points defined by              *
+!   * yk = k * hy  , k = 0, 1, ..., n - 2, n - 1                      *
+!   * ar(j+1) contains real(g(yk)) and ai(j+1) contains aimag(g(yk))  *
+!   * (output when msign > 0 , input when msign < 0)                  *
+!   * remark :  g(-yk) = conj(g(+yk))                                 *
+!   *                                                                 *
+!   * n = 2**iabs(msign)  (msign is an input)                         *
+!   *                                                                 *
+!   * the step sizes satisfy                                          *
+!   * hy = (2 * pi) / (n * hx)   or    hx = (2 * pi) / (n * hy)       *
+!   * h is an input (h = hx if msign < 0 , h = hy if msign > 0)       *
+!   * h must be positive                                              *
+!   *                                                                 *
+!   * ar and ai are two real arrays with dimension n (input and       *
+!   * output)                                                         *
+!   *                                                                 *
+!   *******************************************************************
+
+  implicit none
+
+  double precision, intent(in out) :: ar(*)
+  double precision, intent(in out) :: ai(*)
+  integer, intent(in)  :: msign
+  double precision, intent(in) :: h
+
+  double precision :: a, as, c, s, t, ti, tr, ui, ur, wi, wr
+  integer :: i, ip, j, k, l, le, le1, m, n, nm1, nv2
+  logical :: debug
+
+  debug = .false.
+  as = 0.0d0
+  if (msign == 0) then
+    return
+  endif
+
+  if (h <= 0.0d0) then
+    if (debug) write(*,*) ' *** negative step size in <rcffi>, h = ', h, ' *** '
+    stop
+  endif
+
+! *** initialization
+
+  m = iabs(msign)
+  n = 2**m
+  if (msign > 0) then
+    ar(1) = 0.5d0 * ar(1)
+  else
+    as = ar(1) - ai(1)
+    ar(1) = 0.5d0 * (ar(1) + ai(1))
+    do i = 2, n
+      ar(i) = ar(i) + ai(n - i + 2)
+    enddo
+    do i = 1, n
+      ai(i) = 0.0d0
+    enddo
+  endif
+! *** discrete fast-fourier transform
+  nv2 = n / 2
+  nm1 = n - 1
+  j = 1
+  do i = 1, nm1
+    if (i < j) then
+      tr = ar(j)
+      ar(j) = ar(i)
+      ar(i) = tr
+      ti = ai(j)
+      ai(j) = ai(i)
+      ai(i) = ti
+    endif
+    k = nv2
+    do while (j > k)
+      j = j - k
+      k = k / 2
+    enddo
+    j = j + k
+  enddo
+  do i = 1, n, 2
+    tr = ar(i + 1)
+    ar(i + 1) = ar(i) - tr
+    ar(i) = ar(i) + tr
+    ti = ai(i + 1)
+    ai(i + 1) = ai(i) - ti
+    ai(i) = ai(i) + ti
+  enddo
+  if (m == 1) return
+  c = 0.0d0
+  s = dble(isign(1, msign))
+  le = 2
+  do l = 2, m
+    wr = c
+    ur = wr
+    wi = s
+    ui = wi
+    c = dsqrt(c * 0.5d0 + 0.5d0)
+    s = wi / (c + c)
+    le1 = le
+    le = le1 + le1
+    do i = 1, n, le
+      ip = i + le1
+      tr = ar(ip)
+      ar(ip) = ar(i) - tr
+      ar(i)  = ar(i) + tr
+      ti = ai(ip)
+      ai(ip) = ai(i) - ti
+      ai(i)  = ai(i) + ti
+    enddo
+    do j = 2, le1
+      do i = j, n, le
+        ip = i + le1
+        tr = ar(ip) * ur - ai(ip) * ui
+        ti = ar(ip) * ui + ai(ip) * ur
+        ar(ip) = ar(i) - tr
+        ar(i)  = ar(i) + tr
+        ai(ip) = ai(i) - ti
+        ai(i)  = ai(i) + ti
+      enddo
+      tr = ur
+      ur = tr * wr - ui * wi
+      ui = tr * wi + ui * wr
+    enddo
+  enddo
+
+! *** correction of the discrete fft, using a trapezoidal approximation
+! *** for the variations of the input function
+
+  c = h
+  if (msign >= 0) then
+    c = c / 3.141592653589793238d0
+    ai(1) = ar(1)
+    do i = 2, n
+      ai(i) = ar(n - i + 2)
+    enddo
+  endif
+  ar(1) = c * ar(1)
+  ai(1) = c * ai(1)
+  a = 3.141592653589793238d0 / n
+  wr = dcos(a)
+  wi = dsin(a)
+  t = dsqrt(c)
+  a = a / t
+  c = 0.0d0
+  ur = 1.0d0
+  ui = 0.0d0
+  do i = 2, n
+    c = c + a
+    tr = ur
+    ur = wr * tr - wi * ui
+    ui = wi * tr + wr * ui
+    ti = ui / c
+    tr = ti**2
+    ar(i) = ar(i) * tr
+    ai(i) = ai(i) * tr
+    if (msign <= 0) then
+      if (as /= 0.0d0) then
+        ai(i) = ai(i) - as * (t - ur * ti) / (2 * c)
+      endif
+    endif
+  enddo
+  return
+end subroutine rcffi
+end module rcffi_mod
+subroutine doboson(t, width, gauss, asym, emin, emax, wmin, wmax, np, p, xout, yout, nout)
+
+! *******************************************************************
+! *                                                                 *
+! * perform the quantum-mechanical complement to the classical step *
+! * of the dielectric theory of eels in specular geometry using a   *
+! * suitable thermodynamical average of the quantized surface       *
+! * harmonic oscillators                                            *
+! *                                                                 *
+! * t:      Target temperature                                      *
+! * width:  Width of instrumental response (cm**-1)                 *
+! * gauss:  Fraction of gaussian for the instrumental response      *
+! * asym:   Asymmetry of the instrumental response                  *
+! * emin:   Lower loss energy for this computation (cm**-1)         *
+! * emax:   Upper loss energy for this computation (cm**-1)         *
+! * wmin:   Lower loss energy of the eels computation (cm**-1)      *
+! * wmax:   Upper loss energy of the eels computation (cm**-1)      *
+! * np:     Number of points of the eels computation                *
+! * p:      Intensities of the eels computation                     *
+! * xout:   Energies of this computation                            *
+! * yout:   Intensities of this computation                         *
+! * nout:   Number of points of this computation                    *
+! *******************************************************************
+
+  use rcffi_mod
+  use sicot_mod
+  use sintr_mod
+
+  implicit none
+
+  double precision, intent(in) :: t, width, gauss, asym, emin, emax, wmin
+  double precision, intent(in out) :: wmax
+  integer, intent(in) :: np
+  double precision, intent(in) :: p(np)
+  double precision, intent(in out) :: xout(nout), yout(nout)
+  integer, intent(in out) :: nout
+
+  integer, parameter :: mmax = 14, nmax = 2**mmax
+  double precision :: a, a1, a2, alfa, anorm, b, cp2, dwn, fac, fi
+  double precision :: fm, fm0, fm1, fp1, fmpic, fp, fp0, fppic, fr, g1, g2
+  double precision :: h, pi, sigma, sp2, test, u
+  double precision :: wmpic, wppic, wn, x, x1, x2, x3
+  double precision :: o1, o2, respon
+
+  external o1, o2
+
+  integer :: i, imax, imin, istep, j, jmin, jmax, m, n
+  logical :: picm, picp
+  double precision, allocatable :: p1(:), p2(:)
+  double precision :: r1(nmax), r2(nmax)
+
+  logical :: debug
+
+! remark : the two arrays r1 and r2 are used for fourier
+! transforming the user-supplied instrumental response of the
+! spectrometer that has to be coded in the external routine
+! respon called when the input parameter gauss is < 0 or > 1.
+! with 0 <= gauss <= 1, r1 and r2 are not used.
+
+! *** rational approximations for ei(u) * exp(-u) + e1(u) * exp(+u)
+! *** in the intervals (0, 1.3) and (1.3, infinity) <accuracy : 4.e-04>
+! *** used for fourier transforming half-lorentzian functions
+
+
+  debug = .false.
+  data fm1 / 0.0d0 /, fp1 / 0.0d0 /
+  pi = 4 * datan(1.0d0)
+
+  dwn = (wmax - wmin) / (np - 1)
+
+! *** redefine the frequency interval (0, wmax) to be used for the
+! *** fourier transforms
+
+  if (debug) write(*,*) 'wmin: ', wmin, 'wmax: ', wmax, 'dwn: ', dwn
+  jmin = int(0.5d0 + wmin / dwn)
+  if ((jmin - 0.5d0) * dwn < wmin) then
+    jmin = jmin + 1
+  endif
+  fac = ((jmin - 0.5d0) * dwn - wmin) / dwn
+  jmax = int(0.5d0 + wmax / dwn)
+  test = dmax1(1.5d0 * dabs(emin), 1.5d0 * dabs(emax), 6 * wmax)
+  n = 2
+  do m = 2, mmax
+    n = 2 * n
+    wmax = n * dwn
+    if (wmax >= test) exit
+  enddo
+  if (wmax < test) then
+    m = mmax
+    n = nmax
+    wmax = n * dwn
+    if (debug) write(*,*) ' +++ n has been fixed at', nmax, ' = 2**', mmax, ' +++'
+  endif
+  if (debug) then
+    write(*,*) ' classical spectrum redefined from 0.0 to', wmax
+    write(*,*) ' step size =', dwn, ', ', n, ' (= 2**', m, ') points'
+  endif
+
+  allocate (p1(n))
+  allocate (p2(n))
+
+  p1 = 0
+
+! *** interpolate pcl on a suitable mesh in (0, wmax)
+  i = 1
+  do j = jmin, min(jmax, n)
+    p1(j) = p(i) + fac * (p(i + 1) - p(i))
+    i = i + 1
+  enddo
+
+  p2 = p1
+
+! *** characteristic function f(tau)
+
+  call sicot(p1, m, dwn, 1.39d0 * t)
+  call sintr(p2, m, dwn)
+  h = (pi + pi) / wmax
+  if (gauss < 0.0d0 .or. gauss > 1.0d0) then
+
+! *** broaden the spectrum by convoluting the characteristic function
+! *** with a user-supplied response function (arbitrary normalization)
+
+    if (debug) write(*,*) '==> switch to a user-supplied instrumental response'
+    alfa = dmax1(4 * dwn, width)
+    if (alfa > width) then
+      if (debug) write(*,*) ' +++ width has been enlarged to', alfa, ' +++'
+    endif
+    if (alfa < 10 * dwn) then
+      if (debug) then
+        write(*,*) ' ... poor representation of the response function ...'
+        write(*,*) 'the step size (', dwn, ') should be reduced'
+      endif
+    endif
+! make a table of the response function
+    r1(1) = respon(0.0d0, alfa)
+    r2(1) = r1(1)
+    do i = 2, n
+      x = (i - 1) * dwn
+      r1(i) = respon( x, alfa)
+      r2(i) = respon(-x, alfa)
+    enddo
+! fourier transform it
+    call rcffi(r1, r2, -m, dwn)
+! normalization of the response function, and convolution
+    anorm = r1(1)
+    do i = 1, n
+      fac = dexp(-p1(i)) / anorm
+      cp2 = fac * dcos(p2(i))
+      sp2 = fac * dsin(p2(i))
+      p1(i) = r1(i) * cp2 + r2(i) * sp2
+      p2(i) = r2(i) * cp2 - r1(i) * sp2
+    enddo
+    alfa = alfa / 2
+
+  else
+
+! *** broaden the spectrum by convoluting the characteristic function by
+! *** a weighted sum of a lorentzian and a gaussian response functions
+
+    alfa = dmax1(1.5d0 * dwn, width)
+    if (alfa > width) then
+      if (debug) write(*,*) ' +++ width has been enlarged to', alfa, ' +++'
+    endif
+    if (alfa > 0.5d0 * wmax / pi) then
+      stop '*** width is too large, nothing done ***'
+    endif
+    alfa = 0.5d0 * alfa
+    sigma = alfa / 1.66511d0
+    a1 = (1.0d0 - asym) / 2 * (1.0d0 - gauss)
+    a2 = (1.0d0 + asym) / 2 * (1.0d0 - gauss)
+    if (a1 < 0.0d0 .or. a2 < 0.0d0) then
+      stop '*** invalid input : asym should be in (-1, +1) ***'
+    endif
+    g1 = (1.0d0 - asym) * alfa
+    g2 = (1.0d0 + asym) * alfa
+    p1(1) = 1.0d0
+    p2(1) = 0.0d0
+    do i = 2, n
+      x = (i - 1) * h
+      fr = 0.0d0
+      fi = 0.0d0
+      if (a1 /= 0.0d0) then
+        x1 = g1 * x
+        if (x1 <= 100.0d0) then
+          fr = a1 * dexp(-x1)
+        endif
+        if (a1 /= a2) then
+          if (x1 <= 1.3d0) then
+            fi = a1 * o1(x1)
+          else
+            fi = a1 * o2(x1)
+          endif
+        endif
+      endif
+      if (a2 /= 0.0d0) then
+        x2 = g2 * x
+        if (x2 <= 100.0d0) then
+          fr = fr + a2 * dexp(-x2)
+        endif
+        if (a2 /= a1) then
+          if (x2 <= 1.3d0) then
+            fi = fi - a2 * o1(x2)
+          else
+            fi = fi - a2 * o2(x2)
+          endif
+        endif
+      endif
+      if (gauss /= 0.0d0) then
+        x3 = sigma * x
+        if (x3 <= 10.0d0) then
+          fr = fr + gauss * dexp(-x3**2)
+        endif
+      endif
+      fi = fi / pi
+      fac = dexp(-p1(i))
+      cp2 = fac * dcos(p2(i))
+      sp2 = fac * dsin(p2(i))
+      p1(i) = fr * cp2 + fi * sp2
+      p2(i) = fi * cp2 - fr * sp2
+    enddo
+    if (dabs(fi) > 1.0d-03) then
+      if (debug) then
+        write(*,*) ' ... poor representation of the response function ...'
+        write(*,*) 'the step size (', dwn, ') should be reduced'
+      endif
+    endif
+  endif
+
+! *** full eels spectrum
+
+   call rcffi(p1, p2, m, h)
+
+! *** output
+
+  istep = max(int(alfa / dwn / 10), 1)
+  nout = 0
+  if (emin <= 0.0d0) then
+    imin = n - int(dabs(emin) / dwn)
+    if ((imin - n) * dwn < emin) then
+      imin = imin + 1
+    endif
+    do i = imin, n
+      j = n - i
+      if (mod(j, istep) > 0) cycle
+      x = -j * dwn
+      if (x > emax) exit
+      nout = nout + 1
+      xout(nout)= x
+      yout(nout)= p2(j + 1)
+    enddo
+  endif
+  if (x <= emax) then
+    if (emax >= dwn) then
+      imax = int(emax / dwn) + 1
+      if ((imax - 1) * dwn > emax) then
+        imax = imax - 1
+      endif
+      if (imax >= 2) then
+        do i = 2, imax
+          if (mod(i - 1, istep) > 0) cycle
+          x = (i - 1) * dwn
+          if (x < emin) cycle
+          nout = nout + 1
+          xout(nout) = x
+          yout(nout) = p1(i)
+        enddo
+      endif
+    endif
+  endif
+  if (debug) write(*,*) nout, ' values, step size =', istep * dwn
+
+! *** analyze the spectrum
+
+  if (debug) write(*,*) ' peak location    amplitude'
+  wn = 0.0d0
+  fm = p1(1)
+  fp = p2(1)
+  if (p2(2) < fp .and. p1(2) < fp) then
+    if (debug) write(*, '(f13.2, e13.4)') wn, fp
+  endif
+  fac = 5.0d-06 * fp * dwn
+  imax = 2 + int(dmax1(dabs(emin), dabs(emax)) / dwn)
+  do i = 2, imax
+    fm0 = fm1
+    fp0 = fp1
+    fm1 = fm
+    fp1 = fp
+    fm = p2(i)
+    fp = p1(i)
+    if (i == 2) cycle
+    picm = .false.
+    picp = .false.
+    wn = (i - 1) * dwn
+    if ((fm1 >= fm0) .and. (fm1 >= fm)) then
+      a = (fm1 - fm0) + (fm1 - fm)
+      if (a >= fac) then
+        b = 0.5d0 * ((fm1 - fm0) + 3 * (fm1 - fm))
+        u = b / a
+        wmpic = -wn + u * dwn
+        fmpic = fm + 0.5d0 * b * u
+        picm = .true.
+      endif
+    endif
+    if ((fp1 >= fp0) .and. (fp1 >= fp)) then
+      a = (fp1 - fp0) + (fp1 - fp)
+      if (a >= fac) then
+        b = 0.5d0 * ((fp1 - fp0) + 3 * (fp1 - fp))
+        u = b / a
+        wppic = wn - u * dwn
+        fppic = fp + 0.5d0 * b * u
+        picp = .true.
+        if (picp) then
+          if (picm) then
+            if (debug) write(*, '(2(f13.2, e13.4, 5x))') wppic, fppic, wmpic, fmpic
+          else
+            if (debug) write(*, '(f13.2, e13.4)') wppic, fppic
+          endif
+        endif
+      endif
+    endif
+    if (picm .and. (.not. picp)) then
+      if (debug) write(*, '(33x, f13.2, e13.4)') wmpic, fmpic
+    endif
+  enddo
+  deallocate (p1)
+  deallocate (p2)
+  return
+end subroutine doboson
+double precision function o1(u)
+
+  implicit none
+
+  double precision, intent(in) :: u
+  double precision :: u2
+
+  u2 = u**2
+  o1 = -dsinh(u) * dlog(u2) + u * ((0.03114d0 * u2 + 0.41666d0) * u2 + 0.84557d0)
+
+  return
+end function o1
+double precision function o2(u)
+
+  implicit none
+
+  double precision, intent(in) :: u
+  double precision :: u2
+
+  u2 = 1 / u**2
+  o2 = (((202.91d0 * u2 + 932.21d0) * u2 + 41.740d0) * u2 + 2.0d0) /  &
+       (((540.88d0 * u2 + 345.67d0) * u2 + 18.961d0) * u2 + 1.0d0) / u
+
+  return
+end function o2
diff --git a/source/f90/fcat-analysis/bosonf90_fcat_output b/source/f90/fcat-analysis/bosonf90_fcat_output
new file mode 100644
index 0000000..ba191d0
--- /dev/null
+++ b/source/f90/fcat-analysis/bosonf90_fcat_output
@@ -0,0 +1,1104 @@
+FCAT_boson_all_         1
+FCAT_boson_all_        45
+FCAT_boson_all_        55
+FCAT_boson_all_         2
+FCAT_boson_all_         3
+FCAT_boson_all_         4
+FCAT_boson_all_         5
+FCAT_boson_all_         6
+FCAT_boson_all_         7
+FCAT_boson_all_         8
+FCAT_boson_all_         9
+FCAT_boson_all_        10
+ program boson (September 2020)
+FCAT_boson_all_        11
+ t = 300.0 K, width =  25.00 cm**-1
+FCAT_boson_all_        12
+ gauss = 0.50, asym = 0.30
+FCAT_boson_all_        13
+ energy losses from -500.0     to  1200.     cm**-1
+FCAT_boson_all_        14
+FCAT_boson_all_        15
+FCAT_boson_all_        16
+FCAT_boson_all_        17
+FCAT_boson_all_        18
+FCAT_boson_all_        19
+FCAT_boson_all_        20
+FCAT_boson_all_        21
+FCAT_boson_all_        22
+FCAT_boson_all_        23
+FCAT_boson_all_        24
+FCAT_boson_all_        25
+FCAT_boson_all_        27
+FCAT_boson_all_        28
+FCAT_boson_all_        29
+ WFW: MnO layer on metal                                                 
+FCAT_boson_all_        30
+ read   326 values of pcl from   50.00000     to   700.0000    
+FCAT_boson_all_        31
+FCAT_boson_all_        32
+FCAT_boson_all_        33
+FCAT_boson_all_        34
+FCAT_boson_all_       368
+FCAT_boson_all_       369
+FCAT_boson_all_       370
+FCAT_boson_all_       371
+FCAT_boson_all_       372
+FCAT_boson_all_       373
+FCAT_boson_all_       374
+FCAT_boson_all_       375
+FCAT_boson_all_       376
+FCAT_boson_all_       377
+FCAT_boson_all_       378
+FCAT_boson_all_       379
+FCAT_boson_all_       380
+FCAT_boson_all_       381
+FCAT_boson_all_       382
+FCAT_boson_all_       383
+FCAT_boson_all_       384
+FCAT_boson_all_       385
+FCAT_boson_all_       386
+FCAT_boson_all_       392
+FCAT_boson_all_       396
+FCAT_boson_all_       397
+FCAT_boson_all_       398
+FCAT_boson_all_       399
+FCAT_boson_all_       400
+FCAT_boson_all_       401
+FCAT_boson_all_       402
+FCAT_boson_all_       403
+FCAT_boson_all_       404
+FCAT_boson_all_       405
+FCAT_boson_all_        67
+FCAT_boson_all_        68
+FCAT_boson_all_        72
+FCAT_boson_all_        76
+FCAT_boson_all_        80
+FCAT_boson_all_        81
+FCAT_boson_all_        82
+FCAT_boson_all_        83
+FCAT_boson_all_        84
+FCAT_boson_all_        85
+FCAT_boson_all_        86
+FCAT_boson_all_        87
+FCAT_boson_all_        88
+FCAT_boson_all_        89
+FCAT_boson_all_        90
+FCAT_boson_all_        91
+FCAT_boson_all_        92
+FCAT_boson_all_        93
+FCAT_boson_all_        94
+FCAT_boson_all_        95
+FCAT_boson_all_        96
+FCAT_boson_all_        97
+FCAT_boson_all_        98
+FCAT_boson_all_        99
+FCAT_boson_all_       100
+FCAT_boson_all_       101
+FCAT_boson_all_       102
+FCAT_boson_all_       103
+FCAT_boson_all_       104
+FCAT_boson_all_       105
+FCAT_boson_all_       106
+FCAT_boson_all_       107
+FCAT_boson_all_       108
+FCAT_boson_all_       110
+FCAT_boson_all_       111
+FCAT_boson_all_       115
+FCAT_boson_all_       119
+FCAT_boson_all_       120
+FCAT_boson_all_       121
+FCAT_boson_all_       122
+FCAT_boson_all_       123
+FCAT_boson_all_       124
+FCAT_boson_all_       125
+FCAT_boson_all_       126
+FCAT_boson_all_       138
+FCAT_boson_all_       139
+FCAT_boson_all_       143
+FCAT_boson_all_       144
+FCAT_boson_all_       127
+FCAT_boson_all_       128
+FCAT_boson_all_       129
+FCAT_boson_all_       130
+FCAT_boson_all_       131
+FCAT_boson_all_       132
+FCAT_boson_all_       133
+FCAT_boson_all_       134
+FCAT_boson_all_       135
+FCAT_boson_all_       136
+FCAT_boson_all_       137
+FCAT_boson_all_       140
+FCAT_boson_all_       141
+FCAT_boson_all_       142
+FCAT_boson_all_       145
+FCAT_boson_all_       146
+FCAT_boson_all_       147
+FCAT_boson_all_       148
+FCAT_boson_all_       149
+FCAT_boson_all_       150
+FCAT_boson_all_       151
+FCAT_boson_all_       152
+FCAT_boson_all_       153
+FCAT_boson_all_       154
+FCAT_boson_all_       155
+FCAT_boson_all_       156
+FCAT_boson_all_       157
+FCAT_boson_all_       158
+FCAT_boson_all_       159
+FCAT_boson_all_       160
+FCAT_boson_all_       161
+FCAT_boson_all_       162
+FCAT_boson_all_       163
+FCAT_boson_all_       164
+FCAT_boson_all_       165
+FCAT_boson_all_       166
+FCAT_boson_all_       167
+FCAT_boson_all_       168
+FCAT_boson_all_       169
+FCAT_boson_all_       170
+FCAT_boson_all_       171
+FCAT_boson_all_       172
+FCAT_boson_all_       173
+FCAT_boson_all_       174
+FCAT_boson_all_       175
+FCAT_boson_all_       176
+FCAT_boson_all_       177
+FCAT_boson_all_       178
+FCAT_boson_all_       179
+FCAT_boson_all_       180
+FCAT_boson_all_       181
+FCAT_boson_all_       182
+FCAT_boson_all_       183
+FCAT_boson_all_       184
+FCAT_boson_all_       185
+FCAT_boson_all_       186
+FCAT_boson_all_       187
+FCAT_boson_all_       188
+FCAT_boson_all_       189
+FCAT_boson_all_       190
+FCAT_boson_all_       191
+FCAT_boson_all_       192
+FCAT_boson_all_       193
+FCAT_boson_all_       194
+FCAT_boson_all_       195
+FCAT_boson_all_       196
+FCAT_boson_all_       197
+FCAT_boson_all_       198
+FCAT_boson_all_       199
+FCAT_boson_all_       200
+FCAT_boson_all_       201
+FCAT_boson_all_       202
+FCAT_boson_all_       203
+FCAT_boson_all_       204
+FCAT_boson_all_       205
+FCAT_boson_all_       206
+FCAT_boson_all_       207
+FCAT_boson_all_       208
+FCAT_boson_all_       209
+FCAT_boson_all_       210
+FCAT_boson_all_       211
+FCAT_boson_all_       212
+FCAT_boson_all_       213
+FCAT_boson_all_       214
+FCAT_boson_all_       215
+FCAT_boson_all_       216
+FCAT_boson_all_       217
+FCAT_boson_all_       218
+FCAT_boson_all_       219
+FCAT_boson_all_       220
+FCAT_boson_all_       221
+FCAT_boson_all_       222
+FCAT_boson_all_       223
+FCAT_boson_all_       224
+FCAT_boson_all_       225
+FCAT_boson_all_       226
+FCAT_boson_all_       227
+FCAT_boson_all_       228
+FCAT_boson_all_       229
+FCAT_boson_all_       230
+FCAT_boson_all_       231
+FCAT_boson_all_       232
+FCAT_boson_all_       233
+FCAT_boson_all_       234
+FCAT_boson_all_       235
+FCAT_boson_all_       236
+FCAT_boson_all_       237
+FCAT_boson_all_       245
+FCAT_boson_all_       246
+FCAT_boson_all_       109
+FCAT_boson_all_       406
+FCAT_boson_all_       238
+FCAT_boson_all_       239
+FCAT_boson_all_       240
+FCAT_boson_all_       241
+FCAT_boson_all_       242
+FCAT_boson_all_       243
+FCAT_boson_all_       244
+FCAT_boson_all_       407
+FCAT_boson_all_       408
+FCAT_boson_all_       437
+FCAT_boson_all_       438
+FCAT_boson_all_       439
+FCAT_boson_all_       442
+FCAT_boson_all_       445
+FCAT_boson_all_       446
+FCAT_boson_all_       447
+FCAT_boson_all_       448
+FCAT_boson_all_       449
+FCAT_boson_all_       452
+FCAT_boson_all_       453
+FCAT_boson_all_       454
+FCAT_boson_all_       455
+FCAT_boson_all_       456
+FCAT_boson_all_       457
+FCAT_boson_all_       458
+FCAT_boson_all_       459
+FCAT_boson_all_       460
+FCAT_boson_all_       461
+FCAT_boson_all_       462
+FCAT_boson_all_       463
+FCAT_boson_all_       464
+FCAT_boson_all_       465
+FCAT_boson_all_       466
+FCAT_boson_all_       467
+FCAT_boson_all_       597
+FCAT_boson_all_       598
+FCAT_boson_all_       599
+FCAT_boson_all_       471
+FCAT_boson_all_       472
+FCAT_boson_all_       473
+FCAT_boson_all_       474
+FCAT_boson_all_       475
+FCAT_boson_all_       476
+FCAT_boson_all_       477
+FCAT_boson_all_       478
+FCAT_boson_all_       479
+FCAT_boson_all_       480
+FCAT_boson_all_       484
+FCAT_boson_all_       485
+FCAT_boson_all_       486
+FCAT_boson_all_       487
+FCAT_boson_all_       488
+FCAT_boson_all_       489
+FCAT_boson_all_       490
+FCAT_boson_all_       491
+FCAT_boson_all_       492
+FCAT_boson_all_       493
+FCAT_boson_all_       494
+FCAT_boson_all_       495
+FCAT_boson_all_       496
+FCAT_boson_all_       497
+FCAT_boson_all_       498
+FCAT_boson_all_       481
+FCAT_boson_all_       482
+FCAT_boson_all_       600
+FCAT_boson_all_       601
+FCAT_boson_all_       602
+FCAT_boson_all_       483
+FCAT_boson_all_       468
+FCAT_boson_all_       469
+FCAT_boson_all_       470
+FCAT_boson_all_       499
+FCAT_boson_all_       505
+FCAT_boson_all_       506
+FCAT_boson_all_       247
+FCAT_boson_all_       248
+FCAT_boson_all_       249
+FCAT_boson_all_       252
+FCAT_boson_all_       256
+FCAT_boson_all_       257
+FCAT_boson_all_       258
+FCAT_boson_all_       259
+FCAT_boson_all_       270
+FCAT_boson_all_       271
+FCAT_boson_all_       272
+FCAT_boson_all_       273
+FCAT_boson_all_       274
+FCAT_boson_all_       282
+FCAT_boson_all_       283
+FCAT_boson_all_       287
+FCAT_boson_all_       288
+FCAT_boson_all_       275
+FCAT_boson_all_       276
+FCAT_boson_all_       277
+FCAT_boson_all_       278
+FCAT_boson_all_       279
+FCAT_boson_all_       280
+FCAT_boson_all_       281
+FCAT_boson_all_       284
+FCAT_boson_all_       285
+FCAT_boson_all_       286
+FCAT_boson_all_       289
+FCAT_boson_all_       290
+FCAT_boson_all_       291
+FCAT_boson_all_       292
+FCAT_boson_all_       293
+FCAT_boson_all_       294
+FCAT_boson_all_       295
+FCAT_boson_all_       296
+FCAT_boson_all_       297
+FCAT_boson_all_       298
+FCAT_boson_all_       299
+FCAT_boson_all_       300
+FCAT_boson_all_       301
+FCAT_boson_all_       302
+FCAT_boson_all_       303
+FCAT_boson_all_       304
+FCAT_boson_all_       305
+FCAT_boson_all_       306
+FCAT_boson_all_       307
+FCAT_boson_all_       308
+FCAT_boson_all_       309
+FCAT_boson_all_       310
+FCAT_boson_all_       311
+FCAT_boson_all_       312
+FCAT_boson_all_       313
+FCAT_boson_all_       314
+FCAT_boson_all_       315
+FCAT_boson_all_       316
+FCAT_boson_all_       317
+FCAT_boson_all_       318
+FCAT_boson_all_       319
+FCAT_boson_all_       320
+FCAT_boson_all_       321
+FCAT_boson_all_       322
+FCAT_boson_all_       323
+FCAT_boson_all_       324
+FCAT_boson_all_       325
+FCAT_boson_all_       326
+FCAT_boson_all_       327
+FCAT_boson_all_       328
+FCAT_boson_all_       329
+FCAT_boson_all_       330
+FCAT_boson_all_       331
+FCAT_boson_all_       332
+FCAT_boson_all_       333
+FCAT_boson_all_       334
+FCAT_boson_all_       335
+FCAT_boson_all_       336
+FCAT_boson_all_       337
+FCAT_boson_all_       338
+FCAT_boson_all_       339
+FCAT_boson_all_       340
+FCAT_boson_all_       341
+FCAT_boson_all_       342
+FCAT_boson_all_       343
+FCAT_boson_all_       344
+FCAT_boson_all_       345
+FCAT_boson_all_       346
+FCAT_boson_all_       347
+FCAT_boson_all_       348
+FCAT_boson_all_       349
+FCAT_boson_all_       350
+FCAT_boson_all_       351
+FCAT_boson_all_       352
+FCAT_boson_all_       353
+FCAT_boson_all_       354
+FCAT_boson_all_       355
+FCAT_boson_all_       356
+FCAT_boson_all_       357
+FCAT_boson_all_       358
+FCAT_boson_all_       359
+FCAT_boson_all_       360
+FCAT_boson_all_       361
+FCAT_boson_all_       366
+FCAT_boson_all_       367
+FCAT_boson_all_       507
+FCAT_boson_all_       508
+FCAT_boson_all_       509
+FCAT_boson_all_       510
+FCAT_boson_all_       511
+FCAT_boson_all_       514
+FCAT_boson_all_       515
+FCAT_boson_all_       516
+FCAT_boson_all_       517
+FCAT_boson_all_       518
+FCAT_boson_all_       519
+FCAT_boson_all_       520
+FCAT_boson_all_       521
+FCAT_boson_all_       522
+FCAT_boson_all_       523
+FCAT_boson_all_       524
+FCAT_boson_all_       525
+FCAT_boson_all_       526
+FCAT_boson_all_       527
+FCAT_boson_all_       530
+FCAT_boson_all_       531
+FCAT_boson_all_       532
+FCAT_boson_all_       533
+FCAT_boson_all_       534
+FCAT_boson_all_       535
+FCAT_boson_all_       536
+FCAT_boson_all_       537
+FCAT_boson_all_       538
+FCAT_boson_all_       539
+FCAT_boson_all_       540
+FCAT_boson_all_       541
+FCAT_boson_all_       542
+FCAT_boson_all_       543
+FCAT_boson_all_       544
+FCAT_boson_all_       545
+FCAT_boson_all_       546
+FCAT_boson_all_       547
+FCAT_boson_all_       548
+FCAT_boson_all_       549
+FCAT_boson_all_       550
+FCAT_boson_all_       551
+FCAT_boson_all_       552
+FCAT_boson_all_       553
+FCAT_boson_all_       554
+FCAT_boson_all_       555
+FCAT_boson_all_       556
+FCAT_boson_all_       557
+FCAT_boson_all_       558
+FCAT_boson_all_       559
+FCAT_boson_all_       560
+FCAT_boson_all_       561
+FCAT_boson_all_       562
+FCAT_boson_all_       563
+FCAT_boson_all_       573
+FCAT_boson_all_       590
+FCAT_boson_all_       593
+FCAT_boson_all_       564
+FCAT_boson_all_       565
+FCAT_boson_all_       566
+FCAT_boson_all_       567
+FCAT_boson_all_       568
+FCAT_boson_all_       569
+FCAT_boson_all_       570
+FCAT_boson_all_       571
+FCAT_boson_all_       572
+FCAT_boson_all_       591
+FCAT_boson_all_       592
+FCAT_boson_all_       574
+FCAT_boson_all_       575
+FCAT_boson_all_       576
+FCAT_boson_all_       577
+FCAT_boson_all_       578
+FCAT_boson_all_       579
+FCAT_boson_all_       580
+FCAT_boson_all_       581
+FCAT_boson_all_       582
+FCAT_boson_all_       584
+FCAT_boson_all_       585
+FCAT_boson_all_       586
+FCAT_boson_all_       587
+FCAT_boson_all_       588
+FCAT_boson_all_       589
+FCAT_boson_all_       594
+FCAT_boson_all_       595
+FCAT_boson_all_       596
+FCAT_boson_all_        35
+FCAT_boson_all_        36
+FCAT_boson_all_        37
+FCAT_boson_all_        38
+FCAT_boson_all_        39
+FCAT_boson_all_        40
+FCAT_boson_all_        41
+FCAT_boson_all_        42
+         851  values written on disk
+FCAT_boson_all_        43
+FCAT_boson_all_        44
+FCAT_boson_all_count         1         1
+FCAT_boson_all_count         2         1
+FCAT_boson_all_count         3         1
+FCAT_boson_all_count         4         1
+FCAT_boson_all_count         5         1
+FCAT_boson_all_count         6         1
+FCAT_boson_all_count         7         1
+FCAT_boson_all_count         8         1
+FCAT_boson_all_count         9         1
+FCAT_boson_all_count        10         1
+FCAT_boson_all_count        11         1
+FCAT_boson_all_count        12         1
+FCAT_boson_all_count        13         1
+FCAT_boson_all_count        14         1
+FCAT_boson_all_count        15         1
+FCAT_boson_all_count        16         1
+FCAT_boson_all_count        17         1
+FCAT_boson_all_count        18         1
+FCAT_boson_all_count        19       327
+FCAT_boson_all_count        20       327
+FCAT_boson_all_count        21       326
+FCAT_boson_all_count        22       326
+FCAT_boson_all_count        23       326
+FCAT_boson_all_count        24       326
+FCAT_boson_all_count        25       326
+FCAT_boson_all_count        26         0
+FCAT_boson_all_count        27         1
+FCAT_boson_all_count        28         1
+FCAT_boson_all_count        29         1
+FCAT_boson_all_count        30         1
+FCAT_boson_all_count        31         1
+FCAT_boson_all_count        32         1
+FCAT_boson_all_count        33         1
+FCAT_boson_all_count        34         1
+FCAT_boson_all_count        35         1
+FCAT_boson_all_count        36         1
+FCAT_boson_all_count        37         1
+FCAT_boson_all_count        38         1
+FCAT_boson_all_count        39       851
+FCAT_boson_all_count        40       851
+FCAT_boson_all_count        41         1
+FCAT_boson_all_count        42         1
+FCAT_boson_all_count        43         1
+FCAT_boson_all_count        44         1
+FCAT_boson_all_count        45         1
+FCAT_boson_all_count        46         0
+FCAT_boson_all_count        47         0
+FCAT_boson_all_count        48         0
+FCAT_boson_all_count        49         0
+FCAT_boson_all_count        50         0
+FCAT_boson_all_count        51         0
+FCAT_boson_all_count        52         0
+FCAT_boson_all_count        53         0
+FCAT_boson_all_count        54         0
+FCAT_boson_all_count        55         1
+FCAT_boson_all_count        56         0
+FCAT_boson_all_count        57         0
+FCAT_boson_all_count        58         0
+FCAT_boson_all_count        59         0
+FCAT_boson_all_count        60         0
+FCAT_boson_all_count        61         0
+FCAT_boson_all_count        62         0
+FCAT_boson_all_count        63         0
+FCAT_boson_all_count        64         0
+FCAT_boson_all_count        65         0
+FCAT_boson_all_count        66         0
+FCAT_boson_all_count        67         1
+FCAT_boson_all_count        68         1
+FCAT_boson_all_count        69         0
+FCAT_boson_all_count        70         0
+FCAT_boson_all_count        71         0
+FCAT_boson_all_count        72         1
+FCAT_boson_all_count        73         0
+FCAT_boson_all_count        74         0
+FCAT_boson_all_count        75         0
+FCAT_boson_all_count        76         1
+FCAT_boson_all_count        77         0
+FCAT_boson_all_count        78         0
+FCAT_boson_all_count        79         0
+FCAT_boson_all_count        80         1
+FCAT_boson_all_count        81         1
+FCAT_boson_all_count        82         1
+FCAT_boson_all_count        83         1
+FCAT_boson_all_count        84         1
+FCAT_boson_all_count        85         1
+FCAT_boson_all_count        86         1
+FCAT_boson_all_count        87         1
+FCAT_boson_all_count        88         1
+FCAT_boson_all_count        89         1
+FCAT_boson_all_count        90      4096
+FCAT_boson_all_count        91      4095
+FCAT_boson_all_count        92      4095
+FCAT_boson_all_count        93      4096
+FCAT_boson_all_count        94      4096
+FCAT_boson_all_count        95      3902
+FCAT_boson_all_count        96      3902
+FCAT_boson_all_count        97      3902
+FCAT_boson_all_count        98      3902
+FCAT_boson_all_count        99      3902
+FCAT_boson_all_count       100      4096
+FCAT_boson_all_count       101      4096
+FCAT_boson_all_count       102         1
+FCAT_boson_all_count       103         1
+FCAT_boson_all_count       104      4095
+FCAT_boson_all_count       105      4095
+FCAT_boson_all_count       106      4095
+FCAT_boson_all_count       107         1
+FCAT_boson_all_count       108         1
+FCAT_boson_all_count       109         1
+FCAT_boson_all_count       110         2
+FCAT_boson_all_count       111         2
+FCAT_boson_all_count       112         0
+FCAT_boson_all_count       113         0
+FCAT_boson_all_count       114         0
+FCAT_boson_all_count       115         2
+FCAT_boson_all_count       116         0
+FCAT_boson_all_count       117         0
+FCAT_boson_all_count       118         0
+FCAT_boson_all_count       119         2
+FCAT_boson_all_count       120         2
+FCAT_boson_all_count       121         2
+FCAT_boson_all_count       122         2
+FCAT_boson_all_count       123         2
+FCAT_boson_all_count       124         2
+FCAT_boson_all_count       125         2
+FCAT_boson_all_count       126      4094
+FCAT_boson_all_count       127      1984
+FCAT_boson_all_count       128      1984
+FCAT_boson_all_count       129      1984
+FCAT_boson_all_count       130      1984
+FCAT_boson_all_count       131      1984
+FCAT_boson_all_count       132      1984
+FCAT_boson_all_count       133      1984
+FCAT_boson_all_count       134      1984
+FCAT_boson_all_count       135      1984
+FCAT_boson_all_count       136      1984
+FCAT_boson_all_count       137      1984
+FCAT_boson_all_count       138      4094
+FCAT_boson_all_count       139      4094
+FCAT_boson_all_count       140      4072
+FCAT_boson_all_count       141      4072
+FCAT_boson_all_count       142      4072
+FCAT_boson_all_count       143      4094
+FCAT_boson_all_count       144      4094
+FCAT_boson_all_count       145         2
+FCAT_boson_all_count       146      2048
+FCAT_boson_all_count       147      2048
+FCAT_boson_all_count       148      2048
+FCAT_boson_all_count       149      2048
+FCAT_boson_all_count       150      2048
+FCAT_boson_all_count       151      2048
+FCAT_boson_all_count       152      2048
+FCAT_boson_all_count       153      2048
+FCAT_boson_all_count       154      2048
+FCAT_boson_all_count       155         2
+FCAT_boson_all_count       156         2
+FCAT_boson_all_count       157         2
+FCAT_boson_all_count       158         2
+FCAT_boson_all_count       159         2
+FCAT_boson_all_count       160        20
+FCAT_boson_all_count       161        20
+FCAT_boson_all_count       162        20
+FCAT_boson_all_count       163        20
+FCAT_boson_all_count       164        20
+FCAT_boson_all_count       165        20
+FCAT_boson_all_count       166        20
+FCAT_boson_all_count       167        20
+FCAT_boson_all_count       168        20
+FCAT_boson_all_count       169      2046
+FCAT_boson_all_count       170      2046
+FCAT_boson_all_count       171      2046
+FCAT_boson_all_count       172      2046
+FCAT_boson_all_count       173      2046
+FCAT_boson_all_count       174      2046
+FCAT_boson_all_count       175      2046
+FCAT_boson_all_count       176      2046
+FCAT_boson_all_count       177      2046
+FCAT_boson_all_count       178      2046
+FCAT_boson_all_count       179      2046
+FCAT_boson_all_count       180        20
+FCAT_boson_all_count       181      4072
+FCAT_boson_all_count       182     18434
+FCAT_boson_all_count       183     18434
+FCAT_boson_all_count       184     18434
+FCAT_boson_all_count       185     18434
+FCAT_boson_all_count       186     18434
+FCAT_boson_all_count       187     18434
+FCAT_boson_all_count       188     18434
+FCAT_boson_all_count       189     18434
+FCAT_boson_all_count       190     18434
+FCAT_boson_all_count       191     18434
+FCAT_boson_all_count       192     18434
+FCAT_boson_all_count       193      4072
+FCAT_boson_all_count       194      4072
+FCAT_boson_all_count       195      4072
+FCAT_boson_all_count       196      4072
+FCAT_boson_all_count       197        20
+FCAT_boson_all_count       198         2
+FCAT_boson_all_count       199         2
+FCAT_boson_all_count       200         2
+FCAT_boson_all_count       201         2
+FCAT_boson_all_count       202         2
+FCAT_boson_all_count       203         2
+FCAT_boson_all_count       204         2
+FCAT_boson_all_count       205         2
+FCAT_boson_all_count       206         2
+FCAT_boson_all_count       207         2
+FCAT_boson_all_count       208         2
+FCAT_boson_all_count       209         2
+FCAT_boson_all_count       210         2
+FCAT_boson_all_count       211      2048
+FCAT_boson_all_count       212      2048
+FCAT_boson_all_count       213      2048
+FCAT_boson_all_count       214      2048
+FCAT_boson_all_count       215      2048
+FCAT_boson_all_count       216      2048
+FCAT_boson_all_count       217      2048
+FCAT_boson_all_count       218      2048
+FCAT_boson_all_count       219      2048
+FCAT_boson_all_count       220      2048
+FCAT_boson_all_count       221      2048
+FCAT_boson_all_count       222      2048
+FCAT_boson_all_count       223      2048
+FCAT_boson_all_count       224      2048
+FCAT_boson_all_count       225      2048
+FCAT_boson_all_count       226         2
+FCAT_boson_all_count       227         2
+FCAT_boson_all_count       228      4094
+FCAT_boson_all_count       229      4094
+FCAT_boson_all_count       230      4094
+FCAT_boson_all_count       231         2
+FCAT_boson_all_count       232      4094
+FCAT_boson_all_count       233      4094
+FCAT_boson_all_count       234         2
+FCAT_boson_all_count       235         2
+FCAT_boson_all_count       236         2
+FCAT_boson_all_count       237         2
+FCAT_boson_all_count       238         1
+FCAT_boson_all_count       239         1
+FCAT_boson_all_count       240         1
+FCAT_boson_all_count       241      4095
+FCAT_boson_all_count       242      4095
+FCAT_boson_all_count       243      4095
+FCAT_boson_all_count       244         1
+FCAT_boson_all_count       245         2
+FCAT_boson_all_count       246         2
+FCAT_boson_all_count       247         1
+FCAT_boson_all_count       248         1
+FCAT_boson_all_count       249         1
+FCAT_boson_all_count       250         0
+FCAT_boson_all_count       251         0
+FCAT_boson_all_count       252         1
+FCAT_boson_all_count       253         0
+FCAT_boson_all_count       254         0
+FCAT_boson_all_count       255         0
+FCAT_boson_all_count       256         1
+FCAT_boson_all_count       257         1
+FCAT_boson_all_count       258         1
+FCAT_boson_all_count       259         1
+FCAT_boson_all_count       260         0
+FCAT_boson_all_count       261         0
+FCAT_boson_all_count       262         0
+FCAT_boson_all_count       263         0
+FCAT_boson_all_count       264         0
+FCAT_boson_all_count       265         0
+FCAT_boson_all_count       266         0
+FCAT_boson_all_count       267         0
+FCAT_boson_all_count       268         0
+FCAT_boson_all_count       269         0
+FCAT_boson_all_count       270         1
+FCAT_boson_all_count       271         1
+FCAT_boson_all_count       272         1
+FCAT_boson_all_count       273         1
+FCAT_boson_all_count       274      4095
+FCAT_boson_all_count       275      2016
+FCAT_boson_all_count       276      2016
+FCAT_boson_all_count       277      2016
+FCAT_boson_all_count       278      2016
+FCAT_boson_all_count       279      2016
+FCAT_boson_all_count       280      2016
+FCAT_boson_all_count       281      2016
+FCAT_boson_all_count       282      4095
+FCAT_boson_all_count       283      4095
+FCAT_boson_all_count       284      4083
+FCAT_boson_all_count       285      4083
+FCAT_boson_all_count       286      4083
+FCAT_boson_all_count       287      4095
+FCAT_boson_all_count       288      4095
+FCAT_boson_all_count       289         1
+FCAT_boson_all_count       290      2048
+FCAT_boson_all_count       291      2048
+FCAT_boson_all_count       292      2048
+FCAT_boson_all_count       293      2048
+FCAT_boson_all_count       294      2048
+FCAT_boson_all_count       295      2048
+FCAT_boson_all_count       296      2048
+FCAT_boson_all_count       297         1
+FCAT_boson_all_count       298         1
+FCAT_boson_all_count       299         1
+FCAT_boson_all_count       300         1
+FCAT_boson_all_count       301         1
+FCAT_boson_all_count       302        11
+FCAT_boson_all_count       303        11
+FCAT_boson_all_count       304        11
+FCAT_boson_all_count       305        11
+FCAT_boson_all_count       306        11
+FCAT_boson_all_count       307        11
+FCAT_boson_all_count       308        11
+FCAT_boson_all_count       309        11
+FCAT_boson_all_count       310        11
+FCAT_boson_all_count       311      2047
+FCAT_boson_all_count       312      2047
+FCAT_boson_all_count       313      2047
+FCAT_boson_all_count       314      2047
+FCAT_boson_all_count       315      2047
+FCAT_boson_all_count       316      2047
+FCAT_boson_all_count       317      2047
+FCAT_boson_all_count       318      2047
+FCAT_boson_all_count       319        11
+FCAT_boson_all_count       320      4083
+FCAT_boson_all_count       321     20481
+FCAT_boson_all_count       322     20481
+FCAT_boson_all_count       323     20481
+FCAT_boson_all_count       324     20481
+FCAT_boson_all_count       325     20481
+FCAT_boson_all_count       326     20481
+FCAT_boson_all_count       327     20481
+FCAT_boson_all_count       328     20481
+FCAT_boson_all_count       329      4083
+FCAT_boson_all_count       330      4083
+FCAT_boson_all_count       331      4083
+FCAT_boson_all_count       332      4083
+FCAT_boson_all_count       333        11
+FCAT_boson_all_count       334         1
+FCAT_boson_all_count       335         1
+FCAT_boson_all_count       336         1
+FCAT_boson_all_count       337         1
+FCAT_boson_all_count       338         1
+FCAT_boson_all_count       339      4095
+FCAT_boson_all_count       340      4095
+FCAT_boson_all_count       341         1
+FCAT_boson_all_count       342         1
+FCAT_boson_all_count       343         1
+FCAT_boson_all_count       344         1
+FCAT_boson_all_count       345         1
+FCAT_boson_all_count       346         1
+FCAT_boson_all_count       347         1
+FCAT_boson_all_count       348         1
+FCAT_boson_all_count       349         1
+FCAT_boson_all_count       350         1
+FCAT_boson_all_count       351         1
+FCAT_boson_all_count       352         1
+FCAT_boson_all_count       353      4095
+FCAT_boson_all_count       354      4095
+FCAT_boson_all_count       355      4095
+FCAT_boson_all_count       356      4095
+FCAT_boson_all_count       357      4095
+FCAT_boson_all_count       358      4095
+FCAT_boson_all_count       359      4095
+FCAT_boson_all_count       360      4095
+FCAT_boson_all_count       361      4095
+FCAT_boson_all_count       362         0
+FCAT_boson_all_count       363         0
+FCAT_boson_all_count       364         0
+FCAT_boson_all_count       365         0
+FCAT_boson_all_count       366      4095
+FCAT_boson_all_count       367         1
+FCAT_boson_all_count       368         1
+FCAT_boson_all_count       369         1
+FCAT_boson_all_count       370         1
+FCAT_boson_all_count       371         1
+FCAT_boson_all_count       372         1
+FCAT_boson_all_count       373         1
+FCAT_boson_all_count       374         1
+FCAT_boson_all_count       375         1
+FCAT_boson_all_count       376         1
+FCAT_boson_all_count       377         1
+FCAT_boson_all_count       378         1
+FCAT_boson_all_count       379         1
+FCAT_boson_all_count       380         1
+FCAT_boson_all_count       381         1
+FCAT_boson_all_count       382        11
+FCAT_boson_all_count       383        11
+FCAT_boson_all_count       384        11
+FCAT_boson_all_count       385        10
+FCAT_boson_all_count       386         1
+FCAT_boson_all_count       387         0
+FCAT_boson_all_count       388         0
+FCAT_boson_all_count       389         0
+FCAT_boson_all_count       390         0
+FCAT_boson_all_count       391         0
+FCAT_boson_all_count       392         1
+FCAT_boson_all_count       393         0
+FCAT_boson_all_count       394         0
+FCAT_boson_all_count       395         0
+FCAT_boson_all_count       396         1
+FCAT_boson_all_count       397         1
+FCAT_boson_all_count       398         1
+FCAT_boson_all_count       399         1
+FCAT_boson_all_count       400         1
+FCAT_boson_all_count       401       325
+FCAT_boson_all_count       402       325
+FCAT_boson_all_count       403       325
+FCAT_boson_all_count       404         1
+FCAT_boson_all_count       405         1
+FCAT_boson_all_count       406         1
+FCAT_boson_all_count       407         1
+FCAT_boson_all_count       408         1
+FCAT_boson_all_count       409         0
+FCAT_boson_all_count       410         0
+FCAT_boson_all_count       411         0
+FCAT_boson_all_count       412         0
+FCAT_boson_all_count       413         0
+FCAT_boson_all_count       414         0
+FCAT_boson_all_count       415         0
+FCAT_boson_all_count       416         0
+FCAT_boson_all_count       417         0
+FCAT_boson_all_count       418         0
+FCAT_boson_all_count       419         0
+FCAT_boson_all_count       420         0
+FCAT_boson_all_count       421         0
+FCAT_boson_all_count       422         0
+FCAT_boson_all_count       423         0
+FCAT_boson_all_count       424         0
+FCAT_boson_all_count       425         0
+FCAT_boson_all_count       426         0
+FCAT_boson_all_count       427         0
+FCAT_boson_all_count       428         0
+FCAT_boson_all_count       429         0
+FCAT_boson_all_count       430         0
+FCAT_boson_all_count       431         0
+FCAT_boson_all_count       432         0
+FCAT_boson_all_count       433         0
+FCAT_boson_all_count       434         0
+FCAT_boson_all_count       435         0
+FCAT_boson_all_count       436         0
+FCAT_boson_all_count       437         1
+FCAT_boson_all_count       438         1
+FCAT_boson_all_count       439         1
+FCAT_boson_all_count       440         0
+FCAT_boson_all_count       441         0
+FCAT_boson_all_count       442         1
+FCAT_boson_all_count       443         0
+FCAT_boson_all_count       444         0
+FCAT_boson_all_count       445         1
+FCAT_boson_all_count       446         1
+FCAT_boson_all_count       447         1
+FCAT_boson_all_count       448         1
+FCAT_boson_all_count       449         1
+FCAT_boson_all_count       450         0
+FCAT_boson_all_count       451         0
+FCAT_boson_all_count       452         1
+FCAT_boson_all_count       453         1
+FCAT_boson_all_count       454         1
+FCAT_boson_all_count       455         1
+FCAT_boson_all_count       456         1
+FCAT_boson_all_count       457      4095
+FCAT_boson_all_count       458      4095
+FCAT_boson_all_count       459      4095
+FCAT_boson_all_count       460      4095
+FCAT_boson_all_count       461      4095
+FCAT_boson_all_count       462      4095
+FCAT_boson_all_count       463      4095
+FCAT_boson_all_count       464      4095
+FCAT_boson_all_count       465      4095
+FCAT_boson_all_count       466      4095
+FCAT_boson_all_count       467       193
+FCAT_boson_all_count       468      3902
+FCAT_boson_all_count       469      3902
+FCAT_boson_all_count       470      3902
+FCAT_boson_all_count       471      4095
+FCAT_boson_all_count       472      4095
+FCAT_boson_all_count       473      4095
+FCAT_boson_all_count       474      4095
+FCAT_boson_all_count       475      4095
+FCAT_boson_all_count       476      4095
+FCAT_boson_all_count       477      4095
+FCAT_boson_all_count       478      4095
+FCAT_boson_all_count       479      4095
+FCAT_boson_all_count       480       104
+FCAT_boson_all_count       481      3991
+FCAT_boson_all_count       482      3991
+FCAT_boson_all_count       483      3991
+FCAT_boson_all_count       484      4095
+FCAT_boson_all_count       485      4095
+FCAT_boson_all_count       486      4095
+FCAT_boson_all_count       487      4095
+FCAT_boson_all_count       488      4095
+FCAT_boson_all_count       489      1736
+FCAT_boson_all_count       490      1736
+FCAT_boson_all_count       491      4095
+FCAT_boson_all_count       492      4095
+FCAT_boson_all_count       493      4095
+FCAT_boson_all_count       494      4095
+FCAT_boson_all_count       495      4095
+FCAT_boson_all_count       496      4095
+FCAT_boson_all_count       497      4095
+FCAT_boson_all_count       498      4095
+FCAT_boson_all_count       499         1
+FCAT_boson_all_count       500         0
+FCAT_boson_all_count       501         0
+FCAT_boson_all_count       502         0
+FCAT_boson_all_count       503         0
+FCAT_boson_all_count       504         0
+FCAT_boson_all_count       505         1
+FCAT_boson_all_count       506         1
+FCAT_boson_all_count       507         1
+FCAT_boson_all_count       508         1
+FCAT_boson_all_count       509         1
+FCAT_boson_all_count       510         1
+FCAT_boson_all_count       511         1
+FCAT_boson_all_count       512         0
+FCAT_boson_all_count       513         0
+FCAT_boson_all_count       514         1
+FCAT_boson_all_count       515       251
+FCAT_boson_all_count       516       251
+FCAT_boson_all_count       517       251
+FCAT_boson_all_count       518       251
+FCAT_boson_all_count       519       251
+FCAT_boson_all_count       520       251
+FCAT_boson_all_count       521       251
+FCAT_boson_all_count       522       251
+FCAT_boson_all_count       523         1
+FCAT_boson_all_count       524         1
+FCAT_boson_all_count       525         1
+FCAT_boson_all_count       526         1
+FCAT_boson_all_count       527         1
+FCAT_boson_all_count       528         0
+FCAT_boson_all_count       529         0
+FCAT_boson_all_count       530         1
+FCAT_boson_all_count       531         1
+FCAT_boson_all_count       532       600
+FCAT_boson_all_count       533       600
+FCAT_boson_all_count       534       600
+FCAT_boson_all_count       535       600
+FCAT_boson_all_count       536       600
+FCAT_boson_all_count       537       600
+FCAT_boson_all_count       538       600
+FCAT_boson_all_count       539         1
+FCAT_boson_all_count       540         1
+FCAT_boson_all_count       541         1
+FCAT_boson_all_count       542         1
+FCAT_boson_all_count       543         1
+FCAT_boson_all_count       544         1
+FCAT_boson_all_count       545         1
+FCAT_boson_all_count       546         1
+FCAT_boson_all_count       547         1
+FCAT_boson_all_count       548         1
+FCAT_boson_all_count       549         1
+FCAT_boson_all_count       550         1
+FCAT_boson_all_count       551         1
+FCAT_boson_all_count       552         1
+FCAT_boson_all_count       553       601
+FCAT_boson_all_count       554       601
+FCAT_boson_all_count       555       601
+FCAT_boson_all_count       556       601
+FCAT_boson_all_count       557       601
+FCAT_boson_all_count       558       601
+FCAT_boson_all_count       559       601
+FCAT_boson_all_count       560       600
+FCAT_boson_all_count       561       600
+FCAT_boson_all_count       562       600
+FCAT_boson_all_count       563       600
+FCAT_boson_all_count       564         2
+FCAT_boson_all_count       565         2
+FCAT_boson_all_count       566         2
+FCAT_boson_all_count       567         2
+FCAT_boson_all_count       568         2
+FCAT_boson_all_count       569         2
+FCAT_boson_all_count       570         2
+FCAT_boson_all_count       571         2
+FCAT_boson_all_count       572         2
+FCAT_boson_all_count       573       600
+FCAT_boson_all_count       574         2
+FCAT_boson_all_count       575         2
+FCAT_boson_all_count       576         2
+FCAT_boson_all_count       577         2
+FCAT_boson_all_count       578         2
+FCAT_boson_all_count       579         2
+FCAT_boson_all_count       580         2
+FCAT_boson_all_count       581         2
+FCAT_boson_all_count       582         2
+FCAT_boson_all_count       583         0
+FCAT_boson_all_count       584         2
+FCAT_boson_all_count       585         2
+FCAT_boson_all_count       586         2
+FCAT_boson_all_count       587         2
+FCAT_boson_all_count       588         2
+FCAT_boson_all_count       589         2
+FCAT_boson_all_count       590       600
+FCAT_boson_all_count       591         2
+FCAT_boson_all_count       592         2
+FCAT_boson_all_count       593       600
+FCAT_boson_all_count       594         1
+FCAT_boson_all_count       595         1
+FCAT_boson_all_count       596         1
+FCAT_boson_all_count       597       297
+FCAT_boson_all_count       598       297
+FCAT_boson_all_count       599       297
+FCAT_boson_all_count       600      7893
+FCAT_boson_all_count       601      7893
+FCAT_boson_all_count       602      7893
diff --git a/source/f90/fcat-analysis/bosou b/source/f90/fcat-analysis/bosou
new file mode 100644
index 0000000..b994389
--- /dev/null
+++ b/source/f90/fcat-analysis/bosou
@@ -0,0 +1,853 @@
+e0 =  4.00 theta = 60.0 phia = 1.80 phib = 1.80                         T = 300.0 GAUSS = 0.50
+ WFW: MnO layer on metal                                                 
+ -0.5000000E+03  0.3452968E-03
+ -0.4980000E+03  0.3096233E-03
+ -0.4960000E+03  0.2765199E-03
+ -0.4940000E+03  0.2465110E-03
+ -0.4920000E+03  0.2198104E-03
+ -0.4900000E+03  0.1963923E-03
+ -0.4880000E+03  0.1760658E-03
+ -0.4860000E+03  0.1585408E-03
+ -0.4840000E+03  0.1434824E-03
+ -0.4820000E+03  0.1305498E-03
+ -0.4800000E+03  0.1194226E-03
+ -0.4780000E+03  0.1098142E-03
+ -0.4760000E+03  0.1014780E-03
+ -0.4740000E+03  0.9420631E-04
+ -0.4720000E+03  0.8782735E-04
+ -0.4700000E+03  0.8219977E-04
+ -0.4680000E+03  0.7720751E-04
+ -0.4660000E+03  0.7275503E-04
+ -0.4640000E+03  0.6876333E-04
+ -0.4620000E+03  0.6516681E-04
+ -0.4600000E+03  0.6191080E-04
+ -0.4580000E+03  0.5894968E-04
+ -0.4560000E+03  0.5624528E-04
+ -0.4540000E+03  0.5376568E-04
+ -0.4520000E+03  0.5148408E-04
+ -0.4500000E+03  0.4937799E-04
+ -0.4480000E+03  0.4742845E-04
+ -0.4460000E+03  0.4561937E-04
+ -0.4440000E+03  0.4393703E-04
+ -0.4420000E+03  0.4236963E-04
+ -0.4400000E+03  0.4090692E-04
+ -0.4380000E+03  0.3953993E-04
+ -0.4360000E+03  0.3826073E-04
+ -0.4340000E+03  0.3706226E-04
+ -0.4320000E+03  0.3593821E-04
+ -0.4300000E+03  0.3488289E-04
+ -0.4280000E+03  0.3389117E-04
+ -0.4260000E+03  0.3295840E-04
+ -0.4240000E+03  0.3208033E-04
+ -0.4220000E+03  0.3125311E-04
+ -0.4200000E+03  0.3047323E-04
+ -0.4180000E+03  0.2973743E-04
+ -0.4160000E+03  0.2904276E-04
+ -0.4140000E+03  0.2838647E-04
+ -0.4120000E+03  0.2776603E-04
+ -0.4100000E+03  0.2717911E-04
+ -0.4080000E+03  0.2662352E-04
+ -0.4060000E+03  0.2609726E-04
+ -0.4040000E+03  0.2559846E-04
+ -0.4020000E+03  0.2512539E-04
+ -0.4000000E+03  0.2467645E-04
+ -0.3980000E+03  0.2425017E-04
+ -0.3960000E+03  0.2384519E-04
+ -0.3940000E+03  0.2346026E-04
+ -0.3920000E+03  0.2309425E-04
+ -0.3900000E+03  0.2274612E-04
+ -0.3880000E+03  0.2241493E-04
+ -0.3860000E+03  0.2209980E-04
+ -0.3840000E+03  0.2179995E-04
+ -0.3820000E+03  0.2151465E-04
+ -0.3800000E+03  0.2124324E-04
+ -0.3780000E+03  0.2098511E-04
+ -0.3760000E+03  0.2073966E-04
+ -0.3740000E+03  0.2050635E-04
+ -0.3720000E+03  0.2028465E-04
+ -0.3700000E+03  0.2007407E-04
+ -0.3680000E+03  0.1987411E-04
+ -0.3660000E+03  0.1968431E-04
+ -0.3640000E+03  0.1950421E-04
+ -0.3620000E+03  0.1933338E-04
+ -0.3600000E+03  0.1917141E-04
+ -0.3580000E+03  0.1901791E-04
+ -0.3560000E+03  0.1887250E-04
+ -0.3540000E+03  0.1873487E-04
+ -0.3520000E+03  0.1860470E-04
+ -0.3500000E+03  0.1848174E-04
+ -0.3480000E+03  0.1836574E-04
+ -0.3460000E+03  0.1825650E-04
+ -0.3440000E+03  0.1815385E-04
+ -0.3420000E+03  0.1805766E-04
+ -0.3400000E+03  0.1796779E-04
+ -0.3380000E+03  0.1788413E-04
+ -0.3360000E+03  0.1780659E-04
+ -0.3340000E+03  0.1773507E-04
+ -0.3320000E+03  0.1766946E-04
+ -0.3300000E+03  0.1760965E-04
+ -0.3280000E+03  0.1755552E-04
+ -0.3260000E+03  0.1750693E-04
+ -0.3240000E+03  0.1746372E-04
+ -0.3220000E+03  0.1742572E-04
+ -0.3200000E+03  0.1739276E-04
+ -0.3180000E+03  0.1736463E-04
+ -0.3160000E+03  0.1734118E-04
+ -0.3140000E+03  0.1732221E-04
+ -0.3120000E+03  0.1730758E-04
+ -0.3100000E+03  0.1729714E-04
+ -0.3080000E+03  0.1729079E-04
+ -0.3060000E+03  0.1728845E-04
+ -0.3040000E+03  0.1729007E-04
+ -0.3020000E+03  0.1729562E-04
+ -0.3000000E+03  0.1730513E-04
+ -0.2980000E+03  0.1731861E-04
+ -0.2960000E+03  0.1733612E-04
+ -0.2940000E+03  0.1735771E-04
+ -0.2920000E+03  0.1738345E-04
+ -0.2900000E+03  0.1741339E-04
+ -0.2880000E+03  0.1744758E-04
+ -0.2860000E+03  0.1748606E-04
+ -0.2840000E+03  0.1752884E-04
+ -0.2820000E+03  0.1757592E-04
+ -0.2800000E+03  0.1762729E-04
+ -0.2780000E+03  0.1768294E-04
+ -0.2760000E+03  0.1774282E-04
+ -0.2740000E+03  0.1780692E-04
+ -0.2720000E+03  0.1787520E-04
+ -0.2700000E+03  0.1794766E-04
+ -0.2680000E+03  0.1802431E-04
+ -0.2660000E+03  0.1810518E-04
+ -0.2640000E+03  0.1819033E-04
+ -0.2620000E+03  0.1827984E-04
+ -0.2600000E+03  0.1837384E-04
+ -0.2580000E+03  0.1847243E-04
+ -0.2560000E+03  0.1857577E-04
+ -0.2540000E+03  0.1868399E-04
+ -0.2520000E+03  0.1879725E-04
+ -0.2500000E+03  0.1891567E-04
+ -0.2480000E+03  0.1903936E-04
+ -0.2460000E+03  0.1916841E-04
+ -0.2440000E+03  0.1930287E-04
+ -0.2420000E+03  0.1944276E-04
+ -0.2400000E+03  0.1958807E-04
+ -0.2380000E+03  0.1973876E-04
+ -0.2360000E+03  0.1989479E-04
+ -0.2340000E+03  0.2005610E-04
+ -0.2320000E+03  0.2022264E-04
+ -0.2300000E+03  0.2039436E-04
+ -0.2280000E+03  0.2057128E-04
+ -0.2260000E+03  0.2075344E-04
+ -0.2240000E+03  0.2094093E-04
+ -0.2220000E+03  0.2113394E-04
+ -0.2200000E+03  0.2133269E-04
+ -0.2180000E+03  0.2153749E-04
+ -0.2160000E+03  0.2174873E-04
+ -0.2140000E+03  0.2196683E-04
+ -0.2120000E+03  0.2219230E-04
+ -0.2100000E+03  0.2242567E-04
+ -0.2080000E+03  0.2266752E-04
+ -0.2060000E+03  0.2291842E-04
+ -0.2040000E+03  0.2317896E-04
+ -0.2020000E+03  0.2344971E-04
+ -0.2000000E+03  0.2373122E-04
+ -0.1980000E+03  0.2402397E-04
+ -0.1960000E+03  0.2432842E-04
+ -0.1940000E+03  0.2464494E-04
+ -0.1920000E+03  0.2497383E-04
+ -0.1900000E+03  0.2531531E-04
+ -0.1880000E+03  0.2566953E-04
+ -0.1860000E+03  0.2603657E-04
+ -0.1840000E+03  0.2641649E-04
+ -0.1820000E+03  0.2680934E-04
+ -0.1800000E+03  0.2721521E-04
+ -0.1780000E+03  0.2763424E-04
+ -0.1760000E+03  0.2806669E-04
+ -0.1740000E+03  0.2851293E-04
+ -0.1720000E+03  0.2897345E-04
+ -0.1700000E+03  0.2944887E-04
+ -0.1680000E+03  0.2993988E-04
+ -0.1660000E+03  0.3044725E-04
+ -0.1640000E+03  0.3097179E-04
+ -0.1620000E+03  0.3151431E-04
+ -0.1600000E+03  0.3207563E-04
+ -0.1580000E+03  0.3265654E-04
+ -0.1560000E+03  0.3325780E-04
+ -0.1540000E+03  0.3388016E-04
+ -0.1520000E+03  0.3452434E-04
+ -0.1500000E+03  0.3519111E-04
+ -0.1480000E+03  0.3588127E-04
+ -0.1460000E+03  0.3659572E-04
+ -0.1440000E+03  0.3733548E-04
+ -0.1420000E+03  0.3810173E-04
+ -0.1400000E+03  0.3889585E-04
+ -0.1380000E+03  0.3971946E-04
+ -0.1360000E+03  0.4057443E-04
+ -0.1340000E+03  0.4146285E-04
+ -0.1320000E+03  0.4238711E-04
+ -0.1300000E+03  0.4334984E-04
+ -0.1280000E+03  0.4435388E-04
+ -0.1260000E+03  0.4540229E-04
+ -0.1240000E+03  0.4649831E-04
+ -0.1220000E+03  0.4764533E-04
+ -0.1200000E+03  0.4884688E-04
+ -0.1180000E+03  0.5010658E-04
+ -0.1160000E+03  0.5142819E-04
+ -0.1140000E+03  0.5281557E-04
+ -0.1120000E+03  0.5427275E-04
+ -0.1100000E+03  0.5580396E-04
+ -0.1080000E+03  0.5741367E-04
+ -0.1060000E+03  0.5910673E-04
+ -0.1040000E+03  0.6088841E-04
+ -0.1020000E+03  0.6276452E-04
+ -0.1000000E+03  0.6474155E-04
+ -0.9800000E+02  0.6682671E-04
+ -0.9600000E+02  0.6902811E-04
+ -0.9400000E+02  0.7135482E-04
+ -0.9200000E+02  0.7381694E-04
+ -0.9000000E+02  0.7642568E-04
+ -0.8800000E+02  0.7919333E-04
+ -0.8600000E+02  0.8213320E-04
+ -0.8400000E+02  0.8525948E-04
+ -0.8200000E+02  0.8858697E-04
+ -0.8000000E+02  0.9213072E-04
+ -0.7800000E+02  0.9590558E-04
+ -0.7600000E+02  0.9992564E-04
+ -0.7400000E+02  0.1042039E-03
+ -0.7200000E+02  0.1087518E-03
+ -0.7000000E+02  0.1135798E-03
+ -0.6800000E+02  0.1186979E-03
+ -0.6600000E+02  0.1241176E-03
+ -0.6400000E+02  0.1298540E-03
+ -0.6200000E+02  0.1359290E-03
+ -0.6000000E+02  0.1423754E-03
+ -0.5800000E+02  0.1492430E-03
+ -0.5600000E+02  0.1566063E-03
+ -0.5400000E+02  0.1645789E-03
+ -0.5200000E+02  0.1733361E-03
+ -0.5000000E+02  0.1831428E-03
+ -0.4800000E+02  0.1943430E-03
+ -0.4600000E+02  0.2073412E-03
+ -0.4400000E+02  0.2226383E-03
+ -0.4200000E+02  0.2409165E-03
+ -0.4000000E+02  0.2631544E-03
+ -0.3800000E+02  0.2908084E-03
+ -0.3600000E+02  0.3260767E-03
+ -0.3400000E+02  0.3722523E-03
+ -0.3200000E+02  0.4341508E-03
+ -0.3000000E+02  0.5185654E-03
+ -0.2800000E+02  0.6346525E-03
+ -0.2600000E+02  0.7941015E-03
+ -0.2400000E+02  0.1010909E-02
+ -0.2200000E+02  0.1300592E-02
+ -0.2000000E+02  0.1678744E-02
+ -0.1800000E+02  0.2159029E-02
+ -0.1600000E+02  0.2750887E-02
+ -0.1400000E+02  0.3457422E-02
+ -0.1200000E+02  0.4273833E-02
+ -0.1000000E+02  0.5186110E-02
+ -0.8000000E+01  0.6167983E-02
+ -0.6000000E+01  0.7171389E-02
+ -0.4000000E+01  0.8104983E-02
+ -0.2000000E+01  0.8808949E-02
+ -0.0000000E+00  0.9080436E-02
+  0.2000000E+01  0.8941075E-02
+  0.4000000E+01  0.8530095E-02
+  0.6000000E+01  0.7895152E-02
+  0.8000000E+01  0.7108290E-02
+  0.1000000E+02  0.6243762E-02
+  0.1200000E+02  0.5367473E-02
+  0.1400000E+02  0.4532139E-02
+  0.1600000E+02  0.3774725E-02
+  0.1800000E+02  0.3116302E-02
+  0.2000000E+02  0.2564007E-02
+  0.2200000E+02  0.2114287E-02
+  0.2400000E+02  0.1756575E-02
+  0.2600000E+02  0.1476697E-02
+  0.2800000E+02  0.1259619E-02
+  0.3000000E+02  0.1091316E-02
+  0.3200000E+02  0.9598154E-03
+  0.3400000E+02  0.8555692E-03
+  0.3600000E+02  0.7713585E-03
+  0.3800000E+02  0.7019506E-03
+  0.4000000E+02  0.6436657E-03
+  0.4200000E+02  0.5939571E-03
+  0.4400000E+02  0.5510598E-03
+  0.4600000E+02  0.5137159E-03
+  0.4800000E+02  0.4809719E-03
+  0.5000000E+02  0.4520361E-03
+  0.5200000E+02  0.4262364E-03
+  0.5400000E+02  0.4030380E-03
+  0.5600000E+02  0.3820141E-03
+  0.5800000E+02  0.3628162E-03
+  0.6000000E+02  0.3451661E-03
+  0.6200000E+02  0.3288457E-03
+  0.6400000E+02  0.3136867E-03
+  0.6600000E+02  0.2995597E-03
+  0.6800000E+02  0.2863645E-03
+  0.7000000E+02  0.2740222E-03
+  0.7200000E+02  0.2624682E-03
+  0.7400000E+02  0.2516470E-03
+  0.7600000E+02  0.2415089E-03
+  0.7800000E+02  0.2320077E-03
+  0.8000000E+02  0.2230999E-03
+  0.8200000E+02  0.2147440E-03
+  0.8400000E+02  0.2069010E-03
+  0.8600000E+02  0.1995340E-03
+  0.8800000E+02  0.1926087E-03
+  0.9000000E+02  0.1860930E-03
+  0.9200000E+02  0.1799576E-03
+  0.9400000E+02  0.1741752E-03
+  0.9600000E+02  0.1687209E-03
+  0.9800000E+02  0.1635714E-03
+  0.1000000E+03  0.1587053E-03
+  0.1020000E+03  0.1541031E-03
+  0.1040000E+03  0.1497462E-03
+  0.1060000E+03  0.1456177E-03
+  0.1080000E+03  0.1417019E-03
+  0.1100000E+03  0.1379843E-03
+  0.1120000E+03  0.1344515E-03
+  0.1140000E+03  0.1310913E-03
+  0.1160000E+03  0.1278923E-03
+  0.1180000E+03  0.1248445E-03
+  0.1200000E+03  0.1219384E-03
+  0.1220000E+03  0.1191658E-03
+  0.1240000E+03  0.1165190E-03
+  0.1260000E+03  0.1139912E-03
+  0.1280000E+03  0.1115760E-03
+  0.1300000E+03  0.1092677E-03
+  0.1320000E+03  0.1070612E-03
+  0.1340000E+03  0.1049515E-03
+  0.1360000E+03  0.1029341E-03
+  0.1380000E+03  0.1010045E-03
+  0.1400000E+03  0.9915866E-04
+  0.1420000E+03  0.9739251E-04
+  0.1440000E+03  0.9570216E-04
+  0.1460000E+03  0.9408378E-04
+  0.1480000E+03  0.9253368E-04
+  0.1500000E+03  0.9104823E-04
+  0.1520000E+03  0.8962394E-04
+  0.1540000E+03  0.8825744E-04
+  0.1560000E+03  0.8694550E-04
+  0.1580000E+03  0.8568505E-04
+  0.1600000E+03  0.8447319E-04
+  0.1620000E+03  0.8330721E-04
+  0.1640000E+03  0.8218457E-04
+  0.1660000E+03  0.8110298E-04
+  0.1680000E+03  0.8006032E-04
+  0.1700000E+03  0.7905471E-04
+  0.1720000E+03  0.7808453E-04
+  0.1740000E+03  0.7714839E-04
+  0.1760000E+03  0.7624517E-04
+  0.1780000E+03  0.7537404E-04
+  0.1800000E+03  0.7453444E-04
+  0.1820000E+03  0.7372604E-04
+  0.1840000E+03  0.7294869E-04
+  0.1860000E+03  0.7220234E-04
+  0.1880000E+03  0.7148690E-04
+  0.1900000E+03  0.7080220E-04
+  0.1920000E+03  0.7014794E-04
+  0.1940000E+03  0.6952361E-04
+  0.1960000E+03  0.6892856E-04
+  0.1980000E+03  0.6836201E-04
+  0.2000000E+03  0.6782306E-04
+  0.2020000E+03  0.6731077E-04
+  0.2040000E+03  0.6682420E-04
+  0.2060000E+03  0.6636244E-04
+  0.2080000E+03  0.6592463E-04
+  0.2100000E+03  0.6551002E-04
+  0.2120000E+03  0.6511793E-04
+  0.2140000E+03  0.6474777E-04
+  0.2160000E+03  0.6439904E-04
+  0.2180000E+03  0.6407128E-04
+  0.2200000E+03  0.6376409E-04
+  0.2220000E+03  0.6347709E-04
+  0.2240000E+03  0.6320991E-04
+  0.2260000E+03  0.6296217E-04
+  0.2280000E+03  0.6273348E-04
+  0.2300000E+03  0.6252343E-04
+  0.2320000E+03  0.6233160E-04
+  0.2340000E+03  0.6215757E-04
+  0.2360000E+03  0.6200089E-04
+  0.2380000E+03  0.6186115E-04
+  0.2400000E+03  0.6173794E-04
+  0.2420000E+03  0.6163091E-04
+  0.2440000E+03  0.6153974E-04
+  0.2460000E+03  0.6146416E-04
+  0.2480000E+03  0.6140397E-04
+  0.2500000E+03  0.6135903E-04
+  0.2520000E+03  0.6132927E-04
+  0.2540000E+03  0.6131466E-04
+  0.2560000E+03  0.6131524E-04
+  0.2580000E+03  0.6133108E-04
+  0.2600000E+03  0.6136228E-04
+  0.2620000E+03  0.6140895E-04
+  0.2640000E+03  0.6147122E-04
+  0.2660000E+03  0.6154920E-04
+  0.2680000E+03  0.6164300E-04
+  0.2700000E+03  0.6175271E-04
+  0.2720000E+03  0.6187839E-04
+  0.2740000E+03  0.6202011E-04
+  0.2760000E+03  0.6217790E-04
+  0.2780000E+03  0.6235180E-04
+  0.2800000E+03  0.6254185E-04
+  0.2820000E+03  0.6274812E-04
+  0.2840000E+03  0.6297070E-04
+  0.2860000E+03  0.6320972E-04
+  0.2880000E+03  0.6346536E-04
+  0.2900000E+03  0.6373786E-04
+  0.2920000E+03  0.6402752E-04
+  0.2940000E+03  0.6433471E-04
+  0.2960000E+03  0.6465986E-04
+  0.2980000E+03  0.6500346E-04
+  0.3000000E+03  0.6536604E-04
+  0.3020000E+03  0.6574819E-04
+  0.3040000E+03  0.6615053E-04
+  0.3060000E+03  0.6657369E-04
+  0.3080000E+03  0.6701832E-04
+  0.3100000E+03  0.6748508E-04
+  0.3120000E+03  0.6797461E-04
+  0.3140000E+03  0.6848757E-04
+  0.3160000E+03  0.6902460E-04
+  0.3180000E+03  0.6958631E-04
+  0.3200000E+03  0.7017334E-04
+  0.3220000E+03  0.7078633E-04
+  0.3240000E+03  0.7142590E-04
+  0.3260000E+03  0.7209274E-04
+  0.3280000E+03  0.7278754E-04
+  0.3300000E+03  0.7351105E-04
+  0.3320000E+03  0.7426409E-04
+  0.3340000E+03  0.7504753E-04
+  0.3360000E+03  0.7586235E-04
+  0.3380000E+03  0.7670961E-04
+  0.3400000E+03  0.7759046E-04
+  0.3420000E+03  0.7850615E-04
+  0.3440000E+03  0.7945805E-04
+  0.3460000E+03  0.8044759E-04
+  0.3480000E+03  0.8147631E-04
+  0.3500000E+03  0.8254583E-04
+  0.3520000E+03  0.8365783E-04
+  0.3540000E+03  0.8481408E-04
+  0.3560000E+03  0.8601642E-04
+  0.3580000E+03  0.8726677E-04
+  0.3600000E+03  0.8856713E-04
+  0.3620000E+03  0.8991960E-04
+  0.3640000E+03  0.9132642E-04
+  0.3660000E+03  0.9278996E-04
+  0.3680000E+03  0.9431276E-04
+  0.3700000E+03  0.9589758E-04
+  0.3720000E+03  0.9754738E-04
+  0.3740000E+03  0.9926542E-04
+  0.3760000E+03  0.1010552E-03
+  0.3780000E+03  0.1029206E-03
+  0.3800000E+03  0.1048658E-03
+  0.3820000E+03  0.1068954E-03
+  0.3840000E+03  0.1090142E-03
+  0.3860000E+03  0.1112276E-03
+  0.3880000E+03  0.1135413E-03
+  0.3900000E+03  0.1159614E-03
+  0.3920000E+03  0.1184946E-03
+  0.3940000E+03  0.1211478E-03
+  0.3960000E+03  0.1239285E-03
+  0.3980000E+03  0.1268447E-03
+  0.4000000E+03  0.1299052E-03
+  0.4020000E+03  0.1331190E-03
+  0.4040000E+03  0.1364960E-03
+  0.4060000E+03  0.1400471E-03
+  0.4080000E+03  0.1437837E-03
+  0.4100000E+03  0.1477184E-03
+  0.4120000E+03  0.1518651E-03
+  0.4140000E+03  0.1562386E-03
+  0.4160000E+03  0.1608556E-03
+  0.4180000E+03  0.1657340E-03
+  0.4200000E+03  0.1708938E-03
+  0.4220000E+03  0.1763569E-03
+  0.4240000E+03  0.1821475E-03
+  0.4260000E+03  0.1882920E-03
+  0.4280000E+03  0.1948198E-03
+  0.4300000E+03  0.2017631E-03
+  0.4320000E+03  0.2091574E-03
+  0.4340000E+03  0.2170418E-03
+  0.4360000E+03  0.2254596E-03
+  0.4380000E+03  0.2344586E-03
+  0.4400000E+03  0.2440922E-03
+  0.4420000E+03  0.2544203E-03
+  0.4440000E+03  0.2655108E-03
+  0.4460000E+03  0.2774416E-03
+  0.4480000E+03  0.2903030E-03
+  0.4500000E+03  0.3042011E-03
+  0.4520000E+03  0.3192623E-03
+  0.4540000E+03  0.3356383E-03
+  0.4560000E+03  0.3535136E-03
+  0.4580000E+03  0.3731137E-03
+  0.4600000E+03  0.3947157E-03
+  0.4620000E+03  0.4186620E-03
+  0.4640000E+03  0.4453757E-03
+  0.4660000E+03  0.4753797E-03
+  0.4680000E+03  0.5093211E-03
+  0.4700000E+03  0.5480015E-03
+  0.4720000E+03  0.5924178E-03
+  0.4740000E+03  0.6438161E-03
+  0.4760000E+03  0.7037579E-03
+  0.4780000E+03  0.7741990E-03
+  0.4800000E+03  0.8575741E-03
+  0.4820000E+03  0.9568757E-03
+  0.4840000E+03  0.1075710E-02
+  0.4860000E+03  0.1218300E-02
+  0.4880000E+03  0.1389410E-02
+  0.4900000E+03  0.1594143E-02
+  0.4920000E+03  0.1837594E-02
+  0.4940000E+03  0.2124326E-02
+  0.4960000E+03  0.2457680E-02
+  0.4980000E+03  0.2838945E-02
+  0.5000000E+03  0.3266423E-02
+  0.5020000E+03  0.3734473E-02
+  0.5040000E+03  0.4232566E-02
+  0.5060000E+03  0.4744462E-02
+  0.5080000E+03  0.5247711E-02
+  0.5100000E+03  0.5713943E-02
+  0.5120000E+03  0.6110792E-02
+  0.5140000E+03  0.6406226E-02
+  0.5160000E+03  0.6574874E-02
+  0.5180000E+03  0.6603823E-02
+  0.5200000E+03  0.6494748E-02
+  0.5220000E+03  0.6261819E-02
+  0.5240000E+03  0.5927589E-02
+  0.5260000E+03  0.5518942E-02
+  0.5280000E+03  0.5063713E-02
+  0.5300000E+03  0.4587997E-02
+  0.5320000E+03  0.4114229E-02
+  0.5340000E+03  0.3660045E-02
+  0.5360000E+03  0.3237908E-02
+  0.5380000E+03  0.2855357E-02
+  0.5400000E+03  0.2515688E-02
+  0.5420000E+03  0.2218880E-02
+  0.5440000E+03  0.1962582E-02
+  0.5460000E+03  0.1743021E-02
+  0.5480000E+03  0.1555753E-02
+  0.5500000E+03  0.1396222E-02
+  0.5520000E+03  0.1260125E-02
+  0.5540000E+03  0.1143616E-02
+  0.5560000E+03  0.1043392E-02
+  0.5580000E+03  0.9566884E-03
+  0.5600000E+03  0.8812301E-03
+  0.5620000E+03  0.8151622E-03
+  0.5640000E+03  0.7569737E-03
+  0.5660000E+03  0.7054304E-03
+  0.5680000E+03  0.6595187E-03
+  0.5700000E+03  0.6184023E-03
+  0.5720000E+03  0.5813883E-03
+  0.5740000E+03  0.5479014E-03
+  0.5760000E+03  0.5174633E-03
+  0.5780000E+03  0.4896756E-03
+  0.5800000E+03  0.4642067E-03
+  0.5820000E+03  0.4407796E-03
+  0.5840000E+03  0.4191627E-03
+  0.5860000E+03  0.3991610E-03
+  0.5880000E+03  0.3806098E-03
+  0.5900000E+03  0.3633681E-03
+  0.5920000E+03  0.3473146E-03
+  0.5940000E+03  0.3323434E-03
+  0.5960000E+03  0.3183615E-03
+  0.5980000E+03  0.3052864E-03
+  0.6000000E+03  0.2930441E-03
+  0.6020000E+03  0.2815681E-03
+  0.6040000E+03  0.2707986E-03
+  0.6060000E+03  0.2606811E-03
+  0.6080000E+03  0.2511662E-03
+  0.6100000E+03  0.2422087E-03
+  0.6120000E+03  0.2337677E-03
+  0.6140000E+03  0.2258054E-03
+  0.6160000E+03  0.2182876E-03
+  0.6180000E+03  0.2111827E-03
+  0.6200000E+03  0.2044618E-03
+  0.6220000E+03  0.1980982E-03
+  0.6240000E+03  0.1920676E-03
+  0.6260000E+03  0.1863474E-03
+  0.6280000E+03  0.1809170E-03
+  0.6300000E+03  0.1757574E-03
+  0.6320000E+03  0.1708511E-03
+  0.6340000E+03  0.1661820E-03
+  0.6360000E+03  0.1617354E-03
+  0.6380000E+03  0.1574977E-03
+  0.6400000E+03  0.1534564E-03
+  0.6420000E+03  0.1496002E-03
+  0.6440000E+03  0.1459183E-03
+  0.6460000E+03  0.1424010E-03
+  0.6480000E+03  0.1390392E-03
+  0.6500000E+03  0.1358246E-03
+  0.6520000E+03  0.1327491E-03
+  0.6540000E+03  0.1298054E-03
+  0.6560000E+03  0.1269865E-03
+  0.6580000E+03  0.1242857E-03
+  0.6600000E+03  0.1216967E-03
+  0.6620000E+03  0.1192134E-03
+  0.6640000E+03  0.1168298E-03
+  0.6660000E+03  0.1145400E-03
+  0.6680000E+03  0.1123381E-03
+  0.6700000E+03  0.1102180E-03
+  0.6720000E+03  0.1081730E-03
+  0.6740000E+03  0.1061961E-03
+  0.6760000E+03  0.1042792E-03
+  0.6780000E+03  0.1024134E-03
+  0.6800000E+03  0.1005888E-03
+  0.6820000E+03  0.9879459E-04
+  0.6840000E+03  0.9701925E-04
+  0.6860000E+03  0.9525119E-04
+  0.6880000E+03  0.9347928E-04
+  0.6900000E+03  0.9169359E-04
+  0.6920000E+03  0.8988629E-04
+  0.6940000E+03  0.8805305E-04
+  0.6960000E+03  0.8619579E-04
+  0.6980000E+03  0.8432743E-04
+  0.7000000E+03  0.8247696E-04
+  0.7020000E+03  0.8068208E-04
+  0.7040000E+03  0.7897018E-04
+  0.7060000E+03  0.7736054E-04
+  0.7080000E+03  0.7586660E-04
+  0.7100000E+03  0.7449496E-04
+  0.7120000E+03  0.7324590E-04
+  0.7140000E+03  0.7211449E-04
+  0.7160000E+03  0.7109202E-04
+  0.7180000E+03  0.7016753E-04
+  0.7200000E+03  0.6932917E-04
+  0.7220000E+03  0.6856534E-04
+  0.7240000E+03  0.6786542E-04
+  0.7260000E+03  0.6722024E-04
+  0.7280000E+03  0.6662223E-04
+  0.7300000E+03  0.6606532E-04
+  0.7320000E+03  0.6554479E-04
+  0.7340000E+03  0.6505702E-04
+  0.7360000E+03  0.6459922E-04
+  0.7380000E+03  0.6416923E-04
+  0.7400000E+03  0.6376534E-04
+  0.7420000E+03  0.6338615E-04
+  0.7440000E+03  0.6303047E-04
+  0.7460000E+03  0.6269726E-04
+  0.7480000E+03  0.6238562E-04
+  0.7500000E+03  0.6209471E-04
+  0.7520000E+03  0.6182380E-04
+  0.7540000E+03  0.6157224E-04
+  0.7560000E+03  0.6133942E-04
+  0.7580000E+03  0.6112483E-04
+  0.7600000E+03  0.6092800E-04
+  0.7620000E+03  0.6074854E-04
+  0.7640000E+03  0.6058609E-04
+  0.7660000E+03  0.6044035E-04
+  0.7680000E+03  0.6031108E-04
+  0.7700000E+03  0.6019808E-04
+  0.7720000E+03  0.6010116E-04
+  0.7740000E+03  0.6002021E-04
+  0.7760000E+03  0.5995510E-04
+  0.7780000E+03  0.5990575E-04
+  0.7800000E+03  0.5987209E-04
+  0.7820000E+03  0.5985407E-04
+  0.7840000E+03  0.5985163E-04
+  0.7860000E+03  0.5986475E-04
+  0.7880000E+03  0.5989338E-04
+  0.7900000E+03  0.5993753E-04
+  0.7920000E+03  0.5999717E-04
+  0.7940000E+03  0.6007233E-04
+  0.7960000E+03  0.6016303E-04
+  0.7980000E+03  0.6026932E-04
+  0.8000000E+03  0.6039129E-04
+  0.8020000E+03  0.6052904E-04
+  0.8040000E+03  0.6068271E-04
+  0.8060000E+03  0.6085247E-04
+  0.8080000E+03  0.6103855E-04
+  0.8100000E+03  0.6124118E-04
+  0.8120000E+03  0.6146063E-04
+  0.8140000E+03  0.6169723E-04
+  0.8160000E+03  0.6195129E-04
+  0.8180000E+03  0.6222319E-04
+  0.8200000E+03  0.6251330E-04
+  0.8220000E+03  0.6282203E-04
+  0.8240000E+03  0.6314977E-04
+  0.8260000E+03  0.6349697E-04
+  0.8280000E+03  0.6386406E-04
+  0.8300000E+03  0.6425149E-04
+  0.8320000E+03  0.6465974E-04
+  0.8340000E+03  0.6508928E-04
+  0.8360000E+03  0.6554063E-04
+  0.8380000E+03  0.6601431E-04
+  0.8400000E+03  0.6651089E-04
+  0.8420000E+03  0.6703098E-04
+  0.8440000E+03  0.6757521E-04
+  0.8460000E+03  0.6814426E-04
+  0.8480000E+03  0.6873889E-04
+  0.8500000E+03  0.6935987E-04
+  0.8520000E+03  0.7000808E-04
+  0.8540000E+03  0.7068440E-04
+  0.8560000E+03  0.7138984E-04
+  0.8580000E+03  0.7212541E-04
+  0.8600000E+03  0.7289224E-04
+  0.8620000E+03  0.7369148E-04
+  0.8640000E+03  0.7452439E-04
+  0.8660000E+03  0.7539226E-04
+  0.8680000E+03  0.7629648E-04
+  0.8700000E+03  0.7723849E-04
+  0.8720000E+03  0.7821984E-04
+  0.8740000E+03  0.7924215E-04
+  0.8760000E+03  0.8030714E-04
+  0.8780000E+03  0.8141662E-04
+  0.8800000E+03  0.8257254E-04
+  0.8820000E+03  0.8377697E-04
+  0.8840000E+03  0.8503212E-04
+  0.8860000E+03  0.8634037E-04
+  0.8880000E+03  0.8770426E-04
+  0.8900000E+03  0.8912653E-04
+  0.8920000E+03  0.9061011E-04
+  0.8940000E+03  0.9215817E-04
+  0.8960000E+03  0.9377410E-04
+  0.8980000E+03  0.9546156E-04
+  0.9000000E+03  0.9722446E-04
+  0.9020000E+03  0.9906701E-04
+  0.9040000E+03  0.1009937E-03
+  0.9060000E+03  0.1030094E-03
+  0.9080000E+03  0.1051194E-03
+  0.9100000E+03  0.1073291E-03
+  0.9120000E+03  0.1096445E-03
+  0.9140000E+03  0.1120722E-03
+  0.9160000E+03  0.1146190E-03
+  0.9180000E+03  0.1172924E-03
+  0.9200000E+03  0.1201004E-03
+  0.9220000E+03  0.1230519E-03
+  0.9240000E+03  0.1261562E-03
+  0.9260000E+03  0.1294237E-03
+  0.9280000E+03  0.1328656E-03
+  0.9300000E+03  0.1364940E-03
+  0.9320000E+03  0.1403223E-03
+  0.9340000E+03  0.1443651E-03
+  0.9360000E+03  0.1486384E-03
+  0.9380000E+03  0.1531596E-03
+  0.9400000E+03  0.1579482E-03
+  0.9420000E+03  0.1630252E-03
+  0.9440000E+03  0.1684141E-03
+  0.9460000E+03  0.1741407E-03
+  0.9480000E+03  0.1802336E-03
+  0.9500000E+03  0.1867246E-03
+  0.9520000E+03  0.1936492E-03
+  0.9540000E+03  0.2010468E-03
+  0.9560000E+03  0.2089619E-03
+  0.9580000E+03  0.2174447E-03
+  0.9600000E+03  0.2265519E-03
+  0.9620000E+03  0.2363483E-03
+  0.9640000E+03  0.2469080E-03
+  0.9660000E+03  0.2583164E-03
+  0.9680000E+03  0.2706721E-03
+  0.9700000E+03  0.2840898E-03
+  0.9720000E+03  0.2987029E-03
+  0.9740000E+03  0.3146676E-03
+  0.9760000E+03  0.3321665E-03
+  0.9780000E+03  0.3514140E-03
+  0.9800000E+03  0.3726613E-03
+  0.9820000E+03  0.3962029E-03
+  0.9840000E+03  0.4223838E-03
+  0.9860000E+03  0.4516070E-03
+  0.9880000E+03  0.4843414E-03
+  0.9900000E+03  0.5211304E-03
+  0.9920000E+03  0.5625979E-03
+  0.9940000E+03  0.6094525E-03
+  0.9960000E+03  0.6624858E-03
+  0.9980000E+03  0.7225628E-03
+  0.1000000E+04  0.7905998E-03
+  0.1002000E+04  0.8675256E-03
+  0.1004000E+04  0.9542229E-03
+  0.1006000E+04  0.1051446E-02
+  0.1008000E+04  0.1159712E-02
+  0.1010000E+04  0.1279176E-02
+  0.1012000E+04  0.1409475E-02
+  0.1014000E+04  0.1549584E-02
+  0.1016000E+04  0.1697666E-02
+  0.1018000E+04  0.1850956E-02
+  0.1020000E+04  0.2005707E-02
+  0.1022000E+04  0.2157215E-02
+  0.1024000E+04  0.2299978E-02
+  0.1026000E+04  0.2427991E-02
+  0.1028000E+04  0.2535212E-02
+  0.1030000E+04  0.2616136E-02
+  0.1032000E+04  0.2666411E-02
+  0.1034000E+04  0.2683366E-02
+  0.1036000E+04  0.2666322E-02
+  0.1038000E+04  0.2616639E-02
+  0.1040000E+04  0.2537482E-02
+  0.1042000E+04  0.2433400E-02
+  0.1044000E+04  0.2309810E-02
+  0.1046000E+04  0.2172464E-02
+  0.1048000E+04  0.2026978E-02
+  0.1050000E+04  0.1878467E-02
+  0.1052000E+04  0.1731286E-02
+  0.1054000E+04  0.1588905E-02
+  0.1056000E+04  0.1453872E-02
+  0.1058000E+04  0.1327875E-02
+  0.1060000E+04  0.1211846E-02
+  0.1062000E+04  0.1106104E-02
+  0.1064000E+04  0.1010503E-02
+  0.1066000E+04  0.9245697E-03
+  0.1068000E+04  0.8476281E-03
+  0.1070000E+04  0.7788930E-03
+  0.1072000E+04  0.7175447E-03
+  0.1074000E+04  0.6627784E-03
+  0.1076000E+04  0.6138360E-03
+  0.1078000E+04  0.5700232E-03
+  0.1080000E+04  0.5307161E-03
+  0.1082000E+04  0.4953621E-03
+  0.1084000E+04  0.4634758E-03
+  0.1086000E+04  0.4346338E-03
+  0.1088000E+04  0.4084679E-03
+  0.1090000E+04  0.3846588E-03
+  0.1092000E+04  0.3629301E-03
+  0.1094000E+04  0.3430429E-03
+  0.1096000E+04  0.3247904E-03
+  0.1098000E+04  0.3079937E-03
+  0.1100000E+04  0.2924981E-03
+  0.1102000E+04  0.2781692E-03
+  0.1104000E+04  0.2648903E-03
+  0.1106000E+04  0.2525596E-03
+  0.1108000E+04  0.2410878E-03
+  0.1110000E+04  0.2303969E-03
+  0.1112000E+04  0.2204176E-03
+  0.1114000E+04  0.2110887E-03
+  0.1116000E+04  0.2023556E-03
+  0.1118000E+04  0.1941697E-03
+  0.1120000E+04  0.1864870E-03
+  0.1122000E+04  0.1792683E-03
+  0.1124000E+04  0.1724777E-03
+  0.1126000E+04  0.1660831E-03
+  0.1128000E+04  0.1600551E-03
+  0.1130000E+04  0.1543668E-03
+  0.1132000E+04  0.1489940E-03
+  0.1134000E+04  0.1439143E-03
+  0.1136000E+04  0.1391073E-03
+  0.1138000E+04  0.1345543E-03
+  0.1140000E+04  0.1302379E-03
+  0.1142000E+04  0.1261425E-03
+  0.1144000E+04  0.1222535E-03
+  0.1146000E+04  0.1185574E-03
+  0.1148000E+04  0.1150418E-03
+  0.1150000E+04  0.1116955E-03
+  0.1152000E+04  0.1085077E-03
+  0.1154000E+04  0.1054688E-03
+  0.1156000E+04  0.1025697E-03
+  0.1158000E+04  0.9980210E-04
+  0.1160000E+04  0.9715813E-04
+  0.1162000E+04  0.9463057E-04
+  0.1164000E+04  0.9221265E-04
+  0.1166000E+04  0.8989801E-04
+  0.1168000E+04  0.8768067E-04
+  0.1170000E+04  0.8555500E-04
+  0.1172000E+04  0.8351561E-04
+  0.1174000E+04  0.8155738E-04
+  0.1176000E+04  0.7967535E-04
+  0.1178000E+04  0.7786472E-04
+  0.1180000E+04  0.7612073E-04
+  0.1182000E+04  0.7443869E-04
+  0.1184000E+04  0.7281384E-04
+  0.1186000E+04  0.7124134E-04
+  0.1188000E+04  0.6971618E-04
+  0.1190000E+04  0.6823318E-04
+  0.1192000E+04  0.6678695E-04
+  0.1194000E+04  0.6537190E-04
+  0.1196000E+04  0.6398235E-04
+  0.1198000E+04  0.6261263E-04
+  0.1200000E+04  0.6125731E-04
diff --git a/source/f90/fcat-analysis/eels_all-fcat.f90 b/source/f90/fcat-analysis/eels_all-fcat.f90
new file mode 100644
index 0000000..69f447c
--- /dev/null
+++ b/source/f90/fcat-analysis/eels_all-fcat.f90
@@ -0,0 +1,2085 @@
+program eels
+
+! ******************************************************************
+! *                                                                *
+! * compute the classical eels spectrum of an arbitrary plane-     *
+! * statified medium made from isotropic materials in specular     *
+! * geometry using the dielectric theory of eels.                  *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision :: e0, theta, phia, phib, wmin, wmax, dw
+  integer :: i, j, jos, k, l, layers, neps, nper, nw
+  logical :: user
+  character (len = 72) :: comment(2)
+  character (len = 10) :: contrl, mode
+
+  double precision, allocatable :: thick(:), epsinf(:), osc(:, :)
+  integer, allocatable :: nos(:)
+  character (len = 10), allocatable :: name(:)
+  double precision, allocatable :: wn_array(:), f(:)
+
+  integer :: old_size_1, old_size_2
+  double precision, allocatable :: tmp_osc(:, :)
+  integer :: ioStatus
+
+!  integer, parameter :: name_length = 10
+! *** read spectrometer parameters
+
+      call FCAT_eels_all(1)
+  call change_working_dir()
+      call FCAT_eels_all(2)
+  open(unit = 11, file = 'eelsin')
+! impact energy (ev)
+      call FCAT_eels_all(3)
+  read(11, *) e0
+! incidence angle (%)
+      call FCAT_eels_all(4)
+  read(11, *) theta
+! angular apertures of the elliptic detector (%)
+      call FCAT_eels_all(5)
+  read(11, *) phia
+      call FCAT_eels_all(6)
+  read(11, *) phib
+! energy-loss interval and step size (cm**-1)
+      call FCAT_eels_all(7)
+  read(11, *) wmin
+      call FCAT_eels_all(8)
+  read(11, *) wmax
+      call FCAT_eels_all(9)
+  read(11, *) dw
+! comment lines
+      call FCAT_eels_all(10)
+  read(11, '(a72)') (comment(k), k = 1, 2)
+
+      call FCAT_eels_all(11)
+  write(*,*) 'program eels (September 2020)'
+      call FCAT_eels_all(12)
+  write(*,'(a, f6.2, a, f5.1, a, f5.2, a, f5.2, a)') &
+    ' e0 = ', e0, ' eV, theta = ', theta, '°, phia = ', &
+    phia, '°, phib = ', phib, '°'
+      call FCAT_eels_all(13)
+  write(*,'(a, g11.4, a, g11.4, a, g11.4, a)') &
+    ' energy losses from', wmin, ' to', wmax, ', step = ', dw, ' cm**-1'
+      call FCAT_eels_all(14)
+  write(*,*) comment(1)
+      call FCAT_eels_all(15)
+  write(*,*) comment(2)
+
+      call FCAT_eels_all(16)
+  if (phia <= 0.0d0 .or. phib <= 0.0d0) then
+      call FCAT_eels_all(17)
+      call FCAT_eels_all_rep()
+    stop '*** wrong input ***'
+      call FCAT_eels_all(18)
+  endif
+      call FCAT_eels_all(19)
+  if (e0 <= 0.0d0 .or. theta + phia >= 90.0d0) then
+      call FCAT_eels_all(20)
+      call FCAT_eels_all_rep()
+    stop '*** bad input ***'
+      call FCAT_eels_all(21)
+  endif
+
+! *** read target specifications
+
+      call FCAT_eels_all(22)
+  read(11, *) layers, nper, mode
+      call FCAT_eels_all(23)
+  user = layers == 0
+      call FCAT_eels_all(24)
+  if (.not. user) then
+      call FCAT_eels_all(25)
+    neps = layers
+      call FCAT_eels_all(26)
+    if (nper == -1) then
+      call FCAT_eels_all(27)
+      neps = layers + 1
+      call FCAT_eels_all(28)
+      nper = 1
+      call FCAT_eels_all(29)
+      write(*,*) 'the substrate is a anisotropic uniaxial material'
+      call FCAT_eels_all(30)
+    endif
+      call FCAT_eels_all(31)
+    if (layers < 0 .or. nper < 1 .or. nper > layers) then
+      call FCAT_eels_all(32)
+      call FCAT_eels_all_rep()
+      stop '*** invalid target specifications ***'
+      call FCAT_eels_all(33)
+    endif
+      call FCAT_eels_all(34)
+    write(6, 101) layers, nper
+      call FCAT_eels_all(35)
+    jos = 0
+      call FCAT_eels_all(36)
+    allocate (name(neps), thick(neps), epsinf(neps), nos(neps))
+      call FCAT_eels_all(37)
+    do l = 1, neps
+      call FCAT_eels_all(38)
+      if (l <= layers) then
+      call FCAT_eels_all(39)
+        read(11, 102) name(l), thick(l)
+      call FCAT_eels_all(40)
+      endif
+      call FCAT_eels_all(41)
+      read(11, *) epsinf(l), nos(l)
+      call FCAT_eels_all(42)
+      write(6, 103)
+      call FCAT_eels_all(43)
+      if (nos(l) <= 0) then
+      call FCAT_eels_all(44)
+        if (l <= layers) write(6, 104) l, name(l), thick(l), epsinf(l)
+      call FCAT_eels_all(45)
+        if (l  > layers) write(6, 105) epsinf(l)
+      else
+      call FCAT_eels_all(46)
+      call FCAT_eels_all(47)
+        do j = 1, nos(l)
+      call FCAT_eels_all(48)
+          if (.not. allocated(osc)) then
+      call FCAT_eels_all(49)
+            allocate(osc(3, nos(l)))
+          else if (j == 1) then
+ !           call extend3(osc, nos(j))
+      call FCAT_eels_all(50)
+      call FCAT_eels_all(51)
+            old_size_1 = size(osc, 1)
+      call FCAT_eels_all(52)
+            old_size_2 = size(osc, 2)
+      call FCAT_eels_all(53)
+            allocate(tmp_osc(old_size_1, old_size_2 + nos(l)))
+      call FCAT_eels_all(54)
+            tmp_osc(1:old_size_1, 1:old_size_2) = osc
+      call FCAT_eels_all(55)
+            deallocate(osc)
+      call FCAT_eels_all(56)
+            call move_alloc(tmp_osc, osc)
+      call FCAT_eels_all(57)
+          endif
+      call FCAT_eels_all(58)
+          jos = jos + 1
+      call FCAT_eels_all(59)
+          read(11, *) (osc(k, jos), k = 1, 3)
+      call FCAT_eels_all(60)
+          if ((j == nos(l) / 2 + 1) .and. (nos(l) > 1)) then
+      call FCAT_eels_all(61)
+            write(6, 106)
+      call FCAT_eels_all(62)
+            write(6, 107)
+      call FCAT_eels_all(63)
+          endif
+      call FCAT_eels_all(64)
+          if (j == 1) then
+      call FCAT_eels_all(65)
+            if (l <= layers) then
+      call FCAT_eels_all(66)
+              write(6, 104) l, name(l), thick(l), epsinf(l), (osc(i, jos), i = 1, 3)
+            else
+      call FCAT_eels_all(67)
+      call FCAT_eels_all(68)
+              write(6, 105) epsinf(l), (osc(i, jos), i = 1, 3)
+      call FCAT_eels_all(69)
+            endif
+          else
+      call FCAT_eels_all(70)
+      call FCAT_eels_all(71)
+            write(6, 108) (osc(i, jos), i = 1, 3)
+      call FCAT_eels_all(72)
+          endif
+      call FCAT_eels_all(73)
+        enddo
+      call FCAT_eels_all(74)
+      endif
+      call FCAT_eels_all(75)
+    enddo
+      call FCAT_eels_all(76)
+    write(*,*)
+      call FCAT_eels_all(77)
+    read(11, 102, IOSTAT = ioStatus) contrl
+      call FCAT_eels_all(78)
+    if (ioStatus /= 0) then
+      call FCAT_eels_all(79)
+      contrl = ''
+      call FCAT_eels_all(80)
+    endif
+      call FCAT_eels_all(81)
+  endif
+
+      call FCAT_eels_all(82)
+  close (unit = 11)
+
+      call FCAT_eels_all(83)
+  nw = 1 + int((wmax - wmin) / dw)
+      call FCAT_eels_all(84)
+  allocate (wn_array(nw), f(nw))
+
+      call FCAT_eels_all(85)
+  call doeels(e0, theta, phia, phib, wmin, wmax, dw, comment, size(comment),   &
+              layers, neps, nper, name, size(name), thick, epsinf, nos, osc, size(osc, 2),&
+              contrl, mode, wn_array, f, size(wn_array))
+
+      call FCAT_eels_all(86)
+  open (unit = 12, file = 'eelsou')
+      call FCAT_eels_all(87)
+  write (12, 207) e0, theta, phia, phib, comment(1)
+      call FCAT_eels_all(88)
+  do i = 1, nw
+      call FCAT_eels_all(89)
+    write (12, 211) wn_array(i), f(i)
+      call FCAT_eels_all(90)
+  enddo
+      call FCAT_eels_all(91)
+  close (unit = 12)
+
+      call FCAT_eels_all(92)
+      call FCAT_eels_all_rep()
+  stop
+
+      call FCAT_eels_all(93)
+101 format(i3, ' layer(s), nper = ', i2//'   l', 2x, 'material', 7x,  &
+      'thickness', 5x, 'epsinf', 4x, 'wto , wp', 5x, 'q', 7x, 'gam/wto')
+      call FCAT_eels_all(94)
+102 format(a10, d15.5)
+      call FCAT_eels_all(95)
+103 format(1x, 72('-'))
+      call FCAT_eels_all(96)
+104 format(1x, i3, 2x, a10, g15.3, f10.4, f12.4, f10.4, f9.4)
+      call FCAT_eels_all(97)
+105 format(31x, f10.4, f12.4, f10.4, f9.4)
+      call FCAT_eels_all(98)
+106 format(45x, 'wlo , wp', 5x, 'q', 7x, 'gam/wlo')
+      call FCAT_eels_all(99)
+107 format(45x, 28('-'))
+      call FCAT_eels_all(100)
+108 format(41x, f12.4, f10.4, f9.4)
+      call FCAT_eels_all(101)
+207 format('e0 =', f6.2, ' theta =', f5.1, ' phia =', f5.2, ' phib =', f5.2 / a72)
+      call FCAT_eels_all(102)
+211 format(2e15.7)
+      call FCAT_eels_all_rep()
+end program eels
+
+double precision function qrat(x, alpha, beta, c1, c2)
+
+  implicit none
+
+  double precision, intent(in) :: x, alpha, beta, c1, c2
+
+      call FCAT_eels_all(103)
+  qrat = (1.0d0 + x * (beta + c1 * x)) / ((1.0d0 + x * (beta + c2 * x)) * (1.0d0 + alpha * x)**2)
+
+      call FCAT_eels_all(104)
+  return
+      call FCAT_eels_all_rep()
+end function qrat
+
+double precision function usurlo(dq, wn)
+
+! ******************************************************************
+! *                                                                *
+! * user-supplied dielectric surface loss function aimag(g(dq, wn)) *
+! * input arguments :                                              *
+! *    dq : modulus of the two-dimensional surface wave vector     *
+! *         (angstroem**-1)                                        *
+! *    wn : frequency (cm**-1)                                     *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: dq
+  double precision, intent(in) :: wn
+
+      call FCAT_eels_all(105)
+  usurlo = 1.0d0
+      call FCAT_eels_all(106)
+  return
+end function usurlo
+double precision function surlos(dk, eps, thick, layers, nper)
+
+! ******************************************************************
+! *                                                                *
+! * eels surface loss function for an arbitrary multilayered target*
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: dk
+  double complex, intent(in) :: eps(:)
+  double precision, intent(in) :: thick(:)
+  integer, intent(in) :: layers, nper
+
+  integer :: lmax
+  logical :: static, zero, skip
+  integer :: lstart, n
+  double precision, allocatable :: arg(:)
+  double precision :: argmin, argmax, cn, cnm1, epsmac, sn, snm1, tn
+  double complex :: a, b, csi, pnm2, pnm1, pn, pp, qnm2, qnm1, qn, qp, z
+
+  common / mulayr / argmin, argmax, epsmac
+
+  zero(z) = (dble(z) == 0.0d0) .and. (dimag(z) == 0.0d0)
+
+!  write (*,*) 'surlos:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+      call FCAT_eels_all(107)
+  lmax = size(eps)
+      call FCAT_eels_all(108)
+  allocate (arg(lmax))
+      call FCAT_eels_all(109)
+  lstart = layers - nper + 1
+      call FCAT_eels_all(110)
+  static = .true.
+      call FCAT_eels_all(111)
+  skip = .false.
+
+      call FCAT_eels_all(112)
+  do n = 1, layers
+      call FCAT_eels_all(113)
+    arg(n) = dk * thick(n)
+      call FCAT_eels_all(114)
+    if (arg(n) > argmax .or. zero(eps(n))) then
+      call FCAT_eels_all(115)
+      csi  = eps(n)
+      call FCAT_eels_all(116)
+      skip = .true.
+      call FCAT_eels_all(117)
+      exit
+      call FCAT_eels_all(118)
+    endif
+      call FCAT_eels_all(119)
+    static = .not. (n >= lstart .and. arg(n) > argmin)
+      call FCAT_eels_all(120)
+  enddo
+
+      call FCAT_eels_all(121)
+  if (.not. skip) then
+! *** periodic continued fraction, period = nper
+
+      call FCAT_eels_all(122)
+    do ! Do loop is only for the option to skip out of it.
+      call FCAT_eels_all(123)
+      if (nper <= 1) then
+      call FCAT_eels_all(124)
+        csi = eps(layers)
+      else
+      call FCAT_eels_all(125)
+      call FCAT_eels_all(126)
+        if (static) then
+      call FCAT_eels_all(127)
+          pn = 0.0d0
+      call FCAT_eels_all(128)
+          qn = 0.0d0
+      call FCAT_eels_all(129)
+          do n = lstart, layers
+      call FCAT_eels_all(130)
+            pn = pn + thick(n) * eps(n)
+      call FCAT_eels_all(131)
+            qn = qn + thick(n) / eps(n)
+      call FCAT_eels_all(132)
+          enddo
+      call FCAT_eels_all(133)
+          if (zero(qn)) then
+      call FCAT_eels_all(134)
+            n = lstart
+      call FCAT_eels_all(135)
+            if (n <= 1) then
+      call FCAT_eels_all(136)
+              surlos = 0.0d0
+      call FCAT_eels_all(137)
+              return
+      call FCAT_eels_all(138)
+            endif
+      call FCAT_eels_all(139)
+            n = n - 1
+      call FCAT_eels_all(140)
+            csi = eps(n) / dtanh(arg(n))
+      call FCAT_eels_all(141)
+            exit
+      call FCAT_eels_all(142)
+          endif ! zero(qn)
+      call FCAT_eels_all(143)
+          csi = cdsqrt(pn / qn)
+      call FCAT_eels_all(144)
+          if ((dimag(csi) < 0.0d0) .and. (dble(qn) < 0.0d0)) then
+      call FCAT_eels_all(145)
+            csi = -csi
+      call FCAT_eels_all(146)
+          endif
+        else ! static
+      call FCAT_eels_all(147)
+      call FCAT_eels_all(148)
+          cn = dcosh(arg(lstart))
+      call FCAT_eels_all(149)
+          sn = dsinh(arg(lstart))
+      call FCAT_eels_all(150)
+          pnm1 = 1.0d0
+      call FCAT_eels_all(151)
+          pn = cn
+      call FCAT_eels_all(152)
+          pp = eps(lstart) * sn
+      call FCAT_eels_all(153)
+          qnm1 = 0.0d0
+      call FCAT_eels_all(154)
+          qn = sn / eps(lstart)
+      call FCAT_eels_all(155)
+          qp = pn
+      call FCAT_eels_all(156)
+          do  n = lstart + 1, layers
+      call FCAT_eels_all(157)
+            cnm1 = cn
+      call FCAT_eels_all(158)
+            snm1 = sn
+      call FCAT_eels_all(159)
+            cn = dcosh(arg(n))
+      call FCAT_eels_all(160)
+            sn = dsinh(arg(n))
+      call FCAT_eels_all(161)
+            a = eps(n) * sn
+      call FCAT_eels_all(162)
+            pp = cn * pp + a * pn
+      call FCAT_eels_all(163)
+            qp = cn * qp + a * qn
+      call FCAT_eels_all(164)
+            b = (eps(n - 1) / eps(n)) * (sn / snm1)
+      call FCAT_eels_all(165)
+            a = cnm1 * b + cn
+      call FCAT_eels_all(166)
+            pnm2 = pnm1
+      call FCAT_eels_all(167)
+            pnm1 = pn
+      call FCAT_eels_all(168)
+            qnm2 = qnm1
+      call FCAT_eels_all(169)
+            qnm1 = qn
+      call FCAT_eels_all(170)
+            pn = a * pnm1 - b * pnm2
+      call FCAT_eels_all(171)
+            qn = a * qnm1 - b * qnm2
+      call FCAT_eels_all(172)
+          enddo
+      call FCAT_eels_all(173)
+          if (zero(qn)) then
+      call FCAT_eels_all(174)
+            a = qp - pn
+      call FCAT_eels_all(175)
+            if (zero(a)) then
+      call FCAT_eels_all(176)
+              n = lstart
+      call FCAT_eels_all(177)
+              if (n <= 1) then
+      call FCAT_eels_all(178)
+                surlos = 0.0d0
+      call FCAT_eels_all(179)
+                return
+      call FCAT_eels_all(180)
+              endif
+      call FCAT_eels_all(181)
+              n = n - 1
+      call FCAT_eels_all(182)
+              csi = eps(n) / dtanh(arg(n))
+      call FCAT_eels_all(183)
+              exit
+      call FCAT_eels_all(184)
+            endif
+      call FCAT_eels_all(185)
+            csi = pp / a
+          else
+      call FCAT_eels_all(186)
+      call FCAT_eels_all(187)
+            a = 0.5d0 * (pn - qp) / qn
+      call FCAT_eels_all(188)
+            b = cdsqrt(a**2 + pp / qn)
+      call FCAT_eels_all(189)
+            pn = a - pn / qn
+      call FCAT_eels_all(190)
+            if (cdabs(pn + b) > cdabs(pn - b)) then
+      call FCAT_eels_all(191)
+              b = -b
+      call FCAT_eels_all(192)
+            endif
+      call FCAT_eels_all(193)
+            csi = a + b
+      call FCAT_eels_all(194)
+          endif ! zero(qn)
+      call FCAT_eels_all(195)
+        endif ! static
+! *** small-dk limit of the periodic tail
+
+      call FCAT_eels_all(196)
+      endif ! nper <= 1
+
+      call FCAT_eels_all(197)
+      n = lstart
+
+      call FCAT_eels_all(198)
+      exit
+      call FCAT_eels_all(199)
+    enddo
+      call FCAT_eels_all(200)
+  endif ! .not. skip
+
+! *** backward algorithm
+
+      call FCAT_eels_all(201)
+  do
+      call FCAT_eels_all(202)
+    n = n - 1
+      call FCAT_eels_all(203)
+    if (n <= 0) then
+      call FCAT_eels_all(204)
+      a = csi + 1.0d0
+      call FCAT_eels_all(205)
+      if (zero(a)) then
+      call FCAT_eels_all(206)
+        surlos = 2 / epsmac
+      else
+      call FCAT_eels_all(207)
+      call FCAT_eels_all(208)
+        surlos = dimag(-2 / a)
+      call FCAT_eels_all(209)
+      endif
+      call FCAT_eels_all(210)
+      return
+      call FCAT_eels_all(211)
+    endif ! n <= 0
+
+      call FCAT_eels_all(212)
+    if (arg(n) /= 0.0d0) then
+      call FCAT_eels_all(213)
+      tn = dtanh(arg(n))
+      call FCAT_eels_all(214)
+      b = eps(n) + csi * tn
+      call FCAT_eels_all(215)
+      if (zero(b)) then
+      call FCAT_eels_all(216)
+        surlos = 0.0d0
+      call FCAT_eels_all(217)
+        return
+      call FCAT_eels_all(218)
+      endif
+      call FCAT_eels_all(219)
+      csi = eps(n) * (csi + tn * eps(n)) / b
+      call FCAT_eels_all(220)
+    endif
+      call FCAT_eels_all(221)
+  enddo
+end function surlos
+double precision function phint(phi, a, u)
+
+! ******************************************************************
+! *                                                                *
+! * evaluate the integral from zero to phi of                      *
+! *                                                                *
+! *                 u                 2                            *
+! *  ( ----------------------------- )  dphi                       *
+! *                          2     2                               *
+! *    (1 - a * u * cos(phi))  +  u                                *
+! *                                                                *
+! * for 0 <= phi <= pi , u >= 0 and a >= 0                         *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: phi
+  double precision, intent(in) :: a
+  double precision, intent(in) :: u
+
+  double precision :: ai, ar, bi, br, c, cpr, d, e, esr, pi, qr, ri, rm, root
+  double precision :: rp, rr, s, spr, tm, tp, u2, x, zeta, zetai, zetar, zr
+
+      call FCAT_eels_all(222)
+  pi = 3.141592653589793238d0
+      call FCAT_eels_all(223)
+  c = dcos(phi)
+      call FCAT_eels_all(224)
+  s = dsin(phi)
+      call FCAT_eels_all(225)
+  u2 = u**2
+      call FCAT_eels_all(226)
+  e = a*u
+      call FCAT_eels_all(227)
+  if (u < 1.0d0 .and. e < 1.0d-02 * (1.0d0 + u2)) then
+      call FCAT_eels_all(228)
+    zr = 1.0d0 + u2
+      call FCAT_eels_all(229)
+    esr = e / zr
+      call FCAT_eels_all(230)
+    phint = u2 / zr**2 * ((( (4.0d0 / 3.0d0) * (2.0d0 + c**2) * s * (5.0d0 - 3 * u2) *  &
+            esr + (phi + c * s) * (5.0d0 - u2)) * esr + 4 * s) * esr + phi)
+  else
+      call FCAT_eels_all(231)
+      call FCAT_eels_all(232)
+    rm = dsqrt((1.0d0 - e)**2 + u2)
+      call FCAT_eels_all(233)
+    tm = 0.5d0 * datan2(u, 1.0d0 - e)
+      call FCAT_eels_all(234)
+    rp = dsqrt((1.0d0 + e)**2 + u2)
+      call FCAT_eels_all(235)
+    tp = 0.5d0 * datan2(u, 1.0d0 + e)
+      call FCAT_eels_all(236)
+    root = dsqrt(rm * rp)
+      call FCAT_eels_all(237)
+    cpr = dcos(tm + tp)
+      call FCAT_eels_all(238)
+    spr = dsin(tm + tp)
+      call FCAT_eels_all(239)
+    x = 0.0d0       ! ensure initialization
+      call FCAT_eels_all(240)
+    if (c >= 0.0d0) then
+      call FCAT_eels_all(241)
+      x = s / (1.0d0 + c)
+    elseif (dabs(s) > 1.0d-07) then
+      call FCAT_eels_all(242)
+      call FCAT_eels_all(243)
+      x = (1.0d0 - c) / s
+      call FCAT_eels_all(244)
+    endif
+      call FCAT_eels_all(245)
+    if ((c >= 0.0d0) .or. (dabs(s) > 1.0d-07)) then
+      call FCAT_eels_all(246)
+      zeta = dsqrt(rm / rp)
+      call FCAT_eels_all(247)
+      zetar = -zeta * dsin(tm - tp)
+      call FCAT_eels_all(248)
+      zetai =  zeta * dcos(tm - tp)
+      call FCAT_eels_all(249)
+      br = 0.5d0 * dlog(((zetar + x)**2 + zetai**2) / ((zetar - x)**2 + zetai**2))
+      call FCAT_eels_all(250)
+      bi = datan2(zetai, zetar + x) - datan2(zetai, zetar - x)
+      call FCAT_eels_all(251)
+      rr = -(br * spr - bi * cpr) / root
+      call FCAT_eels_all(252)
+      ri = -(bi * spr + br * cpr) / root
+      call FCAT_eels_all(253)
+      d = e * s / ((1.0d0 - e * c)**2 + u2)
+      call FCAT_eels_all(254)
+      ar = d * (1.0d0 - e * c) - rr + u * ri
+      call FCAT_eels_all(255)
+      ai = -d * u - ri - u * rr
+    else
+      call FCAT_eels_all(256)
+      call FCAT_eels_all(257)
+      rr = -pi / root * cpr
+      call FCAT_eels_all(258)
+      ri =  pi / root * spr
+      call FCAT_eels_all(259)
+      ar = -rr + u * ri
+      call FCAT_eels_all(260)
+      ai = -ri - u * rr
+      call FCAT_eels_all(261)
+    endif
+      call FCAT_eels_all(262)
+    qr = (ar * (cpr - spr) * (cpr + spr) + 2 * ai * cpr * spr) / (rm * rp)
+      call FCAT_eels_all(263)
+    phint = 0.5d0 * (ri / u - qr)
+      call FCAT_eels_all(264)
+  endif
+      call FCAT_eels_all(265)
+  return
+end function phint
+double precision function fint1(u, eps, thick, layers, nper, eps_size)
+
+! ******************************************************************
+! *                                                                *
+! * integration over the azimutal angle from 0.0 to pi             *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: u
+  integer, intent(in) :: layers, nper, eps_size
+  double complex, intent(in) :: eps(eps_size)
+  double precision, intent(in) :: thick(eps_size)
+
+  logical :: rational, user
+  double precision :: acoef, bcoef, ccoef, cospsi, den, dif, dlimf, e, elleps
+  double precision :: pi, rom, rop, ru, sinpsi, sum, um, t
+  double precision :: tanpsi, wn, u2
+
+  interface
+    double precision function usurlo(dq, wn)
+      double precision, intent(in) :: dq
+      double precision, intent(in) :: wn
+    end function usurlo
+    double precision function surlos(dk, eps, thick, layers, nper)
+      double precision, intent(in) :: dk
+      double complex, intent(in) :: eps(:)
+      double precision, intent(in) :: thick(:)
+      integer, intent(in) :: layers, nper
+    end function surlos
+  end interface  
+
+  common / param / acoef, bcoef, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+      ru, um, dlimf, wn, user, rational
+
+  data pi / 3.141592653589793238d0 /
+
+!  write (*,*) 'fint1:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+      call FCAT_eels_all(266)
+  if (u == 0.0d0) then
+      call FCAT_eels_all(267)
+    fint1 = 0.0d0
+      call FCAT_eels_all(268)
+    return
+      call FCAT_eels_all(269)
+  endif
+      call FCAT_eels_all(270)
+  e = tanpsi * u
+      call FCAT_eels_all(271)
+  u2 = u**2
+      call FCAT_eels_all(272)
+  rom = (1.0d0 - e)**2 + u2
+      call FCAT_eels_all(273)
+  rop = (1.0d0 + e)**2 + u2
+      call FCAT_eels_all(274)
+  sum = rop + rom
+      call FCAT_eels_all(275)
+  rom = dsqrt(rom)
+      call FCAT_eels_all(276)
+  rop = dsqrt(rop)
+      call FCAT_eels_all(277)
+  dif = rop - rom
+      call FCAT_eels_all(278)
+  den = dsqrt((2.0d0 - dif) * (2.0d0 + dif)) * rop * rom
+      call FCAT_eels_all(279)
+  fint1 = pi * u2 * (4 * sum - dif**2 * (sum - rop * rom)) / den**3
+      call FCAT_eels_all(280)
+  if (rational) then
+      call FCAT_eels_all(281)
+    return
+      call FCAT_eels_all(282)
+  endif
+      call FCAT_eels_all(283)
+  if (user) then
+      call FCAT_eels_all(284)
+    fint1 = fint1 * usurlo(ru * u, wn)
+  else
+      call FCAT_eels_all(285)
+      call FCAT_eels_all(286)
+    fint1 = fint1 * surlos(ru * u, eps, thick, layers, nper)
+      call FCAT_eels_all(287)
+    if (dlimf > 0.0d0) then
+      call FCAT_eels_all(288)
+      t = ru * u * dlimf
+      call FCAT_eels_all(289)
+      fint1 = fint1 * (1.d0 + t * dlog(t / (t + 0.26d0)))**2 / (1.d0 + 1.40d0 * t)
+      call FCAT_eels_all(290)
+    endif
+      call FCAT_eels_all(291)
+  endif
+      call FCAT_eels_all(292)
+  return
+end function fint1
+double precision function fint2(u, eps, thick, layers, nper, eps_size)
+
+! ******************************************************************
+! *                                                                *
+! * integration over the azimutal angle from 0.0 to phi < pi       *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: u
+  integer, intent(in) :: layers, nper, eps_size
+  double complex, intent(in) :: eps(eps_size)
+  double precision, intent(in) :: thick(eps_size)
+
+  logical :: rational, user
+  double precision :: a, arg, b, b2, c, ccoef, cospsi, dlimf, elleps, phi
+  double precision :: phint, ru, sinpsi, um, t, tanpsi, wn, x
+
+  interface
+    double precision function usurlo(dq, wn)
+      double precision, intent(in) :: dq
+      double precision, intent(in) :: wn
+    end function usurlo
+    double precision function surlos(dk, eps, thick, layers, nper)
+      double precision, intent(in) :: dk
+      double complex, intent(in) :: eps(:)
+      double precision, intent(in) :: thick(:)
+      integer, intent(in) :: layers, nper
+    end function surlos
+  end interface  
+
+  common / param / a, b, ccoef, elleps, cospsi, sinpsi, tanpsi, &
+      ru, um, dlimf, wn, user, rational
+
+!  write (*,*) 'fint2:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+      call FCAT_eels_all(293)
+  if (u == 0.0d0) then
+      call FCAT_eels_all(294)
+    fint2 = 0.0d0
+      call FCAT_eels_all(295)
+    return
+      call FCAT_eels_all(296)
+  endif
+      call FCAT_eels_all(297)
+  b2 = b**2
+      call FCAT_eels_all(298)
+  c = (1.0d0 - elleps) * (cospsi * u)**2 + (b - ccoef) * (b + ccoef)
+      call FCAT_eels_all(299)
+  if (dabs(a * c) > 1.0d-03 * b2) then
+      call FCAT_eels_all(300)
+    x = (b - dsqrt(b2 - a * c)) / a
+  else
+      call FCAT_eels_all(301)
+      call FCAT_eels_all(302)
+    x = a * c / b2
+      call FCAT_eels_all(303)
+    x = 0.5d0 * c * (1.d0 + 0.25d0 * x * (1.d0 + 0.5d0 * x * (1.d0 + 0.625d0 * x))) / b
+      call FCAT_eels_all(304)
+  endif
+      call FCAT_eels_all(305)
+  arg = x / u
+      call FCAT_eels_all(306)
+  if (dabs(arg) > 1.0d0) then
+      call FCAT_eels_all(307)
+    arg = dsign(1.0d0, arg)
+      call FCAT_eels_all(308)
+  endif
+      call FCAT_eels_all(309)
+  phi = dacos(arg)
+      call FCAT_eels_all(310)
+  fint2 = phint(phi, tanpsi, u)
+      call FCAT_eels_all(311)
+  if (rational) then
+      call FCAT_eels_all(312)
+    return
+      call FCAT_eels_all(313)
+  endif
+      call FCAT_eels_all(314)
+  if (user) then
+      call FCAT_eels_all(315)
+    fint2 = fint2 * usurlo(ru * u, wn)
+  else
+      call FCAT_eels_all(316)
+      call FCAT_eels_all(317)
+    fint2 = fint2 * surlos(ru * u, eps, thick, layers, nper)
+      call FCAT_eels_all(318)
+    if (dlimf > 0.0d0) then
+      call FCAT_eels_all(319)
+      t = ru * u * dlimf
+      call FCAT_eels_all(320)
+      fint2 = fint2 * (1.d0 + t * dlog(t / (t + 0.26d0)))**2 / (1.d0 + 1.40d0 * t)
+      call FCAT_eels_all(321)
+    endif
+      call FCAT_eels_all(322)
+  endif
+      call FCAT_eels_all(323)
+  return
+end function fint2
+double precision function fint3(u, eps, thick, layers, nper, eps_size)
+
+! ******************************************************************
+! *                                                                *
+! * integration over the azimutal angle from phi1 > 0 to phi2 < pi *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: u
+  integer, intent(in) :: layers, nper, eps_size
+  double complex, intent(in) :: eps(eps_size)
+  double precision, intent(in) :: thick(eps_size)
+
+  logical :: rational, user
+  double precision :: a, arg, b, ccoef, cospsi, dlimf, elleps, phi1, phi2
+  double precision :: phint, sinpsi, rac, ru, um, t, tanpsi, wn
+
+  interface
+    double precision function usurlo(dq, wn)
+      double precision, intent(in) :: dq
+      double precision, intent(in) :: wn
+    end function usurlo
+    double precision function surlos(dk, eps, thick, layers, nper)
+      double precision, intent(in) :: dk
+      double complex, intent(in) :: eps(:)
+      double precision, intent(in) :: thick(:)
+      integer, intent(in) :: layers, nper
+    end function surlos
+  end interface  
+  
+  common / param / a, b, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+      ru, um, dlimf, wn, user, rational
+
+!  write (*,*) 'fint3:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+      call FCAT_eels_all(324)
+  if (u == 0.0d0) then
+      call FCAT_eels_all(325)
+    fint3 = 0.0d0
+      call FCAT_eels_all(326)
+    return
+      call FCAT_eels_all(327)
+  endif
+      call FCAT_eels_all(328)
+  rac = dsign(1.0d0, a) * cospsi * dsqrt((1.0d0 - elleps) * a * (um - u) * (um + u))
+      call FCAT_eels_all(329)
+  arg = (b - rac) / (u * a)
+      call FCAT_eels_all(330)
+  if (dabs(arg) > 1.0d0) arg = dsign(1.0d0, arg)
+      call FCAT_eels_all(331)
+  phi2 = dacos(arg)
+      call FCAT_eels_all(332)
+  fint3 = phint(phi2, tanpsi, u)
+      call FCAT_eels_all(333)
+  arg = (b + rac) / (u * a)
+      call FCAT_eels_all(334)
+  if (dabs(arg) > 1.0d0) arg = dsign(1.0d0, arg)
+      call FCAT_eels_all(335)
+  phi1 = dacos(arg)
+      call FCAT_eels_all(336)
+  fint3 = fint3 - phint(phi1, tanpsi, u)
+      call FCAT_eels_all(337)
+  if (rational) return
+      call FCAT_eels_all(338)
+  if (user) then
+      call FCAT_eels_all(339)
+    fint3 = fint3 * usurlo(ru * u, wn)
+  else
+      call FCAT_eels_all(340)
+      call FCAT_eels_all(341)
+    fint3 = fint3 * surlos(ru * u, eps, thick, layers, nper)
+      call FCAT_eels_all(342)
+    if (dlimf > 0.0d0) then
+      call FCAT_eels_all(343)
+      t = ru * u * dlimf
+      call FCAT_eels_all(344)
+      fint3 = fint3 * (1.d0 + t * dlog(t / (t + 0.26d0)))**2 / (1.d0 + 1.40d0 * t)
+      call FCAT_eels_all(345)
+    endif
+      call FCAT_eels_all(346)
+  endif
+      call FCAT_eels_all(347)
+  return
+end function fint3
+double precision function fun(phi)
+
+! ******************************************************************
+! *                                                                *
+! * integrand of the expression of the 1st order term in the       *
+! * expansion of the eels integral for a homogeneous target.       *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: phi
+
+  logical :: user, rational
+  double precision :: acoef, bcoef, ccoef, cospsi, dlimf, elleps, ru
+  double precision :: sinphi, sinpsi, tanpsi, um, wn
+
+  common / param / acoef, bcoef, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+                   ru, um, dlimf, wn, user, rational
+
+      call FCAT_eels_all(348)
+  sinphi = dsin(phi)
+      call FCAT_eels_all(349)
+  fun = dsqrt((1.0d0 - elleps + elleps * sinphi**2) *   &
+              (1.0d0 - sinpsi * sinphi) *               &
+              (1.0d0 + sinpsi * sinphi))
+      call FCAT_eels_all(350)
+  return
+end function fun
+subroutine quanc8(fun, a, b, abserr, relerr, result, errest, nofun, flag, eps, thick, layers, nper)
+
+! estimate the integral of fun(x) from a to b
+! to a user provided tolerance.
+! an automatic adaptive routine based on
+! the 8-panel newton-cotes rule (g. forsythe et al, 1977, p. 92)
+!
+! input ..
+!
+! fun     the name of the integrand function subprogram fun(x).
+! a       the lower limit of integration.
+! b       the upper limit of integration.(b may be less than a.)
+! relerr  a relative error tolerance. (should be non-negative)
+! abserr  an absolute error tolerance. (should be non-negative)
+!
+! output ..
+!
+! result  an approximation to the integral hopefully satisfying the
+!         least stringent of the two error tolerances.
+! errest  an estimate of the magnitude of the actual error.
+! nofun   the number of function values used in calculation of result.
+! flag    a reliability indicator.  if flag is zero, then result
+!         probably satisfies the error tolerance.  if flag is
+!         xxx.yyy , then  xxx = the number of intervals which have
+!         not converged and 0.yyy = the fraction of the interval
+!         left to do when the limit on  nofun  was approached.
+
+  implicit none
+
+  double precision :: fun
+  double precision, intent(in) :: a
+  double precision, intent(in) :: b
+  double precision, intent(in out) :: abserr
+  double precision, intent(in) :: relerr
+  double precision, intent(out) :: result
+  double precision, intent(out) :: errest
+  integer, intent(out) :: nofun
+  double precision, intent(out) :: flag
+
+  external fun
+
+  double precision, intent(in) :: thick(:)
+  double complex, intent(in) :: eps(:)
+  integer, intent(in) :: layers, nper
+
+  double precision :: w0, w1, w2, w3, w4, area, x0, f0, stone, step, cor11, temp
+  double precision :: qprev, qnow, qdiff, qleft, esterr, tolerr
+  double precision :: qright(31), f(16), x(16), fsave(8, 30), xsave(8, 30)
+  double precision :: dabs, dmax1
+
+  integer :: levmin, levmax, levout, nomax, nofin, lev, nim, i, j
+
+! ***   stage 1 ***   general initialization
+! set constants.
+
+!  write (*,*) 'quanc8:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+      call FCAT_eels_all(351)
+  levmin = 1
+      call FCAT_eels_all(352)
+  levmax = 30
+      call FCAT_eels_all(353)
+  levout = 6
+      call FCAT_eels_all(354)
+  nomax = 5000
+      call FCAT_eels_all(355)
+  nofin = nomax - 8 * (levmax - levout + 2**(levout + 1))
+
+! trouble when nofun reaches nofin
+
+      call FCAT_eels_all(356)
+  w0 =   3956.0d0 / 14175.0d0
+      call FCAT_eels_all(357)
+  w1 =  23552.0d0 / 14175.0d0
+      call FCAT_eels_all(358)
+  w2 =  -3712.0d0 / 14175.0d0
+      call FCAT_eels_all(359)
+  w3 =  41984.0d0 / 14175.0d0
+      call FCAT_eels_all(360)
+  w4 = -18160.0d0 / 14175.0d0
+
+! initialize running sums to zero.
+
+      call FCAT_eels_all(361)
+  flag   = 0.0d0
+      call FCAT_eels_all(362)
+  result = 0.0d0
+      call FCAT_eels_all(363)
+  cor11  = 0.0d0
+      call FCAT_eels_all(364)
+  errest = 0.0d0
+      call FCAT_eels_all(365)
+  area   = 0.0d0
+      call FCAT_eels_all(366)
+  nofun = 0
+      call FCAT_eels_all(367)
+  if (a == b) return
+
+! ***   stage 2 ***   initialization for first interval
+
+      call FCAT_eels_all(368)
+  lev = 0
+      call FCAT_eels_all(369)
+  nim = 1
+      call FCAT_eels_all(370)
+  x0 = a
+      call FCAT_eels_all(371)
+  x(16) = b
+      call FCAT_eels_all(372)
+  qprev  = 0.0d0
+      call FCAT_eels_all(373)
+  f0 = fun(x0, eps, thick, layers, nper, size(eps))
+      call FCAT_eels_all(374)
+  stone = (b - a) / 16
+      call FCAT_eels_all(375)
+  x(8)  =  (x0    + x(16)) / 2
+      call FCAT_eels_all(376)
+  x(4)  =  (x0    + x(8))  / 2
+      call FCAT_eels_all(377)
+  x(12) =  (x(8)  + x(16)) / 2
+      call FCAT_eels_all(378)
+  x(2)  =  (x0    + x(4))  / 2
+      call FCAT_eels_all(379)
+  x(6)  =  (x(4)  + x(8))  / 2
+      call FCAT_eels_all(380)
+  x(10) =  (x(8)  + x(12)) / 2
+      call FCAT_eels_all(381)
+  x(14) =  (x(12) + x(16)) / 2
+      call FCAT_eels_all(382)
+  do j = 2, 16, 2
+      call FCAT_eels_all(383)
+    f(j) = fun(x(j), eps, thick, layers, nper, size(eps))
+      call FCAT_eels_all(384)
+  enddo
+      call FCAT_eels_all(385)
+  nofun = 9
+
+      call FCAT_eels_all(386)
+  do
+
+! ***   stage 3 ***   central calculation
+! requires qprev, x0, x2, x4, ..., x16, f0, f2, f4, ..., f16.
+! calculates x1, x3, ...x15, f1, f3, ...f15, qleft, qright, qnow, qdiff, area.
+
+      call FCAT_eels_all(387)
+    x(1) = (x0 + x(2)) / 2
+      call FCAT_eels_all(388)
+    f(1) = fun(x(1), eps, thick, layers, nper, size(eps))
+      call FCAT_eels_all(389)
+    do j = 3, 15, 2
+      call FCAT_eels_all(390)
+      x(j) = (x(j - 1) + x(j + 1)) / 2
+      call FCAT_eels_all(391)
+      f(j) = fun(x(j), eps, thick, layers, nper, size(eps))
+      call FCAT_eels_all(392)
+    enddo
+      call FCAT_eels_all(393)
+    nofun = nofun + 8
+      call FCAT_eels_all(394)
+    step = (x(16) - x0) / 16.0d0
+      call FCAT_eels_all(395)
+    qleft  =  (w0 * (f0 + f(8))  + w1 * (f(1) + f(7)) + w2 * (f(2) + f(6))  &
+        + w3 * (f(3) + f(5))  +  w4 * f(4)) * step
+      call FCAT_eels_all(396)
+    qright(lev + 1) = (w0 * (f(8) + f(16)) + w1 * (f(9) + f(15)) + w2 * (f(10) + f(14))  &
+        + w3 * (f(11) + f(13)) + w4 * f(12)) * step
+      call FCAT_eels_all(397)
+    qnow = qleft + qright(lev + 1)
+      call FCAT_eels_all(398)
+    qdiff = qnow - qprev
+      call FCAT_eels_all(399)
+    area = area + qdiff
+
+! ***   stage 4 *** interval convergence test
+
+      call FCAT_eels_all(400)
+    esterr = dabs(qdiff) / 1023
+      call FCAT_eels_all(401)
+    tolerr = dmax1(abserr, relerr * dabs(area)) * (step / stone)
+
+      call FCAT_eels_all(402)
+    if (lev >= levmin) then
+      call FCAT_eels_all(403)
+      if (lev >= levmax) then
+! current level is levmax.
+      call FCAT_eels_all(404)
+        flag = flag + 1.0d0
+      else
+      call FCAT_eels_all(405)
+      call FCAT_eels_all(406)
+        if (nofun > nofin) then
+! ***   stage 6   ***   trouble section
+! number of function values is about to exceed limit.
+      call FCAT_eels_all(407)
+          nofin = 2 * nofin
+      call FCAT_eels_all(408)
+          levmax = levout
+      call FCAT_eels_all(409)
+          flag = flag + (b - x0) / (b - a)
+        else
+      call FCAT_eels_all(410)
+      call FCAT_eels_all(411)
+          if (esterr > tolerr) then
+! ***   stage 5   ***   no convergence
+! locate next interval.
+      call FCAT_eels_all(412)
+            nim = 2 * nim
+      call FCAT_eels_all(413)
+            lev = lev + 1
+! store right hand elements for future use.
+      call FCAT_eels_all(414)
+            do i = 1, 8
+      call FCAT_eels_all(415)
+              fsave(i, lev) = f(i + 8)
+      call FCAT_eels_all(416)
+              xsave(i, lev) = x(i + 8)
+      call FCAT_eels_all(417)
+            enddo
+! assemble left hand elements for immediate use.
+      call FCAT_eels_all(418)
+            qprev = qleft
+      call FCAT_eels_all(419)
+            do i = 1, 8
+      call FCAT_eels_all(420)
+              f(18 - 2 * i) = f(9 - i)
+      call FCAT_eels_all(421)
+              x(18 - 2 * i) = x(9 - i)
+      call FCAT_eels_all(422)
+            enddo
+      call FCAT_eels_all(423)
+            cycle
+      call FCAT_eels_all(424)
+          endif
+      call FCAT_eels_all(425)
+        endif
+      call FCAT_eels_all(426)
+      endif
+
+! ***   stage 7   ***   interval converged
+! add contributions into running sums.
+      call FCAT_eels_all(427)
+      result = result + qnow
+      call FCAT_eels_all(428)
+      errest = errest + esterr
+      call FCAT_eels_all(429)
+      cor11  = cor11  + qdiff / 1023
+! locate next interval.
+      call FCAT_eels_all(430)
+      do while (nim /= 2 * (nim / 2))
+      call FCAT_eels_all(431)
+        nim = nim / 2
+      call FCAT_eels_all(432)
+        lev = lev - 1
+      call FCAT_eels_all(433)
+      enddo
+      call FCAT_eels_all(434)
+      nim = nim + 1
+
+      call FCAT_eels_all(435)
+      if (lev <= 0) exit
+
+! assemble elements required for the next interval.
+      call FCAT_eels_all(436)
+      qprev = qright(lev)
+      call FCAT_eels_all(437)
+      x0 = x(16)
+      call FCAT_eels_all(438)
+      f0 = f(16)
+      call FCAT_eels_all(439)
+      do i = 1, 8
+      call FCAT_eels_all(440)
+        f(2*i) = fsave(i, lev)
+      call FCAT_eels_all(441)
+        x(2*i) = xsave(i, lev)
+      call FCAT_eels_all(442)
+      enddo
+      call FCAT_eels_all(443)
+      cycle
+    else
+! ***   stage 5   ***   no convergence
+! locate next interval.
+      call FCAT_eels_all(444)
+      call FCAT_eels_all(445)
+      nim = 2 * nim
+      call FCAT_eels_all(446)
+      lev = lev + 1
+! store right hand elements for future use.
+      call FCAT_eels_all(447)
+      do i = 1, 8
+      call FCAT_eels_all(448)
+        fsave(i, lev) = f(i + 8)
+      call FCAT_eels_all(449)
+        xsave(i, lev) = x(i + 8)
+      call FCAT_eels_all(450)
+      enddo
+! assemble left hand elements for immediate use.
+      call FCAT_eels_all(451)
+      qprev = qleft
+      call FCAT_eels_all(452)
+      do i = 1, 8
+      call FCAT_eels_all(453)
+        f(18 - 2 * i) = f(9 - i)
+      call FCAT_eels_all(454)
+        x(18 - 2 * i) = x(9 - i)
+      call FCAT_eels_all(455)
+      enddo
+      call FCAT_eels_all(456)
+    endif
+
+      call FCAT_eels_all(457)
+   enddo
+
+ ! ***   stage 8   ***   finalize and return
+      call FCAT_eels_all(458)
+  result = result + cor11
+
+! make sure errest not less than roundoff level.
+      call FCAT_eels_all(459)
+  if (errest /= 0.0d0) then
+      call FCAT_eels_all(460)
+    temp = dabs(result) + errest
+      call FCAT_eels_all(461)
+    do while (temp == dabs(result))
+      call FCAT_eels_all(462)
+      errest = 2 * errest
+      call FCAT_eels_all(463)
+      temp = dabs(result) + errest
+      call FCAT_eels_all(464)
+    enddo
+      call FCAT_eels_all(465)
+  endif
+      call FCAT_eels_all(466)
+  return
+end subroutine quanc8
+subroutine queels(x, f, aerr, rerr, facru, eps, thick, layers, nper)
+
+! ******************************************************************
+! *                                                                *
+! * perform q-space integration for computing the eels spectrum of *
+! * a isotropic target using polar coordinates.                    *
+! *                                                                *
+! * x is the dimensionless energy loss hbar*omega/(2*e0*phia)      *
+! * aerr and rerr are the desired absolute and relative accuracies *
+! * facru*x is the units of wavevectors omega/v_perpendicular      *
+! * f is the q-integral multiplied by (2/pi)**2                    *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: x
+  double precision, intent(out) :: f
+  double precision, intent(in out) :: aerr
+  double precision, intent(in out) :: rerr
+  double precision, intent(in) :: facru
+  double complex, intent(in) :: eps(:)
+  double precision, intent(in) :: thick(:)
+  integer, intent(in) :: layers, nper
+
+  logical :: rational, user
+  double precision :: acoef, bcoef, ccoef, cospsi, dlimf, elleps
+  double precision :: error, flag, ru, sinpsi
+  double precision :: u1, u2, um, ut, tanpsi, wn, y
+  integer :: ie, nofu
+  dimension error(3), flag(3)
+
+  interface
+    double precision function fint1(u, eps, thick, layers, nper, eps_size)
+      double precision, intent(in) :: u
+      integer, intent(in) :: layers, nper, eps_size
+      double complex, intent(in) :: eps(eps_size)
+      double precision, intent(in) :: thick(eps_size)
+    end function fint1
+    double precision function fint2(u, eps, thick, layers, nper, eps_size)
+      double precision, intent(in) :: u
+      integer, intent(in) :: layers, nper, eps_size
+      double complex, intent(in) :: eps(eps_size)
+      double precision, intent(in) :: thick(eps_size)
+    end function fint2
+    double precision function fint3(u, eps, thick, layers, nper, eps_size)
+      double precision, intent(in) :: u
+      integer, intent(in) :: layers, nper, eps_size
+      double complex, intent(in) :: eps(eps_size)
+      double precision, intent(in) :: thick(eps_size)
+    end function fint3
+    subroutine quanc8(fun, a, b, abserr, relerr, result, errest, nofun, flag, eps, thick, layers, nper)
+      double precision :: fun
+      double precision, intent(in) :: a
+      double precision, intent(in) :: b
+      double precision, intent(in out) :: abserr
+      double precision, intent(in) :: relerr
+      double precision, intent(out) :: result
+      double precision, intent(out) :: errest
+      integer, intent(out) :: nofun
+      double precision, intent(out) :: flag
+
+      external fun
+
+      double precision, intent(in) :: thick(:)
+      double complex, intent(in) :: eps(:)
+      integer, intent(in) :: layers, nper
+    end subroutine quanc8  
+  end interface  
+
+  common / param / acoef, bcoef, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+      ru, um, dlimf, wn, user, rational
+
+!  write (*,*) 'queels:'
+!  write (*,*) 'eps: ', size(eps)
+!  write (*,*) 'thick: ', size(thick)
+
+      call FCAT_eels_all(467)
+  f = 0.0d0
+      call FCAT_eels_all(468)
+  if (x <= 0.0d0) then
+      call FCAT_eels_all(469)
+    return
+      call FCAT_eels_all(470)
+  endif
+      call FCAT_eels_all(471)
+  ru = facru * x
+      call FCAT_eels_all(472)
+  ccoef = cospsi**2 / x
+      call FCAT_eels_all(473)
+  ut = ccoef - bcoef
+      call FCAT_eels_all(474)
+  u1 = dabs(ut)
+      call FCAT_eels_all(475)
+  u2 = ccoef + bcoef
+      call FCAT_eels_all(476)
+  if (ut > 0.0d0) then
+      call FCAT_eels_all(477)
+    call quanc8(fint1, 0.0d0, u1, aerr, rerr, y, error(1), nofu, flag(1), eps, thick, layers, nper)
+      call FCAT_eels_all(478)
+    f = y
+  else
+      call FCAT_eels_all(479)
+      call FCAT_eels_all(480)
+    flag(1) = 0.0d0
+      call FCAT_eels_all(481)
+  endif
+      call FCAT_eels_all(482)
+  if (u2 > u1) then
+      call FCAT_eels_all(483)
+    call quanc8(fint2, u1, u2, aerr, rerr, y, error(2), nofu, flag(2), eps, thick, layers, nper)
+      call FCAT_eels_all(484)
+    f = f + y
+  else
+      call FCAT_eels_all(485)
+      call FCAT_eels_all(486)
+    flag(2) = 0.0d0
+      call FCAT_eels_all(487)
+  endif
+      call FCAT_eels_all(488)
+  if (dabs(acoef) > x * (1.0d0 - elleps) * bcoef) then
+      call FCAT_eels_all(489)
+    um = dsqrt(ccoef / x / (1.0d0 - elleps) + bcoef**2 / acoef)
+      call FCAT_eels_all(490)
+    if (um > u2) then
+      call FCAT_eels_all(491)
+      call quanc8(fint3, u2, um, aerr, rerr, y, error(3), nofu, flag(3), eps, thick, layers, nper)
+      call FCAT_eels_all(492)
+      f = f + y
+      call FCAT_eels_all(493)
+    endif
+      call FCAT_eels_all(494)
+    if (um < u1) then
+      call FCAT_eels_all(495)
+      call quanc8(fint3, um, u1, aerr, rerr, y, error(3), nofu, flag(3), eps, thick, layers, nper)
+      call FCAT_eels_all(496)
+      f = f - y
+      call FCAT_eels_all(497)
+    endif
+  else
+      call FCAT_eels_all(498)
+      call FCAT_eels_all(499)
+    flag(3) = 0.0d0
+      call FCAT_eels_all(500)
+  endif
+      call FCAT_eels_all(501)
+  do ie = 1, 3
+      call FCAT_eels_all(502)
+    if (flag(ie) == 0.0d0) cycle
+      call FCAT_eels_all(503)
+    write(*,*) ' +++ flag(', ie, ') =', flag(ie), ', error =', error(ie), ' +++'
+      call FCAT_eels_all(504)
+    if (flag(ie) - aint(flag(ie)) > 0.5d-02) then
+      call FCAT_eels_all(505)
+      call FCAT_eels_all_rep()
+      stop '*** execution aborted ***'
+      call FCAT_eels_all(506)
+    endif
+      call FCAT_eels_all(507)
+  enddo
+      call FCAT_eels_all(508)
+  f = (2 / 3.141592653589793238d0)**2 * f
+      call FCAT_eels_all(509)
+  return
+end subroutine queels
+subroutine seteps(neps, nos, osc, epsinf, wn, name, eps, layers, mode)
+
+! ******************************************************************
+! *                                                                *
+! * set up long-wavelength dielectric functions of the layers for  *
+! * the present frequency wn (in cm**-1)                           *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+  integer, intent(in) :: neps
+  integer, intent(in) :: nos(:)
+  double precision, intent(in) :: osc(:, :)
+  double precision, intent(in) :: epsinf(:)
+  double precision, intent(in) :: wn
+  character (len=10), intent(in) :: name(:)
+  character (len=10), intent(in) :: mode
+
+  double complex, intent(in out) :: eps(:)
+  integer, intent(in) :: layers
+
+  double precision :: argmin, argmax, epsmac, x
+  double complex :: deno, nomi
+  integer :: j, k, l, m
+
+  common / mulayr / argmin, argmax, epsmac
+
+!  write (*,*) 'seteps:'
+!  write (*,*) 'nos: ', size(nos)
+!  write (*,*) 'osc: ', size(osc)
+!  write (*,*) 'epsinf: ', size(epsinf)
+!  write (*,*) 'name: ', size(name)
+!  write (*,*) 'eps: ', size(eps)
+!  write (*,*) 'thick: ', size(thick)
+
+      call FCAT_eels_all(510)
+  j = 0
+      call FCAT_eels_all(511)
+  do l = 1, neps
+      call FCAT_eels_all(512)
+    m = nos(l)/2
+      call FCAT_eels_all(513)
+    nomi = dcmplx(1.0d0, 0.0d0)
+      call FCAT_eels_all(514)
+    deno = dcmplx(1.0d0, 0.0d0)
+      call FCAT_eels_all(515)
+    if (mode == 'kurosawa') then
+      call FCAT_eels_all(516)
+      do k = 1, m
+      call FCAT_eels_all(517)
+        j = j + 1
+! since osc(1,*) and wn are real, the following should be equivalent
+! Check required.
+! Furthermore the first term can be rewritten as
+! (osc(1, j + m) - wn) * (osc(1, j + m) + wn)
+!        nomi = nomi * cmplx(osc(1, j + m)**2 - wn**2, - wn * osc(3, j + m))
+      call FCAT_eels_all(518)
+        nomi = nomi * (osc(1, j + m)**2 - wn**2 - dcmplx(0.0d0, wn * osc(3, j + m)))
+      call FCAT_eels_all(519)
+        deno = deno * (osc(1, j    )**2 - wn**2 - dcmplx(0.0d0, wn * osc(3, j    )))
+      call FCAT_eels_all(520)
+      enddo
+      call FCAT_eels_all(521)
+      eps(l) = epsinf(l) * nomi / deno
+    elseif (name(l) == 'metal') then
+      call FCAT_eels_all(522)
+      call FCAT_eels_all(523)
+      j = j + 1
+! suggestion for replacement
+!      eps(l) = -osc(1, j)**2 / cmplx(wn**2, wn * osc(3, j))
+      call FCAT_eels_all(524)
+      eps(l) = -osc(1, j)**2 / ( wn**2 + dcmplx(0.0d0, wn * osc(3, j)) )
+    else
+      call FCAT_eels_all(525)
+      call FCAT_eels_all(526)
+      eps(l) = epsinf(l)
+! The original version had this additional loop. It seems, it has been removed
+! because all cases of nos(l) > 1 are treated in case 1 above
+      call FCAT_eels_all(527)
+      do k = 1, nos(l)
+      call FCAT_eels_all(528)
+      j = j + 1
+      call FCAT_eels_all(529)
+      x = wn / osc(1, j)
+      call FCAT_eels_all(530)
+      deno = x * dcmplx(x, osc(3, j))
+      call FCAT_eels_all(531)
+      if (osc(2, j) >= 0.0d0) then
+      call FCAT_eels_all(532)
+        deno = 1.0d0 - deno
+      call FCAT_eels_all(533)
+      endif
+      call FCAT_eels_all(534)
+      if (cdabs(deno) == 0.0d0) then
+      call FCAT_eels_all(535)
+        deno = epsmac
+      call FCAT_eels_all(536)
+      endif
+      call FCAT_eels_all(537)
+      eps(l) = eps(l) + osc(2, j) / deno
+      call FCAT_eels_all(538)
+      enddo
+      call FCAT_eels_all(539)
+    endif
+      call FCAT_eels_all(540)
+  enddo
+      call FCAT_eels_all(541)
+  if (neps == layers + 1) then
+! the substrate is a anisotropic uniaxial material
+      call FCAT_eels_all(542)
+    eps(layers) = cdsqrt(eps(layers) * eps(layers + 1))
+      call FCAT_eels_all(543)
+    if (dimag(eps(layers)) < 0.0d0) then
+      call FCAT_eels_all(544)
+      eps(layers) = -eps(layers)
+      call FCAT_eels_all(545)
+    endif
+      call FCAT_eels_all(546)
+  endif
+      call FCAT_eels_all(547)
+  return
+end subroutine seteps
+subroutine doeels (e0, theta, phia, phib, wmin, wmax, dw, comment, comment_size,   &
+              layers, neps, nper, name, name_size, thick, epsinf, nos, osc, osc_size,&
+              contrl, mode, wn_array, f_array, wn_array_size)
+
+! ******************************************************************
+! *                                                                *
+! * compute the classical eels spectrum of an arbitrary plane-     *
+! * statified medium made from isotropic materials in specular     *
+! * geometry using the dielectric theory of eels.                  *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  integer, parameter :: nt = 5
+
+  double precision, intent(in) :: e0, theta, phia, phib, wmin, wmax, dw
+  character (len = 72) :: comment(comment_size)
+  character (len = 10) :: name(name_size)
+  double precision, intent(in) :: thick(name_size), epsinf(name_size), osc(3, osc_size)
+  character (len = 10) :: contrl, mode
+  integer, intent(in) :: comment_size, name_size, osc_size, wn_array_size
+  integer, intent(in out) :: layers, nper, nos(name_size)
+  double precision, intent(in out) :: wn_array(wn_array_size), f_array(wn_array_size)
+
+  logical :: rational, user, debug
+  integer :: i, iw, neps, nofu, nout, nw, lmax
+  double precision :: a, acoef, aerr, alpha, argmin, argmax, b, bcoef, beta,  &
+      c1, c2, ccoef, cospsi, dlimf, dx, elleps, ener, epsmac, facru, f, f0,   &
+      f1, fpic, fun, pi, prefac, psia, psii, qrat, rerr, ru, sinpsi, t,       &
+      tanpsi, table, um, widt, wn, wpic, x, xmin, xmax, z, z1, z2
+  double complex, allocatable :: eps(:)
+  dimension table(nt)
+
+  external fun, qrat
+
+  interface
+    subroutine queels(x, f, aerr, rerr, facru, eps, thick, layers, nper)
+      double precision, intent(in) :: x
+      double precision, intent(out) :: f
+      double precision, intent(in out) :: aerr
+      double precision, intent(in out) :: rerr
+      double precision, intent(in) :: facru
+      double complex, intent(in) :: eps(:)
+      double precision, intent(in) :: thick(:)
+      integer, intent(in) :: layers, nper
+    end subroutine queels
+    subroutine seteps(neps, nos, osc, epsinf, wn, name, eps, layers, mode)
+      integer, intent(in) :: neps
+      integer, intent(in) :: nos(:)
+      double precision, intent(in) :: osc(:, :)
+      double precision, intent(in) :: epsinf(:)
+      double precision, intent(in) :: wn
+      character (len=10), intent(in) :: name(:)
+      character (len=10), intent(in) :: mode
+      double complex, intent(in out) :: eps(:)
+      integer, intent(in) :: layers
+    end subroutine seteps
+    subroutine quanc8(fun, a, b, abserr, relerr, result, errest, nofun, flag, eps, thick, layers, nper)
+      double precision :: fun
+      double precision, intent(in) :: a
+      double precision, intent(in) :: b
+      double precision, intent(in out) :: abserr
+      double precision, intent(in) :: relerr
+      double precision, intent(out) :: result
+      double precision, intent(out) :: errest
+      integer, intent(out) :: nofun
+      double precision, intent(out) :: flag
+
+      external fun
+
+      double precision, intent(in) :: thick(:)
+      double complex, intent(in) :: eps(:)
+      integer, intent(in) :: layers, nper
+    end subroutine quanc8  
+  end interface
+
+  common / param / acoef, bcoef, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+                   ru, um, dlimf, wn, user, rational
+  common / mulayr / argmin, argmax, epsmac
+
+  data aerr / 0.0d0 /, rerr / 1.0d-06 /, f / 0.0d0 /, f1 / 0.0d0 /
+
+      call FCAT_eels_all(548)
+  debug = .false.
+      call FCAT_eels_all(549)
+  if (debug) then
+      call FCAT_eels_all(550)
+    write (*,*) 'doeels:'
+      call FCAT_eels_all(551)
+    write (*,*) 'comment: ',  size(comment)
+      call FCAT_eels_all(552)
+    write (*,*) 'name: ',     size(name)
+      call FCAT_eels_all(553)
+    write (*,*) 'thick: ',    size(thick)
+      call FCAT_eels_all(554)
+    write (*,*) 'epsinf: ',   size(epsinf)
+      call FCAT_eels_all(555)
+    write (*,*) 'osc: ',      size(osc), size(osc, 1), size(osc, 2)
+      call FCAT_eels_all(556)
+    write (*,*) 'nos: ',      size(nos)
+      call FCAT_eels_all(557)
+    write (*,*) 'wn_array: ', size(wn_array)
+      call FCAT_eels_all(558)
+    write (*,*) 'f_array: ',  size(f_array)
+      call FCAT_eels_all(559)
+  endif
+
+! *** machine-dependent constants
+! *** epsmac + 1.0 = epsmac , cosh(argmin) = 1.0 , tanh(argmax) = 1.0
+
+      call FCAT_eels_all(560)
+  pi = 4 * datan(1.0d0)
+      call FCAT_eels_all(561)
+  epsmac = 1.0d0
+      call FCAT_eels_all(562)
+  do while (1.0d0 + epsmac > 1.0d0)
+      call FCAT_eels_all(563)
+    epsmac = epsmac / 2
+      call FCAT_eels_all(564)
+  enddo
+      call FCAT_eels_all(565)
+  argmin = dsqrt(2 * epsmac)
+      call FCAT_eels_all(566)
+  argmax = 0.5d0 * dlog(2 / epsmac)
+
+      call FCAT_eels_all(567)
+  dlimf = 0.0d0
+      call FCAT_eels_all(568)
+  rational = .false.
+
+! *** read target specifications
+
+      call FCAT_eels_all(569)
+  user = layers == 0
+      call FCAT_eels_all(570)
+  if (user) then
+
+      call FCAT_eels_all(571)
+    if (layers == 1) rational = .true.
+      call FCAT_eels_all(572)
+    if (contrl == 'image') then
+! *** image-charge screening factor
+      call FCAT_eels_all(573)
+      if (layers == 1 .and. neps == 2) then
+      call FCAT_eels_all(574)
+        dlimf = dsqrt(epsinf(1) * epsinf(2))
+      else
+      call FCAT_eels_all(575)
+      call FCAT_eels_all(576)
+        dlimf = epsinf(1)
+      call FCAT_eels_all(577)
+      endif
+      call FCAT_eels_all(578)
+      dlimf = (dlimf - 1.0d0) / (dlimf + 1.0d0)
+      call FCAT_eels_all(579)
+    endif
+      call FCAT_eels_all(580)
+  endif
+
+! *** initialize constants
+
+      call FCAT_eels_all(581)
+  lmax = size(thick)
+      call FCAT_eels_all(582)
+  nw = size(wn_array)
+      call FCAT_eels_all(583)
+  if (debug) write (*,*) 'lmax: ', lmax
+      call FCAT_eels_all(584)
+  allocate(eps(lmax))
+      call FCAT_eels_all(585)
+  if (debug) write (*,*) 'eps: ', size(eps)
+      call FCAT_eels_all(586)
+  nout = 1 + nw / 20
+      call FCAT_eels_all(587)
+  ener = 8065 * e0
+      call FCAT_eels_all(588)
+  psia = phia / 180 * pi
+      call FCAT_eels_all(589)
+  psii = theta / 180 * pi
+      call FCAT_eels_all(590)
+  cospsi = dcos(psii)
+      call FCAT_eels_all(591)
+  sinpsi = dsin(psii)
+      call FCAT_eels_all(592)
+  tanpsi = dtan(psii)
+      call FCAT_eels_all(593)
+  prefac = dsqrt(255500 / e0)/(137 * cospsi)
+      call FCAT_eels_all(594)
+  facru = psia / cospsi * dsqrt(0.2624664d0 * e0)
+      call FCAT_eels_all(595)
+  elleps = (1.0d0 - phia / phib) * (1.0d0 + phia / phib)
+      call FCAT_eels_all(596)
+  acoef = sinpsi**2 + elleps * cospsi**2
+      call FCAT_eels_all(597)
+  bcoef = sinpsi * cospsi
+      call FCAT_eels_all(598)
+  if (dlimf > 0.0d0) then
+      call FCAT_eels_all(599)
+    rational = .false.
+      call FCAT_eels_all(600)
+    if (debug) write(*,*) ' = > electron attracted by an image charge = ', dlimf
+! *** dlimf : half the length unit imposed by the image force
+      call FCAT_eels_all(601)
+    dlimf = 1.80d0 * dlimf/(e0 * cospsi**2)
+      call FCAT_eels_all(602)
+  endif
+      call FCAT_eels_all(603)
+  if (debug) write (*,*) 'rational: ', rational
+      call FCAT_eels_all(604)
+  if (rational) then
+
+! *** set up coefficients for the rational approximation to the integral
+
+      call FCAT_eels_all(605)
+    if (debug) write(*,*) ' = > set up a rational approximation to the integral'
+      call FCAT_eels_all(606)
+    call quanc8(fun, 0.0d0, pi / 2, aerr, rerr, alpha, c1, nofu, c2, eps, thick, layers, nper)
+      call FCAT_eels_all(607)
+    alpha  = (2 / pi)**2 * alpha
+      call FCAT_eels_all(608)
+    c1 = 2 / pi / dsqrt(1.0d0 - elleps) * sinpsi * alpha**2
+      call FCAT_eels_all(609)
+    if (c1 > 0.99d0) then
+      call FCAT_eels_all(610)
+      if (debug) write(*,*) ' ===> cannot do it'
+      call FCAT_eels_all(611)
+      rational = .false.
+    else
+      call FCAT_eels_all(612)
+      call FCAT_eels_all(613)
+      c2 = 3 * alpha**2 / (1.0d0 - c1)
+      call FCAT_eels_all(614)
+      c1 = c1 * c2
+      call FCAT_eels_all(615)
+      xmin = wmin / (2 * ener * psia)
+      call FCAT_eels_all(616)
+      xmax = wmax / (2 * ener * psia)
+      call FCAT_eels_all(617)
+      if (xmin <= 0.0d0) xmin = 0.0d0
+      call FCAT_eels_all(618)
+      dx = dmax1(0.02d0, (xmax - xmin) / nt)
+      call FCAT_eels_all(619)
+      z1 = 0.0d0
+      call FCAT_eels_all(620)
+      z2 = 0.0d0
+      call FCAT_eels_all(621)
+      do i = 1, nt
+      call FCAT_eels_all(622)
+        x = xmin + i * dx
+      call FCAT_eels_all(623)
+        call queels(x, f, aerr, rerr, facru, eps, thick, layers, nper)
+      call FCAT_eels_all(624)
+        table(i) = f
+      call FCAT_eels_all(625)
+        f = f * (1.0d0 + alpha * x)**2
+      call FCAT_eels_all(626)
+        if (dabs(c2 * f - c1) < c2 * rerr) cycle
+      call FCAT_eels_all(627)
+        z = (1.0d0 - f) / (c2 * f - c1)
+      call FCAT_eels_all(628)
+        if (z <= 0.0d0) cycle
+      call FCAT_eels_all(629)
+        z1 = z1 + x * z * (x**2 - z)
+      call FCAT_eels_all(630)
+        z2 = z2 + (x * z)**2
+      call FCAT_eels_all(631)
+      enddo
+      call FCAT_eels_all(632)
+      if (z2 == 0.0d0) then
+      call FCAT_eels_all(633)
+        if (debug) write(*,*) ' ===> cannot do it'
+      call FCAT_eels_all(634)
+        rational = .false.
+      else
+      call FCAT_eels_all(635)
+      call FCAT_eels_all(636)
+        beta = z1 / z2
+      call FCAT_eels_all(637)
+        z = 0.0d0
+      call FCAT_eels_all(638)
+        do i = 1, nt
+      call FCAT_eels_all(639)
+          x = xmin + i * dx
+      call FCAT_eels_all(640)
+          z = z + (table(i) - qrat(x, alpha, beta, c1, c2))**2
+      call FCAT_eels_all(641)
+        enddo
+      call FCAT_eels_all(642)
+        z = dsqrt(z) / nt
+      call FCAT_eels_all(643)
+        if (z > 5.0d-03) then
+      call FCAT_eels_all(644)
+          if (debug) write(*,*) ' ===> cannot do it'
+      call FCAT_eels_all(645)
+          rational = .false.
+        else
+      call FCAT_eels_all(646)
+      call FCAT_eels_all(647)
+          if (debug) write(*, 100) alpha, c1, c2, beta, z
+      call FCAT_eels_all(648)
+        endif ! z > 5.0d-03
+      call FCAT_eels_all(649)
+      endif ! z2 == 0.0d0
+      call FCAT_eels_all(650)
+    endif ! c1 > 0.99d0
+      call FCAT_eels_all(651)
+  endif ! rational
+
+! *** loop over the energy losses
+
+      call FCAT_eels_all(652)
+  if (debug) write(*, 110)
+      call FCAT_eels_all(653)
+  do iw = 1, nw
+      call FCAT_eels_all(654)
+    f0 = f1
+      call FCAT_eels_all(655)
+    f1 = f
+      call FCAT_eels_all(656)
+    f = 0.0d0
+      call FCAT_eels_all(657)
+    wn = wmin + (iw - 1) * dw
+!    if (debug) write (*,*) 'wn: ', wn
+      call FCAT_eels_all(658)
+    if (wn >= 0.0d0) then
+      call FCAT_eels_all(659)
+      if (wn /= 0.0d0) then
+      call FCAT_eels_all(660)
+        if (.not. user) call seteps(neps, nos, osc, epsinf, wn, name, eps, layers, mode)
+
+      call FCAT_eels_all(661)
+        x = wn / (2 * ener * psia)
+      call FCAT_eels_all(662)
+        if (rational) then
+      call FCAT_eels_all(663)
+          f = qrat(x, alpha, beta, c1, c2) * dimag(-2 / (1.0d0 + eps(1)))
+        else
+      call FCAT_eels_all(664)
+      call FCAT_eels_all(665)
+          call queels(x, f, aerr, rerr, facru, eps, thick, layers, nper)
+      call FCAT_eels_all(666)
+        endif
+      call FCAT_eels_all(667)
+        f = prefac * f / wn
+      call FCAT_eels_all(668)
+      endif ! wn /= 0.0d0
+
+      call FCAT_eels_all(669)
+      wn_array(iw) = wn
+      call FCAT_eels_all(670)
+      f_array(iw)  = f
+
+! *** localize a peak using a parabolic interpolation
+
+      call FCAT_eels_all(671)
+      if ((iw >= 3) .and. (f1 - f0 > aerr) .and. (f1 - f > aerr)) then
+      call FCAT_eels_all(672)
+        a = (f1 - f0) + (f1 - f)
+      call FCAT_eels_all(673)
+        if (a > 4 * rerr * f1) then
+      call FCAT_eels_all(674)
+          b = 0.5d0 * (f1 - f0 + 3 * (f1 - f))
+      call FCAT_eels_all(675)
+          t = b / a
+      call FCAT_eels_all(676)
+          wpic = wn - t * dw
+      call FCAT_eels_all(677)
+          fpic = f + 0.5d0 * b * t
+      call FCAT_eels_all(678)
+          widt = dsqrt(8 * fpic / a) * dw
+      call FCAT_eels_all(679)
+          if (debug) write(*, 120) wpic, fpic, widt
+      call FCAT_eels_all(680)
+        endif ! a > 4 * rerr * f1
+      call FCAT_eels_all(681)
+      endif ! iw >= 3 ...
+      call FCAT_eels_all(682)
+    endif ! wn >= 0.0d0
+      call FCAT_eels_all(683)
+    if (mod(iw, nout) == 0) then
+      call FCAT_eels_all(684)
+      if (debug) write(*, 130) 100 * iw / nw, wn, f
+      call FCAT_eels_all(685)
+    endif
+      call FCAT_eels_all(686)
+  enddo
+      call FCAT_eels_all(687)
+  return
+      call FCAT_eels_all(688)
+100 format(5x, 'alpha = ', f9.4, 4x, 'c1 = ', f9.4, 4x, 'c2 = ', f9.4, 4x,  &
+      'beta = ', f9.4/5x, 'accuracy = ', e9.2)
+      call FCAT_eels_all(689)
+110 format(//' run (%)  wn (cm**-1)  pcl(wn) (cm) |',  &
+      ' peak location  amplitude    width')
+      call FCAT_eels_all(690)
+120 format(40x, f10.2, d12.4, f10.2)
+      call FCAT_eels_all(691)
+130 format(2x, f5.1, 3x, f11.3, d14.5)
+end subroutine doeels
+subroutine change_working_dir()
+
+! This routine gets the first argument of the commandline and takes it
+! as the path to change the working directory
+! used intrinsic routines:
+! iarg returns the number of commandline arguments without the program cname.
+! chdir changes the directory and returns 0 on success.
+! trim removes blanks from strings.
+
+  character (len = 256) :: argument
+  integer :: status
+
+      call FCAT_eels_all(692)
+  if (iargc() == 1) then
+      call FCAT_eels_all(693)
+    call getarg(1, argument)
+      call FCAT_eels_all(694)
+    status = chdir(trim(argument))
+      call FCAT_eels_all(695)
+    if (status /= 0) then
+      call FCAT_eels_all(696)
+      write (*,*) '*** change directory failed ***'
+      call FCAT_eels_all(697)
+      write (*,*) 'directory tried: ', trim(argument)
+      call FCAT_eels_all(698)
+      write (*,*) 'error code (see: man chdir): ', status
+      call FCAT_eels_all(699)
+      write (*,*) 'continuing in the start directory'
+      call FCAT_eels_all(700)
+    end if
+      call FCAT_eels_all(701)
+  end if
+
+      call FCAT_eels_all(702)
+  return
+end subroutine change_working_dir
+       module FCAT_eels_all_mod
+        double precision,dimension (703):: &
+     &   FCAT_eels_all_counter = 0
+        integer :: FCAT_eels_all_nline = 702
+       end module FCAT_eels_all_mod
+       subroutine FCAT_eels_all(n)
+         use FCAT_eels_all_mod
+         integer :: n
+         FCAT_eels_all_counter(n) = &
+     &    FCAT_eels_all_counter(n)  + 1
+         if (FCAT_eels_all_counter(n) == 1) then
+           write(*,"(a,i10)") "FCAT_eels_all_",n
+         endif
+       end subroutine FCAT_eels_all
+       subroutine FCAT_eels_all_rep()
+          use FCAT_eels_all_mod
+          integer :: i
+          do i = 1, FCAT_eels_all_nline
+             write(*,"(a,i10,i10)") &
+     &      "FCAT_eels_all_count",i, &
+     &      int(FCAT_eels_all_counter(i)+0.1)
+          end do
+       end subroutine FCAT_eels_all_rep
diff --git a/source/f90/fcat-analysis/eels_all.f90 b/source/f90/fcat-analysis/eels_all.f90
new file mode 100644
index 0000000..7c7eab5
--- /dev/null
+++ b/source/f90/fcat-analysis/eels_all.f90
@@ -0,0 +1,1353 @@
+program eels
+
+! ******************************************************************
+! *                                                                *
+! * compute the classical eels spectrum of an arbitrary plane-     *
+! * statified medium made from isotropic materials in specular     *
+! * geometry using the dielectric theory of eels.                  *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision :: e0, theta, phia, phib, wmin, wmax, dw
+  integer :: i, j, jos, k, l, layers, neps, nper, nw
+  logical :: user
+  character (len = 72) :: comment(2)
+  character (len = 10) :: contrl, mode
+
+  double precision, allocatable :: thick(:), epsinf(:), osc(:, :)
+  integer, allocatable :: nos(:)
+  character (len = 10), allocatable :: name(:)
+  double precision, allocatable :: wn_array(:), f(:)
+
+  integer :: old_size_1, old_size_2
+  double precision, allocatable :: tmp_osc(:, :)
+  integer :: ioStatus
+
+!  integer, parameter :: name_length = 10
+! *** read spectrometer parameters
+
+  call change_working_dir()
+  open(unit = 11, file = 'eelsin')
+! impact energy (ev)
+  read(11, *) e0
+! incidence angle (%)
+  read(11, *) theta
+! angular apertures of the elliptic detector (%)
+  read(11, *) phia
+  read(11, *) phib
+! energy-loss interval and step size (cm**-1)
+  read(11, *) wmin
+  read(11, *) wmax
+  read(11, *) dw
+! comment lines
+  read(11, '(a72)') (comment(k), k = 1, 2)
+
+  write(*,*) 'program eels (September 2020)'
+  write(*,'(a, f6.2, a, f5.1, a, f5.2, a, f5.2, a)') &
+    ' e0 = ', e0, ' eV, theta = ', theta, '°, phia = ', &
+    phia, '°, phib = ', phib, '°'
+  write(*,'(a, g11.4, a, g11.4, a, g11.4, a)') &
+    ' energy losses from', wmin, ' to', wmax, ', step = ', dw, ' cm**-1'
+  write(*,*) comment(1)
+  write(*,*) comment(2)
+
+  if (phia <= 0.0d0 .or. phib <= 0.0d0) then
+    stop '*** wrong input ***'
+  endif
+  if (e0 <= 0.0d0 .or. theta + phia >= 90.0d0) then
+    stop '*** bad input ***'
+  endif
+
+! *** read target specifications
+
+  read(11, *) layers, nper, mode
+  user = layers == 0
+  if (.not. user) then
+    neps = layers
+    if (nper == -1) then
+      neps = layers + 1
+      nper = 1
+      write(*,*) 'the substrate is a anisotropic uniaxial material'
+    endif
+    if (layers < 0 .or. nper < 1 .or. nper > layers) then
+      stop '*** invalid target specifications ***'
+    endif
+    write(6, 101) layers, nper
+    jos = 0
+    allocate (name(neps), thick(neps), epsinf(neps), nos(neps))
+    do l = 1, neps
+      if (l <= layers) then
+        read(11, 102) name(l), thick(l)
+      endif
+      read(11, *) epsinf(l), nos(l)
+      write(6, 103)
+      if (nos(l) <= 0) then
+        if (l <= layers) write(6, 104) l, name(l), thick(l), epsinf(l)
+        if (l  > layers) write(6, 105) epsinf(l)
+      else
+        do j = 1, nos(l)
+          if (.not. allocated(osc)) then
+            allocate(osc(3, nos(l)))
+          else if (j == 1) then
+ !           call extend3(osc, nos(j))
+            old_size_1 = size(osc, 1)
+            old_size_2 = size(osc, 2)
+            allocate(tmp_osc(old_size_1, old_size_2 + nos(l)))
+            tmp_osc(1:old_size_1, 1:old_size_2) = osc
+            deallocate(osc)
+            call move_alloc(tmp_osc, osc)
+          endif
+          jos = jos + 1
+          read(11, *) (osc(k, jos), k = 1, 3)
+          if ((j == nos(l) / 2 + 1) .and. (nos(l) > 1)) then
+            write(6, 106)
+            write(6, 107)
+          endif
+          if (j == 1) then
+            if (l <= layers) then
+              write(6, 104) l, name(l), thick(l), epsinf(l), (osc(i, jos), i = 1, 3)
+            else
+              write(6, 105) epsinf(l), (osc(i, jos), i = 1, 3)
+            endif
+          else
+            write(6, 108) (osc(i, jos), i = 1, 3)
+          endif
+        enddo
+      endif
+    enddo
+    write(*,*)
+    read(11, 102, IOSTAT = ioStatus) contrl
+    if (ioStatus /= 0) then
+      contrl = ''
+    endif
+  endif
+
+  close (unit = 11)
+
+  nw = 1 + int((wmax - wmin) / dw)
+  allocate (wn_array(nw), f(nw))
+
+  call doeels(e0, theta, phia, phib, wmin, wmax, dw, comment, size(comment),   &
+              layers, neps, nper, name, size(name), thick, epsinf, nos, osc, size(osc, 2),&
+              contrl, mode, wn_array, f, size(wn_array))
+
+  open (unit = 12, file = 'eelsou')
+  write (12, 207) e0, theta, phia, phib, comment(1)
+  do i = 1, nw
+    write (12, 211) wn_array(i), f(i)
+  enddo
+  close (unit = 12)
+
+  stop
+
+101 format(i3, ' layer(s), nper = ', i2//'   l', 2x, 'material', 7x,  &
+      'thickness', 5x, 'epsinf', 4x, 'wto , wp', 5x, 'q', 7x, 'gam/wto')
+102 format(a10, d15.5)
+103 format(1x, 72('-'))
+104 format(1x, i3, 2x, a10, g15.3, f10.4, f12.4, f10.4, f9.4)
+105 format(31x, f10.4, f12.4, f10.4, f9.4)
+106 format(45x, 'wlo , wp', 5x, 'q', 7x, 'gam/wlo')
+107 format(45x, 28('-'))
+108 format(41x, f12.4, f10.4, f9.4)
+207 format('e0 =', f6.2, ' theta =', f5.1, ' phia =', f5.2, ' phib =', f5.2 / a72)
+211 format(2e15.7)
+end program eels
+
+double precision function qrat(x, alpha, beta, c1, c2)
+
+  implicit none
+
+  double precision, intent(in) :: x, alpha, beta, c1, c2
+
+  qrat = (1.0d0 + x * (beta + c1 * x)) / ((1.0d0 + x * (beta + c2 * x)) * (1.0d0 + alpha * x)**2)
+
+  return
+end function qrat
+
+double precision function usurlo(dq, wn)
+
+! ******************************************************************
+! *                                                                *
+! * user-supplied dielectric surface loss function aimag(g(dq, wn)) *
+! * input arguments :                                              *
+! *    dq : modulus of the two-dimensional surface wave vector     *
+! *         (angstroem**-1)                                        *
+! *    wn : frequency (cm**-1)                                     *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: dq
+  double precision, intent(in) :: wn
+
+  usurlo = 1.0d0
+  return
+end function usurlo
+double precision function surlos(dk, eps, thick, layers, nper)
+
+! ******************************************************************
+! *                                                                *
+! * eels surface loss function for an arbitrary multilayered target*
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: dk
+  double complex, intent(in) :: eps(:)
+  double precision, intent(in) :: thick(:)
+  integer, intent(in) :: layers, nper
+
+  integer :: lmax
+  logical :: static, zero, skip
+  integer :: lstart, n
+  double precision, allocatable :: arg(:)
+  double precision :: argmin, argmax, cn, cnm1, epsmac, sn, snm1, tn
+  double complex :: a, b, csi, pnm2, pnm1, pn, pp, qnm2, qnm1, qn, qp, z
+
+  common / mulayr / argmin, argmax, epsmac
+
+  zero(z) = (dble(z) == 0.0d0) .and. (dimag(z) == 0.0d0)
+
+!  write (*,*) 'surlos:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+  lmax = size(eps)
+  allocate (arg(lmax))
+  lstart = layers - nper + 1
+  static = .true.
+  skip = .false.
+
+  do n = 1, layers
+    arg(n) = dk * thick(n)
+    if (arg(n) > argmax .or. zero(eps(n))) then
+      csi  = eps(n)
+      skip = .true.
+      exit
+    endif
+    static = .not. (n >= lstart .and. arg(n) > argmin)
+  enddo
+
+  if (.not. skip) then
+! *** periodic continued fraction, period = nper
+
+    do ! Do loop is only for the option to skip out of it.
+      if (nper <= 1) then
+        csi = eps(layers)
+      else
+        if (static) then
+          pn = 0.0d0
+          qn = 0.0d0
+          do n = lstart, layers
+            pn = pn + thick(n) * eps(n)
+            qn = qn + thick(n) / eps(n)
+          enddo
+          if (zero(qn)) then
+            n = lstart
+            if (n <= 1) then
+              surlos = 0.0d0
+              return
+            endif
+            n = n - 1
+            csi = eps(n) / dtanh(arg(n))
+            exit
+          endif ! zero(qn)
+          csi = cdsqrt(pn / qn)
+          if ((dimag(csi) < 0.0d0) .and. (dble(qn) < 0.0d0)) then
+            csi = -csi
+          endif
+        else ! static
+          cn = dcosh(arg(lstart))
+          sn = dsinh(arg(lstart))
+          pnm1 = 1.0d0
+          pn = cn
+          pp = eps(lstart) * sn
+          qnm1 = 0.0d0
+          qn = sn / eps(lstart)
+          qp = pn
+          do  n = lstart + 1, layers
+            cnm1 = cn
+            snm1 = sn
+            cn = dcosh(arg(n))
+            sn = dsinh(arg(n))
+            a = eps(n) * sn
+            pp = cn * pp + a * pn
+            qp = cn * qp + a * qn
+            b = (eps(n - 1) / eps(n)) * (sn / snm1)
+            a = cnm1 * b + cn
+            pnm2 = pnm1
+            pnm1 = pn
+            qnm2 = qnm1
+            qnm1 = qn
+            pn = a * pnm1 - b * pnm2
+            qn = a * qnm1 - b * qnm2
+          enddo
+          if (zero(qn)) then
+            a = qp - pn
+            if (zero(a)) then
+              n = lstart
+              if (n <= 1) then
+                surlos = 0.0d0
+                return
+              endif
+              n = n - 1
+              csi = eps(n) / dtanh(arg(n))
+              exit
+            endif
+            csi = pp / a
+          else
+            a = 0.5d0 * (pn - qp) / qn
+            b = cdsqrt(a**2 + pp / qn)
+            pn = a - pn / qn
+            if (cdabs(pn + b) > cdabs(pn - b)) then
+              b = -b
+            endif
+            csi = a + b
+          endif ! zero(qn)
+        endif ! static
+! *** small-dk limit of the periodic tail
+
+      endif ! nper <= 1
+
+      n = lstart
+
+      exit
+    enddo
+  endif ! .not. skip
+
+! *** backward algorithm
+
+  do
+    n = n - 1
+    if (n <= 0) then
+      a = csi + 1.0d0
+      if (zero(a)) then
+        surlos = 2 / epsmac
+      else
+        surlos = dimag(-2 / a)
+      endif
+      return
+    endif ! n <= 0
+
+    if (arg(n) /= 0.0d0) then
+      tn = dtanh(arg(n))
+      b = eps(n) + csi * tn
+      if (zero(b)) then
+        surlos = 0.0d0
+        return
+      endif
+      csi = eps(n) * (csi + tn * eps(n)) / b
+    endif
+  enddo
+end function surlos
+double precision function phint(phi, a, u)
+
+! ******************************************************************
+! *                                                                *
+! * evaluate the integral from zero to phi of                      *
+! *                                                                *
+! *                 u                 2                            *
+! *  ( ----------------------------- )  dphi                       *
+! *                          2     2                               *
+! *    (1 - a * u * cos(phi))  +  u                                *
+! *                                                                *
+! * for 0 <= phi <= pi , u >= 0 and a >= 0                         *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: phi
+  double precision, intent(in) :: a
+  double precision, intent(in) :: u
+
+  double precision :: ai, ar, bi, br, c, cpr, d, e, esr, pi, qr, ri, rm, root
+  double precision :: rp, rr, s, spr, tm, tp, u2, x, zeta, zetai, zetar, zr
+
+  pi = 3.141592653589793238d0
+  c = dcos(phi)
+  s = dsin(phi)
+  u2 = u**2
+  e = a*u
+  if (u < 1.0d0 .and. e < 1.0d-02 * (1.0d0 + u2)) then
+    zr = 1.0d0 + u2
+    esr = e / zr
+    phint = u2 / zr**2 * ((( (4.0d0 / 3.0d0) * (2.0d0 + c**2) * s * (5.0d0 - 3 * u2) *  &
+            esr + (phi + c * s) * (5.0d0 - u2)) * esr + 4 * s) * esr + phi)
+  else
+    rm = dsqrt((1.0d0 - e)**2 + u2)
+    tm = 0.5d0 * datan2(u, 1.0d0 - e)
+    rp = dsqrt((1.0d0 + e)**2 + u2)
+    tp = 0.5d0 * datan2(u, 1.0d0 + e)
+    root = dsqrt(rm * rp)
+    cpr = dcos(tm + tp)
+    spr = dsin(tm + tp)
+    x = 0.0d0       ! ensure initialization
+    if (c >= 0.0d0) then
+      x = s / (1.0d0 + c)
+    elseif (dabs(s) > 1.0d-07) then
+      x = (1.0d0 - c) / s
+    endif
+    if ((c >= 0.0d0) .or. (dabs(s) > 1.0d-07)) then
+      zeta = dsqrt(rm / rp)
+      zetar = -zeta * dsin(tm - tp)
+      zetai =  zeta * dcos(tm - tp)
+      br = 0.5d0 * dlog(((zetar + x)**2 + zetai**2) / ((zetar - x)**2 + zetai**2))
+      bi = datan2(zetai, zetar + x) - datan2(zetai, zetar - x)
+      rr = -(br * spr - bi * cpr) / root
+      ri = -(bi * spr + br * cpr) / root
+      d = e * s / ((1.0d0 - e * c)**2 + u2)
+      ar = d * (1.0d0 - e * c) - rr + u * ri
+      ai = -d * u - ri - u * rr
+    else
+      rr = -pi / root * cpr
+      ri =  pi / root * spr
+      ar = -rr + u * ri
+      ai = -ri - u * rr
+    endif
+    qr = (ar * (cpr - spr) * (cpr + spr) + 2 * ai * cpr * spr) / (rm * rp)
+    phint = 0.5d0 * (ri / u - qr)
+  endif
+  return
+end function phint
+double precision function fint1(u, eps, thick, layers, nper, eps_size)
+
+! ******************************************************************
+! *                                                                *
+! * integration over the azimutal angle from 0.0 to pi             *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: u
+  integer, intent(in) :: layers, nper, eps_size
+  double complex, intent(in) :: eps(eps_size)
+  double precision, intent(in) :: thick(eps_size)
+
+  logical :: rational, user
+  double precision :: acoef, bcoef, ccoef, cospsi, den, dif, dlimf, e, elleps
+  double precision :: pi, rom, rop, ru, sinpsi, sum, um, t
+  double precision :: tanpsi, wn, u2
+
+  interface
+    double precision function usurlo(dq, wn)
+      double precision, intent(in) :: dq
+      double precision, intent(in) :: wn
+    end function usurlo
+    double precision function surlos(dk, eps, thick, layers, nper)
+      double precision, intent(in) :: dk
+      double complex, intent(in) :: eps(:)
+      double precision, intent(in) :: thick(:)
+      integer, intent(in) :: layers, nper
+    end function surlos
+  end interface  
+
+  common / param / acoef, bcoef, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+      ru, um, dlimf, wn, user, rational
+
+  data pi / 3.141592653589793238d0 /
+
+!  write (*,*) 'fint1:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+  if (u == 0.0d0) then
+    fint1 = 0.0d0
+    return
+  endif
+  e = tanpsi * u
+  u2 = u**2
+  rom = (1.0d0 - e)**2 + u2
+  rop = (1.0d0 + e)**2 + u2
+  sum = rop + rom
+  rom = dsqrt(rom)
+  rop = dsqrt(rop)
+  dif = rop - rom
+  den = dsqrt((2.0d0 - dif) * (2.0d0 + dif)) * rop * rom
+  fint1 = pi * u2 * (4 * sum - dif**2 * (sum - rop * rom)) / den**3
+  if (rational) then
+    return
+  endif
+  if (user) then
+    fint1 = fint1 * usurlo(ru * u, wn)
+  else
+    fint1 = fint1 * surlos(ru * u, eps, thick, layers, nper)
+    if (dlimf > 0.0d0) then
+      t = ru * u * dlimf
+      fint1 = fint1 * (1.d0 + t * dlog(t / (t + 0.26d0)))**2 / (1.d0 + 1.40d0 * t)
+    endif
+  endif
+  return
+end function fint1
+double precision function fint2(u, eps, thick, layers, nper, eps_size)
+
+! ******************************************************************
+! *                                                                *
+! * integration over the azimutal angle from 0.0 to phi < pi       *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: u
+  integer, intent(in) :: layers, nper, eps_size
+  double complex, intent(in) :: eps(eps_size)
+  double precision, intent(in) :: thick(eps_size)
+
+  logical :: rational, user
+  double precision :: a, arg, b, b2, c, ccoef, cospsi, dlimf, elleps, phi
+  double precision :: phint, ru, sinpsi, um, t, tanpsi, wn, x
+
+  interface
+    double precision function usurlo(dq, wn)
+      double precision, intent(in) :: dq
+      double precision, intent(in) :: wn
+    end function usurlo
+    double precision function surlos(dk, eps, thick, layers, nper)
+      double precision, intent(in) :: dk
+      double complex, intent(in) :: eps(:)
+      double precision, intent(in) :: thick(:)
+      integer, intent(in) :: layers, nper
+    end function surlos
+  end interface  
+
+  common / param / a, b, ccoef, elleps, cospsi, sinpsi, tanpsi, &
+      ru, um, dlimf, wn, user, rational
+
+!  write (*,*) 'fint2:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+  if (u == 0.0d0) then
+    fint2 = 0.0d0
+    return
+  endif
+  b2 = b**2
+  c = (1.0d0 - elleps) * (cospsi * u)**2 + (b - ccoef) * (b + ccoef)
+  if (dabs(a * c) > 1.0d-03 * b2) then
+    x = (b - dsqrt(b2 - a * c)) / a
+  else
+    x = a * c / b2
+    x = 0.5d0 * c * (1.d0 + 0.25d0 * x * (1.d0 + 0.5d0 * x * (1.d0 + 0.625d0 * x))) / b
+  endif
+  arg = x / u
+  if (dabs(arg) > 1.0d0) then
+    arg = dsign(1.0d0, arg)
+  endif
+  phi = dacos(arg)
+  fint2 = phint(phi, tanpsi, u)
+  if (rational) then
+    return
+  endif
+  if (user) then
+    fint2 = fint2 * usurlo(ru * u, wn)
+  else
+    fint2 = fint2 * surlos(ru * u, eps, thick, layers, nper)
+    if (dlimf > 0.0d0) then
+      t = ru * u * dlimf
+      fint2 = fint2 * (1.d0 + t * dlog(t / (t + 0.26d0)))**2 / (1.d0 + 1.40d0 * t)
+    endif
+  endif
+  return
+end function fint2
+double precision function fint3(u, eps, thick, layers, nper, eps_size)
+
+! ******************************************************************
+! *                                                                *
+! * integration over the azimutal angle from phi1 > 0 to phi2 < pi *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: u
+  integer, intent(in) :: layers, nper, eps_size
+  double complex, intent(in) :: eps(eps_size)
+  double precision, intent(in) :: thick(eps_size)
+
+  logical :: rational, user
+  double precision :: a, arg, b, ccoef, cospsi, dlimf, elleps, phi1, phi2
+  double precision :: phint, sinpsi, rac, ru, um, t, tanpsi, wn
+
+  interface
+    double precision function usurlo(dq, wn)
+      double precision, intent(in) :: dq
+      double precision, intent(in) :: wn
+    end function usurlo
+    double precision function surlos(dk, eps, thick, layers, nper)
+      double precision, intent(in) :: dk
+      double complex, intent(in) :: eps(:)
+      double precision, intent(in) :: thick(:)
+      integer, intent(in) :: layers, nper
+    end function surlos
+  end interface  
+  
+  common / param / a, b, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+      ru, um, dlimf, wn, user, rational
+
+!  write (*,*) 'fint3:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+  if (u == 0.0d0) then
+    fint3 = 0.0d0
+    return
+  endif
+  rac = dsign(1.0d0, a) * cospsi * dsqrt((1.0d0 - elleps) * a * (um - u) * (um + u))
+  arg = (b - rac) / (u * a)
+  if (dabs(arg) > 1.0d0) arg = dsign(1.0d0, arg)
+  phi2 = dacos(arg)
+  fint3 = phint(phi2, tanpsi, u)
+  arg = (b + rac) / (u * a)
+  if (dabs(arg) > 1.0d0) arg = dsign(1.0d0, arg)
+  phi1 = dacos(arg)
+  fint3 = fint3 - phint(phi1, tanpsi, u)
+  if (rational) return
+  if (user) then
+    fint3 = fint3 * usurlo(ru * u, wn)
+  else
+    fint3 = fint3 * surlos(ru * u, eps, thick, layers, nper)
+    if (dlimf > 0.0d0) then
+      t = ru * u * dlimf
+      fint3 = fint3 * (1.d0 + t * dlog(t / (t + 0.26d0)))**2 / (1.d0 + 1.40d0 * t)
+    endif
+  endif
+  return
+end function fint3
+double precision function fun(phi)
+
+! ******************************************************************
+! *                                                                *
+! * integrand of the expression of the 1st order term in the       *
+! * expansion of the eels integral for a homogeneous target.       *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: phi
+
+  logical :: user, rational
+  double precision :: acoef, bcoef, ccoef, cospsi, dlimf, elleps, ru
+  double precision :: sinphi, sinpsi, tanpsi, um, wn
+
+  common / param / acoef, bcoef, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+                   ru, um, dlimf, wn, user, rational
+
+  sinphi = dsin(phi)
+  fun = dsqrt((1.0d0 - elleps + elleps * sinphi**2) *   &
+              (1.0d0 - sinpsi * sinphi) *               &
+              (1.0d0 + sinpsi * sinphi))
+  return
+end function fun
+subroutine quanc8(fun, a, b, abserr, relerr, result, errest, nofun, flag, eps, thick, layers, nper)
+
+! estimate the integral of fun(x) from a to b
+! to a user provided tolerance.
+! an automatic adaptive routine based on
+! the 8-panel newton-cotes rule (g. forsythe et al, 1977, p. 92)
+!
+! input ..
+!
+! fun     the name of the integrand function subprogram fun(x).
+! a       the lower limit of integration.
+! b       the upper limit of integration.(b may be less than a.)
+! relerr  a relative error tolerance. (should be non-negative)
+! abserr  an absolute error tolerance. (should be non-negative)
+!
+! output ..
+!
+! result  an approximation to the integral hopefully satisfying the
+!         least stringent of the two error tolerances.
+! errest  an estimate of the magnitude of the actual error.
+! nofun   the number of function values used in calculation of result.
+! flag    a reliability indicator.  if flag is zero, then result
+!         probably satisfies the error tolerance.  if flag is
+!         xxx.yyy , then  xxx = the number of intervals which have
+!         not converged and 0.yyy = the fraction of the interval
+!         left to do when the limit on  nofun  was approached.
+
+  implicit none
+
+  double precision :: fun
+  double precision, intent(in) :: a
+  double precision, intent(in) :: b
+  double precision, intent(in out) :: abserr
+  double precision, intent(in) :: relerr
+  double precision, intent(out) :: result
+  double precision, intent(out) :: errest
+  integer, intent(out) :: nofun
+  double precision, intent(out) :: flag
+
+  external fun
+
+  double precision, intent(in) :: thick(:)
+  double complex, intent(in) :: eps(:)
+  integer, intent(in) :: layers, nper
+
+  double precision :: w0, w1, w2, w3, w4, area, x0, f0, stone, step, cor11, temp
+  double precision :: qprev, qnow, qdiff, qleft, esterr, tolerr
+  double precision :: qright(31), f(16), x(16), fsave(8, 30), xsave(8, 30)
+  double precision :: dabs, dmax1
+
+  integer :: levmin, levmax, levout, nomax, nofin, lev, nim, i, j
+
+! ***   stage 1 ***   general initialization
+! set constants.
+
+!  write (*,*) 'quanc8:'
+!  write (*,*) 'thick: ', size(thick)
+!  write (*,*) 'eps: ', size(eps)
+
+  levmin = 1
+  levmax = 30
+  levout = 6
+  nomax = 5000
+  nofin = nomax - 8 * (levmax - levout + 2**(levout + 1))
+
+! trouble when nofun reaches nofin
+
+  w0 =   3956.0d0 / 14175.0d0
+  w1 =  23552.0d0 / 14175.0d0
+  w2 =  -3712.0d0 / 14175.0d0
+  w3 =  41984.0d0 / 14175.0d0
+  w4 = -18160.0d0 / 14175.0d0
+
+! initialize running sums to zero.
+
+  flag   = 0.0d0
+  result = 0.0d0
+  cor11  = 0.0d0
+  errest = 0.0d0
+  area   = 0.0d0
+  nofun = 0
+  if (a == b) return
+
+! ***   stage 2 ***   initialization for first interval
+
+  lev = 0
+  nim = 1
+  x0 = a
+  x(16) = b
+  qprev  = 0.0d0
+  f0 = fun(x0, eps, thick, layers, nper, size(eps))
+  stone = (b - a) / 16
+  x(8)  =  (x0    + x(16)) / 2
+  x(4)  =  (x0    + x(8))  / 2
+  x(12) =  (x(8)  + x(16)) / 2
+  x(2)  =  (x0    + x(4))  / 2
+  x(6)  =  (x(4)  + x(8))  / 2
+  x(10) =  (x(8)  + x(12)) / 2
+  x(14) =  (x(12) + x(16)) / 2
+  do j = 2, 16, 2
+    f(j) = fun(x(j), eps, thick, layers, nper, size(eps))
+  enddo
+  nofun = 9
+
+  do
+
+! ***   stage 3 ***   central calculation
+! requires qprev, x0, x2, x4, ..., x16, f0, f2, f4, ..., f16.
+! calculates x1, x3, ...x15, f1, f3, ...f15, qleft, qright, qnow, qdiff, area.
+
+    x(1) = (x0 + x(2)) / 2
+    f(1) = fun(x(1), eps, thick, layers, nper, size(eps))
+    do j = 3, 15, 2
+      x(j) = (x(j - 1) + x(j + 1)) / 2
+      f(j) = fun(x(j), eps, thick, layers, nper, size(eps))
+    enddo
+    nofun = nofun + 8
+    step = (x(16) - x0) / 16.0d0
+    qleft  =  (w0 * (f0 + f(8))  + w1 * (f(1) + f(7)) + w2 * (f(2) + f(6))  &
+        + w3 * (f(3) + f(5))  +  w4 * f(4)) * step
+    qright(lev + 1) = (w0 * (f(8) + f(16)) + w1 * (f(9) + f(15)) + w2 * (f(10) + f(14))  &
+        + w3 * (f(11) + f(13)) + w4 * f(12)) * step
+    qnow = qleft + qright(lev + 1)
+    qdiff = qnow - qprev
+    area = area + qdiff
+
+! ***   stage 4 *** interval convergence test
+
+    esterr = dabs(qdiff) / 1023
+    tolerr = dmax1(abserr, relerr * dabs(area)) * (step / stone)
+
+    if (lev >= levmin) then
+      if (lev >= levmax) then
+! current level is levmax.
+        flag = flag + 1.0d0
+      else
+        if (nofun > nofin) then
+! ***   stage 6   ***   trouble section
+! number of function values is about to exceed limit.
+          nofin = 2 * nofin
+          levmax = levout
+          flag = flag + (b - x0) / (b - a)
+        else
+          if (esterr > tolerr) then
+! ***   stage 5   ***   no convergence
+! locate next interval.
+            nim = 2 * nim
+            lev = lev + 1
+! store right hand elements for future use.
+            do i = 1, 8
+              fsave(i, lev) = f(i + 8)
+              xsave(i, lev) = x(i + 8)
+            enddo
+! assemble left hand elements for immediate use.
+            qprev = qleft
+            do i = 1, 8
+              f(18 - 2 * i) = f(9 - i)
+              x(18 - 2 * i) = x(9 - i)
+            enddo
+            cycle
+          endif
+        endif
+      endif
+
+! ***   stage 7   ***   interval converged
+! add contributions into running sums.
+      result = result + qnow
+      errest = errest + esterr
+      cor11  = cor11  + qdiff / 1023
+! locate next interval.
+      do while (nim /= 2 * (nim / 2))
+        nim = nim / 2
+        lev = lev - 1
+      enddo
+      nim = nim + 1
+
+      if (lev <= 0) exit
+
+! assemble elements required for the next interval.
+      qprev = qright(lev)
+      x0 = x(16)
+      f0 = f(16)
+      do i = 1, 8
+        f(2*i) = fsave(i, lev)
+        x(2*i) = xsave(i, lev)
+      enddo
+      cycle
+    else
+! ***   stage 5   ***   no convergence
+! locate next interval.
+      nim = 2 * nim
+      lev = lev + 1
+! store right hand elements for future use.
+      do i = 1, 8
+        fsave(i, lev) = f(i + 8)
+        xsave(i, lev) = x(i + 8)
+      enddo
+! assemble left hand elements for immediate use.
+      qprev = qleft
+      do i = 1, 8
+        f(18 - 2 * i) = f(9 - i)
+        x(18 - 2 * i) = x(9 - i)
+      enddo
+    endif
+
+   enddo
+
+ ! ***   stage 8   ***   finalize and return
+  result = result + cor11
+
+! make sure errest not less than roundoff level.
+  if (errest /= 0.0d0) then
+    temp = dabs(result) + errest
+    do while (temp == dabs(result))
+      errest = 2 * errest
+      temp = dabs(result) + errest
+    enddo
+  endif
+  return
+end subroutine quanc8
+subroutine queels(x, f, aerr, rerr, facru, eps, thick, layers, nper)
+
+! ******************************************************************
+! *                                                                *
+! * perform q-space integration for computing the eels spectrum of *
+! * a isotropic target using polar coordinates.                    *
+! *                                                                *
+! * x is the dimensionless energy loss hbar*omega/(2*e0*phia)      *
+! * aerr and rerr are the desired absolute and relative accuracies *
+! * facru*x is the units of wavevectors omega/v_perpendicular      *
+! * f is the q-integral multiplied by (2/pi)**2                    *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  double precision, intent(in) :: x
+  double precision, intent(out) :: f
+  double precision, intent(in out) :: aerr
+  double precision, intent(in out) :: rerr
+  double precision, intent(in) :: facru
+  double complex, intent(in) :: eps(:)
+  double precision, intent(in) :: thick(:)
+  integer, intent(in) :: layers, nper
+
+  logical :: rational, user
+  double precision :: acoef, bcoef, ccoef, cospsi, dlimf, elleps
+  double precision :: error, flag, ru, sinpsi
+  double precision :: u1, u2, um, ut, tanpsi, wn, y
+  integer :: ie, nofu
+  dimension error(3), flag(3)
+
+  interface
+    double precision function fint1(u, eps, thick, layers, nper, eps_size)
+      double precision, intent(in) :: u
+      integer, intent(in) :: layers, nper, eps_size
+      double complex, intent(in) :: eps(eps_size)
+      double precision, intent(in) :: thick(eps_size)
+    end function fint1
+    double precision function fint2(u, eps, thick, layers, nper, eps_size)
+      double precision, intent(in) :: u
+      integer, intent(in) :: layers, nper, eps_size
+      double complex, intent(in) :: eps(eps_size)
+      double precision, intent(in) :: thick(eps_size)
+    end function fint2
+    double precision function fint3(u, eps, thick, layers, nper, eps_size)
+      double precision, intent(in) :: u
+      integer, intent(in) :: layers, nper, eps_size
+      double complex, intent(in) :: eps(eps_size)
+      double precision, intent(in) :: thick(eps_size)
+    end function fint3
+    subroutine quanc8(fun, a, b, abserr, relerr, result, errest, nofun, flag, eps, thick, layers, nper)
+      double precision :: fun
+      double precision, intent(in) :: a
+      double precision, intent(in) :: b
+      double precision, intent(in out) :: abserr
+      double precision, intent(in) :: relerr
+      double precision, intent(out) :: result
+      double precision, intent(out) :: errest
+      integer, intent(out) :: nofun
+      double precision, intent(out) :: flag
+
+      external fun
+
+      double precision, intent(in) :: thick(:)
+      double complex, intent(in) :: eps(:)
+      integer, intent(in) :: layers, nper
+    end subroutine quanc8  
+  end interface  
+
+  common / param / acoef, bcoef, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+      ru, um, dlimf, wn, user, rational
+
+!  write (*,*) 'queels:'
+!  write (*,*) 'eps: ', size(eps)
+!  write (*,*) 'thick: ', size(thick)
+
+  f = 0.0d0
+  if (x <= 0.0d0) then
+    return
+  endif
+  ru = facru * x
+  ccoef = cospsi**2 / x
+  ut = ccoef - bcoef
+  u1 = dabs(ut)
+  u2 = ccoef + bcoef
+  if (ut > 0.0d0) then
+    call quanc8(fint1, 0.0d0, u1, aerr, rerr, y, error(1), nofu, flag(1), eps, thick, layers, nper)
+    f = y
+  else
+    flag(1) = 0.0d0
+  endif
+  if (u2 > u1) then
+    call quanc8(fint2, u1, u2, aerr, rerr, y, error(2), nofu, flag(2), eps, thick, layers, nper)
+    f = f + y
+  else
+    flag(2) = 0.0d0
+  endif
+  if (dabs(acoef) > x * (1.0d0 - elleps) * bcoef) then
+    um = dsqrt(ccoef / x / (1.0d0 - elleps) + bcoef**2 / acoef)
+    if (um > u2) then
+      call quanc8(fint3, u2, um, aerr, rerr, y, error(3), nofu, flag(3), eps, thick, layers, nper)
+      f = f + y
+    endif
+    if (um < u1) then
+      call quanc8(fint3, um, u1, aerr, rerr, y, error(3), nofu, flag(3), eps, thick, layers, nper)
+      f = f - y
+    endif
+  else
+    flag(3) = 0.0d0
+  endif
+  do ie = 1, 3
+    if (flag(ie) == 0.0d0) cycle
+    write(*,*) ' +++ flag(', ie, ') =', flag(ie), ', error =', error(ie), ' +++'
+    if (flag(ie) - aint(flag(ie)) > 0.5d-02) then
+      stop '*** execution aborted ***'
+    endif
+  enddo
+  f = (2 / 3.141592653589793238d0)**2 * f
+  return
+end subroutine queels
+subroutine seteps(neps, nos, osc, epsinf, wn, name, eps, layers, mode)
+
+! ******************************************************************
+! *                                                                *
+! * set up long-wavelength dielectric functions of the layers for  *
+! * the present frequency wn (in cm**-1)                           *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+  integer, intent(in) :: neps
+  integer, intent(in) :: nos(:)
+  double precision, intent(in) :: osc(:, :)
+  double precision, intent(in) :: epsinf(:)
+  double precision, intent(in) :: wn
+  character (len=10), intent(in) :: name(:)
+  character (len=10), intent(in) :: mode
+
+  double complex, intent(in out) :: eps(:)
+  integer, intent(in) :: layers
+
+  double precision :: argmin, argmax, epsmac, x
+  double complex :: deno, nomi
+  integer :: j, k, l, m
+
+  common / mulayr / argmin, argmax, epsmac
+
+!  write (*,*) 'seteps:'
+!  write (*,*) 'nos: ', size(nos)
+!  write (*,*) 'osc: ', size(osc)
+!  write (*,*) 'epsinf: ', size(epsinf)
+!  write (*,*) 'name: ', size(name)
+!  write (*,*) 'eps: ', size(eps)
+!  write (*,*) 'thick: ', size(thick)
+
+  j = 0
+  do l = 1, neps
+    m = nos(l)/2
+    nomi = dcmplx(1.0d0, 0.0d0)
+    deno = dcmplx(1.0d0, 0.0d0)
+    if (mode == 'kurosawa') then
+      do k = 1, m
+        j = j + 1
+! since osc(1,*) and wn are real, the following should be equivalent
+! Check required.
+! Furthermore the first term can be rewritten as
+! (osc(1, j + m) - wn) * (osc(1, j + m) + wn)
+!        nomi = nomi * cmplx(osc(1, j + m)**2 - wn**2, - wn * osc(3, j + m))
+        nomi = nomi * (osc(1, j + m)**2 - wn**2 - dcmplx(0.0d0, wn * osc(3, j + m)))
+        deno = deno * (osc(1, j    )**2 - wn**2 - dcmplx(0.0d0, wn * osc(3, j    )))
+      enddo
+      eps(l) = epsinf(l) * nomi / deno
+    elseif (name(l) == 'metal') then
+      j = j + 1
+! suggestion for replacement
+!      eps(l) = -osc(1, j)**2 / cmplx(wn**2, wn * osc(3, j))
+      eps(l) = -osc(1, j)**2 / ( wn**2 + dcmplx(0.0d0, wn * osc(3, j)) )
+    else
+      eps(l) = epsinf(l)
+! The original version had this additional loop. It seems, it has been removed
+! because all cases of nos(l) > 1 are treated in case 1 above
+      do k = 1, nos(l)
+      j = j + 1
+      x = wn / osc(1, j)
+      deno = x * dcmplx(x, osc(3, j))
+      if (osc(2, j) >= 0.0d0) then
+        deno = 1.0d0 - deno
+      endif
+      if (cdabs(deno) == 0.0d0) then
+        deno = epsmac
+      endif
+      eps(l) = eps(l) + osc(2, j) / deno
+      enddo
+    endif
+  enddo
+  if (neps == layers + 1) then
+! the substrate is a anisotropic uniaxial material
+    eps(layers) = cdsqrt(eps(layers) * eps(layers + 1))
+    if (dimag(eps(layers)) < 0.0d0) then
+      eps(layers) = -eps(layers)
+    endif
+  endif
+  return
+end subroutine seteps
+subroutine doeels (e0, theta, phia, phib, wmin, wmax, dw, comment, comment_size,   &
+              layers, neps, nper, name, name_size, thick, epsinf, nos, osc, osc_size,&
+              contrl, mode, wn_array, f_array, wn_array_size)
+
+! ******************************************************************
+! *                                                                *
+! * compute the classical eels spectrum of an arbitrary plane-     *
+! * statified medium made from isotropic materials in specular     *
+! * geometry using the dielectric theory of eels.                  *
+! *                                                                *
+! ******************************************************************
+
+  implicit none
+
+  integer, parameter :: nt = 5
+
+  double precision, intent(in) :: e0, theta, phia, phib, wmin, wmax, dw
+  character (len = 72) :: comment(comment_size)
+  character (len = 10) :: name(name_size)
+  double precision, intent(in) :: thick(name_size), epsinf(name_size), osc(3, osc_size)
+  character (len = 10) :: contrl, mode
+  integer, intent(in) :: comment_size, name_size, osc_size, wn_array_size
+  integer, intent(in out) :: layers, nper, nos(name_size)
+  double precision, intent(in out) :: wn_array(wn_array_size), f_array(wn_array_size)
+
+  logical :: rational, user, debug
+  integer :: i, iw, neps, nofu, nout, nw, lmax
+  double precision :: a, acoef, aerr, alpha, argmin, argmax, b, bcoef, beta,  &
+      c1, c2, ccoef, cospsi, dlimf, dx, elleps, ener, epsmac, facru, f, f0,   &
+      f1, fpic, fun, pi, prefac, psia, psii, qrat, rerr, ru, sinpsi, t,       &
+      tanpsi, table, um, widt, wn, wpic, x, xmin, xmax, z, z1, z2
+  double complex, allocatable :: eps(:)
+  dimension table(nt)
+
+  external fun, qrat
+
+  interface
+    subroutine queels(x, f, aerr, rerr, facru, eps, thick, layers, nper)
+      double precision, intent(in) :: x
+      double precision, intent(out) :: f
+      double precision, intent(in out) :: aerr
+      double precision, intent(in out) :: rerr
+      double precision, intent(in) :: facru
+      double complex, intent(in) :: eps(:)
+      double precision, intent(in) :: thick(:)
+      integer, intent(in) :: layers, nper
+    end subroutine queels
+    subroutine seteps(neps, nos, osc, epsinf, wn, name, eps, layers, mode)
+      integer, intent(in) :: neps
+      integer, intent(in) :: nos(:)
+      double precision, intent(in) :: osc(:, :)
+      double precision, intent(in) :: epsinf(:)
+      double precision, intent(in) :: wn
+      character (len=10), intent(in) :: name(:)
+      character (len=10), intent(in) :: mode
+      double complex, intent(in out) :: eps(:)
+      integer, intent(in) :: layers
+    end subroutine seteps
+    subroutine quanc8(fun, a, b, abserr, relerr, result, errest, nofun, flag, eps, thick, layers, nper)
+      double precision :: fun
+      double precision, intent(in) :: a
+      double precision, intent(in) :: b
+      double precision, intent(in out) :: abserr
+      double precision, intent(in) :: relerr
+      double precision, intent(out) :: result
+      double precision, intent(out) :: errest
+      integer, intent(out) :: nofun
+      double precision, intent(out) :: flag
+
+      external fun
+
+      double precision, intent(in) :: thick(:)
+      double complex, intent(in) :: eps(:)
+      integer, intent(in) :: layers, nper
+    end subroutine quanc8  
+  end interface
+
+  common / param / acoef, bcoef, ccoef, elleps, cospsi, sinpsi, tanpsi,  &
+                   ru, um, dlimf, wn, user, rational
+  common / mulayr / argmin, argmax, epsmac
+
+  data aerr / 0.0d0 /, rerr / 1.0d-06 /, f / 0.0d0 /, f1 / 0.0d0 /
+
+  debug = .false.
+  if (debug) then
+    write (*,*) 'doeels:'
+    write (*,*) 'comment: ',  size(comment)
+    write (*,*) 'name: ',     size(name)
+    write (*,*) 'thick: ',    size(thick)
+    write (*,*) 'epsinf: ',   size(epsinf)
+    write (*,*) 'osc: ',      size(osc), size(osc, 1), size(osc, 2)
+    write (*,*) 'nos: ',      size(nos)
+    write (*,*) 'wn_array: ', size(wn_array)
+    write (*,*) 'f_array: ',  size(f_array)
+  endif
+
+! *** machine-dependent constants
+! *** epsmac + 1.0 = epsmac , cosh(argmin) = 1.0 , tanh(argmax) = 1.0
+
+  pi = 4 * datan(1.0d0)
+  epsmac = 1.0d0
+  do while (1.0d0 + epsmac > 1.0d0)
+    epsmac = epsmac / 2
+  enddo
+  argmin = dsqrt(2 * epsmac)
+  argmax = 0.5d0 * dlog(2 / epsmac)
+
+  dlimf = 0.0d0
+  rational = .false.
+
+! *** read target specifications
+
+  user = layers == 0
+  if (user) then
+
+    if (layers == 1) rational = .true.
+    if (contrl == 'image') then
+! *** image-charge screening factor
+      if (layers == 1 .and. neps == 2) then
+        dlimf = dsqrt(epsinf(1) * epsinf(2))
+      else
+        dlimf = epsinf(1)
+      endif
+      dlimf = (dlimf - 1.0d0) / (dlimf + 1.0d0)
+    endif
+  endif
+
+! *** initialize constants
+
+  lmax = size(thick)
+  nw = size(wn_array)
+  if (debug) write (*,*) 'lmax: ', lmax
+  allocate(eps(lmax))
+  if (debug) write (*,*) 'eps: ', size(eps)
+  nout = 1 + nw / 20
+  ener = 8065 * e0
+  psia = phia / 180 * pi
+  psii = theta / 180 * pi
+  cospsi = dcos(psii)
+  sinpsi = dsin(psii)
+  tanpsi = dtan(psii)
+  prefac = dsqrt(255500 / e0)/(137 * cospsi)
+  facru = psia / cospsi * dsqrt(0.2624664d0 * e0)
+  elleps = (1.0d0 - phia / phib) * (1.0d0 + phia / phib)
+  acoef = sinpsi**2 + elleps * cospsi**2
+  bcoef = sinpsi * cospsi
+  if (dlimf > 0.0d0) then
+    rational = .false.
+    if (debug) write(*,*) ' = > electron attracted by an image charge = ', dlimf
+! *** dlimf : half the length unit imposed by the image force
+    dlimf = 1.80d0 * dlimf/(e0 * cospsi**2)
+  endif
+  if (debug) write (*,*) 'rational: ', rational
+  if (rational) then
+
+! *** set up coefficients for the rational approximation to the integral
+
+    if (debug) write(*,*) ' = > set up a rational approximation to the integral'
+    call quanc8(fun, 0.0d0, pi / 2, aerr, rerr, alpha, c1, nofu, c2, eps, thick, layers, nper)
+    alpha  = (2 / pi)**2 * alpha
+    c1 = 2 / pi / dsqrt(1.0d0 - elleps) * sinpsi * alpha**2
+    if (c1 > 0.99d0) then
+      if (debug) write(*,*) ' ===> cannot do it'
+      rational = .false.
+    else
+      c2 = 3 * alpha**2 / (1.0d0 - c1)
+      c1 = c1 * c2
+      xmin = wmin / (2 * ener * psia)
+      xmax = wmax / (2 * ener * psia)
+      if (xmin <= 0.0d0) xmin = 0.0d0
+      dx = dmax1(0.02d0, (xmax - xmin) / nt)
+      z1 = 0.0d0
+      z2 = 0.0d0
+      do i = 1, nt
+        x = xmin + i * dx
+        call queels(x, f, aerr, rerr, facru, eps, thick, layers, nper)
+        table(i) = f
+        f = f * (1.0d0 + alpha * x)**2
+        if (dabs(c2 * f - c1) < c2 * rerr) cycle
+        z = (1.0d0 - f) / (c2 * f - c1)
+        if (z <= 0.0d0) cycle
+        z1 = z1 + x * z * (x**2 - z)
+        z2 = z2 + (x * z)**2
+      enddo
+      if (z2 == 0.0d0) then
+        if (debug) write(*,*) ' ===> cannot do it'
+        rational = .false.
+      else
+        beta = z1 / z2
+        z = 0.0d0
+        do i = 1, nt
+          x = xmin + i * dx
+          z = z + (table(i) - qrat(x, alpha, beta, c1, c2))**2
+        enddo
+        z = dsqrt(z) / nt
+        if (z > 5.0d-03) then
+          if (debug) write(*,*) ' ===> cannot do it'
+          rational = .false.
+        else
+          if (debug) write(*, 100) alpha, c1, c2, beta, z
+        endif ! z > 5.0d-03
+      endif ! z2 == 0.0d0
+    endif ! c1 > 0.99d0
+  endif ! rational
+
+! *** loop over the energy losses
+
+  if (debug) write(*, 110)
+  do iw = 1, nw
+    f0 = f1
+    f1 = f
+    f = 0.0d0
+    wn = wmin + (iw - 1) * dw
+!    if (debug) write (*,*) 'wn: ', wn
+    if (wn >= 0.0d0) then
+      if (wn /= 0.0d0) then
+        if (.not. user) call seteps(neps, nos, osc, epsinf, wn, name, eps, layers, mode)
+
+        x = wn / (2 * ener * psia)
+        if (rational) then
+          f = qrat(x, alpha, beta, c1, c2) * dimag(-2 / (1.0d0 + eps(1)))
+        else
+          call queels(x, f, aerr, rerr, facru, eps, thick, layers, nper)
+        endif
+        f = prefac * f / wn
+      endif ! wn /= 0.0d0
+
+      wn_array(iw) = wn
+      f_array(iw)  = f
+
+! *** localize a peak using a parabolic interpolation
+
+      if ((iw >= 3) .and. (f1 - f0 > aerr) .and. (f1 - f > aerr)) then
+        a = (f1 - f0) + (f1 - f)
+        if (a > 4 * rerr * f1) then
+          b = 0.5d0 * (f1 - f0 + 3 * (f1 - f))
+          t = b / a
+          wpic = wn - t * dw
+          fpic = f + 0.5d0 * b * t
+          widt = dsqrt(8 * fpic / a) * dw
+          if (debug) write(*, 120) wpic, fpic, widt
+        endif ! a > 4 * rerr * f1
+      endif ! iw >= 3 ...
+    endif ! wn >= 0.0d0
+    if (mod(iw, nout) == 0) then
+      if (debug) write(*, 130) 100 * iw / nw, wn, f
+    endif
+  enddo
+  return
+100 format(5x, 'alpha = ', f9.4, 4x, 'c1 = ', f9.4, 4x, 'c2 = ', f9.4, 4x,  &
+      'beta = ', f9.4/5x, 'accuracy = ', e9.2)
+110 format(//' run (%)  wn (cm**-1)  pcl(wn) (cm) |',  &
+      ' peak location  amplitude    width')
+120 format(40x, f10.2, d12.4, f10.2)
+130 format(2x, f5.1, 3x, f11.3, d14.5)
+end subroutine doeels
+subroutine change_working_dir()
+
+! This routine gets the first argument of the commandline and takes it
+! as the path to change the working directory
+! used intrinsic routines:
+! iarg returns the number of commandline arguments without the program cname.
+! chdir changes the directory and returns 0 on success.
+! trim removes blanks from strings.
+
+  character (len = 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'
+    end if
+  end if
+
+  return
+end subroutine change_working_dir
diff --git a/source/f90/fcat-analysis/eelsf90_fcat_output b/source/f90/fcat-analysis/eelsf90_fcat_output
new file mode 100644
index 0000000..9e9b62d
--- /dev/null
+++ b/source/f90/fcat-analysis/eelsf90_fcat_output
@@ -0,0 +1,1142 @@
+FCAT_eels_all_         1
+FCAT_eels_all_       692
+FCAT_eels_all_       702
+FCAT_eels_all_         2
+FCAT_eels_all_         3
+FCAT_eels_all_         4
+FCAT_eels_all_         5
+FCAT_eels_all_         6
+FCAT_eels_all_         7
+FCAT_eels_all_         8
+FCAT_eels_all_         9
+FCAT_eels_all_        10
+FCAT_eels_all_        11
+ program eels (September 2020)
+FCAT_eels_all_        12
+ e0 =   4.00 eV, theta =  60.0°, phia =  1.80°, phib =  1.80°
+FCAT_eels_all_        13
+ energy losses from  50.00     to  700.0    , step =   2.000     cm**-1
+FCAT_eels_all_        14
+ WFW: MnO layer on metal                                                 
+FCAT_eels_all_        15
+                                                                         
+FCAT_eels_all_        16
+FCAT_eels_all_        19
+FCAT_eels_all_        22
+FCAT_eels_all_        23
+FCAT_eels_all_        24
+FCAT_eels_all_        25
+FCAT_eels_all_        26
+FCAT_eels_all_        31
+FCAT_eels_all_        34
+  2 layer(s), nper =  1
+
+   l  material       thickness     epsinf    wto , wp     q       gam/wto
+FCAT_eels_all_        35
+FCAT_eels_all_        36
+FCAT_eels_all_        37
+FCAT_eels_all_        38
+FCAT_eels_all_        39
+FCAT_eels_all_        40
+FCAT_eels_all_        41
+FCAT_eels_all_        42
+ ------------------------------------------------------------------------
+FCAT_eels_all_        43
+FCAT_eels_all_        46
+FCAT_eels_all_        47
+FCAT_eels_all_        48
+FCAT_eels_all_        49
+FCAT_eels_all_        58
+FCAT_eels_all_        59
+FCAT_eels_all_        60
+FCAT_eels_all_        64
+FCAT_eels_all_        65
+FCAT_eels_all_        66
+   1  MnO              994.        4.9500    269.0000   16.0000   0.0500
+FCAT_eels_all_        73
+FCAT_eels_all_        74
+FCAT_eels_all_        75
+ ------------------------------------------------------------------------
+FCAT_eels_all_        50
+FCAT_eels_all_        51
+FCAT_eels_all_        52
+FCAT_eels_all_        53
+FCAT_eels_all_        54
+FCAT_eels_all_        55
+FCAT_eels_all_        56
+FCAT_eels_all_        57
+   2  Platinum        0.100E+04    8.9000 160000.0000   -1.0000   0.1200
+FCAT_eels_all_        76
+
+FCAT_eels_all_        77
+FCAT_eels_all_        78
+FCAT_eels_all_        79
+FCAT_eels_all_        80
+FCAT_eels_all_        81
+FCAT_eels_all_        82
+FCAT_eels_all_        83
+FCAT_eels_all_        84
+FCAT_eels_all_        85
+FCAT_eels_all_       548
+FCAT_eels_all_       549
+FCAT_eels_all_       560
+FCAT_eels_all_       561
+FCAT_eels_all_       562
+FCAT_eels_all_       563
+FCAT_eels_all_       564
+FCAT_eels_all_       565
+FCAT_eels_all_       566
+FCAT_eels_all_       567
+FCAT_eels_all_       568
+FCAT_eels_all_       569
+FCAT_eels_all_       570
+FCAT_eels_all_       581
+FCAT_eels_all_       582
+FCAT_eels_all_       583
+FCAT_eels_all_       584
+FCAT_eels_all_       585
+FCAT_eels_all_       586
+FCAT_eels_all_       587
+FCAT_eels_all_       588
+FCAT_eels_all_       589
+FCAT_eels_all_       590
+FCAT_eels_all_       591
+FCAT_eels_all_       592
+FCAT_eels_all_       593
+FCAT_eels_all_       594
+FCAT_eels_all_       595
+FCAT_eels_all_       596
+FCAT_eels_all_       597
+FCAT_eels_all_       598
+FCAT_eels_all_       603
+FCAT_eels_all_       604
+FCAT_eels_all_       652
+FCAT_eels_all_       653
+FCAT_eels_all_       654
+FCAT_eels_all_       655
+FCAT_eels_all_       656
+FCAT_eels_all_       657
+FCAT_eels_all_       658
+FCAT_eels_all_       659
+FCAT_eels_all_       660
+FCAT_eels_all_       510
+FCAT_eels_all_       511
+FCAT_eels_all_       512
+FCAT_eels_all_       513
+FCAT_eels_all_       514
+FCAT_eels_all_       515
+FCAT_eels_all_       525
+FCAT_eels_all_       526
+FCAT_eels_all_       527
+FCAT_eels_all_       528
+FCAT_eels_all_       529
+FCAT_eels_all_       530
+FCAT_eels_all_       531
+FCAT_eels_all_       532
+FCAT_eels_all_       533
+FCAT_eels_all_       534
+FCAT_eels_all_       537
+FCAT_eels_all_       538
+FCAT_eels_all_       539
+FCAT_eels_all_       540
+FCAT_eels_all_       541
+FCAT_eels_all_       547
+FCAT_eels_all_       661
+FCAT_eels_all_       662
+FCAT_eels_all_       664
+FCAT_eels_all_       665
+FCAT_eels_all_       467
+FCAT_eels_all_       468
+FCAT_eels_all_       471
+FCAT_eels_all_       472
+FCAT_eels_all_       473
+FCAT_eels_all_       474
+FCAT_eels_all_       475
+FCAT_eels_all_       476
+FCAT_eels_all_       477
+FCAT_eels_all_       351
+FCAT_eels_all_       352
+FCAT_eels_all_       353
+FCAT_eels_all_       354
+FCAT_eels_all_       355
+FCAT_eels_all_       356
+FCAT_eels_all_       357
+FCAT_eels_all_       358
+FCAT_eels_all_       359
+FCAT_eels_all_       360
+FCAT_eels_all_       361
+FCAT_eels_all_       362
+FCAT_eels_all_       363
+FCAT_eels_all_       364
+FCAT_eels_all_       365
+FCAT_eels_all_       366
+FCAT_eels_all_       367
+FCAT_eels_all_       368
+FCAT_eels_all_       369
+FCAT_eels_all_       370
+FCAT_eels_all_       371
+FCAT_eels_all_       372
+FCAT_eels_all_       373
+FCAT_eels_all_       266
+FCAT_eels_all_       267
+FCAT_eels_all_       268
+FCAT_eels_all_       374
+FCAT_eels_all_       375
+FCAT_eels_all_       376
+FCAT_eels_all_       377
+FCAT_eels_all_       378
+FCAT_eels_all_       379
+FCAT_eels_all_       380
+FCAT_eels_all_       381
+FCAT_eels_all_       382
+FCAT_eels_all_       383
+FCAT_eels_all_       270
+FCAT_eels_all_       271
+FCAT_eels_all_       272
+FCAT_eels_all_       273
+FCAT_eels_all_       274
+FCAT_eels_all_       275
+FCAT_eels_all_       276
+FCAT_eels_all_       277
+FCAT_eels_all_       278
+FCAT_eels_all_       279
+FCAT_eels_all_       280
+FCAT_eels_all_       283
+FCAT_eels_all_       285
+FCAT_eels_all_       286
+FCAT_eels_all_       107
+FCAT_eels_all_       108
+FCAT_eels_all_       109
+FCAT_eels_all_       110
+FCAT_eels_all_       111
+FCAT_eels_all_       112
+FCAT_eels_all_       113
+FCAT_eels_all_       114
+FCAT_eels_all_       119
+FCAT_eels_all_       120
+FCAT_eels_all_       121
+FCAT_eels_all_       122
+FCAT_eels_all_       123
+FCAT_eels_all_       124
+FCAT_eels_all_       197
+FCAT_eels_all_       198
+FCAT_eels_all_       200
+FCAT_eels_all_       201
+FCAT_eels_all_       202
+FCAT_eels_all_       203
+FCAT_eels_all_       212
+FCAT_eels_all_       213
+FCAT_eels_all_       214
+FCAT_eels_all_       215
+FCAT_eels_all_       219
+FCAT_eels_all_       220
+FCAT_eels_all_       221
+FCAT_eels_all_       204
+FCAT_eels_all_       205
+FCAT_eels_all_       207
+FCAT_eels_all_       208
+FCAT_eels_all_       209
+FCAT_eels_all_       210
+FCAT_eels_all_       287
+FCAT_eels_all_       291
+FCAT_eels_all_       292
+FCAT_eels_all_       384
+FCAT_eels_all_       385
+FCAT_eels_all_       386
+FCAT_eels_all_       387
+FCAT_eels_all_       388
+FCAT_eels_all_       389
+FCAT_eels_all_       390
+FCAT_eels_all_       391
+FCAT_eels_all_       392
+FCAT_eels_all_       393
+FCAT_eels_all_       394
+FCAT_eels_all_       395
+FCAT_eels_all_       396
+FCAT_eels_all_       397
+FCAT_eels_all_       398
+FCAT_eels_all_       399
+FCAT_eels_all_       400
+FCAT_eels_all_       401
+FCAT_eels_all_       402
+FCAT_eels_all_       444
+FCAT_eels_all_       445
+FCAT_eels_all_       446
+FCAT_eels_all_       447
+FCAT_eels_all_       448
+FCAT_eels_all_       449
+FCAT_eels_all_       450
+FCAT_eels_all_       451
+FCAT_eels_all_       452
+FCAT_eels_all_       453
+FCAT_eels_all_       454
+FCAT_eels_all_       455
+FCAT_eels_all_       456
+FCAT_eels_all_       457
+FCAT_eels_all_       403
+FCAT_eels_all_       405
+FCAT_eels_all_       406
+FCAT_eels_all_       410
+FCAT_eels_all_       411
+FCAT_eels_all_       412
+FCAT_eels_all_       413
+FCAT_eels_all_       414
+FCAT_eels_all_       415
+FCAT_eels_all_       416
+FCAT_eels_all_       417
+FCAT_eels_all_       418
+FCAT_eels_all_       419
+FCAT_eels_all_       420
+FCAT_eels_all_       421
+FCAT_eels_all_       422
+FCAT_eels_all_       423
+FCAT_eels_all_       425
+FCAT_eels_all_       426
+FCAT_eels_all_       427
+FCAT_eels_all_       428
+FCAT_eels_all_       429
+FCAT_eels_all_       430
+FCAT_eels_all_       434
+FCAT_eels_all_       435
+FCAT_eels_all_       436
+FCAT_eels_all_       437
+FCAT_eels_all_       438
+FCAT_eels_all_       439
+FCAT_eels_all_       440
+FCAT_eels_all_       441
+FCAT_eels_all_       442
+FCAT_eels_all_       443
+FCAT_eels_all_       431
+FCAT_eels_all_       432
+FCAT_eels_all_       433
+FCAT_eels_all_       458
+FCAT_eels_all_       459
+FCAT_eels_all_       460
+FCAT_eels_all_       461
+FCAT_eels_all_       465
+FCAT_eels_all_       466
+FCAT_eels_all_       478
+FCAT_eels_all_       482
+FCAT_eels_all_       483
+FCAT_eels_all_       293
+FCAT_eels_all_       297
+FCAT_eels_all_       298
+FCAT_eels_all_       299
+FCAT_eels_all_       300
+FCAT_eels_all_       305
+FCAT_eels_all_       306
+FCAT_eels_all_       309
+FCAT_eels_all_       310
+FCAT_eels_all_       222
+FCAT_eels_all_       223
+FCAT_eels_all_       224
+FCAT_eels_all_       225
+FCAT_eels_all_       226
+FCAT_eels_all_       227
+FCAT_eels_all_       231
+FCAT_eels_all_       232
+FCAT_eels_all_       233
+FCAT_eels_all_       234
+FCAT_eels_all_       235
+FCAT_eels_all_       236
+FCAT_eels_all_       237
+FCAT_eels_all_       238
+FCAT_eels_all_       239
+FCAT_eels_all_       240
+FCAT_eels_all_       245
+FCAT_eels_all_       256
+FCAT_eels_all_       257
+FCAT_eels_all_       258
+FCAT_eels_all_       259
+FCAT_eels_all_       260
+FCAT_eels_all_       261
+FCAT_eels_all_       262
+FCAT_eels_all_       263
+FCAT_eels_all_       264
+FCAT_eels_all_       265
+FCAT_eels_all_       311
+FCAT_eels_all_       314
+FCAT_eels_all_       316
+FCAT_eels_all_       317
+FCAT_eels_all_       318
+FCAT_eels_all_       322
+FCAT_eels_all_       323
+FCAT_eels_all_       242
+FCAT_eels_all_       243
+FCAT_eels_all_       244
+FCAT_eels_all_       246
+FCAT_eels_all_       247
+FCAT_eels_all_       248
+FCAT_eels_all_       249
+FCAT_eels_all_       250
+FCAT_eels_all_       251
+FCAT_eels_all_       252
+FCAT_eels_all_       253
+FCAT_eels_all_       254
+FCAT_eels_all_       255
+FCAT_eels_all_       484
+FCAT_eels_all_       488
+FCAT_eels_all_       489
+FCAT_eels_all_       490
+FCAT_eels_all_       491
+FCAT_eels_all_       324
+FCAT_eels_all_       328
+FCAT_eels_all_       329
+FCAT_eels_all_       330
+FCAT_eels_all_       331
+FCAT_eels_all_       332
+FCAT_eels_all_       333
+FCAT_eels_all_       334
+FCAT_eels_all_       335
+FCAT_eels_all_       336
+FCAT_eels_all_       241
+FCAT_eels_all_       337
+FCAT_eels_all_       338
+FCAT_eels_all_       340
+FCAT_eels_all_       341
+FCAT_eels_all_       342
+FCAT_eels_all_       346
+FCAT_eels_all_       347
+FCAT_eels_all_       115
+FCAT_eels_all_       116
+FCAT_eels_all_       117
+FCAT_eels_all_       492
+FCAT_eels_all_       493
+FCAT_eels_all_       494
+FCAT_eels_all_       501
+FCAT_eels_all_       502
+FCAT_eels_all_       508
+FCAT_eels_all_       509
+FCAT_eels_all_       666
+FCAT_eels_all_       667
+FCAT_eels_all_       668
+FCAT_eels_all_       669
+FCAT_eels_all_       670
+FCAT_eels_all_       671
+FCAT_eels_all_       682
+FCAT_eels_all_       683
+FCAT_eels_all_       686
+FCAT_eels_all_       672
+FCAT_eels_all_       673
+FCAT_eels_all_       674
+FCAT_eels_all_       675
+FCAT_eels_all_       676
+FCAT_eels_all_       677
+FCAT_eels_all_       678
+FCAT_eels_all_       679
+FCAT_eels_all_       680
+FCAT_eels_all_       681
+FCAT_eels_all_       684
+FCAT_eels_all_       685
+FCAT_eels_all_       307
+FCAT_eels_all_       308
+FCAT_eels_all_       687
+FCAT_eels_all_        86
+FCAT_eels_all_        87
+FCAT_eels_all_        88
+FCAT_eels_all_        89
+FCAT_eels_all_        90
+FCAT_eels_all_        91
+FCAT_eels_all_        92
+FCAT_eels_all_count         1         1
+FCAT_eels_all_count         2         1
+FCAT_eels_all_count         3         1
+FCAT_eels_all_count         4         1
+FCAT_eels_all_count         5         1
+FCAT_eels_all_count         6         1
+FCAT_eels_all_count         7         1
+FCAT_eels_all_count         8         1
+FCAT_eels_all_count         9         1
+FCAT_eels_all_count        10         1
+FCAT_eels_all_count        11         1
+FCAT_eels_all_count        12         1
+FCAT_eels_all_count        13         1
+FCAT_eels_all_count        14         1
+FCAT_eels_all_count        15         1
+FCAT_eels_all_count        16         1
+FCAT_eels_all_count        17         0
+FCAT_eels_all_count        18         0
+FCAT_eels_all_count        19         1
+FCAT_eels_all_count        20         0
+FCAT_eels_all_count        21         0
+FCAT_eels_all_count        22         1
+FCAT_eels_all_count        23         1
+FCAT_eels_all_count        24         1
+FCAT_eels_all_count        25         1
+FCAT_eels_all_count        26         1
+FCAT_eels_all_count        27         0
+FCAT_eels_all_count        28         0
+FCAT_eels_all_count        29         0
+FCAT_eels_all_count        30         0
+FCAT_eels_all_count        31         1
+FCAT_eels_all_count        32         0
+FCAT_eels_all_count        33         0
+FCAT_eels_all_count        34         1
+FCAT_eels_all_count        35         1
+FCAT_eels_all_count        36         1
+FCAT_eels_all_count        37         1
+FCAT_eels_all_count        38         2
+FCAT_eels_all_count        39         2
+FCAT_eels_all_count        40         2
+FCAT_eels_all_count        41         2
+FCAT_eels_all_count        42         2
+FCAT_eels_all_count        43         2
+FCAT_eels_all_count        44         0
+FCAT_eels_all_count        45         0
+FCAT_eels_all_count        46         2
+FCAT_eels_all_count        47         2
+FCAT_eels_all_count        48         2
+FCAT_eels_all_count        49         1
+FCAT_eels_all_count        50         1
+FCAT_eels_all_count        51         1
+FCAT_eels_all_count        52         1
+FCAT_eels_all_count        53         1
+FCAT_eels_all_count        54         1
+FCAT_eels_all_count        55         1
+FCAT_eels_all_count        56         1
+FCAT_eels_all_count        57         1
+FCAT_eels_all_count        58         2
+FCAT_eels_all_count        59         2
+FCAT_eels_all_count        60         2
+FCAT_eels_all_count        61         0
+FCAT_eels_all_count        62         0
+FCAT_eels_all_count        63         0
+FCAT_eels_all_count        64         2
+FCAT_eels_all_count        65         2
+FCAT_eels_all_count        66         2
+FCAT_eels_all_count        67         0
+FCAT_eels_all_count        68         0
+FCAT_eels_all_count        69         0
+FCAT_eels_all_count        70         0
+FCAT_eels_all_count        71         0
+FCAT_eels_all_count        72         0
+FCAT_eels_all_count        73         2
+FCAT_eels_all_count        74         2
+FCAT_eels_all_count        75         2
+FCAT_eels_all_count        76         1
+FCAT_eels_all_count        77         1
+FCAT_eels_all_count        78         1
+FCAT_eels_all_count        79         1
+FCAT_eels_all_count        80         1
+FCAT_eels_all_count        81         1
+FCAT_eels_all_count        82         1
+FCAT_eels_all_count        83         1
+FCAT_eels_all_count        84         1
+FCAT_eels_all_count        85         1
+FCAT_eels_all_count        86         1
+FCAT_eels_all_count        87         1
+FCAT_eels_all_count        88         1
+FCAT_eels_all_count        89       326
+FCAT_eels_all_count        90       326
+FCAT_eels_all_count        91         1
+FCAT_eels_all_count        92         1
+FCAT_eels_all_count        93         0
+FCAT_eels_all_count        94         0
+FCAT_eels_all_count        95         0
+FCAT_eels_all_count        96         0
+FCAT_eels_all_count        97         0
+FCAT_eels_all_count        98         0
+FCAT_eels_all_count        99         0
+FCAT_eels_all_count       100         0
+FCAT_eels_all_count       101         0
+FCAT_eels_all_count       102         0
+FCAT_eels_all_count       103         0
+FCAT_eels_all_count       104         0
+FCAT_eels_all_count       105         0
+FCAT_eels_all_count       106         0
+FCAT_eels_all_count       107     40156
+FCAT_eels_all_count       108     40156
+FCAT_eels_all_count       109     40156
+FCAT_eels_all_count       110     40156
+FCAT_eels_all_count       111     40156
+FCAT_eels_all_count       112     40156
+FCAT_eels_all_count       113     63246
+FCAT_eels_all_count       114     63246
+FCAT_eels_all_count       115     17169
+FCAT_eels_all_count       116     17169
+FCAT_eels_all_count       117     17169
+FCAT_eels_all_count       118         0
+FCAT_eels_all_count       119     46077
+FCAT_eels_all_count       120     46077
+FCAT_eels_all_count       121     40156
+FCAT_eels_all_count       122     22987
+FCAT_eels_all_count       123     22987
+FCAT_eels_all_count       124     22987
+FCAT_eels_all_count       125         0
+FCAT_eels_all_count       126         0
+FCAT_eels_all_count       127         0
+FCAT_eels_all_count       128         0
+FCAT_eels_all_count       129         0
+FCAT_eels_all_count       130         0
+FCAT_eels_all_count       131         0
+FCAT_eels_all_count       132         0
+FCAT_eels_all_count       133         0
+FCAT_eels_all_count       134         0
+FCAT_eels_all_count       135         0
+FCAT_eels_all_count       136         0
+FCAT_eels_all_count       137         0
+FCAT_eels_all_count       138         0
+FCAT_eels_all_count       139         0
+FCAT_eels_all_count       140         0
+FCAT_eels_all_count       141         0
+FCAT_eels_all_count       142         0
+FCAT_eels_all_count       143         0
+FCAT_eels_all_count       144         0
+FCAT_eels_all_count       145         0
+FCAT_eels_all_count       146         0
+FCAT_eels_all_count       147         0
+FCAT_eels_all_count       148         0
+FCAT_eels_all_count       149         0
+FCAT_eels_all_count       150         0
+FCAT_eels_all_count       151         0
+FCAT_eels_all_count       152         0
+FCAT_eels_all_count       153         0
+FCAT_eels_all_count       154         0
+FCAT_eels_all_count       155         0
+FCAT_eels_all_count       156         0
+FCAT_eels_all_count       157         0
+FCAT_eels_all_count       158         0
+FCAT_eels_all_count       159         0
+FCAT_eels_all_count       160         0
+FCAT_eels_all_count       161         0
+FCAT_eels_all_count       162         0
+FCAT_eels_all_count       163         0
+FCAT_eels_all_count       164         0
+FCAT_eels_all_count       165         0
+FCAT_eels_all_count       166         0
+FCAT_eels_all_count       167         0
+FCAT_eels_all_count       168         0
+FCAT_eels_all_count       169         0
+FCAT_eels_all_count       170         0
+FCAT_eels_all_count       171         0
+FCAT_eels_all_count       172         0
+FCAT_eels_all_count       173         0
+FCAT_eels_all_count       174         0
+FCAT_eels_all_count       175         0
+FCAT_eels_all_count       176         0
+FCAT_eels_all_count       177         0
+FCAT_eels_all_count       178         0
+FCAT_eels_all_count       179         0
+FCAT_eels_all_count       180         0
+FCAT_eels_all_count       181         0
+FCAT_eels_all_count       182         0
+FCAT_eels_all_count       183         0
+FCAT_eels_all_count       184         0
+FCAT_eels_all_count       185         0
+FCAT_eels_all_count       186         0
+FCAT_eels_all_count       187         0
+FCAT_eels_all_count       188         0
+FCAT_eels_all_count       189         0
+FCAT_eels_all_count       190         0
+FCAT_eels_all_count       191         0
+FCAT_eels_all_count       192         0
+FCAT_eels_all_count       193         0
+FCAT_eels_all_count       194         0
+FCAT_eels_all_count       195         0
+FCAT_eels_all_count       196         0
+FCAT_eels_all_count       197     22987
+FCAT_eels_all_count       198     22987
+FCAT_eels_all_count       199         0
+FCAT_eels_all_count       200     22987
+FCAT_eels_all_count       201     40156
+FCAT_eels_all_count       202     63246
+FCAT_eels_all_count       203     63246
+FCAT_eels_all_count       204     40156
+FCAT_eels_all_count       205     40156
+FCAT_eels_all_count       206         0
+FCAT_eels_all_count       207     40156
+FCAT_eels_all_count       208     40156
+FCAT_eels_all_count       209     40156
+FCAT_eels_all_count       210     40156
+FCAT_eels_all_count       211         0
+FCAT_eels_all_count       212     23090
+FCAT_eels_all_count       213     23090
+FCAT_eels_all_count       214     23090
+FCAT_eels_all_count       215     23090
+FCAT_eels_all_count       216         0
+FCAT_eels_all_count       217         0
+FCAT_eels_all_count       218         0
+FCAT_eels_all_count       219     23090
+FCAT_eels_all_count       220     23090
+FCAT_eels_all_count       221     23090
+FCAT_eels_all_count       222     41010
+FCAT_eels_all_count       223     41010
+FCAT_eels_all_count       224     41010
+FCAT_eels_all_count       225     41010
+FCAT_eels_all_count       226     41010
+FCAT_eels_all_count       227     41010
+FCAT_eels_all_count       228         0
+FCAT_eels_all_count       229         0
+FCAT_eels_all_count       230         0
+FCAT_eels_all_count       231     41010
+FCAT_eels_all_count       232     41010
+FCAT_eels_all_count       233     41010
+FCAT_eels_all_count       234     41010
+FCAT_eels_all_count       235     41010
+FCAT_eels_all_count       236     41010
+FCAT_eels_all_count       237     41010
+FCAT_eels_all_count       238     41010
+FCAT_eels_all_count       239     41010
+FCAT_eels_all_count       240     41010
+FCAT_eels_all_count       241     20833
+FCAT_eels_all_count       242     19851
+FCAT_eels_all_count       243     19851
+FCAT_eels_all_count       244     19851
+FCAT_eels_all_count       245     41010
+FCAT_eels_all_count       246     40684
+FCAT_eels_all_count       247     40684
+FCAT_eels_all_count       248     40684
+FCAT_eels_all_count       249     40684
+FCAT_eels_all_count       250     40684
+FCAT_eels_all_count       251     40684
+FCAT_eels_all_count       252     40684
+FCAT_eels_all_count       253     40684
+FCAT_eels_all_count       254     40684
+FCAT_eels_all_count       255     40684
+FCAT_eels_all_count       256       326
+FCAT_eels_all_count       257       326
+FCAT_eels_all_count       258       326
+FCAT_eels_all_count       259       326
+FCAT_eels_all_count       260       326
+FCAT_eels_all_count       261       326
+FCAT_eels_all_count       262     41010
+FCAT_eels_all_count       263     41010
+FCAT_eels_all_count       264     41010
+FCAT_eels_all_count       265     41010
+FCAT_eels_all_count       266     14598
+FCAT_eels_all_count       267       326
+FCAT_eels_all_count       268       326
+FCAT_eels_all_count       269         0
+FCAT_eels_all_count       270     14272
+FCAT_eels_all_count       271     14272
+FCAT_eels_all_count       272     14272
+FCAT_eels_all_count       273     14272
+FCAT_eels_all_count       274     14272
+FCAT_eels_all_count       275     14272
+FCAT_eels_all_count       276     14272
+FCAT_eels_all_count       277     14272
+FCAT_eels_all_count       278     14272
+FCAT_eels_all_count       279     14272
+FCAT_eels_all_count       280     14272
+FCAT_eels_all_count       281         0
+FCAT_eels_all_count       282         0
+FCAT_eels_all_count       283     14272
+FCAT_eels_all_count       284         0
+FCAT_eels_all_count       285     14272
+FCAT_eels_all_count       286     14272
+FCAT_eels_all_count       287     14272
+FCAT_eels_all_count       288         0
+FCAT_eels_all_count       289         0
+FCAT_eels_all_count       290         0
+FCAT_eels_all_count       291     14272
+FCAT_eels_all_count       292     14272
+FCAT_eels_all_count       293     10758
+FCAT_eels_all_count       294         0
+FCAT_eels_all_count       295         0
+FCAT_eels_all_count       296         0
+FCAT_eels_all_count       297     10758
+FCAT_eels_all_count       298     10758
+FCAT_eels_all_count       299     10758
+FCAT_eels_all_count       300     10758
+FCAT_eels_all_count       301         0
+FCAT_eels_all_count       302         0
+FCAT_eels_all_count       303         0
+FCAT_eels_all_count       304         0
+FCAT_eels_all_count       305     10758
+FCAT_eels_all_count       306     10758
+FCAT_eels_all_count       307        74
+FCAT_eels_all_count       308        74
+FCAT_eels_all_count       309     10758
+FCAT_eels_all_count       310     10758
+FCAT_eels_all_count       311     10758
+FCAT_eels_all_count       312         0
+FCAT_eels_all_count       313         0
+FCAT_eels_all_count       314     10758
+FCAT_eels_all_count       315         0
+FCAT_eels_all_count       316     10758
+FCAT_eels_all_count       317     10758
+FCAT_eels_all_count       318     10758
+FCAT_eels_all_count       319         0
+FCAT_eels_all_count       320         0
+FCAT_eels_all_count       321         0
+FCAT_eels_all_count       322     10758
+FCAT_eels_all_count       323     10758
+FCAT_eels_all_count       324     15126
+FCAT_eels_all_count       325         0
+FCAT_eels_all_count       326         0
+FCAT_eels_all_count       327         0
+FCAT_eels_all_count       328     15126
+FCAT_eels_all_count       329     15126
+FCAT_eels_all_count       330     15126
+FCAT_eels_all_count       331     15126
+FCAT_eels_all_count       332     15126
+FCAT_eels_all_count       333     15126
+FCAT_eels_all_count       334     15126
+FCAT_eels_all_count       335     15126
+FCAT_eels_all_count       336     15126
+FCAT_eels_all_count       337     15126
+FCAT_eels_all_count       338     15126
+FCAT_eels_all_count       339         0
+FCAT_eels_all_count       340     15126
+FCAT_eels_all_count       341     15126
+FCAT_eels_all_count       342     15126
+FCAT_eels_all_count       343         0
+FCAT_eels_all_count       344         0
+FCAT_eels_all_count       345         0
+FCAT_eels_all_count       346     15126
+FCAT_eels_all_count       347     15126
+FCAT_eels_all_count       348         0
+FCAT_eels_all_count       349         0
+FCAT_eels_all_count       350         0
+FCAT_eels_all_count       351       978
+FCAT_eels_all_count       352       978
+FCAT_eels_all_count       353       978
+FCAT_eels_all_count       354       978
+FCAT_eels_all_count       355       978
+FCAT_eels_all_count       356       978
+FCAT_eels_all_count       357       978
+FCAT_eels_all_count       358       978
+FCAT_eels_all_count       359       978
+FCAT_eels_all_count       360       978
+FCAT_eels_all_count       361       978
+FCAT_eels_all_count       362       978
+FCAT_eels_all_count       363       978
+FCAT_eels_all_count       364       978
+FCAT_eels_all_count       365       978
+FCAT_eels_all_count       366       978
+FCAT_eels_all_count       367       978
+FCAT_eels_all_count       368       978
+FCAT_eels_all_count       369       978
+FCAT_eels_all_count       370       978
+FCAT_eels_all_count       371       978
+FCAT_eels_all_count       372       978
+FCAT_eels_all_count       373       978
+FCAT_eels_all_count       374       978
+FCAT_eels_all_count       375       978
+FCAT_eels_all_count       376       978
+FCAT_eels_all_count       377       978
+FCAT_eels_all_count       378       978
+FCAT_eels_all_count       379       978
+FCAT_eels_all_count       380       978
+FCAT_eels_all_count       381       978
+FCAT_eels_all_count       382       978
+FCAT_eels_all_count       383      7824
+FCAT_eels_all_count       384      7824
+FCAT_eels_all_count       385       978
+FCAT_eels_all_count       386       978
+FCAT_eels_all_count       387      3960
+FCAT_eels_all_count       388      3960
+FCAT_eels_all_count       389      3960
+FCAT_eels_all_count       390     27720
+FCAT_eels_all_count       391     27720
+FCAT_eels_all_count       392     27720
+FCAT_eels_all_count       393      3960
+FCAT_eels_all_count       394      3960
+FCAT_eels_all_count       395      3960
+FCAT_eels_all_count       396      3960
+FCAT_eels_all_count       397      3960
+FCAT_eels_all_count       398      3960
+FCAT_eels_all_count       399      3960
+FCAT_eels_all_count       400      3960
+FCAT_eels_all_count       401      3960
+FCAT_eels_all_count       402      3960
+FCAT_eels_all_count       403      2982
+FCAT_eels_all_count       404         0
+FCAT_eels_all_count       405      2982
+FCAT_eels_all_count       406      2982
+FCAT_eels_all_count       407         0
+FCAT_eels_all_count       408         0
+FCAT_eels_all_count       409         0
+FCAT_eels_all_count       410      2982
+FCAT_eels_all_count       411      2982
+FCAT_eels_all_count       412       513
+FCAT_eels_all_count       413       513
+FCAT_eels_all_count       414       513
+FCAT_eels_all_count       415      4104
+FCAT_eels_all_count       416      4104
+FCAT_eels_all_count       417      4104
+FCAT_eels_all_count       418       513
+FCAT_eels_all_count       419       513
+FCAT_eels_all_count       420      4104
+FCAT_eels_all_count       421      4104
+FCAT_eels_all_count       422      4104
+FCAT_eels_all_count       423       513
+FCAT_eels_all_count       424         0
+FCAT_eels_all_count       425      2469
+FCAT_eels_all_count       426      2469
+FCAT_eels_all_count       427      2469
+FCAT_eels_all_count       428      2469
+FCAT_eels_all_count       429      2469
+FCAT_eels_all_count       430      2469
+FCAT_eels_all_count       431      2469
+FCAT_eels_all_count       432      2469
+FCAT_eels_all_count       433      2469
+FCAT_eels_all_count       434      2469
+FCAT_eels_all_count       435      2469
+FCAT_eels_all_count       436      1491
+FCAT_eels_all_count       437      1491
+FCAT_eels_all_count       438      1491
+FCAT_eels_all_count       439      1491
+FCAT_eels_all_count       440     11928
+FCAT_eels_all_count       441     11928
+FCAT_eels_all_count       442     11928
+FCAT_eels_all_count       443      1491
+FCAT_eels_all_count       444       978
+FCAT_eels_all_count       445       978
+FCAT_eels_all_count       446       978
+FCAT_eels_all_count       447       978
+FCAT_eels_all_count       448      7824
+FCAT_eels_all_count       449      7824
+FCAT_eels_all_count       450      7824
+FCAT_eels_all_count       451       978
+FCAT_eels_all_count       452       978
+FCAT_eels_all_count       453      7824
+FCAT_eels_all_count       454      7824
+FCAT_eels_all_count       455      7824
+FCAT_eels_all_count       456       978
+FCAT_eels_all_count       457       978
+FCAT_eels_all_count       458       978
+FCAT_eels_all_count       459       978
+FCAT_eels_all_count       460       978
+FCAT_eels_all_count       461       978
+FCAT_eels_all_count       462         0
+FCAT_eels_all_count       463         0
+FCAT_eels_all_count       464         0
+FCAT_eels_all_count       465       978
+FCAT_eels_all_count       466       978
+FCAT_eels_all_count       467       326
+FCAT_eels_all_count       468       326
+FCAT_eels_all_count       469         0
+FCAT_eels_all_count       470         0
+FCAT_eels_all_count       471       326
+FCAT_eels_all_count       472       326
+FCAT_eels_all_count       473       326
+FCAT_eels_all_count       474       326
+FCAT_eels_all_count       475       326
+FCAT_eels_all_count       476       326
+FCAT_eels_all_count       477       326
+FCAT_eels_all_count       478       326
+FCAT_eels_all_count       479         0
+FCAT_eels_all_count       480         0
+FCAT_eels_all_count       481         0
+FCAT_eels_all_count       482       326
+FCAT_eels_all_count       483       326
+FCAT_eels_all_count       484       326
+FCAT_eels_all_count       485         0
+FCAT_eels_all_count       486         0
+FCAT_eels_all_count       487         0
+FCAT_eels_all_count       488       326
+FCAT_eels_all_count       489       326
+FCAT_eels_all_count       490       326
+FCAT_eels_all_count       491       326
+FCAT_eels_all_count       492       326
+FCAT_eels_all_count       493       326
+FCAT_eels_all_count       494       326
+FCAT_eels_all_count       495         0
+FCAT_eels_all_count       496         0
+FCAT_eels_all_count       497         0
+FCAT_eels_all_count       498         0
+FCAT_eels_all_count       499         0
+FCAT_eels_all_count       500         0
+FCAT_eels_all_count       501       326
+FCAT_eels_all_count       502       978
+FCAT_eels_all_count       503         0
+FCAT_eels_all_count       504         0
+FCAT_eels_all_count       505         0
+FCAT_eels_all_count       506         0
+FCAT_eels_all_count       507         0
+FCAT_eels_all_count       508       326
+FCAT_eels_all_count       509       326
+FCAT_eels_all_count       510       326
+FCAT_eels_all_count       511       326
+FCAT_eels_all_count       512       652
+FCAT_eels_all_count       513       652
+FCAT_eels_all_count       514       652
+FCAT_eels_all_count       515       652
+FCAT_eels_all_count       516         0
+FCAT_eels_all_count       517         0
+FCAT_eels_all_count       518         0
+FCAT_eels_all_count       519         0
+FCAT_eels_all_count       520         0
+FCAT_eels_all_count       521         0
+FCAT_eels_all_count       522         0
+FCAT_eels_all_count       523         0
+FCAT_eels_all_count       524         0
+FCAT_eels_all_count       525       652
+FCAT_eels_all_count       526       652
+FCAT_eels_all_count       527       652
+FCAT_eels_all_count       528       652
+FCAT_eels_all_count       529       652
+FCAT_eels_all_count       530       652
+FCAT_eels_all_count       531       652
+FCAT_eels_all_count       532       326
+FCAT_eels_all_count       533       326
+FCAT_eels_all_count       534       652
+FCAT_eels_all_count       535         0
+FCAT_eels_all_count       536         0
+FCAT_eels_all_count       537       652
+FCAT_eels_all_count       538       652
+FCAT_eels_all_count       539       652
+FCAT_eels_all_count       540       652
+FCAT_eels_all_count       541       326
+FCAT_eels_all_count       542         0
+FCAT_eels_all_count       543         0
+FCAT_eels_all_count       544         0
+FCAT_eels_all_count       545         0
+FCAT_eels_all_count       546         0
+FCAT_eels_all_count       547       326
+FCAT_eels_all_count       548         1
+FCAT_eels_all_count       549         1
+FCAT_eels_all_count       550         0
+FCAT_eels_all_count       551         0
+FCAT_eels_all_count       552         0
+FCAT_eels_all_count       553         0
+FCAT_eels_all_count       554         0
+FCAT_eels_all_count       555         0
+FCAT_eels_all_count       556         0
+FCAT_eels_all_count       557         0
+FCAT_eels_all_count       558         0
+FCAT_eels_all_count       559         0
+FCAT_eels_all_count       560         1
+FCAT_eels_all_count       561         1
+FCAT_eels_all_count       562         1
+FCAT_eels_all_count       563        53
+FCAT_eels_all_count       564        53
+FCAT_eels_all_count       565         1
+FCAT_eels_all_count       566         1
+FCAT_eels_all_count       567         1
+FCAT_eels_all_count       568         1
+FCAT_eels_all_count       569         1
+FCAT_eels_all_count       570         1
+FCAT_eels_all_count       571         0
+FCAT_eels_all_count       572         0
+FCAT_eels_all_count       573         0
+FCAT_eels_all_count       574         0
+FCAT_eels_all_count       575         0
+FCAT_eels_all_count       576         0
+FCAT_eels_all_count       577         0
+FCAT_eels_all_count       578         0
+FCAT_eels_all_count       579         0
+FCAT_eels_all_count       580         0
+FCAT_eels_all_count       581         1
+FCAT_eels_all_count       582         1
+FCAT_eels_all_count       583         1
+FCAT_eels_all_count       584         1
+FCAT_eels_all_count       585         1
+FCAT_eels_all_count       586         1
+FCAT_eels_all_count       587         1
+FCAT_eels_all_count       588         1
+FCAT_eels_all_count       589         1
+FCAT_eels_all_count       590         1
+FCAT_eels_all_count       591         1
+FCAT_eels_all_count       592         1
+FCAT_eels_all_count       593         1
+FCAT_eels_all_count       594         1
+FCAT_eels_all_count       595         1
+FCAT_eels_all_count       596         1
+FCAT_eels_all_count       597         1
+FCAT_eels_all_count       598         1
+FCAT_eels_all_count       599         0
+FCAT_eels_all_count       600         0
+FCAT_eels_all_count       601         0
+FCAT_eels_all_count       602         0
+FCAT_eels_all_count       603         1
+FCAT_eels_all_count       604         1
+FCAT_eels_all_count       605         0
+FCAT_eels_all_count       606         0
+FCAT_eels_all_count       607         0
+FCAT_eels_all_count       608         0
+FCAT_eels_all_count       609         0
+FCAT_eels_all_count       610         0
+FCAT_eels_all_count       611         0
+FCAT_eels_all_count       612         0
+FCAT_eels_all_count       613         0
+FCAT_eels_all_count       614         0
+FCAT_eels_all_count       615         0
+FCAT_eels_all_count       616         0
+FCAT_eels_all_count       617         0
+FCAT_eels_all_count       618         0
+FCAT_eels_all_count       619         0
+FCAT_eels_all_count       620         0
+FCAT_eels_all_count       621         0
+FCAT_eels_all_count       622         0
+FCAT_eels_all_count       623         0
+FCAT_eels_all_count       624         0
+FCAT_eels_all_count       625         0
+FCAT_eels_all_count       626         0
+FCAT_eels_all_count       627         0
+FCAT_eels_all_count       628         0
+FCAT_eels_all_count       629         0
+FCAT_eels_all_count       630         0
+FCAT_eels_all_count       631         0
+FCAT_eels_all_count       632         0
+FCAT_eels_all_count       633         0
+FCAT_eels_all_count       634         0
+FCAT_eels_all_count       635         0
+FCAT_eels_all_count       636         0
+FCAT_eels_all_count       637         0
+FCAT_eels_all_count       638         0
+FCAT_eels_all_count       639         0
+FCAT_eels_all_count       640         0
+FCAT_eels_all_count       641         0
+FCAT_eels_all_count       642         0
+FCAT_eels_all_count       643         0
+FCAT_eels_all_count       644         0
+FCAT_eels_all_count       645         0
+FCAT_eels_all_count       646         0
+FCAT_eels_all_count       647         0
+FCAT_eels_all_count       648         0
+FCAT_eels_all_count       649         0
+FCAT_eels_all_count       650         0
+FCAT_eels_all_count       651         0
+FCAT_eels_all_count       652         1
+FCAT_eels_all_count       653         1
+FCAT_eels_all_count       654       326
+FCAT_eels_all_count       655       326
+FCAT_eels_all_count       656       326
+FCAT_eels_all_count       657       326
+FCAT_eels_all_count       658       326
+FCAT_eels_all_count       659       326
+FCAT_eels_all_count       660       326
+FCAT_eels_all_count       661       326
+FCAT_eels_all_count       662       326
+FCAT_eels_all_count       663         0
+FCAT_eels_all_count       664       326
+FCAT_eels_all_count       665       326
+FCAT_eels_all_count       666       326
+FCAT_eels_all_count       667       326
+FCAT_eels_all_count       668       326
+FCAT_eels_all_count       669       326
+FCAT_eels_all_count       670       326
+FCAT_eels_all_count       671       326
+FCAT_eels_all_count       672         2
+FCAT_eels_all_count       673         2
+FCAT_eels_all_count       674         2
+FCAT_eels_all_count       675         2
+FCAT_eels_all_count       676         2
+FCAT_eels_all_count       677         2
+FCAT_eels_all_count       678         2
+FCAT_eels_all_count       679         2
+FCAT_eels_all_count       680         2
+FCAT_eels_all_count       681         2
+FCAT_eels_all_count       682       326
+FCAT_eels_all_count       683       326
+FCAT_eels_all_count       684        19
+FCAT_eels_all_count       685        19
+FCAT_eels_all_count       686       326
+FCAT_eels_all_count       687         1
+FCAT_eels_all_count       688         0
+FCAT_eels_all_count       689         0
+FCAT_eels_all_count       690         0
+FCAT_eels_all_count       691         0
+FCAT_eels_all_count       692         1
+FCAT_eels_all_count       693         0
+FCAT_eels_all_count       694         0
+FCAT_eels_all_count       695         0
+FCAT_eels_all_count       696         0
+FCAT_eels_all_count       697         0
+FCAT_eels_all_count       698         0
+FCAT_eels_all_count       699         0
+FCAT_eels_all_count       700         0
+FCAT_eels_all_count       701         0
+FCAT_eels_all_count       702         1
diff --git a/source/f90/fcat-analysis/eelsin b/source/f90/fcat-analysis/eelsin
new file mode 100644
index 0000000..1db7dba
--- /dev/null
+++ b/source/f90/fcat-analysis/eelsin
@@ -0,0 +1,16 @@
+   4.0      E0                                                          ABTI0002
+  60.0      THETA                                                       ABTI0003
+   1.8      PHIA                                                        ABTI0004
+   1.8      PHIB                                                        ABTI0005
+  50.0      WMIN                                                        ABTI0006
+ 700.0      WMAX                                                        ABTI0007
+   2.0      DW                                                          ABTI0008
+WFW: MnO layer on metal
+                                                                        ABTI0010
+    2    1                                          No-layers  NPER No-periodic
+MnO            994.00D+00                           LAYER 1  name thickness
+    4.95      1                                              epsinf No-Osc.
+   269.0          16.000        5.00000E-02                  wto, Q, lambda
+Platinum      1000.00D+00                           LAYER 2             ABTI0012
+    8.90      1                                                         ABTI0013
+160000.0          -1            12.0000E-02                             ABTI0014
diff --git a/source/f90/fcat-analysis/eelsou b/source/f90/fcat-analysis/eelsou
new file mode 100644
index 0000000..058e261
--- /dev/null
+++ b/source/f90/fcat-analysis/eelsou
@@ -0,0 +1,328 @@
+e0 =  4.00 theta = 60.0 phia = 1.80 phib = 1.80
+WFW: MnO layer on metal                                                 
+  0.5000000E+02  0.3941008E-04
+  0.5200000E+02  0.3978564E-04
+  0.5400000E+02  0.4013988E-04
+  0.5600000E+02  0.4047467E-04
+  0.5800000E+02  0.4079173E-04
+  0.6000000E+02  0.4109263E-04
+  0.6200000E+02  0.4137881E-04
+  0.6400000E+02  0.4108544E-04
+  0.6600000E+02  0.4191212E-04
+  0.6800000E+02  0.4216160E-04
+  0.7000000E+02  0.4240101E-04
+  0.7200000E+02  0.4263132E-04
+  0.7400000E+02  0.4285338E-04
+  0.7600000E+02  0.4306802E-04
+  0.7800000E+02  0.4327598E-04
+  0.8000000E+02  0.4347794E-04
+  0.8200000E+02  0.4367455E-04
+  0.8400000E+02  0.4386642E-04
+  0.8600000E+02  0.4405408E-04
+  0.8800000E+02  0.4423806E-04
+  0.9000000E+02  0.4441883E-04
+  0.9200000E+02  0.4459685E-04
+  0.9400000E+02  0.4477229E-04
+  0.9600000E+02  0.4494627E-04
+  0.9800000E+02  0.4511842E-04
+  0.1000000E+03  0.4528934E-04
+  0.1020000E+03  0.4545934E-04
+  0.1040000E+03  0.4562872E-04
+  0.1060000E+03  0.4579779E-04
+  0.1080000E+03  0.4596679E-04
+  0.1100000E+03  0.4613600E-04
+  0.1120000E+03  0.4630565E-04
+  0.1140000E+03  0.4647599E-04
+  0.1160000E+03  0.4664719E-04
+  0.1180000E+03  0.4681947E-04
+  0.1200000E+03  0.4699305E-04
+  0.1220000E+03  0.4716812E-04
+  0.1240000E+03  0.4734484E-04
+  0.1260000E+03  0.4752340E-04
+  0.1280000E+03  0.4770396E-04
+  0.1300000E+03  0.4788669E-04
+  0.1320000E+03  0.4807173E-04
+  0.1340000E+03  0.4825916E-04
+  0.1360000E+03  0.4844938E-04
+  0.1380000E+03  0.4864227E-04
+  0.1400000E+03  0.4883806E-04
+  0.1420000E+03  0.4903689E-04
+  0.1440000E+03  0.4923889E-04
+  0.1460000E+03  0.4944419E-04
+  0.1480000E+03  0.4965293E-04
+  0.1500000E+03  0.4986523E-04
+  0.1520000E+03  0.5008121E-04
+  0.1540000E+03  0.5030101E-04
+  0.1560000E+03  0.5052510E-04
+  0.1580000E+03  0.5075291E-04
+  0.1600000E+03  0.5098491E-04
+  0.1620000E+03  0.5122123E-04
+  0.1640000E+03  0.5146199E-04
+  0.1660000E+03  0.5170731E-04
+  0.1680000E+03  0.5195733E-04
+  0.1700000E+03  0.5221217E-04
+  0.1720000E+03  0.5247162E-04
+  0.1740000E+03  0.5273652E-04
+  0.1760000E+03  0.5300665E-04
+  0.1780000E+03  0.5328235E-04
+  0.1800000E+03  0.5356326E-04
+  0.1820000E+03  0.5384979E-04
+  0.1840000E+03  0.5414208E-04
+  0.1860000E+03  0.5444027E-04
+  0.1880000E+03  0.5474451E-04
+  0.1900000E+03  0.5505495E-04
+  0.1920000E+03  0.5537174E-04
+  0.1940000E+03  0.5569504E-04
+  0.1960000E+03  0.5602500E-04
+  0.1980000E+03  0.5636178E-04
+  0.2000000E+03  0.5670564E-04
+  0.2020000E+03  0.5705658E-04
+  0.2040000E+03  0.5741486E-04
+  0.2060000E+03  0.5778066E-04
+  0.2080000E+03  0.5815417E-04
+  0.2100000E+03  0.5853558E-04
+  0.2120000E+03  0.5892508E-04
+  0.2140000E+03  0.5932288E-04
+  0.2160000E+03  0.5972919E-04
+  0.2180000E+03  0.6014421E-04
+  0.2200000E+03  0.6056817E-04
+  0.2220000E+03  0.6100129E-04
+  0.2240000E+03  0.6144381E-04
+  0.2260000E+03  0.6189598E-04
+  0.2280000E+03  0.6235803E-04
+  0.2300000E+03  0.6283023E-04
+  0.2320000E+03  0.6331285E-04
+  0.2340000E+03  0.6380615E-04
+  0.2360000E+03  0.6431043E-04
+  0.2380000E+03  0.6482597E-04
+  0.2400000E+03  0.6535308E-04
+  0.2420000E+03  0.6589204E-04
+  0.2440000E+03  0.6644328E-04
+  0.2460000E+03  0.6700703E-04
+  0.2480000E+03  0.6758367E-04
+  0.2500000E+03  0.6817357E-04
+  0.2520000E+03  0.6877710E-04
+  0.2540000E+03  0.6939465E-04
+  0.2560000E+03  0.7002661E-04
+  0.2580000E+03  0.7067340E-04
+  0.2600000E+03  0.7133544E-04
+  0.2620000E+03  0.7201319E-04
+  0.2640000E+03  0.7270710E-04
+  0.2660000E+03  0.7341769E-04
+  0.2680000E+03  0.7414551E-04
+  0.2700000E+03  0.7489117E-04
+  0.2720000E+03  0.7565519E-04
+  0.2740000E+03  0.7643808E-04
+  0.2760000E+03  0.7724036E-04
+  0.2780000E+03  0.7806264E-04
+  0.2800000E+03  0.7890556E-04
+  0.2820000E+03  0.7976980E-04
+  0.2840000E+03  0.8065605E-04
+  0.2860000E+03  0.8156506E-04
+  0.2880000E+03  0.8249757E-04
+  0.2900000E+03  0.8345437E-04
+  0.2920000E+03  0.8443630E-04
+  0.2940000E+03  0.8544420E-04
+  0.2960000E+03  0.8647898E-04
+  0.2980000E+03  0.8754097E-04
+  0.3000000E+03  0.8863237E-04
+  0.3020000E+03  0.8975359E-04
+  0.3040000E+03  0.9090571E-04
+  0.3060000E+03  0.9208985E-04
+  0.3080000E+03  0.9330717E-04
+  0.3100000E+03  0.9455890E-04
+  0.3120000E+03  0.9584633E-04
+  0.3140000E+03  0.9717080E-04
+  0.3160000E+03  0.9853388E-04
+  0.3180000E+03  0.9993669E-04
+  0.3200000E+03  0.1013810E-03
+  0.3220000E+03  0.1028684E-03
+  0.3240000E+03  0.1044008E-03
+  0.3260000E+03  0.1059797E-03
+  0.3280000E+03  0.1076073E-03
+  0.3300000E+03  0.1092856E-03
+  0.3320000E+03  0.1110164E-03
+  0.3340000E+03  0.1128022E-03
+  0.3360000E+03  0.1146452E-03
+  0.3380000E+03  0.1165479E-03
+  0.3400000E+03  0.1185130E-03
+  0.3420000E+03  0.1205431E-03
+  0.3440000E+03  0.1226413E-03
+  0.3460000E+03  0.1248106E-03
+  0.3480000E+03  0.1270542E-03
+  0.3500000E+03  0.1293757E-03
+  0.3520000E+03  0.1317786E-03
+  0.3540000E+03  0.1342669E-03
+  0.3560000E+03  0.1368447E-03
+  0.3580000E+03  0.1395163E-03
+  0.3600000E+03  0.1422865E-03
+  0.3620000E+03  0.1451601E-03
+  0.3640000E+03  0.1481424E-03
+  0.3660000E+03  0.1512391E-03
+  0.3680000E+03  0.1544560E-03
+  0.3700000E+03  0.1577997E-03
+  0.3720000E+03  0.1612769E-03
+  0.3740000E+03  0.1648949E-03
+  0.3760000E+03  0.1686615E-03
+  0.3780000E+03  0.1725851E-03
+  0.3800000E+03  0.1766746E-03
+  0.3820000E+03  0.1809396E-03
+  0.3840000E+03  0.1853905E-03
+  0.3860000E+03  0.1900384E-03
+  0.3880000E+03  0.1948952E-03
+  0.3900000E+03  0.1999738E-03
+  0.3920000E+03  0.2052881E-03
+  0.3940000E+03  0.2108531E-03
+  0.3960000E+03  0.2166852E-03
+  0.3980000E+03  0.2228019E-03
+  0.4000000E+03  0.2292224E-03
+  0.4020000E+03  0.2359673E-03
+  0.4040000E+03  0.2430592E-03
+  0.4060000E+03  0.2505228E-03
+  0.4080000E+03  0.2583848E-03
+  0.4100000E+03  0.2666745E-03
+  0.4120000E+03  0.2754241E-03
+  0.4140000E+03  0.2846686E-03
+  0.4160000E+03  0.2944466E-03
+  0.4180000E+03  0.3048006E-03
+  0.4200000E+03  0.3157775E-03
+  0.4220000E+03  0.3274288E-03
+  0.4240000E+03  0.3398119E-03
+  0.4260000E+03  0.3529902E-03
+  0.4280000E+03  0.3670341E-03
+  0.4300000E+03  0.3820223E-03
+  0.4320000E+03  0.3980424E-03
+  0.4340000E+03  0.4151927E-03
+  0.4360000E+03  0.4335834E-03
+  0.4380000E+03  0.4533387E-03
+  0.4400000E+03  0.4745985E-03
+  0.4420000E+03  0.4975215E-03
+  0.4440000E+03  0.5222878E-03
+  0.4460000E+03  0.5491027E-03
+  0.4480000E+03  0.5782011E-03
+  0.4500000E+03  0.6098524E-03
+  0.4520000E+03  0.6443672E-03
+  0.4540000E+03  0.6821050E-03
+  0.4560000E+03  0.7234834E-03
+  0.4580000E+03  0.7689902E-03
+  0.4600000E+03  0.8191977E-03
+  0.4620000E+03  0.8747809E-03
+  0.4640000E+03  0.9365404E-03
+  0.4660000E+03  0.1005431E-02
+  0.4680000E+03  0.1082601E-02
+  0.4700000E+03  0.1169436E-02
+  0.4720000E+03  0.1267624E-02
+  0.4740000E+03  0.1379238E-02
+  0.4760000E+03  0.1506843E-02
+  0.4780000E+03  0.1653641E-02
+  0.4800000E+03  0.1823674E-02
+  0.4820000E+03  0.2022093E-02
+  0.4840000E+03  0.2255541E-02
+  0.4860000E+03  0.2532695E-02
+  0.4880000E+03  0.2865045E-02
+  0.4900000E+03  0.3268032E-02
+  0.4920000E+03  0.3762748E-02
+  0.4940000E+03  0.4378508E-02
+  0.4960000E+03  0.5156827E-02
+  0.4980000E+03  0.6157643E-02
+  0.5000000E+03  0.7469191E-02
+  0.5020000E+03  0.9223619E-02
+  0.5040000E+03  0.1162098E-01
+  0.5060000E+03  0.1496223E-01
+  0.5080000E+03  0.1967779E-01
+  0.5100000E+03  0.2627908E-01
+  0.5120000E+03  0.3497838E-01
+  0.5140000E+03  0.4448802E-01
+  0.5160000E+03  0.5057913E-01
+  0.5180000E+03  0.4873470E-01
+  0.5200000E+03  0.4036501E-01
+  0.5220000E+03  0.3068666E-01
+  0.5240000E+03  0.2272070E-01
+  0.5260000E+03  0.1692023E-01
+  0.5280000E+03  0.1283520E-01
+  0.5300000E+03  0.9950658E-02
+  0.5320000E+03  0.7879717E-02
+  0.5340000E+03  0.6360611E-02
+  0.5360000E+03  0.5222741E-02
+  0.5380000E+03  0.4353299E-02
+  0.5400000E+03  0.3676186E-02
+  0.5420000E+03  0.3140392E-02
+  0.5440000E+03  0.2709948E-02
+  0.5460000E+03  0.2359504E-02
+  0.5480000E+03  0.2070778E-02
+  0.5500000E+03  0.1830347E-02
+  0.5520000E+03  0.1628190E-02
+  0.5540000E+03  0.1456724E-02
+  0.5560000E+03  0.1310130E-02
+  0.5580000E+03  0.1183891E-02
+  0.5600000E+03  0.1074460E-02
+  0.5620000E+03  0.9790217E-03
+  0.5640000E+03  0.8953225E-03
+  0.5660000E+03  0.8215399E-03
+  0.5680000E+03  0.7561889E-03
+  0.5700000E+03  0.6980498E-03
+  0.5720000E+03  0.6461144E-03
+  0.5740000E+03  0.5995427E-03
+  0.5760000E+03  0.5576316E-03
+  0.5780000E+03  0.5197882E-03
+  0.5800000E+03  0.4855105E-03
+  0.5820000E+03  0.4543708E-03
+  0.5840000E+03  0.4260033E-03
+  0.5860000E+03  0.4000936E-03
+  0.5880000E+03  0.3763701E-03
+  0.5900000E+03  0.3545976E-03
+  0.5920000E+03  0.3345713E-03
+  0.5940000E+03  0.3161125E-03
+  0.5960000E+03  0.2990646E-03
+  0.5980000E+03  0.2832897E-03
+  0.6000000E+03  0.2686665E-03
+  0.6020000E+03  0.2550875E-03
+  0.6040000E+03  0.2424575E-03
+  0.6060000E+03  0.2306916E-03
+  0.6080000E+03  0.2197144E-03
+  0.6100000E+03  0.2094581E-03
+  0.6120000E+03  0.1998624E-03
+  0.6140000E+03  0.1908727E-03
+  0.6160000E+03  0.1824402E-03
+  0.6180000E+03  0.1745206E-03
+  0.6200000E+03  0.1670742E-03
+  0.6220000E+03  0.1600647E-03
+  0.6240000E+03  0.1534595E-03
+  0.6260000E+03  0.1472285E-03
+  0.6280000E+03  0.1413449E-03
+  0.6300000E+03  0.1357838E-03
+  0.6320000E+03  0.1305226E-03
+  0.6340000E+03  0.1255406E-03
+  0.6360000E+03  0.1208189E-03
+  0.6380000E+03  0.1163402E-03
+  0.6400000E+03  0.1120885E-03
+  0.6420000E+03  0.1080490E-03
+  0.6440000E+03  0.1042083E-03
+  0.6460000E+03  0.1005538E-03
+  0.6480000E+03  0.9707402E-04
+  0.6500000E+03  0.9375831E-04
+  0.6520000E+03  0.9059679E-04
+  0.6540000E+03  0.8758031E-04
+  0.6560000E+03  0.8470038E-04
+  0.6580000E+03  0.8194911E-04
+  0.6600000E+03  0.7931918E-04
+  0.6620000E+03  0.7680376E-04
+  0.6640000E+03  0.7439649E-04
+  0.6660000E+03  0.7209145E-04
+  0.6680000E+03  0.6988311E-04
+  0.6700000E+03  0.6776630E-04
+  0.6720000E+03  0.6573619E-04
+  0.6740000E+03  0.6378826E-04
+  0.6760000E+03  0.6191827E-04
+  0.6780000E+03  0.6012225E-04
+  0.6800000E+03  0.5839648E-04
+  0.6820000E+03  0.5673747E-04
+  0.6840000E+03  0.5514193E-04
+  0.6860000E+03  0.5360677E-04
+  0.6880000E+03  0.5212910E-04
+  0.6900000E+03  0.5070617E-04
+  0.6920000E+03  0.4933540E-04
+  0.6940000E+03  0.4801438E-04
+  0.6960000E+03  0.4674080E-04
+  0.6980000E+03  0.4551251E-04
+  0.7000000E+03  0.4432745E-04
-- 
GitLab