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
00042 using namespace std;
00043
00044 namespace sc {
00045
00047
00070 class R12IntsAcc: virtual public SavableState {
00071
00072 int num_te_types_;
00073
00074 protected:
00075 int ni_, nj_;
00076 int nx_, ny_;
00077 size_t nxy_;
00078 size_t blksize_;
00079 size_t blocksize_;
00080
00081 int next_orbital_;
00082 bool committed_;
00083 bool active_;
00084
00086 virtual int ntasks() const =0;
00088 virtual int taskid() const =0;
00090 void inc_next_orbital(int ni);
00091
00092 public:
00093 R12IntsAcc(int num_te_types, int ni, int nj, int nx, int ny);
00094 R12IntsAcc(StateIn&);
00095 ~R12IntsAcc();
00096 void save_data_state(StateOut&);
00097
00099 enum tbint_type { eri=0, r12=1, r12t1=2, r12t2=3};
00100 static const int max_num_te_types_ = 4;
00101
00103 int num_te_types() const { return num_te_types_; };
00105 int ni() const { return ni_; }
00107 int nj() const { return nj_; }
00109 int nx() const { return nx_; }
00111 int ny() const { return ny_; }
00113 size_t blocksize() const { return blksize_; };
00115 int next_orbital() const;
00116
00129 virtual void store_memorygrp(Ref<MemoryGrp>& mem, int ni, const size_t blksize = 0) =0;
00133 virtual void store_pair_block(int i, int j, double *ints)=0;
00135 virtual void commit();
00137 bool is_committed() { return committed_; }
00139 virtual void activate();
00141 virtual void deactivate();
00143 const bool is_active() { return active_; }
00145 virtual double* retrieve_pair_block(int i, int j, tbint_type oper_type) =0;
00147 virtual void release_pair_block(int i, int j, tbint_type oper_type) =0;
00149 virtual bool is_local(int i, int j) const =0;
00151 virtual bool is_avail(int i, int j) const =0;
00153 virtual bool has_access(int proc) const =0;
00157 int tasks_with_access(vector<int>& twa_map) const;
00159 virtual bool can_restart() const =0;
00160 };
00161
00162 }
00163
00164 #endif
00165
00166
00167
00168
00169