Reading the Colour of Ice

Snow and ice aren't always plain white and blue — their specific hues and darkness tell a unique story about the state and history of the ice. Radiative transfer is the physics that deciphers the code hidden in the way the ice reflects light.

Spectral albedo of snow and ice

Real spectral albedo computed by BioSNICAR's adding-doubling solver for four snow and ice surfaces — from fresh powder to ancient glacier ice. Every dip and peak is a real ice absorption feature that encodes physical information about what lies beneath the sensor.

Reading Ice by Its Light

We think of snow and ice as simple materials, and they can look that way to the naked eye — but pointing a spectrometer at them reveals complex structure. Absorption bands appear at precise infrared wavelengths. Impurities carve signatures into the visible waveband. The shape of the reflected spectrum is a coded message about what the surface is made of, how old it is, and what is living on it. Radiative transfer is the physics that decodes it.

That decoding matters across a surprisingly wide range of science and engineering — far beyond the traditional framing of climate feedback loops.

Monitoring a changing Arctic

Satellite-derived spectral albedo is one of the most direct indicators of ice sheet and sea ice health. By tracking how reflectance changes year on year, researchers can map where melt is accelerating, separate the contributions of grain metamorphism, dust deposition, and biological darkening, and feed physically consistent albedo into ice-sheet models.

Exploring ice surface ecosystems

Glacier algae, snow algae, cyanobacteria, and even ice-worm communities are reshaping our understanding of life at the margins. These organisms darken the ice and their unique pigment spectra offer a way to map their distribution from space. Radiative transfer models are the bridge between a pigment absorption spectrum measured in a lab and a satellite image covering 100 m² of the Greenland ice sheet.

Predicting downstream flows and new landscapes

How much meltwater a glacier produces each summer depends directly on how much solar energy it absorbs — which depends on albedo. Accurate spectral albedo feeds into energy-balance melt models that predict river discharge, hydropower availability, irrigation supply, and flood risk for downstream communities. As glaciers retreat and new land is exposed, the same physics governs how quickly deglaciated terrain transitions from high-albedo ice to low-albedo rock and pioneer vegetation — reshaping local hydrology and ecology in the process.

In each case the starting point is the same: a physical model that connects the microphysical state of ice to the spectral signal a sensor records. BioSNICAR is that model — open-source, Python-native, and designed to span the full pipeline from ice crystal properties to satellite-band retrievals.

BioSNICAR in action

Every spectrum on this page was generated by BioSNICAR's adding-doubling radiative transfer solver — the same code used in peer-reviewed cryosphere research. All spectra are physically accurate, not toy approximations.

The Spectral Fingerprint of Ice

Ice doesn't just reflect light uniformly — it absorbs at very specific wavelengths determined by the molecular vibrations of the H₂O crystal lattice. The imaginary part of ice's complex refractive index creates absorption bands at 1.03, 1.25, 1.5, and 2.0 µm. Between these bands, albedo partially recovers. This characteristic structure is the spectral fingerprint of ice.

The depth of each absorption feature depends on the optical path length through ice before a photon is scattered back out. Larger grains mean longer transport paths in the ice, and lower albedo in the near-infrared. The visible region (below 0.7 µm) is nearly unaffected because ice is almost perfectly transparent at those wavelengths — photons scatter off grain surfaces and escape the ice without being absorbed.

SSA effect on spectral albedo
Grain size controls NIR albedo. Five real BioSNICAR spectra spanning fresh snow (SSA ≈ 33, r = 100 µm) to blue glacier ice (SSA ≈ 0.5, r = 3000 µm) - density is held constant. Every absorption feature deepens with grain growth. The visible region stays bright regardless — all the diagnostic power is in the near-infrared.

This wavelength dependence is what makes spectral remote sensing so powerful for snow and ice. A single broadband albedo measurement can't tell you why the surface is dark — grain growth, impurities, and thin snow over rock all lower the average. But the spectral shape is unique to each process: grain growth deepens NIR features while leaving the visible untouched; black carbon suppresses the visible while barely touching the NIR. The spectrum is the diagnostic.

Try it: drag the grain-size slider

Each curve is a real BioSNICAR simulation. Watch how the near-infrared absorption features deepen as grains grow.

