Majoranapp
A C++ library for studying MZM in non-interacting systems
SpinfullUniform2D.hpp
Go to the documentation of this file.
1 #ifndef FACTORY_SPINFULLUNIFORM2D_HPP
2 #define FACTORY_SPINFULLUNIFORM2D_HPP
3 
4 #include "../Hamiltonian.hpp"
5 #include "../QuantumSystem.hpp"
6 #include "../Filler.hpp"
7 #include "../Info.hpp"
8 #include "../VectorViewers/Grid2DViewer.hpp"
9 
10 #include "../ConnectionsFiller.hpp"
11 
31 {
32 public:
33  template <class T>
34  static Hamiltonian<T> Generate(QuantumSystem &quantumSystem)
35  {
36  Dimensions &dimensions = quantumSystem.dimensions;
37  Parameters &parameters = quantumSystem.parameters;
38 
39  int deg = 4;
40  int length = dimensions.GetLength();
41  int width = dimensions.GetWidth();
42 
43  // check height for warning
44  int height = dimensions.GetHeight();
45  Info::DimensionsWarningOnly2D(length, width, height);
46 
47  int N = length * width;
48 
49  Hamiltonian<T> ham(N, deg);
50 
51  // local terms
52  for (int i = 0; i < N; i++)
53  {
54  Filler<Spinfull::ProxTerm>::Fill(ham, parameters, i);
55  Filler<Spinfull::ZeemanXTerm>::Fill(ham, parameters, i);
56  Filler<Spinfull::ZeemanYTerm>::Fill(ham, parameters, i);
57  Filler<Spinfull::ZeemanZTerm>::Fill(ham, parameters, i);
58  Filler<Spinfull::ChemicalTerm>::Fill(ham, parameters, i);
59  }
60 
61  // x-direction links
62  for (int y = 0; y < width; y++)
63  {
64  for (int x = 0; x < length - 1; x++)
65  {
66  int from = y * length + x;
67  int to = y * length + x + 1;
68  //std::cout << "(" << from << ", " << to << ")" << std::endl;
69  Filler<Spinfull::KineticTerm>::Fill(ham, parameters, from, to);
70  //Filler<Spinfull::RashbaXTerm>::Fill(ham, parameters, from, to);
71  Filler<Spinfull::RashbaYTerm>::Fill(ham, parameters, from, to);
72  }
73  }
74 
75  //std::cout << std::endl;
76 
77  // y-direction links
78  for (int x = 0; x < length; x++)
79  {
80  for (int y = 0; y < width - 1; y++)
81  {
82  int from = y * length + x;
83  int to = (y + 1) * length + x;
84  //std::cout << "(" << from << ", " << to << ")" << std::endl;
85  Filler<Spinfull::KineticTerm>::Fill(ham, parameters, from, to);
86  Filler<Spinfull::RashbaXTerm>::Fill(ham, parameters, from, to);
87  //Filler<Spinfull::RashbaYTerm>::Fill(ham, parameters, from, to);
88  }
89  }
90 
91  return ham;
92  }
93 
94  static constexpr char name[] = "SpinfullUniform2D";
95 
96 };
97 
98 #endif
Parameters parameters
Definition: QuantumSystem.hpp:15
Hamiltonian class for counting MZM in non-interacting systems.
Definition: Hamiltonian.hpp:13
static constexpr char name[]
Definition: SpinfullUniform2D.hpp:94
displays vectors with sites numbered in 2D grid,
Definition: Grid2DViewer.hpp:16
Spinfull 2D plaquette with open boundary conditions.
Definition: SpinfullUniform2D.hpp:30
Dimensions dimensions
Definition: QuantumSystem.hpp:16
static Hamiltonian< T > Generate(QuantumSystem &quantumSystem)
Definition: SpinfullUniform2D.hpp:34
class containing all information about quantum system, which is needed for hamiltonian construction ...
Definition: QuantumSystem.hpp:12
static void Fill(Hamiltonian< T > &ham, Targs... Fargs)
Definition: Filler.hpp:51
static void DimensionsWarningOnly2D(int length, int width, int height)
checks if height is equal 0
Definition: DimensionsWarning.hpp:35