Modular parameter for transfer matrices#187
Conversation
Codecov Report❌ Patch coverage is
... and 1 file with indirect coverage changes 🚀 New features to boost your workflow:
|
|
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. |
|
Do you want to add the central charge extraction, or can i merge this in this state? |
|
It can be merged as is. Central charge can be handled later when I figure out how to do it correctly for fermions. |
|
@lkdvos Is it a known issue that things inside a |
|
@VictorVanthilt Some new ideas:
|
|
I believe the accuracy of the spectrum is not affected by the amount of rows, only by the amount of columns (circumference of the tube geometry). So I can imagine the calculation would be faster if we only use 1x2 patches instead of 2x2. Do you have any idea if the elementary_modular_parameter calculation adds a lot of time to the CFTData calculation time right now? |
|
I definitely didn't know that this was an issue, I never noticed it and we definitely do similar constructions in other places. Might be worth trying to come up with a minimal example to double check |
|
Hmmm, it might actually be about how the macro works, ill have a look to see if I can patch something |
|
Could someone open an issue on the TensorOperations repository for this so I don't forget |
|
@lkdvos Now opened at QuantumKitHub/TensorOperations.jl#280. |
I need some time to do a proper benchmark... |
|
@VictorVanthilt Now that |
|
|
Guess I have no better choices... For benchmark with D = 12, shape = [sqrt(2), 2sqrt(2), 0], the modular parameter calculation takes almost half of the time (actually kind of expected, because the diagonal transfer matrices have size For larger shapes the numbers will look better. I'll still try to push the limits. |
|
I now have a faster way to get tau, using two [1, 2, 1] and two [√2, √2, 0] (@Chenqitrg's idea) transfer matrices. In the same benchmark, it only uses ~ 7 ms (compared to ~ 45 ms previously). However, since [√2, √2, 0] have a smaller width, the accuracy is slightly degraded and some tests cannot pass. Maybe we provide both options, with the faster 1x2 based method as default? |
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
VictorVanthilt
left a comment
There was a problem hiding this comment.
This is great work, I especially like the new internals for CFTTransferMatrix, very clean.
Thanks a lot!
This PR adds ability to extract the modular parameter of transfer matrices.
CFTData. This is done by the new functionextract_tau_and_c, which can also get the central charge as a by-product.τ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!
Secondary changes
CFTTransferMatrixis introduced to better organize the related code and reduce redundancy.StructuredVectorgains convenient constructors fromTensorKit.SectorVectororDictand broadcasting support, making manipulation of CFT transfer matrix eigenvalues cleaner.StructuredVectorgrouped by symmetry sectors.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
For TRG/loop-TNR, one RG step rotates the network in counter-clockwise direction by 45/135 degrees. One then knows that
τ0will be mapped to(τ₀ - 1) / (τ₀ + 1)(TRG) or(1 + τ₀) / (1 - τ₀)(loop-TNR). This difference annoys me - we may consider unify them in the future.