LIBINT  2.1.0-stable
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
libint2::FmEval_Taylor< Real, INTERPOLATION_ORDER > Class Template Reference

Computes the Boys function, $ F_m (T) = ^1 u^{2m} (-T u^2) \, { d}u $, using Taylor interpolation of up to 8-th order. More...

#include <boys.h>

Public Member Functions

 FmEval_Taylor (unsigned int mmax, Real precision)
 Constructs the object to be able to compute Boys funcion for m in [0,mmax], with relative precision.
 
int max_m () const
 
Real precision () const
 
void eval (Real *Fm, Real T, int mmax) const
 computes Boys function values with m index in range [0,mmax] More...
 

Static Public Member Functions

static const std::shared_ptr< FmEval_Taylor > & instance (unsigned int mmax, Real precision)
 Singleton interface allows to manage the lone instance; adjusts max m and precision values as needed in thread-safe fashion.
 

Public Attributes

const double soft_zero_
 

Static Public Attributes

static const int max_interp_order = 8
 
static const bool INTERPOLATION_AND_RECURSION = false
 

Detailed Description

template<typename Real = double, int INTERPOLATION_ORDER = 7>
class libint2::FmEval_Taylor< Real, INTERPOLATION_ORDER >

Computes the Boys function, $ F_m (T) = ^1 u^{2m} (-T u^2) \, { d}u $, using Taylor interpolation of up to 8-th order.

Template Parameters
Realthe type to use for all floating-point computations. Must support std::exp, std::pow, std::fabs, std::max, and std::floor.
INTERPOLATION_ORDERthe interpolation order. The higher the order the less memory this object will need, but the computational cost will increase (usually very slightly)

Member Function Documentation

template<typename Real = double, int INTERPOLATION_ORDER = 7>
void libint2::FmEval_Taylor< Real, INTERPOLATION_ORDER >::eval ( Real *  Fm,
Real  T,
int  mmax 
) const
inline

computes Boys function values with m index in range [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; it must be <= the value returned by max_m() (this is not checked)

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

template<typename Real = double, int INTERPOLATION_ORDER = 7>
int libint2::FmEval_Taylor< Real, INTERPOLATION_ORDER >::max_m ( ) const
inline
Returns
the maximum value of m for which this object can compute the Boys function
template<typename Real = double, int INTERPOLATION_ORDER = 7>
Real libint2::FmEval_Taylor< Real, INTERPOLATION_ORDER >::precision ( ) const
inline
Returns
the precision with which this object can compute the Boys function

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