import Pkg
Pkg.add("MPSKitModels")
MPSKitModels.jl provides operators, tools and utilities for MPSKit.jl. The main goal is to facilitate the definition and readability of Hamiltonians on (1+0)-dimensional quantum systems, as well as their quasi-one-dimensional extensions, such as cylinders, ladders, etc. Additionally, some models from (2+0)-dimensional statistical mechanics are provided.
The main building blocks of these Hamiltonians are local N
-body operators, which are 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 (
S_x
,S_y
,S_z
,S_plus
,S_min
) - spin exchange operators (
S_xx
,S_yy
,S_zz
,S_exchange
,S_plusmin
,S_minplus
) - bosonic operators (
a_plus
,a_min
,a_number
) - fermionic operators (
c_plus
,c_min
,c_number
) - fermionic spin operators (
e_plus
,e_min
,e_number
,e_number_up
,e_number_down
,e_number_updown
)
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, TensorKit
g = 1.0
H_ising = @mpoham sum(S_xx(){i, i + 1} + g * S_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] * S_exchange(SU2Irrep; spin=1){i, i + 1} for i in vertices(InfiniteChain(2)))
H_heisenberg_cylinder =
@mpoham sum(J1 * S_exchange(; spin=1){i, j} for (i, j) in nearest_neighbours(InfiniteCylinder(3)))
J1 = 0.8
J2 = 0.2
H_J1J2 = @mpoham sum(J1 * S_exchange(){i, j} for (i, j) in nearest_neighbours(InfiniteCylinder(4))) +
sum(J2 * S_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 in the docs.