Majoranapp
A C++ library for studying MZM in non-interacting systems
Hamiltonian.hpp
Go to the documentation of this file.
1 #ifndef HAMILTONIAN_HPP
2 #define HAMILTONIAN_HPP
3 
4 #include <armadillo>
5 #include "EnumGamma.hpp"
6 
12 template <class T>
14 {
15 
16  friend class Solver;
17 
18 private:
24  int deg;
25 
26 public:
30  int N;
41  Hamiltonian(int _N, int _deg) : deg{_deg}, N{_N}
42  {
43  elements.set_size(deg * N, deg * N);
44 
45  // [!] only for arma::mat
46  if constexpr (std::is_same<T, arma::mat>::value)
47  elements.fill(0);
48  }
49 
59  void InsertBlock(Gamma gammai, int i, Gamma gammaj, int j, double value)
60  {
61  int ishift = static_cast<int>(gammai) % deg;
62  int jshift = static_cast<int>(gammaj) % deg;
63  this->elements(deg * i + ishift, deg * j + jshift) += value;
64  }
65 
69  void Print()
70  {
71  this->elements.print();
72  }
73 };
74 
75 #endif
Hamiltonian class for counting MZM in non-interacting systems.
Definition: Hamiltonian.hpp:13
Hamiltonian(int _N, int _deg)
Construct a new Hamiltonian object.
Definition: Hamiltonian.hpp:41
int deg
number degree of freedom deg = 2 spinless systems deg = 4 spinfull systems (1/2 spin) ...
Definition: Hamiltonian.hpp:24
Gamma
enum class for gamma enumeration
Definition: EnumGamma.hpp:11
int N
number of sites
Definition: Hamiltonian.hpp:30
static solver
Definition: Solver.hpp:11
T elements
matrix element container
Definition: Hamiltonian.hpp:34
void Print()
display matrix elements
Definition: Hamiltonian.hpp:69
void InsertBlock(Gamma gammai, int i, Gamma gammaj, int j, double value)
insert block: value * gamma_i^alpha gamma_j^beta
Definition: Hamiltonian.hpp:59