MADNESS
version 0.9
|
Solves the spin-orbit nuclear potential problem. More...
#include <madness/mra/mra.h>
#include <madness/mra/vmra.h>
#include <madness/mra/operator.h>
#include <madness/constants.h>
Typedefs | |
typedef Vector< double, 3 > | coordT |
typedef std::shared_ptr < FunctionFunctorInterface < double, 3 > > | real_functorT |
typedef std::shared_ptr < FunctionFunctorInterface < double_complex, 3 > > | complex_functorT |
typedef Function< double, 3 > | real_functionT |
typedef Function < double_complex, 3 > | complex_functionT |
typedef FunctionFactory < double, 3 > | real_factoryT |
typedef FunctionFactory < double_complex, 3 > | complex_factoryT |
typedef SeparatedConvolution < double, 3 > | operatorT |
typedef std::shared_ptr < operatorT > | poperatorT |
Functions | |
void | moments (World &world, const std::vector< complex_functionT > &u, const std::vector< complex_functionT > &v) |
void | gaxpy1 (World &world, const double_complex alpha, std::vector< complex_functionT > &a, const double_complex beta, const std::vector< complex_functionT > &b, bool fence=true) |
std::vector< poperatorT > | make_bsh_operators (World &world, const Tensor< double > &evals, double tol) |
Tensor< double_complex > | hamiltonian_matrix (World &world, const std::vector< complex_functionT > &u, const std::vector< complex_functionT > &v, const std::vector< complex_functionT > &Vu, const std::vector< complex_functionT > &Vv, const std::vector< complex_functionT > du[3], const std::vector< complex_functionT > dv[3]) |
void | apply_potential (World &world, const real_functionT &V0, const real_functionT &V0x, const real_functionT &V0y, const real_functionT &V0z, const std::vector< complex_functionT > &u, const std::vector< complex_functionT > &v, std::vector< complex_functionT > &Vu, std::vector< complex_functionT > &Vv, std::vector< complex_functionT > du[3], std::vector< complex_functionT > dv[3], bool doso) |
void | normalize2 (World &world, std::vector< complex_functionT > &u, std::vector< complex_functionT > &v) |
void | doit (World &world) |
int | main (int argc, char **argv) |
Variables | |
const double | L = 120.0 |
const double | zeta = 7.5 |
const double | R1 = 2.0 |
const double | R2 = 2.0 |
const double | a1 = 1.0 |
const double | a2 = 1.0 |
const double | reduced = 0.04825964488415279478 |
const double | V1 = -50.0*reduced |
const double | V2 = -50.0*reduced |
const double | lambda_correct = 0.0026608048208104861/reduced |
Solves the spin-orbit nuclear potential problem.
Solves the Hartree-Fock equation for the 2-cosh potential with spin-orbit in Nuclear Density Functional Theory witough assumption on spatial symmetry.
Points of interest.
The source is here.
This is a more involved example than the Hydrogen and Helium. This example couples the traditional diagonalization approach with that of the integral equation approach. The details are described in: G. I. Fann , J. Pei, R. J. Harrison1, J. Jia, J. Hill1 , M. Ou, W. Nazarewicz, W. A. Shelton and N. Schunck, "Fast multiresolution methods for density functional theory in nuclear physics," Journal of Physics, 180 (2009) 012080.
typedef FunctionFactory<double_complex,3> complex_factoryT |
typedef Function<double_complex,3> complex_functionT |
typedef SeparatedConvolution<double,3> operatorT |
typedef std::shared_ptr<operatorT> poperatorT |
typedef FunctionFactory<double,3> real_factoryT |
typedef Function<double,3> real_functionT |
typedef std::shared_ptr< FunctionFunctorInterface<double,3> > real_functorT |
void apply_potential | ( | World & | world, |
const real_functionT & | V0, | ||
const real_functionT & | V0x, | ||
const real_functionT & | V0y, | ||
const real_functionT & | V0z, | ||
const std::vector< complex_functionT > & | u, | ||
const std::vector< complex_functionT > & | v, | ||
std::vector< complex_functionT > & | Vu, | ||
std::vector< complex_functionT > & | Vv, | ||
std::vector< complex_functionT > | du[3], | ||
std::vector< complex_functionT > | dv[3], | ||
bool | doso | ||
) |
References madness::apply(), madness::gaxpy(), I(), madness::mul(), one(), madness::reconstruct(), and madness::Function< T, NDIM >::reconstruct().
Referenced by doit().
void doit | ( | World & | world | ) |
References madness::add(), madness::apply(), apply_potential(), c, e1(), madness::WorldGopInterface::fence(), madness::World::gop, hamiltonian_matrix(), k, L, make_bsh_operators(), madness::matrix_inner(), max, moments(), madness::norm2s(), normalize2(), madness::print(), madness::project(), madness::World::rank(), madness::reconstruct(), reduced, madness::FunctionDefaults< NDIM >::set_autorefine(), madness::FunctionDefaults< NDIM >::set_cubic_cell(), madness::FunctionDefaults< NDIM >::set_initial_level(), madness::FunctionDefaults< NDIM >::set_k(), madness::FunctionDefaults< NDIM >::set_refine(), madness::FunctionDefaults< NDIM >::set_thresh(), madness::FunctionDefaults< NDIM >::set_truncate_mode(), sqrt(), madness::sygv(), thresh, madness::transform(), madness::truncate(), V(), madness::wall_time(), and zeta.
Referenced by main().
void gaxpy1 | ( | World & | world, |
const double_complex | alpha, | ||
std::vector< complex_functionT > & | a, | ||
const double_complex | beta, | ||
const std::vector< complex_functionT > & | b, | ||
bool | fence = true |
||
) |
References madness::WorldGopInterface::fence(), and madness::World::gop.
Tensor<double_complex> hamiltonian_matrix | ( | World & | world, |
const std::vector< complex_functionT > & | u, | ||
const std::vector< complex_functionT > & | v, | ||
const std::vector< complex_functionT > & | Vu, | ||
const std::vector< complex_functionT > & | Vv, | ||
const std::vector< complex_functionT > | du[3], | ||
const std::vector< complex_functionT > | dv[3] | ||
) |
References madness::matrix_inner(), and madness::reconstruct().
Referenced by doit().
int main | ( | int | argc, |
char ** | argv | ||
) |
std::vector<poperatorT> make_bsh_operators | ( | World & | world, |
const Tensor< double > & | evals, | ||
double | tol | ||
) |
References sqrt().
Referenced by doit(), and madness::EigSolver< T, NDIM >::multi_solve().
void moments | ( | World & | world, |
const std::vector< complex_functionT > & | u, | ||
const std::vector< complex_functionT > & | v | ||
) |
References madness::Function< T, NDIM >::compress(), madness::conj(), madness::Function< T, NDIM >::gaxpy(), madness::inner(), madness::print(), madness::World::rank(), madness::reconstruct(), madness::scale(), madness::FunctionDefaults< NDIM >::set_autorefine(), and madness::Function< T, NDIM >::trace().
Referenced by doit().
void normalize2 | ( | World & | world, |
std::vector< complex_functionT > & | u, | ||
std::vector< complex_functionT > & | v | ||
) |
References madness::norm2s(), and sqrt().
Referenced by doit().
const double a1 = 1.0 |
const double a2 = 1.0 |
const double L = 120.0 |
Referenced by doit().
const double lambda_correct = 0.0026608048208104861/reduced |
const double R1 = 2.0 |
const double R2 = 2.0 |
Referenced by compute_energy(), and madness::HartreeFock< T, NDIM >::value().
const double reduced = 0.04825964488415279478 |
Referenced by doit().
const double V1 = -50.0*reduced |
const double V2 = -50.0*reduced |
const double zeta = 7.5 |
Referenced by c_uks_vwn5__(), and doit().