@@ -8,7 +8,7 @@ include("models.jl")
8
8
include (" grids.jl" )
9
9
export Eigenmodes,Halfspace
10
10
export eigenmodes,halfspace
11
- export a2e2d,a2p,e2p,slicehalf,getfields
11
+ export a2e2d,a2p,e2p,slicehalf,getfields,get_εzz
12
12
"""
13
13
Eigenmodes(V,W,X,q)
14
14
@@ -175,6 +175,36 @@ function eigenmodes(g::RCWAGrid,λ,l::Array{Layer,1})
175
175
end
176
176
return rt
177
177
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
+
178
208
"""
179
209
halfspace(Kx,Ky,material,λ)
180
210
@@ -305,7 +335,7 @@ computes the electric and magnetic fields within a layer
305
335
* `efield` : 4D tensor for the electric field (dimensions are x, y, z, and the component (E_x or E_y or E_z)
306
336
* `hfield` : 4D tensor for the magnetic field (dimensions are x, y, z, and the component (E_x or E_y or E_z)
307
337
"""
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 ])
309
339
Nx= Int (floor (xypoints[1 ]/ 2 ))
310
340
Ny= Int (floor (xypoints[2 ]/ 2 ))
311
341
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
327
357
# convert amplitude vectors to electric fields
328
358
ex,ey= a2e2d (a+ b,em. W)
329
359
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)
331
361
hz= - 1im * (grd. Kx* ey- grd. Ky* ex)
332
362
# convert from reciprocal lattice vectors to real space distribution
333
363
efield[:,:,zind,1 ]= recipvec2real (Array (grd. nx),Array (grd. ny),Array (ex),nx,ny,windowfunction)
0 commit comments