Ashkin-Teller Model

Three-Color Ashkin-Teller Hamiltonian.

Numerically, this model is treated as embedded Ising models

The Wolff algorithm can only be used for K=<0.5!

Compare Zhu et. al, PRB 91, 224201 (2015) for more details

Note: This Hamiltonian presents an “extreme” use case of MARQOV, where the generic term structure is not used at all! Therefore the general Metropolis and Wolff update algorithms can not be used! Instead the interactions of the model are explicitely coded in the specialized update algorithms below

class AshkinTellerThreeColorMag
#include <AshkinTellerThreeColor.h>

Magnetization of the Three-Color Ashkin-Teller model.

Public Functions

template<class StateSpace, class Grid>
double measure(const StateSpace &statespace, const Grid &grid)

Perform a measurement of the Magnetization.

Return

A scalar value, the magnetization per site

Template Parameters
  • StateSpace: the type of the state space

  • Grid: the type of the lattice

Parameters
  • statespace: the statespace

  • grid: the lattice

Public Members

std::string name = {"m"}

We call ourselves m.

std::string desc = {"Magnetization of the Three-color Ashkin-Teller model"}

An extended description of the observable.

template<class StateVector, class RNG>
class AshkinTeller_Initializer
#include <AshkinTellerThreeColor.h>

Dummy function which prints an error if one attempts to use the general Metropolis algorithm.

Todo:

Find a way that this function is not needed in the first place

Template Parameters
  • StateVector: the type of the state vector

  • RNG: the type of the random number generator

Public Functions

AshkinTeller_Initializer(RNG&)

Constructor.

StateVector newsv(const StateVector &svold)

Usually specifies how a random new state vector is generated.

In this model it is just a place holder and will not be needed!

class AshkinTellerThreeColor
#include <AshkinTellerThreeColor.h>

Three-Color Ashkin-Teller Hamiltonian.

Public Types

typedef std::array<int, SymD> StateVector

Public Functions

AshkinTellerThreeColor(double J, double K)

Constructor.

Parameters
  • J: the Ising interaction

  • K: the Four-spin interaction

template<class StateSpace, class Lattice, class RNG>
void initstatespace(StateSpace &statespace, Lattice &grid, RNG &rng) const

Specifies how the state space is initialized.

Template Parameters
  • StateSpace: the type of the state space

  • Lattice: the type of the latticie

  • RNG: the type of the random number generator

Parameters
  • statespace: the state space

  • grid: the lattice

  • rng: the random number generator

Public Members

double J

Ising interaction strength.

double K

Four-spin interaction strength.

const std::string name
std::array<Standard_Interaction<StateVector>*, 1> interactions = {new Standard_Interaction<StateVector>(J)}
AshkinTellerThreeColorMag obs_m
decltype(std::make_tuple(obs_m)) observables = {std::make_tuple(obs_m)}

Public Static Attributes

constexpr int SymD = 3

use SymD to encode the three colors of the model

template<>
class Initializer<AshkinTellerThreeColor>

Private Types

typedef AshkinTellerThreeColor::StateVector StateVector

Private Static Functions

template<class RNGCache>
StateVector newsv(const StateVector&, RNGCache&)
namespace MARQOV

The MARQOV namespace.

This namespace collects all things that are related to MARQOV.

template<class Lattice>
class Embedder<AshkinTellerThreeColor, Lattice>

Public Functions

Embedder(const Hamiltonian &ham, const Lattice &lat, StateSpace &statespace)
template<class RNG>
void draw(RNG &rng, StateVector &sv)
double coupling(int pos1, int pos2) const
void flip(StateVector &sv)

Private Types

typedef AshkinTellerThreeColor Hamiltonian
typedef Hamiltonian::StateVector StateVector
typedef Space<StateVector, Lattice> StateSpace

Private Members

const Hamiltonian &ham
const Lattice &lat
const StateSpace &statespace
int rcolor

Private Static Attributes

constexpr int SymD = Hamiltonian::SymD
template<class Lattice>
struct Metropolis<AshkinTellerThreeColor, Lattice>
#include <AshkinTellerThreeColor.h>

Specialized Metropolis algorithm for the Ashkin-Teller Hamiltonian.

Template Parameters
  • Lattice: type of the lattice

Public Types

typedef AshkinTellerThreeColor::StateVector StateVector
typedef int ReducedStateVector

Public Static Functions

double metro_coupling(StateVector &sv1, StateVector &sv2, int color, const AshkinTellerThreeColor &ham)
ReducedStateVector metro_newconf(ReducedStateVector &rsv)
void metro_flip(StateVector &sv, const int color)
template<class StateSpace, class RNG>
int move(const AshkinTellerThreeColor &ham, const Lattice &grid, StateSpace &statespace, RNG &rng, double beta, int rsite)