MADNESS 0.10.1
dirac-hatom.cc File Reference

solve the hydrogen atom using the 4-component Dirac equation More...

#include <iostream>
#include <madchem.h>
Include dependency graph for dirac-hatom.cc:

Classes

struct  Ansatz0
struct  AnsatzBase
class  DiracParameters
struct  ExactSpinor
struct  LProjector
class  MatrixOperator
 class defining an operator in matrix form, fixed to size (4,4) More...
class  Metric
class  MyDerivativeOperator< T, NDIM >
struct  ncf
struct  ncf_cusp
struct  ncf_singularity
struct  Omega
struct  sgl_guess
struct  Sigma_ncf_cusp
struct  SphericalHarmonics
 returns the complex value of a given spherical harmonic More...
class  Spinor
 defines a 4-spinor More...
struct  spinorallocator
struct  stepfunction
struct  Xi
 following Dyall: p 104f More...

Enumerations

enum  Uplo { upper , lower }

Functions

template<typename ansatzT>
Spinor apply_bsh (ansatzT &ansatz, const MatrixOperator &Hd, const MatrixOperator &Hv, const MatrixOperator &metric, const Spinor &spinor, const double energy)
void apply_mask (std::vector< Spinor > &v)
double compute_electronic_energy (const double energy)
double compute_gamma (const double nuclear_charge)
Spinor copy (const Spinor &other)
std::vector< Spinor > copy (const std::vector< Spinor > &other)
template<typename ansatzT>
void eigenvector_test (World &world, const ansatzT ansatz, ExactSpinor es)
double generalized_laguerre (const double alpha, const long n, const double r)
Tensor< double_complex > get_fock_transformation (World &world, const std::vector< Spinor > &spinors, const Tensor< double_complex > &overlap, const Tensor< double_complex > &fock)
double_complex inner (const std::vector< Spinor > &bra, const std::vector< Spinor > ket)
template<typename AnsatzT>
std::vector< Spinor > iterate (const std::vector< Spinor > &input, const std::vector< double > energy, const AnsatzT &ansatz, const int maxiter)
int main (int argc, char *argv[])
MatrixOperator make_alpha_p (World &world)
MatrixOperator make_Hd (World &world, const std::pair< double_complex, std::string > &ll, const std::pair< double_complex, std::string > &ss)
 this is c sigma p + beta m c^2
MatrixOperator make_Hdiag (World &world, const LocalPotentialOperator< double_complex, 3 > &V1)
MatrixOperator make_Hv (World &world, const double nuclear_charge)
 this is the nuclear potential on the diagonal
MatrixOperator make_sp (World &world)
 returns a (2,2) matrix
double mask1d (double x)
double mask3d (const Vector< double, 3 > &ruser)
Tensor< double_complex > matrix_inner (const std::vector< Spinor > &bra, const std::vector< Spinor > ket)
MatrixOperator moments (World &world, int axis, int order)
template<typename T>
Spinor operator* (const Spinor &arg, const T fac)
template<typename T>
std::vector< Spinor > operator* (const std::vector< Spinor > &arg, const T fac)
template<typename T>
Spinor operator* (const T fac, const Spinor &arg)
std::vector< Spinor > operator+= (std::vector< Spinor > &left, const std::vector< Spinor > &right)
std::vector< Spinor > operator- (const std::vector< Spinor > &left, const std::vector< Spinor > &right)
std::vector< Spinor > operator-= (std::vector< Spinor > &left, const std::vector< Spinor > &right)
template<typename AnsatzT>
void orthonormalize (std::vector< Spinor > &arg, const AnsatzT ansatz)
std::vector< Spinor > orthonormalize_fock (const std::vector< Spinor > &arg, const std::vector< Spinor > &bra, Tensor< double_complex > &fock)
double potn (double r)
template<typename ansatzT>
void run (World &world, ansatzT ansatz, const int nuclear_charge, const commandlineparser &parser, const int nstates)
template<typename ansatzT>
std::vector< Spinor > schrodinger2dirac (const std::vector< complex_function_3d > wf, const ansatzT &ansatz, const double nuclear_charge)
void show_norms (const Spinor &bra, const Spinor &ket, const std::string &name)
std::vector< Spinor > transform (World &world, const std::vector< Spinor > &v, const Tensor< double_complex > &c)
 Transforms a vector of functions according to new[i] = sum[j] old[j]*c[j,i].
std::vector< Spinor > truncate (std::vector< Spinor > arg)

Variables

