-
Notifications
You must be signed in to change notification settings - Fork 22
Add (fast) full update #222
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
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 |
Codecov ReportAll modified and coverable lines are covered by tests ✅
... and 4 files with indirect coverage changes 🚀 New features to boost your workflow:
|
Co-authored-by: Lukas Devos <[email protected]>
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
|
This PR tries again to add the fast full update algorithm (arXiv 1503.05345) (see also discussion in the old PR #106).
The performance of FU is benchmarked with the real-time evolution of the transverse field Ising model (TFIM) (see
test/timeevol/tf_ising_fu.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 (butFullEnvTruncation
is still fine withKrylovKit.linsolve
).Limitations:
fu_iter
,fu_iter2
are exported, and I deliberately did not add afullupdate
function that wraps up everything. It's left to the users to decide how to assemble a complete FU program.