LPSE-2D (Envelope-2D) Configuration Reference
This document describes how to construct a configuration file for the envelope-2d solver. This is a 2D laser-plasma simulation using envelope equations for electron plasma waves (EPW). It supports two-plasmon decay (TPD), stimulated Raman scattering (SRS), and other laser-plasma instabilities.
Top-Level Structure
solver: envelope-2d
units:
# Physical unit normalizations
density:
# Density profile configuration
grid:
# Simulation grid parameters
save:
# Output configuration
mlflow:
# Experiment tracking
drivers:
# Laser and EPW drivers
terms:
# Physics terms configuration
units
Physical unit normalizations. Note: This module uses different unit keys than the Vlasov modules.
Field |
Type |
Description |
|---|---|---|
|
int |
Atomic number of the ion species |
|
float |
Reference density as fraction of critical density |
|
int |
Ionization state Z |
|
string |
Laser intensity with unit, e.g., |
|
string |
Laser wavelength with unit, e.g., |
|
string |
Electron temperature with unit, e.g., |
|
string |
Ion temperature with unit, e.g., |
Example:
units:
atomic number: 40
envelope density: 0.25
ionization state: 6
laser intensity: 1.5e+14W/cm^2
laser_wavelength: 351nm
reference electron temperature: 2000.0eV
reference ion temperature: 1000eV
density
Density profile configuration.
Field |
Type |
Description |
|---|---|---|
|
string |
Profile type: |
|
float |
Density fraction of critical (for |
|
string |
Scale length with unit (for |
|
float |
Maximum density fraction (for |
|
float |
Minimum density fraction (for |
|
object |
Ignored (legacy). The initial EPW is identically zero; noise-seeded runs use the per-step |
Example: Uniform Density
density:
basis: uniform
val: 0.2
noise:
max: 1.0e-09
min: 1.0e-10
type: uniform
Example: Linear Density Gradient
density:
basis: linear
gradient scale length: 50um
max: 0.28
min: 0.18
noise:
max: 1.0e-09
min: 1.0e-10
type: uniform
Note: When using linear basis, the grid size is automatically computed from the gradient scale length and density range.
grid
Simulation grid parameters. Note: Grid values use physical units as strings.
Field |
Type |
Description |
|---|---|---|
|
float |
Absorbing boundary coefficient |
|
string |
Width of absorbing boundary layer with unit |
|
float |
Low-pass filter cutoff as fraction of kmax (0-1) |
|
string |
Shape of the anti-aliasing mask: |
|
string |
Timestep with unit |
|
string |
Spatial resolution with unit |
|
string |
End time with unit |
|
string |
Start time with unit |
|
string |
Domain maximum y with unit |
|
string |
Domain minimum y with unit |
|
int |
(dynamic light only, optional) Light-wave sub-steps per EPW step. Computed from the explicit-scheme stability limit for every evolved carrier ( |
|
string |
(SRS only, optional) Distance of the laser-budget flux probes from each box edge, with unit. Default |
Note: nx and ny are computed automatically from the grid parameters. The grid is optimized for FFT performance (sizes with small prime factors).
Note: setting ymax/ymin smaller than dx collapses the box to ny = 1, which runs the solver in a true 1D mode (useful for cheap 1D SRS simulations; TPD requires 2D).
Anti-aliasing: dealias
The TPD and SRS source terms are products of the pump with a plasma-wave field, formed pointwise in real space. Such a product aliases if it puts content past the Nyquist wavenumber, so part of the band has to be left empty.
Because the pump is built as a plane wave along x (laser.py), the product translates the
plasma-wave spectrum by k0 rather than convolving it against a broad kernel. The band that has to
stay empty is therefore a rectangle, not a disc, and the usual 2/3-style isotropic cutoff is the
wrong shape for the job — it discards high-ky modes that can never alias.
Value |
Mask |
|---|---|
|
` |
|
Additionally requires ` |
shifted-band computes its limits from k0 and the grid, so it stays correct as dx, the laser
wavelength, or the density change — unlike a hand-tuned low_pass_filter.
The two knobs are independent, and low_pass_filter is still applied on top:
dealiashandles aliasing.low_pass_filteris a physics cap. The Landau damping rate inepw.pyis the asymptotic small-k*lambda_Dexpression, which peaks neark*lambda_D ~ 0.7and then decreases, so it under-damps beyond that. Keep the band edge below roughlyk*lambda_D = 0.5.
Both limits are printed at setup, along with the fraction of the k-grid retained and the
k*lambda_D the band edge reaches, so the interaction between the two is visible.
To take advantage of shifted-band, raise low_pass_filter until the printed k*lambda_D is as
large as you are willing to trust:
grid:
dealias: shifted-band
low_pass_filter: 1.0
Example:
grid:
boundary_abs_coeff: 1.0e4
boundary_width: 1.5um
low_pass_filter: 0.66
dt: 0.010fs
dx: 40nm
tmax: 2ps
tmin: 0.0ns
ymax: 0.08um
ymin: -0.08um
save
Configures what data to save and at what times.
Structure
save:
fields:
t:
dt: 100fs
tmax: 4ps
tmin: 0ps
x:
dx: 50nm
y:
dy: 50nm
fields
Field |
Type |
Description |
|---|---|---|
|
object |
Temporal save configuration |
|
object |
Optional spatial subsampling in x |
|
object |
Optional spatial subsampling in y |
t (temporal)
Field |
Type |
Description |
|---|---|---|
|
string |
Time interval between saves, with unit |
|
string |
End time for saving, with unit |
|
string |
Start time for saving, with unit |
x (optional)
Field |
Type |
Description |
|---|---|---|
|
string |
Spatial resolution for saved data, with unit |
y (optional)
Field |
Type |
Description |
|---|---|---|
|
string |
Spatial resolution for saved data, with unit |
mlflow
Experiment tracking configuration.
Field |
Type |
Description |
|---|---|---|
|
string |
MLflow experiment name |
|
string |
MLflow run name |
Example:
mlflow:
experiment: tpd
run: srs-test
drivers
Laser and EPW drivers.
E0 - Pump Laser Driver
The main laser pump for TPD/SRS simulations.
Field |
Type |
Description |
|---|---|---|
|
object |
Spatiotemporal envelope |
|
float |
Maximum frequency spread (optional) |
|
int |
Number of laser colors (optional) |
|
string |
Amplitude shape: |
|
string |
(pump depletion only, optional) Distance of the pump boundary injector from |
|
string |
(pump depletion only, optional) Gaussian turn-on time of the injector. Default |
envelope
All values are strings with physical units.
Field |
Type |
Description |
|---|---|---|
|
string |
Temporal center |
|
string |
Temporal rise time |
|
string |
Temporal width |
|
string |
Spatial center (x) |
|
string |
Spatial rise (x) |
|
string |
Spatial width (x) |
|
string |
Spatial center (y) |
|
string |
Spatial rise (y) |
|
string |
Spatial width (y) |
Example:
drivers:
E0:
delta_omega_max: 0.015
envelope:
tc: 200.25ps
tr: 0.1ps
tw: 400ps
xc: 50um
xr: 0.2um
xw: 1000um
yc: 50um
yr: 0.2um
yw: 1000um
num_colors: 1
shape: uniform
E2 - EPW Driver (Optional)
Direct EPW driver for seeding or testing.
Field |
Type |
Description |
|---|---|---|
|
object |
Same structure as E0 envelope |
|
float |
Amplitude |
|
float |
Wavenumber |
|
float |
Frequency |
Example:
drivers:
E2:
envelope:
tw: 200fs
tr: 25fs
tc: 150fs
xw: 500um
xc: 10um
xr: 0.2um
yr: 0.2um
yc: 0um
yw: 50um
a0: 1000
k0: -10.0
w0: 20.0
E1 - Raman Seed Driver (Optional)
Injects a counter-propagating (-x) scattered-light wave for seeded SRS. Only used when
terms.epw.source.srs is on. The injector sits at x = xmax - offset and drives the
E1 field with a two-point antisymmetric source (the MATLAB LPSE injector), so the seed
propagates toward the low-density side while backscatter growth amplifies it against the pump.
Field |
Type |
Description |
|---|---|---|
|
string |
Seed vacuum intensity with unit, e.g. |
|
float |
Seed frequency shift relative to |
|
string |
Ramp-up time of the injector (default |
|
string |
Distance of the injector from the right boundary. Defaults to |
|
string |
Super-Gaussian (4th order) width of the seed in y; omit for uniform in y |
The density at the injector must be below the w1 critical density (n < 0.25 n_c for
envelope density 0.25), otherwise the seed is evanescent and setup raises an error. Without
drivers.E1, SRS grows from the EPW noise source instead (the noise-seeded configuration).
Example:
drivers:
E1:
intensity: 1.0e+12W/cm^2
delta_omega: 0.0
turn_on_time: 10fs
terms
Physics terms configuration.
Field |
Type |
Description |
|---|---|---|
|
object |
Electron plasma wave configuration |
|
object |
(optional) Light-wave evolution configuration |
|
object |
(optional) Ion-acoustic density evolution and ponderomotive feedback |
|
object |
(optional) Hybrid particle evolution: test-particle Landau damping feedback (Follett et al. 2017) |
|
bool |
Whether to zero out k=0 mode |
light (optional)
Field |
Type |
Description |
|---|---|---|
|
bool |
(default |
|
str |
(default |
|
float |
(default off; |
epw
Field |
Type |
Description |
|---|---|---|
|
object |
Boundary conditions |
|
object |
Damping mechanisms |
|
bool |
Include density gradient effects |
|
bool |
Linear mode (disables nonlinear coupling) |
|
object |
Source terms |
|
object |
Optional hyperviscosity for numerical stability |
|
bool |
Include kinetic correction to real frequency |
boundary
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
string |
|
damping
Field |
Type |
Description |
|---|---|---|
|
bool or float |
Collisional damping. |
|
bool |
Include Landau damping |
source
Field |
Type |
Description |
|---|---|---|
|
bool |
Add random noise source |
|
float |
(optional) Amplitude of the per-step EPW noise source. Default |
|
int |
(optional) Seed for the EPW noise source. Default |
|
bool |
Include the two-plasmon-decay source. With |
|
bool |
Include stimulated Raman scattering (optional, default false). Turning this on also evolves the Raman scattered-light field |
hyperviscosity (optional)
Field |
Type |
Description |
|---|---|---|
|
float |
Hyperviscosity coefficient |
|
int |
Order of hyperviscosity (must be even) |
iaw (optional)
The IAW state follows the MATLAB LPSE split update for fractional ion-density perturbation Nelf and ion-velocity divergence W. Its pressure combines the acoustic restoring term with ponderomotive drive from the EPW, pump, and Raman fields. Nelf feeds back into the EPW, pump, and Raman detuning terms on the next outer step.
Field |
Type |
Description |
|---|---|---|
|
bool |
Enable ion-acoustic evolution (default |
|
object or null |
Per-axis |
|
float |
Density damping rate in |
|
float |
Dimensionless coefficient in `gamma_iaw(k) = landau * cs * |
|
float or null |
Optional symmetric limiter on ` |
The setup validates the explicit acoustic stability condition omega_iaw,max * grid.dt < 2.
terms:
iaw:
active: true
boundary: null
damping:
collisions: 1.0e-5
landau: 0.1
max_density_perturbation: 0.1
hpe (optional)
Hybrid particle evolution, following Follett et al., Phys. Plasmas 24, 102134 (2017): test electrons drawn from the Maxwellian tail are pushed relativistically in the de-enveloped electrostatic field, their spatially averaged velocity distribution is accumulated by exponential moving average, and the Landau damping rate applied by the EPW solver is recomputed from that evolving distribution every step (kinetic inflation + hot-electron generation; Im-only feedback, no nonlinear frequency shift). For ny == 1 the tracker uses (x, p_x); in a 2-D box it uses (x, y, p_x, p_y) and gathers both \(E_x\) and \(E_y\). In both cases there is one box-wide ensemble, not a particle population at each grid point. HPE requires terms.epw.damping.landau: true. The particle push dominates runtime, so HPE runs want a GPU.
In 2-D the box-wide distribution is represented by n_angles oriented projections \(f(\mathbf{v}\cdot\hat{\mathbf{k}})\) over \([0,2\pi)\). Opposite directions remain distinct, and the two neighboring angular histograms are interpolated for every (kx, ky) mode. This is the Radon-projection form of the resonance integral: its memory is n_angles * nv, independent of the spatial mesh. The damping extraction is calibrated per k-mode so that a freshly loaded isotropic Maxwellian tail reproduces the analytic Landau rate exactly; modes whose phase velocity lies below the tail cutoff keep the analytic rate. The default time series gains fhot_50keV, fhot_100keV, hpe_mean_energy_keV, hpe_gamma_ratio_kpeak (applied-to-analytic damping ratio at the resonant-band mode carrying the most EPW energy), hpe_gamma_ratio_min (band minimum; shot-noise-limited at low n_particles), and hpe_hist (one velocity histogram in 1-D or an angle-by-velocity array in 2-D); MLflow metrics gain fhot_50keV, t_first_hot_e_50keV, and hpe_damping_reduction_final.
At an absorbing particle wall, outgoing particles are thermalized and reinjected from the flux-weighted retained-tail law. In 2-D wall coordinates this is \(p(r,\theta) \propto r^2\exp[-r^2/(2v_{te}^2)]\cos\theta\) for \(r > v_{\min}\) and inward \(-\pi/2 < \theta < \pi/2\). This distinction is required to keep repeated wall crossings from biasing the global directional distribution.
Field |
Type |
Description |
|---|---|---|
|
bool |
Enable HPE (default |
|
int |
Number of tail test particles (default |
|
float |
Tail cutoff in units of |
|
float |
Histogram half-span in units of |
|
int |
Velocity bins spanning |
|
int |
Number of oriented global velocity projections spanning \(2\pi\) in 2-D (default |
|
float |
Buffer above |
|
int |
Spectral upsampling factor for |
|
float |
|
|
string |
EMA time constant for the velocity histogram (default |
|
string |
Push/feedback disabled before this time (default |
|
bool |
(default |
|
int |
RNG seed for particle loading and wall re-injection (default |
|
string |
Resonance convention for |
terms:
hpe:
active: true
n_particles: 500000
v_min: 2.5
substep_courant: 0.05
tau_damping: 100fs
t_start: 2ps
Example: TPD Simulation
terms:
epw:
boundary:
x: absorbing
y: periodic
damping:
collisions: 1.0
landau: true
density_gradient: true
linear: true
source:
noise: true
tpd: false
srs: true
zero_mask: true
Example: Simple EPW Test
terms:
epw:
boundary:
x: periodic
y: periodic
damping:
collisions: false
landau: false
density_gradient: false
linear: True
source:
noise: false
tpd: false
zero_mask: false
Complete Example
solver: envelope-2d
units:
atomic number: 40
envelope density: 0.25
ionization state: 6
laser intensity: 1.5e+14W/cm^2
laser_wavelength: 351nm
reference electron temperature: 2000.0eV
reference ion temperature: 1000eV
density:
basis: linear
gradient scale length: 50um
max: 0.28
min: 0.18
noise:
max: 1.0e-09
min: 1.0e-10
type: uniform
grid:
boundary_abs_coeff: 1.0e4
boundary_width: 1.5um
low_pass_filter: 0.66
dt: 0.010fs
dx: 40nm
tmax: 2ps
tmin: 0.0ns
ymax: 0.08um
ymin: -0.08um
mlflow:
experiment: tpd
run: my-simulation
save:
fields:
t:
dt: 0.2ps
tmax: 2ps
tmin: 0ps
x:
dx: 50nm
y:
dy: 50nm
drivers:
E0:
delta_omega_max: 0.015
envelope:
tc: 200.25ps
tr: 0.1ps
tw: 400ps
xc: 50um
xr: 0.2um
xw: 1000um
yc: 50um
yr: 0.2um
yw: 1000um
num_colors: 1
shape: uniform
terms:
epw:
boundary:
x: absorbing
y: periodic
damping:
collisions: 1.0
landau: true
density_gradient: true
linear: true
source:
noise: true
tpd: false
srs: true
zero_mask: true
Example Configurations
EPW Linear Propagation
See configs/envelope-2d/epw.yaml - Simple EPW test without instabilities.
Landau Damping
See configs/envelope-2d/damping.yaml - EPW with Landau damping and trapping model.
Two-Plasmon Decay
See configs/envelope-2d/tpd.yaml - TPD simulation with linear density gradient.
SRS / Reflection
See configs/envelope-2d/srs.yaml - Noise-seeded backward SRS on a linear density ramp
(the lpse-matlab srs_1D case), with a reflectivity time series recorded at a probe on
the low-density side. Also see configs/envelope-2d/reflection.yaml - SRS simulation
with kinetic corrections.
Coupled TPD + SRS + IAW
See configs/envelope-2d/tpd-srs-iaw.yaml for the full 2-D model: both parametric
instabilities, reciprocal pump depletion, ion-acoustic evolution, 2D2V particle
feedback, and shifted-band de-aliasing. See configs/envelope-2d/srs-hpe.yaml for
the less expensive quasi-1D particle-feedback model.