TBTK
AmplitudeSet.h
Go to the documentation of this file.
1 /* Copyright 2016 Kristofer Björnson
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
23 #ifndef COM_DAFER45_TBTK_AMPLITUDE_SET
24 #define COM_DAFER45_TBTK_AMPLITUDE_SET
25 
26 #include "HoppingAmplitude.h"
27 #include "TreeNode.h"
28 #include "Streams.h"
29 #include "TBTKMacros.h"
30 
31 #include <vector>
32 #include <complex>
33 
34 namespace TBTK{
35 
46 public:
50 
52  AmplitudeSet();
53 
55  ~AmplitudeSet();
56 
60  void addHA(HoppingAmplitude ha);
61 
66 
71  const std::vector<HoppingAmplitude>* getHAs(Index index) const;
72 
76  int getBasisIndex(const Index &index) const;
77 
79  int getBasisSize() const;
80 
84  bool isProperSubspace(const Index &subspace);
85 
88  void construct();
89 
91  bool getIsConstructed() const;
92 
94  void sort();
95 
97  void constructCOO();
98 
100  void destructCOO();
101 
108  void reconstructCOO();
109 
112  int getNumMatrixElements() const;
113 
115  const int* getCOORowIndices() const;
116 
118  const int* getCOOColIndices() const;
119 
121  const std::complex<double>* getCOOValues() const;
122 
125  class Iterator{
126  public:
128  ~Iterator();
129 
131  void reset();
132 
134  void searchNextHA();
135 
137  const HoppingAmplitude* getHA() const;
138  private:
140  friend class AmplitudeSet;
141 
144  Iterator(const TreeNode *tree);
145 
147  TreeNode::Iterator* it;
148  };
149 
153 
158  AmplitudeSet::Iterator getIterator(const Index &subspace) const;
159 
161  void print();
162 
187  void tabulate(
188  std::complex<double> **amplitudes,
189  int **indices,
190  int *numHoppingAmplitudes,
191  int *maxIndexSize
192  ) const;
193 private:
195  bool isConstructed;
196 
198  bool isSorted;
199 
201  int numMatrixElements;
202 
204  int *cooRowIndices;
205 
207  int *cooColIndices;
208 
210  std::complex<double> *cooValues;
211 };
212 
214  tree.add(ha);
215 }
216 
218  tree.add(ha);
220 }
221 
222 inline const std::vector<HoppingAmplitude>* AmplitudeSet::getHAs(Index index) const{
223  return tree.getHAs(index);
224 }
225 
226 inline int AmplitudeSet::getBasisIndex(const Index &index) const{
227  return tree.getBasisIndex(index);
228 }
229 
230 inline int AmplitudeSet::getBasisSize() const{
231  return tree.basisSize;
232 }
233 
234 inline bool AmplitudeSet::isProperSubspace(const Index &subspace){
235  return tree.isProperSubspace(subspace);
236 }
237 
239  TBTKAssert(
240  !isConstructed,
241  "AmplitudeSet::construct()",
242  "AmplitudeSet is already constructed.",
243  ""
244  );
245 
247  isConstructed = true;
248 }
249 
250 inline bool AmplitudeSet::getIsConstructed() const{
251  return isConstructed;
252 }
253 
254 inline void AmplitudeSet::sort(){
255  TBTKAssert(
256  isConstructed,
257  "AmplitudeSet::sort()",
258  "AmplitudeSet has to be constructed first.",
259  ""
260  );
261 
262  if(!isSorted){
263  tree.sort(&tree);
264  isSorted = true;
265  }
266 }
267 
268 inline const int* AmplitudeSet::getCOORowIndices() const{
269  return cooRowIndices;
270 }
271 
272 inline const int* AmplitudeSet::getCOOColIndices() const{
273  return cooColIndices;
274 }
275 
276 inline const std::complex<double>* AmplitudeSet::getCOOValues() const{
277  return cooValues;
278 }
279 
280 }; //End of namespace TBTK
281 
282 #endif
void addHA(HoppingAmplitude ha)
Definition: AmplitudeSet.h:213
void sort()
Definition: AmplitudeSet.h:254
Definition: AmplitudeSet.h:125
void searchNextHA()
Definition: AmplitudeSet.cpp:179
void generateBasisIndices()
Definition: TreeNode.cpp:294
void sort(TreeNode *rootNode)
Definition: TreeNode.cpp:331
Hopping amplitude from state &#39;from&#39; to &#39;to&#39;.
const std::complex< double > * getCOOValues() const
Definition: AmplitudeSet.h:276
void reconstructCOO()
Definition: AmplitudeSet.cpp:148
Precompiler macros.
bool getIsConstructed() const
Definition: AmplitudeSet.h:250
bool isProperSubspace(const Index &subspace)
Definition: AmplitudeSet.h:234
void tabulate(std::complex< double > **amplitudes, int **indices, int *numHoppingAmplitudes, int *maxIndexSize) const
Definition: AmplitudeSet.cpp:187
bool isProperSubspace(const Index &subspace)
Definition: TreeNode.cpp:142
void constructCOO()
Definition: AmplitudeSet.cpp:58
AmplitudeSet::Iterator getIterator() const
Definition: AmplitudeSet.cpp:159
TreeNode tree
Definition: AmplitudeSet.h:49
const HoppingAmplitude * getHA() const
Definition: AmplitudeSet.cpp:183
void add(HoppingAmplitude ha)
Definition: TreeNode.cpp:49
void destructCOO()
Definition: AmplitudeSet.cpp:132
int basisSize
Definition: TreeNode.h:39
void addHAAndHC(HoppingAmplitude ha)
Definition: AmplitudeSet.h:217
Definition: HoppingAmplitude.h:42
const std::vector< HoppingAmplitude > * getHAs(Index index) const
Definition: TreeNode.cpp:177
~AmplitudeSet()
Definition: AmplitudeSet.cpp:38
Definition: TreeNode.h:33
Definition: Index.h:44
int getBasisIndex(const Index &index) const
Definition: AmplitudeSet.h:226
Definition: AbstractOperator.h:26
void reset()
Definition: AmplitudeSet.cpp:175
AmplitudeSet()
Definition: AmplitudeSet.cpp:28
int getNumMatrixElements() const
Definition: AmplitudeSet.cpp:47
int getBasisSize() const
Definition: AmplitudeSet.h:230
int getBasisIndex(const Index &index) const
Definition: TreeNode.cpp:205
const int * getCOORowIndices() const
Definition: AmplitudeSet.h:268
void construct()
Definition: AmplitudeSet.h:238
~Iterator()
Definition: AmplitudeSet.cpp:171
const int * getCOOColIndices() const
Definition: AmplitudeSet.h:272
Definition: TreeNode.h:87
Streams for TBTK output.
void print()
Definition: AmplitudeSet.cpp:155
Definition: AmplitudeSet.h:45
HoppingAmplitude getHermitianConjugate() const
Definition: HoppingAmplitude.cpp:108
const std::vector< HoppingAmplitude > * getHAs(Index index) const
Definition: AmplitudeSet.h:222
Node in tree used by AmplitudeSet to store HoppingAmplitudes .