MPQC
2.3.1
Main Page
Related Pages
Classes
Files
File List
src
lib
chemistry
qc
mbptr12
r12ia_memgrp.h
1
//
2
// r12ia_memgrp.h
3
//
4
// Copyright (C) 2002 Edward Valeev
5
//
6
// Author: Edward Valeev <edward.valeev@chemistry.gatech.edu>
7
// Maintainer: EV
8
//
9
// This file is part of the SC Toolkit.
10
//
11
// The SC Toolkit is free software; you can redistribute it and/or modify
12
// it under the terms of the GNU Library General Public License as published by
13
// the Free Software Foundation; either version 2, or (at your option)
14
// any later version.
15
//
16
// The SC Toolkit is distributed in the hope that it will be useful,
17
// but WITHOUT ANY WARRANTY; without even the implied warranty of
18
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
// GNU Library General Public License for more details.
20
//
21
// You should have received a copy of the GNU Library General Public License
22
// along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23
// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24
//
25
// The U.S. Government is granted a limited license as per AL 91-7.
26
//
27
28
#ifndef _chemistry_qc_mbptr12_r12ia_memgrp_h
29
#define _chemistry_qc_mbptr12_r12ia_memgrp_h
30
31
#ifdef __GNUC__
32
#pragma interface
33
#endif
34
35
#include <util/ref/ref.h>
36
#include <util/group/memory.h>
37
#include <chemistry/qc/mbptr12/r12ia.h>
38
39
namespace
sc {
40
42
// R12IntsAcc_MemoryGrp handles transformed integrals held in memory
43
// by MemoryGrp
44
//
45
// The ordering of integrals in MemoryGrp buffers is not specified
46
// to avoid having to reorder integrals
47
// Each pair block has size of num_te_types*nbasis1*nbasis2
48
49
class
R12IntsAcc_MemoryGrp
:
public
R12IntsAcc
{
50
51
Ref<MemoryGrp>
mem_;
// The MemoryGrp used by this accumulator to store integrals
52
int
nproc_;
53
size_t
blksize_memgrp_;
// The size of the ij-block in held memory (may be larger than blksize_)
54
55
struct
PairBlkInfo {
56
double
*ints_[max_num_te_types_];
// blocks corresponding to each operator type
57
int
refcount_[max_num_te_types_];
// number of references
58
distsize_t
offset_;
// global Memgrp offset in bytes
59
} *pairblk_;
60
61
// Initialization tasks common to all constructors
62
void
init();
64
int
ntasks()
const
{
return
mem_->n(); }
66
int
taskid()
const
{
return
mem_->me(); }
67
68
public
:
69
R12IntsAcc_MemoryGrp
(
Ref<MemoryGrp>
&,
int
num_te_types
,
int
ni
,
int
nj
,
int
nx
,
int
ny
);
70
R12IntsAcc_MemoryGrp
(
StateIn
&);
71
~
R12IntsAcc_MemoryGrp
();
72
void
save_data_state
(
StateOut
&);
73
79
void
store_memorygrp
(
Ref<MemoryGrp>
& mem,
int
ni,
const
size_t
blksize);
81
void
store_pair_block
(
int
i,
int
j,
double
*ints);
84
void
deactivate
();
86
double
*
retrieve_pair_block
(
int
i,
int
j,
tbint_type
oper_type);
88
void
release_pair_block
(
int
i,
int
j,
tbint_type
oper_type);
90
bool
is_local
(
int
i,
int
j)
const
{
return
(ij_proc(i,j) == mem_->me());};
92
bool
is_avail
(
int
i,
int
j)
const
{
return
true
;};
94
bool
has_access
(
int
proc)
const
{
return
true
;};
96
bool
can_restart
()
const
{
return
false
; };
97
98
// Utility functions
99
int
ij_index(
int
i,
int
j)
const
{
return
i*nj_ + j; };
100
int
ij_proc(
int
i,
int
j)
const
{
return
ij_index(i,j)%nproc_;};
101
};
102
103
}
104
105
#endif
106
107
// Local Variables:
108
// mode: c++
109
// c-file-style: "CLJ"
110
// End:
Generated at Sun Aug 11 2013 06:45:32 for
MPQC
2.3.1 using the documentation package
Doxygen
1.8.3.1.