occ
Loading...
Searching...
No Matches
occ::ints::EcpEvaluator Class Reference

#include <ecp.h>

Classes

struct  Settings
struct  Variant
 One variant of the integral: shells with angular momenta la' = la + dla, lb' = lb + dlb and primitive coefficients scaled by alpha^ka, beta^kb. More...

Public Member Functions

 EcpEvaluator (std::vector< EcpBasisShell > shells, std::vector< EcpCentre > centres, int max_deriv=2)
 EcpEvaluator (const occ::gto::AOBasis &basis, int max_deriv=2)
 ~EcpEvaluator ()
 EcpEvaluator (EcpEvaluator &&) noexcept
EcpEvaluator & operator= (EcpEvaluator &&) noexcept
const std::vector< EcpCentre > & centres () const
const std::vector< EcpBasisShell > & shells () const
int max_basis_l () const
int max_deriv () const
Settings & settings ()
const Settings & settings () const
std::shared_ptr< const CentreData > prepare (int centre, int deriv) const
std::shared_ptr< Workspace > make_workspace () const
bool significant (const CentreData &, int sa, int sb) const
 Can the pair (sa, sb) see the centre at all?
void compute (const CentreData &, int sa, int sb, Workspace &, Eigen::Ref< MatRM > out) const
 V block, row-major ncart(la) x ncart(lb).
void compute_first_derivatives (const CentreData &, int sa, int sb, bool want_a, bool want_b, Workspace &, std::array< MatRM, 6 > &out) const
 First derivatives with respect to the basis centres, C held fixed.
void compute_second_derivatives (const CentreData &, int sa, int sb, bool want_aa, bool want_ab, bool want_bb, Workspace &, std::array< MatRM, 6 > &aa, std::array< MatRM, 9 > &ab, std::array< MatRM, 6 > &bb) const
 Second derivatives with respect to the basis centres, C held fixed.
MatRM shell_pair (int centre, int sa, int sb) const
 Convenience wrappers (prepare + workspace per call): for tests.
std::array< MatRM, 9 > shell_pair_first_derivatives (int centre, int sa, int sb) const
 Layout [Ax,Ay,Az,Bx,By,Bz,Cx,Cy,Cz], with the C blocks from translational invariance.
void shell_pair_second_derivatives (int centre, int sa, int sb, std::array< MatRM, 6 > &aa, std::array< MatRM, 9 > &ab, std::array< MatRM, 6 > &bb) const
 AA (6), AB (9), BB (6).
void compute_variants (const CentreData &, int sa, int sb, const std::vector< Variant > &variants, Workspace &, std::vector< MatRM > &out) const

Constructor & Destructor Documentation

◆ EcpEvaluator() [1/3]

occ::ints::EcpEvaluator::EcpEvaluator ( std::vector< EcpBasisShell > shells,
std::vector< EcpCentre > centres,
int max_deriv = 2 )

◆ EcpEvaluator() [2/3]

occ::ints::EcpEvaluator::EcpEvaluator ( const occ::gto::AOBasis & basis,
int max_deriv = 2 )
explicit

◆ ~EcpEvaluator()

occ::ints::EcpEvaluator::~EcpEvaluator ( )

◆ EcpEvaluator() [3/3]

occ::ints::EcpEvaluator::EcpEvaluator ( EcpEvaluator && )
noexcept

Member Function Documentation

◆ centres()

const std::vector< EcpCentre > & occ::ints::EcpEvaluator::centres ( ) const
inline

◆ compute()

void occ::ints::EcpEvaluator::compute ( const CentreData & ,
int sa,
int sb,
Workspace & ,
Eigen::Ref< MatRM > out ) const

V block, row-major ncart(la) x ncart(lb).

◆ compute_first_derivatives()

void occ::ints::EcpEvaluator::compute_first_derivatives ( const CentreData & ,
int sa,
int sb,
bool want_a,
bool want_b,
Workspace & ,
std::array< MatRM, 6 > & out ) const

First derivatives with respect to the basis centres, C held fixed.

out[0..2] = d/dA_{x,y,z}, out[3..5] = d/dB_{x,y,z}; each block row-major ncart(la) x ncart(lb). Blocks not requested are left untouched.

◆ compute_second_derivatives()

void occ::ints::EcpEvaluator::compute_second_derivatives ( const CentreData & ,
int sa,
int sb,
bool want_aa,
bool want_ab,
bool want_bb,
Workspace & ,
std::array< MatRM, 6 > & aa,
std::array< MatRM, 9 > & ab,
std::array< MatRM, 6 > & bb ) const

Second derivatives with respect to the basis centres, C held fixed.

aa: xx,xy,xz,yy,yz,zz on A; ab: 3*i + j with i on A and j on B; bb: as aa on B. Blocks not requested are left untouched.

◆ compute_variants()

void occ::ints::EcpEvaluator::compute_variants ( const CentreData & ,
int sa,
int sb,
const std::vector< Variant > & variants,
Workspace & ,
std::vector< MatRM > & out ) const

◆ make_workspace()

std::shared_ptr< Workspace > occ::ints::EcpEvaluator::make_workspace ( ) const

◆ max_basis_l()

int occ::ints::EcpEvaluator::max_basis_l ( ) const
inline

◆ max_deriv()

int occ::ints::EcpEvaluator::max_deriv ( ) const
inline

◆ operator=()

EcpEvaluator & occ::ints::EcpEvaluator::operator= ( EcpEvaluator && )
noexcept

◆ prepare()

std::shared_ptr< const CentreData > occ::ints::EcpEvaluator::prepare ( int centre,
int deriv ) const

◆ settings() [1/2]

Settings & occ::ints::EcpEvaluator::settings ( )
inline

◆ settings() [2/2]

const Settings & occ::ints::EcpEvaluator::settings ( ) const
inline

◆ shell_pair()

MatRM occ::ints::EcpEvaluator::shell_pair ( int centre,
int sa,
int sb ) const

Convenience wrappers (prepare + workspace per call): for tests.

◆ shell_pair_first_derivatives()

std::array< MatRM, 9 > occ::ints::EcpEvaluator::shell_pair_first_derivatives ( int centre,
int sa,
int sb ) const

Layout [Ax,Ay,Az,Bx,By,Bz,Cx,Cy,Cz], with the C blocks from translational invariance.

◆ shell_pair_second_derivatives()

void occ::ints::EcpEvaluator::shell_pair_second_derivatives ( int centre,
int sa,
int sb,
std::array< MatRM, 6 > & aa,
std::array< MatRM, 9 > & ab,
std::array< MatRM, 6 > & bb ) const

AA (6), AB (9), BB (6).

◆ shells()

const std::vector< EcpBasisShell > & occ::ints::EcpEvaluator::shells ( ) const
inline

◆ significant()

bool occ::ints::EcpEvaluator::significant ( const CentreData & ,
int sa,
int sb ) const

Can the pair (sa, sb) see the centre at all?

Both shells must pass the bound on their reach to C computed in prepare().


The documentation for this class was generated from the following file:
  • /home/runner/work/occ/occ/include/occ/ints/ecp.h