Heisenberg Model¶
-
template<class
StateVector
>
classHeisenberg_interaction
¶ Public Functions
-
Heisenberg_interaction
(const double myJ)¶
-
StateVector
get
(const StateVector &phi) noexcept¶
Public Members
-
const double
J
¶
-
-
template<typename
SpinType
, typenameCouplingType
= double>
classHeisenberg
¶ - #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
-
Heisenberg
(double J)¶
-
~Heisenberg
()¶
-
template<class
StateSpace
, classLattice
, classRNG
>
voidinitstatespace
(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
-
constexpr int
SymD
= 3¶
-
namespace
MARQOV
The MARQOV namespace.
This namespace collects all things that are related to MARQOV.
-
template<class
SpinType
, classCouplingType
, classLattice
>
classEmbedder
<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
-
Embedder
(const Hamiltonian &ham, const Lattice &lat, StateSpace &statespace)¶ Constructs a Heisenberg embedding object.
- Parameters
ham
: The corresponding Hamiltonianlat
: The corresponding latticestatespace
: The statespace of the simulation
-
template<class
RNG
>
voiddraw
(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
-
double
coupling
(int pos1, int pos2) const¶ Computes the Wolff coupling when attempting to add a spin to the cluster.
- Return
The scalar Wolff coupling (a double)
- 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
-
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
-
constexpr int
SymD
= Hamiltonian::SymD¶
-
template<class
Lattice
, classSpinType
, classCouplingType
>
structWolff
<Heisenberg<SpinType, CouplingType>, Lattice>¶ Public Functions
-
template<class
RNG
, classStateSpace
>
intmove
(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
-
template<class