Non-Polynomial Schrödinger Equation (NPSEQ)#
Introduction#
The goal here is to derive a dimensionally-reduced dynamical description for trapped quantum gasses of the GPE form
where \(\mathcal{E}_{\mu}(n)\) is an effective non-linear (and generally non-polynomial) interaction mocking up the transverse structure of the cloud. We will consider two cases here:
Tube: \(\psi(\vect{x}, t) = \psi_1(z, t)\) where \(n = n_1\) is a one-dimensional density (dimensions \(1/L\)):
\[\begin{gather*} n_1(z, t) = \iint\d{x}\d{y}\; n_{3D}(x, y, z; t). \end{gather*}\]This is relevant for elongated tube geometries where the dynamics occur primarily along the \(z\) axis.
We start with a high-level formulation of the GPE as a minimum action principle from an energy density functional of the form:
Here we assume that the non-linear portions of \(\mat{H}\) depend only on the local density \(n(\vect{x}, t) = \abs{\Psi(\vect{x}, t)}^2\). The usual GPE follows from:
The purpose of this notebook is to consider a reformulation of the problem with a factorized wavefunction:
where assumptions will be made about the transverse wavefunction \(\phi\) that yield approximate 1D effective theories for \(\psi(z, t)\).
Summary#
Effective 1D Theory#
The procedure here is to write the wavefunction as
and then minimize the action with respect to \(\sigma_{x,y}(z, t)\) assuming that:
Terms proportional to \(\nabla_z\sigma_{x,y}\) can be neglected.
That \(\phi\) responds instantaneously adjusting to the size that minimizes the actions in the radial direction. This is the reason that this step must be applied after removing the radial scaling. Consider for example the complete removal of the traps. The instantaneous response of the radial function would immediately send \(\sigma \rightarrow \infty\).
Effective 2D Theory (pancake code)
Analogously, we can consider
and then minimize the action with respect to \(\sigma(x, y, t)\). We will include results for this “pancake” approximation in boxes like this where needed.
We start with the simplest results for the GPE where \(m_x=m_y=m_z=m\), \(\omega_x = \omega_y = \omega_\perp\), and \(\sigma_{x} = \sigma_{y} = \sigma\), which gives the following effective theory for \(\psi(z, t)\):
Note
The final equation for \(\sigma^4\) has two forms, depending on whether one minimizes the energy or the chemical potential. Minimizing the energy is certainly the correct thing to do if one minimizes over all forms of the radial function \(\phi(r_{\perp})\), but [Mateo and Delgado, 2009] argues that minimizing over the chemical potential can give better results when one only considers restricted forms of \(\phi(r_\perp)\), such as the gaussian considered here.
Summary Formula for HO + Gaussian
Single component.
Harmonic transverse trap:
\[\begin{gather*} V_{\perp}(\vect{r}_{\perp}) = \frac{m\omega_x^2 x^2 + m\omega_y^2 y^2}{2}. \end{gather*}\]
Pancake Version
The equations of motion follow by varying either \(\mathcal{E}\) or \(\mu\) with respect to the parameters \(\sigma^2\).
Analytic Examples: Power-law EoS
We can get quite far analytically if we assume a power-law equation of state
This includes the common cases of the GPE (\(\beta = 2\), \(\alpha=g\)) and the UFG (\(\beta=5/3\)).
We can unify these if we introduce the parameter
so that the objective function \(f \in \{E_1, \mu_1\}\) is
Varying this, we obtain the following coupled relations for \(\sigma_{x,y}^2\)
These equations are coupled through \(n_0\), which makes solving them non-trivial. Once a solution is found, the energy and effective chemical potential can be written as
A simple analytic solution exists for the GPE with axial symmetry. In the GPE with
\(\beta = 2\) we can optimize because \(a \in \{1, 1/2\}\) and one of the two terms vanish
in each case. These are implemented in gpe.tube.StateGPEdrZ.
If we follow [Mateo and Delgado, 2009] and minimize the chemical potential, then \(a=1/2\) and the first term cancels giving us the effective 1D chemical potential:
This agrees with Eq. (4) [Mateo and Delgado, 2009] if we have no scaling \(\lambda = 1\).
Remaining Challenges:
In the case of pancake traps, the expressions for \(Q_2(n_0)\) and \(R_2(n_0)\) are non-analytic, even for the GPE.
Without axial symmetry or outside of the GPE, the self-consistency equations have a more complicated form. Within the GPE it remains polynomial, but becomes a general quartic equation.
We hope to solve these cases as described in Solving for Sigmas: Globally Convergent Newton’s Method but have not completed this general analysis yet.
Two Components#
If we have two components, then we must have a different \(\sigma\) for each component and the resulting equations become:
Most of the terms are just an independent sum over the components, but we must be careful with the non-linear interactions which may now appear as
To solve for \(\sigma_i\) we rewrite the equations as follows:
Again, details for solving this are presented in Solving for Sigmas: Globally Convergent Newton’s Method.
Derivation#
We start by deriving an effective 1D theory expressing \(\Psi(\vect{x}, t) = \phi(\vect{x},t)\psi(z, t)\) and varying the action wrt \(\psi(z,t)\) which gives:
To be more specific, we now consider a general energy density of the form:
so that the Hamiltonian has the form
The normalization condition for \(\phi\), i.e. \(\braket{1}_\phi = 1\), is independent of \(z\) allowing us to neglect the cross-term \(2\nabla_z\phi(\vect{x}, t)\nabla_z\psi(z,t)\) (it can be removed from the Lagrangian by a total derivative which vanishes under physical boundary conditions).
The final effective 1D equation of motion can be expressed as:
where the average \(\braket{}_{\phi}\) is over \(\phi(\vect{x}, t)\). For the NPSEQ, we will approximate this, but a complete extremization of the action defines \(\phi(\vect{x}, t)\) as the solution to the coupled radial equation:
The same result can be obtained by expanding the action:
For the usual energy density, this becomes
Pancake version
This is a straightforward generalization
In what follows, we will use the notation \(\phi_2\) and \(\psi_2(x, y)\) for the pancake version, but keep \(\phi \equiv \phi_1\) and \(\psi \equiv \psi_1\) in the main text.
This is exact, but to proceed further we must make some assumptions about the form and behavior of \(\phi(\vect{x}, t)\) and \(f(n)\). Before proceeding, we define two auxiliary quantities that will play a key role in our minimization procedure:
Pancake version
Adiabatic Approximation#
The adiabatic approximation is that the variations of \(\psi(z, t)\) are slow so that the radial equation adjusts quickly to become stationary states of the radial equation. Recall that we normalize our states so that
Here \(n_1(z,t)\) is the integrated density along the cloud. The adiabatic approximation is that
I.e., up to a phase, all of the time dependence and \(z\) dependence come through the integrated density \(n_1(z, t)\). As part of the adiabatic approximation, we neglect spatial (along \(z\)) and temporal variations of \(n_1\) in the equation for \(\phi(\vect{r}_\perp; n_1)\), which “instantaneously” adjusts to satisfy the radial equation for the given axial density. This becomes a problem in some cases, such as the common case of suddenly turning off the external trap to let a cloud expand. In this case, the radial function will suddenly expand to fill all space, which is a very poor approximation. The Dynamically Rescaled GPE (dr-GPE) fixes this by transforming to an expanding frame where there is an effective trapping potential (from the expanding frame), even when the trap is suddenly turned off.
Variational Approach#
Note that the equation for \(\phi(\vect{r}_\perp; n_1)\) follows from minimizing the following energy functional
In general, we cannot solve this radial equation analytically, so we typically make an approximation on the form of \(\phi\). The variational approach is to stay within a restricted set of functional forms, but now to minimize with respect to a few parameters, such as the widths of a gaussian \(\sigma_{x,y}\). [Mateo and Delgado, 2009] suggests two alternatives, minimizing the quantities we defined above:
Minimizing the energy per unit length:
\[\begin{gather*} \mathcal{E}_1[\phi] %= \frac{E_1[\phi]}{n_1} = \overbrace{\int \d^2\vect{r}_{\perp}\;\left( \frac{\hbar^2\abs{\nabla_\perp \phi}^2}{2m} + V_\perp(\vect{r}_\perp)\abs{\phi}^2 + \frac{\mathcal{E}\bigl(n_1\abs{\phi}^2\bigr)}{n_1} \right)}^{\Braket{-\frac{\hbar^2}{2m}\nabla_\vect{x}^2 + f(n)/n_1}_{\phi}}. \end{gather*}\]Minimizing the chemical potential:
\[\begin{gather*} \mu_1[\phi] = \pdiff{\mathcal{E}_1[\phi]}{n_1} = \overbrace{\int \d^2\vect{r}_{\perp}\; \phi^*\left( \frac{-\hbar^2\nabla_\perp^2}{2m} + V_\perp(\vect{r}_\perp) + \mathcal{E}'\bigl(n_1\abs{\phi}^2\bigr) \right)\phi}^{\Braket{-\frac{\hbar^2}{2m}\nabla^2_\vect{x} + f'(n)}_{\phi}}. \end{gather*}\]
They argue that, while minimization of \(\mathcal{E}_1[\phi]\) always yields the correct result when the minimum is taken over the whole space of functions \(\phi\), the second approach of minimizing \(\mu_1[\phi]\) can yield better approximation in the case of restricted forms of \(\phi\), and that these two approaches are equivalent when the non-linear interactions vanish.
Pancake version
Everything is similar for reduction along only \(z\) to produce effective 2D versions for pancake”-shaped clouds.
Minimizing the energy per unit area:
\[\begin{gather*} \mathcal{E}_2[\phi_2] = \int_{-\infty}^{\infty}\d{z}\;\left( \frac{\hbar^2\abs{\nabla_z \phi_2}^2}{2m} + V_z(z)\abs{\phi_2}^2 + \frac{\mathcal{E}\bigl(n_2\abs{\phi_2}^2\bigr)}{n_2} \right). \end{gather*}\]Minimizing the chemical potential:
\[\begin{gather*} \mu_2[\phi_2] = \pdiff{\mathcal{E}_2[\phi_2]}{n_2} = \int_{-\infty}^{\infty}\d{z}\; \phi_2^*\left( \frac{-\hbar^2\nabla_z^2}{2m} + V_z(z) + \mathcal{E}'\bigl(n_2\abs{\phi_2}^2\bigr) \right)\phi_2. \end{gather*}\]
Gaussian Approximation#
As mentioned above, a common approach is to use a gaussian:
where \(\sigma_{x,y}(n_1)\) are functions of \(n_1\). Here we also introduce the central density \(n_0\) which will play an important role below.
Pancake formula
For the effective 2D theory, the transverse function is a single gaussian:
where \(\sigma(n_2)\) is a function of \(n_2\).
Depending on whether we choose to minimize the energy or the chemical potential, we must be able to compute \(R(n_0)\) or \(Q(n_0)\):
Depending on the form of the equation of state, \(Q_1(n_0)\) may also have an analytic expression.
Pancake Formulae
The analogous formula for pancake clouds (2D) are not so simple due to the extra factor of \(r\) in the denominator of the integrands:
Integration Details
For gaussian radial functions, we can compute these integrals with a change of variables and rescaling:
In , we will need the following version of these:
These are not so nice.
At the end of the day we need the following integrals
These can be computed for power-law EoS
These follow from
In summary, including the definition of \(n_1\) and \(n_2\) in terms of \(n_0\), the non-linear pieces have a nice form:
Harmonic Potential#
The remaining portion of these equations can be computed if we assume that the transverse potential is harmonic:
With these we can compute all of the remaining expectation values.
Expectation Values
Explicitly, here are the various expectation values:
The corresponding pancake expectation values are:
Putting these together, we have
Pancake Version
Note: in the kinetic energy, we have allowed for different scaling factors \(\lambda_x\) and \(\lambda_y\) in each direction. This will help with the book-keeping needed for the Dynamically Rescaled GPE (dr-GPE) later. Additional factors and the effective potential induced by the co-scaling frame (fictitious forces) can be absorbed into the effective trapping frequencies \(\omega_{x,y}\).
Varying these with respect to \(\sigma_x\) and \(\sigma_y\), we obtain the following equations:
Pancake Version
Solving these is a bit tricky, and we present details in Solving for Sigmas: Globally Convergent Newton’s Method.
Power-law Equation of State
Things simplify somewhat for power-law EoS:
Explicitly:
Old Stuff: Needs cleaning
Power-law EoS (Old)
For example, consider a pow-law equation of state, and a separable external potential:
This includes the form of the usual GPE when \(\alpha = g\) and \(\beta = 2\). We then have
This allows us to write the equations cleanly separating the radial from axial components:
Variational Approach#
To solve for \(\phi(r_\perp, n_1)\) exactly is still challenging, so one typically restricts \(\phi(\vect{r}_{\perp}, n_1)\) to some restricted subspace of functions, minimizing an appropriate quantity. [Mateo and Delgado, 2009] suggests two alternatives:
Minimizing the energy per unit length:
\[\begin{gather*} \mathcal{E}_1[\phi] = \frac{E_1[\phi]}{n_1} = \int \d^2\vect{r}_{\perp}\;\left( \frac{\hbar^2\abs{\nabla_\perp \phi}^2}{2m} + V_\perp(\vect{r}_\perp)\abs{\phi}^2 + \frac{\mathcal{E}(n_1\abs{\phi}^2)}{n_1} \right)\\ = \int \d^2\vect{r}_{\perp}\;\left( \frac{\hbar^2\abs{\nabla_\perp \phi}^2}{2m} + V_\perp(\vect{r}_\perp)\abs{\phi}^2 + \frac{Q_1(n_0)}{n_1} \right). \end{gather*}\]Minimizing the chemical potential:
\[\begin{gather*} \mu_1[\phi] = \pdiff{E[\phi]}{n_1} = \int \d^2\vect{r}_{\perp}\; \phi^*\left( \frac{-\hbar^2\nabla_\perp^2}{2m} + V_\perp(\vect{r}_\perp) + \mathcal{E}'(n_1\abs{\phi}^2) \right)\phi. \end{gather*}\]
Power-law forms (old)
Minimizing the energy per unit length:
\[\begin{gather*} \mathcal{E}_1[\phi] = \frac{E_1[\phi]}{n_1} = \int \d^2\vect{r}_{\perp}\;\left( \frac{\hbar^2\abs{\nabla_\perp \phi}^2}{2m} + V_\perp(\vect{r}_\perp)\abs{\phi}^2 + \alpha\frac{\abs{\phi}^{2\beta}}{\beta}n_1^{\beta-1} \right). \end{gather*}\]Minimizing the chemical potential:
\[\begin{gather*} \mu_1[\phi] = \pdiff{E[\phi]}{n_1} = \int \d^2\vect{r}_{\perp}\; \phi^*\left( \frac{-\hbar^2\nabla_\perp^2}{2m} + V_\perp(\vect{r}_\perp) + \alpha\abs{\phi}^{2(\beta-1)}n_1^{\beta-1} \right)\phi. \end{gather*}\]
They argue that, while minimization of \(\mathcal{E}_1[\phi]\) always yields the correct result when the minimum is taken over the whole space of functions \(\phi\), the second approach of minimizing \(\mu_1[\phi]\) can yield better approximation in the case of restricted forms of \(\phi\), and that these two approaches are equivalent when \(\alpha \rightarrow 0\).
HO Potential and Gaussian Wavefunction#
Here we derive the results for harmonic oscillator potentials with the Gaussian approximation:
The expectations values are:
Note: in the kinetic energy, we have allowed for different scaling factors in each direction. This will help with the book-keeping needed for the Dynamically Rescaled GPE (dr-GPE) later.
Varying these with respect to \(\sigma_x\) and \(\sigma_y\), we obtain the following equations:
For the power-law equation of state, we have
These are a little tricky to solve and we defer the discussion of their solution to Solving for Sigmas: Globally Convergent Newton’s Method. Once we solve for \(\sigma_x\) and \(\sigma_y\), we can express the energy and chemical potential as follows, eliminating the interaction term:
The value of \(a\) depends on whether we minimize the energy, or chemical potential:
GPE with \(\beta = 2\), Minimize Energy, \(a=1\):
GPE with \(\beta = 2\), Minimize Chemical Potential, \(a=1/2\):
Old Results
Here are the same formulae in the symmetric limit \(\lambda_{x}=\lambda_{y}=1\), \(\omega_x = \omega_y = \omega_\perp\), and \(\sigma_x = \sigma_y = \sigma\):
Explicit form for GPE
For the GPE with \(\alpha = g\), and \(\beta = 2\) we have:
HO Potential and TF Wavefunction (Incomplete)
An alternative strategy is to use the TF approximation radially:
This is missing the zero-point energy of the radial motion. We do not use this.
HO Potential and Exact Wavefunction (Incomplete)
The exact solution requires solving radial equation. Here we present a general solution for this (numerically) for the GPE after first performing some scaling transformations. We start with a symmetric trap:
Central Density#
If the Gaussian is a good approximation, then the central density is related to the 1D integrated density by:
As demonstrated below, if the radial direction is large, the Gaussian ansatz may be poor even though the resulting dynamics might be well captured by this model. In this case, a different approach is required to get the central density based on the TF approximation:
Let
Then
Hence:
This latter option is provided in by get_central_density(TF=True).
GPE with \(\beta=2\) and \(\alpha = g\):
Thomas-Fermi Profiles#
To initialize states we typically use a Thomas Fermi approximation. For the 1D GPE, this leads to a profile:
where \(R_{TF}\) is the Thomas Fermi “radius” (for a harmonic potential). (Of course, only positive densities should be used, if the expression is negative, the density should be set to zero.)
For our effective 1D model, this must be modified somewhat. We start with the definition of the Thomas Fermi where \(n_{1D}(R) = 0\). As we shall see shortly, at this point \(\sigma_{x,y}^2(R) = \hbar/m\omega_{x,y}\) and the chemical potential must be augmented with the transverse energy (zero-point energy \(\hbar\omega/2\) in each direction):
(Note: we have set \(\lambda_\perp = 1\) here since we only consider initializing a state prior to expansion.)
Recall that the Thomas-Fermi approximation has the form
where
While this can be solved in principle, the expressions are cumbersome, so for now, we consider only the case \(\omega_x = \omega_y \equiv \omega_\perp\) so that \(B_x = B_y = B\) and \(\sigma_x = \sigma_y = \sigma\). Then we can solve:
This gives a quadratic equation for \(\sigma^2\) which in turn can be used to find \(C\) and \(n_1\):
Expanding the constants, we have
GPE (\(\alpha=g\), \(\beta = 2\)), Minimize Energy, \(a=1\):
GPE (\(\alpha=g\), \(\beta = 2\)), Minimize Chemical Potential, \(a=1/2\):
2D Version (Pancakes)#
We can repeat the same analysis for clouds that are tightly confined in a single dimension (pancakes) to obtain an effective 2D NPSEQ:
For power-law EoS:
Demonstration#
{code-cell}
from importlib import reload
import gpe.tube;reload(gpe.tube)
from gpe.tube import StateGPEdrZ
from gpe.minimize import MinimizeState
class State(StateGPEdrZ):
_mu = 0.0
def get_ws_perp(self, t):
return self.ws[1:]
def _get_Vext_(self):
mu = self._mu if self._mu else 0.0
return super()._get_Vext_() - mu
s = State(
Lxyz=(10.0,),
Nxyz=(64,),
ws=(1.1, 1.2, 1.3),
g=10.0,
)
x = s.xyz[0]
x_TF = 2.0
V_TF = s.get_V_TF(x_TF=x_TF)
s._mu = 0.0
s._mu = s.get_mu_from_V_TF(V_TF=V_TF)
n_TF = s.get_n_TF(V_TF=V_TF)
s = MinimizeState(s, fix_N=False).minimize()
# plt.plot(x, n_TF)
plt.plot(x, s.get_density() - n_TF);
{code-cell}
m, g, w = s.m, s.g, s.w0_perp
w2 = w**2
assert s.hbar == 1
sigma2 = s.get_sigma2()
n = s.get_density()
# plt.plot(np.sqrt(1 + m*g*n/2/np.pi)/m/w_perp - sigma2)
V = s.get_Vext()
def get_sigma2_TF(mu):
mu_eff = mu - s.get_Vext()
return mu_eff / 3 / m / w2 + 1.0 / 3.0 / m / w * np.sqrt(mu_eff**2 / w2 + 3)
def get_n_TF(mu):
s2 = get_sigma2_TF(mu)
return 2 * np.pi * np.maximum((m * w * s2) ** 2 - 1, 0) / m / g
mu = ((3 * m * w2 * sigma2**2 / 2 - 1.0 / 2.0 / m) / sigma2 + V).min()
# plt.plot(get_sigma2_TF(mu))
# plt.plot(sigma2)
plt.plot((get_n_TF(mu) - n) / n.max());
{code-cell}
from gpe import utils, bec, tube, minimize
reload(bec)
reload(tube)
class State(bec.State):
# Goal:
# healing length = 1.0
# trap length = 2.0
# central density = 1.0
# g = 1.0
# cloud radius R = 5.0
# Box size = 20.0
# mw^2R^2/2 = mu = gn
def __init__(self, dim=3, g=1.0, trap_a=0.0, trap_T=1.0):
m = 1.0
n0 = 1.0
mu = g * n0
Rxyz = np.array([10.0, 2.0, 2.0])
ws = np.sqrt(2 * mu / m) / Rxyz
dx = 0.25
Lxyz = 3.0 * Rxyz
Nxyz = list(map(utils.get_good_N, Lxyz / dx))
self.trap_a = trap_a
self.trap_T = trap_T
args = dict(
g=g,
m=m,
ws=ws,
Lxyz=Lxyz[:dim],
Nxyz=Nxyz[:dim],
mu=mu,
)
super().__init__(**args)
self.mu = mu
def get_ws_perp(self, t=None):
if t is None:
t = self.t
if t <= 0:
return self.ws[1:]
else:
w_trap = 2 * np.pi / self.trap_T
ws = 1 * self.ws[1:]
ws *= 1 + self.trap_a * np.sin(w_trap * t)
return ws
def get_ws(self, t=None):
ws = 1 * self.ws
ws[1:] = self.get_ws_perp(t=t)
return ws
def _get_Vext_(self):
return (
0.5 * self.m * sum((_w * _x) ** 2 for _w, _x in zip(self.get_ws(), self.xyz))
- self.mu
)
class State1(tube.StateGPEdrZ):
def __init__(self, state):
args = dict(
Nxyz=state.basis.Nxyz[:1],
Lxyz=state.basis.Lxyz[:1],
ws=state.ws,
g=state.g,
m=state.m,
mu=state.mu,
)
self.trap_a = state.trap_a
self.trap_T = state.trap_T
super().__init__(**args)
def get_ws_perp(self, t=None):
if t is None:
t = self.t
if t <= 0:
return self.ws[1:]
else:
w_trap = 2 * np.pi / self.trap_T
ws = 1 * self.ws[1:]
ws *= 1 + self.trap_a * np.sin(w_trap * t)
return ws
def get_ws(self, t=None):
ws = 1 * self.ws
ws[1:] = self.get_ws_perp(t=t)
return ws
def _get_Vext_(self):
return (
0.5 * self.m * sum((_w * _x) ** 2 for _w, _x in zip(self.get_ws(), self.xyz))
- self.mu
)
def get_states(g=1.0):
"""Returns three states `(s, s_1D, s_tube)` for comparison:
Returns
-------
s : Full 3D state.
s_1D : 1D state representing a translationally invariant system in y and z.
This should match the central density of s in the TF limit.
s_tube : 1D state but in the dr-GPE-Z approximation where the cross-section
of the cloud is modelled as a Gaussian.
"""
s = minimize.MinimizeState(State(g=g), fix_N=False).minimize()
Nx, Ny, Nz = s.basis.Nxyz
n_central = s.get_density()[:, Ny // 2, Nz // 2]
# w_perp = np.prod(s.ws[1:])**(1./len(s.ws[1:]))
# a_perp = np.sqrt(s.hbar/s.m/w_perp)
# zeta_1_2 = -1.46035450880958681288949915251529801246722933101258
# scattering_length = s.g/s.m/4/np.pi/s.hbar**2
# g = (a_perp * s.hbar * w_perp * 2 * scattering_length/a_perp
# / (1 - scattering_length/a_perp * abs(zeta_1_2)))
# print(g)
s_1D = State(dim=1, g=g)
s_1D[...] = np.sqrt(n_central)
s_1D.mu = s.mu
s_1D = minimize.MinimizeState(s_1D, fix_N=False).minimize()
s_tube = State1(state=s)
s_tube[...] *= np.sqrt(s.get_N() / s_tube.get_N())
s_tube = minimize.MinimizeState(s_tube, fix_N=True).minimize()
return s, s_1D, s_tube
{code-cell}
s_g1 = get_states(g=1.0)
s_g2 = get_states(g=2.0)
s_g10 = get_states(g=10.0)
s_g1[0].plot()
plt.figure()
s_g10[0].plot()
{code-cell}
plt.figure(figsize=(10, 7))
def plot_central_density(s, s_1D, s_tube):
Nx, Ny, Nz = s.basis.Nxyz
n_central = s.get_density()[:, Ny // 2, Nz // 2]
plt.plot(s_1D.xyz[0], s_1D.get_density(), label="1D")
plt.plot(s.xyz[0].ravel(), s.get_density().max(axis=-1).max(axis=-1), label="3D")
plt.plot(s_tube.xyz[0], s_tube.get_central_density(), label="dr-GPE")
plt.plot(s_tube.xyz[0], s_tube.get_central_density(TF=True), label="dr-GPE-TF")
plt.ylabel("Central Density")
plt.legend(loc="best")
def plot_1D_density(s, s_1D, s_tube):
Nx, Ny, Nz = s.basis.Nxyz
plt.plot(s_1D.xyz[0], s_1D.get_density(), label="1D")
dxyz = s.basis.Lxyz / s.basis.Nxyz
plt.plot(
s.xyz[0].ravel(),
s.get_density().sum(axis=-1).sum(axis=-1) * np.prod(dxyz[1:]),
label="3D",
)
plt.plot(s_tube.xyz[0], s_tube.get_density(), label="dr-GPE")
plt.ylabel("1D integrated density")
plt.legend(loc="best")
for n, (s, s_1D, s_tube) in enumerate([s_g1, s_g2, s_g10]):
plt.subplot(231 + n)
plt.title("g={}".format(s.g))
plot_central_density(s=s, s_1D=s_1D, s_tube=s_tube)
plt.subplot(234 + n)
plot_1D_density(s=s, s_1D=s_1D, s_tube=s_tube)
Here we see that in the TF limit (large \(g\), small healing length, right) that the 1D
model and the 3D model have very similar behavior, but the tube deviates. This is
because the cross-section in the trap is a Gaussian which is only valid for tightly
confining traps. For tightly confining traps, the 1D model does not work well. We also
compare the extraction of the central density assuming a TF profile dr-GPR-TF which
does work well in the right plot. Which version you use depends on the trap parameters.
In the bottom, we compare the integrated line density integrating across the trap in the \(x\) and \(y\) directions. This is well-modeled by the gr-GPE-Z model as expected because this is how the Gaussian is fit. The 1D model does not represent this well at all (also as expected).
Here we add some dynamics in the form of a sinusoidally varying \(\omega(t)\).
{code-cell}
from IPython.display import display, clear_output
from pytimeode.evolvers import EvolverABM
from mmfutils.contexts import NoInterrupt
ss = s_g2
s = ss[0]
dt = 0.2 * s.t_scale
es = []
for _s in ss:
s = _s.copy()
x = s.xyz[0]
s.trap_a = 0.1
# s.trap_T = 10.0
# s[...] *= (np.tanh(0.1*(x - 2))**2 + 10.0)/11.0
s[...] *= np.tanh(0.1 * (x - 2))
es.append(EvolverABM(s, dt=dt))
with NoInterrupt() as interrupted:
while not interrupted:
for e in es:
e.evolve(200)
plt.clf()
plt.subplot(211)
plot_1D_density(*[_e.y for _e in es])
plt.subplot(212)
plot_central_density(*[_e.y for _e in es])
plt.suptitle("t={:0.2f}, g={}".format(e.t, e.y.g))
display(plt.gcf())
clear_output(wait=True)
This works well until about 29ms. I am not sure what the source of the errors are at this point - possibly due to the Z approximation, or maybe due to neglecting the derivatives of \(\sigma_{,z}\)?
TF Approximation#
Now we consider the TF approximation and chemical potentials. The previous states were chosen so that the total particle number is the same. Here we compare how this relates to the chemical potential \(\mu\) and \(V_{TF} = V(x_{TF})\) at the boundary of the cloud:
{code-cell}
plt.figure(figsize=(10, 3))
for n, (s, s_1D, s_tube) in enumerate([s_g1, s_g2, s_g10]):
plt.subplot(131 + n)
plt.title("g={}".format(s.g))
for _s in (s, s_tube):
_s0 = _s.copy()
_s0.set_initial_state(x_TF=9)
(l,) = plt.plot(_s.xyz[0].ravel(), _s.get_density_x())
plt.plot(_s0.xyz[0].ravel(), _s0.get_density_x(), c=l.get_c(), ls=":")
# plot_central_density(s=s, s_1D=s_1D, s_tube=s_tube)
# ## References
# * [Massignan:2003]: One-dimensional model for the dynamics and expansion of elongated Bose-Einstein condensates. This is where they introduce the so-called dynamically rescaled GPE (dr-GPE).
# * [Mateo:2009]: Clearest presentation of the results from [Mateo:2006], [Mateo:2007], and [Mateo:2008]. Here they consider two forms of the NPSEQ.
#
# [Massignan:2003]: http://dx.doi.org/10.1103/PhysRevA.67.023614 'Pietro Massignan and Michele Modugno, "One-dimensional model for the dynamics and expansion of elongated Bose-Einstein condensates", Phys. Rev. A 67, 023614 (2003)'
# [Mateo:2006]: http://dx.doi.org/10.1103/physreva.74.065602 'A. Muñoz Mateo and V. Delgado, "Extension of the Thomas-Fermi approximation for trapped Bose-Einstein condensates with an arbitrary number of atoms", pra 74(6), (2006)'
# [Mateo:2007]: https://doi.org/10.1103/PhysRevA.75.063610 'A. Mu\~noz Mateo and V. Delgado, "Ground-state properties of trapped Bose-Einstein condensates: Extension of the Thomas-Fermi approximation", pra 75, 063610 (2007)'
# [Mateo:2008]: https://doi.org/10.1103/PhysRevA.77.013617 'A. Mu\~noz Mateo and V. Delgado, "Effective mean-field equations for cigar-shaped and disk-shaped Bose-Einstein condensates", pra 77, 013617 (2008) '
# [Mateo:2009]: https://doi.org/10.1016/j.aop.2008.10.002 'A. Muñoz Mateo and V. Delgado, "Effective one-dimensional dynamics of elongated Bose--Einstein condensates", Annals of Physics 324(3), 709 - 724 (2009) '
# ## Separable Ansatz
# The other portion of the analysis is to factorize the wavefunction as
#
# \begin{gather*}
# \Psi(x, y, z; t) = \phi(x, y, z, t)\psi(z, t), \qquad
# \int \abs{\phi}^2(x, y, z, t)\;\d{x}\d{y} = 1.
# \end{gather*}
#
# The normalization condition gives the interpretation of $\abs{\psi}^2(z,t)$ as the density of particles per unit length along $z$.
#
# Noting that the GPE derives from a principle of minimal action:
#
# \begin{gather*}
# S = \int \Psi^\dagger \left(
# \I\hbar\partial_t
# - \frac{\hbar^2\overleftarrow\nabla\overrightarrow\nabla}{2m}
# - V_\perp(x, y) - V_z(z) - \frac{g}{2}\abs{\Psi}^2\right)\d{x}\d{y}\d{z},
# \end{gather*}
#
# we obtain the following equation for $\psi(z, t)$:
#
# \begin{gather*}
# \newcommand{\Braket}[1]{\left\langle{#1}\right\rangle}
# \I\hbar\dot{\psi} = \left(
# - \frac{\hbar^2\nabla_z^2}{2m}
# + V_ {"incorrectly_encoded_metadata": "{1D}(z) + g_{1D} \\abs{\\psi}^2\\right)\\psi\\\\"}
# \braket{A} = \frac{\int \phi^\dagger A\phi\; \d{x}\d{y}}
# {\int \abs{\phi}^2\;\d{x}\d{y}}, \qquad
# V_{1D}(z) = V_z(z) + \Braket{
# -\I\partial_t
# - \frac{\hbar^2\nabla^2}{2m}
# + V_\perp(x, y)}, \qquad
# g_{1D} = \braket{\abs{\phi}^2}.
# \end{gather*}
#
# The normalization condition for $\phi$ ensures that the linear term $C\nabla_z$ with $C\propto\braket{\nabla_Z} = 0$ vanishes.
# Likewise, minimizing wrt $\phi$ gives:
#
# \begin{gather*}
# \I\hbar \dot{\phi} = \left(
# -\frac{\hbar^2\nabla^2}{2m} + V_\perp(x, y) + V_z(z) - \mu + g\abs{\Psi}^2
# + \frac {"incorrectly_encoded_metadata": "{\\hbar^2\\abs{\\nabla_z\\psi}^2}{2m\\abs{\\psi}^2}"}
# \right)\phi,\\
# V_{2D}(x, y, z) = V_\perp(x, y) + V_z(z).
# \end{gather*}
# So far this is exact. To proceed, one assumes that the last term above is small, and that $\phi$ instantly adjusts so that the time-dependence can be dropped.
# Proceeding further, we factor the wavefunction as:
#
# \begin{gather*}
# \Phi(x, y, Z;t) = \phi(x, y, t; Z)\psi(Z, t)
# \end{gather*}
#
# and make the "slowly varying approximation" that the dependence of $\phi$ on $Z$ is slowly varying so that we may ignore derivatives. This allows $\phi$ to commute with the term $E(\op{p}_Z)$ so that the equations separate:
#
# \begin{gather*}
# \I\hbar\frac{\dot{\phi}}{\phi} =
# \frac{\frac{-\hbar^2(\nabla_X^2+\nabla_Y^2)}{2m}\phi}{\phi} + \epsilon(\abs\Psi^2)
# + \frac {"incorrectly_encoded_metadata": "{E(p_Z)\\psi}{\\psi} + V(Z, t) - \\I\\hbar \\frac{\\dot{\\psi}}{\\psi}."}
# \end{gather*}
#
# If we make the ansatz
#
# \begin{gather*}
# \phi\bigl(x, y; \sigma(Z, t)\bigr) = \frac{1}{\sqrt{\pi}\sigma(Z, t)}e^{-(x^2+y^2)/2\sigma^2}, \\
# \frac{\frac{-\hbar^2(\nabla_X^2+\nabla_Y^2)}{2m}\phi}{\phi} = \frac{\hbar^2}{2m}\frac{2\sigma^2-x^2-y^2}{\sigma^4}
# \end{gather*}
# ## Effective $g$ in Axial Confinement
# [Olshanii:1998] gives the relationship:
#
# \begin{gather*}
# a_{1D} = \frac{-a_\perp^2}{2a}\left(1 - C\frac{a}{a_{\perp}}\right), \qquad
# a_\perp = \sqrt{\frac{\hbar}{m\omega_\perp}}.\\
# g_{1D} = \frac{\hbar \omega_\perp 2 a}{1-C\frac{a}{a_\perp}}
# = \frac{2\hbar^2}{m}\frac{a}{a_\perp^2}\frac{1}{1-C\frac{a}{a_\perp}}
# = \frac{-a_\perp^2\hbar\omega_\perp}{a_{1D}}
# = \frac{-\hbar^2}{ma_{1D}},\\
# C = -\zeta(1/2) = 1.46035450880958681288949915251529801246722933101258.
# \end{gather*}
#
#
# but see [Zhang:2014] for a correction with SOC.
#
# [Olshanii:1998]: http://dx.doi.org/10.1103/PhysRevLett.81.938 'M. Olshanii, "Atomic Scattering in the Presence of an External Confinement and a Gas of Impenetrable Bosons", Phys. Rev. Lett. 81, 938--941 (1998)'
#
# [Zhang:2014]: http://dx.doi.org/10.1038/srep04992 'Yi-Cai Zhang, Shu-Wei Song, and Wu-Ming Liu, "The confinement induced resonance in spin-orbit coupled cold atoms with Raman coupling", Sci. Rep. 4, 4992 (2014)'
#
# In the weak-confinement limit $a \ll a_\perp$ this becomes:
#
# \begin{gather*}
# g_{1D} = 2 a \hbar \omega_\perp = \frac{2 \hbar^2}{m}\frac{a}{a_\perp^2}.
# \end{gather*}
zeta_1_2 = -1.46035450880958681288949915251529801246722933101258
gs_1d = (
a_perp
* u.hbar
* w_perp
* 2
* a_s
/ a_perp
/ (1 + a_s / a_perp * abs(zeta_1_2))
)