/usr/include/libmints/twobody.h is in libpsi3-dev 3.4.0-6build2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #ifndef _psi_src_lib_libmints_twobody_h
#define _psi_src_lib_libmints_twobody_h
/*!
\file libmints/twobody.h
\ingroup MINTS
*/
#include <libmints/ref.h>
#include <libmints/matrix.h>
namespace psi {
class IntegralFactory;
class BasisSet;
class GaussianShell;
//! Two body integral base class.
class TwoBodyInt
{
protected:
IntegralFactory *integral_;
Ref<BasisSet> bs1_;
Ref<BasisSet> bs2_;
Ref<BasisSet> bs3_;
Ref<BasisSet> bs4_;
/// Buffer to hold the final integrals.
double *target_;
/// Buffer to hold the transformation intermediates.
double *tformbuf_;
/// Buffer to hold the initially computed integrals.
double *source_;
/// Maximum number of unique quartets needed to compute a set of SO's
int max_unique_quartets_;
/// Number of atoms.
int natom_;
/// Derivative level.
int deriv_;
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);
TwoBodyInt(IntegralFactory *integral,
const Ref<BasisSet>& bs1,
const Ref<BasisSet>& bs2,
const Ref<BasisSet>& bs3,
const Ref<BasisSet>& bs4,
int deriv = 0);
public:
virtual ~TwoBodyInt();
/// Basis set on center one
Ref<BasisSet> basis();
/// Basis set on center one
Ref<BasisSet> basis1();
/// Basis set on center two
Ref<BasisSet> basis2();
/// Basis set on center three
Ref<BasisSet> basis3();
/// Basis set on center four
Ref<BasisSet> basis4();
/// Buffer where the integrals are placed
const double *buffer() const { return target_; };
/// Compute the integrals
virtual void compute_shell(int, int, int, int) = 0;
/// Integral object that created me.
IntegralFactory *integral() const { return integral_; }
/// Normalize Cartesian functions based on angular momentum
void normalize_am(Ref<GaussianShell> &, Ref<GaussianShell> &, Ref<GaussianShell> &, Ref<GaussianShell> &, int nchunk=1);
/// Return true if the clone member can be called. By default returns false.
virtual bool cloneable();
/// Returns a clone of this object. By default throws an exception
virtual Ref<TwoBodyInt> clone();
/// Results go back to buffer_
void pure_transform(int, int, int, int, int ichunk=0);
};
}
#endif
|