RingModel¶
- class photonforge.RingModel(*, kappa1, kappa2=None, n_eff, length, propagation_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, dn_dv=0.0, dn_dv2=, dloss_dv=.0, dloss_dv2=, ports=None)[source]¶
Analytic ring resonator/modulator model with single or double bus.
The S matrix for each mode is given by:
\[\begin{split}S = \begin{bmatrix} 0 & t_1 & d & 0 \\ t_1 & 0 & 0 & d \\ d & 0 & 0 & t_2 \\ 0 & d & t_2 & 0 \\ \end{bmatrix}\end{split}\]in which \(t_1\) and \(t_2\) are the thru-port transmissions, and \(d\) is the drop-port transmission. Temperature- and voltage-dependent effective index and ring loss are introduced analogously to the
AnalyticWaveguideModel.For single-bus models, \(\tau_2 = 1\) and the S matrix becomes:
\[\begin{split}S = \begin{bmatrix} 0 & t_1 \\ t_1 & 0 \\ \end{bmatrix}\end{split}\]- Parameters:
kappa1 (complex | Sequence[complex] | Sequence[Sequence[complex]] | Interpolator) – Coupling coefficient for the first bus waveguide.
kappa2 (complex | Sequence[complex] | Sequence[Sequence[complex]] | Interpolator | None) – Coupling coefficient for the second bus waveguide. If
None, models a single-bus ring.n_eff (complex | Sequence[complex] | Interpolator) – Effective refractive index (loss can be included here by using complex values).
length (Annotated[float, units='μm']) – Round-trip length of the ring.
propagation_loss (Annotated[float, minimum=0, units='dB/μm'] | Sequence[Annotated[float, minimum=0, units='dB/μm']]) – Propagation loss.
n_group (float | Sequence[float] | Interpolator | 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.
dispersion_slope (Annotated[float, units='s/μm³'] | Sequence[Annotated[float, units='s/μm³']]) – Chromatic dispersion slope.
reference_frequency (Annotated[float, minimum=0, units='Hz'] | None) – Reference frequency 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.
reference_temperature (Annotated[float, minimum=0, units='K']) – Reference temperature.
voltage (Annotated[float, units='V']) – Operating voltage.
dn_dv (Annotated[complex, units='1/V']) – Linear voltage-dependent effective index coefficient.
dn_dv2 (Annotated[complex, units='1/V²']) – Quadratic voltage-dependent effective index coefficient.
dloss_dv (Annotated[float, units='dB/μm/V']) – Linear voltage-dependent propagation loss coefficient.
dloss_dv2 (Annotated[float, units='dB/μm/V²']) – Quadratic voltage-dependent propagation loss coefficient.
ports (Annotated[Sequence[str], maxItems=2, minItems=2] | Annotated[Sequence[str], maxItems=4, minItems=4] | None) – List of port names. If not set, the sorted list of port names from the component is used.
Notes
For multimode ports, mixed-mode coefficients are 0. Parameters can be specified per mode by using sequences of values. Dispersion for
kappa1andkappa2can also be manually included by setting the coefficients to anInterpolator(with multiple values for multimode ports), or a 2D array with shape (M, N), in which M is the number of modes, and N the length of the frequency sequence used in the S matrix computation.Methods
autograd_smatrix(*, component, ...[, ...])Compute an autograd-compatible S matrix for traced parameters.
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.
transform([translation, rotation, scaling, ...])Apply a transformation to this model.
update(*args, **kwargs)Update this model.
Attributes
parametric_functionFunction used to update the model.
parametric_kwargsKeyword arguments used to update the model.
propertiesObject properties.
random_variablesRandom variables associated to the model'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 (object) – Unused.
- Returns:
Result object with attributes
statusands_matrix.- Return type: