Cluster ising.py

From Werner KRAUTH

Revision as of 20:12, 6 April 2026; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

This page presents the Python3 program cluster_ising.py, the Wolff cluster algorithm for the Ising model.


Contents

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.

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

Version

See history for version information.

Personal tools