Nonlinearity Models

GNLSE.FrequencyDependentNonlinearityType
FrequencyDependentNonlinearity(gamma_func)

Frequency-dependent nonlinear coefficient where gamma_func(w) takes absolute angular frequency w [rad/s] and returns γ [1/(W·m)].

source
GNLSE.NonlinearityFromEffectiveAreaType
NonlinearityFromEffectiveArea(n2, Aeff_func)

Nonlinearity calculated from nonlinear index n₂ [m²/W] and a frequency-dependent effective mode area. Aeff_func takes absolute frequency w [rad/s] and returns mode area A_eff [m²].

source
GNLSE.build_physics_modelFunction
build_physics_model(grid::Grid, params::SimParams, [template::AbstractArray])

Construct PhysicsModel with pre-computed operators for GNLSE propagation.

Pre-computes all frequency-domain operators, FFT plans, and selects the appropriate nonlinear function. Called once at start of solve() to enable zero-allocation propagation in the ERK4IP stepper.

Arguments

  • grid: Time-frequency grid
  • params: Simulation parameters (medium, physics flags)

Returns

PhysicsModel struct ready for propagation

Implementation Details

  • FFT plans use FFTW with FFTW.MEASURE flag for optimization
  • Dispersion operator computed via dispersion_operator(grid, medium)
  • Raman response computed in time domain then FFT'd to frequency domain
  • Self-steepening: folded into W (ω₀+Δω if enabled, else constant ω₀)
  • Nonlinear function selected via choose_nonlinear_term(raman)

See also

dispersion_operator, raman_response

source
build_physics_model(grid::Grid, params::SimParams{S, <:AmplifyingMedium}, [template])

Construct PhysicsModel for active amplifying fiber propagation with gain saturation & ASE.

source
build_physics_model(grid::Grid, params::SimParams{S, <:SemiconductorMedium}, [template])

Construct PhysicsModel for semiconductor waveguides (TPA & Free-Carrier Dynamics).

source
build_physics_model(grid::Grid, params::SimParams{S, <:BirefringentMedium}, [template::AbstractMatrix])

Construct PhysicsModel for Coupled GNLSE propagation.

source
GNLSE.step_index_aeffFunction
step_index_aeff(core_radius_m::Real, NA::Real, lambda_m::Real) -> Float64

Calculate the effective mode area A_eff(λ) [m²] for a step-index single-mode fiber using the Marcuse empirical Gaussian mode-field radius formula:

V(λ) = (2π a / λ) · NA
w(λ) = a · (0.65 + 1.619 / V^1.5 + 2.879 / V^6)
A_eff(λ) = π w(λ)²

Reference: D. Marcuse, "Loss analysis of single-mode fiber splices," Bell Syst. Tech. J. 56, 703-718 (1977).

source
GNLSE.MarcuseAeffType
MarcuseAeff(core_radius_m::Real, NA::Real)

Callable object representing a wavelength-dependent mode area A_eff(ω) [m²] based on Marcuse's model.

source

Raman Models

GNLSE.BlowWoodType
BlowWood <: RamanModel

Single Lorentzian Raman response model from K. J. Blow & D. Wood.

Parameters (SI units):

  • fr = 0.18: Raman fraction
  • τ₁ = 12.2 fs
  • τ₂ = 32 fs

Reference: K. J. Blow & D. Wood, IEEE J. Quantum Electron. 25, 2665 (1989)

source
GNLSE.LinAgrawalType
LinAgrawal <: RamanModel

Three-component Raman model from Q. Lin & G. P. Agrawal.

Parameters (SI units):

  • fr = 0.245: Raman fraction
  • τ₁ = 12.2 fs
  • τ₂ = 32 fs
  • τb = 96 fs
  • fb = 0.21
  • fc = 0.04

Reference: Q. Lin & G. P. Agrawal, Opt. Lett. 31, 3086 (2006)

source
GNLSE.HollenbeckType
Hollenbeck <: RamanModel

13-oscillator Raman model from D. Hollenbeck & C. D. Cantrell.

Parameters:

  • fr = 0.20: Raman fraction

Reference: D. Hollenbeck & C. D. Cantrell, J. Opt. Soc. Am. B 19, 2886 (2002)

source
GNLSE.raman_responseFunction
raman_response(T::Vector{Float64}, model::BlowWood)

Compute Raman response following gnlse-python raman_blowwood.

Arguments

  • T::Vector{Float64}: Time vector [s]
  • model::BlowWood: Raman model with parameters

Returns

  • (fr, RT): Raman fraction and response function

Physics

Following gnlse-python raman_blowwood:

tau1 = 0.0122  # ps
tau2 = 0.032   # ps
ha = (tau1**2 + tau2**2) / tau1 / (tau2**2) * exp(-T/tau2) * sin(T/tau1)
RT = ha
RT[T < 0] = 0
fr = 0.18

Reference: K. J. Blow & D. Wood, IEEE J. Quantum Electron. 25, 2665 (1989)

source
raman_response(T::Vector{Float64}, model::LinAgrawal)

Compute Raman response following gnlse-python raman_linagrawal.

Arguments

  • T::Vector{Float64}: Time vector [s]
  • model::LinAgrawal: Raman model with parameters

Returns

  • (fr, RT): Raman fraction and response function

Physics

Following gnlse-python raman_linagrawal:

tau1 = 0.0122  # ps
tau2 = 0.032   # ps
taub = 0.096   # ps
fb = 0.21
fc = 0.04
fa = 1 - fb - fc
# Anisotropic response
ha = (tau1**2 + tau2**2) / tau1 / (tau2**2) * exp(-T/tau2) * sin(T/tau1)
# Isotropic response
hb = (2*taub - T) / (taub**2) * exp(-T/taub)
# Total response
RT = (fa + fc) * ha + fb * hb
RT[T < 0] = 0
fr = 0.245

Reference: Q. Lin & G. P. Agrawal, Opt. Lett. 31, 3086 (2006)

source
raman_response(T::Vector{Float64}, model::Hollenbeck)

Compute Raman response following D. Hollenbeck & C. D. Cantrell's 13-oscillator fit.

Arguments

  • T::Vector{Float64}: Time vector [s]
  • model::Hollenbeck: Raman model with Raman fraction fr

Returns

  • (fr, RT): Raman fraction fr and impulse response RT(t) [1/s]

Physics

The Hollenbeck model combines 13 Lorentzian resonances with Gaussian spectral broadening to fit experimental Raman gain/loss data from silica fiber:

h(ω) = Σ Aᵢ [Lorentzian(ω - ωᵢ, Γᵢ) ⊗ Gaussian(ΔGᵢ)]

Each resonance is parametrized by:

  • CP: center position [cm⁻¹]
  • A: peak amplitude (relative units)
  • Gauss: Gaussian FWHM [cm⁻¹]
  • Lorentz: Lorentzian FWHM [cm⁻¹]

The model is converted to the time domain and normalized by the Raman fraction fr (set to 0.20 by default), which represents the fractional power transfer into the Raman-shifted component.

Reference: D. Hollenbeck & C. D. Cantrell, J. Opt. Soc. Am. B 19, 2886 (2002)

source
raman_response(T::Vector{Float64}, model::MolecularRamanGas)

Compute Raman impulse response for molecular gases (H₂, N₂).

source
raman_response(grid::Grid, model::RamanModel)

Convenience wrapper that extracts time vector from grid.

Arguments

  • grid::Grid: Grid with time vector T
  • model::RamanModel: Raman model

Returns

  • (fr, RT): Raman fraction and response function
source