00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef included_MPQC_IntegralEvaluator4_Impl_hh
00014 #define included_MPQC_IntegralEvaluator4_Impl_hh
00015
00016 #ifndef included_sidl_cxx_hh
00017 #include "sidl_cxx.hh"
00018 #endif
00019 #ifndef included_MPQC_IntegralEvaluator4_IOR_h
00020 #include "MPQC_IntegralEvaluator4_IOR.h"
00021 #endif
00022
00023
00024
00025 #ifndef included_Chemistry_QC_GaussianBasis_DerivCenters_hh
00026 #include "Chemistry_QC_GaussianBasis_DerivCenters.hh"
00027 #endif
00028 #ifndef included_Chemistry_QC_GaussianBasis_Molecular_hh
00029 #include "Chemistry_QC_GaussianBasis_Molecular.hh"
00030 #endif
00031 #ifndef included_MPQC_IntegralEvaluator4_hh
00032 #include "MPQC_IntegralEvaluator4.hh"
00033 #endif
00034 #ifndef included_sidl_BaseInterface_hh
00035 #include "sidl_BaseInterface.hh"
00036 #endif
00037 #ifndef included_sidl_ClassInfo_hh
00038 #include "sidl_ClassInfo.hh"
00039 #endif
00040
00041
00042
00043 #include <chemistry/qc/basis/gaussbas.h>
00044 #include <chemistry/qc/intv3/cartitv3.h>
00045 #include <chemistry/qc/intv3/intv3.h>
00046 #ifdef HAVE_CINTS
00047 #include <chemistry/qc/cints/cints.h>
00048 #endif
00049 using namespace sc;
00050
00051
00052 namespace MPQC {
00053
00057 class IntegralEvaluator4_impl
00058
00059
00070
00071
00072 {
00073
00074 private:
00075
00076
00077 IntegralEvaluator4 self;
00078
00079
00080 Chemistry::Molecule molecule_;
00081 std::string evaluator_label_;
00082 Ref<sc::GaussianBasisSet> bs1_;
00083 Ref<sc::GaussianBasisSet> bs2_;
00084 Ref<sc::GaussianBasisSet> bs3_;
00085 Ref<sc::GaussianBasisSet> bs4_;
00086 Ref<sc::Integral> integral_;
00087 Ref<sc::TwoBodyInt> eval_;
00088 Ref<sc::TwoBodyDerivInt> deriv_eval_;
00089 int max_nshell4_;
00090 sidl::array<double> sidl_buffer_;
00091 const double* sc_buffer_;
00092 enum { two_body, two_body_deriv};
00093 int int_type_;
00094 int deriv_level_;
00095 std::string package_;
00096
00097
00098 int bufn_;
00099 int **reorder_;
00100 double *buf_;
00101 double *temp_buffer_;
00102 int index_, con2_offset_, con3_offset_, con4_offset_, con_offset_,
00103 local2_offset_, local3_offset_, local4_offset_,
00104 c1_base_, c2_base_, c3_base_, c4_base_,
00105 s1_is_cart_, s2_is_cart_, s3_is_cart_, s4_is_cart_,
00106 s1_nfunc_, s2_nfunc_, s3_nfunc_, s4_nfunc_,
00107 nc1_, nc2_, nc3_, nc4_;
00108 sc::GaussianShell *s1_, *s2_, *s3_, *s4_;
00109
00110 void reorder_intv3(int64_t,int64_t,int64_t,int64_t);
00111 void reorder_quartet( sc::GaussianShell*, sc::GaussianShell*,
00112 sc::GaussianShell*, sc::GaussianShell*,
00113 int, int, int, int, int );
00114 void reorder_intv3_inline(int64_t,int64_t,int64_t,int64_t);
00115 void initialize_reorder_intv3();
00116 void reorder_c4(int,int,int,int,int,int);
00117
00118
00119 private:
00120
00121 IntegralEvaluator4_impl()
00122 {}
00123
00124 public:
00125
00126
00127
00128 IntegralEvaluator4_impl( struct MPQC_IntegralEvaluator4__object * s ) :
00129 self(s,true) { _ctor(); }
00130
00131
00132 void _ctor();
00133
00134
00135 virtual ~IntegralEvaluator4_impl() { _dtor(); }
00136
00137
00138 void _dtor();
00139
00140
00141 static void _load();
00142
00143 public:
00144
00148 void
00149 set_integral_package (
00150 const ::std::string& label
00151 )
00152 throw ()
00153 ;
00154
00155
00165 void
00166 initialize (
00167 ::Chemistry::QC::GaussianBasis::Molecular bs1,
00168 ::Chemistry::QC::GaussianBasis::Molecular bs2,
00169 ::Chemistry::QC::GaussianBasis::Molecular bs3,
00170 ::Chemistry::QC::GaussianBasis::Molecular bs4,
00171 const ::std::string& label,
00172 int64_t max_deriv
00173 )
00174 throw ()
00175 ;
00176
00177
00182 void*
00183 get_buffer() throw ()
00184 ;
00185
00195 void
00196 compute (
00197 int64_t shellnum1,
00198 int64_t shellnum2,
00199 int64_t shellnum3,
00200 int64_t shellnum4,
00201 int64_t deriv_level,
00202 ::Chemistry::QC::GaussianBasis::DerivCenters deriv_ctr
00203 )
00204 throw ()
00205 ;
00206
00207
00219 ::sidl::array<double>
00220 compute_array (
00221 int64_t shellnum1,
00222 int64_t shellnum2,
00223 int64_t shellnum3,
00224 int64_t shellnum4,
00225 int64_t deriv_level,
00226 ::Chemistry::QC::GaussianBasis::DerivCenters deriv_ctr
00227 )
00228 throw ()
00229 ;
00230
00231 };
00232
00233 }
00234
00235
00236
00237
00238
00239 #endif