ITensor / ITensor/ITensorMPS.jl
[ITensors] [ENHANCEMENT] Support for Trotterizing time dependent operators
Open
Nobody has claimed this yet.
enhancement
- Dominant language
- Julia
- Stars
- 85
- Forks
- 27
- Avg merge
- 22m
- Merged PRs (30d)
- 1
Description
Currently we have the following interface for Trotterizing a time independent operator sum:
function H()
H = Sum{Op}()
for n in 1:(N-1)
H += "X", 1, "X", 2
end
return H
end
# Number of time steps
n = 3
# Total time to evolve to
t = 0.5
# ∏ₙ exp(-im * t * H / n)
U = exp(-im * t * H; alg=Trotter{1}(n))
We need to add support for Trotterizing a time-dependent operator, for example:
function H(t)
H = Sum{Op}()
for n in 1:(N-1)
H += cos(ω * t), "X", 1, "X", 2
end
return H
end
t = [0.1, 0.21, 0.32, 0.44]
time_step = diff(t)
n = length(time_step)
# Operator to exponentiate at each time slice
Hs = [-im * time_step[n] * H(t[n]) for n in 1:n]
# exp(-im * t1 * Hs[1]) * exp(-im * t2 * Hs[2]) * exp(-im * t3 * Hs[3])
U = exp(Hs; alg=Trotter{1}())
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the existing Trotter{1} implementation behind exp(H; alg=Trotter{1}(n)) and how exp accepts operator inputs. Determine how the interface should consume the time-slice vector Hs and preserve its ordering. Done means exp(Hs; alg=Trotter{1}()) supports the time-dependent example with the expected product of exponentials.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100