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 #ifdef __GNUG__
00029 #pragma interface
00030 #endif
00031
00032 #ifndef _chemistry_qc_intcca_int2e_h
00033 #define _chemistry_qc_intcca_int2e_h
00034
00035 #include <sidl_cxx.hh>
00036 #include <Chemistry_QC_GaussianBasis_IntegralEvaluatorFactory.hh>
00037 #include <Chemistry_QC_GaussianBasis_IntegralEvaluator4.hh>
00038 #include <Chemistry_QC_GaussianBasis_DerivCenters.hh>
00039 #include <Chemistry_Chemistry_QC_GaussianBasis_DerivCenters.hh>
00040 #include <MPQC_GaussianBasis_Molecular.hh>
00041 #include <chemistry/qc/basis/integral.h>
00042
00043 using namespace std;
00044 using namespace MPQC;
00045 using namespace Chemistry;
00046 using namespace Chemistry::QC::GaussianBasis;
00047
00048 namespace sc {
00049
00050 class Integral;
00051
00055 class Int2eCCA: public RefCount {
00056
00057 private:
00058 IntegralEvaluatorFactory eval_factory_;
00059 Ref<GaussianBasisSet> bs1_;
00060 Ref<GaussianBasisSet> bs2_;
00061 Ref<GaussianBasisSet> bs3_;
00062 Ref<GaussianBasisSet> bs4_;
00063 GaussianBasis_Molecular cca_bs1_;
00064 GaussianBasis_Molecular cca_bs2_;
00065 GaussianBasis_Molecular cca_bs3_;
00066 GaussianBasis_Molecular cca_bs4_;
00067 sidl::array<double> sidl_buffer_;
00068 double *buffer_;
00069 bool use_opaque_;
00070 void copy_buffer(int);
00071 IntegralEvaluator4 erep_;
00072 IntegralEvaluator4 erep_1der_;
00073 IntegralEvaluator4 *erep_ptr_;
00074 IntegralEvaluator4 *erep_1der_ptr_;
00075 Chemistry_QC_GaussianBasis_DerivCenters cca_dc_;
00076 int redundant_;
00077 void remove_redundant(int,int,int,int);
00078
00079 protected:
00080 Integral *integral_;
00081
00082 public:
00083 Int2eCCA(Integral *integral,
00084 const Ref<GaussianBasisSet>&b1,
00085 const Ref<GaussianBasisSet>&b2,
00086 const Ref<GaussianBasisSet>&b3,
00087 const Ref<GaussianBasisSet>&b4,
00088 int order, size_t storage, IntegralEvaluatorFactory,
00089 bool, string );
00090 ~Int2eCCA() {};
00091 double *buffer() { return buffer_; }
00092 void compute_erep( int is, int js, int ks, int ls );
00093 void compute_erep_1der( int is, int js, int ks, int ls,
00094 Chemistry::QC::GaussianBasis::DerivCenters &dc);
00095 int redundant() const { return redundant_; }
00096 void set_redundant(int i) { redundant_ = i; }
00097
00098 };
00099
00100 }
00101
00102 #endif
00103
00104
00105
00106