Wavelength-Dependent Nonlinearity

GNLSE.jl supports three levels of nonlinearity specification:

1. Constant Nonlinearity

The simplest model: a scalar $\gamma$ [1/(W·m)].

# As a scalar in Medium
medium = Medium(0.1, 0.11, 0.0, [-1.2e-26], 835e-9)

# Or explicitly as ConstantNonlinearity
γ_model = ConstantNonlinearity(0.11)
medium = Medium(0.1, γ_model, 0.0, TaylorDispersion([-1.2e-26]), 835e-9)

2. Z-Dependent (Tapered Fiber)

For tapered or graded-index fibers where $\gamma$ varies along the propagation distance:

# Exponential taper: γ(z) = γ₀ exp(-α_taper * z)
gamma_0 = 0.11
alpha_taper = 10.0   # 1/m
gamma_func = z -> gamma_0 * exp(-alpha_taper * z)

medium = Medium(0.01, gamma_func, 0.0, TaylorDispersion([-1.2e-26]), 835e-9)

The function signature must be gamma_func(z::Float64) -> Float64, returning $\gamma(z)$ in [1/(W·m)].

3. Frequency-Dependent Nonlinearity

When the nonlinear coefficient varies with frequency (e.g., due to the frequency-dependent effective mode area):

# Direct frequency-domain function
γ_of_ω = ω -> 0.11 * (ω / (2π * 3e14))^0.5   # hypothetical dispersion

γ_model = FrequencyDependentNonlinearity(γ_of_ω)
medium = Medium(0.1, γ_model, 0.0, TaylorDispersion([-1.2e-26]), 835e-9)

4. Effective Mode Area Model

The most physically rigorous model: compute $\gamma(\omega)$ from the material nonlinear index $n_2$ and the frequency-dependent effective mode area $A_{\rm eff}(\omega)$:

\[\gamma(\omega) = \frac{n_2 \omega}{c \, A_{\rm eff}(\omega)}\]

n2 = 2.6e-20               # Nonlinear index [m²/W] (fused silica)
Aeff_func = ω -> 80e-12    # Constant Aeff = 80 µm² (standard SMF-28)

γ_model = NonlinearityFromEffectiveArea(n2, Aeff_func)
medium = Medium(1.0, γ_model, 0.0, TaylorDispersion([-21.5e-27]), 1550e-9)

A more realistic $A_{\rm eff}(\omega)$ would be obtained from a mode solver:

# Hypothetical frequency-dependent Aeff from numerical mode solver data
using Interpolations
aeff_data  = [90e-12, 85e-12, 82e-12, 80e-12, 79e-12]   # [m²]
omega_data = range(1.1e15, 1.4e15; length=5)
Aeff_itp   = LinearInterpolation(omega_data, aeff_data; extrapolation_bc=Flat())

γ_model = NonlinearityFromEffectiveArea(n2, ω -> Aeff_itp(ω))
Tip

Use NonlinearityFromEffectiveArea when modeling highly nonlinear fibers (HNLFs), photonic crystal fibers (PCFs), or integrated waveguides where the effective mode area varies significantly across the pulse bandwidth.

Summary Table

ModelWhen to use
Scalar γStandard single-mode fiber, rough estimates
ConstantNonlinearity(γ)Explicit, equivalent to scalar
z -> γ(z) functionTapered fibers, graded-index profiles
FrequencyDependentNonlinearityBroadband models with known $\gamma(\omega)$
NonlinearityFromEffectiveAreaMode-area data from FEM/mode solvers