ROL
|
Minimize the Gross-Pitaevskii functional and demonstrate the effect of choice of function space of the Gradient on convergence. In this version we implement the correct Sobolev inner products and Reisz mapping using a finite difference approximation of the derivative terms.
More...
#include <algorithm>
#include <string>
#include "example_02.hpp"
#include "ROL_ConstraintStatusTest.hpp"
#include "ROL_CompositeStep.hpp"
Go to the source code of this file.
Typedefs | |
typedef double | RealT |
Functions | |
int | main (int argc, char **argv) |
Minimize the Gross-Pitaevskii functional and demonstrate the effect of choice of function space of the Gradient on convergence. In this version we implement the correct Sobolev inner products and Reisz mapping using a finite difference approximation of the derivative terms.
Minimize the one-dimensional Gross-Pitaevskii (GP) energy functional
\[ J[\psi] = \int \frac{1}{2} |\nabla\psi|^2 + V(x)|\psi|^2 +g|\psi|^4 \,\mathrm{d}x \]
Subject to the equality constraint that the particle density be normalized.
\[ e(\psi) = \int |\psi|^2\,\mathrm{d}x - 1 = 0 \]
For simplicity, we will assume the wavefunction \(\psi\) to be real-valued, the potential function \( V(x)\geq 0\), the computational domain is the interval \([0,1]\), and that \(\psi(0)=\psi(1)=0\). We also discretize the problem using second-order centered finite differences on a uniform grid.
\[ \psi''(x_i) \approx = \frac{\psi(x_{i-1})-2\psi(x_i)+\psi(x_{i+1})}{\Delta x^2} \]
The gradient with respect to the \(L^2\) inner product is actually an element of \(H^{-1}\), so if we search in this direction, we are actually looking for a solution \(\psi\) in a larger space than we should. If we compute the gradient with respect to the \(H^1\) inner product, by solving a Poisson equation, we search in the right space and the optimizer converges much faster than example_01.cpp which
does not do this.
Definition in file gross-pitaevskii/example_02.cpp.
typedef double RealT |
Definition at line 88 of file gross-pitaevskii/example_02.cpp.
int main | ( | int | argc, |
char ** | argv ) |
Definition at line 90 of file gross-pitaevskii/example_02.cpp.