# Algorithm keeping more states than physically allowed in svd?

+1 vote
edited

I'm running a spin chain simulations for tests, open boundary conditions. The dimension of local Hilbert space is N. On the "backwards" part of the sweep, it seems like the algorithm is keeping many more states than physically (or by Schmidt decomposition theorem, allowed).
For instance, for N=3, it claims to keep 69 states on bond (1,2), whereas the left part of the Hilbert space, consisting of a single spin, has dimension 3 only. This does not happen on the "forward" part of the sweep, where 3 states are kept.

Is this departure from the optimal Schmidt number of states correct?

Is this perhaps the effect of the noise term?

commented by (70.1k points)
Hi, thanks for the report. If this is really happening (or if the printout is incorrectly reporting the number of states) then either way it would definitely be a bug.

* A few lines of the printout that reported keeping 69 states
* What cutoff and maxm values you had set for this sweep
commented by (170 points)
Hi,
Here is a bit of an output, the last few bonds of sweep no.5 and the same bonds on the beginning of sweep no.6.

Sweep=5, HS=2, Bond=(2,3)
I 0 q 1E-06 E -6.0000000000
I 1 q 7E-07 E -6.0000000000
Truncated to Cutoff=1.0E-14, Min_m=20, Max_m=400
Trunc. err=0.0E+00, States kept=m=81
Sweep=5, HS=2, Bond=(1,2)
I 0 q 7E-07 E -6.0000000000
I 1 q 6E-07 E -6.0000000000
Truncated to Cutoff=1.0E-14, Min_m=20, Max_m=400
Trunc. err=5.2E-17, States kept=m=69
Largest m during sweep 5 was 81
Largest truncation error: 5.1704e-16
Energy after sweep 5 is -6.000000000000
Sweep=6, HS=1, Bond=(1,2)
I 0 q 6E-07 E -6.0000000000
I 1 q 3E-07 E -6.0000000000
Truncated to Cutoff=1.0E-14, Min_m=20, Max_m=400
Trunc. err=0.0E+00, States kept=m=3
Sweep=6, HS=1, Bond=(2,3)
I 0 q 3E-07 E -6.0000000000
I 1 q 3E-07 E -6.0000000000
Truncated to Cutoff=1.0E-14, Min_m=20, Max_m=400
Trunc. err=0.0E+00, States kept=m=9

This keeping of too many states on the "backwards" run seems to disappear in the last sweep, when the noise term is put to zero, btw.
commented by (70.1k points)
Ok thanks - I was able to reproduce this issue on my computer and it is indeed weird behavior! I am looking into it; hopefully it will be something small and harmless but thanks for this helpful bug report. When I find the fix I will post an answer below.