Modular parameter for transfer matrices#187
Conversation
Codecov Report❌ Patch coverage is
... and 26 files with indirect coverage changes 🚀 New features to boost your workflow:
|
| if shape == [1, 1, 0] # trivial implementation | ||
| τ0 = elementary_modular_parameter(T, T) | ||
| Δs = _scaling_dimensions(T, τ0) | ||
| return CFTData(missing, τ0, StructuredVector(Δs, Dict([Trivial => collect(eachindex(Δs))]))) |
There was a problem hiding this comment.
@VictorVanthilt eig_vals in _scaling_dimensions already returns a SectorVector with eigenvalues separated into sectors. Why are you mixing them up here?
There was a problem hiding this comment.
Taking log, sorting and filtering is not supported by default for SectorVectors. In TNRKit v0.6.0 I added this functionality myself (thereby technically commiting type piracy). One issue with SectorVector is that it only allows for structures which are unitranges. The data for the different sectors cannot be stored interleaved into the data vector. This lead to some weird behaviour:
When calling sort on the scaling dimensions, the scaling dimensions would only be sorted within the different blocks corresponding to the different sectors. When you would then print these scaling dimensions for the ising model, the first non-zero element you would see is 1 and not 0.125 as the latter is in de Z2Irrep(1) block of the data.
To combat this, in TNRKit v0.7.0, I introduced StructuredVectors which have the same functionality as SectorVectors (they can be indexed with scalars and sectors) BUT they allow for the interleaving of the scaling dimensions in the data vector. The structures are allowed to be vectors of integers.
|
I find it quite hard to follow what's going on here, can you provide me with a (couple of) good reference(s) on this topic? |
|
I wrote a note here. It is inspired by a PhD thesis (not available online) of one of our former group member, but even there the details are not fleshed out clearly. If you think it's good we can add it to the package documentation. I have also figured out the cause of test error with XY model:
|
|
The XY case should now be fixed by using a better way to solve for τ, which now only need the leading eigenvalue from the transfer matrices. Actually, it can already extract the central charge as well. It is explained in my updated note. |
This PR adds ability to extract the modular parameter of the transfer matrices.
CFTData. This is done by the new functionelementary_modular_parameter. If needed, I can write some explanation on how it works.τ0.In particular, this resolves issues of extracting CFT data for anisotropic models whose elementary modular parameter is not equal to i (example: anisotropic Ising model). Thanks to @Chenqitrg for helpful discussions!
Remark
When
τ0 ≠ i, the quartet[h, L, x, τ0]alone is actually not enough to fully determine the modular parameter of the transfer matrix. One also need to know its orientation.There are four orientations which, in the isotropic case, are related by 90-degree rotations and therefore equivalent. But after we tilt the spacetime with non-isotropic
τ0, the four orientations become different. For now we just accept that the orientation is implicitly determined by how we construct it in the code.TODO
elementary_modular_parameter, producing an incorrect modular parameter.τ0for the fixed point tensor atτ0will be mapped to(τ₀ - 1) / (τ₀ + 1)(TRG) or(1 + τ₀) / (1 - τ₀)(loop-TNR). Again, this can be reproduced, but help is appreciated in adding it to the test.