TBTK
Geometry.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_GEOMETRY
24 #define COM_DAFER45_TBTK_GEOMETRY
25 
26 #include "Model.h"
27 #include <initializer_list>
28 
29 namespace TBTK{
30  class FileReader;
31 
32 class Geometry{
33 public:
35  Geometry(int dimensions, int numSpecifiers, Model *parentModel);
36 
38  ~Geometry();
39 
41  void setCoordinates(
42  const Index &index,
43  std::initializer_list<double> coordinates,
44  std::initializer_list<int> specifiers = {}
45  );
46 
48  void setCoordinates(
49  const Index &index,
50  const std::vector<double> &coordinates,
51  const std::vector<int> &specifiers = {}
52  );
53 
55  int getDimensions() const;
56 
58  int getNumSpecifiers() const;
59 
61  const double* getCoordinates(const Index &index) const;
62 
64  const double* getCoordinates(int index) const;
65 
67  const double* getCoordinates() const;
68 
70  void translate(std::initializer_list<double> translation);
71 
73  int getSpecifier(const Index &index, int specifier) const;
74 
76  int getSpecifier(int index, int specifier) const;
77 
79  const int* getSpecifiers(const Index &index) const;
80 
82  const int* getSpecifiers(int index) const;
83 
85  const int* getSpecifiers() const;
86 
89  double getDistance(const Index &index1, const Index &index2) const;
90 
93  double getDistance(int index1, int index2) const;
94 
96  int getBasisSize() const;
97 private:
99  unsigned int dimensions;
100 
102  unsigned int numSpecifiers;
103 
105  double *coordinates;
106 
108  int *specifiers;
109 
111  Model *parentModel;
112 
114  friend class FileReader;
115 };
116 
117 inline int Geometry::getDimensions() const{
118  return dimensions;
119 }
120 
121 inline int Geometry::getNumSpecifiers() const{
122  return numSpecifiers;
123 }
124 
125 inline const double* Geometry::getCoordinates(const Index &index) const{
126  return &(coordinates[dimensions*parentModel->getBasisIndex(index)]);
127 }
128 
129 inline const double* Geometry::getCoordinates(int index) const{
130  return &(coordinates[dimensions*index]);
131 }
132 
133 inline const double* Geometry::getCoordinates() const{
134  return coordinates;
135 }
136 
137 inline int Geometry::getSpecifier(const Index &index, int specifier) const{
138  return specifiers[numSpecifiers*parentModel->getBasisIndex(index) + specifier];
139 }
140 
141 inline int Geometry::getSpecifier(int index, int specifier) const{
142  return specifiers[numSpecifiers*index + specifier];
143 }
144 
145 inline const int* Geometry::getSpecifiers(const Index& index) const{
146  return &(specifiers[numSpecifiers*parentModel->getBasisIndex(index)]);
147 }
148 
149 inline const int* Geometry::getSpecifiers(const int index) const{
150  return &(specifiers[numSpecifiers*index]);
151 }
152 
153 inline const int* Geometry::getSpecifiers() const{
154  return specifiers;
155 }
156 
157 inline double Geometry::getDistance(int index1, int index2) const{
158  double distanceSquared = 0.;
159  for(unsigned int n = 0; n < dimensions; n++){
160  double difference = coordinates[index1] - coordinates[index2];
161  distanceSquared += difference*difference;
162  }
163 
164  return sqrt(distanceSquared);
165 }
166 
167 inline int Geometry::getBasisSize() const{
168  return parentModel->getBasisSize();
169 }
170 
171 }; //End of namespace TBTK
172 
173 #endif
int getBasisSize() const
Definition: Geometry.h:167
const double * getCoordinates() const
Definition: Geometry.h:133
~Geometry()
Definition: Geometry.cpp:41
Geometry(int dimensions, int numSpecifiers, Model *parentModel)
Definition: Geometry.cpp:29
Model Hamiltonian.
void translate(std::initializer_list< double > translation)
Definition: Geometry.cpp:109
const int * getSpecifiers() const
Definition: Geometry.h:153
int getDimensions() const
Definition: Geometry.h:117
Definition: FileReader.h:46
void setCoordinates(const Index &index, std::initializer_list< double > coordinates, std::initializer_list< int > specifiers={})
Definition: Geometry.cpp:47
int getNumSpecifiers() const
Definition: Geometry.h:121
Definition: Index.h:44
Definition: AbstractOperator.h:26
int getBasisSize()
Definition: Model.h:146
double getDistance(const Index &index1, const Index &index2) const
Definition: Geometry.cpp:125
Definition: Geometry.h:32
int getBasisIndex(Index index)
Definition: Model.h:150
Definition: Model.h:40
int getSpecifier(const Index &index, int specifier) const
Definition: Geometry.h:137