28#ifndef _chemistry_qc_basis_tbint_h
29#define _chemistry_qc_basis_tbint_h
31#include <util/ref/ref.h>
32#include <util/group/message.h>
33#include <util/container/stdarray.h>
34#include <chemistry/qc/basis/gaussbas.h>
35#include <chemistry/qc/basis/dercent.h>
36#include <chemistry/qc/basis/operator.h>
37#include <chemistry/qc/basis/obint.h>
64 double *log2_to_double_;
151 std::pair<std::map<TwoBodyOper::type,const double*>,std::array<unsigned long,4> >
194 double *log2_to_double_;
308 double *log2_to_double_;
444 virtual void init(
const double *,
450 virtual void start();
453 int ready()
const {
return icur < iend; }
455 int i()
const {
return i_; }
456 int j()
const {
return j_; }
457 int k()
const {
return k_; }
458 int l()
const {
return l_; }
460 int nint()
const {
return iend*jend*kend*lend; }
462 double val()
const {
return buf[index]*scale_; }
483 virtual void start();
486 int ready()
const {
return (icur < iend); }
488 int ishell()
const {
return icur; }
489 int jshell()
const {
return jcur; }
490 int kshell()
const {
return kcur; }
491 int lshell()
const {
return lcur; }
493 virtual double scale()
const;
525 virtual void start(
int ist=0,
int jst=0,
int ien=0,
int jen=0);
528 int ready()
const {
return (icur < iend); }
530 int ishell()
const {
return icur; }
531 int jshell()
const {
return jcur; }
533 int ijshell()
const {
return ij; }
535 int redundant()
const {
return redund; }
536 void set_redundant(
int i) { redund=i; }
538 virtual double scale()
const;
544 virtual bool cloneable()
const;
557 double *log2_to_double_;
674 double *log2_to_double_;
750 double *log2_to_double_;
842 double *log2_to_double_;
848 std::vector< Ref<GaussianBasisSet> > bs_;
886 std::pair<std::map<TwoBodyOper::type,const double*>,std::array<unsigned long,4> >
DerivCenters keeps track the centers that derivatives are taken with respect to.
Definition dercent.h:42
The Integral abstract class acts as a factory to provide objects that compute one and two electron in...
Definition integral.h:111
The base class for all reference counted objects.
Definition ref.h:192
A template class that maintains references counts.
Definition ref.h:361
Objects of class SCElementOp are used to perform operations on the elements of matrices.
Definition elemop.h:94
The SCMatrixBlockIter class is used to described iterates that loop through the elements in a block.
Definition blkiter.h:46
The SCMatrixLTriBlock describes a triangular piece of a matrix.
Definition block.h:253
The SCMatrixLTriSubBlock describes a triangular subblock of a matrix.
Definition block.h:288
The SCMatrixRectBlock describes a rectangular piece of a matrix.
Definition block.h:183
The SCMatrixRectSubBlock describes a rectangular piece of a matrix.
Definition block.h:219
This is an abstract base type for classes that compute geometric derivatives of the integrals involvi...
Definition tbint.h:554
int nshell2() const
Return the number of shells on center two.
int nbasis() const
Return the number of basis functions on center one.
int nshell3() const
Return the number of shells on center three.
int nshell1() const
Return the number of shells on center one.
virtual int log2_shell_bound(int=-1, int=-1, int=-1, int=-1)=0
Return log base 2 of the maximum magnitude of any integral in a shell block.
Integral * integral() const
Return the integral factory that was used to create this object.
Definition tbint.h:654
Ref< GaussianBasisSet > basis1() const
Return the basis set on center one.
double shell_bound(int=-1, int=-1, int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block.
int nshell4() const
Return the number of shells on center four.
int nbasis3() const
Return the number of basis functions on center three.
int nbasis2() const
Return the number of basis functions on center two.
virtual void compute_shell(int sh0, int sh1, int sh2, int sh3, DerivCenters &dercenters)=0
Given for shell indices, this will cause the derivative integral shell set to be computed.
Ref< GaussianBasisSet > basis() const
Return the basis set on center one.
Ref< GaussianBasisSet > basis3() const
Return the basis set on center three.
int nbasis1() const
Return the number of basis functions on center one.
virtual bool cloneable() const
Return true if the clone member can be called.
const double * buffer() const
The computed shell-set of integrals will be put in the buffer returned by this member.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
virtual Ref< TwoBodyDerivInt > clone()
Returns a clone of this.
Ref< GaussianBasisSet > basis4() const
Return the basis set on center four.
int nbasis4() const
Return the number of basis functions on center four.
int nshell() const
Return the number of shells on center one.
This is an abstract base type for classes that compute integrals involving two electrons and 2 functi...
Definition tbint.h:839
virtual const double * buffer(TwoBodyOper::type type=TwoBodyOper::eri) const
The computed shell integrals will be put in the buffer returned by this member.
virtual const Ref< TwoBodyOperSetDescr > & descr() const =0
return the operator set descriptor
virtual bool cloneable() const
Return true if the clone member can be called.
virtual void set_redundant(int i)
See redundant().
Definition tbint.h:903
virtual void compute_shell(int, int, int, int)=0
Given four shell indices, integrals will be computed and placed in the buffer.
std::pair< std::map< TwoBodyOper::type, const double * >, std::array< unsigned long, 4 > > compute_shell_arrays(int, int, int, int)
Given four shell indices, supported two body integral types are computed and returned.
virtual void set_integral_storage(size_t storage)
This storage is used to cache computed integrals.
Integral * integral() const
Return the integral factory that was used to create this object.
Definition tbint.h:917
virtual TwoBodyOperSet::type type() const =0
Returns the type of the operator set that this object computes.
virtual Ref< TwoBodyIntEval > clone()
Returns a clone of this.
virtual int log2_shell_bound(int=-1, int=-1, int=-1, int=-1)=0
Return log base 2 of the maximum magnitude of any integral in a shell block obtained from compute_she...
double shell_bound(int=-1, int=-1, int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block obtained from compute_shell.
virtual int redundant() const
If redundant is true, then keep redundant integrals in the buffer.
Definition tbint.h:901
Ref< GaussianBasisSet > basis(size_t C) const
Return the basis set on center C.
This is an abstract base type for classes that compute integrals involving two electrons and 2 functi...
Definition tbint.h:61
virtual void set_integral_storage(size_t storage)
This storage is used to cache computed integrals.
int nbasis2() const
Return the number of basis functions on center two.
virtual int redundant() const
If redundant is true, then keep redundant integrals in the buffer.
Definition tbint.h:166
virtual int log2_shell_bound(int=-1, int=-1, int=-1, int=-1)=0
Return log base 2 of the maximum magnitude of any integral in a shell block obtained from compute_she...
std::pair< std::map< TwoBodyOper::type, const double * >, std::array< unsigned long, 4 > > compute_shell_arrays(int, int, int, int)
Given four shell indices, supported two body integral types are computed and returned.
int nbasis3() const
Return the number of basis functions on center three.
virtual void set_redundant(int i)
See redundant().
Definition tbint.h:168
virtual const Ref< TwoBodyOperSetDescr > & descr() const =0
return the operator set descriptor
virtual bool cloneable() const
Return true if the clone member can be called.
int nbasis1() const
Return the number of basis functions on center one.
int nshell2() const
Return the number of shells on center two.
int nshell3() const
Return the number of shells on center three.
virtual Ref< TwoBodyInt > clone()
Returns a clone of this.
int nbasis4() const
Return the number of basis functions on center four.
int nshell1() const
Return the number of shells on center one.
virtual void compute_shell(int, int, int, int)=0
Given four shell indices, integrals will be computed and placed in the buffer.
int nshell() const
Return the number of shells on center one.
double shell_bound(int=-1, int=-1, int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block obtained from compute_shell.
int nbasis() const
Return the number of basis functions on center one.
virtual const double * buffer(TwoBodyOper::type type=TwoBodyOper::eri) const
The computed shell integrals will be put in the buffer returned by this member.
Ref< GaussianBasisSet > basis4() const
Return the basis set on center four.
int nshell4() const
Return the number of shells on center four.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
virtual TwoBodyOperSet::type type() const =0
Returns the type of the operator set that this object computes.
Ref< GaussianBasisSet > basis1() const
Return the basis set on center one.
Integral * integral() const
Return the integral factory that was used to create this object.
Definition tbint.h:182
Ref< GaussianBasisSet > basis(size_t c=0) const
Return the basis set on center c.
Ref< GaussianBasisSet > basis3() const
Return the basis set on center three.
This is an abstract base type for classes that compute three centers integrals involving two electron...
Definition tbint.h:671
Ref< GaussianBasisSet > basis1() const
Return the basis set on center one.
int nbasis() const
Return the number of basis functions on center one.
int nbasis3() const
Return the number of basis functions on center three.
virtual int log2_shell_bound(int=-1, int=-1, int=-1)=0
Return log base 2 of the maximum magnitude of any integral in a shell block.
const double * buffer() const
The computed shell integrals will be put in the buffer returned by this member.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
int nbasis2() const
Return the number of basis functions on center two.
Ref< GaussianBasisSet > basis3() const
Return the basis set on center three.
int nshell() const
Return the number of shells on center one.
int nshell2() const
Return the number of shells on center two.
int nbasis1() const
Return the number of basis functions on center one.
double shell_bound(int=-1, int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block.
virtual void compute_shell(int, int, int, DerivCenters &)=0
Given for shell indices, this will cause the integral buffer to be filled in.
Ref< GaussianBasisSet > basis() const
Return the basis set on center one.
int nshell1() const
Return the number of shells on center one.
int nshell3() const
Return the number of shells on center three.
This is an abstract base type for classes that compute integrals involving two electrons in three Gau...
Definition tbint.h:191
virtual TwoBodyOperSet::type type() const =0
Returns the type of the operator set that this object computes.
Ref< GaussianBasisSet > basis1() const
Return the basis set on center one.
int redundant() const
If redundant is true, then keep redundant integrals in the buffer.
Definition tbint.h:279
int nshell() const
Return the number of shells on center one.
virtual bool cloneable() const
Return true if the clone member can be called.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
int nbasis3() const
Return the number of basis functions on center three.
virtual void compute_shell(int, int, int)=0
Given three shell indices, integrals will be computed and placed in the buffer.
virtual void set_integral_storage(size_t storage)
This storage is used to cache computed integrals.
Ref< GaussianBasisSet > basis3() const
Return the basis set on center three.
virtual const Ref< TwoBodyOperSetDescr > & descr() const =0
return the operator set descriptor
double shell_bound(int=-1, int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block obtained from compute_shell.
Ref< GaussianBasisSet > basis(size_t c=0) const
Return the basis set on center c.
int nshell1() const
Return the number of shells on center one.
int nbasis2() const
Return the number of basis functions on center two.
int nbasis() const
Return the number of basis functions on center one.
virtual const double * buffer(TwoBodyOper::type type=TwoBodyOper::eri) const
The computed shell integrals will be put in the buffer returned by this member.
virtual Ref< TwoBodyThreeCenterInt > clone()
Returns a clone of this.
virtual int log2_shell_bound(int=-1, int=-1, int=-1)=0
Return log base 2 of the maximum magnitude of any integral in a shell block obtained from compute_she...
Integral * integral() const
Return the integral factory that was used to create this object.
Definition tbint.h:295
int nshell3() const
Return the number of shells on center three.
int nbasis1() const
Return the number of basis functions on center one.
int nshell2() const
Return the number of shells on center two.
void set_redundant(int i)
See redundant().
Definition tbint.h:281
This is an abstract base type for classes that compute two centers integrals involving two electrons.
Definition tbint.h:747
int nbasis() const
Return the number of basis functions on center one.
Ref< GaussianBasisSet > basis1() const
Return the basis set on center one.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
virtual void compute_shell(int, int, DerivCenters &)=0
Given for shell indices, this will cause the integral buffer to be filled in.
Ref< GaussianBasisSet > basis() const
Return the basis set on center one.
int nbasis1() const
Return the number of basis functions on center one.
int nshell() const
Return the number of shells on center one.
int nshell1() const
Return the number of shells on center one.
int nshell2() const
Return the number of shells on center two.
virtual int log2_shell_bound(int=-1, int=-1)=0
Return log base 2 of the maximum magnitude of any integral in a shell block.
double shell_bound(int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block.
int nbasis2() const
Return the number of basis functions on center two.
const double * buffer() const
The computed shell integrals will be put in the buffer returned by this member.
The 2-body analog of OneBodyIntOp.
Definition tbint.h:813
void process_spec_rect(SCMatrixRectBlock *)
Matrices should call these members when the type of block is known.
void process(SCMatrixBlockIter &)
This is the fallback routine to process blocks and is called by process_spec members that are not ove...
Ref< SCElementOp > clone()
Returns a clone of this object.
bool cloneable() const
Returns true if this SCElementOp supports the clone() member.
int has_side_effects()
By default this returns nonzero.
This is an abstract base type for classes that compute integrals involving two electrons in two Gauss...
Definition tbint.h:305
int nshell2() const
Return the number of shells on center two.
virtual Ref< TwoBodyTwoCenterInt > clone()
Returns a clone of this.
Ref< GaussianBasisSet > basis(size_t c=0) const
Return the basis set on center c.
int nshell1() const
Return the number of shells on center one.
virtual TwoBodyOperSet::type type() const =0
Returns the type of the operator set that this object computes.
int nshell() const
Return the number of shells on center one.
int redundant() const
If redundant is true, then keep redundant integrals in the buffer.
Definition tbint.h:385
virtual void set_integral_storage(size_t storage)
This storage is used to cache computed integrals.
int nbasis1() const
Return the number of basis functions on center one.
virtual const Ref< TwoBodyOperSetDescr > & descr() const =0
return the operator set descriptor
virtual bool cloneable() const
Return true if the clone member can be called.
virtual int log2_shell_bound(int=-1, int=-1)=0
Return log base 2 of the maximum magnitude of any integral in a shell block obtained from compute_she...
int nbasis2() const
Return the number of basis functions on center two.
virtual const double * buffer(TwoBodyOper::type type=TwoBodyOper::eri) const
The computed shell integrals will be put in the buffer returned by this member.
void set_redundant(int i)
See redundant().
Definition tbint.h:387
Integral * integral() const
Return the integral factory that was used to create this object.
Definition tbint.h:401
double shell_bound(int=-1, int=-1)
Return the maximum magnitude (as a double) of any integral in a shell block obtained from compute_she...
int nbasis() const
Return the number of basis functions on center one.
Ref< GaussianBasisSet > basis1() const
Return the basis set on center one.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
virtual void compute_shell(int, int)=0
Given four shell indices, integrals will be computed and placed in the buffer.
Contains all MPQC code up to version 3.
Definition mpqcin.h:14
Describes types of integrals of 2-body operators.
Definition tbint.h:48
value
Definition nbint.h:49
@ _11_O_22
4-center integral in chemistry convention
Definition tbint.h:51
@ _1_O_2
2-center integral
Definition tbint.h:55
@ _11_O_2
3-center integral
Definition tbint.h:53
type
Definition operator.h:344
type
types of known two-body operators
Definition operator.h:318
@ eri
two-body Coulomb
Definition operator.h:319