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, thermal_impedance=0, thermal_time_constant=1e-6, characteristic_temperature=0, gain_temperature_coefficient=0, dwavelength_dT=0, injection_temperature=0, turn_on_voltage=0, series_resistance=, 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, intensity and phase noises, and optional self-heating.
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} \]The junction temperature follows a first-order thermal circuit:
\[ \begin{align}\begin{aligned}\tau_{\rm th}\frac{{\rm d}\Delta T}{{\rm d}t} + \Delta T = R_{\rm th}\left(I V(I) - P_{\rm out}\right)\\V(I) = V_0 + I R_s\end{aligned}\end{align} \]and acts on the rate equations through:
\[ \begin{align}\begin{aligned}n_0(\Delta T) &= n_0\,e^{\Delta T/T_0}\\a_0(\Delta T) &= a_0\left(1 - c_g \Delta T\right)\\\eta_i(\Delta T) &= e^{-\Delta T/T_1}\\\lambda(\Delta T) &= \lambda + \frac{{\rm d}\lambda}{{\rm d}T}\Delta T\end{aligned}\end{align} \]- Parameters:
quantum_efficiency (Annotated[float, minimum=0]) – Differential quantum efficiency.
spontaneous_emission_factor (Annotated[float, minimum=0]) – Fraction of spontaneous emission coupled into the lasing mode.
carrier_lifetime (Annotated[float, exclusiveMinimum=0, units='s']) – Carrier lifetime.
gain_compression_factor (Annotated[float, minimum=0, units='m³']) – Nonlinear gain suppression coefficient.
transparency_carrier_density (Annotated[float, minimum=0, units='m⁻³']) – Carrier density at transparency.
differential_gain (Annotated[float, minimum=0, units='m²']) – Gain cross-section.
n_group (Annotated[float, minimum=0]) – Group index of the cavity mode.
linewidth_enhancement_factor (Annotated[float, minimum=0]) – Henry factor coupling gain to phase.
confinement_factor (Annotated[float, exclusiveMinimum=0]) – Optical confinement factor.
photon_lifetime (Annotated[float, exclusiveMinimum=0, units='s']) – Cavity photon lifetime.
active_region_volume (Annotated[float, exclusiveMinimum=0, units='m³']) – Volume of the active region.
rel_intensity_noise (Annotated[float, minimum=0, units='1/Hz']) – One-sided relative intensity noise.
linewidth (Annotated[float, minimum=0, units='Hz']) – Lorentzian linewidth used for phase noise.
thermal_impedance (Annotated[float, minimum=0, units='K/W']) – Junction-to-ambient thermal resistance \(R_{\rm th}\). Zero disables self-heating entirely.
thermal_time_constant (Annotated[float, exclusiveMinimum=0, units='s']) – Thermal time constant \(\tau_{\rm th}\).
characteristic_temperature (Annotated[float, minimum=0, units='K']) – \(T_0\) governing the threshold rise. Zero holds the threshold fixed.
gain_temperature_coefficient (Annotated[float, minimum=0, units='1/K']) – Fractional loss of differential gain per kelvin. Zero holds the gain fixed.
dwavelength_dT (Annotated[float, units='m/K']) – Emission wavelength temperature drift.
injection_temperature (Annotated[float, minimum=0, units='K']) – characteristic temperature of carrier leakage \(T_1\). Zero disables leakage.
turn_on_voltage (Annotated[float, minimum=0, units='V']) – Diode voltage drop \(V_0\), used together with
series_resistanceto compute the dissipated power.series_resistance (Annotated[float, minimum=0, units='Ω']) – Series resistance \(R_s\).
reflection (complex) – Reflection coefficient for fields on the optical port.
z0 (Annotated[complex, units='Ω'] | Interpolator | None) – Reference impedance of the electrical port.
mesh_refinement (Annotated[float, exclusiveMinimum=0] | None) – Mesh refinement factor used when the port impedance must be computed by a mode solve.
verbose (bool) – Print progress of any background impedance computation.
seed (Annotated[int, minimum=0] | None) – Random number generator seed.
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.
threshold_current(*[, ...])Cold threshold current of a rate-equation laser, in A.
update(*args, **kwargs)Update this time stepper.
write_verilog_a(path, *[, backend, ...])Write this configured time stepper as one Verilog-A module.
Attributes
Present junction temperature rise above ambient, in K.
parametric_functionFunction used to update the time stepper.
parametric_kwargsKeyword arguments used to update the time stepper.
propertiesObject properties.
random_variablesRandom variables associated to the time stepper's parameters.
status- property junction_temperature: float¶
Present junction temperature rise above ambient, in K.
Exposed because the thermal wavelength shift usually cannot be read off the output field. A rise of a few tens of kelvin moves the emission by a few nanometres, which is hundreds of gigahertz, and the coarse time step that makes thermal simulation affordable puts the Nyquist limit far below that. Reading the temperature and applying
dwavelength_dTgives the shift at any time step:\[\Delta\lambda = \frac{{\rm d}\lambda}{{\rm d}T} \,\Delta T\]- Returns:
Temperature rise in kelvin, zero when self-heating is disabled.
- 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 (object) – Unused.
- Return type:
object
- 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
- static threshold_current(*, transparency_carrier_density=e24, differential_gain=e-20, confinement_factor=0.04, photon_lifetime=2.5e-12, active_region_volume=.71e-19, carrier_lifetime=1e-9, n_group=3.6)[source]¶
Cold threshold current of a rate-equation laser, in A.
Gain equals loss at threshold, which fixes the carrier density and hence the current needed to sustain it:
\[ \begin{align}\begin{aligned}n_{\rm th} = n_0 + \frac{1}{\Gamma v_g a_0 \tau_p}\\I_{\rm th} = \frac{q V_a n_{\rm th}}{\tau_n}\end{aligned}\end{align} \]Useful for choosing
active_region_volumeto hit a target threshold, since the two are proportional. Arguments are in the SI units this class takes; the abstract builders quote values 1e18 away (μm⁻³, μm³, and nm² for the gain cross-section).- Parameters:
transparency_carrier_density (Annotated[float, minimum=0, units='m⁻³']) – \(n_0\).
differential_gain (Annotated[float, exclusiveMinimum=0, units='m²']) – \(a_0\).
confinement_factor (Annotated[float, exclusiveMinimum=0]) – \(\Gamma\).
photon_lifetime (Annotated[float, exclusiveMinimum=0, units='s']) – \(\tau_p\).
active_region_volume (Annotated[float, minimum=0, units='m³']) – \(V_a\).
carrier_lifetime (Annotated[float, exclusiveMinimum=0, units='s']) – \(\tau_n\).
n_group (Annotated[float, exclusiveMinimum=0]) – Group index \(v_g\).
- Returns:
Threshold current in A.
- Return type:
float