Ising coupling.py

From Werner KRAUTH

(Difference between revisions)
Jump to: navigation, search
Revision as of 20:56, 12 June 2024
Werner (Talk | contribs)

← Previous diff
Revision as of 21:13, 12 June 2024
Werner (Talk | contribs)

Next diff →
Line 1: Line 1:
import math import math
import random import random
- +
L = 64; N = L * L L = 64; N = L * L
nbr = {i : ((i // L) * L + (i + 1) % L, (i + L) % N, nbr = {i : ((i // L) * L + (i + 1) % L, (i + L) % N,

Revision as of 21:13, 12 June 2024

import math
import random
 
L = 64; N = L * L
nbr = {i : ((i // L) * L + (i + 1) % L, (i + L) % N,
             (i // L) * L + (i - 1) % L, (i - L) % N) \
                                    for i in range(N)}
beta = 0.4  #  beta = 0.4407 is critical temperature
SLow = [-1 for site in range(N)]
SHigh = [1 for site in range(N)]
iter = 0
while True:
    iter += 1
    k = random.randint(0, N - 1)
    Upsilon = random.uniform(0.0, 1.0)
    hLow = sum(SLow[nn] for nn in nbr[k])
    hHigh = sum(SHigh[nn] for nn in nbr[k])
    SLow[k] = -1
    if Upsilon < 1.0 / (1.0 + math.exp(-2.0 * beta * hLow)):
        SLow[k] = 1
    SHigh[k] = -1
    if Upsilon < 1.0 / (1.0 + math.exp(-2.0 * beta * hHigh)):
        SHigh[k] = 1
    if SHigh == SLow:
        print(iter / N)
        print(SLow, SHigh)
        break
Personal tools