Majoranapp
A C++ library for studying MZM in non-interacting systems
ConnectionsFiller.hpp
Go to the documentation of this file.
1 #ifndef CONNECTIONSFILLER_HPP
2 #define CONNECTIONSFILLER_HPP
3 
4 #include "QuantumSystem/Connections.hpp"
5 #include "Hamiltonian.hpp"
6 #include "Misc.hpp"
7 #include "Filler.hpp"
8 
13 {
14 private:
23  template <class T, class O>
24  static void LocalConnectionRepacking(Hamiltonian<T> &hamiltonian,
25  Connections &connections)
26  {
27  for (auto &connection : connections.map)
28  {
29  int to = connection.first.at(0);
30  double value = connection.second;
31  Filler<O>::template Fill<T>(hamiltonian, value, to);
32  }
33  }
34 
43  template <class T, class O>
44  static void NonLocalConnectionRepacking(Hamiltonian<T> &hamiltonian,
45  Connections &connections)
46  {
47  for (auto &connection : connections.map)
48  {
49  int from = connection.first.at(0);
50  int to = connection.first.at(1);
51  double value = connection.second;
52  Filler<O>::template Fill<T>(hamiltonian, value, from, to);
53  }
54  }
55 
65  template <class T, class O>
66  static void ConnectionsRepacking(Hamiltonian<T> &hamiltonian,
67  Connections &connections,
68  const std::string &name)
69  {
70  if (name == O::name)
71  {
72  if constexpr (O::locality == 1)
73  {
74  LocalConnectionRepacking<T, O>(hamiltonian, connections);
75  }
76  else if constexpr (O::locality == 2)
77  {
78  NonLocalConnectionRepacking<T, O>(hamiltonian, connections);
79  }
80  }
81  }
82 
91  template <class T>
92  static void SpinfullSwitch(Hamiltonian<T> &hamiltonian,
93  Connections &connections,
94  const std::string &name)
95  {
96  ConnectionsRepacking<T, Spinfull::ChemicalTerm>(hamiltonian, connections, name);
97  ConnectionsRepacking<T, Spinfull::ProxTerm>(hamiltonian, connections, name);
98  ConnectionsRepacking<T, Spinfull::ZeemanXTerm>(hamiltonian, connections, name);
99  ConnectionsRepacking<T, Spinfull::ZeemanYTerm>(hamiltonian, connections, name);
100  ConnectionsRepacking<T, Spinfull::ZeemanZTerm>(hamiltonian, connections, name);
101  ConnectionsRepacking<T, Spinfull::KineticTerm>(hamiltonian, connections, name);
102  ConnectionsRepacking<T, Spinfull::RashbaXTerm>(hamiltonian, connections, name);
103  ConnectionsRepacking<T, Spinfull::RashbaYTerm>(hamiltonian, connections, name);
104  ConnectionsRepacking<T, Spinfull::RashbaZTerm>(hamiltonian, connections, name);
105  }
106 
115  template <class T>
116  static void SpinlessSwitch(Hamiltonian<T> &hamiltonian,
117  Connections &connections,
118  const std::string &name)
119  {
120  ConnectionsRepacking<T, Spinless::ChemicalTerm>(hamiltonian, connections, name);
121  ConnectionsRepacking<T, Spinless::ProxTerm>(hamiltonian, connections, name);
122  ConnectionsRepacking<T, Spinless::KineticTerm>(hamiltonian, connections, name);
123  }
124 
125 public:
133  template <class T>
134  static void Spinfull(Hamiltonian<T> &hamiltonian,
135  ParametersConnections &parameterConnections)
136  {
137  for (auto &[name, connections] : parameterConnections.map)
138  {
139  SpinfullSwitch(hamiltonian, connections, name);
140  }
141  }
142 
150  template <class T>
151  static void Spinless(Hamiltonian<T> &hamiltonian,
152  ParametersConnections &parameterConnections)
153  {
154  for (auto &[name, connections] : parameterConnections.map)
155  {
156  SpinlessSwitch(hamiltonian, connections, name);
157  }
158  }
159 
160 };
161 
162 #endif
static void SpinlessSwitch(Hamiltonian< T > &hamiltonian, Connections &connections, const std::string &name)
List of all Spinless terms which are avaliable from ParametersConnections.
Definition: ConnectionsFiller.hpp:116
static void NonLocalConnectionRepacking(Hamiltonian< T > &hamiltonian, Connections &connections)
Repacking non-local (2-sites) term O.
Definition: ConnectionsFiller.hpp:44
class for filling Hamiltonian matrix elements from ParametersConnections
Definition: ConnectionsFiller.hpp:12
Hamiltonian class for counting MZM in non-interacting systems.
Definition: Hamiltonian.hpp:13
static class for spinfull model term filler
Definition: Filler.hpp:47
static void LocalConnectionRepacking(Hamiltonian< T > &hamiltonian, Connections &connections)
Repacking local (1-site) term O.
Definition: ConnectionsFiller.hpp:24
static void SpinfullSwitch(Hamiltonian< T > &hamiltonian, Connections &connections, const std::string &name)
List of all Spinfull terms which are avaliable from ParametersConnections.
Definition: ConnectionsFiller.hpp:92
static void Spinfull(Hamiltonian< T > &hamiltonian, ParametersConnections &parameterConnections)
constructing Spinfull terms from ParametersConnections
Definition: ConnectionsFiller.hpp:134
static void ConnectionsRepacking(Hamiltonian< T > &hamiltonian, Connections &connections, const std::string &name)
Repacking all terms (local and non-local)
Definition: ConnectionsFiller.hpp:66
static void Spinless(Hamiltonian< T > &hamiltonian, ParametersConnections &parameterConnections)
constructing Spinless terms from ParametersConnections
Definition: ConnectionsFiller.hpp:151