TBTK
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 
23 #ifndef COM_DAFER45_TBTK_MODEL_FACTORY
24 #define COM_DAFER45_TBTK_MODEL_FACTORY
25 
26 #include "Model.h"
27 #include "Geometry.h"
28 #include "StateSet.h"
29 #include "StateTreeNode.h"
30 #include "UnitCell.h"
31 
32 #include <initializer_list>
33 #include <complex>
34 
35 namespace TBTK{
36 namespace Util{
37 
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 
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,
77  );
78 
80  static Model* createModel(
81  const StateSet &stateSet,
82  const StateTreeNode &stateTreeNode,
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 Util
197 }; //End of namespace TBTK
198 
199 #endif
Tree structure for quick access of multiple States.
Definition: StateTreeNode.h:38
Unit cell that act as container of States.
static void addHexagonalGeometry(Model *model, std::initializer_list< int > size)
Definition: ModelFactory.cpp:342
static Model * createSquareLattice(std::initializer_list< int > size, std::initializer_list< bool > periodic, std::complex< double > t)
Definition: ModelFactory.cpp:32
Model Hamiltonian.
static Model * merge(std::initializer_list< Model * > models)
Definition: ModelFactory.cpp:370
Definition: ModelFactory.h:38
static Model * createHexagonalLattice(std::initializer_list< int > size, std::initializer_list< bool > periodic, std::complex< double > t)
Definition: ModelFactory.cpp:67
Definition: AbstractOperator.h:30
static Model * createModel(const StateSet &stateSet, const AbstractOperator &o=DefaultOperator())
Definition: ModelFactory.cpp:111
Container for States.
Definition: UnitCell.h:30
Definition: AbstractOperator.h:26
static void addSquareGeometry(Model *model, std::initializer_list< int > size)
Definition: ModelFactory.cpp:319
Definition: DefaultOperator.h:30
Definition: StateSet.h:30
Definition: Model.h:40
Contains geometric inforamtion about a model.