Cluster ising.py
From Werner KRAUTH
This page presents the Python3 program cluster_ising.py, the Wolff cluster algorithm for the Ising model.
Contents |
[edit]
Description
The algorithm is more general: it can be used for the Ising and XY models on lattices of arbitrary shapes in any dimensions, and there are versions for particle systems. Our example code however specializes for an LxL periodic square lattice in two dimensions that is initialized with random spins, and then is updated nsteps times.
[edit]
Program
import random, math
L = 100
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)}
T = 2.5
p = 1.0 - math.exp(-2.0 / T)
nsteps = 10000
S = [random.choice([1, -1]) for k in range(N)]
for step in range(nsteps):
k = random.randint(0, N - 1)
Pocket, Cluster = [k], [k]
while Pocket != []:
j = random.choice(Pocket)
for l in nbr[j]:
if S[l] == S[j] and l not in Cluster \
and random.uniform(0.0, 1.0) < p:
Pocket.append(l)
Cluster.append(l)
Pocket.remove(j)
for j in Cluster:
S[j] *= -1
[edit]
Version
See history for version information.
