1
#include <libmints/basisset.h>
2
#include <libmints/onebody.h>
3
#include <libmints/twobody.h>
4
#include <libmints/overlap.h>
5
#include <libmints/kinetic.h>
6
#include <libmints/potential.h>
7
#include <libmints/integral.h>
8
#include <libmints/dipole.h>
9
#include <libmints/quadrupole.h>
10
#include <libmints/symmetry.h>
11
#include <libmints/eri.h>
15
/** Initialize IntegralFactory object given a GaussianBasisSet for each center. */
16
IntegralFactory::IntegralFactory(const Ref<BasisSet> &bs1, const Ref<BasisSet> &bs2,
17
const Ref<BasisSet> &bs3, const Ref<BasisSet> &bs4)
19
set_basis(bs1, bs2, bs3, bs4);
22
IntegralFactory::~IntegralFactory()
27
void IntegralFactory::set_basis(const Ref<BasisSet> &bs1, const Ref<BasisSet> &bs2,
28
const Ref<BasisSet> &bs3, const Ref<BasisSet> &bs4)
36
Ref<BasisSet> max12 = bs1_->max_am() > bs2_->max_am() ? bs1_ : bs2_;
37
Ref<BasisSet> max34 = bs3_->max_am() > bs4_->max_am() ? bs3_ : bs4_;
38
Ref<BasisSet> max1234 = max12->max_am() > max34->max_am() ? max12 : max34;
40
init_spherical_harmonics(max1234->max_am());
43
Ref<OneBodyInt> IntegralFactory::overlap(int deriv)
45
return new OverlapInt((IntegralFactory*)this, bs1_, bs2_, deriv);
48
Ref<OneBodyInt> IntegralFactory::kinetic(int deriv)
50
return new KineticInt((IntegralFactory*)this, bs1_, bs2_, deriv);
53
Ref<OneBodyInt> IntegralFactory::potential(int deriv)
55
return new PotentialInt((IntegralFactory*)this, bs1_, bs2_, deriv);
58
Ref<OneBodyInt> IntegralFactory::dipole(int deriv)
60
return new DipoleInt((IntegralFactory*)this, bs1_, bs2_, deriv);
63
Ref<OneBodyInt> IntegralFactory::quadrupole()
65
return new QuadrupoleInt((IntegralFactory*)this, bs1_, bs2_);
68
Ref<TwoBodyInt> IntegralFactory::eri(int deriv)
70
return new ERI((IntegralFactory*)this, bs1_, bs2_, bs3_, bs4_, deriv);
73
void IntegralFactory::init_spherical_harmonics(int max_am)
75
for (int i=0; i<=max_am; ++i)
76
spherical_transforms_.push_back(SphericalTransform(i));