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_cca_int_tbintcca_h
00033 #define _chemistry_cca_int_tbintcca_h
00034
00035 #include <vector>
00036 #include <map>
00037 #include <sidl_cxx.hxx>
00038 #include <chemistry/qc/basis/tbint.h>
00039 #include <Chemistry_QC_GaussianBasis_IntegralEvaluatorFactoryInterface.hxx>
00040 #include <Chemistry_QC_GaussianBasis_DerivCentersInterface.hxx>
00041 #include <MPQC_GaussianBasisMolecular.hxx>
00042
00043 namespace sc {
00044
00046
00049 class TwoBodyIntCCA : public TwoBodyInt {
00050
00051 private:
00052
00053 Integral* integral_;
00054 Ref<GaussianBasisSet> bs1_, bs2_, bs3_, bs4_;
00055 Chemistry::QC::GaussianBasis::IntegralEvaluatorFactoryInterface eval_factory_;
00056 Chemistry::QC::GaussianBasis::CompositeDescrInterface cdesc_;
00057 std::vector< Chemistry::QC::GaussianBasis::DescrInterface > descriptors_;
00058 std::vector< std::string > types_;
00059 MPQC::GaussianBasisMolecular cca_bs1_, cca_bs2_, cca_bs3_, cca_bs4_;
00060 Chemistry::QC::GaussianBasis::IntegralEvaluator4Interface eval_;
00061 int int_bound_min_;
00062 int ndesc_;
00063 double tol_;
00064 double loginv_;
00065 std::map< std::string, tbint_type > dtype_to_tbtype_;
00066 double** tbtype_to_buf_;
00067 tbint_type* tbtype_list_;
00068 sidl::array<double> sidl_buffer_;
00069 std::vector< int > segments_;
00070 sidl::array<double> bounds_;
00071 unsigned int num_tbint_types_;
00072
00073 public:
00074 TwoBodyIntCCA( Integral* integral,
00075 const Ref<GaussianBasisSet>&b1,
00076 const Ref<GaussianBasisSet>&b2,
00077 const Ref<GaussianBasisSet>&b3,
00078 const Ref<GaussianBasisSet>&b4,
00079 Chemistry::QC::GaussianBasis::IntegralEvaluatorFactoryInterface,
00080 Chemistry::QC::GaussianBasis::CompositeDescrInterface );
00081 ~TwoBodyIntCCA();
00082
00083 void compute_shell(int,int,int,int);
00084 const double* buffer(tbint_type te_type) const;
00085 const double* buffer_not_const();
00086 int log2_shell_bound(int,int,int,int);
00087 int redundant() const { return redundant_; }
00088 void set_redundant(int i) { redundant_ = i; }
00089 unsigned int num_tbint_types() const;
00090 unsigned int inttype(tbint_type t) const;
00091 TwoBodyInt::tbint_type inttype(unsigned int t) const;
00092 void remove_redundant(int,int,int,int);
00093 };
00094
00095
00097
00100 class TwoBodyDerivIntCCA : public TwoBodyDerivInt {
00101
00102 private:
00103 Integral* integral_;
00104 Ref<GaussianBasisSet> bs1_, bs2_, bs3_, bs4_;
00105 Chemistry::QC::GaussianBasis::IntegralEvaluatorFactoryInterface eval_factory_;
00106 Chemistry::QC::GaussianBasis::CompositeDescrInterface cdesc_;
00107 std::vector< Chemistry::QC::GaussianBasis::DescrInterface > descriptors_;
00108 std::vector< std::string > types_;
00109 MPQC::GaussianBasisMolecular cca_bs1_, cca_bs2_, cca_bs3_, cca_bs4_;
00110 double* buff_;
00111 Chemistry::QC::GaussianBasis::IntegralEvaluator4Interface eval_;
00112 bool redundant_;
00113 double tol_;
00114 double loginv_;
00115 int int_bound_min_;
00116 int max_deriv_lvl_;
00117 int ndesc_;
00118 std::vector<Chemistry::QC::GaussianBasis::DerivCentersInterface> cca_dcs_;
00119 sidl::array<double> sidl_buffer_;
00120 std::string type_;
00121 std::vector< int > segments_;
00122 bool fast_deriv_;
00123 std::vector<sc::DerivCenters> sc_dcs_;
00124 std::map< std::string, int > dtype_to_tbtype_;
00125 double** tbtype_to_buf_;
00126 sidl::array<double> bounds_;
00127
00128 public:
00129 TwoBodyDerivIntCCA( Integral* integral,
00130 const Ref<GaussianBasisSet>&b1,
00131 const Ref<GaussianBasisSet>&b2,
00132 const Ref<GaussianBasisSet>&b3,
00133 const Ref<GaussianBasisSet>&b4,
00134 Chemistry::QC::GaussianBasis::IntegralEvaluatorFactoryInterface,
00135 Chemistry::QC::GaussianBasis::CompositeDescrInterface );
00136 ~TwoBodyDerivIntCCA();
00137
00138 void compute_shell(int,int,int,int,DerivCenters&);
00139 int log2_shell_bound(int,int,int,int);
00140 int redundant() const { return redundant_; }
00141 void set_redundant(int i) { redundant_ = i; }
00142 unsigned int num_tbint_types() const;
00143 void copy_buffer(int);
00144 };
00145
00146 }
00147
00148 #endif
00149
00150
00151
00152
00153