+1 vote
asked by (470 points)
edited by

Hi, Miles
Here's my Hamiltonian with open boundary
@@H=\sum{i=1}^{N-1}K1(\vec{Si}\cdot\vec{S{i+1}})^2+\sum{i=1}^{N-2}K2(\vec{Si}\cdot\vec{S{i+2}})^2+\sum{i=1}^{N-3}J\parallel\vec{Si}\cdot\vec{S{i+3}}+\lambda\sum{i=1}^{N-2}(-1)^i\vec{Si}\cdot(\vec S{i+1}\times\vec{S{i+2}})@@

https://imgur.com/a/ZKKKh

where lamda is about 2 order smaller than other parameters in above Hamiltonian.
It's extremely hard to get the ground state with truncation error less than 1E-7 when N > 16. Also, it takes days for only 63 sites.
I have experimented many sets of DMRG parameter with dmrg and iqdmrg.
The only DMRG parameter can lower down truncation error is raising maxm.

Sweeps:
1  Maxm=10, Minm=1, Cutoff=1.0E-10, Niter=2, Noise=1.0E-07
2  Maxm=20, Minm=1, Cutoff=1.0E-10, Niter=2, Noise=1.0E-08
3  Maxm=100, Minm=10, Cutoff=1.0E-10, Niter=2, Noise=1.0E-10
4  Maxm=200, Minm=10, Cutoff=1.0E-10, Niter=2, Noise=1.0E-15
5  Maxm=400, Minm=10, Cutoff=1.0E-10, Niter=2, Noise=1.0E-20
6  Maxm=800, Minm=10, Cutoff=1.0E-10, Niter=2, Noise=1.0E-30
7  Maxm=1600, Minm=10, Cutoff=1.0E-10, Niter=2, Noise=0.0E+00
8  Maxm=2400, Minm=10, Cutoff=1.0E-10, Niter=2, Noise=0.0E+00
9  Maxm=2400, Minm=10, Cutoff=1.0E-10, Niter=2, Noise=0.0E+00
10  Maxm=3000, Minm=10, Cutoff=1.0E-10, Niter=2, Noise=0.0E+00
11  Maxm=3000, Minm=10, Cutoff=1.0E-10, Niter=2, Noise=0.0E+00


vN Entropy at center bond b=31 = 1.238744298544
Eigs at center bond b=31: 0.5049 0.3166 0.1094 0.0282 0.0180 0.0094 0.0059 0.0026 0.0024 0.0017 
Largest m during sweep 1 was 10
Largest truncation error: 0.0258392
Energy after sweep 1 is 5.602725754556
Sweep 1 CPU time = 2.649s (Wall time = 2.661s)

vN Entropy at center bond b=31 = 1.612233679937
Eigs at center bond b=31: 0.3923 0.2871 0.1657 0.0503 0.0338 0.0229 0.0115 0.0107 0.0076 0.0071 
Largest m during sweep 2 was 20
Largest truncation error: 0.0028786
Energy after sweep 2 is 0.530196370527
Sweep 2 CPU time = 39.75s (Wall time = 8.483s)

vN Entropy at center bond b=31 = 1.925120785867
Eigs at center bond b=31: 0.3345 0.2587 0.1691 0.0615 0.0459 0.0318 0.0192 0.0188 0.0125 0.0120 
Largest m during sweep 3 was 100
Largest truncation error: 4.6379e-05
Energy after sweep 3 is -1.624350530351
Sweep 3 CPU time = 5m, 47.8s (Wall time = 22.58s)

vN Entropy at center bond b=31 = 2.274203257494
Eigs at center bond b=31: 0.2817 0.2263 0.1570 0.0639 0.0589 0.0345 0.0280 0.0265 0.0227 0.0190 
Largest m during sweep 4 was 200
Largest truncation error: 4.08592e-05
Energy after sweep 4 is -1.868672848123
Sweep 4 CPU time = 22m, 49s (Wall time = 1m, 28.0s)

vN Entropy at center bond b=31 = 2.575775322982
Eigs at center bond b=31: 0.2459 0.1961 0.1393 0.0676 0.0569 0.0356 0.0332 0.0332 0.0312 0.0268 
Largest m during sweep 5 was 400
Largest truncation error: 1.87256e-05
Energy after sweep 5 is -1.952988166461
Sweep 5 CPU time = 1h, 26m, 35s (Wall time = 5m, 33.9s)

vN Entropy at center bond b=31 = 2.959967741963
Eigs at center bond b=31: 0.1998 0.1549 0.1120 0.0760 0.0503 0.0458 0.0420 0.0412 0.0307 0.0254 
Largest m during sweep 6 was 800
Largest truncation error: 9.42967e-06
Energy after sweep 6 is -2.003773486256
Sweep 6 CPU time = 5h, 50m, 20s (Wall time = 22m, 31s)

vN Entropy at center bond b=31 = 3.282725034643
Eigs at center bond b=31: 0.1518 0.1088 0.0913 0.0889 0.0523 0.0512 0.0492 0.0318 0.0305 0.0293 
Largest m during sweep 7 was 1600
Largest truncation error: 2.92422e-06
Energy after sweep 7 is -2.026856689761
Sweep 7 CPU time = 19h, 15m, 4s (Wall time = 1h, 14m, 4s)

vN Entropy at center bond b=31 = 3.326304698405
Eigs at center bond b=31: 0.1443 0.0974 0.0942 0.0918 0.0517 0.0515 0.0512 0.0307 0.0306 0.0305 
Largest m during sweep 8 was 2400
Largest truncation error: 7.7723e-07
Energy after sweep 8 is -2.028666571067
Sweep 8 CPU time = 51h, 51m, 24s (Wall time = 3h, 21m, 48s)

vN Entropy at center bond b=31 = 3.330175270327
Eigs at center bond b=31: 0.1438 0.0951 0.0943 0.0936 0.0515 0.0515 0.0515 0.0308 0.0306 0.0305 
Largest m during sweep 9 was 2400
Largest truncation error: 7.44263e-07
Energy after sweep 9 is -2.028703604404
Sweep 9 CPU time = 60h, 25m, 10s (Wall time = 3h, 56m, 10s)

vN Entropy at center bond b=31 = 3.331970553920
Eigs at center bond b=31: 0.1436 0.0945 0.0943 0.0941 0.0515 0.0514 0.0514 0.0307 0.0307 0.0306 
Largest m during sweep 10 was 3000
Largest truncation error: 3.41021e-07
Energy after sweep 10 is -2.028913892348
Sweep 10 CPU time = 90h, 38m, 16s (Wall time = 5h, 57m, 43s)

vN Entropy at center bond b=31 = 3.332242493775
Eigs at center bond b=31: 0.1436 0.0944 0.0943 0.0942 0.0514 0.0514 0.0514 0.0307 0.0307 0.0306 
Largest m during sweep 11 was 3000
Largest truncation error: 3.49115e-07
Energy after sweep 11 is -2.028914160267
Sweep 11 CPU time = 98h, 40m, 51s (Wall time = 6h, 30m, 59s)

I tried raising maxm to above 3200 and the upper bound is about 3500.
For higher N, it's getting more difficult.

