Metamaterial studio

WAVEFORGE

FDTD · 480×240 · TM · cwsrccell
−E+E

Building lattice…

Hexagonal dielectric rods. A complete TM gap opens when ε contrast and fill sit on the gap map.

Auto-rotate lattice
Field guides

Bragg

Bandgap

Bragg gap. Bloch modes are evanescent — the lattice is a mirror.

n_eff
1.81
ε_eff
3.29
μ_eff
1.00
a/λ
0.251
T
0.00
Transmission T(ω)live 0.00
# WAVEFORGE · Photonic crystal unit cell
# a = 8 µm fill = 0.36 ε = 11.7 gap = 0.28
# drive = 9.4 THz a/λ = 0.251 TM cw
# regime: Bandgap n_eff ≈ 1.81 ε_eff ≈ 3.29 μ_eff ≈ 1.00
# Generated Meep script — 2D TM through a PhC lattice.
# pip install meep (or conda install -c conda-forge pymeep)
import meep as mp
import numpy as np
a = 8 # lattice constant (µm)
f = 9.4 # drive (THz)
c = 299.792458 # µm·THz
fcen = a * f / c # Meep frequency in units of c/a
df = 0.2 * fcen
resolution = 32
ncell = 6
dpml = 1.0
metal = mp.Medium(epsilon=1, D_conductivity=1e6)
solid = mp.Medium(epsilon=11.7)
geometry = [
mp.Cylinder(radius=0.261 * a,
height=mp.inf,
material=mp.Medium(epsilon=11.7),
center=mp.Vector3()),
]
cell = mp.Vector3((ncell + 2*dpml + 4) * a, a, 0)
sim = mp.Simulation(
cell_size=cell,
geometry=geometry,
sources=[mp.Source(
mp.ContinuousSource(frequency=fcen) if "cw" == "cw"
else mp.GaussianSource(frequency=fcen, fwidth=df),
component=mp.Ez if "TM" == "TM" else mp.Hz,
center=mp.Vector3(-0.5*cell.x + dpml*a + a, 0, 0),
size=mp.Vector3(0, a, 0),
)],
boundary_layers=[mp.PML(dpml * a)],
resolution=resolution,
default_material=mp.air,
)
tran = sim.add_flux(fcen, df, 27,
mp.FluxRegion(center=mp.Vector3(0.5*cell.x - dpml*a - 0.6*a, 0, 0),
size=mp.Vector3(0, a, 0)))
sim.run(until=400)
print("WAVEFORGE n_eff target:", 1.81)
print("transmitted flux:", mp.get_fluxes(tran))