Psi4
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
psi::TwoBodyAOInt Class Referenceabstract

#include <twobody.h>

Inheritance diagram for psi::TwoBodyAOInt:
psi::SimintTwoElectronInt psi::TwoElectronInt psi::SimintERI psi::ErfComplementERI psi::ErfERI psi::ERI psi::F12 psi::F12DoubleCommutator psi::F12G12 psi::F12Scaled psi::F12Squared

Public Member Functions

virtual ~TwoBodyAOInt ()
 
std::shared_ptr< BasisSetbasis ()
 Basis set on center one. More...
 
std::shared_ptr< BasisSetbasis1 ()
 Basis set on center one. More...
 
std::shared_ptr< BasisSetbasis2 ()
 Basis set on center two. More...
 
std::shared_ptr< BasisSetbasis3 ()
 Basis set on center three. More...
 
std::shared_ptr< BasisSetbasis4 ()
 Basis set on center four. More...
 
void set_force_cartesian (bool t_f)
 Sets whether we're forcing this object to always generate Cartesian integrals. More...
 
int deriv () const
 Returns the derivative level this object is setup for. More...
 
const double * buffer () const
 Buffer where the integrals are placed. More...
 
const IntegralFactoryintegral () const
 Returns the integral factory used to create this object. More...
 
virtual size_t compute_shell (const AOShellCombinationsIterator &)=0
 Compute ERIs between 4 shells. Result is stored in buffer. More...
 
virtual size_t compute_shell (int, int, int, int)=0
 Compute the integrals. More...
 
std::vector< ShellPairBlockget_blocks12 (void) const
 Get optimal blocks of shell pairs for centers 1 & 2. More...
 
std::vector< ShellPairBlockget_blocks34 (void) const
 Get optimal blocks of shell pairs for centers 3 & 4. More...
 
virtual void compute_shell_blocks (int shellpair12, int shellpair34, int npair12=-1, int npair34=-1)
 
virtual int shell_is_zero (int, int, int, int)
 Is the shell zero? More...
 
virtual size_t compute_shell_deriv1 (int, int, int, int)=0
 Compute the first derivatives. More...
 
virtual size_t compute_shell_deriv2 (int, int, int, int)=0
 Compute the second derivatives. More...
 
void normalize_am (std::shared_ptr< GaussianShell >, std::shared_ptr< GaussianShell >, std::shared_ptr< GaussianShell >, std::shared_ptr< GaussianShell >, int nchunk=1)
 Normalize Cartesian functions based on angular momentum. More...
 
virtual bool cloneable () const
 Return true if the clone member can be called. By default returns false. More...
 
virtual TwoBodyAOIntclone () const
 Returns a clone of this object. By default throws an exception. More...
 
void pure_transform (int, int, int, int, int nchunk, bool copy_to_source=true)
 Results go back to buffer_. More...
 

Protected Member Functions

void create_blocks (void)
 
void permute_target (double *s, double *t, int sh1, int sh2, int sh3, int sh4, bool p12, bool p34, bool p13p24)
 
void permute_1234_to_1243 (double *s, double *t, int nbf1, int nbf2, int nbf3, int nbf4)
 
void permute_1234_to_2134 (double *s, double *t, int nbf1, int nbf2, int nbf3, int nbf4)
 
void permute_1234_to_2143 (double *s, double *t, int nbf1, int nbf2, int nbf3, int nbf4)
 
void permute_1234_to_3412 (double *s, double *t, int nbf1, int nbf2, int nbf3, int nbf4)
 
void permute_1234_to_4312 (double *s, double *t, int nbf1, int nbf2, int nbf3, int nbf4)
 
void permute_1234_to_3421 (double *s, double *t, int nbf1, int nbf2, int nbf3, int nbf4)
 
void permute_1234_to_4321 (double *s, double *t, int nbf1, int nbf2, int nbf3, int nbf4)
 
 TwoBodyAOInt (const IntegralFactory *intsfactory, int deriv=0)
 
 TwoBodyAOInt (const TwoBodyAOInt &rhs)
 

Protected Attributes

const IntegralFactoryintegral_
 
const std::shared_ptr< BasisSetoriginal_bs1_
 
const std::shared_ptr< BasisSetoriginal_bs2_
 
const std::shared_ptr< BasisSetoriginal_bs3_
 
const std::shared_ptr< BasisSetoriginal_bs4_
 
std::shared_ptr< BasisSetbs1_
 
std::shared_ptr< BasisSetbs2_
 
std::shared_ptr< BasisSetbs3_
 
std::shared_ptr< BasisSetbs4_
 
double * target_full_
 Buffer to hold the final integrals. More...
 
