Hi! I want to use Tenpy to find the ground state and first excited state energies. However, DMRG is running very slowly. For small system sizes, it is even slower than exact diagonalization! (~25 seconds for 10 spins; ~145 seconds for 12 spins.) My model is an Ising-type spin model with nearest and next-nearest neighbor interactions (I'm using the CouplingMPOModel class on a "chain" lattice). It runs faster for certain coupling strengths than others--but how fast it runs does not seem to be correlated with any physics I am aware of.
These are the DMRG parameters I'm using:
Python: Select all
dmrg_params = {
'trunc_params': {
'chi_max': 300,
'svd_min': 1.e-10
},
'mixer': True,
'max_sweeps': 30
}
Then, I run DMRG like this to get the ground state:
Python: Select all
eng = dmrg.TwoSiteDMRGEngine(mps, model, dmrg_params)
E0, psi0 = eng.run()
And again, to get the first excited state:
Python: Select all
eng_excited = dmrg.TwoSiteDMRGEngine(mps, model, dmrg_params, orthogonal_to=[psi0])
E1, psi1 = eng_excited.run()
I also tried One-Site DMRG, but that doesn't give me the correct results. My model has translational symmetry, but when I checked, that is not reflected in the bond dimensions across the chain. What is causing the code to be so slow? Could I get some guidance on choosing dmrg_params? Some of my collaborators use other DMRG packages and their code seems to run much faster... your help is greatly appreciated!
P.S. Eventually, I would like to extend this to infinite DMRG, so if you have any guidance on choosing parameters for that, I would greatly appreciate it as well! Thanks!