LIBINT  2.6.0
Public Member Functions | Static Public Member Functions | List of all members
libint2::FmEval_Chebyshev7< Real > Class Template Reference

Computes the Boys function, $ F_m (T) = \int_0^1 u^{2m} \exp(-T u^2) \, {\rm d}u $, using 7-th order Chebyshev interpolation. More...

#include <boys.h>

Public Member Functions

 FmEval_Chebyshev7 (int m_max, double precision=std::numeric_limits< double >::epsilon())
 
int max_m () const
 
void eval (Real *Fm, Real x, int m_max) const
 fills in Fm with computed Boys function values for m in [0,mmax] More...
 

Static Public Member Functions

static std::shared_ptr< const FmEval_Chebyshev7instance (int m_max, double=0.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>
class libint2::FmEval_Chebyshev7< Real >

Computes the Boys function, $ F_m (T) = \int_0^1 u^{2m} \exp(-T u^2) \, {\rm d}u $, using 7-th order Chebyshev interpolation.

Constructor & Destructor Documentation

◆ FmEval_Chebyshev7()

template<typename Real = double>
libint2::FmEval_Chebyshev7< Real >::FmEval_Chebyshev7 ( int  m_max,
double  precision = std::numeric_limits<double>::epsilon() 
)
inline
Parameters
m_maxmaximum value of the Boys function index; set to -1 to skip initialization
precisionthe desired relative precision
Exceptions
std::invalid_argumentif m_max is greater than cheb_table_mmax (see boys_cheb7.h)
std::invalid_argumentif precision is smaller than std::numeric_limits<double>::epsilon()

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

Member Function Documentation

◆ eval()

template<typename Real = double>
void libint2::FmEval_Chebyshev7< Real >::eval ( Real *  Fm,
Real  x,
int  m_max 
) const
inline

fills in Fm with computed Boys function values for m in [0,mmax]

Parameters
[out]Fmarray to be filled in with the Boys function values, must be at least mmax+1 elements long
[in]xthe Boys function argument
[in]mmaxthe maximum value of m for which Boys function will be computed; mmax must be <= the value returned by max_m

References libint2::simd::VectorSSEDouble::convert(), libint2::simd::VectorAVXDouble::convert(), and libint2::simd::VectorAVXDouble::load_aligned().

◆ max_m()

template<typename Real = double>
int libint2::FmEval_Chebyshev7< Real >::max_m ( ) const
inline
Returns
the maximum value of m for which the Boys function can be computed with this object

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