Skip to content

Commit f12f2d8

Browse files
author
Jon Schlipf
committed
εzz
1 parent 7bf6cf2 commit f12f2d8

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/Common/Common.jl

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ include("models.jl")
88
include("grids.jl")
99
export Eigenmodes,Halfspace
1010
export eigenmodes,halfspace
11-
export a2e2d,a2p,e2p,slicehalf,getfields
11+
export a2e2d,a2p,e2p,slicehalf,getfields,get_εzz
1212
"""
1313
Eigenmodes(V,W,X,q)
1414
@@ -175,6 +175,36 @@ function eigenmodes(g::RCWAGrid,λ,l::Array{Layer,1})
175175
end
176176
return rt
177177
end
178+
function get_εzz(dnx,dny,λ,l::PatternedLayer)
179+
#get the base permittivity
180+
εzz=get_permittivity(l.materials[1],λ,1)*I
181+
#add the permittivity for all inclusions
182+
if minimum([typeof(m)<:Isotropic for m in l.materials])
183+
#all isotropic
184+
εzz=get_permittivity(l.materials[1],λ)*I
185+
for ct=1:length(l.geometries)
186+
rec=reciprocal(l.geometries[ct],dnx,dny)
187+
εzz+=rec*(get_permittivity(l.materials[ct+1],λ)-get_permittivity(l.materials[ct],λ))
188+
end
189+
else
190+
#anisotropic
191+
εzz=get_permittivity(l.materials[1],λ,5)*I
192+
for ct=1:length(l.geometries)
193+
rec=reciprocal(l.geometries[ct],dnx,dny)
194+
εzz+=rec*(get_permittivity(l.materials[ct+1],λ,5)-get_permittivity(l.materials[ct],λ,5))
195+
end
196+
end
197+
return εzz
198+
end
199+
200+
function get_εzz(dnx,dny,λ,l:SimpleLayer)
201+
return get_permittivity(l.material,λ)*I
202+
end
203+
204+
function get_εzz(dnx,dny,λ,l:AnisotropicLayer)
205+
return get_permittivity(l.material,λ,5)*I
206+
end
207+
178208
"""
179209
halfspace(Kx,Ky,material,λ)
180210
@@ -305,7 +335,7 @@ computes the electric and magnetic fields within a layer
305335
* `efield` : 4D tensor for the electric field (dimensions are x, y, z, and the component (E_x or E_y or E_z)
306336
* `hfield` : 4D tensor for the magnetic field (dimensions are x, y, z, and the component (E_x or E_y or E_z)
307337
"""
308-
function getfields(ain,bout,em::Eigenmodes,grd::RCWAGrid,xypoints,zpoints,λ,window="Hann",padding=[0,0])
338+
function getfields(ain,bout,em::Eigenmodes,grd::RCWAGrid,xypoints,zpoints,λ,εzz,window="Hann",padding=[0,0])
309339
Nx=Int(floor(xypoints[1]/2))
310340
Ny=Int(floor(xypoints[2]/2))
311341
nx=[r for r in -Nx:Nx-1, c in -Ny:Ny-1]
@@ -327,7 +357,7 @@ function getfields(ain,bout,em::Eigenmodes,grd::RCWAGrid,xypoints,zpoints,λ,win
327357
#convert amplitude vectors to electric fields
328358
ex,ey=a2e2d(a+b,em.W)
329359
hx,hy=a2e2d(a-b,em.V)
330-
ez=-1im*(grd.Kx*hy-grd.Ky*hx)
360+
ez=-1im*εzz\(grd.Kx*hy-grd.Ky*hx)
331361
hz=-1im*(grd.Kx*ey-grd.Ky*ex)
332362
#convert from reciprocal lattice vectors to real space distribution
333363
efield[:,:,zind,1]=recipvec2real(Array(grd.nx),Array(grd.ny),Array(ex),nx,ny,windowfunction)

src/ETM/ETM.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ function etm_getfields_stack(mdl::RCWAModel,grd::RCWAGrid,xypoints,zpoints,λ,a,
188188
H=zeros(xypoints[1],xypoints[2],length(zpoints),3)*1im
189189
for i in eachindex(mdl.layers)
190190
zpoints_separated=zpoints[zstack.<=zpoints.<zstack+mdl.layers[i].thickness]
191-
Ei,Hi=getfields(a[i],b[i],em[i],grd,xypoints,zpoints_separated.-zstack,λ,window,padding)
191+
Ei,Hi=getfields(a[i],b[i],em[i],grd,xypoints,zpoints_separated.-zstack,λ,get_εzz(grd.dnx,grd.dny,λ,mdl.layers[i]),window,padding)
192192
E[:,:,zind:zind+length(zpoints_separated)-1,:]=Ei
193193
H[:,:,zind:zind+length(zpoints_separated)-1,:]=Hi
194194
zstack=zstack+mdl.layers[i].thickness

0 commit comments

Comments
 (0)