Nonlinear propagation tutorial: Added soliton propagation example #466
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
To properly compare the nonlinear split step propagation against an analytical example, I extended the tutorial by an example of soliton pulse propagation in optical fibers, which can be analytically described in a 1D case sech^2-shaped pulses.
An example of such propagation of a 1550nm pulse in a fused silica fiber was added to the tutorial. The pulse is initiated with the Soliton peak power at which the pulse shape and power should remain constant during propagation due to a balance of dispersion and nonlinearity, and this constant propagation was verified by letting the pulse propagate over long distances. The power and duration of the pulse indeed stay constant to within the permille level (I would attribute the minor difference to higher order dispersion which is included in the model, but is neglected by the analytic description).
To support the improvements of the tutorial, I also added a few helpers at other locations:
Sech2Profileis similar to the other longitudinal pulse profiles but describes a squared hyperbolic secant intensity profile that is required for soliton pulse propagation.get_duration()was extended to be able to calculate not only the rms pulse duration, but also the duration at specific intensity levels such as the FWHM. This is set by thelevelparameter of the function. To calculate the width at the specified level, also a new functionget_width_at_level()was added tolaser_utils.pyAngularSpectrumPropagatorwas updated to handle 1d pulse profiles.