Heisenberg Model

template<class StateVector>
class Heisenberg_interaction

Public Functions

Heisenberg_interaction(const double myJ)
StateVector get(const StateVector &phi) noexcept

Public Members

const double J
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 Types

typedef std::array<SpinType, SymD> StateVector

Public Functions

Heisenberg(double J)
~Heisenberg()
template<class StateSpace, class Lattice, class RNG>
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

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

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>
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

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 Members

const Hamiltonian &ham
const Lattice &lat
const StateSpace &statespace
std::array<SpinType, SymD> rdir

Private Static Attributes

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>
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.