Creating a set of Site indices to use as a lattice

To begin most calculations you need a set of lattice sites to define your Hilbert space. Although the ITensor library defines a set of SiteSet classes which automate this for you, there could be a lot of reasons why you would want to do it yourself. Below is a simple pattern you can use to create a set of site Indices and save them in an IndexSet, a container for a set of indices used throughout ITensor.

auto N = 100; //number of sites
auto d = 2; //dimension of local Hilbert space of each site
auto sites = IndexSet(N);
for( auto n : range1(N) )
    sites(n) = Index(d,"Site,n="+str(n));

//Now we can use these sites, for example, to make tensors
//such as operators

//For convenience, save the third index and its primed
//version
auto s3 = sites(3);
auto s3P = prime(s3);

auto sz3 = ITensor(s3,s3P);
sz3.set(s3=1,s3P=1, 0.5);
sz3.set(s3=2,s3P=2,-0.5);

Complete sample code:

#include "itensor/all.h"

using namespace itensor;

int main()
    {
    auto N = 100; //number of sites
    auto d = 2; //dimension of local Hilbert space of each site
    auto sites = IndexSet(N);
    for( auto n : range1(N) )
        sites(n) = Index(d,"Site,n="+str(n));

    auto s3 = sites(3);
    auto s3P = prime(s3);
    auto sz3 = ITensor(s3,s3P);
    sz3.set(s3=1,s3P=1, 0.5);
    sz3.set(s3=2,s3P=2,-0.5);

    return 0;
    }



Back to Formulas
Back to Main