static double alpha1 =constants::fine_structure_constant
static double clight =1.0/alpha1
static bool debug =false
static double epsilon =1.e-12
static double lo =1.e-7
real_function_3d mask
static double nucexpt =3.0/nucrad
static double nucrad =1e-8
static double shift =0.0
static bool use_ble =false
static bool use_bsp =false

Detailed Description

solve the hydrogen atom using the 4-component Dirac equation

example usage: dirac-hatom –thresh=1.e-5 –k=7 –dirac="charge=100"

Enumeration Type Documentation

◆ Uplo

enum Uplo
Enumerator
upper 
lower 

Function Documentation

◆ apply_bsh()

template<typename ansatzT>
Spinor apply_bsh ( ansatzT & ansatz,
const MatrixOperator & Hd,
const MatrixOperator & Hv,
const MatrixOperator & metric,
const Spinor & spinor,
const double energy )

◆ apply_mask()

void apply_mask ( std::vector< Spinor > & v)

References f, mask, and v.

Referenced by iterate(), and run().

◆ compute_electronic_energy()

double compute_electronic_energy ( const double energy)

References alpha1, c, energy, and shift.

Referenced by iterate().

◆ compute_gamma()

double compute_gamma ( const double nuclear_charge)

◆ copy() [1/2]

◆ copy() [2/2]

std::vector< Spinor > copy ( const std::vector< Spinor > & other)

References copy().

◆ eigenvector_test()

◆ generalized_laguerre()

double generalized_laguerre ( const double alpha,
const long n,
const double r )

◆ get_fock_transformation()

◆ inner()

◆ iterate()

◆ main()

◆ make_alpha_p()

MatrixOperator make_alpha_p ( World & world)

◆ make_Hd()

MatrixOperator make_Hd ( World & world,
const std::pair< double_complex, std::string > & ll,
const std::pair< double_complex, std::string > & ss )

this is c sigma p + beta m c^2

Parameters
[in]llscalar on the LL (1,1) block
[in]ssscalar on the SS (2,2) block

References MatrixOperator::add_operator(), madness::FunctionFactory< T, NDIM >::functor(), make_alpha_p(), V(), V1, and V2.

◆ make_Hdiag()

MatrixOperator make_Hdiag ( World & world,
const LocalPotentialOperator< double_complex, 3 > & V1 )

◆ make_Hv()

MatrixOperator make_Hv ( World & world,
const double nuclear_charge )

this is the nuclear potential on the diagonal

References madness::FunctionFactory< T, NDIM >::functor(), make_Hdiag(), madness::Vector< T, N >::normf(), potn(), V(), and V1.

◆ make_sp()

◆ mask1d()

double mask1d ( double x)

Referenced by mask3d().

◆ mask3d()

double mask3d ( const Vector< double, 3 > & ruser)

References lo, mask1d(), and madness::user_to_sim().

Referenced by run().

◆ matrix_inner()

Tensor< double_complex > matrix_inner ( const std::vector< Spinor > & bra,
const std::vector< Spinor > ket )

◆ moments()

MatrixOperator moments ( World & world,
int axis,
int order )

◆ operator*() [1/3]

template<typename T>
Spinor operator* ( const Spinor & arg,
const T fac )

References madness::arg().

◆ operator*() [2/3]

template<typename T>
std::vector< Spinor > operator* ( const std::vector< Spinor > & arg,
const T fac )

References madness::arg(), and copy().

◆ operator*() [3/3]

template<typename T>
Spinor operator* ( const T fac,
const Spinor & arg )

References madness::arg().

◆ operator+=()

std::vector< Spinor > operator+= ( std::vector< Spinor > & left,
const std::vector< Spinor > & right )

◆ operator-()

std::vector< Spinor > operator- ( const std::vector< Spinor > & left,
const std::vector< Spinor > & right )

References copy().

◆ operator-=()

std::vector< Spinor > operator-= ( std::vector< Spinor > & left,
const std::vector< Spinor > & right )

◆ orthonormalize()

template<typename AnsatzT>
void orthonormalize ( std::vector< Spinor > & arg,
const AnsatzT ansatz )

◆ orthonormalize_fock()

std::vector< Spinor > orthonormalize_fock ( const std::vector< Spinor > & arg,
const std::vector< Spinor > & bra,
Tensor< double_complex > & fock )

◆ potn()

◆ run()

◆ schrodinger2dirac()

template<typename ansatzT>
std::vector< Spinor > schrodinger2dirac ( const std::vector< complex_function_3d > wf,
const ansatzT & ansatz,
const double nuclear_charge )

References alpha1, Spinor::components, make_alpha_p(), truncate(), and w().

Referenced by run().

◆ show_norms()

void show_norms ( const Spinor & bra,
const Spinor & ket,
const std::string & name )

