# Functions for Making Lattices

ITensor provides functions which return a vector of LatticeBond objects for conveniently working with various lattices such as the square lattice or triangular lattice.

The source code for these functions can be found in the folder `itensor/mps/lattice`

and are meant to be written in a straightforward style that can be used to develop
similar functions for other lattices. If you would like to contribute a lattice
function (such as kagome, or next-neighbor triangular) which is currently missing,
we would be happy to receive a pull request from you.

## Synopsis

```
int Nx = 10;
int Ny = 10;
auto square_latt = squareLattice(Nx,Ny,{"YPeriodic=",true});
for(auto& bnd : square_latt)
{
printfln("Bond from site %d -> %d",bnd.s1,bnd.s2);
}
auto square_latt_nn = squareNextNeighbor(Nx,Ny,{"YPeriodic=",true});
for(auto& bnd : square_latt_nn)
{
if(bnd.type == "1")
{
printfln("First-neighbor bond from site %d -> %d",bnd.s1,bnd.s2);
}
else if(bnd.type == "2")
{
printfln("Second-neighbor bond from site %d -> %d",bnd.s1,bnd.s2);
}
}
//Make a Hamiltonian on the triangular lattice using AutoMPO
auto sites = SpinHalf(Nx*Ny);
auto ampo = AutoMPO(sites);
auto tri_latt = triangularLattice(Nx,Ny);
for(auto& bnd : tri_latt)
{
ampo += "Sz",bnd.s1,"Sz",bnd.s2;
ampo += 0.5,"S+",bnd.s1,"S-",bnd.s2;
ampo += 0.5,"S-",bnd.s1,"S+",bnd.s2;
}
auto H = toMPO(ampo);
```

## Lattice Functions

squareLattice(int Nx, int Ny, Args args = Args::global()) -> Lattice

Return a Lattice (vector

) of nearest-neighbor bonds of the two-dimensional square lattice of dimensions Nx by Ny. This function recognizes the following optional named arguments:

- "YPeriodic" — (default=false). If true, includes next-neighbor periodic bonds wrapping around the y-direction.

squareNextNeighbor(int Nx, int Ny, Args args = Args::global()) -> Lattice

Return a Lattice (vector

) of both nearest-neighbor and next-nearest-neighbor (second-nearest-neighbor) bonds of the two-dimensional square lattice of dimension Nx by Ny. First-neighbor bonds in the returned lattice have the type

`"1"`

while second-neighbor bonds have the type`"2"`

.This function recognizes the following optional named arguments:

- "YPeriodic" — (default=false). If true, includes next-neighbor periodic bonds wrapping around the y-direction.

triangularLattice(int Nx, int Ny, Args args = Args::global()) -> Lattice

Return a Lattice (vector

) of nearest-neighbor bonds of the two-dimensional triangular lattice of dimension Nx by Ny. This function recognizes the following optional named arguments:

- "YPeriodic" — (default=false). If true, includes next-neighbor periodic bonds wrapping around the y-direction.

Back to Classes

Back to Main