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_mbptr12_r12ia_h
00029 #define _chemistry_qc_mbptr12_r12ia_h
00030
00031 #ifdef __GNUC__
00032 #pragma interface
00033 #endif
00034
00035 #include <vector>
00036 #include <util/ref/ref.h>
00037 #include <util/state/state.h>
00038 #include <util/state/statein.h>
00039 #include <util/state/stateout.h>
00040 #include <util/group/memory.h>
00041 #include <chemistry/qc/basis/tbint.h>
00042
00043 using namespace std;
00044
00045 namespace sc {
00046
00048
00069 class R12IntsAcc: virtual public SavableState {
00070 public:
00071
00072 R12IntsAcc(int num_te_types, int ni, int nj, int nx, int ny);
00073 R12IntsAcc(StateIn&);
00074 virtual ~R12IntsAcc();
00075 void save_data_state(StateOut&);
00076
00078 typedef unsigned int tbint_type;
00079 static const unsigned int max_num_te_types_ = TwoBodyInt::max_num_tbint_types;
00080
00082 int num_te_types() const { return num_te_types_; };
00084 int ni() const { return ni_; }
00086 int nj() const { return nj_; }
00088 int nx() const { return nx_; }
00090 int ny() const { return ny_; }
00092 size_t blocksize() const { return blocksize_; };
00093
00094 size_t blksize() const { return blksize_; }
00095
00097 virtual void activate() { active_ = true; }
00099 virtual void deactivate() { active_ = false; }
00101 virtual bool data_persistent() const =0;
00103 virtual const double * retrieve_pair_block(int i, int j, tbint_type oper_type) const =0;
00105 virtual void release_pair_block(int i, int j, tbint_type oper_type) const =0;
00107 virtual void store_pair_block(int i, int j, tbint_type oper_type, const double* ints) =0;
00108
00109 int ij_index(int i, int j) const { return i*nj_ + j; };
00110
00112 virtual bool is_avail(int i, int j) const =0;
00114 virtual bool is_local(int i, int j) const =0;
00116 virtual bool has_access(int proc) const =0;
00120 int tasks_with_access(vector<int>& twa_map) const;
00121
00122 private:
00124 static const int classdebug_ = 0;
00125
00126 int num_te_types_;
00127 Ref<MessageGrp> msg_;
00128 int ni_, nj_;
00129 int nx_, ny_;
00130 size_t nxy_;
00131 size_t blksize_;
00132 size_t blocksize_;
00133
00134 bool active_;
00135
00136 protected:
00137
00138 size_t nxy() const { return nxy_; }
00139
00140 bool active() const { return active_; }
00142 int ntasks() const { return msg_->n(); }
00144 int me() const { return msg_->me(); }
00146 int classdebug() const { return classdebug_; }
00147
00148 };
00149
00150
00151 namespace detail {
00152
00165 void store_memorygrp(Ref<R12IntsAcc>& acc, Ref<MemoryGrp>& mem, int i_offset,
00166 int ni, const size_t blksize_memgrp = 0);
00167
00170 void restore_memorygrp(Ref<R12IntsAcc>& acc, Ref<MemoryGrp>& mem, int i_offset,
00171 int ni, const size_t blksize_memgrp = 0);
00172
00173 }
00174
00175 }
00176
00177 #endif
00178
00179
00180
00181
00182