00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
#ifndef _chemistry_qc_intv3_intv3_h
00031
#define _chemistry_qc_intv3_intv3_h
00032
00033
#include <chemistry/qc/basis/integral.h>
00034
00035
namespace sc {
00036
00037
class SphericalTransformV3;
00038
class ISphericalTransformV3;
00039
00041 class IntegralV3 :
public Integral {
00042
private:
00043
int maxl_;
00044 SphericalTransformV3 ***st_;
00045 ISphericalTransformV3 ***ist_;
00046
00047
void free_transforms();
00048
void initialize_transforms();
00049
public:
00050
IntegralV3(
const Ref<GaussianBasisSet> &b1=0,
00051
const Ref<GaussianBasisSet> &b2=0,
00052
const Ref<GaussianBasisSet> &b3=0,
00053
const Ref<GaussianBasisSet> &b4=0);
00054
IntegralV3(
StateIn&);
00055
IntegralV3(
const Ref<KeyVal>&);
00056 ~
IntegralV3();
00057
00058
void save_data_state(
StateOut&);
00059
00060
Integral*
clone();
00061
00062
CartesianIter *
new_cartesian_iter(
int);
00063
RedundantCartesianIter *
new_redundant_cartesian_iter(
int);
00064
RedundantCartesianSubIter *
new_redundant_cartesian_sub_iter(
int);
00065
SphericalTransformIter *
new_spherical_transform_iter(
int l,
00066
int inv=0,
00067
int subl=-1);
00068
const SphericalTransform *
spherical_transform(
int l,
00069
int inv=0,
int subl=-1);
00070
00071
Ref<OneBodyInt> overlap();
00072
00073
Ref<OneBodyInt> kinetic();
00074
00075
Ref<OneBodyInt> point_charge(
const Ref<PointChargeData>& =0);
00076
00077
Ref<OneBodyInt> nuclear();
00078
00079
Ref<OneBodyInt> hcore();
00080
00081
Ref<OneBodyInt> efield_dot_vector(
const Ref<EfieldDotVectorData>& =0);
00082
00083
Ref<OneBodyInt> dipole(
const Ref<DipoleData>& =0);
00084
00085
Ref<OneBodyInt> quadrupole(
const Ref<DipoleData>& =0);
00086
00087
Ref<OneBodyDerivInt> overlap_deriv();
00088
00089
Ref<OneBodyDerivInt> kinetic_deriv();
00090
00091
Ref<OneBodyDerivInt> nuclear_deriv();
00092
00093
Ref<OneBodyDerivInt> hcore_deriv();
00094
00095
Ref<TwoBodyInt> electron_repulsion();
00096
00097
Ref<TwoBodyDerivInt> electron_repulsion_deriv();
00098
00099
void set_basis(
const Ref<GaussianBasisSet> &b1,
00100
const Ref<GaussianBasisSet> &b2 = 0,
00101
const Ref<GaussianBasisSet> &b3 = 0,
00102
const Ref<GaussianBasisSet> &b4 = 0);
00103 };
00104
00105 }
00106
00107
#endif
00108
00109
00110
00111
00112