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_intcca_intcca_h
00029 #define _chemistry_qc_intcca_intcca_h
00030
00031 #include <gov_cca.hh>
00032 #include <chemistry/qc/basis/integral.h>
00033 #include <Chemistry_QC_GaussianBasis_IntegralEvaluatorFactory.hh>
00034 #include <Chemistry_Chemistry_Molecule.hh>
00035 #include <chemistry/molecule/molecule.h>
00036 #include <chemistry/qc/basis/transform.h>
00037 #include <chemistry/qc/basis/cartiter.h>
00038
00039 using namespace Chemistry::QC::GaussianBasis;
00040
00041 namespace sc {
00042
00044 class IntegralCCA : public Integral {
00045 private:
00046 int maxl_;
00047 bool use_opaque_;
00048 gov::cca::ComponentID fac_id_;
00049 gov::cca::ConnectionID fac_con_;
00050 Ref<Molecule> sc_molecule_;
00051 Chemistry::Chemistry_Molecule molecule_;
00052 std::string factory_type_;
00053 std::string package_;
00054
00055 SphericalTransform ***st_;
00056 ISphericalTransform ***ist_;
00057
00058 void free_transforms();
00059 void initialize_transforms();
00060 IntegralEvaluatorFactory eval_factory_;
00061
00062 public:
00063
00065 IntegralCCA(IntegralEvaluatorFactory eval_factory, bool use_opaque,
00066 const Ref<GaussianBasisSet> &b1=0,
00067 const Ref<GaussianBasisSet> &b2=0,
00068 const Ref<GaussianBasisSet> &b3=0,
00069 const Ref<GaussianBasisSet> &b4=0);
00070
00071 IntegralCCA(StateIn&);
00072
00092 IntegralCCA(const Ref<KeyVal>&);
00093
00094 ~IntegralCCA();
00095
00096 void save_data_state(StateOut&);
00097
00098 Integral* clone();
00099
00100 CartesianIter * new_cartesian_iter(int);
00101 RedundantCartesianIter * new_redundant_cartesian_iter(int);
00102 RedundantCartesianSubIter * new_redundant_cartesian_sub_iter(int);
00103 SphericalTransformIter * new_spherical_transform_iter(int l,
00104 int inv=0,
00105 int subl=-1);
00106 const SphericalTransform * spherical_transform(int l,
00107 int inv=0, int subl=-1);
00108
00109 Ref<OneBodyInt> overlap();
00110
00111 Ref<OneBodyInt> kinetic();
00112
00113 Ref<OneBodyInt> point_charge(const Ref<PointChargeData>& =0);
00114
00115 Ref<OneBodyInt> nuclear();
00116
00117 Ref<OneBodyInt> hcore();
00118
00119 Ref<OneBodyInt> efield_dot_vector(const Ref<EfieldDotVectorData>& =0);
00120
00121 Ref<OneBodyInt> dipole(const Ref<DipoleData>& =0);
00122
00123 Ref<OneBodyInt> quadrupole(const Ref<DipoleData>& =0);
00124
00125 Ref<OneBodyDerivInt> overlap_deriv();
00126
00127 Ref<OneBodyDerivInt> kinetic_deriv();
00128
00129 Ref<OneBodyDerivInt> nuclear_deriv();
00130
00131 Ref<OneBodyDerivInt> hcore_deriv();
00132
00133 Ref<TwoBodyInt> electron_repulsion();
00134
00135 Ref<TwoBodyDerivInt> electron_repulsion_deriv();
00136
00137 void set_basis(const Ref<GaussianBasisSet> &b1,
00138 const Ref<GaussianBasisSet> &b2 = 0,
00139 const Ref<GaussianBasisSet> &b3 = 0,
00140 const Ref<GaussianBasisSet> &b4 = 0);
00141 };
00142
00143 }
00144
00145 #endif
00146
00147
00148
00149
00150