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_int1e_h
00033 #define _chemistry_qc_intcca_int1e_h
00034
00035 #include <sidl_cxx.hh>
00036 #include <Chemistry_QC_GaussianBasis_IntegralEvaluatorFactory.hh>
00037 #include <Chemistry_QC_GaussianBasis_IntegralEvaluator2.hh>
00038 #include <Chemistry_QC_GaussianBasis_Molecular.hh>
00039 #include <Chemistry_Chemistry_QC_GaussianBasis_DerivCenters.hh>
00040 #include <Chemistry_Chemistry_QC_GaussianBasis_DerivCenters.hh>
00041 #include <MPQC_GaussianBasis_Molecular.hh>
00042 #include <chemistry/qc/basis/integral.h>
00043
00044 using namespace std;
00045 using namespace Chemistry;
00046 using namespace Chemistry::QC::GaussianBasis;
00047 using namespace MPQC;
00048 namespace sc {
00049
00050 class Integral;
00051
00055 class Int1eCCA: public RefCount {
00056
00057 private:
00058 IntegralEvaluatorFactory eval_factory_;
00059 Ref<GaussianBasisSet> bs1_;
00060 Ref<GaussianBasisSet> bs2_;
00061 GaussianBasis_Molecular cca_bs1_;
00062 GaussianBasis_Molecular cca_bs2_;
00063 sidl::array<double> sidl_buffer_;
00064 double *buff_;
00065 bool use_opaque_;
00066 void copy_buffer();
00067 IntegralEvaluator2 overlap_;
00068 IntegralEvaluator2 overlap_1der_;
00069 IntegralEvaluator2 kinetic_;
00070 IntegralEvaluator2 kinetic_1der_;
00071 IntegralEvaluator2 nuclear_;
00072 IntegralEvaluator2 nuclear_1der_;
00073 IntegralEvaluator2 hcore_;
00074 IntegralEvaluator2 hcore_1der_;
00075 IntegralEvaluator2 *overlap_ptr_;
00076 IntegralEvaluator2 *overlap_1der_ptr_;
00077 IntegralEvaluator2 *kinetic_ptr_;
00078 IntegralEvaluator2 *kinetic_1der_ptr_;
00079 IntegralEvaluator2 *nuclear_ptr_;
00080 IntegralEvaluator2 *nuclear_1der_ptr_;
00081 IntegralEvaluator2 *hcore_ptr_;
00082 IntegralEvaluator2 *hcore_1der_ptr_;
00083 Chemistry_QC_GaussianBasis_DerivCenters cca_dc_;
00084
00085 protected:
00086 Integral *integral_;
00087
00088 public:
00089 Int1eCCA(Integral *integral,
00090 const Ref<GaussianBasisSet>&b1,
00091 const Ref<GaussianBasisSet>&b2,
00092 int order, IntegralEvaluatorFactory, std::string, bool);
00093 ~Int1eCCA();
00094
00095 double *buffer() { return buff_; }
00096 void overlap(int ish, int jsh);
00097 void overlap_1der(int ish, int jsh,
00098 Chemistry_QC_GaussianBasis_DerivCenters &dc);
00099 void kinetic(int ish, int jsh);
00100 void kinetic_1der(int ish, int jsh,
00101 Chemistry_QC_GaussianBasis_DerivCenters &dc);
00102 void nuclear(int ish, int jsh);
00103 void nuclear_1der(int ish, int jsh,
00104 Chemistry_QC_GaussianBasis_DerivCenters &dc);
00105 void hcore(int ish, int jsh);
00106 void hcore_1der(int ish, int jsh,
00107 Chemistry_QC_GaussianBasis_DerivCenters &dc);
00108 };
00109
00110 }
00111
00112 #endif
00113
00114
00115
00116