Advanced Computing Platform for Theoretical Physics

Commit db2772e4 authored by Lei Wang's avatar Lei Wang
Browse files

python hotrg_qr.py -cuda 0 -niter 6 -init hotrg -exact -0.9397153248292055 gets lower than exact ?

parent f3bcbe49
from __future__ import division
from math import fsum
from numpy import (
arccosh,
arcsinh,
arctanh,
cos,
cosh,
exp,
log,
pi,
sin,
sinh,
sqrt,
sum,
tan,
tanh,
)
from scipy.special import logsumexp
def h(j, beta):
return beta * j
def h_star(j, beta):
return arctanh(exp(-2 * beta * j))
def gamma(n, j, beta, r):
return arccosh(
cosh(2 * h_star(j, beta)) * cosh(2 * h(j, beta)) -
sinh(2 * h_star(j, beta)) * sinh(2 * h(j, beta)) * cos(r * pi / n))
def log_z(n, j, beta):
return (
-log(2) + 1 / 2 * n**2 * log(2 * sinh(2 * h(j, beta))) + logsumexp([
fsum([
log(2 * cosh(n / 2 * gamma(n, j, beta, 2 * r)))
for r in range(n)
]),
fsum([
log(2 * sinh(n / 2 * gamma(n, j, beta, 2 * r)))
for r in range(n)
]),
fsum([
log(2 * cosh(n / 2 * gamma(n, j, beta, 2 * r + 1)))
for r in range(n)
]),
fsum([
log(2 * sinh(n / 2 * gamma(n, j, beta, 2 * r + 1)))
for r in range(n)
]),
]))
def free_energy(n, j, beta):
return -1 / n**2 / beta * log_z(n, j, beta)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-L',type=int,default=4,help='L')
parser.add_argument('-beta',type=float,default=0.44068679350977147,help='beta')
args = parser.parse_args()
print(args.L, args.beta, -log_z(n=args.L, j=1, beta=args.beta)/args.L**2)
2 1.09550665866847
4 0.9701197161722052
8 0.9397153248292055
16 0.9321963149809878
32 0.9303203901841237
64 0.9298516316942892
128 0.9297344557701893
512 0.9296978394131481
1024 0.9296960086092727
2048 0.9296955509085117
4096 0.9296954364833345
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment