-
Notifications
You must be signed in to change notification settings - Fork 16
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
Electron occupation number not concerved in imaginary time-evolution #168
Comments
I confirm that on the latest commit of the ttn branch 37145a7, the absolute deviation is around 1e-3 at 20 steps. Pretty large IMO. I'm running on pure CPU. Update: reproduced the results with CPU+GPU |
I haven't found out the exact reason for this - it's probably related to how the initial state is prepared through MPS expansion.
Note the solution only works after(including) commit 940161a . Before the commit, ITE works normally without modification. |
yea the also, for this ad hoc solution,
if we perform tp.latest_mps.canonicalise().canonicalise(), things will become bad too. implying that |
also, why we need Renormalizer/renormalizer/mps/mps.py Line 647 in 2044db8
|
@jiangtong1000 Good to know you have confirmed that canonicalization helps to reduce the error. The fact that when M=16 the error is smaller is very interesting. Yes I also found performing canonicalization twice will lead to large errors. Additionally, if it's performed 3 times, the error is small. The number of canonicalizations affects the direction of sweep in TDVP-PS. In particular, odd number of canonicalization ensures that the sweep starts from left to right then right to left. I've tried the following configurations
This ensures that there is no "redundant" bond dimension on both sides of MPS chain. For example for a spin chain if the initial bond dimension is 16, 16, 16 after the canonicalization the bond dimension becomes 2, 4, 2 |
Interesting. In the past I always thought that by conserving particle number SVD or QR, (the update_mps function), the particle number are always strictly conserved. |
oh that is true, the particle number are strictly preserved. It is just the translational invariance was broken. |
@atxy-blip Does altering the initial MPDM solve the issue? |
Very recently we have found out that the electron occupation number changes drastically after several times of imaginary time-evolution.
The very finding has been reproduced on several GPU platforms with a test file (holstein-test.zip) provided by @zhoulq2333. With any version of
renormalizer
not earlier than 254b981, the value ofe_occupation
, which in principle should remain unchanged, deviates significantly from the initial value of 0.1 after a mere evolution of about 20 steps. Please feel free to carry out the test on your own.In brief, the commit of 254b981 does two things
RENO_NUM_THREADS
to unify multi-thread librariesBugs introduced by the latter should have been addressed by #167, while as I mentioned in #167 (comment), setting
RENO_NUM_THREADS
to 1 does not take effect in the latest version cloned from themaster
branch, though helps in the version ofv0.0.4
.Therefore, I am seeking help here on how to address the problem, either to validate its existence or to investigate its origin.
The text was updated successfully, but these errors were encountered: