Psi4
Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
psi::SimintTwoElectronInt Class Reference

#include <siminteri.h>

Inheritance diagram for psi::SimintTwoElectronInt:
psi::TwoBodyAOInt psi::SimintERI

Public Types

typedef std::vector
< simint_multi_shellpair > 
ShellPairVec
 
typedef std::vector< simint_shell > ShellVec
 

Public Member Functions

 SimintTwoElectronInt (const IntegralFactory *integral, int deriv=0, bool use_shell_pairs=false)
 
virtual ~SimintTwoElectronInt ()
 
virtual size_t compute_shell (const AOShellCombinationsIterator &) override
 Compute ERIs between 4 shells. Result is stored in buffer. More...
 
virtual size_t compute_shell (int, int, int, int) override
 Compute the integrals. More...
 
virtual void compute_shell_blocks (int shellpair1, int shellpair2, int npair1=-1, int npair2=-1) override
 
virtual size_t compute_shell_deriv1 (int, int, int, int)
 Compute the first derivatives. More...
 
virtual size_t compute_shell_deriv2 (int, int, int, int)
 Compute the second derivatives. More...
 
- Public Member Functions inherited from psi::TwoBodyAOInt
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...
 
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 int shell_is_zero (int, int, int, int)
 Is the shell zero? 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

 SimintTwoElectronInt (const SimintTwoElectronInt &rhs)
 
- Protected Member Functions inherited from psi::TwoBodyAOInt
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)
 

Private Member Functions

void create_blocks (void)
 

Private Attributes

int maxam_
 
size_t batchsize_
 
size_t allwork_size_
 
bool bra_same_
 
bool ket_same_
 
bool braket_same_
 
double * allwork_
 
double * sharedwork_
 
std::shared_ptr< const ShellVecshells1_
 
std::shared_ptr< const ShellVecshells2_
 
std::shared_ptr< const ShellVecshells3_
 
std::shared_ptr< const ShellVecshells4_
 
std::shared_ptr< const
ShellPairVec
single_spairs_bra_
 
std::shared_ptr< const
ShellPairVec
single_spairs_ket_
 
std::shared_ptr< const
ShellPairVec
multi_spairs_bra_
 
std::shared_ptr< const
ShellPairVec
multi_spairs_ket_
 

Additional Inherited Members

- Protected Attributes inherited from psi::TwoBodyAOInt
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_
 

Member Typedef Documentation

typedef std::vector<simint_multi_shellpair> psi::SimintTwoElectronInt::ShellPairVec
typedef std::vector<simint_shell> psi::SimintTwoElectronInt::ShellVec

Constructor & Destructor Documentation

psi::SimintTwoElectronInt::SimintTwoElectronInt ( const IntegralFactory integral,
int  deriv = 0,
bool  use_shell_pairs = false 
)
psi::SimintTwoElectronInt::~SimintTwoElectronInt ( )
virtual
psi::SimintTwoElectronInt::SimintTwoElectronInt ( const SimintTwoElectronInt rhs)
protected

Member Function Documentation

size_t psi::SimintTwoElectronInt::compute_shell ( const AOShellCombinationsIterator )
overridevirtual

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

Implements psi::TwoBodyAOInt.

size_t psi::SimintTwoElectronInt::compute_shell ( int  ,
int  ,
int  ,
int   
)
overridevirtual

Compute the integrals.

Implements psi::TwoBodyAOInt.

void psi::SimintTwoElectronInt::compute_shell_blocks ( int  shellpair12,
int  shellpair34,
int  npair12 = -1,
int  npair34 = -1 
)
overridevirtual

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 from psi::TwoBodyAOInt.

size_t psi::SimintTwoElectronInt::compute_shell_deriv1 ( int  ,
int  ,
int  ,
int   
)
virtual

Compute the first derivatives.

Implements psi::TwoBodyAOInt.

size_t psi::SimintTwoElectronInt::compute_shell_deriv2 ( int  ,
int  ,
int  ,
int   
)
virtual

Compute the second derivatives.

Implements psi::TwoBodyAOInt.

void psi::SimintTwoElectronInt::create_blocks ( void  )
private

Member Data Documentation

double* psi::SimintTwoElectronInt::allwork_
private
size_t psi::SimintTwoElectronInt::allwork_size_
private
size_t psi::SimintTwoElectronInt::batchsize_
private
bool psi::SimintTwoElectronInt::bra_same_
private
bool psi::SimintTwoElectronInt::braket_same_
private
bool psi::SimintTwoElectronInt::ket_same_
private
int psi::SimintTwoElectronInt::maxam_
private
std::shared_ptr<const ShellPairVec> psi::SimintTwoElectronInt::multi_spairs_bra_
private
std::shared_ptr<const ShellPairVec> psi::SimintTwoElectronInt::multi_spairs_ket_
private
double* psi::SimintTwoElectronInt::sharedwork_
private
std::shared_ptr<const ShellVec> psi::SimintTwoElectronInt::shells1_
private
std::shared_ptr<const ShellVec> psi::SimintTwoElectronInt::shells2_
private
std::shared_ptr<const ShellVec> psi::SimintTwoElectronInt::shells3_
private
std::shared_ptr<const ShellVec> psi::SimintTwoElectronInt::shells4_
private
std::shared_ptr<const ShellPairVec> psi::SimintTwoElectronInt::single_spairs_bra_
private
std::shared_ptr<const ShellPairVec> psi::SimintTwoElectronInt::single_spairs_ket_
private

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