400 µm
Key concept — Specific Surface Area (SSA)

SSA = 3 / (r × ρice), in m² kg⁻¹, combines grain size and ice density into the single parameter that best predicts spectral shape. Fresh snow: SSA ≈ 30–60 (tiny grains, lots of scattering). Glacier ice: SSA ≈ 0.5–3 (large grains, deep absorption). SSA is what satellite retrievals actually constrain — not grain radius or density individually, because different (r, ρ) pairs yielding the same SSA produce identical spectra.

Impurities: When Snow Gets Dirty

Pure ice absorbs almost nothing in the visible — that's why snow is white. But even trace amounts of light-absorbing particles (LAPs) can dramatically darken the surface. A dusting of black carbon at just 10 parts per billion measurably reduces albedo; a heavy algae bloom can halve it.

Crucially, each impurity type has a distinct spectral signature. Black carbon absorbs with a smooth power-law across all visible wavelengths. Algal pigments create characteristic absorption features at specific wavelengths corresponding to carotenoids (~470 nm) and chlorophyll-a (~670 nm). These spectral differences are what make it possible — in principle — to identify and quantify impurities from satellite data.

Effect of impurities on spectral albedo
Each impurity has a distinct spectral signature. Real BioSNICAR spectra for the same base snow (r = 500 µm) with and without impurities. Black carbon (red) darkens uniformly; glacier algae (green) create pigment-specific absorption dips; snow algae (yellow) show a different pigment profile dominated by astaxanthin.

Black Carbon

From fossil fuel combustion, wildfires, and agricultural burning. Absorbs across the full visible spectrum with a λ−1 wavelength dependence. Even 10 ppb measurably darkens snow; concentrations above 100 ppb cause visible greying.

Snow Algae

Unicellular green algae (Chlamydomonas nivalis and relatives) that accumulate red astaxanthin pigment as a sunscreen. Causes "watermelon snow" — pink-red patches on seasonal snowpacks. Absorbs broadly around 480 nm and 680 nm.

Glacier Algae

Elongated filamentous cells (Ancylonema nordenskiöldii) that bloom on bare melting ice. Packed with purpurogallin-type phenolic pigments absorbing 350–700 nm, creating a brown-purple colour. A major driver of Greenland ice sheet darkening.

🟤

Mineral Dust

Wind-deposited particles from deserts, exposed moraines, and volcanic ash. Absorbs with a broad, featureless spectrum that overlaps heavily with grain-size effects — making dust the hardest impurity to retrieve from spectral data alone.

Try it: add black carbon

Drag the slider to see how increasing black carbon concentration darkens the visible spectrum while leaving the NIR largely unchanged. All curves are real BioSNICAR output.

0 ppb

Try it: grow an algae bloom

Watch how glacier algae progressively darken the visible spectrum, with absorption concentrated around the pigment wavelengths (470 nm and 670 nm).

0 cells/mL

What Satellites See

Satellites don't measure continuous spectra. They collect light in discrete spectral bands, each integrating the spectrum over a wavelength range weighted by the sensor's spectral response function and the incoming solar flux. Sentinel-2, for example, compresses 480 spectral values into just 13 numbers.

This compression is lossy — fine spectral features disappear — but the band values still encode enough information to retrieve 2–3 physical parameters. The key is choosing the right bands: SWIR bands (1.6, 2.2 µm) are essential for constraining SSA, while visible bands capture impurity darkening.

Sentinel-2 band overlay
Sentinel-2's 13 bands overlaid on a real BioSNICAR spectrum (moderately impure glacier ice). Each blue bar is a flux-weighted band-average albedo; the grey curve is the full 480-band spectrum. The bands capture the overall spectral shape but cannot resolve the fine absorption features between them.

Different platforms offer different trade-offs. BioSNICAR's to_platform() function handles the spectral convolution for all of them:

🛰️

Sentinel-2 MSI

13 bands, 10–60 m resolution, 5-day revisit. The current workhorse for snow/ice retrieval thanks to SWIR coverage and high spatial resolution.

🛰️

Landsat 8 OLI

7 bands, 30 m resolution, 16-day revisit. Decades of continuous archive make it invaluable for long-term albedo trend analysis.

