Source code for piel.models.frequency.photonic.straight_waveguide
"""
Translated from https://github.com/flaport/sax or https://github.com/flaport/photontorch/tree/master
"""
__all__ = [
"active_waveguide",
"waveguide",
"simple_straight",
"lossless_straight",
"ideal_lossless_active_waveguide",
]
[docs]
def waveguide(wl=1.55, wl0=1.55, neff=2.34, ng=3.4, length=10.0, loss=0.0):
import sax
import jax.numpy as jnp
dwl = wl - wl0
dneff_dwl = (ng - neff) / wl0
neff = neff - dwl * dneff_dwl
phase = 2 * jnp.pi * neff * length / wl
amplitude = jnp.asarray(10 ** (-loss * length / 20), dtype=complex)
transmission = amplitude * jnp.exp(1j * phase)
sdict = sax.reciprocal({("o1", "o2"): transmission})
return sdict
[docs]
def active_waveguide(
wl=1.55, wl0=1.55, neff=2.34, ng=3.4, length=10.0, loss=0.0, active_phase_rad=0.0
):
import sax
import jax.numpy as jnp
dwl = wl - wl0
dneff_dwl = (ng - neff) / wl0
neff = neff - dwl * dneff_dwl
phase = (2 * jnp.pi * neff * length / wl) + active_phase_rad
amplitude = jnp.asarray(10 ** (-loss * length / 20), dtype=complex)
transmission = amplitude * jnp.exp(1j * phase)
sdict = sax.reciprocal({("o1", "o2"): transmission})
return sdict
[docs]
def simple_straight(length=10.0, width=0.5):
import sax
S = {("o1", "o2"): 1.0} # we'll improve this model later!
return sax.reciprocal(S)
[docs]
def lossless_straight():
"""
See the 06a_analytical_mzm_model notebook for verification
"""
import sax
S = {("o1", "o2"): 1.0} # we'll improve this model later!
return sax.reciprocal(S)
[docs]
def ideal_lossless_active_waveguide(active_phase_rad=0.0):
"""
See the 06a_analytical_mzm_model notebook for verification
"""
import sax
import jax.numpy as jnp
phase = active_phase_rad
amplitude = 1
transmission = amplitude * jnp.exp(-1j * phase)
S = sax.reciprocal({("o1", "o2"): transmission})
return S