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