CornCast

Spring Corn Β· Indian Peaks & RMNP
Plan
Result
Map
About

Tour Planning

Mar 1 – Jun 30 Β· fetches archive from Jan 1 (column cold model) + 16-day forecast
Select a peak above to load basin snowpack data...
πŸ“‘ Weather Input Guide
Fields marked auto are pre-filled from Open-Meteo when a date and peak are selected β€” override any value manually if local conditions differ.
Dawn Temp: exact 6 AM hourly if target is within 15 days of today; otherwise estimated as overnight low +2Β°F (typical pre-dawn offset). Clouds: Overnight = midnight–5 AM Β· Morning = 6 AM–noon. Snow depth/days = SNOTEL SNWD sensor for past dates; Open-Meteo + 1.5Γ— orographic uplift for future dates. Tile strip icons: πŸ§Šβ‰€18Β° 🧊great freeze / ❄️≀25Β° good / πŸŒ‘οΈβ‰€29Β° marginal / πŸ’§β‰€32Β° weak / πŸ”΄no freeze.
🌨️ Recent Snowfall β€” auto-filled when date is set
Depth and recency both matter. Override if local conditions differ from the forecast grid.
β€”
Wind Slab Risk
Dust on Snow
Lowers albedo β€” corn opens ~25 min earlier, window compresses. Check CAIC β†—
Enter distance & gain

Corn Window

Set objective and forecast on Plan tab, then compute.

Peak Map β€” Tap a marker for details

Excellent 75+
Good 50+
Marginal 25+
Poor
No data

Map Β© OpenStreetMap Β· USGS The National Map

About CornCast

CornCast is a departure-time calculator for spring corn snow ski touring in the Indian Peaks Wilderness and Rocky Mountain National Park. Select a peak and named descent line from the 155 FRSK-mapped ski descents across 40 peaks, enter your overnight forecast and route details, and CornCast tells you when to leave the trailhead to arrive during the corn window β€” and when to expect it to turn to slush.

What Is Corn Snow?

Corn snow is a spring surface condition, not a crystal type. It forms through a diurnal cycle: overnight temperatures drop below 32Β°F and refreeze the free water at the snow surface into a continuous ice matrix. The following morning, solar radiation melts that crust β€” but for a brief window of typically one to three hours, the surface passes through an intermediate state where every grain is rounded, separated, and lightly lubricated. That's corn: predictable, forgiving, and consistent from turn to turn.

Outside that window the surface is either too hard (icy morning crust) or too soft (afternoon slush). The entire model exists to find the edges of that window for a specific face on a specific day.

Corn is a spring phenomenon because it requires free water to be present at the surface before the overnight freeze. In deep winter, the snow surface is already frozen solid β€” there is nothing to refreeze into a crust. As the season progresses and the snowpack warms toward 32Β°F, the daily freeze-thaw cycle becomes possible and eventually predictable.

The Physics Pipeline

CornCast chains seven physical processes together to compute the corn window. Each stage feeds into the next β€” change one input and the effect ripples downstream. Three modifier layers adjust values mid-chain. Two stages produce time outputs (corn opens, corn closes). The rest are quality and quantity variables that shape those times.

1Overnight Freeze Quality
The overnight freeze is the engine of everything. When air temperature drops below 32Β°F, free water at the snow surface refreezes into a continuous ice matrix β€” the crust the morning sun must melt before corn can form. The colder the night, the thicker and harder this matrix. A 10Β°F night builds something close to reinforced concrete at the surface. A 29Β°F night barely skins it.

Sky clarity matters as much as temperature. On clear nights, the snow surface radiates heat directly to a cold sky and receives very little back β€” so the snow surface can be 2–5Β°F colder than the air thermometer reads. Clouds reverse this: they act as a warm blanket, radiating heat back down. A clear 22Β°F night builds a meaningfully deeper crust than a cloudy 22Β°F night even though the thermometer reads the same. CornCast applies up to a 2Γ— effective freeze bonus for a clear sky versus fully overcast.

Elevation compounds the cold. Air temperature drops roughly 3–4Β°F per 1,000' of elevation gain. The app lapse-corrects all weather data to the peak's actual elevation β€” a face at 13,500' refreezes harder than one at 12,000' even when the forecast originates from the same grid point.
f_lo = overnightLow + lapseAdj [ski zone temp; lapseAdj = (summit βˆ’ skiZone)/1000 Γ— 3.5Β°F]
rawFQ = (30 βˆ’ f_lo) / 35 + ccFreezeBonus
ccFreezeBonus: CCCβ‰₯0.65 β†’ +0.05 Β· CCC≀0.35 β†’ βˆ’0.09 [cold pack amplifies; depleted absorbs]
rawFQ += freezeDurBonus [0 at ≀2 hrs below 28Β°F, up to +0.15 at 8+ hrs]
freezeQ = rawFQ Γ— (0.50 + 0.50 Γ— clearSkyFraction)
effFQ = max(0.03, freezeQ βˆ’ windScour)
effFQ = max(0.03, effFQ Γ— (1 βˆ’ matPen)) [matPen 0–20%; grain age degrades bonds]
β†’ Colder + clearer + cold-core pack + sustained hours = deeper, harder freeze
Male & Granger (1981), Water Resources Research 17(3) β€” snow surface energy exchange and longwave radiative balance; Pomeroy & Brun (2001), Snow Ecology, Cambridge β€” physical properties of snow
↓ Sets the thermal debt that solar energy must repay before corn can open (Step 4)
⟳ Modifier β€” adjusts Steps 1, 4 & 5
Seasonal Snowpack Maturity
The same overnight cold does not produce the same crust in March and in June. The difference is grain metamorphism β€” a continuous structural change driven by the repeated daily freeze-thaw cycle.

In March, the snowpack surface is composed of sharp, angular crystals with enormous surface area. They bond tightly when frozen and produce an excellent, hard crust. Over the following months, those crystals round and enlarge through a process called equilibrium metamorphism. Grains grow from 0.1–0.5mm needles into 1–4mm rounded spheres. Rounded grains have far less contact area with their neighbors β€” they bond weakly when refrozen, producing a thinner, more fragile crust from the same overnight temperature.

There is a second effect: the thermal state of the full snowpack column also degrades through the season. A March snowpack at 12,000' is cold all the way to the bottom β€” the overnight freeze can penetrate 30–50cm, creating a deep structural crust. By late May or June, the entire column is often isothermal β€” uniformly at 32Β°F with no cold reserve. The overnight freeze can now only penetrate 5–10cm into the surface, creating a thin veneer regardless of how cold it got. The corn window still opens, but it opens faster and closes sooner.

CornCast applies both effects as graduated monthly penalties.
When live Open-Meteo archive is available (primary model):
packRipeness = surfaceRipeness Γ— 0.60 + columnRipeness Γ— 0.40 + depthAdj
grainQuality = 0.50 Γ— packRipenessGrainCurve(pr) + 0.30 Γ— recentCycles + 0.20 Γ— min(1, ftCyclesTotal/8)
thermalMass = 0.65 Γ— cccComponent + 0.35 Γ— sweComponent + collapseAdj
matPen = max(0, min(0.20, (1 βˆ’ grainQuality) Γ— 0.20)) [derived]

Aspect-specific solar pack state (v45) β€” energy balance model:
solarAbsorbed = solarMorning[W/mΒ²] Γ— BASE_RAD[asp] Γ— radBoost Γ— (1 βˆ’ 0.55 albedo)
Solar melt fires when solarAbsorbed > 180 W/mΒ² [Male & Granger 1981]
Ambient melt fires when tmax > 36Β°F [same as global model]
Cycle counted when (solar melt OR ambient melt) AND tmin < 28Β°F
Surface ripeness solar heat load = max(0, solarAbsorbed βˆ’ 180) Γ· 500 per day
SE clear April: absorbed β‰ˆ 280 W/mΒ² β†’ solar melt, heat load 0.20/day
NW any month: absorbed β‰ˆ 68–91 W/mΒ² β†’ no solar melt, 0 solar heat load
NE June clear (radBoost Γ—1.50): absorbed β‰ˆ 186 W/mΒ² β†’ solar melt begins
Clouds suppress solar loading naturally via measured solarMorning β€” no separate cloud term
columnColdContent stays shared β€” deep column is not aspect-specific

