From 39564fc68dc2f1874a8d5a3663ae23428f19b53b Mon Sep 17 00:00:00 2001 From: Chenqi Meng Date: Wed, 18 Mar 2026 18:08:40 +0800 Subject: [PATCH 1/7] Added the reference to classical XY model --- docs/src/assets/tnrkit.bib | 14 ++++++++++++++ src/models/XY.jl | 8 +++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/src/assets/tnrkit.bib b/docs/src/assets/tnrkit.bib index c6228f0f..7b9d8c8f 100644 --- a/docs/src/assets/tnrkit.bib +++ b/docs/src/assets/tnrkit.bib @@ -233,3 +233,17 @@ @article{homma2024a number = {4}, doi = {10.1103/PhysRevResearch.6.043102} } + +@article{Yu_2014, + title = {Tensor renormalization group study of classical XY model on the square lattice}, + volume = {89}, + ISSN = {1550-2376}, + url = {http://dx.doi.org/10.1103/PhysRevE.89.013308}, + DOI = {10.1103/physreve.89.013308}, + number = {1}, + journal = {Physical Review E}, + publisher = {American Physical Society (APS)}, + author = {Yu, J. F. and Xie, Z. Y. and Meurice, Y. and Liu, Yuzhi and Denbleyker, A. and Zou, Haiyuan and Qin, M. P. and Chen, J. and Xiang, T.}, + year = {2014}, + month = {jan} +} \ No newline at end of file diff --git a/src/models/XY.jl b/src/models/XY.jl index 76b07b13..859a5723 100644 --- a/src/models/XY.jl +++ b/src/models/XY.jl @@ -1,4 +1,4 @@ -function algebraic_initialization(m::TensorMap, bond::TensorMap) +function algebraic_initialization(m::AbstractTensorMap{E, S, 1, 2}, bond::AbstractTensorMap{E, S, 1, 1}) where {E, S} @tensor opt = true T[l u; d r] := m[u; Au Bu] * bond[Au; Ad] * @@ -23,6 +23,9 @@ and charge truncation `charge_trunc`. classical_XY_U1_symmetric(0.9, 6) ``` +### References +* [Yu et. al. 10.1103/PhysRevE.89.013308 (2014)](@cite Yu_2014) + See also: [`classical_XY_O2_symmetric`](@ref). """ function classical_XY_U1_symmetric(beta::Float64, charge_trunc::Int) @@ -52,6 +55,9 @@ and charge truncation `charge_trunc`. classical_XY_O2_symmetric(0.9, 6) ``` +### References +* [Yu et. al. 10.1103/PhysRevE.89.013308 (2014)](@cite Yu_2014) + See also: [`classical_XY_U1_symmetric`](@ref). """ function classical_XY_O2_symmetric(beta::Float64, charge_trunc::Int) From a0bf03589dbaa22eb8cbf34a2879050597dd3673 Mon Sep 17 00:00:00 2001 From: Chenqi Meng Date: Wed, 18 Mar 2026 19:01:26 +0800 Subject: [PATCH 2/7] A tentative test of XY model --- src/TNRKit.jl | 2 +- src/models/XY.jl | 2 ++ test/schemes.jl | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/TNRKit.jl b/src/TNRKit.jl index 4c787d6f..cc637e26 100644 --- a/src/TNRKit.jl +++ b/src/TNRKit.jl @@ -89,7 +89,7 @@ export classical_ising, classical_ising_symmetric, ising_βc, f_onsager, ising_c classical_ising_triangular, classical_ising_triangular_symmetric, ising_βc_triangular, f_onsager_triangular, classical_ising_honeycomb, classical_ising_honeycomb_symmetric, - ising_βc_honeycomb, f_onsager_honeycomb + ising_βc_honeycomb, f_onsager_honeycomb, XY_βc include("models/gross-neveu.jl") export gross_neveu_start diff --git a/src/models/XY.jl b/src/models/XY.jl index 859a5723..3fb6c6d4 100644 --- a/src/models/XY.jl +++ b/src/models/XY.jl @@ -11,6 +11,8 @@ function algebraic_initialization(m::AbstractTensorMap{E, S, 1, 2}, bond::Abstra return T end +const XY_βc = 1.1199 # This is an approximation! + """ $(SIGNATURES) diff --git a/test/schemes.jl b/test/schemes.jl index 67f86e15..4dc8d10e 100644 --- a/test/schemes.jl +++ b/test/schemes.jl @@ -220,6 +220,44 @@ end @test X2 ≈ 2.0 rtol = 1.0e-2 end +@testset "LoopTNR - XY model" begin + @info "Central charge of KT phase with U(1) symmetry" + T_KT = classical_XY_U1_symmetric(XY_βc + 0.1, 8) + scheme = LoopTNR(T_KT) + data = run!(scheme, truncrank(16), maxiter(20)) + cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) + central_charge = cft["c"] + @test central_charge ≈ 1.0 atol = 3.0e-3 + @info "Obtained central charge:\n$central_charge." + + @info "Central charge of symmetric phase with U(1) symmetry" + T_sym = classical_XY_U1_symmetric(XY_βc - 0.1, 8) + scheme = LoopTNR(T_sym) + data = run!(scheme, truncrank(16), maxiter(20)) + cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) + central_charge = cft["c"] + @test central_charge ≈ 0.0 atol = 1.0e-14 + @info "Obtained central charge:\n$central_charge." + + @info "Central charge of KT phase with O(2) symmetry" + T_KT = classical_XY_O2_symmetric(XY_βc + 0.1, 8) + scheme = LoopTNR(T_KT) + data = run!(scheme, truncrank(16), maxiter(20)) + cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) + central_charge = cft["c"] + @test central_charge ≈ 1.0 atol = 3.0e-3 + @info "Obtained central charge:\n$central_charge." + + @info "Central charge of symmetric phase with O(2) symmetry" + T_sym = classical_XY_O2_symmetric(XY_βc - 0.1, 8) + scheme = LoopTNR(T_sym) + data = run!(scheme, truncrank(16), maxiter(20)) + cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) + central_charge = cft["c"] + @test central_charge ≈ 0.0 atol = 1.0e-14 + @info "Obtained central charge:\n$central_charge." +end + @testset "LoopTNR - Initialization with 2 x 2 unit cell" begin loop_condition = LoopParameters( sweeping = maxiter(5) & convcrit(1.0e-12, (steps, cost) -> abs(cost[end])) From fe22b4f8d92ad69f2036816e72ba1d6ef84bea82 Mon Sep 17 00:00:00 2001 From: Chenqi Meng Date: Wed, 18 Mar 2026 19:24:07 +0800 Subject: [PATCH 3/7] Relax the condition --- test/schemes.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/schemes.jl b/test/schemes.jl index 4dc8d10e..95bd4e5f 100644 --- a/test/schemes.jl +++ b/test/schemes.jl @@ -236,7 +236,7 @@ end data = run!(scheme, truncrank(16), maxiter(20)) cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) central_charge = cft["c"] - @test central_charge ≈ 0.0 atol = 1.0e-14 + @test central_charge ≈ 0.0 atol = 1.0e-13 @info "Obtained central charge:\n$central_charge." @info "Central charge of KT phase with O(2) symmetry" @@ -254,7 +254,7 @@ end data = run!(scheme, truncrank(16), maxiter(20)) cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) central_charge = cft["c"] - @test central_charge ≈ 0.0 atol = 1.0e-14 + @test central_charge ≈ 0.0 atol = 1.0e-13 @info "Obtained central charge:\n$central_charge." end From ff002dfab7c01d2e915bf761bd1f3e318414e7c6 Mon Sep 17 00:00:00 2001 From: Chenqi Meng Date: Wed, 18 Mar 2026 19:38:58 +0800 Subject: [PATCH 4/7] slightly relax the condition --- test/schemes.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/schemes.jl b/test/schemes.jl index 95bd4e5f..d3c156db 100644 --- a/test/schemes.jl +++ b/test/schemes.jl @@ -227,7 +227,7 @@ end data = run!(scheme, truncrank(16), maxiter(20)) cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) central_charge = cft["c"] - @test central_charge ≈ 1.0 atol = 3.0e-3 + @test central_charge ≈ 1.0 atol = 1.0e-2 @info "Obtained central charge:\n$central_charge." @info "Central charge of symmetric phase with U(1) symmetry" @@ -245,7 +245,7 @@ end data = run!(scheme, truncrank(16), maxiter(20)) cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) central_charge = cft["c"] - @test central_charge ≈ 1.0 atol = 3.0e-3 + @test central_charge ≈ 1.0 atol = 1.0e-2 @info "Obtained central charge:\n$central_charge." @info "Central charge of symmetric phase with O(2) symmetry" From 44ed0c7f26a609ea9966f91b688f86f41ed92deb Mon Sep 17 00:00:00 2001 From: Chenqi Meng Date: Wed, 18 Mar 2026 20:25:09 +0800 Subject: [PATCH 5/7] Move the test of XY model to the models file --- test/models.jl | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/test/models.jl b/test/models.jl index 3d0e1d53..bff2b771 100644 --- a/test/models.jl +++ b/test/models.jl @@ -28,3 +28,41 @@ model_temp_answer = [ @test free_energy(data, temp) ≈ answer rtol = 1.0e-3 end end + +@testset "LoopTNR - 2D XY model" begin + @info "Central charge of KT phase with U(1) symmetry" + T_KT = classical_XY_U1_symmetric(XY_βc + 0.1, 8) + scheme = LoopTNR(T_KT) + data = run!(scheme, truncrank(16), maxiter(20)) + cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) + central_charge = cft["c"] + @test central_charge ≈ 1.0 atol = 1.0e-2 + @info "Obtained central charge:\n$central_charge." + + @info "Central charge of symmetric phase with U(1) symmetry" + T_sym = classical_XY_U1_symmetric(XY_βc - 0.1, 8) + scheme = LoopTNR(T_sym) + data = run!(scheme, truncrank(16), maxiter(20)) + cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) + central_charge = cft["c"] + @test central_charge ≈ 0.0 atol = 1.0e-13 + @info "Obtained central charge:\n$central_charge." + + @info "Central charge of KT phase with O(2) symmetry" + T_KT = classical_XY_O2_symmetric(XY_βc + 0.1, 8) + scheme = LoopTNR(T_KT) + data = run!(scheme, truncrank(16), maxiter(20)) + cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) + central_charge = cft["c"] + @test central_charge ≈ 1.0 atol = 1.0e-2 + @info "Obtained central charge:\n$central_charge." + + @info "Central charge of symmetric phase with O(2) symmetry" + T_sym = classical_XY_O2_symmetric(XY_βc - 0.1, 8) + scheme = LoopTNR(T_sym) + data = run!(scheme, truncrank(16), maxiter(20)) + cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) + central_charge = cft["c"] + @test central_charge ≈ 0.0 atol = 1.0e-13 + @info "Obtained central charge:\n$central_charge." +end \ No newline at end of file From 5b1aad77f1b374f22fd60c86ff189299dbc4033e Mon Sep 17 00:00:00 2001 From: Chenqi Meng Date: Wed, 18 Mar 2026 20:26:47 +0800 Subject: [PATCH 6/7] Forget to format --- test/models.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models.jl b/test/models.jl index bff2b771..4af3da52 100644 --- a/test/models.jl +++ b/test/models.jl @@ -65,4 +65,4 @@ end central_charge = cft["c"] @test central_charge ≈ 0.0 atol = 1.0e-13 @info "Obtained central charge:\n$central_charge." -end \ No newline at end of file +end From 9d5ee21aded77e48b168cca103795317babbb6ee Mon Sep 17 00:00:00 2001 From: Chenqi Meng Date: Wed, 18 Mar 2026 20:31:46 +0800 Subject: [PATCH 7/7] Forget to save --- test/schemes.jl | 38 -------------------------------------- 1 file changed, 38 deletions(-) diff --git a/test/schemes.jl b/test/schemes.jl index d3c156db..67f86e15 100644 --- a/test/schemes.jl +++ b/test/schemes.jl @@ -220,44 +220,6 @@ end @test X2 ≈ 2.0 rtol = 1.0e-2 end -@testset "LoopTNR - XY model" begin - @info "Central charge of KT phase with U(1) symmetry" - T_KT = classical_XY_U1_symmetric(XY_βc + 0.1, 8) - scheme = LoopTNR(T_KT) - data = run!(scheme, truncrank(16), maxiter(20)) - cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) - central_charge = cft["c"] - @test central_charge ≈ 1.0 atol = 1.0e-2 - @info "Obtained central charge:\n$central_charge." - - @info "Central charge of symmetric phase with U(1) symmetry" - T_sym = classical_XY_U1_symmetric(XY_βc - 0.1, 8) - scheme = LoopTNR(T_sym) - data = run!(scheme, truncrank(16), maxiter(20)) - cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) - central_charge = cft["c"] - @test central_charge ≈ 0.0 atol = 1.0e-13 - @info "Obtained central charge:\n$central_charge." - - @info "Central charge of KT phase with O(2) symmetry" - T_KT = classical_XY_O2_symmetric(XY_βc + 0.1, 8) - scheme = LoopTNR(T_KT) - data = run!(scheme, truncrank(16), maxiter(20)) - cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) - central_charge = cft["c"] - @test central_charge ≈ 1.0 atol = 1.0e-2 - @info "Obtained central charge:\n$central_charge." - - @info "Central charge of symmetric phase with O(2) symmetry" - T_sym = classical_XY_O2_symmetric(XY_βc - 0.1, 8) - scheme = LoopTNR(T_sym) - data = run!(scheme, truncrank(16), maxiter(20)) - cft = cft_data(scheme, [sqrt(2), 2 * sqrt(2), 0]) - central_charge = cft["c"] - @test central_charge ≈ 0.0 atol = 1.0e-13 - @info "Obtained central charge:\n$central_charge." -end - @testset "LoopTNR - Initialization with 2 x 2 unit cell" begin loop_condition = LoopParameters( sweeping = maxiter(5) & convcrit(1.0e-12, (steps, cost) -> abs(cost[end]))