UPE#

class pynlo.model.UPE(pulse, mode)[source]#

Bases: Model

A model for simulating single-mode pulse propagation with the unidirectional propagation equation (UPE).

This model simultaneously implements both 2nd- and 3rd-order nonlinearities.

Parameters:
pulsePulse

The input pulse.

modeMode

The optical mode in which the pulse propagates.

See also

Model

Documentation of simulate() and other inherited methods.

Notes

Multiplication of functions in the time domain, an operation intrinsic to nonlinear interactions, is equivalent to convolution in the frequency domain. The support of a convolution is the sum of the support of its parts. In general, 2nd- and 3rd-order processes in the time domain need 2x and 3x the number of points in the frequency domain to avoid aliasing.

By default, Pulse objects only initialize the minimum number of points necessary to represent the real-valued time-domain pulse (i.e., 1x). While this minimizes the numerical complexity of individual nonlinear operations, aliasing can introduce systematic error. More points can be generated for a specific Pulse object during initialization, or through its rtf_grids() method, by setting the alias parameter greater than 1. Anti-aliasing is not always necessary as phase matching can suppress the aliased interactions, but it is best practice to verify such behavior on a case-by-case basis.

Methods#

propagate(a_v, z, z_stop, dz, local_error[, ...])

Propagate the given pulse spectrum from z to z_stop using an adaptive step size algorithm.

nonlinear_operator(a_v)

The action of the nonlinear operator on the given pulse spectrum.

nonlinear_operator_separable(a_v)

The action of the nonlinear operator on the given pulse spectrum.

update_nonlinearity([force_update])

Update all z-dependent nonlinear parameters.

update_poling([force_update])

Update the poled sign of the 2nd-order nonlinearity.