MADNESS 0.10.1
|
base class to compute the wavelet coefficients for an isotropic 2e-operator More...
#include <function_interface.h>
Public Types | |
typedef GenTensor< T > | coeffT |
Public Types inherited from madness::FunctionFunctorInterface< T, NDIM > | |
typedef GenTensor< T > | coeffT |
typedef Key< NDIM > | keyT |
typedef T | value_type |
Public Member Functions | |
TwoElectronInterface (double lo, double eps, const BoundaryConditions< NDIM > &bc=FunctionDefaults< NDIM >::get_bc(), int kk=FunctionDefaults< NDIM >::get_k()) | |
constructor: cf the Coulomb kernel | |
coeffT | coeff (const Key< NDIM > &key) const |
return the coefficients of the function in 6D (x1,y1,z1, x2,y2,z2) | |
T | operator() (const Vector< double, NDIM > &x) const |
You should implement this to return f(x) | |
bool | provides_coeff () const |
does this functor directly provide sum coefficients? or only function values? | |
Public Member Functions inherited from madness::FunctionFunctorInterface< T, NDIM > | |
FunctionFunctorInterface () | |
virtual | ~FunctionFunctorInterface () |
virtual void | operator() (const Vector< double *, 1 > &xvals, T *fvals, int npts) const |
virtual void | operator() (const Vector< double *, 2 > &xvals, T *fvals, int npts) const |
virtual void | operator() (const Vector< double *, 3 > &xvals, T *fvals, int npts) const |
virtual void | operator() (const Vector< double *, 4 > &xvals, T *fvals, int npts) const |
virtual void | operator() (const Vector< double *, 5 > &xvals, T *fvals, int npts) const |
virtual void | operator() (const Vector< double *, 6 > &xvals, T *fvals, int npts) const |
virtual bool | screened (const Vector< double, NDIM > &c1, const Vector< double, NDIM > &c2) const |
Can we screen this function based on the bounding box information? | |
void | set_length_scale (double lo) |
adapt the special level to resolve the smallest length scale | |
virtual Level | special_level () |
Override this change level refinement for special points (default is 6) | |
virtual std::vector< Vector< double, NDIM > > | special_points () const |
Override this to return list of special points to be refined more deeply. | |
virtual bool | supports_vectorized () const |
Does the interface support a vectorized operator()? | |
virtual coeffT | values (const keyT &key, const Tensor< double > &tensor) const |
Protected Member Functions | |
virtual GFit< double, LDIM > | fit (const double eps) const =0 |
derived classes must implement this – cf GFit.h | |
void | initialize (const double eps) |
initialize the Gaussian fit; uses the virtual function fit() to fit | |
Tensor< double > | make_coeff (const Key< NDIM > &key) const |
make the coefficients from the 1d convolution | |
Tensor< double > | map_coeff (const Tensor< double > &c) const |
the dimensions are a bit confused (x1,x2, y1,y2, z1,z2) -> (x1,y1,z1, x2,y2,z2) | |
Protected Attributes | |
double | hi |
the largest length scale that needs to be represented | |
int | k |
the wavelet order | |
double | lo |
the smallest length scale that needs to be represented | |
std::vector< ConvolutionND< double, NDIM > > | ops |
storing the coefficients | |
int | rank |
the number of terms in the Gaussian quadrature | |
Static Protected Attributes | |
static constexpr std::size_t | LDIM =NDIM/2 |
Additional Inherited Members | |
Public Attributes inherited from madness::FunctionFunctorInterface< T, NDIM > | |
Level | special_level_ |
base class to compute the wavelet coefficients for an isotropic 2e-operator
all classes that derive from this base class use the Gaussian fitting procedure that has been developed for the BSH operator. We simply reuse the wavelet coefficients that we get from there to avoid evaluating the functions themselves, since the quadrature of singular functions is imprecise and slow.
typedef GenTensor<T> madness::TwoElectronInterface< T, NDIM >::coeffT |
|
inline |
constructor: cf the Coulomb kernel
[in] | lo | the smallest length scale to be resolved |
[in] | eps | the accuracy threshold |
References madness::BC_PERIODIC, d, madness::FunctionDefaults< NDIM >::get_cell_width(), madness::TwoElectronInterface< T, NDIM >::hi, MADNESS_ASSERT, NDIM, and madness::Tensor< T >::normf().
|
inlinevirtual |
return the coefficients of the function in 6D (x1,y1,z1, x2,y2,z2)
Reimplemented from madness::FunctionFunctorInterface< T, NDIM >.
References c, madness::TwoElectronInterface< T, NDIM >::make_coeff(), madness::TwoElectronInterface< T, NDIM >::map_coeff(), and madness::TT_FULL.
Referenced by madness::TwoElectronInterface< T, NDIM >::initialize().
|
protectedpure virtual |
derived classes must implement this – cf GFit.h
Implemented in madness::GeneralTwoElectronInterface< T, NDIM >, madness::ElectronRepulsionInterface< T, NDIM >, madness::BSHFunctionInterface, madness::SlaterFunctionInterface, and madness::SlaterF12Interface.
Referenced by madness::TwoElectronInterface< T, NDIM >::initialize().
|
inlineprotected |
initialize the Gaussian fit; uses the virtual function fit() to fit
References c, madness::TwoElectronInterface< T, NDIM >::coeff(), d, madness::GenTensor< T >::dim(), madness::TwoElectronInterface< T, NDIM >::fit(), madness::FunctionDefaults< NDIM >::get_cell_width(), madness::TwoElectronInterface< T, NDIM >::k, madness::TwoElectronInterface< T, NDIM >::LDIM, mu, madness::TwoElectronInterface< T, NDIM >::ops, madness::constants::pi, and madness::TwoElectronInterface< T, NDIM >::rank.
Referenced by madness::GeneralTwoElectronInterface< T, NDIM >::GeneralTwoElectronInterface().
|
inlineprotected |
make the coefficients from the 1d convolution
References madness::_(), madness::inner(), madness::TwoElectronInterface< T, NDIM >::k, madness::Key< NDIM >::level(), MADNESS_EXCEPTION, mu, NDIM, madness::TwoElectronInterface< T, NDIM >::ops, madness::outer(), madness::r2(), madness::TwoElectronInterface< T, NDIM >::rank, and madness::Key< NDIM >::translation().
Referenced by madness::TwoElectronInterface< T, NDIM >::coeff().
|
inlineprotected |
the dimensions are a bit confused (x1,x2, y1,y2, z1,z2) -> (x1,y1,z1, x2,y2,z2)
References c, madness::copy(), madness::TwoElectronInterface< T, NDIM >::k, and NDIM.
Referenced by madness::TwoElectronInterface< T, NDIM >::coeff().
|
inlinevirtual |
You should implement this to return f(x)
Implements madness::FunctionFunctorInterface< T, NDIM >.
References MADNESS_ASSERT, madness::print(), and T().
|
inlinevirtual |
does this functor directly provide sum coefficients? or only function values?
Reimplemented from madness::FunctionFunctorInterface< T, NDIM >.
|
protected |
the largest length scale that needs to be represented
Referenced by madness::GeneralTwoElectronInterface< T, NDIM >::GeneralTwoElectronInterface(), and madness::TwoElectronInterface< T, NDIM >::TwoElectronInterface().
|
protected |
the wavelet order
Referenced by madness::TwoElectronInterface< T, NDIM >::initialize(), madness::TwoElectronInterface< T, NDIM >::make_coeff(), and madness::TwoElectronInterface< T, NDIM >::map_coeff().
|
staticconstexprprotected |
Referenced by madness::TwoElectronInterface< T, NDIM >::initialize().
|
protected |
the smallest length scale that needs to be represented
|
mutableprotected |
storing the coefficients
Referenced by madness::TwoElectronInterface< T, NDIM >::initialize(), and madness::TwoElectronInterface< T, NDIM >::make_coeff().
|
protected |
the number of terms in the Gaussian quadrature
Referenced by madness::TwoElectronInterface< T, NDIM >::initialize(), and madness::TwoElectronInterface< T, NDIM >::make_coeff().