LIBINT 2.9.0
Public Member Functions | Static Public Member Functions | List of all members
libint2::TennoGmEval< Real > Struct Template Reference

core integral for Yukawa and exponential interactions More...

#include <boys.h>

Public Member Functions

 TennoGmEval (unsigned int mmax, Real precision=maxabsprecision)
 
unsigned int max_m () const
 
Real precision () const
 
void eval_yukawa (Real *Gm, Real one_over_rho, Real T, size_t mmax, Real zeta) const
 
void eval_slater (Real *Gm, Real one_over_rho, Real T, size_t mmax, Real zeta) const
 

Static Public Member Functions

static std::shared_ptr< const TennoGmEvalinstance (int m_max, double=0)
 Singleton interface allows to manage the lone instance; adjusts max m values as needed in thread-safe fashion.
 

Detailed Description

template<typename Real = double>
struct libint2::TennoGmEval< Real >

core integral for Yukawa and exponential interactions

Evaluates core integral for Gaussian integrals over the Yukawa potential $
\exp(- \zeta r) / r $ and the exponential interaction $ \exp(- \zeta r)
$

Template Parameters
Realreal type
Warning
only Real = double is supported
guarantees absolute precision of only about 1e-14

Constructor & Destructor Documentation

◆ TennoGmEval()

template<typename Real = double>
libint2::TennoGmEval< Real >::TennoGmEval ( unsigned int mmax,
Real precision = maxabsprecision )
inline
Parameters
m_maxmaximum value of the Gm function index
precisionthe desired absolute precision (relative precision for most intervals will be below epsilon, but for large T/U values and high m relative precision is low); since evaluation is done primarily by interpolation, precision is not controlled dynamically, thus this should not be used.
Exceptions
std::invalid_argumentif m_max is greater than cheb_table_mmax (see tenno_cheb.h)
std::invalid_argumentif precision is smaller than maxabsprecision

References libint2::verbose(), and libint2::verbose_stream().

Member Function Documentation

◆ eval_slater()

template<typename Real = double>
void libint2::TennoGmEval< Real >::eval_slater ( Real * Gm,
Real one_over_rho,
Real T,
size_t mmax,
Real zeta ) const
inline
Parameters
[in]Gmpointer to array of mmax+1 Real elements, on return this contains the core integral for Slater-type geminal, $ \exp(-zeta r_{12}) $ , namely $ (G_{m-1}(T,U) - G_m(T,U)) \zeta / (2 \rho), m \in
              [0,m_\mathrm{max}] $ where $ G_{m}(T,U) = \int_0^1
              t^{2m} \exp(U(1-t^{-2}) - Tt^2) dt $, where $ T = \rho
              |\vec{P} - \vec{Q}|^2 $ and $ U = \zeta^2 / (4 \rho) $
[in]one_over_rho$ 1/\rho $
[in]T$ T $
[in]mmax$ m_\mathrm{max} $
[in]zeta$ \zeta $
Exceptions
std::invalid_argumentif $ \zeta^2/(4 \rho) $ exceeds Umax

◆ eval_yukawa()

template<typename Real = double>
void libint2::TennoGmEval< Real >::eval_yukawa ( Real * Gm,
Real one_over_rho,
Real T,
size_t mmax,
Real zeta ) const
inline
Parameters
[in]Gmpointer to array of mmax+1 Real elements, on return this contains the core integral for Yukawa interaction, $ \exp(-zeta r_{12})/r_{12} $ , namely $ G_{m}(T,U) = \int_0^1 t^{2m} \exp(U(1-t^{-2}) -
              Tt^2) dt, m \in [0,m_\mathrm{max}] $, where $ T = \rho
              |\vec{P} - \vec{Q}|^2 $ and $ U = \zeta^2 / (4 \rho) $
[in]one_over_rho$ 1/\rho $
[in]T$ T $
[in]mmax$ m_\mathrm{max} $
[in]zeta$ \zeta $
Exceptions
std::invalid_argumentif $ \zeta^2/(4 \rho) $ exceeds Umax

◆ precision()

template<typename Real = double>
Real libint2::TennoGmEval< Real >::precision ( ) const
inline
Returns
the precision with which this object can compute the result

The documentation for this struct was generated from the following file: