Page 1 of 1

iDMRG Convergence Issues in 2D Triangular Lattice XXZ Model

Posted: 25 Nov 2024, 10:55
by Lost
Hello, I am a beginner in DMRG, and I have several confused questions. In short, the main problem is that the iDMRG calculations cannot converge in 2D triangular lattice XXZ model.
  • When \(J_z\) is very large in two site iDMRG, the energy jumps within a small range, and sometimes it breaks the lowest value which I got in DMRG. When \(J_z\) is not large, the energy seems right when sweeping, and it can converge to the right value after some sweeps.
  • When \(J_z\) is very large in single site iDMRG, the energy jumps randomly from `-inf` to `inf` at first, and the jumping range becomes smaller but the energy may also becomes strange. When \(J_z\) is not large, the energy also jumps randomly from `-inf` to `inf` at first, but it can converge to the right value after 50~100 sweeps.
In detail, my model params is \(J_x=J_y=1, h_x=h_y=h_z=0, L_x=1, L_y=6\). \(J_z\) is from \(0\) to \(6\) and the turning point is around \(1.7\), which means the iDMRG cannot converge at \(J_z>1.7\). For iDMRG, I set "periodic" boundary condition in both x and y, and I set the "Sz" conserve. The `max_sweeps` is 100~300, and the `chi_max` is 800~4000 I set.

I tried to change many params to solve this problem:
  • `svd_min`: seems no big impact (smaller than 1e-6)
  • `chi_list`: seems no big impact if I make it increase progressively
  • `chi_max`: If it is very small (smaller than 100), it can converge but the energy is not correct.
  • `lanczos_params`: They won't cause too much impact.
  • `mixer_params`: They won't cause too much impact.
  • `update_env`: If it is 0, the single site iDMRG's energies will not jump outside a proper range, but it cannot converge as usual.
I am very confused about this problem. I know this model has frustration, and the phase here should be in 120 degree order or some phases like that. I see the viewtopic.php?t=92 and some more topics but they are useless for my problem. I also tried VUMPS, but it still cannot converge because `split_err` is about 1e-4 after 60~100 sweeps.


I don't know what to do now. Forgive me for my poor English. Thank you!


One example logs (Jz=5, max_chi=800, single site iDMRG):

Code: Select all

SpinChainNNN2: reading 'lattice'=<tenpy.models.lattice.Triangular object at 0x00000294909C8440>
SpinChainNNN2: reading 'Jx'=1
SpinChainNNN2: reading 'Jy'=1
SpinChainNNN2: reading 'Jz'=5
SpinChainNNN2: reading 'Jxp'=0.0
SpinChainNNN2: reading 'Jyp'=0.0
SpinChainNNN2: reading 'Jzp'=0.0
DMRG: reading 'active_sites'=1
DMRG: subconfig 'trunc_params'=Config(<2 options>, 'trunc_params')
DMRG: subconfig 'lanczos_params'=Config(<2 options>, 'lanczos_params')
start environment_sweep
trunc_params: reading 'chi_max'=800
trunc_params: reading 'svd_min'=1e-08
DMRG: subconfig 'mixer_params'=Config(<3 options>, 'mixer_params')
DMRG: reading 'mixer'=True
activate SubspaceExpansion with initial amplitude 1e-05
DMRG: reading 'max_sweeps'=100
Running sweep with optimization
lanczos_params: reading 'N_min'=3
lanczos_params: reading 'N_max'=25
DMRG: reading 'update_env'=5
start environment_sweep
checkpoint after sweep 10
energy=-7.6435875256521770, max S=2.8920505842715052, age=192, norm_err=2.2e-01
Current memory usage 442.3MB, wall time: 257.9s
Delta E = nan, Delta S = 2.8568e-01 (per sweep)
max trunc_err = 7.6073e-08, max E_trunc = 1.9885e+01
chi: [800, 800, 800, 800, 800, 800]
================================================================================
Running sweep with optimization
Disable mixer after 20 sweeps, final amplitude 3.007286598217175e-09.
deactivate SubspaceExpansion with final amplitude 3.007286598217175e-09
start environment_sweep
checkpoint after sweep 20
energy=-97.2426592249051538, max S=2.7749297397426744, age=372, norm_err=1.0e+00
Current memory usage 430.0MB, wall time: 276.7s
Delta E = -8.9599e+00, Delta S = -1.1710e-02 (per sweep)
max trunc_err = 9.0359e-10, max E_trunc = 3.0058e+02
chi: [800, 800, 800, 800, 800, 800]
================================================================================
DMRG: reading 'max_E_err'=1e-06
DMRG: reading 'max_S_err'=1e-05
Running sweep with optimization
start environment_sweep
checkpoint after sweep 30
energy=3.5692212646085011, max S=4.6352541295778744, age=552, norm_err=5.6e-02
Current memory usage 445.6MB, wall time: 226.7s
Delta E = 1.0081e+01, Delta S = 1.7867e-01 (per sweep)
max trunc_err = 0.0000e+00, max E_trunc = 5.9142e+02
chi: [800, 800, 800, 800, 800, 800]
================================================================================
Running sweep with optimization
start environment_sweep
checkpoint after sweep 40
energy=-17.3509894224101267, max S=2.5147900845873150, age=732, norm_err=4.0e-01
Current memory usage 447.8MB, wall time: 227.4s
Delta E = -2.0920e+00, Delta S = -2.1215e-01 (per sweep)
max trunc_err = 0.0000e+00, max E_trunc = 7.0998e+02
chi: [800, 800, 800, 800, 800, 800]
================================================================================
Running sweep with optimization
start environment_sweep
checkpoint after sweep 50
energy=45.5935904524861613, max S=2.9418626359266327, age=912, norm_err=2.5e-01
Current memory usage 445.9MB, wall time: 216.1s
Delta E = 6.2945e+00, Delta S = 4.0762e-02 (per sweep)
max trunc_err = 0.0000e+00, max E_trunc = 6.5946e+02
chi: [800, 800, 800, 800, 800, 800]
================================================================================
Running sweep with optimization
start environment_sweep
checkpoint after sweep 60
energy=0.1348247614063590, max S=0.8182981661141295, age=1092, norm_err=3.1e-03
Current memory usage 448.9MB, wall time: 217.3s
Delta E = -4.5459e+00, Delta S = -2.1669e-01 (per sweep)
max trunc_err = 0.0000e+00, max E_trunc = 1.3581e+03
chi: [800, 796, 800, 800, 800, 800]
================================================================================
Running sweep with optimization
start environment_sweep
checkpoint after sweep 70
energy=-38.0829854046577552, max S=2.8421286953295963, age=1272, norm_err=2.9e-01
Current memory usage 461.2MB, wall time: 207.0s
Delta E = -3.8218e+00, Delta S = 2.0890e-01 (per sweep)
max trunc_err = 0.0000e+00, max E_trunc = 1.5733e+03
chi: [800, 796, 800, 800, 800, 800]
================================================================================
Running sweep with optimization
start environment_sweep
checkpoint after sweep 80
energy=-37.4088134836109703, max S=2.9261377830986590, age=1452, norm_err=2.4e-01
Current memory usage 461.5MB, wall time: 213.6s
Delta E = 6.7417e-02, Delta S = 1.0702e-02 (per sweep)
max trunc_err = 0.0000e+00, max E_trunc = 1.8669e+03
chi: [800, 796, 800, 800, 800, 800]
================================================================================
Running sweep with optimization
start environment_sweep
checkpoint after sweep 90
energy=-151.2827424978262627, max S=2.8910270153109847, age=1632, norm_err=3.9e-01
Current memory usage 461.0MB, wall time: 204.4s
Delta E = -1.1387e+01, Delta S = -4.3418e-03 (per sweep)
max trunc_err = 0.0000e+00, max E_trunc = 2.1695e+03
chi: [800, 796, 800, 800, 800, 800]
================================================================================
Running sweep with optimization
start environment_sweep
checkpoint after sweep 100
energy=39.6155690394394568, max S=3.0881235012911272, age=1812, norm_err=1.6e-01
Current memory usage 454.0MB, wall time: 212.0s
Delta E = 1.9090e+01, Delta S = 1.9064e-02 (per sweep)
max trunc_err = 0.0000e+00, max E_trunc = 1.4379e+03
chi: [800, 796, 800, 800, 800, 800]
================================================================================
Running sweep with optimization
start environment_sweep
checkpoint after sweep 110
energy=-0.3297417855636316, max S=2.5992539376370676, age=1992, norm_err=6.5e-03
Current memory usage 425.5MB, wall time: 220.0s
Delta E = -3.9945e+00, Delta S = -4.8341e-02 (per sweep)
max trunc_err = 0.0000e+00, max E_trunc = 2.4119e+03
chi: [800, 796, 800, 800, 800, 800]
================================================================================
SingleSiteDMRGEngine: Maximum number of sweeps reached
final DMRG state not in canonical form up to norm_tol=1.00e-05: norm_err=6.46e-03
start environment_sweep
start environment_sweep
final DMRG state not in canonical form up to norm_tol_final=1.00e-10: norm_err=8.06e-08, calling psi.canonical_form()
SingleSiteDMRGEngine finished after 110 sweeps, max chi=800
DMRG: reading 'max_trunc_err'=None
DMRG is_converged: False
E = -0.3297417855636
final bond dimensions: [800, 796, 800, 800, 800, 800]