I realize this is abuse of software, but here goes.

I've been attempting to simulate WGP structures and looked at the
transmission as a function of (rectangular) wire thickness at constant
pitch of 200nm (100nm each of wire and gap). If the metal thickness is
taken to zero, the transmission does not go to 1.0 as I'd expect and the
field can be seen interacting with the zero-thickness metal in the
attachment. Seeing these effects for a metal thickness set to zero, I
lose confidence in results using thin, finite metal layers (say, 20nm)

Changing the resolution or turning eps_averaging on/off seems not to
change the outcome. Use of a non-dispersive dielectric material in place
of the Drude Lorentz metal gives the expected, simple behaviour as the
thickness approaches zero.

Is there a "proper" way to include thin metal structures?

Thanks for any advice,

Ian

import sys
import os
#import shutil
from math import pi
import datetime
import meep as mp

susc_aluminium = [
    mp.LorentzianSusceptibility(frequency=1e-20, gamma=0.037908, sigma=7.6347e41),
    mp.LorentzianSusceptibility(frequency=0.13066, gamma=0.26858, sigma=1941),
    mp.LorentzianSusceptibility(frequency=1.2453, gamma=0.25165, sigma=4.7065),
    mp.LorentzianSusceptibility(frequency=1.4583, gamma=1.0897, sigma=11.396),
    mp.LorentzianSusceptibility(frequency=2.8012, gamma=2.7278, sigma=0.55813)
]

aluminium = mp.Medium(epsilon=1.0, E_susceptibilities=susc_aluminium)

dummy = mp.Medium(epsilon=100.0)


x_size=1.0
y_size=4.0
cell=mp.Vector3(x_size, y_size, 0)
pml_layers=[mp.PML(1.0, direction=mp.Y)]
f_cen=1.9568
df=1.3495
par_source=[mp.Source(mp.GaussianSource(f_cen, fwidth=df), component=mp.Ez, center=mp.Vector3(0, -0.75), size=mp.Vector3(x_size, 0))]
perp_source=[mp.Source(mp.GaussianSource(f_cen, fwidth=df), component=mp.Hz, center=mp.Vector3(0, -0.75), size=mp.Vector3(x_size, 0))]
grating_pitch=0.2
wire_width=0.1
wire_thickness=0.0
grating_geometry=[]
for wire_count in range(5):
    grating_geometry.append(mp.Block(mp.Vector3(wire_width, wire_thickness, 1e20), center=mp.Vector3(-0.5*x_size+(0.5+wire_count)*grating_pitch, 0, 0), material=aluminium))
trans_fr = mp.FluxRegion(center=mp.Vector3(0, 0.75), size=mp.Vector3(x_size, 0))
output_dir='WGP-'+datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
#os.mkdir(output_dir)
trans_fr = mp.FluxRegion(center=mp.Vector3(0, 0.75), size=mp.Vector3(x_size, 0))
sim=mp.Simulation(cell_size=cell, boundary_layers=pml_layers, k_point=mp.Vector3(2*grating_pitch/(2*pi), 0, 0), sources=perp_source, geometry=[], eps_averaging=True, resolution=100)
sim.use_output_directory(output_dir)
tr_flux = sim.add_flux(f_cen, df, 201, trans_fr)
sim.run(mp.at_beginning(mp.output_epsilon), mp.to_appended("hz0", mp.at_every(0.1, mp.output_hfield_z)), until=200)
stdout=sys.stdout
opf=open(output_dir+'/reference_flux.out', 'w')
sys.stdout=opf
sim.display_fluxes(tr_flux)
opf.close()
sys.stdout=stdout
sim.reset_meep()
sim=mp.Simulation(cell_size=cell, boundary_layers=pml_layers, k_point=mp.Vector3(2*grating_pitch/(2*pi), 0, 0), sources=perp_source, geometry=grating_geometry, eps_averaging=True, resolution=100)
sim.use_output_directory(output_dir)
tr_flux = sim.add_flux(f_cen, df, 201, trans_fr)
sim.run(mp.at_beginning(mp.output_epsilon), mp.to_appended("hz", mp.at_every(0.1, mp.output_hfield_z)), until=200)
stdout=sys.stdout
opf=open(output_dir+'/flux.out', 'w')
sys.stdout=opf
sim.display_fluxes(tr_flux)
opf.close()
sys.stdout=stdout

_______________________________________________
meep-discuss mailing list
meep-discuss@ab-initio.mit.edu
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss

Reply via email to