Description of bug
Vector of MPOs in DMRG works for the ground state, but it does not work for the excited states.
It would be beneficial if this works, as I need it to handle MPOs with large bond dimensions.
Minimal code demonstrating the bug
Minimal runnable code
using ITensors
using ITensorMPS
# 1. Setup sites and Hamiltonian components (OpSum)
N = 10
sites = siteinds("S=1/2", N)
os_A = OpSum()
for j in 1:N-1
os_A += 0.5, "S+", j, "S-", j+1
os_A += 0.5, "S-", j, "S+", j+1
os_A += "Sz", j, "Sz", j+1
end
os_B = OpSum()
for j in 1:N
os_B += 0.1, "Sz", j # Additional potential field
end
# 2. Convert OpSum to MPOs
HA = MPO(os_A, sites)
HB = MPO(os_B, sites)
H_list = [HA, HB] # Sum of MPOs
# 3. Initial states
psi0 = randomMPS(sites, 5) # For ground state
psi1 = randomMPS(sites, 5) # For first excited state
psi2 = randomMPS(sites, 5) # For second excited state
# 4. DMRG for Ground State
E0, psi0 = dmrg(H_list, psi0; nsweeps=10)
# 5. DMRG for Excited State (ortho to psi0)
# The "Weight" keyword penalizes non-zero overlap with [psi0]
E1, psi1 = dmrg(H_list, [psi0], psi1; nsweeps=10, weight=10.0)
E2, psi2 = dmrg(H_list, [psi0, psi1], psi2; nsweeps=10, weight=10.0) # penalty for both psi0 and psi1
println("Ground Energy: ", E0)
println("First Excited Energy: ", E1)
println("Second Excited Energy: ", E2)
Error output
ERROR: MethodError: no method matching dmrg(::Vector{MPO}, ::Vector{MPS}, ::MPS, ::Sweeps; weight::Float64)
The function `dmrg` exists, but no method is defined for this combination of argument types.
Closest candidates are:
dmrg(::MPO, ::Vector{MPS}, ::MPS, ::Sweeps; weight, kwargs...)
@ ITensorMPS ~/.julia/packages/ITensorMPS/3SBBV/src/dmrg.jl:41
dmrg(::Any, ::Any, ::MPS; nsweeps, maxdim, mindim, cutoff, noise, kwargs...)
@ ITensorMPS ~/.julia/packages/ITensorMPS/3SBBV/src/dmrg.jl:363
dmrg(::Vector{MPO}, ::MPS, ::Sweeps; kwargs...)
@ ITensorMPS ~/.julia/packages/ITensorMPS/3SBBV/src/dmrg.jl:31
...
Stacktrace:
[1] dmrg(x1::Vector{…}, x2::Vector{…}, psi0::MPS; nsweeps::Int64, maxdim::Int64, mindim::Int64, cutoff::Float64, noise::Bool, kwargs::@Kwargs{…})
@ ITensorMPS ~/.julia/packages/ITensorMPS/3SBBV/src/dmrg.jl:374
[2] top-level scope
@ ~/Projects/ITensorAGP/github_7/example_scipts/MFIsing/test.jl:33
Some type information was truncated. Use `show(err)` to see complete types.
Version information
- Output from
versioninfo():
julia> versioninfo()
Julia Version 1.11.1
Commit 8f5b7ca12ad (2024-10-16 10:53 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: macOS (arm64-apple-darwin22.4.0)
CPU: 11 × Apple M3 Pro
WORD_SIZE: 64
LLVM: libLLVM-16.0.6 (ORCJIT, apple-m3)
Threads: 1 default, 0 interactive, 1 GC (on 5 virtual cores)
Environment:
JULIA_EDITOR = code
JULIA_VSCODE_REPL = 1
- Output from
using Pkg; Pkg.status("ITensorMPS"):
julia> using Pkg; Pkg.status("ITensorMPS")
Status `~/.julia/environments/v1.11/Project.toml`
⌃ [0d1a4710] ITensorMPS v0.3.16
Info Packages marked with ⌃ have new versions available and may be upgradable.
Description of bug
Vector of MPOs in DMRG works for the ground state, but it does not work for the excited states.
It would be beneficial if this works, as I need it to handle MPOs with large bond dimensions.
Minimal code demonstrating the bug
Minimal runnable code
Error output
Version information
versioninfo():using Pkg; Pkg.status("ITensorMPS"):