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
00067 CartesianOrdering cartesian_ordering() const { return CCACartesianOrdering; }
00068
00069 size_t storage_required_eri(const Ref<GaussianBasisSet> &b1,
00070 const Ref<GaussianBasisSet> &b2 = 0,
00071 const Ref<GaussianBasisSet> &b3 = 0,
00072 const Ref<GaussianBasisSet> &b4 = 0);
00073 size_t storage_required_grt(const Ref<GaussianBasisSet> &b1,
00074 const Ref<GaussianBasisSet> &b2 = 0,
00075 const Ref<GaussianBasisSet> &b3 = 0,
00076 const Ref<GaussianBasisSet> &b4 = 0);
00077
00078 CartesianIter * new_cartesian_iter(int);
00079 RedundantCartesianIter * new_redundant_cartesian_iter(int);
00080 RedundantCartesianSubIter * new_redundant_cartesian_sub_iter(int);
00081 SphericalTransformIter * new_spherical_transform_iter(int l,
00082 int inv=0,
00083 int subl=-1);
00084 const SphericalTransform * spherical_transform(int l,
00085 int inv=0, int subl=-1);
00086
00087 Ref<OneBodyInt> overlap();
00088
00089 Ref<OneBodyInt> kinetic();
00090
00091 Ref<OneBodyInt> point_charge(const Ref<PointChargeData>& =0);
00092
00093 Ref<OneBodyInt> nuclear();
00094
00095 Ref<OneBodyInt> p4();
00096
00097 Ref<OneBodyInt> hcore();
00098
00099 Ref<OneBodyInt> efield_dot_vector(const Ref<EfieldDotVectorData>& =0);
00100
00101 Ref<OneBodyInt> dipole(const Ref<DipoleData>& =0);
00102
00103 Ref<OneBodyInt> quadrupole(const Ref<DipoleData>& =0);
00104
00105 Ref<OneBodyDerivInt> overlap_deriv();
00106
00107 Ref<OneBodyDerivInt> kinetic_deriv();
00108
00109 Ref<OneBodyDerivInt> nuclear_deriv();
00110
00111 Ref<OneBodyDerivInt> hcore_deriv();
00112
00113 Ref<TwoBodyInt> electron_repulsion();
00114
00115 Ref<TwoBodyInt> grt();
00116
00117 void set_basis(const Ref<GaussianBasisSet> &b1,
00118 const Ref<GaussianBasisSet> &b2 = 0,
00119 const Ref<GaussianBasisSet> &b3 = 0,
00120 const Ref<GaussianBasisSet> &b4 = 0);
00121 };
00122
00123 }
00124
00125 #endif
00126
00127
00128
00129
00130