Skip to content
Snippets Groups Projects
Commit 893ebb9b authored by Karl-Michael Schindler's avatar Karl-Michael Schindler
Browse files

Update seteps.f90

parent beb8dfc2
Branches
No related tags found
No related merge requests found
...@@ -19,6 +19,8 @@ subroutine seteps(neps, nos, oscType, osc, epsinf, wn, eps, layers) ...@@ -19,6 +19,8 @@ subroutine seteps(neps, nos, oscType, osc, epsinf, wn, eps, layers)
! ****************************************************************** ! ******************************************************************
use oscillatorType_mod use oscillatorType_mod
implicit none
integer, intent(in) :: neps, nos(:), oscType(:) integer, intent(in) :: neps, nos(:), oscType(:)
double precision, intent(in) :: osc(:, :), epsinf(:), wn double precision, intent(in) :: osc(:, :), epsinf(:), wn
...@@ -27,7 +29,8 @@ subroutine seteps(neps, nos, oscType, osc, epsinf, wn, eps, layers) ...@@ -27,7 +29,8 @@ subroutine seteps(neps, nos, oscType, osc, epsinf, wn, eps, layers)
integer :: i, j, k integer :: i, j, k
double complex :: one, nomi, deno, addLorentz, addDrude 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) one = dcmplx(1.0, 0.0)
wn2 = wn**2 wn2 = wn**2
...@@ -39,22 +42,32 @@ subroutine seteps(neps, nos, oscType, osc, epsinf, wn, eps, layers) ...@@ -39,22 +42,32 @@ subroutine seteps(neps, nos, oscType, osc, epsinf, wn, eps, layers)
addDrude = dcmplx(0.0, 0.0) addDrude = dcmplx(0.0, 0.0)
do j = 1, nos(i) do j = 1, nos(i)
select case (oscType(k)) select case (oscType(k))
case (Lorentz) ! osc3 is lambda and not gammma case (Lorentz)
gamma = osc(1,k) * osc(3,k) wTO = osc(1,k)
addLorentz = addLorentz + osc(1,k)**2 * osc(2,k) / dcmplx(osc(1,k)**2 - wn2, -wn * gamma) Q = osc(2,k)
yTO = osc(3,k)
addLorentz = addLorentz + wTO**2 * Q / dcmplx(wTO**2 - wn2, -wn * yTO)
case (Kurosawa) case (Kurosawa)
b = wn / osc(1,k) wTO = osc(1,k)
nomi = nomi * osc(3,k)**2 * (1.0 - b * dcmplx( b, osc(4,k)/osc(3,k)) ) yTO = osc(2,k)
deno = deno * (osc(1,k)**2 - wn * dcmplx(wn, osc(2,k) ) ) wLO = osc(3,k)
case (Drude) ! As with lorentz, osc2 is lambda and not gammma yLO = osc(4,k)
gamma = osc(1,k) * osc(2,k) b = wn / wTO
addDrude = addDrude - osc(1,k)**2 / dcmplx(wn2, wn * gamma) nomi = nomi * wLO**2 * (1.0 - b * dcmplx( b, yLO/wLO) )
case (extendedDrude) ! osc2 and osc3 are gamma_Plasma and Gamma_0 deno = deno * (wTO**2 - wn * dcmplx(wn, yTO ) )
addDrude = addDrude - dcmplx(osc(1,k)**2, wn*(osc(2,k)-osc(3,k))) / dcmplx(wn2, wn * osc(2,k)) 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 case default
write (*,'(A)') '*** Error in oscillator type! ***' write (*,'(A)') '*** Error in oscillator type! ***'
end select end select
eps(i) = epsinf(i) * (nomi / deno) + addDrude + addLorentz eps(i) = epsinf(i) * (nomi / deno + addDrude) + addLorentz
k = k + 1 k = k + 1
enddo enddo
enddo enddo
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment