Physics Background¶
The NLSE package solves several variants of the nonlinear Schrödinger equation. This page describes the equations implemented by each solver.
Nonlinear Schrödinger Equation (NLSE)¶
The code solves a typical nonlinear Schrödinger / Gross-Pitaevskii equation of the form:
In NLSE, we solve in the formalism of the propagation of a pulse of light in a nonlinear medium. Within the paraxial approximation, the propagation equation for the field \(E\) in V/m is:
The constants are:
\(k_0\): electric field wavenumber in \(m^{-1}\)
\(D_0\): group velocity dispersion (GVD) in \(s^2/m\)
\(\delta n(\mathbf{r})\): local change in linear index of refraction (the “potential”), dimensionless
\(n_2\): nonlinear index of refraction in \(m^2/W\)
\(n\): linear index of refraction (taken as 1)
\(c, \epsilon_0\): speed of light and electric permittivity of vacuum
The NLSE class solves the 2D transverse equation (\(\nabla_\perp^2 = \partial_x^2 + \partial_y^2\)), while NLSE_1d solves the 1D version and NLSE_3d includes the GVD term \(D_0\).
All NLSE solvers use SI units throughout.
Non-local interactions¶
The interaction term can be non-local, meaning \(n_2 = n_2(\mathbf{r})\). The response is described as a convolution with a non-local kernel:
where \(K(\mathbf{r})\) is a non-local kernel, typically the Green function of a diffusion equation. The kernel is set via the nl_length parameter and uses a modified Bessel function \(K_0\).
Note
Only CPU and CUPY have the convolution a non-local interaction needs. Asking for one on OpenCL or MLX moves the run to a backend that has it, with a warning saying which and why.
Coupled NLSE (CNLSE)¶
The CNLSE class solves a system of two coupled nonlinear Schrödinger equations:
This describes the coupling between two field components – two polarizations, two frequencies, or a fluid and a defect beam – with:
Self-interaction (\(n_2^{11}\), \(n_2^{22}\)) and cross-interaction (\(n_2^{12}\)) terms, which are
n2,n22andn12in the constructorIndependent loss coefficients (\(\alpha_1\), \(\alpha_2\))
Rabi coupling (\(\Omega\))
Setting parameters to None disables the corresponding term for optimal performance. The CNLSE_1d class is the 1D specialization.
Gross-Pitaevskii Equation (GPE)¶
The GPE class solves the 2D Gross-Pitaevskii equation for the temporal evolution of a Bosonic field:
The GPE uses atomic units:
\(m\): atom mass in kg (defaults to Rubidium-87)
\(g\): interaction energy in Hz\(\cdot\)m\(^2\)
\(V\): potential in Hz
\(\gamma\): losses in Hz
\(N\): total atom number
The solver interface is identical to NLSE, but the physical interpretation changes: the propagation coordinate is time (not space), and the field is normalized to atom number (not optical power).
Driven-Dissipative GPE (DDGPE)¶
The DDGPE class extends CNLSE to solve the driven-dissipative Gross-Pitaevskii equation for exciton-polariton systems. It describes two coupled fields (exciton and cavity photon) with:
Exciton-photon Rabi coupling (\(\Omega\))
Cavity and exciton dispersion relations (\(\omega_\text{cav}(\mathbf{k})\), \(\omega_\text{exc}\))
Polariton-polariton interactions (\(g\))
Cavity losses (\(\gamma\))
External laser driving (pump)
Detuning from the lower polariton (\(\delta\))
The DDGPE evolves in time and uses a rotating frame defined by the pump frequency.