Lattices
Models can be defined on different lattices, and several lattices lend themselves to a description in terms of a (quasi-)one-dimensional operator. In order to facilitate this mapping, the combination of the @mpoham
macro and the lattices in this package provides an easy interface.
MPSKitModels.AbstractLattice
— TypeAbstractLattice{N}
Abstract supertype of all lattices, which are mapped to N
-dimensional integer grids.
MPSKitModels.FiniteChain
— TypeFiniteChain(length::Integer=1)
A one-dimensional lattice of length L
MPSKitModels.InfiniteChain
— TypeInfiniteChain(L::Integer=1)
A one dimensional infinite lattice with a unit cell containing L
sites.
MPSKitModels.InfiniteCylinder
— TypeInfiniteCylinder(L::Int, N::Int)
An infinite cylinder with L
sites per rung and N
sites per unit cell.
MPSKitModels.InfiniteHelix
— TypeInfiniteHelix(L::Integer, N::Integer)
An infinite helix with L
sites per rung and N
sites per unit cell.
MPSKitModels.InfiniteStrip
— TypeInfiniteStrip(L::Int, N::Int)
An infinite strip with L
sites per rung and N
sites per unit cell.
MPSKitModels.HoneycombYC
— TypeHoneycombYC(L::Integer, N::Integer=L)
A honeycomb lattice on an infinite cylinder with L
sites per rung and N
sites per unit cell. The y-axis is aligned along an edge of the hexagons, and the circumference is $3L/4$.
Having defined a lattice, it is possible to iterate over several points or combinations of points that can be of interest. Such a point is represented as a LatticePoint
, which is defined in terms of an integer N-dimensional coordinate system representation, and supports addition and subtraction, both with other points or with tuples. These structures also handle the logic of being mapped to a one-dimensional system.
MPSKitModels.LatticePoint
— TypeLatticePoint{N,G}
represents an N
-dimensional point on a G
lattice.
MPSKitModels.linearize_index
— Functionlinearize_index(lattice, indices...)
convert a given set of indices into a linear index.
MPSKitModels.vertices
— Functionvertices(lattice::AbstractLattice)
construct an iterator over all lattice points.
MPSKitModels.nearest_neighbours
— Functionnearest_neighbours(lattice::AbstractLattice)
construct an iterator over all pairs of nearest neighbours.
MPSKitModels.bipartition
— Functionbipartition(lattice)
construct two iterators over the vertices of the bipartition of a given lattice.
Sometimes it might be useful to change the order of the linear indices of certain lattices. In this case a wrapper around a lattice can be defined through the following:
MPSKitModels.SnakePattern
— TypeSnakePattern(lattice, pattern)
Represents a given lattice with a linear order that is provided by pattern
.
Any mapping of linear indices can be used, but the following patterns can be helpful:
MPSKitModels.backandforth_pattern
— Functionbackandforth_pattern(cylinder)
pattern that alternates directions between different rungs of a cylinder
MPSKitModels.frontandback_pattern
— Functionfrontandback_pattern(cylinder)
pattern that alternates between a site on the first half of a rung and a site on the second half of a rung.