From 89e57eb15ad25cf0d6b3971f068a16fea5ca1445 Mon Sep 17 00:00:00 2001 From: victor Date: Sun, 26 Jan 2025 15:51:55 +0100 Subject: [PATCH] rename `TRGKit` to `TNRKit` --- Project.toml | 2 +- README.md | 4 +- examples/example.jl | 4 +- examples/fermionic-experiment.jl | 68 ---------------------- examples/testing-ising.jl | 54 ----------------- src/{TRGKit.jl => TNRKit.jl} | 6 +- src/models/gross-neveu.jl | 4 +- src/schemes/atrg.jl | 2 +- src/schemes/btrg.jl | 2 +- src/schemes/gilt-tnr.jl | 2 +- src/schemes/hotrg.jl | 2 +- src/schemes/slooptnr.jl | 2 +- src/schemes/{trgscheme.jl => tnrscheme.jl} | 6 +- src/schemes/trg.jl | 2 +- src/utility/cft.jl | 6 +- test/runtests.jl | 2 +- 16 files changed, 21 insertions(+), 147 deletions(-) delete mode 100644 examples/fermionic-experiment.jl delete mode 100644 examples/testing-ising.jl rename src/{TRGKit.jl => TNRKit.jl} (93%) rename src/schemes/{trgscheme.jl => tnrscheme.jl} (87%) diff --git a/Project.toml b/Project.toml index 99acc64..c300b75 100644 --- a/Project.toml +++ b/Project.toml @@ -1,4 +1,4 @@ -name = "TRGKit" +name = "TNRKit" uuid = "7dfc3ef0-df9b-475f-b8e2-b91f34f5d84d" authors = ["VictorVanthilt "] version = "0.1.0" diff --git a/README.md b/README.md index 75724df..f24facd 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ -# TRGKit.jl +# TNRKit.jl --- -*(name subject to change)* - Is a Julia package that aims to implement as much tensor network renormalization (TNR) schemes as possible. It is built upon [TensorKit.jl](https://github.com/jutho/TensorKit.jl), which provides functionality for diff --git a/examples/example.jl b/examples/example.jl index fa4bede..82b4fa0 100644 --- a/examples/example.jl +++ b/examples/example.jl @@ -1,6 +1,4 @@ -using Revise, TensorKit -includet("../src/TRGKit.jl") -using .TRGKit +using Revise, TensorKit, TNRKit # criterion to determine convergence trg_f(steps::Int, data) = abs(log(data[end]) * 2.0^(-steps)) diff --git a/examples/fermionic-experiment.jl b/examples/fermionic-experiment.jl deleted file mode 100644 index 111bc47..0000000 --- a/examples/fermionic-experiment.jl +++ /dev/null @@ -1,68 +0,0 @@ -using Revise, TensorKit, DataFrames, CSV -includet("../src/TRGKit.jl") -using .TRGKit - -function fermionic_trg_finalize!(scheme::TRGScheme) - n = norm(@tensor scheme.T[1 2; 1 2]) - scheme.T /= n - return n -end - -function fermionic_btrg_finalize!(scheme::TRGScheme) - scheme.T = permute(scheme.T, (1, 2), (3, 4)) - - n = norm(@tensor scheme.T[1 2; 3 4] * scheme.S1[4; 2] * scheme.S2[3; 1]) - scheme.T /= n - return n -end - -function fermionic_hotrg_finalize!(scheme::TRGScheme) - n = norm(@tensor scheme.T[1 2; 1 2]) - scheme.T /= n - return n -end - -custom_convcrit(steps::Int, data) = abs(log(data[end]) * 2.0^(1 - steps)) - -ms = [-1] -χs = [20, 30, 40] - -for m in ms - lnz_trgs = [] - lnz_btrgs = [] - lnz_hotrgs = [] - for χ in χs - T = gross_neveu_start(0, m, 0) - trg = TRG(copy(T)) - btrg = BTRG(copy(T), -0.5) - hotrg = HOTRG(copy(T)) - - data_trg = run!(trg, truncdim(χ), convcrit(1e-20, custom_convcrit)) - data_btrg = run!(btrg, truncdim(χ), convcrit(1e-20, custom_convcrit)) - data_hotrg = run!(hotrg, truncdim(χ), convcrit(1e-20, custom_convcrit)) - - lnz_trg = 0 - for (i, d) in enumerate(data_trg) - lnz_trg += log(d) * 2.0^(1 - i) - end - @show lnz_trg - - lnz_btrg = 0 - for (i, d) in enumerate(data_btrg) - lnz_btrg += log(d) * 2.0^(1 - i) - end - @show lnz_btrg - - lnz_hotrg = 0 - for (i, d) in enumerate(data_hotrg) - lnz_hotrg += log(d) * 2.0^(1 - i) - end - @show lnz_hotrg - - push!(lnz_trgs, lnz_trg) - push!(lnz_btrgs, lnz_btrg) - push!(lnz_hotrgs, lnz_hotrg) - end - CSV.write("data/fermionic_m$(m).csv", - DataFrame(; χ=χs, lnz_trg=lnz_trgs, lnz_btrg=lnz_btrgs, lnz_hotrg=lnz_hotrgs)) -end diff --git a/examples/testing-ising.jl b/examples/testing-ising.jl deleted file mode 100644 index 04dc876..0000000 --- a/examples/testing-ising.jl +++ /dev/null @@ -1,54 +0,0 @@ -using Revise, TensorKit, Plots, QuadGK, DataFrames, CSV -includet("../src/TRGKit.jl") -using .TRGKit - -Tc = 2 / log(1 + sqrt(2)) -Ts = collect(range(Tc - 0.2, Tc + 0.2, 100)) -fs_btrg = zeros(length(Ts)) -fs_trg = zeros(length(Ts)) - -χ = 24 - -for (i, T) in enumerate(Ts) - scheme = BTRG(classical_ising(1 / T), -0.5; - stop=maxiter(100) & convcrit(1e-20, btrg_convcrit)) - data = run!(scheme, truncdim(χ)) - lnz = 0 - for (i, d) in enumerate(data) - lnz += log(d) * 2.0^(-i) - end - fs_btrg[i] = lnz * -T -end - -for (i, T) in enumerate(Ts) - scheme = TRG(classical_ising(1 / T); stop=maxiter(100) & convcrit(1e-20, trg_convcrit)) - data = run!(scheme, truncdim(χ)) - lnz = 0 - for (i, d) in enumerate(data) - lnz += log(d) * 2.0^(-i) - end - fs_trg[i] = lnz * -T -end - -function onsager_integrand(θ, T) - k = 1 / sinh(2 / T)^(2) - integrand = 1 / (2π) * log(cosh(2 / T)^2 + 1 / k * sqrt(1 + k^2 - 2k * cos(2 * θ))) - return integrand -end - -# integrates onsagers exact solution using quadgk -function onsager_free_energy(Tarray) - farray = zeros(length(Tarray)) - - for i in eachindex(Tarray) - farray[i] = quadgk(θ -> onsager_integrand(θ, Tarray[i]), 0, π)[1] - end - - farray .+= log(2) / 2 - - return -farray .* Tarray -end - -CSV.write("data/relerror.csv", - DataFrame(; Ts=Ts, fs_btrg=fs_btrg, fs_trg=fs_trg, - fs_onsager=onsager_free_energy(Ts))) diff --git a/src/TRGKit.jl b/src/TNRKit.jl similarity index 93% rename from src/TRGKit.jl rename to src/TNRKit.jl index 8699d3f..0323d76 100644 --- a/src/TRGKit.jl +++ b/src/TNRKit.jl @@ -1,4 +1,4 @@ -module TRGKit +module TNRKit using TensorKit, LinearAlgebra using LoggingExtras, Printf using Zygote, OptimKit @@ -9,7 +9,7 @@ export maxiter, convcrit export trivial_convcrit # schemes -include("schemes/trgscheme.jl") +include("schemes/tnrscheme.jl") include("schemes/trg.jl") include("schemes/btrg.jl") include("schemes/hotrg.jl") @@ -18,7 +18,7 @@ include("schemes/gilt-tnr.jl") include("schemes/atrg.jl") include("schemes/slooptnr.jl") -export TRGScheme +export TNRScheme export TRG, trg_convcrit export BTRG, btrg_convcrit export HOTRG, hotrg_convcrit diff --git a/src/models/gross-neveu.jl b/src/models/gross-neveu.jl index efe4172..ab835b8 100644 --- a/src/models/gross-neveu.jl +++ b/src/models/gross-neveu.jl @@ -55,6 +55,6 @@ function gross_neveu_start(μ::Number, m::Number, g::Number) @tensor T_fused[-1 -2; -3 -4] := T_unfused[1 2 3 4; 5 6 7 8] * U[-1; 1 2] * U[-2; 3 4] * Udg[5 6; -3] * Udg[7 8; -4] - # restore the TRGKit.jl convention - return permute(T_fused, (1, 2), (4, 3)) + # restore the TNRKit.jl convention + return permute(T_fused, ((1, 2), (4, 3))) end diff --git a/src/schemes/atrg.jl b/src/schemes/atrg.jl index cbb3001..7429f49 100644 --- a/src/schemes/atrg.jl +++ b/src/schemes/atrg.jl @@ -1,4 +1,4 @@ -mutable struct ATRG <: TRGScheme +mutable struct ATRG <: TNRScheme T::TensorMap finalize!::Function diff --git a/src/schemes/btrg.jl b/src/schemes/btrg.jl index 9a3a9fa..78a4a58 100644 --- a/src/schemes/btrg.jl +++ b/src/schemes/btrg.jl @@ -1,4 +1,4 @@ -mutable struct BTRG <: TRGScheme +mutable struct BTRG <: TNRScheme T::TensorMap S1::TensorMap S2::TensorMap diff --git a/src/schemes/gilt-tnr.jl b/src/schemes/gilt-tnr.jl index aed811b..f48705c 100644 --- a/src/schemes/gilt-tnr.jl +++ b/src/schemes/gilt-tnr.jl @@ -1,4 +1,4 @@ -mutable struct GILTTNR <: TRGScheme +mutable struct GILTTNR <: TNRScheme T::TensorMap ε::Float64 diff --git a/src/schemes/hotrg.jl b/src/schemes/hotrg.jl index 2112fb2..e049d08 100644 --- a/src/schemes/hotrg.jl +++ b/src/schemes/hotrg.jl @@ -1,4 +1,4 @@ -mutable struct HOTRG <: TRGScheme +mutable struct HOTRG <: TNRScheme T::TensorMap finalize!::Function diff --git a/src/schemes/slooptnr.jl b/src/schemes/slooptnr.jl index cdb16b7..f7c11f8 100644 --- a/src/schemes/slooptnr.jl +++ b/src/schemes/slooptnr.jl @@ -1,5 +1,5 @@ # TODO: rewrite SLoopTNR contractions to work with symmetric tensors -mutable struct SLoopTNR <: TRGScheme +mutable struct SLoopTNR <: TNRScheme T::TensorMap optimization_algorithm::OptimKit.OptimizationAlgorithm diff --git a/src/schemes/trgscheme.jl b/src/schemes/tnrscheme.jl similarity index 87% rename from src/schemes/trgscheme.jl rename to src/schemes/tnrscheme.jl index 0d1bf64..90f4830 100644 --- a/src/schemes/trgscheme.jl +++ b/src/schemes/tnrscheme.jl @@ -1,9 +1,9 @@ -abstract type TRGScheme end +abstract type TNRScheme end function step! end function finalize! end -function run!(scheme::TRGScheme, trscheme::TensorKit.TruncationScheme, criterion::stopcrit; +function run!(scheme::TNRScheme, trscheme::TensorKit.TruncationScheme, criterion::stopcrit; finalize_beginning=true, verbosity=1) data = [] @@ -30,7 +30,7 @@ function run!(scheme::TRGScheme, trscheme::TensorKit.TruncationScheme, criterion return data end -function run!(scheme::TRGScheme, trscheme::TensorKit.TruncationScheme; +function run!(scheme::TNRScheme, trscheme::TensorKit.TruncationScheme; finalize_beginning=true, verbosity=1) # default maxiter criterion of 100 iterations return run!(scheme, trscheme, maxiter(100); finalize_beginning=finalize_beginning, diff --git a/src/schemes/trg.jl b/src/schemes/trg.jl index 120c8c1..6402ba0 100644 --- a/src/schemes/trg.jl +++ b/src/schemes/trg.jl @@ -1,4 +1,4 @@ -mutable struct TRG <: TRGScheme +mutable struct TRG <: TNRScheme T::TensorMap finalize!::Function diff --git a/src/utility/cft.jl b/src/utility/cft.jl index 19d6963..346529f 100644 --- a/src/utility/cft.jl +++ b/src/utility/cft.jl @@ -1,4 +1,4 @@ -function cft_data(scheme::TRGScheme; v=1, unitcell=1) +function cft_data(scheme::TNRScheme; v=1, unitcell=1) # make the indices indices = [[i, -i, i + 1, -(i + unitcell)] for i in 1:unitcell] indices[end][3] = 1 @@ -28,7 +28,7 @@ function cft_data(scheme::BTRG; v=1, unitcell=1) throw(NotImplementedError("BTRG requires extra care with the environment tensors, this method will be implemented later")) end -function central_charge(scheme::TRGScheme, trunc::TensorKit.TruncationScheme, +function central_charge(scheme::TNRScheme, trunc::TensorKit.TruncationScheme, stop::stopcrit) data = run!(scheme, trunc, stop; finalize_beginning=true) @tensor M[-1; -2] := (scheme.T / data[end])[1 -1; 1 -2] @@ -45,6 +45,6 @@ function central_charge(scheme::BTRG, trunc::TensorKit.TruncationScheme, stop::s end # default maxiter criterion of 15 iterations -function central_charge(scheme::TRGScheme, trunc::TensorKit.TruncationScheme) +function central_charge(scheme::TNRScheme, trunc::TensorKit.TruncationScheme) return central_charge(scheme, trunc, maxiter(15)) end diff --git a/test/runtests.jl b/test/runtests.jl index 1386b8f..c96c094 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,5 +1,5 @@ using Test -using TRGKit +using TNRKit using TensorKit using QuadGK