NonlinearRHS.jl
Luna.NonlinearRHS.TransFree
— Method(t::TransFree)(nl, Eω, z)
Calculate the reciprocal-domain (ω-kx-ky-space) nonlinear response due to the field Eω
and place the result in nl
.
Luna.NonlinearRHS.TransFree
— MethodTransFree(grid, xygrid, FT, responses, densityfun, normfun)
Construct a TransFree
to calculate the reciprocal-domain nonlinear polarisation.
Arguments
grid::AbstractGrid
: the grid used in the simulationxygrid
: the spatial grid (instances ofGrid.FreeGrid
)FT::FFTW.Plan
: the full 3D (t-y-x) Fourier transform for the oversampled time gridresponses
:Tuple
of response functionsdensityfun
: callable which returns the gas density as a function ofz
normfun
: normalisation factor as fctn ofz
, can be created vianorm_free
Luna.NonlinearRHS.TransModal
— TypeTransModal
Transform E(ω) -> Pₙₗ(ω) for modal fields.
Luna.NonlinearRHS.TransModal
— MethodTransModal(grid, ts, FT, resp, densityfun, norm!; rtol=1e-3, atol=0.0, mfcn=300, full=false)
Construct a TransModal
, transform E(ω) -> Pₙₗ(ω) for modal fields.
Arguments
grid::AbstractGrid
: the grid used in the simulationts::Modes.ToSpace
: pre-createdToSpace
for conversion from modal fields to spaceFT::FFTW.Plan
: the time-frequency Fourier transform for the oversampled time gridresp
:Tuple
of response functionsdensityfun
: callable which returns the gas density as a function ofz
norm!
: normalisation function as fctn ofz
, can be created vianorm_modal
rtol::Float=1e-3
: relative tolerance on theHCubature
integrationatol::Float=0.0
: absolute tolerance on theHCubature
integrationmfcn::Int=300
: maximum number of function evaluations for one modal integrationfull::Bool=false
: iftrue
, use full 2-D mode integral, iffalse
, only do radial integral
Luna.NonlinearRHS.TransModeAvg
— TypeTransModeAvg
Transform E(ω) -> Pₙₗ(ω) for mode-averaged single-mode propagation.
Luna.NonlinearRHS.TransRadial
— TypeTransRadial
Transform E(ω) -> Pₙₗ(ω) for radially symetric free-space propagation
Luna.NonlinearRHS.TransRadial
— Method(t::TransRadial)(nl, Eω, z)
Calculate the reciprocal-domain (ω-k-space) nonlinear response due to the field Eω
and place the result in nl
Luna.NonlinearRHS.TransRadial
— MethodTransRadial(grid, HT, FT, responses, densityfun, normfun)
Construct a TransRadial
to calculate the reciprocal-domain nonlinear polarisation.
Arguments
grid::AbstractGrid
: the grid used in the simulationHT::QDHT
: the Hankel transform which defines the spatial gridFT::FFTW.Plan
: the time-frequency Fourier transform for the oversampled time gridresponses
:Tuple
of response functionsdensityfun
: callable which returns the gas density as a function ofz
normfun
: normalisation factor as fctn ofz
, can be created vianorm_radial
Luna.NonlinearRHS.Et_to_Pt!
— MethodEt_to_Pt!(Pt, Et, responses, density)
Accumulate responses induced by Et in Pt.
Luna.NonlinearRHS.const_norm_free
— Methodconst_norm_free(grid, xygrid, nfun)
Make function to return normalisation factor for 3D propagation without re-calculating at every step.
Luna.NonlinearRHS.const_norm_radial
— Methodconst_norm_radial(ω, q, nfun)
Make function to return normalisation factor for radial symmetry without re-calculating at every step.
Luna.NonlinearRHS.copy_scale!
— Methodcopy_scale!(dest, source, N, scale)
Copy first N elements from source to dest and simultaneously multiply by scale factor. For multi-dimensional dest
and source
, work along first axis.
Luna.NonlinearRHS.copy_scale_both!
— Methodcopy_scale_both!(dest::Vector, source::Vector, N, scale)
Copy first and last N elements from source to first and last N elements in dest and simultaneously multiply by scale factor. For multi-dimensional dest
and source
, work along first axis.
Luna.NonlinearRHS.norm_free
— Methodnorm_free(grid, xygrid, nfun)
Make function to return normalisation factor for 3D propagation.
Here, nfun(ω; z)
needs to take frequency ω
and a keyword argument z
.
Luna.NonlinearRHS.norm_modal
— Methodnorm_modal(grid; shock=true)
Normalisation function for modal propagation. If shock
is false
, the intrinsic frequency dependence of the nonlinear response is ignored, which turns off optical shock formation/ self-steepening.
Luna.NonlinearRHS.norm_radial
— Methodnorm_radial(ω, q, nfun)
Make function to return normalisation factor for radial symmetry.
Here, nfun(ω; z)
needs to take frequency ω
and a keyword argument z
.
Luna.NonlinearRHS.to_freq!
— Methodto_freq!(Aω, Aωo, Ato, FTplan)
Transform oversampled A(t) to A(ω) on normal grid
Luna.NonlinearRHS.to_time!
— Methodto_time!(Ato, Aω, Aωo, IFTplan)
Transform $A(ω)$ on normal grid to $A(t)$ on oversampled time grid.