# RP ProPulse – Numerical Simulation of Pulse Propagation

Overview | Purpose | Model | Interface | Demos | Versions |

## Example Case: Adiabatic Soliton Compression

Here, we consider the nonlinear compression of pulses with the adiabatic soliton compression method. Soliton pulses are injected into a photonic crystal fiber where the chromatic dispersion decreases more and more along the length. Therefore, the soliton pulse duration also decreases. It is also taken into account that there is higher-order dispersion, and the fiber nonlinearity in the model takes into account self-steepening and stimulated Raman scattering.

```
resonator: ring
* FiberPiece [split = maxr(1,round(gamma_f(rt * dL) * dL * P_p() / phi_nl_max))]:
GDD(l) = GVD_f(l, rt * dL) * dL,
nlpol = gamma_f(rt * dL) * dL [f = f_R, h(t) = h(t), T = t_max_R, ss = 1]
resonator end
```

The fiber is split into small sections of length dL (1 cm). Formally, these are described as being in a resonator, so that subsequent fiber pieces correspond to subsequent resonator round-trips. The chromatic dispersion is made dependent on the position in the fiber by using a GVD function which depends both on the wavelength and the position z. That GVD function is obtained by linear interpolation between the properties of two different fibers. In an analogous fashion, the fiber nonlinearity can be made position-dependent. The following part of the script code demonstrates how easily such things can be implemented in **RP ProPulse**:

```
; General fiber parameters:
n2_f := 2.5e-20 { m^2 / W }
include "Raman h(t) for silica.inc" { Raman response function of silica }
; Fiber 1:
n_f1 := 1.5
w_f1 := 1.4 um / 2
A_f1 := pi * w_f1^2
gamma_f1 := (2pi / lambda_ref) * n2_f / A_f1 { rad / (W * m) }
defarray D_f1[600, 1600, 100]
readlist l, D_f1[l]:
600, -120
700, -40
800, 24
900, 60
1000, 82
1100, 92
1200, 100
1300, 105
1400, 108
1500, 110
1600, 111
D_f1(l) := (if l < 600e-9 then -120 else if l>1600e-9 then 111 else D_f1~~[l / nm]) * ps / (nm * km)
GVD_f1(l) := (-l^2 / (2 * pi * c)) * D_f1(l)
E_s1 := 2 * abs(GVD_f1(lambda_ref)) / (gamma_f1 * (tau0 / 1.76))
{ soliton energy for tau0 }
z_s1 := pi * (tau0 / 1.76)^2 / (2 * abs(GVD_f1(lambda_ref)))
; Fiber 2:
n_f2 := 1.5
w_f2 := 1.4 um / 2
A_f2 := pi * w_f2^2
gamma_f2 := (2pi / lambda_ref) * n2_f / A_f2 { rad / (W * m) }
defarray D_f2 [600, 1600, 100]
readlist l, D_f2[l]:
600, -220
700, -140
800, -68
900, -25
1000, 3
1100, 22
1200, 35
1300, 45
1400, 53
1500, 57
1600, 60
D_f2(l) := (if l < 600 nm then -220 else if l > 1600 nm then 60 else D_f2~~[l / nm]) * ps / (nm * km)
GVD_f2(l) := (-l^2 / (2 * pi * c)) * D_f2(l)
; Combined fiber with adiabatic transition of parameters:
L := 2 { length in which the parameters of fiber 2 are reached }
D_f(l,z) := (1 - z / L) * D_f1(l) + (z / L) * D_f2(l)
GVD_f(l,z) := (1 - z / L) * GVD_f1(l) + (z / L) * GVD_f2(l)
gamma_f(z) := (1 - z / L) * gamma_f1 + (z / L) * gamma_f2
```

The following diagram shows how the pulse parameters evolve in the fiber. If the pulses could instantly adjust to the local fiber parameters, the pulse duration would decrease linearly along the fiber, as shown by the dotted curve. However, in reality the evolution is not totally adiabatic, so that the actual behavior is slightly different – particularly in the beginning, where the soliton period is relatively long (0.38 m). Furthermore, the effects of third-order dispersion and stimulated Raman scattering finally prevent the pulses from getting arbitrarily short. Raman scattering also causes a soliton self-frequency shift to longer wavelengths.

We can also inspect the final pulse with the interactive pulse display window, and recognize that its spectral shape has become distorted:

The original pulses were spectrally centered at 1060 nm, and stimulated Raman scattering generates a substantial bump on the long-wavelength side.