Lattices in MARQOV are user defined classes that expose a certain interface such that we can derive a Monte Carlo procedure from them. As all of MARQOV’s components, lattice have required parts and optional parts. there are two required functions of a lattice, those being

std::vector<int> Lattice::nbrs(const int alpha, const int i) const

which enables us to infer neighbour relations in your graph, since the returned vector should contain the indices of the neighbours of the site i. The second function is

std::size_t size() const

which gives us the information how many sites there are in your lattice.

Then there are a few optional functions, that, if present, enable additional functionality of MARQOV

std::vector<int> Lattice::crds(const int i) const
std::vector<int> Lattice::flexnbrs(const int alpha, const int i) const

void writelat(H5::Group& h5loc, const Lattice& l)