Gas-Filled Hollow-Core PCF & Molecular Raman

GNLSE supports gas-filled Hollow-Core Photonic Crystal Fibers (HollowCoreFiber) and molecular gas Raman response models (MolecularRamanGas).


⚡ Physics Model

In hollow-core fibers (capillaries, Kagome, anti-resonant AR-PCF / Revolver fibers), light is guided inside a gas-filled central core. The propagation constant $\beta(\lambda, P)$ and non-linearity $\gamma(P)$ depend on gas pressure $P$ [bar] and core radius $R_{\text{core}}$:

\[\beta(\lambda, P) = \frac{2\pi}{\lambda} \sqrt{n_{\text{gas}}^2(\lambda, P) - \left( \frac{u_{01} \lambda}{2\pi R_{\text{core}}} \right)^2}\]

where $u_{01} \approx 2.40483$ is the fundamental $\text{HE}_{11}$ mode Bessel zero.

Supported Gases

  • Noble Gases: :Ar (Argon), :Ne (Neon), :Kr (Krypton), :Xe (Xenon).
  • Molecular Gases (Raman): :H2 (Hydrogen), :N2 (Nitrogen) — support both rotational and vibrational Raman lines.
  • Dispersion only: :Air — Sellmeier dispersion available but no molecular Raman model.

💻 Usage Example

using GNLSE

grid = create_grid(2^13, 10e-12, 800e-9)
pulse = gaussian_pulse(grid, 5000.0, 50e-15)

# 30 μm core HC-PCF filled with 5 bar Argon at 800 nm
hcf = HollowCoreFiber(
    radius = 15e-6,      # 15 μm core radius (30 μm core diameter)
    gas = :Ar,           # Argon gas
    pressure = 5.0,      # 5 bar
    length = 0.3,        # 0.3 m propagation length
    lambda0 = 800e-9
)

params = SimParams(; medium=hcf, z_saves=100)
sol = solve(pulse, params)

By default HollowCoreFiber is lossless (loss=0.0). Pass confinement_loss=true to additionally include the Marcatili-Schmeltzer capillary confinement loss $\alpha(\lambda) \propto \lambda^2/a^3$ — note this bare-capillary formula is a conservative bound that can overestimate loss for real anti-resonant/negative-curvature HC-PCF designs (see docs/src/physics.md), so it defaults to off.


🧬 Molecular Gas Raman Response (MolecularRamanGas)

Molecular gases ($\text{H}_2, \text{N}_2$) exhibit narrow, high-frequency rotational and vibrational Raman transitions:

# Hydrogen rotational Raman model (17.6 THz shift)
h2_rot = MolecularRamanGas(:H2_rotational)

# Hydrogen vibrational Raman model (124.6 THz shift)
h2_vib = MolecularRamanGas(:H2_vibrational)

params = SimParams(; medium=hcf, raman_model=h2_rot, z_saves=100)
sol = solve(pulse, params)