🌍

MODIS

7 land bands + 3 broadband, 500 m resolution, daily global coverage. The go-to sensor for large-scale, high-cadence albedo mapping.

🌐

Climate Models

CESM (2 or 14 bands), MAR (4 bands), HadCM3 (6 bands). BioSNICAR provides albedo at the spectral resolution each model's radiation scheme requires.

The Inverse Problem

The forward problem is straightforward: given ice properties, BioSNICAR computes the spectrum in ~0.5 seconds. The inverse problem asks the harder question: given a satellite observation, what are the ice properties that produced it?

SSA, impurities,
geometry
Forward model
BioSNICAR
480-band
spectrum
to_platform()
Satellite
bands

Inversion reverses this pipeline: an optimiser adjusts the physical parameters until the forward model's predicted bands match the satellite observation. But the challenges are real:

Parameter degeneracy

Different parameter combinations can produce identical spectra. Grain radius and density trade off against each other along constant-SSA contours. The solution: retrieve SSA directly rather than the individual components.

Information limits

PCA analysis shows that 13 Sentinel-2 bands carry only ~3–4 independent degrees of freedom. You cannot retrieve more parameters than the data can constrain — fix everything else with ancillary data.

BioSNICAR solves the speed problem with a machine-learning emulator (PCA + neural network) trained on forward-model samples. The emulator reproduces the full solver at 50,000× the speed (~10 µs per evaluation), making optimisation, MCMC uncertainty quantification, and large-scale retrieval campaigns practical.

Retrieval best practices

Retrieve SSA, not grain radius (Section 11 of the remote sensing notebook explains why). Fix solar zenith from ephemeris data. Mask atmospheric absorption bands at 1.4 and 1.9 µm. Use fixed_params to constrain what you know. Start with 1–2 free parameters and add more only if the data supports it.

Try it: be the retrieval algorithm

The yellow curve is a mystery observation from a real BioSNICAR simulation. Adjust the two sliders to find the grain size and black carbon concentration that best match it. The blue curve is your current guess; the cost value tells you how close you are. Can you get the cost below 0.01?

300 µm
0 ppb

BioSNICAR: The Complete Toolkit

BioSNICAR is an open-source Python implementation of the SNICAR radiative transfer model, extended with biological impurities (snow algae, glacier algae), a machine-learning emulator, satellite band convolution for 8 platforms, and a full inverse-modelling framework. It runs the complete pipeline from ice crystal properties to satellite-band retrievals in a single package.

Forward Model

Adding-doubling solver with delta-Eddington scaling. Handles multi-layer snowpacks with Fresnel boundaries, 4 impurity types (BC, dust, snow algae, glacier algae), liquid water coatings, and 480 spectral bands from 0.2–5.0 µm.

🛰️

Band Convolution

8 platforms: Sentinel-2, Sentinel-3, Landsat 8, MODIS, CESM (2-band and RRTMG 14-band), MAR, and HadCM3. SRF convolution for satellites, flux-weighted interval averaging for GCMs. Spectral indices (NDSI, NDVI, Impurity Index) computed automatically.

🧠

ML Emulator

PCA compression + multi-layer perceptron trained on Latin hypercube samples from the forward model. 50,000× faster than the full solver. Build custom emulators for any parameter subset via Emulator.build().

🔬

Inverse Framework

retrieve() dispatches to spectral or band-mode cost functions with log-space optimisation, Hessian or MCMC uncertainty, wavelength masking, and fixed parameters. Hybrid DE + L-BFGS-B for global-to-local convergence.

Quick Start

# Clone and install
git clone https://github.com/jmcook1186/biosnicar-py.git
cd biosnicar-py
pip install -e .

# Forward model → spectral albedo
from biosnicar import run_model

outputs = run_model(rds=500, rho=600, black_carbon=50, solzen=50)

# Convert to Sentinel-2 bands
s2 = outputs.to_platform("sentinel2")
print(f"NDSI = {s2.NDSI:.3f}")

# Retrieve SSA from observations
from biosnicar.inverse import retrieve
result = retrieve(observed, ["ssa", "black_carbon"], emulator,
                  platform="sentinel2")

Resources