AnalyticDirectionalCouplerModel¶
- class photonforge.AnalyticDirectionalCouplerModel(*, interaction_length, coupling_length, propagation_length=one, cross_phase=90, insertion_loss=0.0, isolation=0.0, reflection=0.0, n_eff=0.0, n_group=None, reference_frequency=None, ports=None)[source]¶
Analytic model for a 4-port directional coupler.
The S matrix for the directional coupler for each mode is given by:
\[\begin{split}S = \begin{bmatrix} r & i & t & c \\ i & r & c & t \\ t & c & r & i \\ c & t & i & r \\ \end{bmatrix}\end{split}\]with coefficients:
\[ \begin{align}\begin{aligned}t &= \sqrt{1 - c_r} A e^{j \phi}\\c &= \sqrt{c_r} A e^{j (\phi + \Delta\phi)}\\c_r &= \sin^2\left(\frac{\pi l_i}{2 l_c}\right)\\A &= 10^{-\frac{L_\text{dB}}{20}}\\\phi &= \frac{2 \pi l_p}{c_0} [n_\text{eff} f_0 + n_\text{group} (f - f_0)]\end{aligned}\end{align} \]- Parameters:
interaction_length (float) – Interaction length \(l_i\).
coupling_length (Annotated[float | Sequence[float] | Sequence[Sequence[float]], units='μm']) – Beat length \(l_c\).
propagation_length (Annotated[float | Sequence[float] | Sequence[Sequence[float]], units='μm'] | None) – Propagation length \(l_p\). If
None, the value ofinteraction_lengthis used.cross_phase (Annotated[float | Sequence[float] | Sequence[Sequence[float]], units='°']) – Cross-port phase shift \(\Delta\phi\).
insertion_loss (Annotated[complex | Sequence[complex] | Sequence[Sequence[complex]], units='dB']) – Insertion loss \(L_\text{dB}\).
isolation (complex | Sequence[complex] | Sequence[Sequence[complex]] | Interpolator) – Leakage (isolation) coefficient \(i\).
reflection (complex | Sequence[complex] | Sequence[Sequence[complex]] | Interpolator) – Reflection coefficient \(r\).
n_eff (complex | Sequence[complex] | Sequence[Sequence[complex]] | Interpolator) – Effective refractive index.
n_group (float | Sequence[float] | Sequence[Sequence[float]] | None) – Group index. If
None, the value ofn_effis used.reference_frequency (Annotated[float, minimum=0, units='Hz'] | None) – Reference frequency \(f_0\) for dispersion calculation. If
None, the frequency average is used.ports (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, a sequence of coefficients must be used, and mixed-mode coefficients are 0. Dispersion can be included in the model by setting the coefficients to an
Interpolator(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
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, **kwargs)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: