AnalyticWaveguideModel¶
- class photonforge.AnalyticWaveguideModel(*, n_eff, length=None, propagation_loss=0.0, extra_loss=0.0, n_group=None, dispersion=0.0, dispersion_slope=0.0, reference_frequency=None, dn_dT=0.0, dL_dT=.0, temperature=293.0, reference_temperature=293.0, voltage=0.0, v_piL=e)[source]¶
Analytic model for waveguides, bends, and EO phase-shifters.
This model for 2-port components includes dispersion and temperature sensitivity for single- and multi-mode waveguides. For each mode, the transmission between ports at frequency \(f\) is:
\[ \begin{align}\begin{aligned}S_{12} &= S_{21} = 10^{-\frac{L}{20}} e^{j (\beta \ell + \phi_{eo})}\\L &= L_0 + L_p \ell\\\beta &= \beta_0 + \beta_1 \Delta\omega + \frac{\beta_2}{2} \Delta\omega^2 + \frac{\beta_3}{6} \Delta\omega^3\\\beta_0 &= \frac{\omega_0}{c_0} n_\text{eff}\\\beta_1 &= \frac{n_\text{group}}{c_0}\\\beta_2 &= -\frac{\lambda_0}{\omega_0} D\\\beta_3 &= \left(\frac{\lambda_0}{\omega_0}\right)^2 \left(S + \frac{2}{\lambda_0} D\right)\\\phi_{eo} &= \frac{\pi V \ell}{V_{\pi L}}\end{aligned}\end{align} \]in which \(\lambda_0 = c_0 f_0^{-1}\), \(\omega_0 = 2 \pi f_0\), \(\Delta\omega = 2 \pi (f - f_0)\), and the temperature dependence is taken into account through:
\[ \begin{align}\begin{aligned}n_\text{eff}(T) &= n_\text{eff}(T_0) + \frac{{\rm d}n_\text{eff}}{{\rm d}T} (T - T_0)\\L_p(T) &= L_p(T_0) + \frac{{\rm d}L_p}{{\rm d}T} (T - T_0)\end{aligned}\end{align} \]- Parameters:
n_eff (complex | Sequence[complex]) – Effective refractive index (loss can be included here by using complex values).
length (Annotated[float, units='μm'] | None) – Length \(\ell\) of the waveguide. If not provided, the length is measured by
route_length()or ports distance.propagation_loss (Annotated[float, minimum=0, units='dB/μm'] | Sequence[Annotated[float, minimum=0, units='dB/μm']]) – Propagation loss \(L_p\).
extra_loss (Annotated[float, minimum=0, units='dB'] | Sequence[Annotated[float, minimum=0, units='dB']]) – Length-independent loss \(L_0\). This can be used, for example, to model bending losses.
n_group (float | Sequence[float] | None) – Group index. If
None, the value ofn_effis used.dispersion (Annotated[float, units='s/μm²'] | Sequence[Annotated[float, units='s/μm²']]) – Chromatic dispersion coefficient \(D\).
dispersion_slope (Annotated[float, units='s/μm³'] | Sequence[Annotated[float, units='s/μm³']]) – Chromatic dispersion slope \(S\).
reference_frequency (Annotated[float, minimum=0, units='Hz'] | None) – Reference frequency \(f_0\) for dispersion coefficients. If
None, the central frequency is used.dn_dT (Annotated[complex | Sequence[complex], units='1/K']) – Temperature sensitivity for
n_eff.dL_dT (Annotated[float | Sequence[float], units='dB/μm/K']) – Temperature sensitivity for
propagation_loss.temperature (Annotated[float, minimum=0, units='K']) – Operating temperature \(T\).
reference_temperature (Annotated[float, minimum=0, units='K']) – Reference temperature \(T_0\).
voltage (Annotated[float, units='V']) – Operating voltage \(V\).
v_piL (Annotated[float, units='V·μm'] | None) – Electro-optic phase coefficient \(V_{\pi L}\).
Methods
black_box_component([port_spec, technology, ...])Create a black-box component using this model for testing.
estimate_cost(*args, **kwargs)Estimate the cost for S matrix computation.
s_matrix(component, frequencies[, ...])Compute the S matrix for a component using this model.
setup_time_stepper(component, time_step[, ...])Obtain a time stepper for a component using this model.
start(component, frequencies[, temperature, ...])Start computing the S matrix response from a component.
update(*args, **kwargs)Update this model.
Attributes
parametric_functionFunction used to update a parametric component.
parametric_kwargsKeyword arguments used to update a parametric component.
propertiesObject properties.
random_variablesRandom variables associated to this modles's parameters.
time_stepperTime stepper associated with this model.
- black_box_component(port_spec=None, technology=None, name=None)[source]¶
Create a black-box component using this model for testing.
- Parameters:
port_spec (str | PortSpec | None) – Port specification used in the component. If
None, look for"port_spec"inconfig.default_kwargs.technology (Technology | None) – Component technology. If
None, the default technology is used.name (str | None) – Component name. If
Nonea default is used.
- Returns:
Component with ports and model.
- Return type:
- start(component, frequencies, temperature=None, voltage=None, **kwargs)[source]¶
Start computing the S matrix response from a component.
- Parameters:
component (Component) – Component from which to compute the S matrix.
frequencies (Sequence[Annotated[float, minimum=0, units='Hz']]) – Sequence of frequencies at which to perform the computation.
temperature (Annotated[float, minimum=0, units='K'] | None) – Operating temperature override.
voltage (Annotated[float, units='V'] | None) – Operating voltage override.
**kwargs – Unused.
- Returns:
Result object with attributes
statusands_matrix.- Return type: