ergo
SizesAndBlocks.h
Go to the documentation of this file.
1 /* Ergo, version 3.3, a program for linear scaling electronic structure
2  * calculations.
3  * Copyright (C) 2013 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:
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 
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;}
78  protected:
79  std::vector<int> blockSizes;
87  int nBlocks;
92  int nScalars;
93  int offset;
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
int whichBlock(int const globalIndex) const
Returns the blocknumber (between 0 and nBlocks-1) that contains elements with the given global index...
Definition: SizesAndBlocks.h:71
SizesAndBlocks getSizesAndBlocksForLowerLevel(int const blockNumber) const
Definition: SizesAndBlocks.cc:63
void getBlockSizeVector(std::vector< int > &blockSizesCopy) const
Definition: SizesAndBlocks.cc:79
int getOffset() const
Definition: SizesAndBlocks.h:75
int getNTotalScalars() const
Definition: SizesAndBlocks.h:76
int nScalars
Number of scalars in the current block.
Definition: SizesAndBlocks.h:92
~SizesAndBlocks()
Definition: SizesAndBlocks.h:77
int offset
Offset in entire system.
Definition: SizesAndBlocks.h:93
Describes dimensions of matrix and its blocks on all levels.
Definition: SizesAndBlocks.h:37
bool operator==(SizesAndBlocks const &other) const
Definition: SizesAndBlocks.cc:48
void setup(std::vector< int > const &blockSizesInp)
Definition: SizesAndBlocks.cc:84
bool is_empty() const
Definition: SizesAndBlocks.h:63
int const & getNScalars() const
Definition: SizesAndBlocks.h:65
std::vector< int > blockSizes
This is the number of scalars in each block, (not the number of blocks in each block) for each level ...
Definition: SizesAndBlocks.h:79
int nBlocks
This is the number of blocks in the current block.
Definition: SizesAndBlocks.h:87
int nTotalScalars
Total number of scalars in entire system.
Definition: SizesAndBlocks.h:94
SizesAndBlocks(std::vector< int > const &blockSizesInp, int const nScalarsInp, int const offsetInp, int const nTotalScalarsInp)
Definition: SizesAndBlocks.h:96
SizesAndBlocks()
Default constructor.
Definition: SizesAndBlocks.h:40
Copyright(c) Emanuel Rubensson 2006.
int const & getNBlocks() const
Definition: SizesAndBlocks.h:64
SizesAndBlocks(std::vector< int > const &blockSizesInp, int const nScalarsInp)
Constructor used for explicit calls.
Definition: SizesAndBlocks.h:48