The DMRG parameter of niter

Hi,itensor
When I move from ITensor c++ to ITensor.jl, I notice that the parameter of niter, which controls maximum number of Davidson (“exact diagonalization”) iterations, has disappeared from the documentation. And there is no way to find a method to specify it. Facing with this situation, I have three little confusions and questions?

  1. When I do not specify the parameter of niter, whether the ITensor.jl have a default value of niter? If so, niter=?

  2. If I want to specify this parameter like sweeps ,cutoff, maxdim, is there any way to achieve this?

  3. If the parameter of niter is set by default in ITensor.jl, will it have a great impact on the speed of DMRG calculation?

Thank you for your kindness!

Hi, thanks for the question.

This parameter (called niter in C++) in Julia is now called eigsolve_krylovdim. I have not found many situations in my own research where adjusting this parameter had a big effect on the output of a DMRG calculation, other than making it take a longer time to run if it was set too large.

The default value of eigsolve_krylovdim in ITensors.jl is 3, which is equivalent to niter=2 in C++. It can have a great impact on the speed of a DMRG calculation which is why we have set it to a default that leads to almost always the fastest code.

You can adjust this parameter by passing the keyword argument eigsolve_krylovdim to the dmrg function, to see what effect it has on your own calculation. In the Julia version it cannot be set differently for each sweep, but just has one overall setting. We could change it to be settable for each sweep if someone can demonstrate a case where this is definitely needed.

Thanks for your professional answer, it helpes me understand and learn ITensor.jl