domain_inversions#

pynlo.utility.chi2.domain_inversions(z, dk, n=1)[source]#

Find the location of the domain inversion boundaries that quasi-phase match (QPM) the given wavenumber mismatch.

Parameters:
zfloat or array_like of float

The propagation distance.

dkfloat or array_like of float

The wavenumber mismatch, or 2*pi/polling period.

nint, optional

The interpolation order used to calculate the inversion points.

Returns:
z_invsndarray of float

The location of all domain inversion boundaries.

domainsndarray of float

The length of each domain.

poledndarray of int

The poling status of each domain. A value of 1 indicates an inverted domain. A value of 0 indicates an unpoled region.

Notes

For continuous QPM profiles, the domain boundaries can be calculated by inverting the integral equation that gives the accumulated phase mismatch:

\[\begin{split}2 \pi N[z] &= \int_{z_0}^z \Delta k[z^\prime] dz^\prime = \int_{z_0}^z \frac{2 \pi}{\Lambda[z^\prime]} dz^\prime \\ \text{z}_{inv}[n] &= N^{-1}[n/2]\end{split}\]

where \(\Delta k\) is the wavenumber mismatch compensated by poling period \(\Lambda\), \(N\) is the accumulated number of phase cycles, and \(n\) is an integer.