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_cints_shellpairs_h
00033 #define _chemistry_qc_cints_shellpairs_h
00034
00035 #include <util/ref/ref.h>
00036 #include <chemistry/qc/basis/basis.h>
00037 #include <chemistry/qc/cints/primpairs.h>
00038
00039 namespace sc {
00040
00041 class ShellPairsCints;
00042
00044 class ShellPairCints : virtual public SavableState {
00045 int prim1_offset_;
00046 int prim2_offset_;
00047 Ref<PrimPairsCints> prim_pairs_;
00048
00049 friend void init_shell_pair(ShellPairsCints&);
00050
00051 public:
00052 ShellPairCints(Ref<PrimPairsCints>&);
00053 ShellPairCints(StateIn&);
00054 ~ShellPairCints();
00055
00056 void save_data_state(StateOut&);
00057
00058 void init(const int,
00059 const int);
00060
00061 prim_pair_t* prim_pair(int p1, int p2) const { return prim_pairs_->prim_pair(p1+prim1_offset_,p2+prim2_offset_); };
00062 double prim_pair_P(int p1, int p2, int xyz) const { return prim_pairs_->P(p1+prim1_offset_,p2+prim2_offset_,xyz); };
00063 double prim_pair_gamma(int p1, int p2) const { return prim_pairs_->gamma(p1+prim1_offset_,p2+prim2_offset_); };
00064 double prim_pair_ovlp(int p1, int p2) const { return prim_pairs_->ovlp(p1+prim1_offset_,p2+prim2_offset_); }
00065 };
00066
00067
00069 class ShellPairsCints: virtual public SavableState {
00070 Ref<GaussianBasisSet> bs1_;
00071 Ref<GaussianBasisSet> bs2_;
00072 Ref<PrimPairsCints> prim_pairs_;
00073 Ref<ShellPairCints> shell_pair_;
00074
00075 public:
00076 ShellPairsCints(const Ref<GaussianBasisSet>&,
00077 const Ref<GaussianBasisSet>&);
00078 ShellPairsCints(const Ref<ShellPairsCints>&);
00079 ShellPairsCints(const Ref<KeyVal>&);
00080 ShellPairsCints(StateIn&);
00081
00082 ~ShellPairsCints();
00083
00084 void save_data_state(StateOut&);
00085
00086 friend void init_shell_pair(ShellPairsCints&);
00087 ShellPairCints* shell_pair(int si, int sj) const {
00088 shell_pair_->init(bs1_->shell_to_primitive(si), bs2_->shell_to_primitive(sj));
00089 return shell_pair_.pointer();
00090 }
00091 };
00092
00093 }
00094
00095 #endif
00096
00097
00098
00099
00100