I attempted to compute the ground-state energy of a critical Kitaev chain using DMRG with the “Fermion” already implemented in ITensor. In the process, I custom-defined the Majorana operators β and γ. The code is as follows:
L = 20
sites = siteinds("Fermion", L; conserve_qns=false)
function ITensors.op(::OpName"Beta", ::SiteType"Fermion", s::Index)
c = op("C", s)
cdag = op("Cdag", s)
return c + cdag
end
function ITensors.op(::OpName"Gamma", ::SiteType"Fermion", s::Index)
c = op("C", s)
cdag = op("Cdag", s)
return -im * (c - cdag)
end
os = OpSum()
for j=1:L
os += -1* im, "Beta", j, "Gamma", j
end
for j=1:L-1
os += 2*im, "Beta", j+1, "Gamma", j
end
H = MPO(os, sites)
psi0 = randomMPS(sites)
# Numerical accuracy parameters
nsweeps = 50
maxdim = [10, 20, 100, 100, 200, 300,1000]
cutoff = 1E-10
# Find the ground state
energy, psi = dmrg(H, psi0; nsweeps, maxdim, cutoff,outputlevel=1)
println("ground-state energy: ", energy)
However, when I wrote the Hamiltonian using the original “C” and “Cdag”, the efficiency of the DMRG was much better, and it required significantly fewer bond dimensions. Additionally, the energy appears to be incorrect. Why might this be?