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_libint2_libint2_h
00031 #define _chemistry_qc_libint2_libint2_h
00032
00033 #include <chemistry/qc/basis/integral.h>
00034
00035 namespace sc {
00036
00037 class SphericalTransformLibint2;
00038 class ISphericalTransformLibint2;
00039
00041 class IntegralLibint2 : public Integral {
00042 private:
00043 int maxl_;
00044 SphericalTransformLibint2 ***st_;
00045 ISphericalTransformLibint2 ***ist_;
00046
00047 void free_transforms();
00048 void initialize_transforms();
00049
00050
00051 void check_fullgencon() const;
00052
00053 public:
00054 IntegralLibint2(const Ref<GaussianBasisSet> &b1=0,
00055 const Ref<GaussianBasisSet> &b2=0,
00056 const Ref<GaussianBasisSet> &b3=0,
00057 const Ref<GaussianBasisSet> &b4=0);
00058 IntegralLibint2(StateIn&);
00059 IntegralLibint2(const Ref<KeyVal>&);
00060 ~IntegralLibint2();
00061
00062 void save_data_state(StateOut&);
00063
00064 Integral* clone();
00065
00067 CartesianOrdering cartesian_ordering() const;
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_g12(const Ref<GaussianBasisSet> &b1,
00074 const Ref<GaussianBasisSet> &b2 = 0,
00075 const Ref<GaussianBasisSet> &b3 = 0,
00076 const Ref<GaussianBasisSet> &b4 = 0);
00077 size_t storage_required_g12nc(const Ref<GaussianBasisSet> &b1,
00078 const Ref<GaussianBasisSet> &b2 = 0,
00079 const Ref<GaussianBasisSet> &b3 = 0,
00080 const Ref<GaussianBasisSet> &b4 = 0);
00081 size_t storage_required_g12dkh(const Ref<GaussianBasisSet> &b1,
00082 const Ref<GaussianBasisSet> &b2 = 0,
00083 const Ref<GaussianBasisSet> &b3 = 0,
00084 const Ref<GaussianBasisSet> &b4 = 0);
00085 size_t storage_required_geng12(const Ref<GaussianBasisSet> &b1,
00086 const Ref<GaussianBasisSet> &b2 = 0,
00087 const Ref<GaussianBasisSet> &b3 = 0,
00088 const Ref<GaussianBasisSet> &b4 = 0);
00089
00090 CartesianIter * new_cartesian_iter(int);
00091 RedundantCartesianIter * new_redundant_cartesian_iter(int);
00092 RedundantCartesianSubIter * new_redundant_cartesian_sub_iter(int);
00093 SphericalTransformIter * new_spherical_transform_iter(int l,
00094 int inv=0,
00095 int subl=-1);
00096 const SphericalTransform * spherical_transform(int l,
00097 int inv=0, int subl=-1);
00098
00099 Ref<OneBodyInt> overlap();
00100
00101 Ref<OneBodyInt> kinetic();
00102
00103 Ref<OneBodyInt> point_charge(const Ref<PointChargeData>& =0);
00104
00105 Ref<OneBodyInt> nuclear();
00106
00107 Ref<OneBodyInt> p4();
00108
00109 Ref<OneBodyInt> hcore();
00110
00111 Ref<OneBodyInt> efield_dot_vector(const Ref<EfieldDotVectorData>& =0);
00112
00113 Ref<OneBodyInt> dipole(const Ref<DipoleData>& =0);
00114
00115 Ref<OneBodyInt> quadrupole(const Ref<DipoleData>& =0);
00116
00117 Ref<OneBodyDerivInt> overlap_deriv();
00118
00119 Ref<OneBodyDerivInt> kinetic_deriv();
00120
00121 Ref<OneBodyDerivInt> nuclear_deriv();
00122
00123 Ref<OneBodyDerivInt> hcore_deriv();
00124
00125 Ref<TwoBodyInt> electron_repulsion();
00126
00127 Ref<TwoBodyInt> g12(const Ref<IntParamsG12>& p);
00128
00129 Ref<TwoBodyInt> g12nc(const Ref<IntParamsG12>& p);
00130
00131 Ref<TwoBodyInt> g12dkh(const Ref<IntParamsG12>& p);
00132
00133 Ref<TwoBodyInt> geng12(const Ref<IntParamsGenG12>& p);
00134
00135 void set_basis(const Ref<GaussianBasisSet> &b1,
00136 const Ref<GaussianBasisSet> &b2 = 0,
00137 const Ref<GaussianBasisSet> &b3 = 0,
00138 const Ref<GaussianBasisSet> &b4 = 0);
00139 };
00140
00141 }
00142
00143 #endif
00144
00145
00146
00147
00148