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 — Type
AbstractLattice{N}Abstract supertype of all lattices, which are mapped to N-dimensional integer grids.
MPSKitModels.FiniteChain — Type
FiniteChain(length::Integer=1)A one-dimensional lattice of length L
MPSKitModels.FiniteCylinder — Type
FiniteCylinder(L::Int, N::Int)A cylinder with circumference L and N sites in total.
MPSKitModels.FiniteStrip — Type
FiniteStrip(L::Int, N::Int)A finite strip with a width of L and a total number of N sites.
This representes an L by N÷L rectangular patch.
MPSKitModels.InfiniteChain — Type
InfiniteChain(L::Integer=1)A one dimensional infinite lattice with a unit cell containing L sites.
MPSKitModels.InfiniteCylinder — Type
InfiniteCylinder(L::Int, N::Int)An infinite cylinder with L sites per rung and N sites per unit cell.
MPSKitModels.InfiniteHelix — Type
InfiniteHelix(L::Integer, N::Integer)An infinite helix with L sites per rung and N sites per unit cell.
MPSKitModels.InfiniteStrip — Type
InfiniteStrip(L::Int, N::Int)An infinite strip with L sites per rung and N sites per unit cell.
MPSKitModels.HoneycombYC — Type
HoneycombYC(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 — Type
LatticePoint{N,G}represents an N-dimensional point on a G lattice.
MPSKitModels.linearize_index — Function
linearize_index(lattice, indices...)convert a given set of indices into a linear index.
MPSKitModels.vertices — Function
vertices(lattice::AbstractLattice)construct an iterator over all lattice points.
MPSKitModels.nearest_neighbours — Function
nearest_neighbours(lattice::AbstractLattice)construct an iterator over all pairs of nearest neighbours.
MPSKitModels.next_nearest_neighbours — Function
next_nearest_neighbours(lattice::AbstractLattice)construct an iterator over all pairs of next-nearest neighbours.
MPSKitModels.bipartition — Function
bipartition(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 — Type
SnakePattern(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 — Function
backandforth_pattern(cylinder)pattern that alternates directions between different rungs of a cylinder
MPSKitModels.frontandback_pattern — Function
frontandback_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.