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_libint2_tbint_h
00029 #define _chemistry_qc_libint2_tbint_h
00030
00031 #include <chemistry/qc/basis/tbint.h>
00032 #include <chemistry/qc/libint2/int2e.h>
00033
00034 namespace sc {
00035
00036
00037 typedef enum {erieval, grteval, g12eval, g12nceval, g12dkheval, geng12eval} tbinteval;
00038
00040 class TwoBodyIntLibint2 : public TwoBodyInt {
00041
00042 unsigned int num_tbint_types_;
00043 tbinteval int2etype_;
00044
00045 protected:
00046 Ref<Int2eLibint2> int2elibint2_;
00047
00048 public:
00049 typedef IntParamsG12::ContractedGeminal ContractedGeminal;
00050 TwoBodyIntLibint2(Integral*integral,
00051 const Ref<GaussianBasisSet>&b1,
00052 const Ref<GaussianBasisSet>&b2,
00053 const Ref<GaussianBasisSet>&b3,
00054 const Ref<GaussianBasisSet>&b4,
00055 size_t storage, tbinteval int2etype,
00056 const Ref<IntParams>& params);
00057 ~TwoBodyIntLibint2();
00058
00059 unsigned int num_tbint_types() const {
00060 return num_tbint_types_;
00061 }
00063 unsigned int inttype(tbint_type t) const;
00065 TwoBodyInt::tbint_type inttype(unsigned int t) const;
00066
00067 int log2_shell_bound(int,int,int,int);
00068 void compute_shell(int,int,int,int);
00069
00070 size_t used_storage() const { return int2elibint2_->storage_used(); }
00071 void set_integral_storage(size_t storage);
00072
00073 const double *buffer(tbint_type te_type) const {
00074 return int2elibint2_->buffer( inttype(te_type) );
00075 }
00076 };
00077
00080 class TwoBodyDerivIntLibint2 : public TwoBodyDerivInt {
00081 protected:
00082 Ref<Int2eLibint2> int2elibint2_;
00083
00084 public:
00085 TwoBodyDerivIntLibint2(Integral*integral,
00086 const Ref<GaussianBasisSet>&b1,
00087 const Ref<GaussianBasisSet>&b2,
00088 const Ref<GaussianBasisSet>&b3,
00089 const Ref<GaussianBasisSet>&b4,
00090 size_t storage, tbinteval int2etype);
00091 ~TwoBodyDerivIntLibint2();
00092
00093 int log2_shell_bound(int,int,int,int);
00094 void compute_shell(int,int,int,int,DerivCenters&);
00095
00096 size_t used_storage() const { return int2elibint2_->storage_used(); }
00097 };
00098
00099 namespace libint2 {
00100 template <class Int2e>
00101 Ref<Int2e>
00102 create_int2e(Integral*integral,
00103 const Ref<GaussianBasisSet>& b1,
00104 const Ref<GaussianBasisSet>& b2,
00105 const Ref<GaussianBasisSet>& b3,
00106 const Ref<GaussianBasisSet>& b4,
00107 size_t storage,
00108 const Ref<IntParams>& params);
00109 }
00110
00111 }
00112
00113 #endif
00114
00115
00116
00117
00118