I observe similar increases in energy as those seen here (http://itensor.org/support/576/ground-state-energy-increase-after-10th-sweep). The increases in energy I see also begin at order 10^(-10) even though my truncation cutoff is set to 10^(-12). I'm able to reproduce energies up to the order of 10^(-10) using ED so I'm confident that my Hamiltonian is set up correctly and suspect that there is some issue with the Davidson convergence/precision. Is there a default cutoff of 10^(-10) that I'm missing somewhere or should the supplied DMRG algorithm be capable of seeing energy convergence on the order of 10^(-12) and potentially lower for more stringent cutoffs (it looks like there might be a hard-coded cutoff of 10^(-12) in the Davidson algorithm)?

The answer to the referenced question suggests increasing the number of iterations, but I'm not sure if this addresses the root of the problem or not. Should I increase "niter" (the max number of Davidson iterations) to something like 6 so that the algorithm will exit automatically if convergence is reached and I just hope this is sufficient or should I play with "Errgoal" in the args for the algorithm? It looks like the default value for "Errgoal" is quite small at 10^(-4) so I'm not sure if this is the right approach and if I'm reading the code properly. I'm interested in calculating non-local observables whose errors should scale as the square root of the errors in energy so I'd like to have as high of precision as possible.

As a quick aside, I know that the error in energy should scale proportional to the truncation error, but in practice I find it is several orders of magnitude larger. What is the reason for this?

Thanks!

Does "ErrGoal" control the accuracy of the eigenvalue? say that the exact eigenvalue lambda is: lambda_numerical-ErrGoal<=exact lama<=lambda_numerical. If that's the case, by setting ErrGoal to 10^(-4) for all davidson diagonalization will affect the eigenvalue to order 10^(-4) and then its' meaningless to keep 10-12 decimal places for the eigenvalue.

I understand that we don't need the davidson algorithm to converge to very high accuracy in the first several sweeps because the unconverted environment. But in the last several sweeps I'd like to set ErrGoal low and MaxIter high. How can I create a table (just like sweep table) to specify ErrGoal and MaxIter used in the Davidson algorithm in each sweep?