DMLaserTimeStepper

class photonforge.DMLaserTimeStepper(*, quantum_efficiency, spontaneous_emission_factor, carrier_lifetime, gain_compression_factor, transparency_carrier_density, differential_gain, n_group, linewidth_enhancement_factor, confinement_factor, photon_lifetime, active_region_volume, rel_intensity_noise=0, linewidth=0, reflection=0, z0=None, mesh_refinement=None, verbose=True, seed=None)[source]

Time-stepper for a directly modulated laser source.

This model solves the single-mode semiconductor laser rate equations for photon density (\(p\)), carrier density (\(n\)), and optical phase (\(\phi\)). The model includes gain compression, and intensity and phase noises (implemented similarly to CWLaserTimeStepper).

The rate equations are:

\[ \begin{align}\begin{aligned}\frac{{\rm d} p}{{\rm d} t} &= \Gamma G(p) (n-n_0) p - \frac{p}{\tau_p} + \frac{\beta\Gamma}{\tau_n}n\\\frac{{\rm d} n}{{\rm d} t} &= \frac{I(t)}{q V_a} - G(p) (n-n_0) p - \frac{n}{\tau_n}\\\frac{{\rm d} \phi}{{\rm d} t} &= \frac{\alpha}{2} \left(\Gamma v_g a_0 (n-n_0) - \frac{1}{\tau_p}\right)\\G(p) &= \frac{c_0}{n_g} \frac{a_0}{1 + \epsilon p}\end{aligned}\end{align} \]

From the solution of the rate equations at each time step, the instantaneous output power and complex field amplitude for a carrier with frequency \(f_c\) are:

\[ \begin{align}\begin{aligned}P_\text{out} &= \frac{\eta_0 h f_c V_a}{2 \Gamma \tau_p} p\\A &= \sqrt{P_\text{out}} e^{-j\phi}\end{aligned}\end{align} \]
Parameters:
  • quantum_efficiency (Annotated[float, minimum=0]) – Total quantum efficiency (\(\eta_0\)) for power calibration.

  • spontaneous_emission_factor (Annotated[float, minimum=0]) – Fraction of spontaneous emission coupled into the lasing mode (:math`beta`).

  • carrier_lifetime (Annotated[float, exclusiveMinimum=0, units='s']) – Effective carrier recombination lifetime (\(\tau_n\)).

  • gain_compression_factor (Annotated[float, minimum=0, units='m³']) – Gain compression coefficient (\(\epsilon\)).

  • transparency_carrier_density (Annotated[float, minimum=0, units='m⁻³']) – Transparency carrier density (\(n_0\)).

  • differential_gain (Annotated[float, minimum=0, units='m³/s']) – Differential material gain coefficient (\(a_0\)).

  • n_group (Annotated[float, minimum=0]) – Optical group index in the gain medium (\(n_g\)).

  • linewidth_enhancement_factor (Annotated[float, minimum=0]) – Henry’s α factor (\(\alpha\)) for AM-FM coupling.

  • confinement_factor (Annotated[float, exclusiveMinimum=0]) – Modal confinement in the active region (\(\Gamma\)).

  • photon_lifetime (Annotated[float, exclusiveMinimum=0, units='s']) – Photon lifetime in the optical cavity (\(\tau_p\)).

  • active_region_volume (Annotated[float, exclusiveMinimum=0, units='m³']) – Volume of the active gain region (\(V_a\)).

  • rel_intensity_noise (Annotated[float, minimum=0, units='1/Hz']) – One-sided relative intensity noise (RIN) power spectral density.

  • linewidth (Annotated[float, minimum=0, units='Hz']) – Full-width at half-maximum (FWHM) of the laser’s Lorentzian shape.

  • reflection (complex) – Reflection coefficient for incident fields.

  • z0 (Annotated[complex, units='Ω'] | Interpolator | None) – Characteristic impedance of the electrical port used to convert the input field amplitude to voltage. If None, derived from port impedance, calculated by mode-solving, or set to 50 Ω.

  • mesh_refinement (Annotated[float, exclusiveMinimum=0] | None) – Minimal number of mesh elements per wavelength used for mode solving.

  • verbose (bool) – Flag setting the verbosity of mode solver runs.

  • seed (Annotated[int, minimum=0] | None) – Random number generator seed to ensure reproducibility.

Important

The electrical input \(A\) is converted to a current signal through the port impedance:

\[I = \frac{\Re\{A\}}{\sqrt{\Re\{Z_0\}}}\]

References

  1. Coldren, L. A., Corzine, S. W., & Ma, M. L. (2012). Diode Lasers and Photonic Integrated Circuits. Wiley.

  2. Agrawal, G. P., & Dutta, N. K. (1993). Semiconductor Lasers. Van Nostrand Reinhold.

Methods

reset()

Reset internal state.

setup(component, time_step, *[, ...])

Initialize the time stepper.

setup_state(*, component, time_step, ...[, ...])

Initialize internal state.

step([inputs, steps, time_step, show_progress])

Compute the outputs of this time stepper, given inputs.

step_single(inputs, outputs, time_index, ...)

Take a single time step on the given inputs.

update(*args, **kwargs)

Update this time stepper.

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.

status

reset()[source]

Reset internal state.

setup_state(*, component, time_step, carrier_frequency, verbose=None, **kwargs)[source]

Initialize internal state.

Parameters:
  • component (Component) – Component representing the laser source.

  • time_step (Annotated[float, minimum=0, units='s']) – The interval between time steps (in seconds).

  • carrier_frequency (Annotated[float, minimum=0, units='Hz']) – The carrier frequency used to determine the photon energy in the model.

  • verbose (bool | None) – If set, overrides the time stepper’s verbose attribute.

  • kwargs – Unused.

step_single(inputs, outputs, time_index, update_state, shutdown)[source]

Take a single time step on the given inputs.

Parameters:
  • inputs (ndarray) – Input values at the current time step. Must be a 1D array of complex values ordered according to keys.

  • outputs (ndarray) – Pre-allocated output array where results will be stored. Same size and type as inputs.

  • time_index (int) – Time series index for the current input.

  • update_state (bool) – Whether to update the internal stepper state.

  • shutdown (bool) – Whether this is the last call to the single stepping function for the provided TimeSeries.

Return type:

None