thunder4d.cell

The multipass cell. See Simulation for the unfolded picture, the eigenmode and the nonlinear mode matching.

class thunder4d.cell.MPC(R, d, medium, n_passes, *, mirror_gdd_fs2=0.0, mirror_tod_fs3=0.0, mirror_reflectivity=1.0, mirror_phase=None, mirror_diameter=None)[source]

Symmetric two-mirror cell.

Parameters:
  • R (float) – mirror radius of curvature [m]

  • d (float) – mirror separation [m], \(0 < d < 2R\)

  • medium – Material

  • n_passes (int) – passes = bounces (transit over d + bounce, starting right after a mirror)

  • mirror_gdd_fs2 (float) – GDD per bounce [fs²]

  • mirror_tod_fs3 (float) – TOD per bounce [fs³]

  • mirror_reflectivity – intensity reflectivity, scalar or callable R(lambda_m)

  • mirror_phase (callable) – phi(lambda_m) [rad] per bounce (e.g. a measured GDD curve)

  • mirror_diameter (float) – clear aperture [m] (soft super-Gaussian edge, order 30); None = infinite

Attributes: R, d, medium, n_passes, g (\(1 - d/R\)), theta (Gouy phase per pass [rad]).

classmethod herriott(R, N, k, medium, branch='concentric', n_passes=None, **kw)[source]

Re-entrant Herriott cell that closes on itself after N passes: \(d = R[1+\cos(2\pi k/N)]\) (branch="concentric", default) or \(d = R[1-\cos(2\pi k/N)]\) (branch="planar"). The concentric branch requires an even N. n_passes defaults to N (one re-entrant cycle); set it to simulate any other number of passes in the same cell.

linear_mode(lam)[source]

Linear eigenmode at wavelength lam.

Returns:

dict with w0, w_mirror, zR, gouy_per_pass

nonlinear_mode(P, lam, verbose=False)[source]

Kerr-matched eigenmode for power P [W] at wavelength lam [m]. Raises ValueError if \(P \ge P_c\).

Returns:

dict

P, Pc, P_over_Pc

power, critical power, ratio

w0, w_mirror

matched waist and mirror spot [m]

w0_linear, w_mirror_linear

linear values [m]

B_per_pass, B_total

on-axis peak B-integral estimates [rad]

I_peak_center_W_cm2

peak intensity at the waist [W/cm²]

match(pulse, power='peak', verbose=True, lam=None)[source]

Same as nonlinear_mode(), with the power and the wavelength taken from a Pulse: "peak" uses peak_power(), "weighted" uses weighted_power(). A number in W is also accepted, with its wavelength lam.

report(m=None)[source]

Text summary of the cell and, optionally, of a matching dict.

mirror_spectrum(grid)[source]

Spectral transfer of one bounce on grid.Omega: GDD, TOD, reflectivity and mirror_phase, zero outside the valid spectral window. Shape (Nt,).

mirror_aperture(r)[source]

Amplitude transmission of the clear aperture at radius r [m] (soft super-gaussian edge of order 30); ones if mirror_diameter is None.

bounce_factor(grid)[source]

Complex transfer of one mirror, shape grid.shape (cached): curvature, mirror_spectrum() and mirror_aperture().

bounce(Aw, grid)[source]

Apply one mirror to Aw in place and return it.