Vector / polarization-coupled GNLSE¶
The scalar SplitStepEngine (see GNLSE physics) solves a
single slowly-varying envelope. This page documents the vector engine
(photonics_helper.vector_gnlse), which propagates the field as a
two-component vector A = (A_x, A_y) and therefore resolves the physics
that only exists between polarization channels.
- API reference:
photonics_helper.vector_gnlse(VectorSplitStepEngine,RandomBirefringenceEngine,MANAKOV_FACTOR).
What the scalar engine cannot model¶
| Regime | Scalar GNLSE | Vector engine |
|---|---|---|
| Single-mode, single-polarization fiber | exact model | scalar limit of coupling="incoherent" (bit-exact, tested) |
| PM / high-birefringence fiber | wrong (no axes) | per-axis β, XPM 2/3, no coherent mixing |
| Randomly birefringent fiber (telecom) | γ overestimated by 12.5% | coupling="manakov" / RandomBirefringenceEngine |
| Deterministic birefringence + polarization FWM | no FWM | coupling="coherent" with delta_beta |
| Differential group delay (PMD walk-off) | none | walkoff (s/m) on the y-channel |
Model¶
In the retarded frame of the x axis (Agrawal, Nonlinear Fiber Optics, 5th ed.):
∂A_x/∂z = L_x A_x + iγ( P_x + (2/3)P_y ) A_x + (i/3)γ A_y² A_x* e^{−2iΔβz}
∂A_y/∂z = L_y A_y + iγ( P_y + (2/3)P_x ) A_y + (i/3)γ A_x² A_y* e^{+2iΔβz}
− Δβ₁ ∂A_y/∂T
with per-axis Taylor dispersion operators L_j = −i Σ β_k⁽ʲ⁾/k! ∂ᵀᵏ,
shared scalar loss e^{−αz/2}, the 2/3 XPM anisotropy of the degenerate
linearly-polarized mode pair, and the coherent polarization FWM pair
(coupling="coherent", phase mismatch Δβ = β_x − β_y in rad/m).
coupling selects the nonlinear model:
"incoherent"— FWM term dropped (averaged out over the beat length in real PM fiber). Reduces exactly to the scalarSplitStepEnginewhenA_y ≡ 0; all scalar reproductions remain the tool of record there."coherent"— full Agrawal coupled GNLSE with the FWM mixing term. The FWM pair is energy-conserving (Hamiltonian substructure) and the diagonal SPM/XPM phase is advanced exactly while the mixing term is integrated with frequency-domain RK4 substeps (same RK4IP structure the scalar shock integrator uses). Validated against a dense-RK4 reference (tests/test_vector_gnlse.py::TestCoherentFWM)."manakov"— polarization-averaged model with the8/9coefficient (Wai & Menyuk 1996): the correct effective description of a fiber whose beat length is far shorter than the nonlinear length. Requires identical per-axis dispersion and zero walkoff. Validated: a Manakov CW acquires exactly(8/9)γP₀Lphase, and the random-birefringence ensemble converges to the Manakov spectrum (<2% L2 over 6 seeds).
Random birefringence¶
RandomBirefringenceEngine(coupling='incoherent' locally, seed=...) applies
an SU(2) frame rotation (uniform axis, uniform angle) before and after
every nonlinear step, mimicking a correlation length equal to the step.
Total energy is conserved at machine precision, CW shape is exactly
preserved, and the ensemble-averaged spectrum converges to the deterministic
Manakov (8/9) run.
Scope / limits (v1)¶
- Raman is the scalar per-channel response
Pⱼ = (1−f_R)|A_j|² + f_R h_R ⊛ |A_j|²; the full vector Raman response (Lin & Agrawal 2006) is a planned extension. - Self-steepening, TPA and free carriers are scalar-engine features; the vector engine rejects them explicitly rather than silently ignoring them.
- Fixed-step propagation (
num_stepsorstep_size), with the same snapshot / energy-drift-monitor semantics as the scalar engine. - Multimode (fibers with >2 guided modes) coupling is future work; the polarization channels here are the ±linear-polarization pair.