Cluster ising.py
From Werner KRAUTH
Revision as of 20:12, 6 April 2026; view current revision
←Older revision | Newer revision→
←Older revision | Newer revision→
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.
