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#

__init__(pulse, mode)

estimate_step_size([local_error, dz, n, ...])

Estimate the step size that yields the target local error.

linear_operator(dz)

The action of the linear operator integrated over the given step size.

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.

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.

simulate(z_grid[, dz, local_error, ...])

Simulate propagation of the input pulse through the optical mode.

step(a_v, z, z_next[, k5_v, cont])

Advance the given pulse spectrum from z to z_next.

update_linearity([force_update])

Update all z-dependent linear parameters.

update_nonlinearity([force_update])

Update all z-dependent nonlinear parameters.

update_poling([force_update])

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