Snowball Earth and tipping points
Add one ingredient to the Energy Balance Model and the climate develops a split personality. The ingredient is the ice–albedo feedback: ice and snow are bright and reflect sunlight, so
a colder planet grows more ice → reflects more sunlight → gets colder still.
This runaway can flip the Earth into a completely frozen Snowball state — and the geological record says it really happened, more than once. The remarkable part is that the same Sun and the same CO₂ can support two stable climates: a warm one near 14 °C and a frozen one far below. Which one you end up in depends on where you start and how strong the Sun is.
Set the starting temperature and the solar strength below, and watch the planet fall into one basin or the other — a live demonstration of a tipping point in WebAssembly.
begin
using PlutoUI, WasmMakie
endstarting temperature (°C) =
solar strength (% of today) =
years to simulate =
let
# Energy Balance Model with a temperature-dependent albedo. Everything bonded is turned
# into a local before the loop; the year loop computes albedo from the CURRENT
# temperature (a local), so ice grows and shrinks as the planet warms and cools.
A = 214.6
B = 1.77
C = 51.0
S = Float64(solari) / 100.0 * 1368.0
T = Float64(t0i)
Ts = Vector{Float64}(undef, nyears + 1)
ts = Vector{Float64}(undef, nyears + 1)
Ts[1] = T
ts[1] = 0.0
for y in 1:nyears
alb = 0.3
if T < 0.0
alb = 0.3 + 0.3 * (0.0 - T) / 10.0 # icier as it gets colder
end
if alb > 0.6
alb = 0.6 # fully ice-covered
end
absorbed = (1.0 - alb) * S / 4.0
dT = (absorbed - (A + B * T)) / C
T = T + dT
Ts[y + 1] = T
ts[y + 1] = Float64(y)
end
fig = Figure(size = (600, 360))
ax = Axis(fig[1, 1])
lines!(ax, [0.0, Float64(nyears)], [14.0, 14.0]) # the warm equilibrium
lines!(ax, [0.0, Float64(nyears)], [0.0, 0.0]) # freezing line
lines!(ax, ts, Ts) # the planet's fate
fig
endsb_final = let
# final temperature in a SEPARATE bond-dependent cell so the markdown below
# interpolates it live (values inside a markdown cell's own `let` bake to the
# slider defaults).
A = 214.6
B = 1.77
C = 51.0
S = Float64(solari) / 100.0 * 1368.0
T = Float64(t0i)
for y in 1:nyears
alb = 0.3
if T < 0.0
alb = 0.3 + 0.3 * (0.0 - T) / 10.0
end
if alb > 0.6
alb = 0.6
end
absorbed = (1.0 - alb) * S / 4.0
dT = (absorbed - (A + B * T)) / C
T = T + dT
end
floor(T * 10.0) / 10.0
endFinal temperature: 14.0 C – a warm, ice-free world. Start just a few degrees colder, or dim the Sun a percent or two, and the planet can tip irreversibly into the frozen basin: once ice covers everything, it reflects so much sunlight that even today's Sun struggles to melt it back. Two stable worlds, one tipping point between them.
Tipping points and hysteresis
The deepest lesson here is hysteresis: the path in differs from the path out. Slowly dim the Sun and the warm Earth cools gently — until, at a threshold, it jumps to the Snowball state. Brighten the Sun back to where it started and the Earth stays frozen; you have to push it far past the original brightness before it jumps back to warm. The system remembers its history.
This is the defining feature of climate tipping points — ice sheets, the Atlantic circulation, the Amazon — and why they are so dangerous: crossing one is easy and reversing it is not. A simple feedback in a one-line model already shows the whole behaviour.
Appendix
The Energy Balance Model from the earlier lessons, extended with a temperature-dependent albedo, stepped one year at a time and drawn with WasmMakie — all in-browser WebAssembly. The two stable states and the tipping behaviour are exactly those in the MIT Snowball-Earth notebook.