double * target_
 Where to put the next integrals (should be part of target_full_) More...
 
int curr_buff_size_
 Number of integrals in the current buffer. More...
 
double * tformbuf_
 Buffer to hold the transformation intermediates. More...
 
double * source_full_
 Buffer to hold the initially computed integrals. More...
 
double * source_
 Where to put the next temporary integrals (should be part of source_full_) More...
 
int max_unique_quartets_
 Maximum number of unique quartets needed to compute a set of SO's. More...
 
int natom_
 Number of atoms. More...
 
int deriv_
 Derivative level. More...
 
bool force_cartesian_
 Whether to force integrals to be generated in the Cartesian (AO) basis;. More...
 
PermutedOrder permuted_order_
 How the shells were reordered for libint. More...
 
std::vector< ShellPairBlockblocks12_
 The blocking scheme used for the integrals. More...
 
std::vector< ShellPairBlockblocks34_
 

Constructor & Destructor Documentation

TwoBodyAOInt::TwoBodyAOInt ( const IntegralFactory intsfactory,
int  deriv = 0 
)
protected
TwoBodyAOInt::TwoBodyAOInt ( const TwoBodyAOInt rhs)
protected
TwoBodyAOInt::~TwoBodyAOInt ( )
virtual

Member Function Documentation

std::shared_ptr< BasisSet > TwoBodyAOInt::basis ( )

Basis set on center one.

std::shared_ptr< BasisSet > TwoBodyAOInt::basis1 ( )

Basis set on center one.

std::shared_ptr< BasisSet > TwoBodyAOInt::basis2 ( )

Basis set on center two.

std::shared_ptr< BasisSet > TwoBodyAOInt::basis3 ( )

Basis set on center three.

std::shared_ptr< BasisSet > TwoBodyAOInt::basis4 ( )

Basis set on center four.

const double* psi::TwoBodyAOInt::buffer ( ) const
inline

Buffer where the integrals are placed.

TwoBodyAOInt * TwoBodyAOInt::clone ( void  ) const
virtual

Returns a clone of this object. By default throws an exception.

Reimplemented in psi::SimintERI.

bool TwoBodyAOInt::cloneable ( ) const
virtual

Return true if the clone member can be called. By default returns false.

Reimplemented in psi::SimintERI.

virtual size_t psi::TwoBodyAOInt::compute_shell ( const AOShellCombinationsIterator )
pure virtual

Compute ERIs between 4 shells. Result is stored in buffer.

Implemented in psi::TwoElectronInt, and psi::SimintTwoElectronInt.

virtual size_t psi::TwoBodyAOInt::compute_shell ( int  ,
int  ,
int  ,
int   
)
pure virtual

Compute the integrals.

Implemented in psi::TwoElectronInt, and psi::SimintTwoElectronInt.

void TwoBodyAOInt::compute_shell_blocks ( int  shellpair12,
int  shellpair34,
int  npair12 = -1,
int  npair34 = -1 
)
virtual

Compute integrals for two blocks

The indices shellpair12 and shellpair34 refer to the indices in the vectors returned by get_blocks12() and get_blocks34(), respectively.

The parameters npair12 and npair34 refer to how many of the shell pairs of centers 1 & 2 and 3 & 4, respectively, to actually calculate. This can be used to compute only triangular parts, for example. A value of -1 means to calculate all that are part of the shell pair batch.

Reimplemented in psi::SimintTwoElectronInt.

virtual size_t psi::TwoBodyAOInt::compute_shell_deriv1 ( int  ,
int  ,
int  ,
int   
)
pure virtual

Compute the first derivatives.

Implemented in psi::TwoElectronInt, and psi::SimintTwoElectronInt.

virtual size_t psi::TwoBodyAOInt::compute_shell_deriv2 ( int  ,
int  ,
int  ,
int   
)
pure virtual

Compute the second derivatives.

Implemented in psi::TwoElectronInt, and psi::SimintTwoElectronInt.

void TwoBodyAOInt::create_blocks ( void  )
protected

Create the optimal blocks of shell pairs

Default implementation

int psi::TwoBodyAOInt::deriv ( ) const
inline

Returns the derivative level this object is setup for.

std::vector< ShellPairBlock > TwoBodyAOInt::get_blocks12 ( void  ) const

Get optimal blocks of shell pairs for centers 1 & 2.

std::vector< ShellPairBlock > TwoBodyAOInt::get_blocks34 ( void  ) const

Get optimal blocks of shell pairs for centers 3 & 4.

const IntegralFactory* psi::TwoBodyAOInt::integral ( ) const
inline

Returns the integral factory used to create this object.

