ergo
Main Page
Namespaces
Classes
Files
File List
File Members
SizesAndBlocks.h
Go to the documentation of this file.
1
/* Ergo, version 3.2, a program for linear scaling electronic structure
2
* calculations.
3
* Copyright (C) 2012 Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek.
4
*
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
*
18
* Primary academic reference:
19
* KohnâSham Density Functional Theory Electronic Structure Calculations
20
* with Linearly Scaling Computational Time and Memory Usage,
21
* Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek,
22
* J. Chem. Theory Comput. 7, 340 (2011),
23
* <http://dx.doi.org/10.1021/ct100611z>
24
*
25
* For further information about Ergo, see <http://www.ergoscf.org>.
26
*/
27
28
#ifndef MAT_SIZESANDBLOCKS
29
#define MAT_SIZESANDBLOCKS
30
#include "
matInclude.h
"
31
namespace
mat{
32
37
class
SizesAndBlocks
{
38
public
:
40
SizesAndBlocks
()
41
:
nBlocks
(0),
nScalars
(0),
offset
(0),
nTotalScalars
(0) {}
43
SizesAndBlocks
(
SizesAndBlocks
const
& other);
48
SizesAndBlocks
(std::vector<int>
const
& blockSizesInp,
49
int
const
nScalarsInp)
50
:
nBlocks
(0),
51
nScalars
(nScalarsInp),
offset
(0),
nTotalScalars
(nScalarsInp) {
52
setup
(blockSizesInp);
53
}
55
SizesAndBlocks
&
operator
=
56
(
SizesAndBlocks
const
& other);
57
58
bool
operator==
(
SizesAndBlocks
const
& other)
const
;
59
60
SizesAndBlocks
61
getSizesAndBlocksForLowerLevel
(
int
const
blockNumber)
const
;
62
63
inline
bool
is_empty
()
const
{
return
blockSizes
.empty();}
64
inline
int
const
&
getNBlocks
()
const
{
return
nBlocks
;}
65
inline
int
const
&
getNScalars
()
const
{
return
nScalars
;}
66
void
getBlockSizeVector
(std::vector<int> & blockSizesCopy)
const
;
71
inline
int
whichBlock
(
int
const
globalIndex)
const
{
72
return
(globalIndex -
offset
) /
blockSizes
[0];
/* Integer division */
73
}
74
75
inline
int
getOffset
()
const
{
return
offset
;}
76
inline
int
getNTotalScalars
()
const
{
return
nTotalScalars
;}
77
~SizesAndBlocks
() {}
78
protected
:
79
std::vector<int>
blockSizes
;
87
int
nBlocks
;
92
int
nScalars
;
93
int
offset
;
94
int
nTotalScalars
;
96
SizesAndBlocks
(std::vector<int>
const
& blockSizesInp,
97
int
const
nScalarsInp,
98
int
const
offsetInp,
99
int
const
nTotalScalarsInp)
100
:
nBlocks
(0),
101
nScalars
(nScalarsInp),
offset
(offsetInp),
102
nTotalScalars
(nTotalScalarsInp) {
103
setup
(blockSizesInp);
104
}
105
106
void
setup
(std::vector<int>
const
& blockSizesInp);
107
108
private
:
109
};
/* end of class SizesAndBlocks */
110
111
}
/* end namespace mat */
112
#endif
source
matrix
SizesAndBlocks.h
Generated on Mon Oct 8 2012 20:06:02 for ergo by
1.8.1.1