Supercontinuum generation in anomalous dispersion regime

Example of supercontinuum generation in anomalous dispersion regime at a central wavelength of 835 nm in a 15 centimeter long fiber using three different input shape of input pulse’s envelopes.

import numpy as np
import matplotlib.pyplot as plt

import gnlse


if __name__ == '__main__':
    setup = gnlse.GNLSESetup()

    # Numerical parameters
    setup.resolution = 2**14
    setup.time_window = 12.5  # ps
    setup.z_saves = 200

    # Physical parameters
    setup.wavelength = 835  # nm
    setup.fiber_length = 0.15  # m
    setup.nonlinearity = 0.11  # 1/W/m
    setup.raman_model = gnlse.raman_blowwood
    setup.self_steepening = True

    # The dispersion model is built from a Taylor expansion with coefficients
    # given below.
    loss = 0
    betas = np.array([
        -11.830e-3, 8.1038e-5, -9.5205e-8, 2.0737e-10, -5.3943e-13, 1.3486e-15,
        -2.5495e-18, 3.0524e-21, -1.7140e-24
    ])
    setup.dispersion_model = gnlse.DispersionFiberFromTaylor(loss, betas)

    # Input pulse parameters
    peak_power = 10000  # W
    duration = 0.050  # ps

    # This example extends the original code with additional simulations for
    pulse_models = [
        gnlse.SechEnvelope(peak_power, duration),
        gnlse.GaussianEnvelope(peak_power, duration),
        gnlse.LorentzianEnvelope(peak_power, duration)
    ]

    count = len(pulse_models)
    plt.figure(figsize=(14, 8), facecolor='w', edgecolor='k')
    for i, pulse_model in enumerate(pulse_models):
        print('%s...' % pulse_model.name)

        setup.pulse_model = pulse_model
        solver = gnlse.GNLSE(setup)
        solution = solver.run()

        plt.subplot(2, count, i + 1)
        plt.title(pulse_model.name)
        gnlse.plot_wavelength_vs_distance(solution, WL_range=[400, 1400])

        plt.subplot(2, count, i + 1 + count)
        gnlse.plot_delay_vs_distance(solution, time_range=[-0.5, 5])

    plt.tight_layout()
    plt.show()

Output:

example_supercontinuum