From cf20f21b13ce85c8d104855550cba318bc0f16ea Mon Sep 17 00:00:00 2001 From: Karl-Michael Schindler <karl-michael.schindler@web.de> Date: Thu, 29 Aug 2024 10:48:01 +0200 Subject: [PATCH] fix lorentz in myyEels20-seteps.f90 --- source/WfW seteps/myEels20-seteps.f90 | 14 ++++++++------ tests/seteps/Makefile | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/source/WfW seteps/myEels20-seteps.f90 b/source/WfW seteps/myEels20-seteps.f90 index 96ebd18..495f9ff 100755 --- a/source/WfW seteps/myEels20-seteps.f90 +++ b/source/WfW seteps/myEels20-seteps.f90 @@ -10,17 +10,17 @@ subroutine seteps(nos, osc_size, osc, epsinf, wn, nLayer, eps) implicit none integer, intent(in) :: nLayer - integer, dimension(nLayer),intent(in) :: nos + integer, intent(in) :: nos(:) integer, intent(in) :: osc_size - double precision, dimension(3,osc_size),intent(in) :: osc + double precision, intent(in) :: osc(:,:) !f2py depend(osc_size) osc double precision, dimension(nLayer),intent(in) :: epsinf double precision, intent(in) :: wn double complex, dimension(nLayer), intent(out) :: eps !f2py depend(nLayer) nos, epsinf, eps - double complex :: nomi, deno, addeps - double precision :: wn2, b + double complex :: nomi, deno, addeps, addlorentz + double precision :: wn2, b, gamma integer j, k, l, m logical debugFirstRun @@ -32,6 +32,7 @@ subroutine seteps(nos, osc_size, osc, epsinf, wn, nLayer, eps) nomi = dcmplx(1.0d0, 0.0d0) deno = dcmplx(1.0d0, 0.0d0) addeps = dcmplx(0.0d0, 0.0d0) + addlorentz = dcmplx(0.0d0, 0.0d0) wn2 = wn**2 do k = 1, m ! loop over all TO modes j = j + 1 @@ -42,7 +43,8 @@ subroutine seteps(nos, osc_size, osc, epsinf, wn, nLayer, eps) deno =deno * (osc(1,j)**2 - wn * dcmplx( wn, osc(3,j) ) ) else if (osc(1,j) < 0.) then! Negative TO mode means: _Additive_ Lorentz oscillator with Q - addeps = addeps + osc(1,j)**2 * osc(2,j) /dcmplx(osc(1,j)**2 - wn2, -1*wn*osc(3,j)) ! Sign of imaginary part changed (WFW) + gamma = abs(osc(1,j)) * osc(3,j) ! osc(3,j) is lambda. gamma = omega_TO * lambda + addlorentz = addlorentz + osc(1,j)**2 * osc(2,j) /dcmplx(osc(1,j)**2 - wn2, -wn * gamma) ! Sign of imaginary part changed (WFW) else ! osc(1,j) = 0 -> it is a Drude term addeps = addeps - dcmplx(osc(1,j+m)**2, wn*(osc(3,j)-osc(3,j+m))) /dcmplx(wn2, wn*osc(3,j)) @@ -50,7 +52,7 @@ subroutine seteps(nos, osc_size, osc, epsinf, wn, nLayer, eps) enddo j = j+m ! we have already looped over the LO modes, therefore increase the index - eps(l) = epsinf(l) * (nomi / deno + addeps) ! brackets changed by HHe 230915 + eps(l) = epsinf(l) * (nomi / deno + addeps) + addlorentz ! brackets changed by HHe 230915 enddo debugFirstRun = .false. return diff --git a/tests/seteps/Makefile b/tests/seteps/Makefile index 6f6fe9c..c819057 100644 --- a/tests/seteps/Makefile +++ b/tests/seteps/Makefile @@ -25,9 +25,9 @@ build-f90/seteps_mod.mod: ../../source/f90/seteps.f90 MYEELS20_SETEPS = ../../source/WFW seteps/myEels20-seteps.f90 -build-WFW/seteps.o: $(wildcard ../../source/WFW\\ seteps/myEels20-seteps.f90) +build-WFW/seteps.o: ../../source/WFW\ seteps/myEels20-seteps.f90 $(FC) $(FFLAGS) -c -Jbuild-WFW -o $@ '$(MYEELS20_SETEPS)' -build-WFW/seteps_mod.mod: $(wildcard ../../source/WFW\\ seteps/myEels20-seteps.f90) +build-WFW/seteps_mod.mod: ../../source/WFW\ seteps/myEels20-seteps.f90 $(FC) $(FFLAGS) -c -Jbuild-WFW -o build-WFW/seteps.o '$(MYEELS20_SETEPS)' build-f77/setepsdriver: setepsdriver-f77.f90 build-f77/seteps.o -- GitLab