CO₂ Ice Core Proxy Simulator: Reconstruct 800,000 Years of Atmospheric CO₂

simulator intermediate ~10 min
Loading simulation...
CO₂: 180–280 ppm over 400 kyr

The model reproduces the characteristic 180-280 ppm glacial-interglacial CO₂ range observed in Antarctic ice cores, with ~100 kyr periodicity matching Milankovitch eccentricity cycles.

Formula

CO₂(t) = CO₂₀ + A·sin(2πt/100 kyr) + secondary orbital terms
Gas-age smoothing: CO₂_measured = ∫ CO₂(t-τ) · G(τ,σ) dτ
δ¹³C proxy: ΔCO₂ ≈ -90 · Δδ¹³C (simplified)

Frozen Archives of the Atmosphere

Deep within the Antarctic ice sheet, tiny air bubbles trapped hundreds of thousands of years ago preserve pristine samples of ancient atmospheres. The EPICA Dome C ice core — drilled to 3,270 meters depth — provides a continuous CO₂ record spanning 800,000 years and eight glacial cycles. This is the longest direct measurement of atmospheric composition, and it reveals a remarkably regular pattern: CO₂ oscillates between ~180 ppm during ice ages and ~280 ppm during warm interglacials.

From Snow to Signal

Converting ice-core bubbles into a CO₂ time series requires careful science. Snow accumulates layer by layer, compressing under its own weight until pores close off at the firn-ice transition (~50-100 m depth). The trapped gas is younger than the surrounding ice — a gas age-ice age offset that must be modeled. This simulation includes a smoothing parameter representing the firn diffusion process, which acts as a natural low-pass filter on the atmospheric record.

The Glacial-Interglacial Rhythm

The CO₂ record's dominant periodicity matches Milankovitch orbital cycles — roughly 100,000 years. But CO₂ is not merely a passive follower of orbital forcing; it actively amplifies climate change through the greenhouse effect. During deglaciations, rising CO₂ contributed roughly one-third of the total warming, with ocean circulation changes and ice-albedo feedback providing the rest. This tight coupling makes CO₂ both a proxy for and a driver of past climate change.

Unprecedented Modern Levels

The ice-core record provides sobering context for modern CO₂ levels. At ~420 ppm, today's concentration is roughly 50% higher than any value in 800,000 years. The rate of increase — about 2.5 ppm per year — is at least 10 times faster than the fastest natural changes recorded in ice cores. Adjust the time window and amplitude to see how the natural CO₂ envelope compares to the modern spike that would tower off the top of any ice-core graph.

FAQ

How do ice cores record ancient CO₂?

Snow falling on ice sheets traps air bubbles as it compresses into ice. These bubbles preserve samples of ancient atmosphere. By extracting and analyzing air from bubbles at different depths, scientists reconstruct CO₂ concentrations going back 800,000 years (EPICA Dome C core) with remarkable precision — typically ±1-2 ppm.

What is the gas age-ice age difference?

Air bubbles are sealed only when snow compresses into ice at the firn-ice transition (~50-100 m depth). The trapped gas is therefore younger than the surrounding ice. This gas age-ice age difference ranges from ~200 years at high-accumulation sites to ~6,000 years at low-accumulation Antarctic sites, and must be corrected when synchronizing gas and ice records.

What CO₂ range is natural?

Over the past 800,000 years, CO₂ oscillated between ~180 ppm (glacial minima) and ~280 ppm (interglacial maxima). The current level of ~420 ppm is approximately 50% higher than any value in this record, and the rate of increase (~2.5 ppm/yr) is at least 10 times faster than any natural change recorded in ice cores.

What drives natural CO₂ changes?

Glacial-interglacial CO₂ variations are driven by ocean circulation changes, biological pump efficiency, sea ice extent, and ocean temperature (CO₂ solubility). The Southern Ocean is the key regulator — during ice ages, enhanced stratification and sea ice coverage reduce CO₂ outgassing, trapping carbon in the deep ocean.

Sources

Embed

<iframe src="https://homo-deus.com/lab/paleoclimate/co2-proxy/embed" width="100%" height="400" frameborder="0"></iframe>
View source on GitHub