Convention: H = −J Σ⟨ij⟩ sᵢsⱼ − H Σ sᵢ
β = 1/T · spins ∈ {+1, −1}
Click the lattice to play / pause · Space also toggles
▶ Start simulation
Wolff cluster updates do not satisfy detailed balance for H≠0.
Auto-falling back to Metropolis while |H| > 0.
Presets:
|M| / N
—
⟨|Σsᵢ|⟩ / N
E / N
—
−J⟨s·s⟩ − H⟨s⟩
χ (per spin)
—
β(⟨M²⟩−⟨|M|⟩²)/N
C (per spin)
—
β²(⟨E²⟩−⟨E⟩²)/N
Guided experiments
Find Tc by scanning
Anneal 5 → 0.1 and watch χ, C peak near 2.27.
Hysteresis at T<Tc
T=1.8, sweep H from −0.5 → +0.5 → −0.5.
Critical slowing
Compare Metropolis vs Wolff at T=Tc.
Finite-size
Watch χ-peak sharpen as L: 50→200.
What am I looking at?
Each pixel is a spin sᵢ ∈ {+1, −1} (orange = up, teal = down). We evolve toward
the Boltzmann distribution P(state) ∝ exp(−E/T) with
E = −J Σ⟨ij⟩ sᵢsⱼ − H Σᵢ sᵢ using periodic boundaries.
Below Tc the system spontaneously magnetizes — a global sᵢ ↔ −sᵢ symmetry
breaks. Above Tc thermal noise wins and ⟨M⟩ → 0.
Metropolis vs Wolff
Metropolis proposes a single spin flip and accepts with
min(1, exp(−ΔE/T)). Near Tc the correlation length diverges and
single-spin dynamics get stuck (critical slowing down, τ ∼ Lz).
Wolff grows a cluster of aligned spins by adding neighbors with
probability p = 1 − exp(−2βJ) and flips the whole cluster.
This decorrelates configurations near Tc dramatically faster, but only
respects detailed balance for H=0 — so this app disables it when |H|>0.
Onsager's exact result (infinite L, H=0)
For the infinite 2D square-lattice Ising model at zero field,
Tc = 2 / ln(1+√2) ≈ 2.26919, and the magnetization below Tc is
|m(T)| = (1 − sinh(2β)−4)1/8.
The dashed curve on the M–T chart is this exact result — finite L rounds it near Tc.