A Python simulation of pulse formation in a mode-locked V-cavity VECSEL (vertical-external-cavity surface-emitting laser).
The model reproduces the findings of
Sieber, Mangold, Golling, Tilma, Südmeyer, Keller, "Experimentally verified pulse formation model for high-power femtosecond VECSELs," Applied Physics B 113 (2013). https://doi.org/10.1007/s00340-013-5449-7
The RK4 core is JIT-compiled with Numba.
The complex field envelope is propagated round trip by round trip through
output coupler → GDD → gain (SESAM-arm pass) →
SESAM → gain (output-arm pass) → residual losses
Two gain passes per round trip model the V-cavity. The gain and SESAM ground-state variables are carried between pulses by projecting their exponential recovery analytically over the dark inter-pulse interval, so only the ~T window around the pulse is integrated numerically.
Units throughout: nm (wavelength), fs (time), nJ (energy), MW (power).
pip install -r requirements.txt
or, as an editable install:
pip install -e .
Requires Python ≥ 3.10, NumPy, SciPy, Matplotlib, and Numba.
python run_stability.py # start from noise, run until stable
python run_stability.py --seed # seed with a sech pulse for faster convergence
python run_stability.py --help # all options
The script plots the per-trip pulse trace, peak intracavity power, and
pulse FWHM. Pass --no-plot for headless operation, --save out.npz to
persist the trip-by-trip arrays, or --figs-dir DIR to save the plots as
PNGs instead of showing them interactively.
The three figures below are produced by
python run_stability.py --seed --figs-dir docs/figures
and recreate Figure 4 of Sieber et al. 2013 (pulse build-up from a sech seed to a steady-state mode-locked pulse).
pytest
Covers the parabolic filter, FWHM finder, RK4 closed-form match when P=0, GDD energy conservation and phase identity, pulse centering, grid sanity, and an end-to-end smoke test.
vecsel/ simulation package
constants.py physical parameters from Sieber et al. 2013
grid.py time/frequency grid, spectral filter, initial pulse
ode.py RK4 for the saturable-medium rate equation (Numba)
gdd.py intracavity group-delay dispersion
gain.py active-region gain element (one pass)
sesam.py two-timescale saturable absorber mirror
utils.py par, fwhm, center_pulse
run_stability.py stability-detecting run script
tests/ pytest suite


