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