MPQC 2.3.1
|
00001 // 00002 // intcca.h 00003 // 00004 // Copyright (C) 2004 Sandia National Laboratories 00005 // 00006 // Author: Joe Kenny <jpkenny@sandia.gov> 00007 // Maintainer: Joe Kenny 00008 // 00009 // This file is part of the SC Toolkit. 00010 // 00011 // The SC Toolkit is free software; you can redistribute it and/or modify 00012 // it under the terms of the GNU Library General Public License as published by 00013 // the Free Software Foundation; either version 2, or (at your option) 00014 // any later version. 00015 // 00016 // The SC Toolkit is distributed in the hope that it will be useful, 00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 // GNU Library General Public License for more details. 00020 // 00021 // You should have received a copy of the GNU Library General Public License 00022 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to 00023 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 00024 // 00025 // The U.S. Government is granted a limited license as per AL 91-7. 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 // Local Variables: 00148 // mode: c++ 00149 // c-file-style: "CLJ" 00150 // End: