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.FiniteCylinder — TypeFiniteCylinder(L::Int, N::Int)A cylinder with circumference L and N sites in total.
MPSKitModels.FiniteStrip — TypeFiniteStrip(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 — 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.next_nearest_neighbours — Functionnext_nearest_neighbours(lattice::AbstractLattice)construct an iterator over all pairs of next-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.