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>
48 struct TwoBodyIntShape {
64 double *log2_to_double_;
151 std::pair<std::map<TwoBodyOper::type,const double*>,std::array<unsigned long,4> >
162 double shell_bound(
int= -1,
int= -1,
int= -1,
int= -1);
194 double *log2_to_double_;
308 double *log2_to_double_;
407 class ShellQuartetIter {
442 virtual ~ShellQuartetIter();
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;
540 Ref<TwoBodyTwoCenterInt> two_body_int() {
return tbi; }
542 ShellPairIter& current_pair();
544 virtual bool cloneable()
const;
545 virtual Ref<TwoBodyTwoCenterIntIter> clone();
557 double *log2_to_double_;
632 const double *
buffer()
const;
642 virtual void compute_shell(
int sh0,
int sh1,
int sh2,
int sh3,
651 double shell_bound(
int= -1,
int= -1,
int= -1,
int= -1);
674 double *log2_to_double_;
726 const double *
buffer()
const;
750 double *log2_to_double_;
794 const double *
buffer()
const;
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> >
897 double shell_bound(
int= -1,
int= -1,
int= -1,
int= -1);
bool cloneable() const
Returns true if this SCElementOp supports the clone() member.
void process(SCMatrixBlockIter &)
This is the fallback routine to process blocks and is called by process_spec members that are not ove...
Ref< GaussianBasisSet > basis1() const
Return the basis set on center one.
int nshell1() const
Return the number of shells on center one.
int nshell1() const
Return the number of shells on center one.
int nbasis2() const
Return the number of basis functions on center two.
int redundant() const
If redundant is true, then keep redundant integrals in the buffer.
Definition: tbint.h:279
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.
virtual const Ref< TwoBodyOperSetDescr > & descr() const =0
return the operator set descriptor
int nshell2() const
Return the number of shells on center two.
This is an abstract base type for classes that compute integrals involving two electrons and 2 functi...
Definition: tbint.h:61
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...
Ref< SCElementOp > clone()
Returns a clone of this object.
virtual Ref< TwoBodyIntEval > clone()
Returns a clone of this.
Ref< GaussianBasisSet > basis1() const
Return the basis set on center one.
Ref< GaussianBasisSet > basis() const
Return the basis set on center one.
This is an abstract base type for classes that compute integrals involving two electrons in two Gauss...
Definition: tbint.h:305
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
int nshell3() const
Return the number of shells on center three.
Integral * integral() const
Return the integral factory that was used to create this object.
Definition: tbint.h:295
int nshell() const
Return the number of shells on center one.
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.
Ref< GaussianBasisSet > basis3() const
Return the basis set on center three.
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...
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.
int nshell() const
Return the number of shells on center one.
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.
int nshell4() const
Return the number of shells on center four.
type
Definition: operator.h:344
Ref< GaussianBasisSet > basis4() const
Return the basis set on center four.
The SCMatrixLTriBlock describes a triangular piece of a matrix.
Definition: block.h:253
A template class that maintains references counts.
Definition: ref.h:361
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.
Integral * integral() const
Return the integral factory that was used to create this object.
Definition: tbint.h:917
int nbasis3() const
Return the number of basis functions on center three.
value
Definition: nbint.h:49
int nbasis4() const
Return the number of basis functions on center four.
The SCMatrixRectBlock describes a rectangular piece of a matrix.
Definition: block.h:183
virtual void compute_shell(int, int, int)=0
Given three shell indices, integrals will be computed and placed in the buffer.
int nshell4() const
Return the number of shells on center four.
virtual bool cloneable() const
Return true if the clone member can be called.
virtual void set_integral_storage(size_t storage)
This storage is used to cache computed integrals.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
int nshell() const
Return the number of shells on center one.
virtual bool cloneable() const
Return true if the clone member can be called.
int nshell3() const
Return the number of shells on center three.
int nbasis2() const
Return the number of basis functions on center two.
int nbasis1() const
Return the number of basis functions on center one.
The SCMatrixLTriSubBlock describes a triangular subblock of a matrix.
Definition: block.h:288
virtual TwoBodyOperSet::type type() const =0
Returns the type of the operator set that this object computes.
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 > basis1() const
Return the basis set on center one.
virtual bool cloneable() const
Return true if the clone member can be called.
int nbasis() const
Return the number of basis functions on center one.
Integral * integral() const
Return the integral factory that was used to create this object.
Definition: tbint.h:182
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 > basis1() const
Return the basis set on center one.
int nshell1() const
Return the number of shells on center one.
int nbasis3() const
Return the number of basis functions on center three.
virtual TwoBodyOperSet::type type() const =0
Returns the type of the operator set that this object computes.
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 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...
virtual void compute_shell(int, int, int, int)=0
Given four shell indices, integrals will be computed and placed in the buffer.
Ref< GaussianBasisSet > basis4() const
Return the basis set on center four.
virtual TwoBodyOperSet::type type() const =0
Returns the type of the operator set that this object computes.
virtual void set_redundant(int i)
See redundant().
Definition: tbint.h:903
This is an abstract base type for classes that compute two centers integrals involving two electrons.
Definition: tbint.h:747
Objects of class SCElementOp are used to perform operations on the elements of matrices.
Definition: elemop.h:94
int nbasis1() const
Return the number of basis functions on center one.
virtual void compute_shell(int, int, int, DerivCenters &)=0
Given for shell indices, this will cause the integral buffer to be filled in.
int nbasis2() const
Return the number of basis functions on center two.
Ref< GaussianBasisSet > basis(size_t C) const
Return the basis set on center C.
const double * buffer() const
The computed shell integrals will be put in the buffer returned by this member.
Ref< GaussianBasisSet > basis3() const
Return the basis set on center three.
int nshell2() const
Return the number of shells on center two.
double shell_bound(int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block.
virtual void set_integral_storage(size_t storage)
This storage is used to cache computed integrals.
3-center integral
Definition: tbint.h:53
4-center integral in chemistry convention
Definition: tbint.h:51
virtual void set_integral_storage(size_t storage)
This storage is used to cache computed integrals.
virtual int redundant() const
If redundant is true, then keep redundant integrals in the buffer.
Definition: tbint.h:166
int nbasis1() const
Return the number of basis functions on center one.
int nbasis() const
Return the number of basis functions on center one.
This is an abstract base type for classes that compute geometric derivatives of the integrals involvi...
Definition: tbint.h:554
double shell_bound(int=-1, int=-1, int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block.
int has_side_effects()
By default this returns nonzero.
virtual const Ref< TwoBodyOperSetDescr > & descr() const =0
return the operator set descriptor
virtual void set_redundant(int i)
See redundant().
Definition: tbint.h:168
void process_spec_rect(SCMatrixRectBlock *)
Matrices should call these members when the type of block is known.
virtual Ref< TwoBodyDerivInt > clone()
Returns a clone of this.
Ref< GaussianBasisSet > basis() const
Return the basis set on center one.
const double * buffer() const
The computed shell-set of integrals will be put in the buffer returned by this member.
Integral * integral() const
Return the integral factory that was used to create this object.
Definition: tbint.h:654
The 2-body analog of OneBodyIntOp.
Definition: nbint.h:288
The Integral abstract class acts as a factory to provide objects that compute one and two electron in...
Definition: integral.h:111
int nbasis1() 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 > basis3() const
Return the basis set on center three.
const double * buffer() const
The computed shell integrals will be put in the buffer returned by this member.
double shell_bound(int=-1, int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block.
virtual const double * buffer(TwoBodyOper::type type=TwoBodyOper::eri) const
The computed shell integrals will be put in the buffer returned by this member.
int nshell2() const
Return the number of shells on center two.
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.
int nbasis() const
Return the number of basis functions on center one.
two-body Coulomb
Definition: operator.h:319
The SCMatrixBlockIter class is used to described iterates that loop through the elements in a block.
Definition: blkiter.h:46
int nshell1() const
Return the number of shells on center one.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
void set_redundant(int i)
See redundant().
Definition: tbint.h:387
virtual const Ref< TwoBodyOperSetDescr > & descr() const =0
return the operator set descriptor
This is an abstract base type for classes that compute integrals involving two electrons in three Gau...
Definition: tbint.h:191
int nshell2() const
Return the number of shells on center two.
int nshell2() const
Return the number of shells on center two.
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 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...
virtual void compute_shell(int, int, int, int)=0
Given four shell indices, integrals will be computed and placed in the buffer.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
virtual int redundant() const
If redundant is true, then keep redundant integrals in the buffer.
Definition: tbint.h:901
int nbasis3() const
Return the number of basis functions on center three.
Ref< GaussianBasisSet > basis3() const
Return the basis set on center three.
Integral * integral() const
Return the integral factory that was used to create this object.
Definition: tbint.h:401
virtual void compute_shell(int, int)=0
Given four shell indices, integrals will be computed and placed in the buffer.
int redundant() const
If redundant is true, then keep redundant integrals in the buffer.
Definition: tbint.h:385
virtual TwoBodyOperSet::type type() const =0
Returns the type of the operator set that this object computes.
Ref< GaussianBasisSet > basis(size_t c=0) const
Return the basis set on center c.
type
types of known two-body operators
Definition: operator.h:318
2-center integral
Definition: tbint.h:55
int nshell() const
Return the number of shells on center one.
int nshell() const
Return the number of shells on center one.
virtual void compute_shell(int, int, DerivCenters &)=0
Given for shell indices, this will cause the integral buffer to be filled in.
int nbasis3() const
Return the number of basis functions on center three.
Ref< GaussianBasisSet > basis() const
Return the basis set on center one.
double shell_bound(int=-1, int=-1, int=-1)
Return the maximum magnitude of any integral in a shell block obtained from compute_shell.
void set_redundant(int i)
See redundant().
Definition: tbint.h:281
int nbasis1() const
Return the number of basis functions on center one.
virtual Ref< TwoBodyThreeCenterInt > clone()
Returns a clone of this.
The SCMatrixRectSubBlock describes a rectangular piece of a matrix.
Definition: block.h:219
The base class for all reference counted objects.
Definition: ref.h:192
int nbasis4() const
Return the number of basis functions on center four.
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 nshell3() const
Return the number of shells on center three.
virtual bool cloneable() const
Return true if the clone member can be called.
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 and 2 functi...
Definition: tbint.h:839
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...
virtual const Ref< TwoBodyOperSetDescr > & descr() const =0
return the operator set descriptor
DerivCenters keeps track the centers that derivatives are taken with respect to.
Definition: dercent.h:42
int nshell() const
Return the number of shells on center one.
This is an abstract base type for classes that compute three centers integrals involving two electron...
Definition: tbint.h:671
Contains all MPQC code up to version 3.
Definition: mpqcin.h:14
int nbasis() const
Return the number of basis functions on center one.
Ref< GaussianBasisSet > basis(size_t c=0) const
Return the basis set on center c.
Ref< GaussianBasisSet > basis1() const
Return the basis set on center one.
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 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.
Ref< GaussianBasisSet > basis1() const
Return the basis set 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 Ref< TwoBodyInt > clone()
Returns a clone of this.
int nshell1() const
Return the number of shells on center one.
Ref< GaussianBasisSet > basis2() const
Return the basis set on center two.
virtual void set_integral_storage(size_t storage)
This storage is used to cache computed integrals.
Generated at Sun Jan 26 2020 23:23:57 for MPQC
3.0.0-alpha using the documentation package Doxygen
1.8.16.