Skip to content

Commit

Permalink
add onsager ising free energy const using high precision quadgk
Browse files Browse the repository at this point in the history
  • Loading branch information
VictorVanthilt committed Jan 21, 2025
1 parent 3b17428 commit a6daedd
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 19 deletions.
2 changes: 2 additions & 0 deletions src/models/ising.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
const Ising_βc = log(1.0 + sqrt(2)) / 2.0
Potts_βc(q) = log(1.0 + sqrt(q))

const f_onsager::BigFloat = -2.10965114460820745966777928351108478082549327543540531781696107967700291143188081390114126499095041781

function classical_ising::Number; h=0)
function σ(i::Int64)
return 2i - 3
Expand Down
10 changes: 5 additions & 5 deletions test/finalize.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ end
criterion_f(steps::Int, data) = abs(log(data[end]) * 2.0^(1 - steps))

T = classical_ising_symmetric(Ising_βc)
fs_onsager = onsager_free_energy(Ising_βc)
f_onsager = onsager_free_energy(Ising_βc)

# TRG
@testset "TRG - Ising Model" begin
Expand All @@ -30,7 +30,7 @@ fs_onsager = onsager_free_energy(Ising_βc)

fs = lnz * -1 / Ising_βc

relerror = abs((fs - fs_onsager) / fs_onsager)
relerror = abs((fs - f_onsager) / f_onsager)
@test relerror < 2e-6
end

Expand All @@ -46,7 +46,7 @@ end

fs = lnz * -1 / Ising_βc

relerror = abs((fs - fs_onsager) / fs_onsager)
relerror = abs((fs - f_onsager) / f_onsager)
@test relerror < 6e-8
end

Expand All @@ -62,7 +62,7 @@ end

fs = lnz * -1 / Ising_βc

relerror = abs((fs - fs_onsager) / fs_onsager)
relerror = abs((fs - f_onsager) / f_onsager)
@test relerror < 6e-7
end

Expand All @@ -78,6 +78,6 @@ end

fs = lnz * -1 / Ising_βc

relerror = abs((fs - fs_onsager) / fs_onsager)
relerror = abs((fs - f_onsager) / f_onsager)
@test relerror < 3e-6
end
18 changes: 4 additions & 14 deletions test/ising.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,10 @@ println(" Ising Model ")
println("-------------")

# Onsager solution
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

function onsager_free_energy(β)
return -(quadgk-> onsager_integrand(θ, 1 / β), 0, π)[1] + log(2) / 2) / β
end

criterion_f(steps::Int, data) = abs(log(data[end]) * 2.0^(1 - steps))

T = classical_ising_symmetric(Ising_βc)
fs_onsager = onsager_free_energy(Ising_βc)

# TRG
@testset "TRG - Ising Model" begin
Expand All @@ -30,7 +20,7 @@ fs_onsager = onsager_free_energy(Ising_βc)

fs = lnz * -1 / Ising_βc

relerror = abs((fs - fs_onsager) / fs_onsager)
relerror = abs((fs - f_onsager) / f_onsager)
@test relerror < 2e-6
end

Expand All @@ -46,7 +36,7 @@ end

fs = lnz * -1 / Ising_βc

relerror = abs((fs - fs_onsager) / fs_onsager)
relerror = abs((fs - f_onsager) / f_onsager)
@test relerror < 6e-8
end

Expand All @@ -62,7 +52,7 @@ end

fs = lnz * -1 / Ising_βc

relerror = abs((fs - fs_onsager) / fs_onsager)
relerror = abs((fs - f_onsager) / f_onsager)
@test relerror < 6e-7
end

Expand All @@ -78,6 +68,6 @@ end

fs = lnz * -1 / Ising_βc

relerror = abs((fs - fs_onsager) / fs_onsager)
relerror = abs((fs - f_onsager) / f_onsager)
@test relerror < 3e-6
end

0 comments on commit a6daedd

Please sign in to comment.