iDMRG Convergence Issues in 2D Triangular Lattice XXZ Model

How do I use this algorithm? What does that parameter do?
Post Reply
Lost
Posts: 2
Joined: 25 Nov 2024, 09:08

iDMRG Convergence Issues in 2D Triangular Lattice XXZ Model

Post 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]
User avatar
Johannes
Site Admin
Posts: 463
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: iDMRG Convergence Issues in 2D Triangular Lattice XXZ Model

Post by Johannes »

Try increasing/varying Lx until you see convergence!

In general, if you expect symmetry breaking, the ground state with broken symmetry should be commensurate, i.e. the symmetry broken pattern needs to fit into your iDRMG unit cell! Otherwise, the MPS needs to become a "cat" state with multiple eigenvectors of the transfer matrix with eigenvalue 1, which in turn leads to convergence issues.
Lost
Posts: 2
Joined: 25 Nov 2024, 09:08

Re: iDMRG Convergence Issues in 2D Triangular Lattice XXZ Model

Post by Lost »

I am happy to see my calculations converge when I set Lx to 3. Of course, it makes every sweep takes longer time. Moreover, I may need to make a prior guess about the system size required for the calculation.

At least I can do calculations now. Thank you very much!!
Post Reply