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 #ifndef _chemistry_qc_intv3_tbintv3_h
00029 #define _chemistry_qc_intv3_tbintv3_h
00030
00031 #include <chemistry/qc/basis/tbint.h>
00032 #include <chemistry/qc/intv3/int2e.h>
00033
00034 namespace sc {
00035
00037 class TwoBodyIntV3 : public TwoBodyInt {
00038 protected:
00039 Ref<Int2eV3> int2ev3_;
00040
00041 public:
00042 TwoBodyIntV3(Integral*integral,
00043 const Ref<GaussianBasisSet>&b1,
00044 const Ref<GaussianBasisSet>&b2,
00045 const Ref<GaussianBasisSet>&b3,
00046 const Ref<GaussianBasisSet>&b4,
00047 size_t storage);
00048 ~TwoBodyIntV3();
00049
00050 unsigned int num_tbint_types() const { return 1; }
00051 unsigned int inttype(tbint_type t) const;
00052 TwoBodyInt::tbint_type inttype(unsigned int t) const;
00053
00054 int log2_shell_bound(int,int,int,int);
00055 void compute_shell(int,int,int,int);
00056
00057 size_t storage_used() { return int2ev3_->storage_used(); }
00058 void set_integral_storage(size_t storage);
00059 };
00060
00063 class TwoBodyThreeCenterIntV3 : public TwoBodyThreeCenterInt {
00064 protected:
00065 Ref<Int2eV3> int2ev3_;
00066
00067 public:
00068 TwoBodyThreeCenterIntV3(Integral*integral,
00069 const Ref<GaussianBasisSet>&b1,
00070 const Ref<GaussianBasisSet>&b2,
00071 const Ref<GaussianBasisSet>&b3,
00072 size_t storage);
00073 ~TwoBodyThreeCenterIntV3();
00074
00075 int log2_shell_bound(int,int,int);
00076 void compute_shell(int,int,int);
00077
00078 size_t storage_used() { return int2ev3_->storage_used(); }
00079 void set_integral_storage(size_t storage);
00080 };
00081
00084 class TwoBodyTwoCenterIntV3 : public TwoBodyTwoCenterInt {
00085 protected:
00086 Ref<Int2eV3> int2ev3_;
00087
00088 public:
00089 TwoBodyTwoCenterIntV3(Integral*integral,
00090 const Ref<GaussianBasisSet>&b1,
00091 const Ref<GaussianBasisSet>&b2,
00092 size_t storage);
00093 ~TwoBodyTwoCenterIntV3();
00094
00095 int log2_shell_bound(int,int);
00096 void compute_shell(int,int);
00097
00098 size_t storage_used() { return int2ev3_->storage_used(); }
00099 void set_integral_storage(size_t storage);
00100 };
00101
00104 class TwoBodyDerivIntV3 : public TwoBodyDerivInt {
00105 protected:
00106 Ref<Int2eV3> int2ev3_;
00107
00108 public:
00109 TwoBodyDerivIntV3(Integral*integral,
00110 const Ref<GaussianBasisSet>&b1,
00111 const Ref<GaussianBasisSet>&b2,
00112 const Ref<GaussianBasisSet>&b3,
00113 const Ref<GaussianBasisSet>&b4,
00114 size_t storage);
00115 ~TwoBodyDerivIntV3();
00116
00117 int log2_shell_bound(int,int,int,int);
00118 void compute_shell(int,int,int,int,DerivCenters&);
00119
00120 size_t storage_used() { return int2ev3_->storage_used(); }
00121 };
00122
00123 }
00124
00125 #endif
00126
00127
00128
00129
00130