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 R12IntsAcc(int num_te_types, int ni, int nj, int nx, int ny);
00072 R12IntsAcc(StateIn&);
00073 virtual ~R12IntsAcc();
00074 void save_data_state(StateOut&);
00075
00077 typedef unsigned int tbint_type;
00078 static const unsigned int max_num_te_types_ = TwoBodyInt::max_num_tbint_types;
00079
00081 int num_te_types() const { return num_te_types_; };
00083 int ni() const { return ni_; }
00085 int nj() const { return nj_; }
00087 int nx() const { return nx_; }
00089 int ny() const { return ny_; }
00091 size_t blocksize() const { return nxy_; };
00092
00094 virtual double* retrieve_pair_block(int i, int j, tbint_type oper_type) =0;
00096 virtual void release_pair_block(int i, int j, tbint_type oper_type) =0;
00098 virtual void store_pair_block(int i, int j, tbint_type oper_type, double *ints)=0;
00099
00101 virtual bool is_avail(int i, int j) const =0;
00103 virtual bool is_local(int i, int j) const =0;
00105 virtual bool has_access(int proc) const =0;
00109 int tasks_with_access(vector<int>& twa_map) const;
00110
00111 private:
00113 static const int classdebug_ = 0;
00114 int num_te_types_;
00115
00116 protected:
00117 int ni_, nj_;
00118 int nx_, ny_;
00119 size_t nxy_;
00120 size_t blksize_;
00121 size_t blocksize_;
00122
00123 int next_orbital_;
00124 bool committed_;
00125 bool active_;
00126
00128 virtual int ntasks() const =0;
00130 virtual int taskid() const =0;
00132 int classdebug() const { return classdebug_; }
00133
00134 };
00135
00136 #if 0 // this is either garbage or needs to become standalone function/class
00138 int next_orbital() const;
00140 virtual void commit();
00142 bool is_committed() { return committed_; }
00144 virtual void activate();
00146 virtual void deactivate();
00148 const bool is_active() { return active_; }
00150 void inc_next_orbital(int ni);
00151
00164 virtual void store_memorygrp(Ref<MemoryGrp>& mem, int ni, const size_t blksize = 0) =0;
00171 virtual void restore_memorygrp(Ref<MemoryGrp>& mem, int ioffset, int ni, const size_t blksize = 0) const =0;
00172 #endif
00173
00174 }
00175
00176 #endif
00177
00178
00179
00180
00181