Dear ITensor team,
First of all, thank you for providing such a useful package.
I also appreciate the continuous support of the ITensor Q&A and discourse.
This is the first time I have asked a question, but so far, the ITensor Q&A accumulated by kind support has helped me a lot.
My question is related to parallelDMRG, the MPI parallel version of DMRG.
I don’t know if this is the right place to ask about parallelDMRG because I cannot seem to find parallelDMRG on the new ITensor website (why?), but I will post it anyway.
In parallelDMRG, “blocks” are generated as many as the number of processes.
As a final result of executing parallelDMRG, the optimized energy for each block is displayed as follows.
...
Block 2 final energy = -239.999999999999
Block 5 final energy = -239.999999999999
Block 3 final energy = -239.999999999999
Block 9 final energy = -239.999999999999
My question is, what is the true final energy?
The blocks independently perform a sweep over the assigned regions.
When the sweep is finished, the block communicates with the neighboring block to merge their states.
If I understand correctly, the true final energy is the one of block 9 on the last line because sweeps are in progress for the others.
Alternatively, does the difference in energy from block to block mean that they have not converged enough?
If so, should I perform more sweeps until the energy variance among processes is small enough so that the final energy choice does not cause a problem?
This sample Hamiltonian is 120 independent S=1 antiferromagnetic Heisenberg rungs.
Therefore, as shown above, the “final” energies take the same values, and it does not matter for this sample since the problem is too easy.
However, productive calculations for more complicated systems may cause such problems.
Since it is an almost conceptual question, I will move it to the “DMRG and Numerical Methods” category if necessary and possible.