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 of interaction_length is 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 of n_eff is 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_function

Function used to update a parametric component.

parametric_kwargs

Keyword arguments used to update a parametric component.

properties

Object properties.

random_variables

Random variables associated to this modles's parameters.

time_stepper

Time 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" in config.default_kwargs.

  • technology (Technology | None) – Component technology. If None, the default technology is used.

  • name (str | None) – Component name. If None a default is used.

Returns:

Component with ports and model.

Return type:

Component

start(component, frequencies, **kwargs)[source]

Start computing the S matrix response from a component.

Parameters:
  • component (Component) – Component from which to compute the S matrix.

  • frequencies (Sequence[float]) – Sequence of frequencies at which to perform the computation.

  • **kwargs (Any) – Unused.

Returns:

Model result with attributes status and s_matrix.

Return type:

SMatrix