LinearOps.jl

Amalthea.LinearOps.ZDepLinopFreeType
ZDepLinopFree{F, D}

Free-space (TransFree) analogue of Amalthea.Capillary.ZDepLinopMarcatili for a two-point pressure-gradient gas cell: wraps a z-dependent linop!(out, z) closure together with the precomputed density-spline knots and β1(z) constants RustNativeStepper's native path needs. Callable as (w::ZDepLinopFree)(out, z), so it behaves identically to the plain linop! closure everywhere a z-dependent linop is used.

source
Amalthea.LinearOps.conj_clampMethod
conj_clamp(n, ω)

Simultaneously conjugate and clamp the effective index n to safe levels.

The real part is lower-bounded at 1e-3 and the imaginary part upper-bounded at an attenuation coefficient α of 3000 (130 dB/cm). The limits are somewhat arbitrary and chosen empirically from previous bugs. See https://github.com/LupoLab/Amalthea/pull/142.

See also αlim!.

source
Amalthea.LinearOps.make_const_linopMethod
make_const_linop(grid, xygrid, n, frame_vel)

Make constant linear operator for full 3D propagation. n is the refractive index (array) and β1 is 1/velocity of the reference frame.

source
Amalthea.LinearOps.make_const_linopMethod
make_const_linop(grid, modes, λ0; ref_mode=1)

Make constant (z-invariant) linear operator for multimode propagation. The frame velocity is taken as the group velocity at wavelength λ0 in the mode given by ref_mode (which indexes into modes)

source
Amalthea.LinearOps.make_const_linopMethod
make_const_linop(grid, q::QDHT, n, frame_vel)

Make constant linear operator for radial free-space. n is the refractive index (array) and β1 is 1/velocity of the reference frame.

source
Amalthea.LinearOps.make_linopMethod
make_linop(grid, xygrid, nfun)

Make z-dependent linear operator for free-space propagation. nfun(ω; z) should return the refractive index as a function of frequency ω and (kwarg) propagation distance z.

source
Amalthea.LinearOps.make_linopMethod
make_linop(grid, q::QDHT, nfun)

Make z-dependent linear operator for radial free-space propagation. nfun(ω; z) should return the refractive index as a function of frequency ω and (kwarg) propagation distance z.

source
Amalthea.LinearOps.make_linop_free_gradientMethod
make_linop_free_gradient(grid, xygrid, gas, L, p0, p1; T=PhysData.roomtemp)

Convenience constructor (mirrors Amalthea.Capillary.gradient) for a free-space two-point pressure-gradient gas cell: builds the ordinary z-dependent linop! (make_linop) and wraps it in a ZDepLinopFree carrying the metadata RustNativeStepper's Phase D.5 native path needs. Returns (wrapped_linop, densf)densf(z) should also be passed as the densityfun for Amalthea.setup/TransFree construction, and to Amalthea.NonlinearRHS.norm_free_gradient so the linop and nonlinear-norm paths share an identical density profile (not just numerically equal — the same spline object).

source
Amalthea.LinearOps.neff_gridMethod
neff_grid(grid, modes, λ0; ref_mode=1)

Create a closure that returns the effective index as a function of the frequency grid and mode index, rather than the mode and frequency themselves. Any Modes.AbstractMode may define its one method for neff_grid to accelerate repeated calculation on the same frequency grid.

source
Amalthea.LinearOps.neff_β_gridMethod
neff_β_grid(grid, mode, λ0; ref_mode=1)

Create closures which return the effective index and propagation constant as a function of the frequency grid index, rather than the frequency itself. Any Modes.AbstractMode may define its own method for neff_β_grid to accelerate repeated calculation on the same frequency grid.

source