From 893ebb9b2e75ac1dccfdb6778caa668c3544b6e9 Mon Sep 17 00:00:00 2001 From: Karl-Michael Schindler <karl-michael.schindler@web.de> Date: Wed, 16 Oct 2024 13:45:25 +0200 Subject: [PATCH] Update seteps.f90 --- source/f90/seteps.f90 | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/source/f90/seteps.f90 b/source/f90/seteps.f90 index 8b6265a..80fd4f1 100644 --- a/source/f90/seteps.f90 +++ b/source/f90/seteps.f90 @@ -19,6 +19,8 @@ subroutine seteps(neps, nos, oscType, osc, epsinf, wn, eps, layers) ! ****************************************************************** use oscillatorType_mod + + implicit none integer, intent(in) :: neps, nos(:), oscType(:) double precision, intent(in) :: osc(:, :), epsinf(:), wn @@ -27,7 +29,8 @@ subroutine seteps(neps, nos, oscType, osc, epsinf, wn, eps, layers) integer :: i, j, k double complex :: one, nomi, deno, addLorentz, addDrude - double precision :: wn2, b, gamma + double precision :: wn2, b + double precision :: wTO, wLO, wP, Q, yTO, yLO, y, y0, yp one = dcmplx(1.0, 0.0) wn2 = wn**2 @@ -39,22 +42,32 @@ subroutine seteps(neps, nos, oscType, osc, epsinf, wn, eps, layers) addDrude = dcmplx(0.0, 0.0) do j = 1, nos(i) select case (oscType(k)) - case (Lorentz) ! osc3 is lambda and not gammma - gamma = osc(1,k) * osc(3,k) - addLorentz = addLorentz + osc(1,k)**2 * osc(2,k) / dcmplx(osc(1,k)**2 - wn2, -wn * gamma) + case (Lorentz) + wTO = osc(1,k) + Q = osc(2,k) + yTO = osc(3,k) + addLorentz = addLorentz + wTO**2 * Q / dcmplx(wTO**2 - wn2, -wn * yTO) case (Kurosawa) - b = wn / osc(1,k) - nomi = nomi * osc(3,k)**2 * (1.0 - b * dcmplx( b, osc(4,k)/osc(3,k)) ) - deno = deno * (osc(1,k)**2 - wn * dcmplx(wn, osc(2,k) ) ) - case (Drude) ! As with lorentz, osc2 is lambda and not gammma - gamma = osc(1,k) * osc(2,k) - addDrude = addDrude - osc(1,k)**2 / dcmplx(wn2, wn * gamma) - case (extendedDrude) ! osc2 and osc3 are gamma_Plasma and Gamma_0 - addDrude = addDrude - dcmplx(osc(1,k)**2, wn*(osc(2,k)-osc(3,k))) / dcmplx(wn2, wn * osc(2,k)) + wTO = osc(1,k) + yTO = osc(2,k) + wLO = osc(3,k) + yLO = osc(4,k) + b = wn / wTO + nomi = nomi * wLO**2 * (1.0 - b * dcmplx( b, yLO/wLO) ) + deno = deno * (wTO**2 - wn * dcmplx(wn, yTO ) ) + case (Drude) + wp = osc(1,k) + y = osc(2,k) + addDrude = addDrude - wp**2 / dcmplx(wn2, wn * y) + case (extendedDrude) + wp = osc(1,k) + yp = osc(2,k) + y0 = osc(3,k) + addDrude = addDrude - dcmplx(wp**2, wn*(y0 - yp)) / dcmplx(wn2, wn * y0) case default write (*,'(A)') '*** Error in oscillator type! ***' end select - eps(i) = epsinf(i) * (nomi / deno) + addDrude + addLorentz + eps(i) = epsinf(i) * (nomi / deno + addDrude) + addLorentz k = k + 1 enddo enddo -- GitLab