Fallback when archive fails (calendar defaults only):
March April May June
packRipeness: 5% 15% 40% 70%
Colbeck (1987), IAHS 162 β€” crystal metamorphism in seasonal snow; Armstrong & Brun (2008), Snow and Climate, Cambridge; Clow et al. (2012), JGR Atmospheres β€” Front Range snowpack trends at elevation
⟳ Modifier β€” adjusts Step 1 & Step 6
Wind Scour
While overnight cold builds the refreeze crust, wind is simultaneously trying to erode it β€” physically breaking fragile ice bonds before they can consolidate. This effect is most significant on west and northwest-facing terrain, which bears the full brunt of Colorado's prevailing westerly flow. East and southeast faces are typically sheltered by the terrain behind them.

The model applies a wind scour penalty above about 12 mph. That penalty is scaled by two factors: the compass direction of the face (west is most exposed, southeast least) and a per-face micro-terrain rating that distinguishes a sheltered cirque bowl from an exposed ridge crest. The wind threshold is higher when computing window duration (18 mph) than when computing freeze quality (12 mph) β€” the corn surface, once formed, is less fragile than the crust forming overnight.
Aspect wind exposure: W=1.00 Β· NW=0.90 Β· SW=0.72 Β· N=0.55 Β· S=0.50 Β· NE=0.45 Β· E=0.35 Β· SE=0.28

Wind direction advection (when live wind direction available):
windScour Γ— max(0.5, 1 + cos(windAngle βˆ’ faceAngle) Γ— 0.5)
Windward (direct): Γ—1.5 Β· Crosswind: Γ—1.0 Β· Lee: Γ—0.5
⟳ Modifier β€” adjusts Steps 4, 5 & 6
Two-Layer Snowpack Ripeness
The snowpack's readiness to produce corn depends on two physically distinct layers operating on entirely different timescales. Understanding the difference between them explains a lot about why some days produce great corn and others don't β€” even with similar overnight forecasts.

The surface layer (top ~30cm) responds to the past two weeks of weather. This is the zone that refreezes overnight, thaws each morning, and directly produces the corn surface you ski on. Warm days, above-freezing nights, rain, and solar loading all erode its refreeze potential. Cold nights and fresh snowfall restore it. The surface layer is reactive β€” a week of warm weather degrades it noticeably, and a cold snap with a storm can restore it within a few days. CornCast scores this layer using the past 14 days of actual weather data pulled from the ERA5 archive.