◆ transform()

std::vector< Spinor > transform ( World & world,
const std::vector< Spinor > & v,
const Tensor< double_complex > & c )

Transforms a vector of functions according to new[i] = sum[j] old[j]*c[j,i].

Uses sparsity in the transformation matrix — set small elements to zero to take advantage of this.

References c, madness::WorldGopInterface::fence(), madness::gaxpy(), madness::World::gop, m, MADNESS_ASSERT, PROFILE_BLOCK, and v.

Referenced by orthonormalize(), and orthonormalize_fock().

◆ truncate()

Variable Documentation

◆ alpha1

◆ clight

double clight =1.0/alpha1
static

Referenced by apply_bsh(), and Spinor::truncate().

◆ debug

bool debug =false
static

◆ epsilon

◆ lo

double lo =1.e-7
static

Referenced by madness::cartesian_grid< NDIM >::cartesian_grid(), madness::divide_add_interpolate::divide_add_interpolate(), madness::Exchange< T, NDIM >::Exchange(), madness::F12Potentials::F12Potentials(), madness::GFit< T, NDIM >::GFit(), MolecularNuclearPotentialFunctor2::MolecularNuclearPotentialFunctor2(), madness::SeparatedConvolution< double, 3 >::SeparatedConvolution(), madness::SeparatedConvolution< double, 3 >::SeparatedConvolution(), madness::SystolicMatrixAlgorithm< T >::SystolicMatrixAlgorithm(), madness::NuclearCorrelationFactor::U1X_functor::U1X_functor(), madness::NuclearCorrelationFactor::U1X_functor::U1X_functor(), madness::NuclearCorrelationFactor::U2X_functor::U2X_functor(), madness::adq(), madness::adq1(), APPLY(), apply_bsh(), madness::TDHF::apply_G(), madness::CCPotentials::apply_KffK(), madness::XCOperator< T, NDIM >::apply_tau_term(), apply_U_mix(), apply_U_ncf(), apply_V(), madness::NuclearCorrelationFactor::atoms_near(), madness::FunctionImpl< T, NDIM >::autorefine_square_test(), bind_operators(), madness::GFit< T, NDIM >::bsh_fit(), madness::GFit< T, NDIM >::bsh_fit_ndim(), madness::GFit< T, NDIM >::BSHFit(), madness::BSHOperator(), madness::BSHOperator3D(), madness::BSHOperatorPtr(), madness::BSHOperatorPtr3D(), madness::DiagnosticMatrix< T, NDIM >::build_Gab_bra(), madness::SeparatedConvolution< double, 3 >::combine_generic(), madness::SeparatedConvolution< double, 3 >::combine_generic_coeffs(), madness::OEP::compute_and_print_final_energies(), compute_energy(), madness::MP2::compute_gQf(), madness::Znemo::compute_potentials(), compute_R2f2_psi(), madness::Znemo::compute_residuals(), madness::GFit< T, NDIM >::CoulombFit(), madness::CoulombOperator(), madness::CoulombOperatorPtr(), cplxfunc0(), cplxfunc1(), cplxfunc2(), cplxvec0(), cplxvec1(), cplxvec2(), madness::ExchangeCommutator::diagnose_GKffK(), madness::ExchangeCommutator::diagnose_GQKffK(), madness::do_adq(), Plotter::dolineplot(), Plotter::dolineplot(), draw_line(), madness::ExchangeAlgorithm< T, NDIM >::Exchange(), madness::GFit< T, NDIM >::f12_fit(), madness::GFit< T, NDIM >::F12Fit(), madness::GFit< T, NDIM >::f12sq_fit(), madness::GFit< T, NDIM >::F12sqFit(), madness::GFit< T, NDIM >::F2GFit(), madness::F2GOperator(), madness::F2GOperatorPtr(), madness::GFit< T, NDIM >::FGFit(), madness::FGOperator(), madness::FGOperatorPtr(), madness::ExchangeCommutator::fk_provider(), madness::GFit< T, NDIM >::GaussFit(), madness::GaussOperator(), madness::GaussOperatorPtr(), madness::TDHFParameters::get_ccc_parameters(), golden_check_ndim(), madness::GradBSHOperator(), GradBSHOperator_Joel(), madness::GradCoulombOperator(), madness::GradSlaterOperator(), madness::SCF::group_orbital_sets(), madness::DQueue< T >::grow(), madness::MP2::guess_mp1_3(), madness::cartesian_grid< NDIM >::initialize(), madness::TDHF::initialize(), madness::GFit< T, NDIM >::InverseRSqFit(), iterate(), madness::SCF::kain_combine(), madness::ExchangeCommutator::kf_provider(), madness::trajectory< NDIM >::line_xyz(), madness::Localizer::localize_new(), logplot(), main(), main(), main(), make_bsh_operators(), madness::CCPotentials::make_constant_part_macrotask(), madness::Nemo::make_cphf_constant_term(), make_pts(), SurfaceMoleculeInteraction::make_surfcharge(), madness::SeparatedConvolution< double, 3 >::make_tt_representation(), madness::mask3(), mask3(), mask3(), mask3(), mask3d(), madness::MP2::multiply_with_0th_order_Hamiltonian(), madness::LRFunctorF12< T, NDIM, LDIM >::MacroTaskLRFInner::operator()(), refop::operator()(), refop::operator()(), madness::PeriodicBSHOp(), madness::PeriodicBSHOperator3D(), madness::PeriodicBSHOperatorPtr3D(), madness::PeriodicBSHOpPtr(), madness::PeriodicCoulombOp(), madness::PeriodicCoulombOpPtr(), madness::PeriodicHFExchangeOperator(), madness::PeriodicHFExchangeOperatorPtr(), SurfaceMoleculeInteraction::perturbed_molecular_pot(), madness::XCfunctional::plot(), plot(), madness::plot_line(), madness::plot_line(), madness::plot_line(), madness::plot_line(), madness::plot_line(), madness::plot_line(), madness::plot_line(), Calculation::plot_p(), madness::plot_plane(), madness::plot_plane(), madness::plot_plane(), Calculation::plot_z(), madness::PM_q(), madness::GFit< T, NDIM >::print_accuracy(), madness::DiagnosticMatrix< T, NDIM >::project_Gab(), madness::DiagnosticMatrix< T, NDIM >::project_Gab(), madness::GFit< T, NDIM >::prune_small_coefficients(), random_gaussian(), RandomGaussian(), realfunc0(), realfunc1(), realfunc2(), realvec0(), realvec1(), realvec2(), madness::Znemo::recompute_factors_and_potentials(), reconstruct_psi(), madness::DiagnosticMatrix< T, NDIM >::ref_Gab(), madness::DiagnosticMatrix< T, NDIM >::ref_GQab(), madness::SCF::rotate_subspace(), madness::SCF::rotate_subspace(), run(), run_correctness_cell(), madness::Exchange< double, 3 >::set_bra_and_ket(), madness::FunctionDefaults< 1 >::set_cubic_cell(), madness::FunctionDefaults< 1 >::set_length_scale(), madness::FunctionFunctorInterface< double, 3 >::set_length_scale(), madness::Nemo::set_protocol(), madness::Random::setstate(), madness::GFit< T, NDIM >::slater_fit(), madness::SlaterF12Operator(), madness::SlaterF12OperatorPtr(), madness::SlaterF12OperatorPtr_ND(), madness::SlaterF12sqOperator(), madness::SlaterF12sqOperatorPtr(), madness::GFit< T, NDIM >::SlaterFit(), madness::SlaterOperator(), madness::SlaterOperatorPtr(), madness::SlaterOperatorPtr_ND(), solve(), madness::MP2::solve_coupled_equations(), madness::Nemo::solve_cphf(), madness::MP2::solve_residual_equations(), madness::CCPotentials::test(), test(), test_apply_push_1d(), test_combine_generic(), test_combined_operators(), test_coulomb_gfit_discard_large_alpha(), test_diagnose_GQKffK(), test_diagnose_GQUe(), test_diagnose_GUe(), test_diagnose_Ue(), test_exchange(), test_gconv(), test_gence2(), test_generic_exchange(), test_GQUe(), test_GUe(), test_inv_rsq_gfit(), test_invrsq_operator(), test_modified(), test_op(), test_per(), test_recursive_application(), test_U_el(), test_weighted_bra_exchange(), madness::FunctionImpl< T, NDIM >::tnorm(), madness::FunctionImpl< T, NDIM >::tnorm(), madness::FunctionImpl< T, NDIM >::tnorm(), madness::FunctionImpl< T, LDIM >::tnorm(), madness::FunctionImpl< T, LDIM >::tnorm(), madness::FunctionImpl< T, LDIM >::tnorm(), and madness::GFit< T, NDIM >::truncate_mixed_expansion().

◆ mask

◆ nucexpt

double nucexpt =3.0/nucrad
static

Referenced by main(), and potn().

◆ nucrad

double nucrad =1e-8
static

Referenced by main().

◆ shift

◆ use_ble

bool use_ble =false
static

Referenced by main(), and make_sp().

◆ use_bsp

bool use_bsp =false
static

Referenced by main(), and make_sp().