Heisenberg Model
-
template<class StateVector>
class Heisenberg_interaction Public Functions
-
inline Heisenberg_interaction(const double myJ)
-
inline StateVector get(const StateVector &phi) noexcept
Public Members
-
const double J
-
inline Heisenberg_interaction(const double myJ)
-
template<typename SpinType, typename CouplingType = double>
class Heisenberg - #include <Heisenberg.h>
Heisenberg Hamiltonian.
This defines the Heisenberg Hamiltonian. It only consists of a single part, namely the standard interaction.
- Template Parameters:
SpinType – the type in which to store the vector-valued magnetization values.
CouplingType – the type in which the coupling of the on-site term would be stored (if there was one)
Public Functions
-
inline Heisenberg(double J)
-
inline ~Heisenberg()
-
template<class StateSpace, class Lattice, class RNG>
inline void initstatespace(StateSpace &statespace, Lattice &grid, RNG &rng) const noexcept
Public Members
-
double J
-
const std::string name = "Heisenberg"
-
std::vector<Heisenberg_interaction<StateVector>*> interactions
-
Magnetization obs_m
-
std::tuple<Magnetization> observables
Public Static Attributes
-
static constexpr int SymD = 3
-
namespace MARQOV
The MARQOV namespace.
This namespace collects all things that are related to MARQOV.
-
template<class SpinType, class CouplingType, class Lattice>
class Embedder<Heisenberg<SpinType, CouplingType>, Lattice> - #include <Heisenberg.h>
Specialization of the Embedding class for the Heisenberg model.
- Template Parameters:
SpinType – the type in which to store the magnetization values.
CouplingType – the type of the coupling of the on-site term (in case there is one)
Lattice – the type of the lattice
Public Functions
-
inline Embedder(const Hamiltonian &ham, const Lattice &lat, StateSpace &statespace)
Constructs a Heisenberg embedding object.
- Parameters:
ham – The corresponding Hamiltonian
lat – The corresponding lattice
statespace – The statespace of the simulation
-
template<class RNG>
inline void draw(RNG &rng) noexcept Set new embedding variable.
Typically, this function is executed once before every cluster update. The variable can be drawn randomly (for which case an RNG is provided), but of course can also follow some sequential scheme.
- Template Parameters:
RNG – the type of the random number generator
- Parameters:
rng – reference to the random number generator
-
inline double coupling(int pos1, int pos2) const
Computes the Wolff coupling when attempting to add a spin to the cluster.
- Parameters:
pos1 – The position (index) of the current state vector (which is already in the cluster)
pos2 – The position (index) of a neighbour being checked whether it will become part of the cluster as well
- Returns:
The scalar Wolff coupling (a double)
-
inline void flip(StateVector &sv)
Specifies how a spin flip in the embedded (reduced) model is performed.
- Parameters:
sv – the spin to flipped
Private Types
-
typedef Heisenberg<SpinType, CouplingType> Hamiltonian
-
typedef Hamiltonian::StateVector StateVector
-
typedef Space<typename Hamiltonian::StateVector, Lattice> StateSpace
Private Static Attributes
-
static constexpr int SymD = Hamiltonian::SymD
-
template<class Lattice, class SpinType, class CouplingType>
struct Wolff<Heisenberg<SpinType, CouplingType>, Lattice> Public Functions
-
template<class RNG, class StateSpace>
inline int move(const Heisenberg<SpinType, CouplingType> &ham, const Lattice &grid, StateSpace &statespace, RNG &rng, double beta, int rsite)
Public Members
-
std::vector<int> cstack = std::vector<int>(4096 / sizeof(int), 0)
the size of the stack is meant to be preserved across different cluster processes.
-
template<class RNG, class StateSpace>
-
template<class SpinType, class CouplingType, class Lattice>