Yesterday I built a COBOL program that fetched live USGS streamflow data from eight Sierra Nevada rivers. It ran on Artemis II launch day and terminated normally with return code zero. I wrote about it here.

This morning, over coffee, I thought: COBOL was 1959. FORTRAN was 1957. And FORTRAN is still running the actual atmosphere.

The National Weather Service runs FORTRAN. NCAR runs FORTRAN. ECMWF โ€” the European Centre for Medium-Range Weather Forecasts, widely considered the best weather modeling operation on Earth โ€” runs FORTRAN. The WRF model, the backbone of regional weather forecasting in the United States, is FORTRAN. The first successful numerical weather prediction was computed in 1950 on ENIAC, and when that code was ported to faster machines, it was rewritten in FORTRAN. The atmosphere has been computed in FORTRAN for 75 years.

So I built CASCADIA-WX.

What It Does

Every morning at 8AM Pacific, GitHub Actions wakes up and runs the pipeline. A Python fetcher pulls live data from 11 NRCS SNOTEL stations buried in the Cascades, Olympics, and on the flanks of Rainier โ€” sensors that have been running since before the internet existed, measuring snowpack in the mountains that supply water to most of western Washington. Four valley airport observations come in alongside. All of it goes into a CSV.

Then FORTRAN takes over.

The program computes environmental lapse rates from the temperature gradient between valley floor and mountain stations. It estimates snow level โ€” the elevation where temperature crosses 2ยฐC, the rain/snow phase boundary. It partitions precipitation phase, accumulates degree days, calculates an atmospheric river index from snow level anomaly and SWE rate, classifies the storm type (Gulf of Alaska, Pineapple Express, Cutoff Low), and rolls everything up by massif: Rainier, Olympics, Cascades. Four sections, formatted report, committed back to the repo. Dashboard reads it live.

CASCADIA-WX โ€” SECTION III: MOUNTAIN MASSIF SNOWPACK SUMMARY
MASSIF STATIONS AVG SWE (IN) AVG % NORMAL STATUS
------------------------------------------------------------
RAINIER 4 24.65 52.5 WELL BELOW NORMAL
OLYMPICS 2 13.90 33.2 WELL BELOW NORMAL
CASCADES 5 4.68 15.1 WELL BELOW NORMAL
ATMOSPHERIC RIVER INDEX: -0.71 (NO AR CONDITIONS)
STORM CLASSIFICATION: GULF OF ALASKA
REGIONAL SNOW LEVEL: 2972 ft
REGIONAL SWE % NORMAL: 32.0%
CASCADIA-WX.f90 NORMAL TERMINATION. RETURN CODE: 0.

The Numbers Are Alarming

The Cascades are running at 15% of normal snowpack. Snoqualmie Pass: 0.0 inches. Stevens Pass: 0.0 inches. Stampede Pass: 0.0 inches. The passes are bare in early April, which is when they should still be holding their peak accumulation before the melt season begins.

Paradise, sitting at 5,150 feet on the southern flank of Rainier, is still holding 36.7 inches โ€” 73% of normal. The mountain remembers what the passes have forgotten. But the reservoirs downstream feed from the whole watershed, not just the summit. What the passes don't hold now, the valley won't have in August.

This is exactly the kind of analysis FORTRAN was built for. Large arrays of numerical data, physical equations applied systematically, formatted output. The language was designed by John Backus at IBM in 1957 specifically because scientists were spending more time writing machine code than doing science. FORTRAN โ€” FORmula TRANslation โ€” let them write equations that looked like equations. Seventy years later that's still the right idea for atmospheric modeling.

The Eleven Stations

Three massifs. Eleven sensors. Each one measuring snowpack that will become river flow that will become drinking water and irrigation and hydropower. The most interesting station in the network is also the highest: Corral Pass at 5,810 feet โ€” the last to lose its snow, the first to signal when the season has truly turned. Snoqualmie Pass at 3,000 feet is the canary on the low end โ€” when it goes bare in March instead of May, something is wrong.

Right now, something is wrong. FORTRAN is measuring it every morning.

Why FORTRAN After COBOL

Yesterday's COBOL project and today's FORTRAN project are sister projects in what is apparently becoming a retro-computing streak. Both use the same pattern: Python stdlib fetcher pulls free government data, old compiled language does the domain-specific computation, GitHub Actions runs it daily, static dashboard reads the output. Zero dependencies. Zero cost. Correct output every morning.

The difference is in what the languages are good at. COBOL is verbose, record-oriented, obsessive about data layout โ€” perfect for the structured tabular output of a streamflow report. FORTRAN is mathematical, array-oriented, built for floating point computation โ€” perfect for the physics of atmospheric science. They're not interchangeable. They were designed for different problems, and both are still running in production at government agencies for exactly those problems.

Writing FORTRAN in 2026 felt surprisingly natural. The fixed-format source (columns matter, line length is enforced) is initially jarring coming from modern languages, but the mathematical expressiveness is genuinely elegant. An array computation that would take several lines in Python is one line in FORTRAN. The lapse rate calculation, the degree day accumulation, the atmospheric river index โ€” they read almost like the equations in a meteorology textbook. That was the original design goal, and it still works.

The Hatch Has to Be Maintained

The README for this project has a LOST reference: enter the numbers every 108 minutes or the snowpack anomaly gets worse. That's a joke, but it's also not entirely wrong. The SNOTEL network has been continuously measuring snowpack since the 1970s. That unbroken record โ€” daily observations, every station, every winter โ€” is what makes percent-of-normal calculations meaningful. The baseline is the point. The comparison is the point. Without the continuous measurement, you just have numbers without context.

CASCADIA-WX maintains that measurement in its own small way. Every morning at 8AM it wakes up, pulls the numbers, runs the physics, and commits the result. The hatch is maintained. Whether anyone is watching or not.

The live dashboard is here. The source is on GitHub. The snowpack is at 32% of normal and falling.

CASCADIA-WX.f90: NORMAL TERMINATION. RETURN CODE: 0.