My goal is to do finite size scaling to show some observables are zero.
I naively think the reasons could be the following:
1. Gapless even though it's spin-1 system.
2. MPS for the ground state is invalid since the entanglement.
Is there any way you suggest for me to resolve it?
Thank you very much!

    for(int j = 1; j <= (N-1); ++j)
    {
     ampo += Kone/4.0,"Sp*Sp",j,"Sm*Sm",j+1;
     ampo += Kone/4.0,"Sm*Sm",j,"Sp*Sp",j+1;
     ampo += Kone/4.0,"Sp*Sm",j,"Sm*Sp",j+1;
     ampo += Kone/4.0,"Sm*Sp",j,"Sp*Sm",j+1;
     ampo += Kone/1.0,"Sz*Sz",j,"Sz*Sz",j+1;
     ampo += Kone/2.0,"Sp*Sz",j,"Sm*Sz",j+1;
     ampo += Kone/2.0,"Sm*Sz",j,"Sp*Sz",j+1;
     ampo += Kone/2.0,"Sz*Sp",j,"Sz*Sm",j+1;
     ampo += Kone/2.0,"Sz*Sm",j,"Sz*Sp",j+1;
     }



 for(int j = 1; j <= (N-2); ++j)
    {
     ampo += Ktwo/4.0,"Sp*Sp",j,"Sm*Sm",j+2;
     ampo += Ktwo/4.0,"Sm*Sm",j,"Sp*Sp",j+2;
     ampo += Ktwo/4.0,"Sp*Sm",j,"Sm*Sp",j+2;
     ampo += Ktwo/4.0,"Sm*Sp",j,"Sp*Sm",j+2;
     ampo += Ktwo/1.0,"Sz*Sz",j,"Sz*Sz",j+2;
     ampo += Ktwo/2.0,"Sp*Sz",j,"Sm*Sz",j+2;
     ampo += Ktwo/2.0,"Sm*Sz",j,"Sp*Sz",j+2;
     ampo += Ktwo/2.0,"Sz*Sp",j,"Sz*Sm",j+2;
     ampo += Ktwo/2.0,"Sz*Sm",j,"Sz*Sp",j+2;
    }
  for(int j = 1; j <= (N-3); ++j)
    {
     ampo += (-0.5)*Jp,"S+",j,"S-",j+3;
     ampo += (-0.5)*Jp,"S-",j,"S+",j+3;
     ampo += (-1.0)*Jp,"Sz",j,"Sz",j+3;
     }

  for(int j = 2; j <= (N-2); j=j+2)
    {
     ampo += (0.5_i)*lamda,"Sz",j,"Sp",j+1,"Sm",j+2;
     ampo += -(0.5_i)*lamda,"Sz",j,"Sm",j+1,"Sp",j+2;
     ampo += -(0.5_i)*lamda,"Sp",j,"Sz",j+1,"Sm",j+2;
     ampo += (0.5_i)*lamda,"Sm",j,"Sz",j+1,"Sp",j+2;
     ampo += (0.5_i)*lamda,"Sp",j,"Sm",j+1,"Sz",j+2;
     ampo += -(0.5_i)*lamda,"Sm",j,"Sp",j+1,"Sz",j+2;

    }

  for(int j = 1; j <= (N-2); j=j+2)
    {
     ampo += -(0.5_i)*lamda,"Sz",j,"Sp",j+1,"Sm",j+2;
     ampo += (0.5_i)*lamda,"Sz",j,"Sm",j+1,"Sp",j+2;
     ampo += (0.5_i)*lamda,"Sp",j,"Sz",j+1,"Sm",j+2;
     ampo += -(0.5_i)*lamda,"Sm",j,"Sz",j+1,"Sp",j+2;
     ampo += -(0.5_i)*lamda,"Sp",j,"Sm",j+1,"Sz",j+2;
     ampo += (0.5_i)*lamda,"Sm",j,"Sp",j+1,"Sz",j+2;

    }

The parameters I used are Kone= 0.9 Ktwo= 0.1 Jp=1.0, lamda =0.001

commented by (21.9k points)
Hi Victor, I can't really see what your Hamiltonian is (the latex doesn't seem to be valid so it's not formatting). If you could fix it that would be helpful. Even better would be if you could provide some sample code for the Hamiltonian and I could try a few things myself just to see perhaps why this system is so tough.

So presumably it's a one dimensional system? It would indeed be surprising if it really needed such large bond dimensions for a ground state, even if gapless.

One issue is that you may be raising the maxm parameter too rapidly, and the state could be getting stuck in an anomalously highly entangled state which isn't yet the ground state, just due to the sweep parameters you chose. So I'd recommend doing many more sweeps at a very small maxm (just like maxm=10) to make sure that things are converged for that maxm parameter before raising it.
commented by (470 points)
edited by
Hi, sorry about that I couldn't fix the latex format.
But here's my Hamiltonian:

https://imgur.com/a/ZKKKh

It's 1-dimensional system.
Please see the autompo sample code I added in my post.
The result of dmrg.cc shows the ground state is singlet so I could set Sz=0 for iqdmrg.cc which is much faster than dmrg.cc.
Thank you.
commented by (21.9k points)
Ok thanks, very helpful. Actually could you email me your code? I will try it out to perhaps get a better idea of what's going on. The Hamiltonian is clear now from your link, but it would be a bit tedious to program even with AutoMPO!
commented by (470 points)
Sure. I already sent it to your gmail. Thanks for your help!

1 Answer

+1 vote
answered by (21.9k points)

Hi Victor,
Just replying here to mark this question as answered. I think your system is just a very tough one for reasons of physics. Please try some of the approaches I recommended in my email to deal with this tough system.

Best regards,
Miles

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.

Categories

...