TBTK
Need a break? Support the development by playing Polarity Puzzles
ModelFactory.h
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 
17 
24 #ifndef COM_DAFER45_TBTK_MODEL_FACTORY
25 #define COM_DAFER45_TBTK_MODEL_FACTORY
26 
27 #include "TBTK/Geometry.h"
28 #include "TBTK/Model.h"
29 #include "TBTK/StateSet.h"
30 #include "TBTK/StateTreeNode.h"
31 #include "TBTK/UnitCell.h"
32 
33 #include <complex>
34 #include <initializer_list>
35 
36 namespace TBTK{
37 
38 class ModelFactory{
39 public:
50  static Model* createSquareLattice(
51  std::initializer_list<int> size,
52  std::initializer_list<bool> periodic,
53  std::complex<double> t
54  );
55 
67  static Model* createHexagonalLattice(
68  std::initializer_list<int> size,
69  std::initializer_list<bool> periodic,
70  std::complex<double> t
71  );
72 
74  static Model* createModel(
75  const StateSet &stateSet,
76  const AbstractOperator &o = DefaultOperator()
77  );
78 
80  static Model* createModel(
81  const StateSet &stateSet,
82  const StateTreeNode &stateTreeNode,
83  const AbstractOperator &o = DefaultOperator()
84  );
85 
101  static Model* createModel(
102  const UnitCell &unitCell,
103  std::initializer_list<int> size,
104  std::initializer_list<bool> periodic,
105  const bool *includedCells = NULL,
106  const AbstractOperator &o = DefaultOperator()
107  );
108 
110  static void addSquareGeometry(
111  Model *model,
112  std::initializer_list<int> size
113  );
114 
116  static void addHexagonalGeometry(
117  Model *model,
118  std::initializer_list<int> size
119  );
120 
122  static Model* merge(
123  std::initializer_list<Model*> models
124  );
125 private:
127  static void createSquareLattice1D(
128  Model *model,
129  std::initializer_list<int> size,
130  std::initializer_list<bool> periodic,
131  std::complex<double> t
132  );
133 
135  static void createSquareLattice2D(
136  Model *model,
137  std::initializer_list<int> size,
138  std::initializer_list<bool> periodic,
139  std::complex<double> t
140  );
141 
143  static void createSquareLattice3D(
144  Model *model,
145  std::initializer_list<int> size,
146  std::initializer_list<bool> periodic,
147  std::complex<double> t
148  );
149 
151  static Model* createModel1D(
152  const UnitCell &unitCell,
153  std::initializer_list<int> size,
154  std::initializer_list<bool> periodic,
155  const bool *includedCells,
156  const AbstractOperator &o
157  );
158 
160  static Model* createModel2D(
161  const UnitCell &unitCell,
162  std::initializer_list<int> size,
163  std::initializer_list<bool> periodic,
164  const bool *includedCells,
165  const AbstractOperator &o
166  );
167 
169  static Model* createModel3D(
170  const UnitCell &unitCell,
171  std::initializer_list<int> size,
172  std::initializer_list<bool> periodic,
173  const bool *includedCells,
174  const AbstractOperator &o
175  );
176 
178  static void addSquareGeometry1D(
179  Model *model,
180  std::initializer_list<int> size
181  );
182 
184  static void addSquareGeometry2D(
185  Model *model,
186  std::initializer_list<int> size
187  );
188 
190  static void addSquareGeometry3D(
191  Model *model,
192  std::initializer_list<int> size
193  );
194 };
195 
196 }; //End of namespace TBTK
197 
198 #endif
199 
Container of Model related information.
Definition: Boolean.h:32
Contains geometric inforamtion about a Model.