The column layer (30cm to full depth) responds to the entire season from March 1 onward. The deep snowpack accumulates cold content over months, and it releases that cold slowly β€” roughly 4.5 times slower than the surface. A cold March and April builds a substantial cold reserve that resists the deep pack going isothermal, even during warm mid-April weeks. Research at Niwot Ridge (11,500', just below the Indian Peaks ski zone) found that non-zero column cold content delayed snowmelt onset by up to 5.7 hours compared to a fully isothermal pack. A deep, cold column is what keeps a corn window open deep into a warm afternoon instead of collapsing to slush by 10 AM.

Why SWE matters here: A high snow-water-equivalent year means a deeper pack. More depth means more total cold stored in the column, and a pack that resists going isothermal longer into the spring. This is why SNOTEL SWE feeds directly into the column calculation β€” it's a meaningful physical link, not a simple background adjustment.

The two layers combine into a single ripeness score: the surface layer carries 60% of the weight (it governs whether overnight refreeze happens at all) and the column layer carries 40% (it governs how fast the window collapses). This combined score flows through Steps 4, 5, and 6 wherever the isothermal state of the pack matters.
Surface ripeness: scored from 14-day weather history. Warm days erode. Cold nights restore.
Column cold content: scored from full season (Mar 1 β†’ target). Warms ~4.5Γ— slower than surface.

Combined ripeness = surface Γ— 0.60 + column ripeness Γ— 0.40

High surface + cold column β†’ long window, opens on time, slow slush transition
High surface + warm column β†’ good corn, shorter window before slush collapse
Low surface + any column β†’ poor corn regardless β€” no overnight freeze = no crust
Jennings et al. (2018), The Cryosphere 12 β€” column cold content and melt onset timing at alpine sites; Fierz (2011), Encyclopedia of Snow, Ice and Glaciers β€” thermal attenuation of heat waves with snowpack depth; DeWalle & Rango (2008), Principles of Snow Hydrology β€” cold content definition and seasonal accumulation; Sturm & Holmgren (1998), JGR β€” thermal conductivity and depth attenuation in natural snowpacks
β–Ό
2Solar Radiation by Aspect
The sun's energy reaches a tilted slope most intensely when its rays strike nearly head-on. A south-facing slope in March catches the low noontime sun almost perpendicularly β€” maximum energy per square foot. A west face at the same time gets sunlight at a shallow angle, spread across a much larger area, delivering far less energy to the same patch of snow.

This geometry shifts dramatically through the season. In March, the noon sun sits only ~50Β° above the horizon. By June it climbs to ~73Β° β€” high enough that it actually overshoots south-facing terrain, reducing the SE and S solar advantage. Meanwhile, north and northeast faces gain dramatically in June because the sun rises so far north of east that it can directly illuminate terrain that was almost entirely in shadow all winter. This is the physical reason June NE corn is achievable at all when March NE corn almost never works.

Morning clouds reduce effective radiation proportionally. A 60% cloud-cover morning cuts available melt energy nearly in half.
April radiation multipliers (relative to flat ground):
S: 1.38 Β· SE: 1.25 Β· SW: 1.20 Β· E: 0.88 Β· W: 0.72 Β· NE: 0.55 Β· NW: 0.30 Β· N: 0.18

June shifts: S loses ~18% Β· N and NE gain 50–60% (sun rises far north of east)
Iqbal (1983), An Introduction to Solar Radiation, Academic Press β€” solar geometry and slope irradiance
↓ Controls how fast the thermal debt is repaid (Step 4) and how long the window lasts (Step 6)
β–Ό
3When the Sun First Hits the Face
The melt clock doesn't start until direct sunlight reaches the snow surface. An east face gets direct sun as soon as the sun clears the horizon β€” around 6:45–7:00 AM in April. A south face must wait while the sun rotates around through the northeastern sky; it typically isn't illuminating a south face until around 9:30 AM. A west face waits until early afternoon.

Local terrain introduces an additional delay that pure solar geometry can't predict. A ridge to the east can block morning light on an otherwise east-facing bowl by 20–60 minutes. Apache Peak's northeast bowl, for example, sits behind a ridge crest that delays direct sun until approximately 8:30 AM in April β€” over 40 minutes later than the solar geometry alone would suggest. These terrain shade delays are hand-coded from field observation for each face in the model.
April sun-hit times at 40Β°N:
E ~6:54 AM Β· NE ~7:48 AM Β· SE ~7:18 AM Β· S ~9:30 AM Β· SW ~12:00 PM Β· W ~1:30 PM
+ per-line terrain shade delay (sh field on each named descent line)
Examples: Isabelle Glacier sh=0.4h Β· Shoshoni Bowl sh=0.3h Β· Apache Couloir sh=0.1h
Derived from field observation and CalTopo terrain analysis for each FRSK line.
↓ Sets the earliest possible corn open time β€” the melt clock starts here (Step 4)
β–Ό
4Melt Onset β†’ 🌽 Corn Opens
When the sun hits the face, the surface doesn't immediately become corn β€” it is still frozen solid. The snow must absorb enough solar energy to melt the overnight ice bonds before the corn state is reached. Think of the overnight freeze as a thermal debt: the colder the night and the harder the freeze, the more energy must be repaid before the surface softens.

The rate at which that debt is repaid depends on two things: how much solar energy is arriving at the surface (driven by aspect, cloud cover, and the radiation calculations in Steps 2–3) and how quickly the morning air is warming (dawn temperature to afternoon high). A bright, sunny aspect on a clear morning with rapidly rising temperatures pays off the debt quickly. A heavily clouded northeast face in March may never pay it off during reasonable skiing hours β€” the model caps melt delay at 4.5 hours for exactly this reason.

One notable interaction: a snowpack that is already isothermal actually speeds up corn onset. Because the pack had no cold reserve, the overnight crust was thinner to begin with, so the thermal debt is smaller. The corn opens sooner β€” but the same thin crust means the window will close sooner too.
f_da = dawnTemp + lapseAdj [ski zone dawn temp]
meltDelay = (effFQ Γ— max(0, 33 βˆ’ f_da))
Γ· (effRad Γ— max(1.0, morningRise/6) + 0.01)
meltDelay Γ— (1 βˆ’ ripenMeltFactor) [packRipeness>0.50 shrinks delay: thin crust thaws fast]
β†’ Capped at 2.0 hours
β†’ cornOpens = max(sunHitTime, sunHitTime + meltDelay Γ— 1.05)
πŸ“ OUTPUT A: Corn Opens = sun hits face + melt delay
Kustas & Rango (1994), Water Resources Research 30(5) β€” simplified energy budget for snowmelt onset
↓ Subtract your approach time from Corn Opens to get your trailhead departure time
β–Ό
5Crust Quality
Two faces can have identical temperatures, sun angles, and cloud cover β€” but if the snow surfaces are different, the corn quality will be different. Crust quality is determined by how much refreeze material is available and how well it can bond.

Storm snow (less than ~10 days old) is the best raw material. Fresh angular grains have enormous surface area and bond tightly when frozen. This quality fades rapidly β€” grain rounding begins within hours of deposition, and by day 7 the crust potential has dropped to roughly half of what it was fresh. A 1" dusting ages out within 24–48 hours. A deep 10–12" storm retains useful crust potential for a week or more, because deeper snow takes longer to metamorphose all the way through.

Consolidated spring pack (more than ~10 days since the last storm) behaves differently. Once grains have rounded and stabilized into large melt-freeze polycrystals, the aging process essentially stops β€” grain size no longer changes. What matters then is whether there is enough surface material to refreeze at all, and whether the seasonal maturity penalties have weakened the bonds. A deep consolidated April pack still produces real corn. A thin consolidated June pack produces marginal corn regardless of how cold the night was.

The model takes whichever score is higher β€” the fresh storm calculation or the consolidated pack floor.
Storm layer: crustQ = (stormDepthΓ·8) Γ— exp(βˆ’daysΓ—0.10) Γ— (0.70 + grainQualityΓ—0.30)
[8" is full potential; halves every 7 days]

Pack floor: crustQ = 0.35 Γ— (faceSnwdInΓ·36) Γ— (0.60 + grainQualityΓ—0.40)
[uses full-pack depth at ski zone from elevation gradient β€” NOT storm depth]
[faceSnwdIn from SNOTEL+OM regression adjusted for SR wind-loading]

crustQ = max(stormLayer, packFloor, 0.05)
crustQ Γ— srPatchFactor [sr=3: 1.00, sr=2: 0.92, sr=1: 0.82 β€” surface patchiness]
crustQ += sweAdj [βˆ’0.12 to +0.07 from absolute SWE inches]
crustQ Γ— densityMult [0.85–1.08 from SWEΓ·depth ratio]

Snow Surface % = final crustQ β€” "how much material is available to refreeze?"
Fierz et al. (2009), UNESCO-IHP β€” International Classification for Seasonal Snow, melt-freeze grain classification; Colbeck (1986), Acta Metallurgica 34 β€” grain coarsening in wet snow; Colbeck (1979), J. Colloid Interface Science β€” ice-to-ice bond strength; Colbeck (1997), CRREL Report 97-10 β€” sintering and grain equilibrium
↓ Primary driver of window duration (Step 6) and contributes directly to final score
⟳ Modifier β€” adjusts Steps 5 & 6
Basin Snowpack β€” Live NRCS SNOTEL SWE
The NRCS SNOTEL network measures total snow water equivalent at stations throughout the range. CornCast uses SWE as a percentage of the 1991–2020 median for that date, because raw SWE numbers vary enormously by elevation and time of year β€” percent of median is directly comparable across dates and stations.

A below-normal snowpack year means the surface has been through more melt-freeze cycles relative to the calendar date. The snow is more fatigued and coarser than it would be in a normal year. An above-normal year tends to have deeper, fresher surface material and a column with more cold content reserve β€” because a thicker snowpack stores more cold and yields it more slowly. This is why SWE feeds directly into the column cold content calculation (see Two-Layer Ripeness modifier above) rather than acting as a simple surface modifier.

The effect is intentionally modest. A cold, clear night on a 75% SWE year can still produce excellent corn. SWE is a background nudge, not a threshold. Stations are weighted by elevation proximity to the ~12,000' ski zone.
Stations: Niwot Ridge #663 Β· University Camp #838 Β· Sawtooth #1251 Β· Wild Basin #1042 Β· Bear Lake #322 Β· Joe Wright #551
Elevation weight: closer to 12,000' = more weight
Effect range: roughly Β±10% on crust quality, Β±15 minutes on window duration
USDA Natural Resources Conservation Service β€” SNOTEL Data & Products; station SWE % of 1991–2020 median
β–Ό
6Window Duration β†’ 🌽 Corn Closes
Once corn opens, how long does it last? The window closes when free water content in the surface layer exceeds roughly 8–12% by volume β€” at that point every grain is floating in liquid rather than lightly bonded to its neighbors, and the surface becomes saturated slush. The crust must melt completely through before this happens.

Crust thickness is the dominant term. A deep, hard freeze from a very cold night takes far longer to fully melt through than a thin veneer. This is why a 5Β°F night produces a longer skiing window than a 28Β°F night, even when corn opens at the same time β€” there is simply more crust thickness to sustain the condition.

Two independent mechanisms close the window. Solar melt rate β€” absorbed shortwave radiation on this specific aspect β€” and sensible melt rate β€” warm air conducting heat into the surface above 36Β°F β€” both contribute. A warm clear afternoon combines both and closes the window fastest. A warm overcast afternoon has only sensible heat and closes more slowly. This is why cloud cover meaningfully extends the window even when temperatures are unchanged.

Shaded faces (NW, N) have near-zero solar melt rate β€” they are driven entirely by ambient air temperature. A NW face on a cold afternoon stays in corn longer than an SE face in the same afternoon because the SE face receives direct solar energy the NW face does not. Wind above about 18 mph mechanically disrupts the softened corn surface and shortens the window independently of the energy balance.
Energy balance close time (v46):
solarMeltRate = effRad Γ— 1.0 [solar absorbed at this aspect; cloud-attenuated]
sensibleMeltRate = max(0, f_hi βˆ’ 36) Γ— 0.04 [warm air conduction; only mechanism for shaded faces]
totalMeltRate = solarMeltRate + sensibleMeltRate
cornBudget = (crustQ Γ— 5.0 + effFQ Γ— 10.0) Γ— (0.72 + thermalMass Γ— 0.48)
rawDur = cornBudget Γ· totalMeltRate + sweDurBonus βˆ’ windDurPenalty
rawDur Γ— apDurFactor [ap=3: 1.00, ap=2: 0.95, ap=1: 0.88]
β†’ Clamped 0.2 – 4.0 hours Β· Ref: Male & Granger (1981)

SE clear warm day: high solar + high sensible β†’ fast close
NW shaded face: near-zero solar β†’ sensible only β†’ slow ambient close
Any face overcast: effRad suppressed by cloud β†’ window extends naturally
β†’ cornCloses = cornOpens + duration
πŸ“ OUTPUT B: Corn Closes = corn opens + duration
↓ Corn Opens and Corn Closes together define the window; your arrival must fall between them
β–Ό
7Terrain Factor
Two southeast faces at 12,500' with identical forecasts can produce dramatically different corn. One is a clean 35Β° apron with six feet of consolidated snow, sheltered from prevailing winds, and uniform sun exposure across the slope. The other is a rocky broken face with thin patchy coverage, sits on a wind-scoured ridge, and has cliff ribs that keep portions in shadow well into mid-morning. The physics model, run identically on both, gives them the same raw score. The terrain factor is how CornCast accounts for this difference.

Three components rate each face on a 1–3 scale. Snow Retention: does this face reliably hold a deep continuous snowpack through spring, or is it wind-stripped and rocky? Aspect Purity: does the entire face receive uniform solar input at the same time, so the corn window opens consistently across the slope rather than in patchy zones? Wind Shelter: is the refreeze surface protected from overnight scour?

These ratings are based on published route descriptions and first-hand field knowledge β€” a deliberate human judgment layer on top of the physics, and a known source of subjectivity in the model.
q = (SnowRetention + AspectPurity + WindShelter) / 9 [range: 0.33 – 1.00]

Terrain effects are now embedded directly in physics steps:
sr β†’ srDepthMult (face snow depth) + srPatchFactor (surface quality)
ap β†’ apDurFactor (window duration consistency)
we β†’ ad.wx inside windScour (freeze quality + duration)

No separate terrain multiplier β€” double-counting eliminated in v44.
Roach (2001), Colorado's Indian Peaks Wilderness, Fulcrum Publishing; frontrangeskimo.com trip reports; first-hand field observation. Not GIS-derived β€” a known model limitation.
↓ Final multiplier on the physics score β†’ produces the 0–100 output
β–Ό
βœ“Final Score (0–100)
All pipeline outputs combine into a single score. The raw number is normalized so that a benchmark SE-facing corn objective at 12,500' in March under near-perfect conditions scores 100. The calibration target represents a clean, well-sheltered southeast couloir with reliable coverage and consistent solar exposure from first light through mid-morning β€” representative of the premier spring corn conditions in the Indian Peaks. A score of 80 means conditions are strongly in your favor. A score of 30 means you might find corn in sheltered pockets but shouldn't plan your day around it.
Score bands:
75–100 Excellent β€” deep uniform freeze, 2+ hr window, classic spring skiing
50–74 Good β€” reliable corn, 1–2 hr window, may vary slightly across face
25–49 Marginal β€” short window, thin crust, or patchy; worth checking
0–24 Poor β€” theoretical window only; too short to plan around

Scoring components:
fqScore (0–28) β€” freeze quality Γ— grainGateFactor Γ— meltMatchFactor
radScore (0–18) β€” effective radiation Γ— 14
cqScore (1–9) β€” crust quality bell curve, peak at 0.42
durBonus (0–4) β€” +4 if β‰₯2h, +2 if β‰₯1.2h

grainGateFactor = min(1.0, 0.30 + grainQuality Γ— 0.70)
March zero cycles (gq=0.20): Γ—0.44 β€” angular grains cannot form corn bonds
Prime April (gq=0.87): Γ—0.91 β€” near-full credit

meltMatchFactor = min(1.0, effRad Γ· (effFQ Γ— 1.8 + 0.30))
SE clear April: ratio β‰₯1 β†’ Γ—1.00 β€” radiation exceeds what's needed
NE March 5Β°F: ratio β‰ˆ0.32 β†’ fqScore cut 68% β€” sun cannot melt that crust

A cold night only scores fully when grain structure supports corn bonds
AND radiation can complete the melt cycle. Season arc emerges from physics.

Approach Time

CornCast uses a linear regression fit to personal backcountry skinning pace data. Speed decreases linearly with slope grade. At 0% grade (flat travel) the default pace is about 2.45 mph; at 15% grade it drops to about 1.28 mph.

speed (mph) = βˆ’7.8085 Γ— grade + 2.4481
grade = elevation gain (ft) Γ· (distance (mi) Γ— 5280)
total time = distance Γ· speed + buffer minutes Γ· 60

This is one person's regression data. Individual pace varies significantly with fitness, pack weight, skin conditions, and acclimatization. Use the buffer field to account for your pace relative to this default β€” a conservative skier or heavy pack warrants 45–60 minutes of buffer; a fast skier on light gear may only need 15.

Weather Data

CornCast automatically fetches weather from two Open-Meteo endpoints when you select a peak and target date.

The ERA5 archive covers March 1 of the current season through yesterday. ERA5 is the European Centre for Medium-Range Weather Forecasts global reanalysis β€” finalized, high-quality gridded data that is more accurate than rolling model forecasts. All temperatures are lapse-corrected to the peak's actual elevation using a standard environmental lapse rate.

The 16-day forecast covers today through roughly two weeks out, using the best available global model for the region. Archive and forecast data are merged into a single timeline: the ripeness trajectory chart spans the full season from March 1, and the weather tile strip always shows the 10 days leading into your target date β€” whether those days are past (archive data) or future (forecast), or a mix of both.

Dawn temperature is pulled from the 6 AM hourly forecast if the target date falls within the 16-day forecast window. For target dates in the past (or beyond the forecast range), dawn temperature is estimated as the overnight low plus 2Β°F, which closely tracks the typical pre-dawn temperature in dry mountain spring air.

If the archive fetch fails, the model runs in surface-only mode β€” using forecast data where available and seasonal baseline estimates for the column cold content. The interface labels this condition clearly.

Peaks Covered

Known Limitations

CornCast is a planning tool, not a sensor. Several things it cannot fully account for:

Changelog

v49 β€” Duration fix, auto-compute, chart polish (2026-03-27)

Physics fix and UX polish pass addressing feedback from field use sessions:

v48 β€” Driver narrative: Inputs / Reasoning / Result (2026-03-22)

Complete rebuild of the driver narrative to communicate physics in plain language rather than model internals.

v47 β€” Driver card template + v46b content (2026-03-22)

v46 β€” Energy balance close time (2026-03-22)

Window duration is now derived from a direct energy balance rather than an empirical formula with a temperature penalty. The corn window closes when cumulative absorbed energy exhausts the surface layer's energy budget.

v45b β€” Remove lateOpenPenalty, RAW_MAX 58 (2026-03-22)

Two corrections following v45 benchmarking:

v45 β€” Aspect-specific solar pack state, energy balance model (2026-03-22)

Pack state parameters β€” surface ripeness, freeze-thaw cycles, grain quality β€” are now computed per-aspect using a direct snow surface energy balance rather than treating all faces identically from a single grid-point temperature record.

v44b β€” fqScore grain quality + melt match gates (2026-03-19)

Two physical gates added to fqScore so that a cold overnight freeze only scores fully as corn quality when the snowpack history and radiation balance both support it:

v43 β€” Season Arc + Multi-Line Comparison (2026-03-19)

Two planning features built on the computed corn score trajectory:

v42 β€” Physics & Safety Inputs (2026-03-19)

Five improvements implemented together β€” all fail silently if data is unavailable:

v41 β€” Physics accuracy audit + full UX/narrative update (2026-03-19)

Comprehensive audit of every physics step shown to the user. All driver rows and About tab formula boxes now accurately reflect the actual model implementation:

v39+v40 β€” Elevation enrichment + Wind direction advection (2026-03-19)

Two physics improvements implemented together:

v38 β€” Named Lines data model (2026-03-19)

Replaced the PK[].asp{} model with a flat LINES[] array where each FRSK-named ski descent is its own first-class object. Key changes:

v37d β€” East Portal / Moffat area peaks (2026-03-19)

Added 11 new peaks covering the South Boulder Creek / Rogers Pass / Rollins Pass / Berthoud Pass corridor, all with FRSK-verified routes:

All coordinates from FRSK CalTopo GeoJSON. Basin assignments (South Boulder Creek watershed) updated in getPeakBasin.

v37c β€” Indian Peaks: missing routes + 6 new peaks (2026-03-19)

Added missing FRSK-verified routes to existing peaks:

Added 6 new peaks with FRSK-verified descent routes:

All coordinates sourced from FRSK CalTopo GeoJSON. Basin assignments updated in getPeakBasin.

⚠️ Disclaimer

CornCast is a planning aid only. Always check the Colorado Avalanche Information Center (CAIC) forecast before any backcountry tour. Spring conditions change rapidly, corn skiing terrain is frequently avalanche terrain, and no model replaces field judgment. Turn around if something feels wrong.