|
MPQC
2.3.1
|
R12IntsAcc accumulates transformed (MO) integrals stored as (ijxy) where i, j, x, and, y lie in spaces I, J, X, and Y, respectively. More...
#include <r12ia.h>


Public Types | |
| enum | tbint_type { eri =0, r12 =1, r12t1 =2, r12t2 =3 } |
| Types of two-body operators that R12IntsAcc understands. | |
Public Member Functions | |
| R12IntsAcc (int num_te_types, int ni, int nj, int nx, int ny) | |
| R12IntsAcc (StateIn &) | |
| void | save_data_state (StateOut &) |
| Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR initializes them. More... | |
| int | num_te_types () const |
| The number of types of integrals that are being handled together. | |
| int | ni () const |
| Rank of index space i. | |
| int | nj () const |
| Rank of index space j. | |
| int | nx () const |
| Rank of index space x. | |
| int | ny () const |
| Rank of index space y. | |
| size_t | blocksize () const |
| Size of each block of the integrals of one type, in double words. | |
| int | next_orbital () const |
| The index of the first orbital in the next integrals batch to be stored. | |
| virtual void | store_memorygrp (Ref< MemoryGrp > &mem, int ni, const size_t blksize=0)=0 |
| Stores all pair block of integrals held in mem in a layout assumed throughout MBPT2_R12. More... | |
| virtual void | store_pair_block (int i, int j, double *ints)=0 |
| All member functions of this class and its children indices i and j don't include frozen orbitals Stores an ij pair block of integrals (assumes the block resides locally) | |
| virtual void | commit () |
| Commit the content of the accumulator for reading. | |
| bool | is_committed () |
| Has the content of the accumulator been commited for reading? | |
| virtual void | activate () |
| Call before starting to read content. | |
| virtual void | deactivate () |
| Call when done reading content. | |
| const bool | is_active () |
| Check if can read content. | |
| virtual double * | retrieve_pair_block (int i, int j, tbint_type oper_type)=0 |
| Retrieves an ij pair block of integrals. | |
| virtual void | release_pair_block (int i, int j, tbint_type oper_type)=0 |
| Releases an ij pair block of integrals (if needed) | |
| virtual bool | is_local (int i, int j) const =0 |
| Is this block stored locally? | |
| virtual bool | is_avail (int i, int j) const =0 |
| Is this block available to this task? | |
| virtual bool | has_access (int proc) const =0 |
| Does this task have access to all the integrals? | |
| int | tasks_with_access (vector< int > &twa_map) const |
| Returns the total number of tasks with access to integrals. More... | |
| virtual bool | can_restart () const =0 |
| Can this specialization be used in restarts? | |
Public Member Functions inherited from sc::SavableState | |
| SavableState & | operator= (const SavableState &) |
| void | save_state (StateOut &) |
| Save the state of the object as specified by the StateOut object. More... | |
| void | save_object_state (StateOut &) |
| This can be used for saving state when the exact type of the object is known for both the save and the restore. More... | |
| virtual void | save_vbase_state (StateOut &) |
| Save the virtual bases for the object. More... | |
Public Member Functions inherited from sc::DescribedClass | |
| DescribedClass (const DescribedClass &) | |
| DescribedClass & | operator= (const DescribedClass &) |
| ClassDesc * | class_desc () const throw () |
| This returns the unique pointer to the ClassDesc corresponding to the given type_info object. More... | |
| const char * | class_name () const |
| Return the name of the object's exact type. | |
| int | class_version () const |
| Return the version of the class. | |
| virtual void | print (std::ostream &=ExEnv::out0()) const |
| Print the object. | |
Public Member Functions inherited from sc::RefCount | |
| int | lock_ptr () const |
| Lock this object. | |
| int | unlock_ptr () const |
| Unlock this object. | |
| void | use_locks (bool inVal) |
| start and stop using locks on this object | |
| refcount_t | nreference () const |
| Return the reference count. | |
| refcount_t | reference () |
| Increment the reference count and return the new count. | |
| refcount_t | dereference () |
| Decrement the reference count and return the new count. | |
| int | managed () const |
| void | unmanage () |
| Turn off the reference counting mechanism for this object. More... | |
| int | managed () const |
| Return 1 if the object is managed. Otherwise return 0. | |
Public Member Functions inherited from sc::Identity | |
| Identifier | identifier () |
| Return the Identifier for this argument. More... | |
Static Public Attributes | |
| static const int | max_num_te_types_ = 4 |
Protected Member Functions | |
| virtual int | ntasks () const =0 |
| total number of tasks | |
| virtual int | taskid () const =0 |
| ID of this task. | |
| void | inc_next_orbital (int ni) |
| The index of the first orbital in the next integrals batch to be stored. | |
Protected Member Functions inherited from sc::SavableState | |
| SavableState (const SavableState &) | |
| SavableState (StateIn &) | |
| Each derived class StateIn CTOR handles the restore corresponding to calling save_object_state, save_vbase_state, and save_data_state listed above. More... | |
Protected Member Functions inherited from sc::RefCount | |
| RefCount (const RefCount &) | |
| RefCount & | operator= (const RefCount &) |
Protected Attributes | |
| int | ni_ |
| int | nj_ |
| int | nx_ |
| int | ny_ |
| size_t | nxy_ |
| size_t | blksize_ |
| size_t | blocksize_ |
| int | next_orbital_ |
| bool | committed_ |
| bool | active_ |
Additional Inherited Members | |
Static Public Member Functions inherited from sc::SavableState | |
| static void | save_state (SavableState *s, StateOut &) |
| static SavableState * | restore_state (StateIn &si) |
| Restores objects saved with save_state. More... | |
| static SavableState * | key_restore_state (StateIn &si, const char *keyword) |
| Like restore_state, but keyword is used to override values while restoring. | |
| static SavableState * | dir_restore_state (StateIn &si, const char *objectname, const char *keyword=0) |
R12IntsAcc accumulates transformed (MO) integrals stored as (ijxy) where i, j, x, and, y lie in spaces I, J, X, and Y, respectively.
ijxy is only the storage format, the actual type may be (ix|jy), (ij|xy), etc.
Transformed integrals are usually computed using a parallel MO integrals transformation procedure. In general, such transformations will require multiple passes through AO integrals. Each pass produces a batch of transformed integrals. For example, a batch in direct parallel MP2 energy algorithm is a set of integrals {(ix|jy)} in which i indices are in a finite subrange of O and x, j, and y take any of their allowed values. For example, if batch I contains all integrals (ix|jy) with i greater than or equal m but less than n, then batch I+1 contains integrals (ix|jy) with i greater than n. Integrals in batch 0 have indices i greater than or equal to 0.
After each pass the MO integrals are contained in a MemoryGrp object. The object is "stored" in accumulator using store_memorygrp(Ref<MemoryGrp>& mem, int ni). After all batches have been stored, the content of R12IntsAcc needs to be "committed" using commit(). After that blocks of MO integrals can be accessed using retrieve_pair_block.
|
virtual |
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR initializes them.
This must be implemented by the derived class if the class has data.
Reimplemented from sc::SavableState.
Reimplemented in sc::R12IntsAcc_MPIIOFile_Ind, sc::R12IntsAcc_MPIIOFile, sc::R12IntsAcc_Node0File, and sc::R12IntsAcc_MemoryGrp.
|
pure virtual |
Stores all pair block of integrals held in mem in a layout assumed throughout MBPT2_R12.
Let's suppose the number of tasks is nproc, nj is the number of j indices, ni is the number of i indices of integrals held in mem at the moment. Then all integrals with a given i and j are stored on task (i*nj+j)/nproc and this ij block is (i*nj+j)nproc -th block on this task. Each ij block contains num_te_types_ subblocks of integrals. Each subblock of integrals has blksize bytes allocated for it. Note that blksize may be larger than blksize_ because an ij-block of partially transformed integrals may be larger than the block of fully transformed integrals.
Implemented in sc::R12IntsAcc_MPIIOFile_Ind, sc::R12IntsAcc_Node0File, and sc::R12IntsAcc_MemoryGrp.
| int sc::R12IntsAcc::tasks_with_access | ( | vector< int > & | twa_map | ) | const |
Returns the total number of tasks with access to integrals.
If task i has access to the integrals, then twa_map[i] is its index among the tasks with access, -1 otherwise.