SOLIDstate
A C++ library for solid state physics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
Geometry.hpp
Go to the documentation of this file.
1 
11 #ifndef GEOMETRY_GEOMETRY_HPP
12 #define GEOMETRY_GEOMETRY_HPP
13 
14 #include <string>
15 #include <map>
16 #include <armadillo>
17 #include "../Parameters/Parameters.hpp"
18 
19 namespace solid
20 {
21 
27 template <typename T>
28 using initList = std::initializer_list<std::pair<const std::string, T>>;
29 
35 template <typename T>
36 using uniformParameters = std::map<std::string, T>;
37 
43 template <typename T>
44 class IGeometry
45 {
46  virtual void Create(int L, std::string key, T value) = 0;
47 };
48 
54 template <typename T>
55 class Geometry
56 {
57 public:
58  //std::map<std::string, arma::SpMat<T>> parameters;
60 
61  friend Geometry<T> operator+(const Geometry<T> geometry1, const Geometry<T> geometry2)
62  {
63  Geometry<T> ret;
64  // TODO
65  // check if geometry1 and geometry2 have the same dimensions
66  int L = geometry1.parameters.begin()->second.n_cols;
67  for (auto const &[key, value] : geometry1.parameters)
68  {
69  ret.parameters[key].set_size(L, L);
70  ret.parameters[key] += value;
71  }
72  for (auto const &[key, value] : geometry2.parameters)
73  {
74  ret.parameters[key].set_size(L, L);
75  ret.parameters[key] += value;
76  }
77  return ret;
78  }
79 };
80 
81 } // namespace solid
82 
83 #endif
virtual void Create(int L, std::string key, T value)=0
Geometry parrent class.
Definition: Geometry.hpp:55
class for Parameters storing for generating IHamiltonian, Observable
Definition: Parameters.hpp:29
std::initializer_list< std::pair< const std::string, T >> initList
typedef for initializer_list
Definition: Geometry.hpp:28
Parameters< T > parameters
Definition: Geometry.hpp:59
Interface for Geometry class.
Definition: Geometry.hpp:44
std::map< std::string, T > uniformParameters
typedef for map<std::string, T>
Definition: Geometry.hpp:36
friend Geometry< T > operator+(const Geometry< T > geometry1, const Geometry< T > geometry2)
Definition: Geometry.hpp:61