Majoranapp
A C++ library for studying MZM in non-interacting systems
SpinfullUniform3D.hpp
Go to the documentation of this file.
1 #ifndef FACTORY_SPINFULLUNIFORM3D_HPP
2 #define FACTORY_SPINFULLUNIFORM3D_HPP
3 
4 #include "../Hamiltonian.hpp"
5 #include "../QuantumSystem.hpp"
6 #include "../Filler.hpp"
7 #include "../VectorViewers/Grid3DViewer.hpp"
8 
31 {
32 private:
33  static int ToSite(int x, int y, int z, int L, int W)
34  {
35  return x + L * y + L * W * z;
36  }
37 
38 public:
39  template <class T>
40  static Hamiltonian<T> Generate(QuantumSystem &quantumSystem)
41  {
42  Dimensions &dimensions = quantumSystem.dimensions;
43  Parameters &parameters = quantumSystem.parameters;
44 
45  int deg = 4;
46  int length = dimensions.GetLength();
47  int width = dimensions.GetWidth();
48  int height = dimensions.GetHeight();
49  int N = length * width * height;
50 
51  Hamiltonian<T> ham(N, deg);
52 
53  // local terms
54  for (int i = 0; i < N; i++)
55  {
56  Filler<Spinfull::ChemicalTerm>::Fill(ham, parameters, i);
57  Filler<Spinfull::ProxTerm>::Fill(ham, parameters, i);
58  Filler<Spinfull::ZeemanXTerm>::Fill(ham, parameters, i);
59  Filler<Spinfull::ZeemanYTerm>::Fill(ham, parameters, i);
60  Filler<Spinfull::ZeemanZTerm>::Fill(ham, parameters, i);
61  }
62 
63  // x-direction links
64  for (int z = 0; z < height; z++)
65  {
66  for (int y = 0; y < width; y++)
67  {
68  for (int x = 0; x < length - 1; x++)
69  {
70  int from = ToSite(x, y, z, length, width);
71  int to = ToSite(x + 1, y, z, length, width);
72  //std::cout << "(" << from << ", " << to << ")" << std::endl;
73  Filler<Spinfull::KineticTerm>::Fill(ham, parameters, from, to);
74  Filler<Spinfull::RashbaYTerm>::Fill(ham, parameters, from, to);
75  }
76  }
77  }
78 
79  //std::cout << std::endl;
80 
81  // y-direction links
82  for (int z = 0; z < height; z++)
83  {
84  for (int x = 0; x < length; x++)
85  {
86  for (int y = 0; y < width - 1; y++)
87  {
88  int from = ToSite(x, y, z, length, width);
89  int to = ToSite(x, y + 1, z, length, width);
90  //std::cout << "(" << from << ", " << to << ")" << std::endl;
91  Filler<Spinfull::KineticTerm>::Fill(ham, parameters, from, to);
92  Filler<Spinfull::RashbaXTerm>::Fill(ham, parameters, from, to);
93  }
94  }
95  }
96 
97  // z-direction links
98  for (int y = 0; y < width; y++)
99  {
100  for (int x = 0; x < length; x++)
101  {
102  for (int z = 0; z < height - 1; z++)
103  {
104  int from = ToSite(x, y, z, length, width);
105  int to = ToSite(x, y, z + 1, length, width);
106  //std::cout << "(" << from << ", " << to << ")" << std::endl;
107  Filler<Spinfull::KineticTerm>::Fill(ham, parameters, from, to);
108  Filler<Spinfull::RashbaZTerm>::Fill(ham, parameters, from, to);
109  }
110  }
111  }
112 
113  return ham;
114  }
115 
116  static constexpr char name[] = "SpinfullUniform3D";
117 };
118 
119 #endif
Parameters parameters
Definition: QuantumSystem.hpp:15
displays vectors with sites numbered in 3D grid,
Definition: Grid3DViewer.hpp:21
Hamiltonian class for counting MZM in non-interacting systems.
Definition: Hamiltonian.hpp:13
Spinfull 3D cuboid with open boundary conditions.
Definition: SpinfullUniform3D.hpp:30
static constexpr char name[]
Definition: SpinfullUniform3D.hpp:116
static Hamiltonian< T > Generate(QuantumSystem &quantumSystem)
Definition: SpinfullUniform3D.hpp:40
static int ToSite(int x, int y, int z, int L, int W)
Definition: SpinfullUniform3D.hpp:33
Dimensions dimensions
Definition: QuantumSystem.hpp:16
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