Add (fast) full update#222
Conversation
|
@ogauthe You can now try the full update on models you are interested in. You can know the basic usage of the related functions from the test file |
Co-authored-by: Lukas Devos <ldevos98@gmail.com>
|
Thank you! I will have a look. |
|
@Yue-Zhengyuan , can you let me know what the status is on this (or other) PRs, and which ones should be reviewed/merged? I would like to consider releasing a new version of PEPSKit somewhere in the week of July 7th. |
|
@lkdvos Right now we only have Sander's #184 and this one. #184 has been stagnated for quite a while, and maybe needs to be addressed first. Fast full update is also ready for review actually. I'm just waiting for @ogauthe's feedback on whether it can provide enough improvement over SU for finite-T calculations. |
|
I checked the finite temperature results obtained with full update as compared to simple update. See https://github.com/ogauthe/BenchmarkPEPS/blob/main/run/run_heisenberg_fullupdate.jl for the script. I confirm I get the correct results with the full update. I find a slightly lower energy with the full update as compared to the simple update. Assuming energy(FU) = energy(SU) for beta < beta1 then energy(FU) < energy(SU) for beta > beta1 corresponds to a lower free energy, therefore a better approximation of the exact thermal density matrix. Congrat @Yue-Zhengyuan ! In terms of interface, I think simpleupdate(wpeps, hamilt, su_alg)
fullupdate(ψ, env, hamilt, fu_alg)or evolve_simpleupdate(wpeps, hamilt, su_alg)
evolve_fullupdate(ψ, env, hamilt, fu_alg)or maybe time_evolve(wpeps, hamilt, su_alg)
time_evolve(ψ, env, hamilt, fu_alg)using dispatch on algorithm? |
|
TL;DR: the name
This can be a good improvement for future work. YASTN started on time evolution earlier than us and they have a unified interface for different algorithms. I didn't use it mainly because I'm more familiar with how TensorKit handles fermions. But currently I really don't have the energy for interface revamps to catch up with them... In particular, Also, FU uses the usual |
|
Figured out what happened. Before adding the normalization, the fullinf env has a small norm. Since I use |
|
Commit history is becoming messy... Close this PR now and try again later. |
This PR tries again to add the fast full update algorithm (arXiv 1503.05345) (see also discussion in the old PR #106). It uses the unified interface for time evolution algorithms introduced in #280.
The performance of FU is benchmarked with the real-time evolution of the transverse field Ising model (TFIM) (see
test/timeevol/tf_ising_realtime.jl), which calculates the magnetization in the x-direction after the infinite transverse field is reduced to a finite value.In addition, I added the option to use pseudo-inverse to solve linear equations in
ALSTruncation. Otherwise the test on TFIM will fail (butFullEnvTruncationis still fine withKrylovKit.linsolve).Limitations:
To do later: