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_cints_cints_h
00031
#define _chemistry_qc_cints_cints_h
00032
00033
#include <chemistry/qc/basis/integral.h>
00034
00035
namespace sc {
00036
00037
class SphericalTransformCints;
00038
class ISphericalTransformCints;
00039
00041 class IntegralCints :
public Integral {
00042
private:
00043
int maxl_;
00044 SphericalTransformCints ***st_;
00045 ISphericalTransformCints ***ist_;
00046
00047
void free_transforms();
00048
void initialize_transforms();
00049
00050
00051
void check_fullgencon()
const;
00052
00053
public:
00054
IntegralCints(
const Ref<GaussianBasisSet> &b1=0,
00055
const Ref<GaussianBasisSet> &b2=0,
00056
const Ref<GaussianBasisSet> &b3=0,
00057
const Ref<GaussianBasisSet> &b4=0);
00058
IntegralCints(
StateIn&);
00059
IntegralCints(
const Ref<KeyVal>&);
00060 ~
IntegralCints();
00061
00062
void save_data_state(
StateOut&);
00063
00064
Integral*
clone();
00065
00066 size_t
storage_required_eri(
const Ref<GaussianBasisSet> &b1,
00067
const Ref<GaussianBasisSet> &b2 = 0,
00068
const Ref<GaussianBasisSet> &b3 = 0,
00069
const Ref<GaussianBasisSet> &b4 = 0);
00070 size_t
storage_required_grt(
const Ref<GaussianBasisSet> &b1,
00071
const Ref<GaussianBasisSet> &b2 = 0,
00072
const Ref<GaussianBasisSet> &b3 = 0,
00073
const Ref<GaussianBasisSet> &b4 = 0);
00074
00075
CartesianIter *
new_cartesian_iter(
int);
00076
RedundantCartesianIter *
new_redundant_cartesian_iter(
int);
00077
RedundantCartesianSubIter *
new_redundant_cartesian_sub_iter(
int);
00078
SphericalTransformIter *
new_spherical_transform_iter(
int l,
00079
int inv=0,
00080
int subl=-1);
00081
const SphericalTransform *
spherical_transform(
int l,
00082
int inv=0,
int subl=-1);
00083
00084
Ref<OneBodyInt> overlap();
00085
00086
Ref<OneBodyInt> kinetic();
00087
00088
Ref<OneBodyInt> point_charge(
const Ref<PointChargeData>& =0);
00089
00090
Ref<OneBodyInt> nuclear();
00091
00092
Ref<OneBodyInt> hcore();
00093
00094
Ref<OneBodyInt> efield_dot_vector(
const Ref<EfieldDotVectorData>& =0);
00095
00096
Ref<OneBodyInt> dipole(
const Ref<DipoleData>& =0);
00097
00098
Ref<OneBodyInt> quadrupole(
const Ref<DipoleData>& =0);
00099
00100
Ref<OneBodyDerivInt> overlap_deriv();
00101
00102
Ref<OneBodyDerivInt> kinetic_deriv();
00103
00104
Ref<OneBodyDerivInt> nuclear_deriv();
00105
00106
Ref<OneBodyDerivInt> hcore_deriv();
00107
00108
Ref<TwoBodyInt> electron_repulsion();
00109
00110
Ref<TwoBodyInt> grt();
00111
00112
Ref<TwoBodyDerivInt> electron_repulsion_deriv();
00113
00114
void set_basis(
const Ref<GaussianBasisSet> &b1,
00115
const Ref<GaussianBasisSet> &b2 = 0,
00116
const Ref<GaussianBasisSet> &b3 = 0,
00117
const Ref<GaussianBasisSet> &b4 = 0);
00118 };
00119
00120 }
00121
00122
#endif
00123
00124
00125
00126
00127