Author maartenvd
6 Stars
Updated Last
1 Year Ago
Started In
September 2020


docs codecov CI

import Pkg

MPSKitModels.jl provides operators, tools and utilities for MPSKit.jl. The main goal is to facilitate the definition and readability of hamiltonians on 1-dimensional systems, as well as quasi-1-dimensional systems defined on a cylinder or infinite strips.


The main building blocks of these Hamiltonians are local N-body operators, which should be provided in the form of an AbstractTensorMap{N,N} (see TensorKit.jl). Several often-used operators are defined and exported within MPSKitModels.jl:

  • spin operators (sigma_x, sigma_y, sigma_z, sigma_plus, sigma_min)
  • spin exchange couplings (sigma_xx, sigma_yy, sigma_zz, sigma_exchange, sigma_plusmin, sigma_minplus)
  • fermionic creation and annihilation operators (cc, ccdag, cdagc, cdagcdag, number)
  • ...

These operators can then be combined to define Hamiltonians by way of the @mpoham macro. This transforms {} expressions to denote the site-indices upon which the operators act, and generates site-indices for various geometries. Some examples to showcase this:

using MPSKitModels
h = 0.5
H_ising = @mpoham sum(sigma_xx(){i, i + 1} + h * sigma_z(){i} for i in -Inf:Inf)

J = [1.0 -1.0]  # staggered couplings over unit cell of length 2
H_heisenberg = @mpoham sum(J[i] * sigma_exchange(){i, i + 1} for i in -Inf:2:Inf)

H_heisenberg_cylinder =
    @mpoham sum(J1 * sigma_exchange(){i, j} for (i, j) in nearest_neighbours(InfiniteCylinder(3)))

J1 = 0.8
J2 = 0.2

H_J1J2 = @mpoham sum(J1 * sigma_exchange(){i, j} for (i, j) in nearest_neighbours(InfiniteCylinder(4))) +
    sum(J2 * sigma_exchange(){i,j} for (i, j) in next_nearest_neighbours(InfiniteCylinder(4)))

For convenience, several models have already been defined. The full list can be found, along with all information in the docs.

Used By Packages

No packages found.