The lens frame
LensFrameSimulation propagates the field on a grid that expands from the
cell centre to the mirrors exactly like the cell eigenmode. It is the recommended solver.
Why
A fixed grid must hold the beam on the mirrors and resolve it at the waist. The ratio of the two is
which grows without bound towards the concentric limit, i.e. for the high-energy cells. A fixed grid
needs 480 points per axis for the tutorial cell (\(s_m = 6.4\)) and 1125 for the 18 mJ Kaumanns cell
(\(s_m = 14.6\)); the lens frame needs 75 for both. Its size, about box_factor ×
points_per_waist × \(\sqrt{\lambda_\max/\lambda_\min}\) points per axis, does not depend on
\(d\).
The transformation
With \(z\) measured from the cell centre,
Exact for every colour: all wavelengths share the same \(z_R\), so the same \(s\) and \(\mathcal{R}\).
The mirror is the identity: at the mirror \(\mathcal{R} = R\), and the reflection turns the frame wavefront into the frame wavefront of the way back. A bounce is only the spectral response of the mirror and its aperture, taken at the physical radius \(s_m\rho\).
The centre is physical: there \(s = 1\) and \(B = A\), so every diagnostic recorded at the centre is unchanged. Mirror records are in frame units (
sim.mirror_scaleconverts them).
In the frame the paraxial envelope equation becomes, exactly,
Diffraction and the harmonic potential have the Hermite–Gauss modes of the cell as eigenstates, so the Gouy phase per pass is built in. Dispersion keeps its physical length (\(s^2 d\zeta = dz\)) and the Kerr term, and with it the B-integral, is unchanged.
Scheme
Each step \(h\) in \(\zeta\):
[diffraction + dispersion](h/2) [potential(h/2) Kerr-RK4(h) potential(h/2)] [diffraction + dispersion](h/2)
with \(h = \min(\texttt{gouy\_step}\cdot z_R,\ \varphi_\text{max}/(k_0 n_2 I_\text{peak}))\).
gouy_step (0.05 rad) sets the accuracy of diffraction, phi_max (0.02 rad) that of the Kerr step.
The phase factors are rebuilt from 1D arrays, so no full-size operator is stored.
Limits
The frame equation is paraxial; the standard solver is not. For MPC beams (a few mrad) the difference is negligible.
It assumes the symmetric two-mirror cell, unfolded and on axis.
The box absorber acts in the frame:
box_factorwaists at the centre, \(s_m\) times more on the mirror.tests/test_lensframe.pychecks that one pass leaves the eigenmode unchanged (overlap > 0.9999) and that, for a Kerr-matched 1 mJ pulse in a near-concentric cell, both solvers agree within 0.5 % on the B-integral, the energy, the HG₀₀ fraction and the beam size.