Potentials#

Potentials describe the experimental apparatus to be simulated. The common behavior of any potential is defined in the Potential class, from which both LinearPotential and NonLinearPotential inherit. Distinguishing between linear and non-linear potentials allows to separate the computation of the linear and non-linear parts of the Hamiltonian, which are computed separately in the propagation. This allows to optimize the computation of the linear part, which does not change during the evolution.

Linear potentials must implement the get_potential() method, which takes the coordinates of the grid (X and Y for a 2D grid) and an optional parameter time, and returns the linear potential evaluated on the grid. For time independent potentials, the function is called with time=None and time should be ignored by the potential.

Similarly, non-linear potentials implement the potential_function() function. This takes the same parameters as get_potential(), with the addition of the wave function psi. The function returns the non-linear potential evaluated on the grid.

Both kinds of potentials can be provided with additional parameters when instantiated. In addition, TorchGPE will provide them with an instance of the Gas class when the simulation starts, via the method set_gas(). This allows the potential to access the gas parameters, such as the number of particles, the mass, etc. After the gas is set and before the propagation is run, the function on_propagation_begin() is called on the potential. This allows the potential to perform any further initialization using the properties contained in the gas.

Note that some potentials support time dependent parameters. These can be provided by passing them a function of time instead of a constant value. For example, while Trap(omegax=100, omegay=100) creates a trap with constant frequencies,

1Trap(omegax=lambda t: 100+np.sin(t), omegay=lambda t: 100+np.cos(t))

creates a trap whose frequencies oscillate in time.

Some common time dependencies are implemented already for convenience: linear_ramp(), s_ramp() and quench() implement a linear ramp, a smooth one, and a quench experiment, respectively.

For example, if the potential ExamplePotential supports a time dependent parameter strength, the sweep of the parameter from 0 to 1 in \(1\, ms\) can be achieved with

1potential = ExamplePotential(strength=linear_ramp(0, 1, 1e-3))

Note

If a constant value is passed to a time dependent parameter, it will be converted to a function that returns the same value for any time. In other words, the following two lines are equivalent

1potential = ExamplePotential(strength=1)
2potential = ExamplePotential(strength=lambda t: 1)

Note

As TorchGPE works with adimensionalized units, the potentials should be implemented in such a way that the returned values are also adimensional.

Implemented potentials#

Here, we want to provide an overview of the implemented potentials. Please, refer to the API documentation and the advanced usage section for more details on the structure of the potentials and how to implement custom ones.

Linear potentials#

Zero#

The Zero potential is the default one. It is a linear potential that returns zero for any position and time. Because of this, it is not necessary to provide any parameter to instantiate it.

Trap#

Trap implements an harmonic trap potential. When initialized, it takes the parameters omegax and omegay, which are the frequencies in \(Hz\) of the trap in the x and y directions, respectively. Note that both the frequencies are time dependent parameters, and hence they can be both constants or functions of time.

The returned potential is

\[\text{Trap}(x, y, t) = 2 \pi^2 \left( \frac{\omega_x\left(t\right)^2}{\omega_l^2} x^2 + \frac{\omega_y\left(t\right)^2}{\omega_l^2} y^2 \right),\]

where \(x\) and \(y\) are the adimensionalized coordinates, \(\omega_x\) and \(\omega_y\) are the provided frequencies (in SI units) and \(\omega_l\) is the adimensionalisation pulse.

SquareBox#

SquareBox implements a square box potential centered at the origin. When initialized, it takes the parameters V and D, which are the depth and size of the box, respectively. Similarly to the Trap case, both the parameters are passed in SI units, and adimensionalized by the potential itself.

The returned potential is

\[\begin{split}\text{SquareBox}(x, y) = \begin{cases} {V}/{\hbar \omega_l} & \text{if } \left|x\right| < {D}/{2l} \text{ and } \left|y\right| < {D}/{2l} \\ 0 & \text{otherwise} \end{cases},\end{split}\]

where \(l\) is the adimensionalisation length.

RoundBox#

RoundBox implements a round box potential centered at the origin. When initialized, it takes the parameters V and D, which are the depth and diameter of the box, respectively. Similarly to the Trap case, both the parameters are passed in SI units, and adimensionalized by the potential itself.

The returned potential is

\[\begin{split}\text{RoundBox}(x, y) = \begin{cases} {V}/{\hbar \omega_l} & \text{if } \sqrt{x^2 + y^2} < {D}/{2l} \\ 0 & \text{otherwise} \end{cases},\end{split}\]

Lattice#

Lattice implements the lattice potential produced by a gaussian beam. When initialized, it takes the parameters:

  • V0 (the lattice depth),

  • lam (the wave length),

  • theta (the angle with respect to the horizontal),

  • phi (the phase of the beam),

  • w0 (the waist of the gaussian beam).

Note that V0 should be provided in units of the recoil energy \(E_r = \hbar^2 k^2 / 2m\), where \(k = 2 \pi / \lambda\) is the wave number of the lattice. The other parameters are passed in SI units, and adimensionalized by the potential itself. Both V0 and phi are time dependent parameters, and hence they can be both constants or functions of time. By default, the waist w0 is set to infinity, which corresponds to a plane wave.