void TwoBodyAOInt::normalize_am ( std::shared_ptr< GaussianShell s1,
std::shared_ptr< GaussianShell s2,
std::shared_ptr< GaussianShell s3,
std::shared_ptr< GaussianShell s4,
int  nchunk = 1 
)

Normalize Cartesian functions based on angular momentum.

void TwoBodyAOInt::permute_1234_to_1243 ( double *  s,
double *  t,
int  nbf1,
int  nbf2,
int  nbf3,
int  nbf4 
)
protected
void TwoBodyAOInt::permute_1234_to_2134 ( double *  s,
double *  t,
int  nbf1,
int  nbf2,
int  nbf3,
int  nbf4 
)
protected
void TwoBodyAOInt::permute_1234_to_2143 ( double *  s,
double *  t,
int  nbf1,
int  nbf2,
int  nbf3,
int  nbf4 
)
protected
void TwoBodyAOInt::permute_1234_to_3412 ( double *  s,
double *  t,
int  nbf1,
int  nbf2,
int  nbf3,
int  nbf4 
)
protected
void TwoBodyAOInt::permute_1234_to_3421 ( double *  s,
double *  t,
int  nbf1,
int  nbf2,
int  nbf3,
int  nbf4 
)
protected
void TwoBodyAOInt::permute_1234_to_4312 ( double *  s,
double *  t,
int  nbf1,
int  nbf2,
int  nbf3,
int  nbf4 
)
protected
void TwoBodyAOInt::permute_1234_to_4321 ( double *  s,
double *  t,
int  nbf1,
int  nbf2,
int  nbf3,
int  nbf4 
)
protected
void TwoBodyAOInt::permute_target ( double *  s,
double *  t,
int  sh1,
int  sh2,
int  sh3,
int  sh4,
bool  p12,
bool  p34,
bool  p13p24 
)
protected
void TwoBodyAOInt::pure_transform ( int  sh1,
int  sh2,
int  sh3,
int  sh4,
int  nchunk,
bool  copy_to_source = true 
)

Results go back to buffer_.

void psi::TwoBodyAOInt::set_force_cartesian ( bool  t_f)
inline

Sets whether we're forcing this object to always generate Cartesian integrals.

virtual int psi::TwoBodyAOInt::shell_is_zero ( int  ,
int  ,
int  ,
int   
)
inlinevirtual

Is the shell zero?

Member Data Documentation

std::vector<ShellPairBlock> psi::TwoBodyAOInt::blocks12_
protected

The blocking scheme used for the integrals.

std::vector<ShellPairBlock> psi::TwoBodyAOInt::blocks34_
protected
std::shared_ptr<BasisSet> psi::TwoBodyAOInt::bs1_
protected
std::shared_ptr<BasisSet> psi::TwoBodyAOInt::bs2_
protected
std::shared_ptr<BasisSet> psi::TwoBodyAOInt::bs3_
protected
std::shared_ptr<BasisSet> psi::TwoBodyAOInt::bs4_
protected
int psi::TwoBodyAOInt::curr_buff_size_
protected

Number of integrals in the current buffer.

int psi::TwoBodyAOInt::deriv_
protected

Derivative level.

bool psi::TwoBodyAOInt::force_cartesian_
protected

Whether to force integrals to be generated in the Cartesian (AO) basis;.

const IntegralFactory* psi::TwoBodyAOInt::integral_
protected
int psi::TwoBodyAOInt::max_unique_quartets_
protected

Maximum number of unique quartets needed to compute a set of SO's.

int psi::TwoBodyAOInt::natom_
protected

Number of atoms.

const std::shared_ptr<BasisSet> psi::TwoBodyAOInt::original_bs1_
protected
const std::shared_ptr<BasisSet> psi::TwoBodyAOInt::original_bs2_
protected
const std::shared_ptr<BasisSet> psi::TwoBodyAOInt::original_bs3_
protected
const std::shared_ptr<BasisSet> psi::TwoBodyAOInt::original_bs4_
protected
PermutedOrder psi::TwoBodyAOInt::permuted_order_
protected

How the shells were reordered for libint.

double* psi::TwoBodyAOInt::source_
protected

Where to put the next temporary integrals (should be part of source_full_)

double* psi::TwoBodyAOInt::source_full_
protected

Buffer to hold the initially computed integrals.

double* psi::TwoBodyAOInt::target_
protected

Where to put the next integrals (should be part of target_full_)

double* psi::TwoBodyAOInt::target_full_
protected

Buffer to hold the final integrals.

double* psi::TwoBodyAOInt::tformbuf_
protected

Buffer to hold the transformation intermediates.


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