So I’ve been running some DMRG calculations on a 1-D chain, implemented as
ampo = OpSum() for j=1:L-1 ampo += f(j, j+1) "C",j,"Cdag",j+1 ampo += f(j, j+1) "C",j+1,"Cdag",j end for j=1:L for k=1:j-1 ampo += g(j, k),"N",j,"N",k end end
Where f ~ exp(r), g ~ 1/r are some function dependent on the distance between each pair of sites.
Now the algorithm gives good results (by that I mean both compared to ED for shorter chains, and the excited states were ordered by their energies for the longer chains) for the perfect chain, i.e. there’s no disorder in the system.
But I’ve noticed that once I started to add disorder, i.e. varying the location of each site randomly, the ITensor DMRG starts to give wrong result for long chains ( say ~60 sites), and by wrong results I mean when I searched for excited states, states with lower energies would appear after states with high energies, the excited states were not ordered by their energy.
Also interestingly, the disordered DMRG calculation seems to get worse the longer the chains are. The short disordered chain DMRG results are identical to the ED ones, but at longer chains, the energy orders are all messed up.
I’m wondering if this has something to do with how long range interactions are coded in ITensor (maybe by approximation to exponential?) and if there are ways to explicitly write them out if that’s case.
If this is something physical, by my understanding even 1D critical system should be solvable by DMRG without blowing up exponentially, but I wonder if this is something more physical.