When the waist is set to be different than infinity, the returned potential also accounts for the wavefront curvature and the Gouy phase.

Lattice angles scheme

In its simplest form (that is, when theta = 0 and w0 = np.Inf ), the returned potential is:

\[\text{Lattice}(x, y, t) = \frac{V_0 \cdot E_{rec}}{\hbar \omega_l} \cos\left(\frac{2 \pi l}{\lambda} x+\phi\right)^2\]

where \(E_{rec} = \hbar^2 k^2 / 2m\) is the recoil energy, \(l\) is the adimensionalisation length and \(\lambda\) and \(\phi\) the parameters lam and phi respectively.

See also

The Wikipedia page on the gaussan beam provides details on how is the potential changed when the waist is finite.

Non-linear potentials#

Contact#

Contact implements the contact interaction potential. When initialized, it takes the parameters a_s and a_orth, which are the scattering length and a renormalization factor for the transverse direction, respectively. The scattering length a_s is expressed in units of the Bohr radius \(a_B\).

The returned potential is

\[\text{Contact}(x, y, \psi, t) = \sqrt{8\pi}N \frac{a_s a_B}{a_\perp} \left\|\psi\right\|^2,\]

where \(N\) is the number of particles and \(a_\perp\) is the renormalization factor a_orth.

Note that the interaction strength for a 3D system, which reads \(g_{3D} = 4 \pi \hbar^2 a_s a_B / m\), is now divided by a factor \(\sqrt{2\pi}a_\perp\) to account for the missing third dimension. The orthogonal scattering length \(a_\perp\) satisfies the equation \(a_\perp^2 = a_{ho}^2 \sqrt{1+2 a_s N \left\|\psi\right\|^2}\), where \(a_{ho}\) is the length scale of the harmonic oscillator generating the confinment in the \(z\) direction. For weakly interacting systems, \(a_\perp^2 \approx a_{ho}\).

See also

Reference for the dimensionality reduction procedure:

Salasnich, L., Parola, A., Reatto, L., 2002. Effective wave equations for the dynamics of cigar-shaped and disk-shaped Bose condensates. Phys. Rev. A 65, 043614. https://doi.org/10.1103/PhysRevA.65.043614

DispersiveCavity#

DispersiveCavity describes the dispersive interaction of the BEC with a transversally driven cavity mode. When initialized, it takes the parameters:

  • lattice_depth (the strength of the pump. Supports time-dependent parameters),

  • atomic_detuning (the detuning of the atoms with respect to the pump),

  • cavity_detuning (the detuning of the cavity with respect to the pump. Supports time-dependent parameters),

  • cavity_decay (the decay rate of the cavity),

  • cavity_coupling (the coupling constant between the gas and the cavity),

  • cavity_angle (the angle of the cavity with respect to the horizontal),

  • pump_angle (the angle of the pump with respect to the horizontal),

  • waist (the waist of the gaussian pump beam).

Note that the lattice depth is expressed in units of the recoil energy \(E_r = \hbar^2 k^2 / 2m\), where the wave number \(k\) is computed from the \(d_2\) pulse of the atomic species the gas is made of, and the specified atomic detuning. Additionally, observe that atomic_detuning, cavity_detuning and cavity_decay have to be considered frequencies. The corresponding rates are obtained by the potential itself, by multiplying them by \(2 \pi\).

Finally, waist is the waist of the gaussian pump beam. It defaults to infinity, which corresponds to a plane wave. Note that differently from the Lattice potential, the DispersiveCavity potential does not account for the wavefront curvature and the Gouy phase.

Cavity angles scheme

The returned potential is made of three terms: the pump lattice, the cavity lattice and the pump-cavity interference. In their simplest form (that is, when cavity_angle = 0, pump_angle = np.pi and waist = np.Inf ), they read:

\[\text{pump_lattice}(x, y, \psi, t) = \frac{\Delta_A}{\left|\Delta_A\right|} \frac{V_0 \cdot E_{rec}}{\hbar \omega_l} \cos\left(k \cdot y\right)^2\]
\[\text{cavity_lattice}(x, y, \psi, t) = \frac{g_0^2}{\Delta_A \omega_l} \left|\alpha\right|^2 \cos\left(k \cdot x\right)^2\]
\[\text{interaction}(x, y, \psi, t) = \frac{g_0}{\omega_l} \sqrt{ \frac{V_0 \cdot E_{rec}}{\hbar \Delta_A}} \Re\left(\alpha\right) \cos\left(k\cdot x\right) \cos\left(k\cdot y\right)\]

The total potential is then the sum of the three terms.

In the expressions above, we have defined the following quantities:

  • \(\Delta_A\) is the pulse associated to the specified atomic detuning,

  • \(E_{rec}\) is the recoil energy,

  • \(V_0\) is the lattice depth in units of the recoil energy,

  • \(k\) is the wave number of the pump lattice,

  • \(g_0\) is the coupling strength between the gas and the cavity,

  • \(\alpha\) is cavity field.