# Difficulties with DMRG on a non-hermitian system

+1 vote

I'm trying to run dmrg on a non-Hermitian Z3 system, defined below. The system has an exact solution for the ground state in the open bc case, and iTensor typically gets within about 1% of the correct energy. I can't seem to achieve better convergence by changing the sweep parameters (including noise), and furthermore the final energy seems to depend on the initial state used, again to margins of ~1%. The system has a real ground state energy, but the rest of the spectrum is complex. I suspect this is the cause of the problem, as the algorithm appears to truncate to real numbers at various stages.

Is there anything you can suggest to improve convergence? I was considering attempting to rewrite the various dmrg functions using Cplx instead of Real - would this be worthwhile?

  auto sites = Z3(N);
auto ampo = AutoMPO(sites);
for(int j = 1; j < N; ++j){
ampo += -1.0, "Sig", j;
ampo += -1.0,"Tau",j,"TauDag",j+1;
}
ampo += -1.0, "Sig", N;
if (periodic_bcs)
ampo += -1.0,"Tau",N,"TauDag",1;
auto H = MPO(ampo);


Note: the system is a special case of https://arxiv.org/pdf/1612.02617.pdf

+1 vote
answered by (30.7k points)

Hi, so this is an interesting use case but the dmrg function in ITensor isn't designed to work for non-Hermitian Hamiltonians as you might have guessed. Most of the parts of the dmrg code should generalize to the non-Hermitian case, but the part that probably will not generalize is the Davidson eigensolver at the core of the DMRG algorithm (the part of the algorithm where DMRG does a few steps of an iterative sparse exact diagonalization routine like Davidson or Lanczos).

So for a non-Hermitian case, I would think your best bet would be to replace the Davidson algorithm that ITensor dmrg uses with an algorithm appropriate for non-Hermitian Hamiltonian problems. Probably Arnoldi is the algorithm you want.

Or if you happen to know that Davidson should work for some reason let me know.

The dmrg function provided with ITensor should already fully handle the case where the tensors have complex entries. So I don't think there is any more you can do in that direction.

Hope that helps -

Miles

commented by (200 points)
Thank you for the great response! I'll try a different eigensolver.