+1 vote
asked by (240 points)

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 Answer

+1 vote
answered by (70.1k 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 -


commented by (240 points)
Thank you for the great response! I'll try a different eigensolver.
commented by (370 points)
Hi Miles,

Do you plan to add nonhermitian eigensolver into dmrg in itensor? Currently I need to solve the ground sate for a nonhermitian system, any suggestion for that?

commented by (70.1k points)
Hi Feng, we do offer the Arnoldi method which can solve non-Hermitian problems iteratively. It is defined in the file itensor/iterativesolvers.h. Would that be what you need?

Welcome to ITensor Support Q&A, where you can ask questions and receive answers from other members of the community.

Formatting Tips:
  • To format code, indent by four spaces
  • To format inline LaTeX, surround it by @@ on both sides
  • To format LaTeX on its own line, surround it by $$ above and below
  • For LaTeX, it may be necessary to backslash-escape underscore characters to obtain proper formatting. So for example writing \sum\_i to represent a sum over i.
If you cannot register due to firewall issues (e.g. you cannot see the capcha box) please email Miles Stoudenmire to ask for an account.

To report ITensor bugs, please use the issue tracker.