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]]) – Leakage (isolation) coefficient \(i\).
reflection (complex | Sequence[complex] | Sequence[Sequence[complex]]) – Reflection coefficient \(r\).
n_eff (complex | Sequence[complex] | Sequence[Sequence[complex]]) – 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, mixed-mode coefficients are 0. Parameters can be specified per mode by using sequences of values. Dispersion can also be manually included by setting the coefficients to 2D arrays 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: