---
name: "sc_R12IntsAcc"
section: "3"
platform: "linux"
package: "libsc-doc"
version: "2.3.1-22"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/sc_R12IntsAcc"
---

# sc\_R12IntsAcc(3)

R12IntsAcc accumulates transformed (MO) integrals stored as (ijxy) where i, j, x, and, y lie in spaces I, J, X, and Y, respectively.

## NAME

sc::R12IntsAcc - **R12IntsAcc** accumulates transformed (MO) integrals stored as (ijxy) where i, j, x, and, y lie in spaces I, J, **X**, and **Y**, respectively.

## SYNOPSIS

`#include <r12ia.h>`

Inherits **sc::SavableState**.

Inherited by **sc::R12IntsAcc\_MPIIOFile**, **sc::R12IntsAcc\_MemoryGrp**, and **sc::R12IntsAcc\_Node0File**.

### 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.  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**.  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.  virtual bool **can\_restart** () const =0\
 Can this specialization be used in restarts?

### 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 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

## Detailed Description

**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`**.**

## Member Function Documentation

### virtual void sc::R12IntsAcc::activate ()` [virtual]`

**Call before starting to read content.**

**Reimplemented in sc::R12IntsAcc\_MPIIOFile, and sc::R12IntsAcc\_Node0File.**

### virtual bool sc::R12IntsAcc::can\_restart () const` [pure virtual]`

**Can this specialization be used in restarts?**

**Implemented in sc::R12IntsAcc\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile, and sc::R12IntsAcc\_Node0File.**

### virtual void sc::R12IntsAcc::commit ()` [virtual]`

**Commit the content of the accumulator for reading.**

**Reimplemented in sc::R12IntsAcc\_MPIIOFile, and sc::R12IntsAcc\_Node0File.**

### virtual void sc::R12IntsAcc::deactivate ()` [virtual]`

**Call when done reading content.**

**Reimplemented in sc::R12IntsAcc\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile, and sc::R12IntsAcc\_Node0File.**

### virtual bool sc::R12IntsAcc::has\_access (int proc) const` [pure virtual]`

**Does this task have access to all the integrals?**

**Implemented in sc::R12IntsAcc\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile, and sc::R12IntsAcc\_Node0File.**

### virtual bool sc::R12IntsAcc::is\_avail (int i, int j) const` [pure virtual]`

**Is this block available to this task?**

**Implemented in sc::R12IntsAcc\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile, and sc::R12IntsAcc\_Node0File.**

### virtual bool sc::R12IntsAcc::is\_local (int i, int j) const` [pure virtual]`

**Is this block stored locally?**

**Implemented in sc::R12IntsAcc\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile, and sc::R12IntsAcc\_Node0File.**

### virtual int sc::R12IntsAcc::ntasks () const` [protected]`, ` [pure virtual]`

**total number of tasks**

**Implemented in sc::R12IntsAcc\_MPIIOFile.**

### virtual void sc::R12IntsAcc::release\_pair\_block (int i, int j, tbint\_type oper\_type)` [pure virtual]`

**Releases an ij pair block of integrals (if needed)**

**Implemented in sc::R12IntsAcc\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile, and sc::R12IntsAcc\_Node0File.**

### virtual double \* sc::R12IntsAcc::retrieve\_pair\_block (int i, int j, tbint\_type oper\_type)` [pure virtual]`

**Retrieves an ij pair block of integrals.**

**Implemented in sc::R12IntsAcc\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile\_Ind, and sc::R12IntsAcc\_Node0File.**

### void sc::R12IntsAcc::save\_data\_state (StateOut &)` [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\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile, sc::R12IntsAcc\_MPIIOFile\_Ind, and sc::R12IntsAcc\_Node0File.**

### virtual void sc::R12IntsAcc::store\_memorygrp (Ref\< MemoryGrp \> & mem, int ni, const size\_t blksize = `0`)` [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\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile\_Ind, and sc::R12IntsAcc\_Node0File.**

### virtual void sc::R12IntsAcc::store\_pair\_block (int i, int j, double \* ints)` [pure virtual]`

**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)**

**Implemented in sc::R12IntsAcc\_MemoryGrp, sc::R12IntsAcc\_MPIIOFile, and sc::R12IntsAcc\_Node0File.**

### virtual int sc::R12IntsAcc::taskid () const` [protected]`, ` [pure virtual]`

**ID of this task.**

**Implemented in sc::R12IntsAcc\_MPIIOFile.**

### 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.**

## Author

**Generated automatically by Doxygen for MPQC from the source code.**
