Reservoir solarCoverage explorerWhat the numbers sayTechnical paperMethods and review
METHODS & REVIEW

Reservoir solar: methods, sources and review

How the coverage explorer was built, every number it uses, and what two independent reviewers said is wrong with it.

Both reviewers rated this model unsound. It was drafted with AI assistance and then attacked by two models from different vendors (Google Gemini, grounded; and Azure OpenAI), neither from the family that wrote it. Their findings are below in full, including the ones still unfixed. Treat the explorer as a screening estimate with known defects.

How the model works

What it does not do

Every parameter, and where it came from

ReservoirInterconnectionSurface areaEvaporation Dam generation shapeSurface management
Lake Mead
Hoover Dam
2,080 MW
4,000 GWh/yr, CF 0.22
76,357 ac
MEASURED: annual mean of daily surface area 2024-2026, from Reclamation daily elevation and storage with area taken as the derivative of a fitted hypsometry V = a(h-h0)^b (analysis/fetch_basin_daily.py). Supersedes our own Sentinel-2 composite, which reads low at every reservoir because a 30 m water mask loses narrow canyon arms and shadowed banks.
published: 83,634 ac (-9%) — Reclamation HDB 2017-2021 average surface area (LCR Evaporation Report 2023, Table 7)
6.22 ft/yr
USGS DIRECT FLUX (eddy covariance + energy balance, Moreo & Swancar; Earp & Moreo 2021): 1,896 mm/yr = 6.22 ft/yr. This is a measured DEPTH, independent of surface area, so it is valid to apply to a separately-measured area. Reclamation HDB 2017-2021 implies 6.21 ft/yr over their larger area, which agrees. Corroborated against the two later USGS data releases (2015-2020 and 2021-2023, ScienceBase doi:10.5066/P99GWPPG and doi:10.5066/P15HFPHB), which extend the record from 2019 to 2023. Aggregated the way OFR 2021-1022 aggregates (most probable column, unweighted mean of complete calendar years), 8 qualifying years give 6.25 ft/yr, 0.5% above the published depth and well inside the 5-8% flux uncertainty already carried. 2019 is held out because its own latent-heat flux implies 33% more evaporation than it reports (7.17 against 5.39 ft measured, the gap taken relative to the reported figure), and 6 of its 12 months are flagged estimated. The published depth is kept because a peer-reviewed OFR value is stronger provenance than a mean we recompute off a data release; see outputs/usgs_mead_evap.json (analysis/usgs_mead_evap.py).
MEASURED daily release (Reclamation, 2015-2026 per-calendar-day mean) shaping the seasonal and day-to-day pattern; within-day shape still modelled as load-following, since no public sub-daily tailrace gage exists here.NPS Lake Mead National Recreation Area
Lake Powell
Glen Canyon Dam
1,320 MW
2,777 GWh/yr, CF 0.24
75,389 ac
MEASURED: annual mean of daily surface area 2024-2026, from Reclamation daily elevation and storage with area taken as the derivative of a fitted hypsometry V = a(h-h0)^b (analysis/fetch_basin_daily.py). Supersedes our own Sentinel-2 composite, which reads low at every reservoir because a 30 m water mask loses narrow canyon arms and shadowed banks.
published: 57,342 ac (+31%) — Sentinel-2 MNDWI summer water extent, 2022-2026 mean (analysis/ee_reservoirs.py)
5.83 ft/yr
~70 in/yr, Reclamation/DRI measured programme (coloradoriverscience.org); our gridMET open-water screen gives 5.4-6.4 ft/yr
MEASURED: USGS 09380000 15-min release below Glen Canyon, 2015, aggregated hourlyNPS Glen Canyon National Recreation Area
Lake Mohave
Davis Dam
240 MW
1,148 GWh/yr, CF 0.55
25,665 ac
MEASURED: Sentinel-2 MNDWI summer water extent, 2024-2026 mean. Retained here because this reservoir is held within a few feet, so its hypsometry cannot be recovered from the elevation record.
published: 27,022 ac (-5%) — Reclamation LCRAS 2017-2021 average (LCR Evaporation Report 2023, Table 9)
5.64 ft/yr
USGS DIRECT FLUX (eddy covariance, same programme as Lake Mead): 1,718 mm/yr = 5.64 ft/yr. A measured depth, area-independent. Supersedes the LCRAS area-quotient (140,735 AF / 27,022 ac = 5.21 ft/yr) which is NOT area-independent and should not be applied to a different area.
MEASURED daily release (Reclamation, 2015-2026 per-calendar-day mean) shaping the seasonal and day-to-day pattern; within-day shape still modelled as load-following, since no public sub-daily tailrace gage exists here.NPS Lake Mead National Recreation Area
Lake Havasu
Parker Dam
120 MW
457 GWh/yr, CF 0.43
15,330 ac
MEASURED: Sentinel-2 MNDWI summer water extent, 2024-2026 mean. Retained here because this reservoir is held within a few feet, so its hypsometry cannot be recovered from the elevation record.
published: 18,864 ac (-19%) — Reclamation LCRAS 2017-2021 average (LCR Evaporation Report 2023, Table 10)
7.52 ft/yr
DERIVED from Reclamation's LCRAS accounting, calibrated against measured flux. There is no Lake Havasu flux station and USGS confirmed (2026-08-10) that one is only in planning, so the depth cannot be measured directly. LCRAS reports Mead, Mohave and Havasu on one convention and two of those three have eddy-covariance depths, so the convention is calibrated where it is checkable. Reclamation's published areas match the mean of their own daily record to 0.2% at Mead and 0.5% at Mohave, so the denominator is sound; the quotient nonetheless runs -6.8% and -5.8% below measured flux at the two lakes, and the gap is precipitation, which consumptive-use accounting nets out. At Mead the mean gap is 0.42 ft/yr against 0.45 ft/yr of rain. The correction is therefore additive and physical rather than a fitted factor. Lake Havasu's evaporation depth is 7.52 ft/yr, bracketed 7.05-7.99. The accounting volume over Reclamation's own area gives 7.00 ft/yr net of rain; adding the 0.43 ft/yr that falls on the lake gives 7.43 gross, and the calibration's own bias against measured flux at Mead and Mohave is -0.09 ft/yr with a per-year spread of 0.23. This supersedes an asserted 5.2-7.4 bracket. A higher depth means more water saved per acre covered, so this raises Lake Havasu's standing rather than lowering it. Havasu is already the reservoir this work rates highest, so the correction cuts against our own conclusion and is reported for that reason. See outputs/havasu_evap_bracket.json (analysis/havasu_evap_bracket.py).
synthetic load-following (no public sub-daily tailrace gage below Parker)BLM / Arizona State Parks (NOT a National Park Service unit)
Flaming Gorge
Flaming Gorge Dam
152 MW
457 GWh/yr, CF 0.34
38,616 ac
MEASURED: annual mean of daily surface area 2024-2026, from Reclamation daily elevation and storage with area taken as the derivative of a fitted hypsometry V = a(h-h0)^b (analysis/fetch_basin_daily.py). Supersedes our own Sentinel-2 composite, which reads low at every reservoir because a 30 m water mask loses narrow canyon arms and shadowed banks.
published: 42,020 ac (-8%) — Reclamation: surface area at normal water-surface elevation
3.3 ft/yr (screening estimate, not measured)
SCREENING ESTIMATE (elevation ~6,040 ft, cool high-desert climate). Not measured: Upper Basin reservoir evaporation is only now being instrumented under the UCRC/Reclamation Reservoir Evaporation Project.
MEASURED daily release (Reclamation, 2015-2026 per-calendar-day mean) shaping the seasonal and day-to-day pattern; within-day shape still modelled as load-following, since no public sub-daily tailrace gage exists here.USFS Flaming Gorge National Recreation Area
Navajo Reservoir
Navajo Dam
30 MW
90 GWh/yr, CF 0.34
11,251 ac
MEASURED: annual mean of daily surface area 2024-2026, from Reclamation daily elevation and storage with area taken as the derivative of a fitted hypsometry V = a(h-h0)^b (analysis/fetch_basin_daily.py). Supersedes our own Sentinel-2 composite, which reads low at every reservoir because a 30 m water mask loses narrow canyon arms and shadowed banks.
published: 15,610 ac (-28%) — Reclamation: surface area when filled
3.6 ft/yr (screening estimate, not measured)
SCREENING ESTIMATE (elevation ~6,085 ft). Not measured; part of the UCRC/Reclamation Upper Basin evaporation study.
MEASURED daily release (Reclamation, 2015-2026 per-calendar-day mean) shaping the seasonal and day-to-day pattern; within-day shape still modelled as load-following, since no public sub-daily tailrace gage exists here.New Mexico / Colorado state parks
Blue Mesa
Blue Mesa Dam
86 MW
239 GWh/yr, CF 0.32
7,064 ac
MEASURED: annual mean of daily surface area 2024-2026, from Reclamation daily elevation and storage with area taken as the derivative of a fitted hypsometry V = a(h-h0)^b (analysis/fetch_basin_daily.py). Supersedes our own Sentinel-2 composite, which reads low at every reservoir because a 30 m water mask loses narrow canyon arms and shadowed banks.
published: 9,180 ac (-23%) — Reclamation: surface area at maximum water-surface elevation
2.8 ft/yr (screening estimate, not measured)
SCREENING ESTIMATE (elevation ~7,520 ft, coldest reservoir in the set). Not measured; part of the UCRC/Reclamation Upper Basin evaporation study.
MEASURED daily release (Reclamation, 2015-2026 per-calendar-day mean) shaping the seasonal and day-to-day pattern; within-day shape still modelled as load-following, since no public sub-daily tailrace gage exists here.NPS Curecanti National Recreation Area

Surface areas

Measured, not quoted: a summer Sentinel-2 composite, water picked out by MNDWI at 30 m, averaged over 2024–2026, clipped to each reservoir's own footprint rather than a bounding box (Lake Mead's box otherwise swallows the head of Lake Mohave below Hoover Dam). Published figures mix conventions — Reclamation five-year operating averages in the Lower Basin, full pool in the Upper Basin — and full pool badly overstates reservoirs drawn down for years. Both are shown above.

Evaporation rates

Lake Mead (6.22 ft/yr) and Lake Mohave (5.64 ft/yr) are USGS direct eddy-covariance flux measurements: measured depths, independent of surface area, so applying them to a separately measured area is valid. The Mead record has since been extended past 2019, and the gauged years are set out below: they sit inside the flux uncertainty, so they confirm the rate rather than change it. Mohave has not been remeasured since 2019. Lake Powell's ~70 in/yr is likewise a measured flux. Lake Havasu has no flux station, and USGS confirms one is only in planning, so its depth is derived: Reclamation's LCRAS accounting covers Mead, Mohave and Havasu on a single convention and two of those three have measured flux, so the convention is calibrated where it can be checked. Lake Havasu's evaporation depth is 7.52 ft/yr, bracketed 7.05-7.99. The accounting volume over Reclamation's own area gives 7.00 ft/yr net of rain; adding the 0.43 ft/yr that falls on the lake gives 7.43 gross, and the calibration's own bias against measured flux at Mead and Mohave is -0.09 ft/yr with a per-year spread of 0.23. That replaces an asserted 5.2-7.4 ft/yr bracket 2.4 times wider, whose ends were two different readings of the same quotient rather than a measured range. Reclamation's alternative HDB figure for Havasu still uses 1950s pan coefficients and runs about 35% high by their own comparison. Upper Basin rates are screening estimates; those three reservoirs are only now being instrumented by Reclamation and the Upper Colorado River Commission.

The gauged Lake Mead record

YearMeasuredCorrected
(most probable)
EBR-adjustedMonths
estimated
Energy
closure
In mean
20156.556.436.301.000in
20166.786.446.120.999in
20176.376.376.310.997in
20186.206.206.131.001in
20195.394.944.4561.330excluded
20206.286.286.281.000in
20215.976.106.2211.001in
20225.996.326.661.002in
20235.935.845.7631.001in
8-year mean6.266.256.22

Feet per year, from USGS eddy covariance at station 360500114465601 with an energy-balance correction. The model uses 6.22 ft/yr (Earp & Moreo 2021, OFR 2021-1022 (2011-2018 annual table), 1,896 mm/yr); the 8 qualifying years above average 6.25 ft/yr corrected, a difference of 0.5% against a flux uncertainty of 8%. Sources: doi:10.5066/P99GWPPG (2015–2020) and doi:10.5066/P15HFPHB (2021–2023).

Which column, and which years. Most probable. The OFR treats evaporation from measured latent-heat flux as a probable minimum and the energy-balance-closed value as a probable maximum, and states that 'most probable evaporation represents the average between minimum and maximum evaporation and is used for all monthly calculations in this study' (p. 17). That is the release's 'Corrected (most probable) evaporation' column. Unweighted mean of complete calendar years. The OFR's own annual table (table 8) runs January 2011 through December 2018 and reports the mean of those eight years; the partial years at either end of its record, 2010 and 2019, are excluded rather than scaled up. Years containing gap-filled months are kept at full weight, as gap filling is part of the published method: the OFR carries 2015 and 2016 at full weight despite multi-week outages in both. One test is ours and is NOT part of the OFR's method: a complete year is dropped only if the evaporation it reports disagrees with the latent-heat flux it reports by more than 5%. USGS prescribe no such rule and publish 2019 without qualification beyond its estimated-data flags. We add it because the two columns are two presentations of one measurement, so a disagreement of that size means at least one of them is unreliable. Which one we cannot say from here: both are outputs of a processing chain and the release does not expose enough to attribute the error. The alternative is to average a year the release contradicts itself about. The threshold is ours too, and the table below shows every year's ratio so a reader can set it differently. The energy-closure column above is the depth implied by the year’s own latent-heat flux divided by the depth it reports; every sound year in the record closes to better than 0.3%. 2019 is excluded: its own latent-heat flux implies 33% more evaporation than it reports (7.17 against 5.39 ft measured, the gap taken relative to the reported figure), and 6 of its 12 months are flagged estimated. Keeping it would pull the mean to 6.10 ft/yr on the strength of one year the release contradicts itself about. Method confirmed by USGS (Geoffrey Moret) personal communication, 2026-08-12, naming OFR 2021-1022 as the method used for the final Colorado River basin numbers and leaving the weighting to us.

Seasonality, and what the annual product discards

Share of annual, %JanFebMarAprMayJunJulAugSepOctNovDec
Measured (USGS, Mead)5.04.85.47.19.210.710.811.010.89.78.76.9
Penman, no heat storage4.35.17.39.511.312.912.711.09.17.55.34.0

The measured record peaks in month 8. A weather-driven Penman calculation of the same lake peaks in month 6, because it carries no heat-storage term: the lake spends spring storing energy and releases it in autumn, so evaporation lags radiation. Phase is exactly what a covariance term depends on, which is why the measured shape is used and the Penman shape is carried only as a check.

ReservoirTerm, measured
shape (%)
Term, Penman
shape (%)
Worst single
year (%)
Area swing
2024 (%)
Lake Mead-0.40-0.281.137.1
Lake Powell+0.99+1.054.2621.4
Lake Mohave+0.00+0.000.010.1
Lake Havasustatic area, term zero by construction
Flaming Gorge+0.46+0.702.173.6
Navajo Reservoir+0.85+1.854.4512.6
Blue Mesa+1.36+2.695.8618.2

Weighted by each reservoir's own evaporation volume, ignoring within-year seasonality moves basin evaporation by +0.3%. The largest per-reservoir mean is +1.4% at Blue Mesa, and the worst single year in the record is 5.9% at Blue Mesa. Both seasonal shapes agree on the direction at every reservoir, so the result does not rest on which shape is right. The term is positive at every reservoir except Lake Mead: the surface is largest in summer when the rate is highest, so an annual product UNDERSTATES evaporation there. Understating evaporation understates the water floating solar could save, which raises its cost per acre-foot. That is the direction that flatters our own conclusion, which is why it is stated rather than buried. At +0.3% it is far inside the flux and area uncertainties the model already carries. Whether it reorders the reservoirs is not something the size of the term settles on its own: the closest two are only 1.8% apart in cost per acre-foot against a largest term of 1.4%. Applying every term and re-sorting leaves the order unchanged, so the ranking stands.

Why the two measured lakes carry different error bars

LakePeriod
EBR
Mean closure
spread (%)
Worst year
(%)
Model
sigma (%)
Source
Lake Mead0.982.15.35.0computed from the ScienceBase releases (all three columns published)
Lake Mohave0.8210.822.110.8OFR 2021-1022 table 9; no data release covers 2014-2018

Closure uncertainty at Lake Mohave averages 10.8% of its annual evaporation against 2.1% at Lake Mead, 5 times as much, because a larger share of Mohave's measured turbulent flux comes off the surrounding desert (period energy balance ratio 0.82 against 0.98). The model now carries 10.8% at Mohave rather than the 5% it used to share with Mead. The sampled sigmas differ by less than that 5x, because Mead's is held at 5%: the report's own stated measurement uncertainty of 5-7% is wider than the 2.1% closure spread measured there, so it binds instead. At Mohave closure is the wider of the two and binds. Lake Mohave’s figures are transcribed from the report rather than computed from a data release, so the transcription is checked twice. That establishes we copied the right table correctly, not that the report is right: nothing here can audit USGS’s own numbers, and a Mohave data release covering 2014–2018 would be needed for that. Within a rounding tolerance of one percentage point, it reproduces the period means the report prints (1531, 1718, 1905 mm against 1531, 1718, 1905 mm) and the range the report quotes in words, 1.0–22.1% against 1–22%.

Shorelines

Real water polygons from OpenStreetMap, simplified. Drawn at full pool, so they show each reservoir's shape rather than today's water level — Lake Powell in particular is far smaller now than its outline suggests. Its water surface is 56,225 acres on 19 August 2026, 53% below the same day in 2019 and 35% of full pool, from the Reclamation daily record. The shaded panel band is not drawn by eye: each polygon is scanlined so the band's intersection with the water is exactly the stated share of the reservoir's area, verified to within a quarter of a percentage point against an independent raster.

Cover comparison

Every capital cost is anchored to a real deployment or a published quote, never an estimate. Shade balls are Los Angeles's actual 2015 project ($34.5M over 175 acres, 96 million balls, ten-year life). The floating-cover figure is the same utility's own quote for the same reservoir ($250M over 175 acres). A research pass had estimated floating covers at $140,000 per acre, ten times too low, which would have inverted the ranking. Options are annualised at 7% over their own service lives; dividing undiscounted lifetime totals, as that pass did, understates capital-heavy long-lived options roughly threefold.

What two independent reviewers said is wrong with this

Findings both reviewers reached independently, in substance as written:

  1. Suppressed evaporation cannot be monetised (fatal). There is no mechanism under the 1922 Compact or the Arizona v. California decree for a private party to own or sell water salvaged from evaporation on a mainstream federal reservoir. It becomes system water. Every dollar-per-acre-foot figure is therefore a public cost-effectiveness number, not project revenue.
  2. Headroom is not an interconnection study (fatal, unfixed). Nameplate minus dam output ignores the generator step-up transformer, switchyard and breaker ratings, N-1 criteria, protection, reactive capability and reserved capacity. The line-share control is a crude stand-in, not a substitute. Only a reservoir-specific interconnection study would settle it.
  3. One California price node cannot price seven reservoirs (FIXED). Every reservoir now prices off its own balancing authority. Lake Mead uses Nevada Power, the Arizona dams use Arizona Public Service, Navajo uses PNM — all full-year 2024 measured day-ahead prices with no gap-filling. Flaming Gorge and Blue Mesa sit in markets that only began publishing day-ahead prices in 2026 (PacifiCorp East when CAISO's EDAM went live, and the SPP West footprint when it replaced an imbalance-only market that had no day-ahead product at all), so those two use a series built by taking the hour-of-day ratio of their measured local prices against a reference node over the overlapping window and applying it to a full year. That is shape-transferred, not measured, and is labelled so in the table above.
    An earlier version of this page reported that Upper Basin prices were not public. That was wrong. They were found by querying CAISO's node atlas rather than guessing node names, and Blue Mesa's own Colorado River Storage Project settlement points turned out to be published. The correction matters: the old Palo Verde proxy ran $7.91/MWh low at midday against the true Desert Southwest nodes, and 26% low against Blue Mesa's actual market, so it understated revenue everywhere.
    Wheeling and basis costs of moving power from each dam to a trading hub are still not modelled, which flatters revenue.
  4. Evaporation rates and measured areas used mismatched denominators. Corrected where possible: the rates that are direct flux measurements are area-independent and valid; Lake Mohave's was an area quotient wrongly applied and has been replaced; Havasu's is flagged as a bracket.
  5. The Havasu claim was overstated. Treating the full ~300 MW of pumping load as available in every daylight hour is not demonstrated: it is seasonal and delivery-driven, and not necessarily behind the same metering point. The model now counts half by default, which takes the site from 539 MW to 316 MW. One reviewer argued the pumping deliberately runs off-peak at night; that appears out of date, since Arizona in 2026 treats midday as the cheap window and is actively shifting load into it.
  6. Capex is probably light for Mead and Powell. No commercial floating solar has been moored in 300+ feet of water with 100-foot annual level swings, and the Lower Basin's quagga mussel infestation would foul floats, lines and anchors. One reviewer put honest capex at $2.00–2.50/W against the $1.23/W baseline. Both are now selectable.
  7. 90% evaporation suppression was too high. Edge exchange, altered albedo and reduced wind mixing pull the basin-wide net below the directly-shaded figure. Now 75%, range 60–90%.
  8. The battery dispatch flatters storage. It has perfect price foresight within each day and models no degradation, cycle limit, minimum state of charge or reserve holdback.

A third round of review, run after the fixes above, raised these:

  1. A derate is not permanent (fatal). Hydrology is cyclical. If the reservoir recovers, the turbines come back and the headroom an array was sized into reverts to the dam. Sizing to a derate is a bet that it persists, and needs a contract covering what happens when the water returns.
  2. Wheeling and basis are not modelled. None of these reservoirs sit at the Palo Verde hub whose prices are used. Moving power from Hoover, Davis or Parker to a liquid trading point costs money and carries basis risk, so the revenue side here is optimistic.
  3. Whole-lake thermal advection (fatal). Suppressing evaporation over part of a reservoir traps heat that would have left as latent heat; it mixes into the bulk water and raises evaporation on the open surface around the array. Suppression is therefore sub-linear in coverage, and the 75% figure is a screening value, not a measurement at this scale.
  4. Crediting firm capacity to the battery only understates the array. Solar carries some capacity value of its own, even in a duck-curve market. Zero is conservative rather than correct.
  5. The floating cooling uplift is not calibrated. It compares modelled cell temperature over water against a ground mount (cell temperature scaled by 0.82 of the ground-mount rise, with a −0.35%/°C power coefficient) and averages around 1.01. It is a modelled delta, not a measured one, and it is small enough not to drive any conclusion.
  6. The interconnection gap is the finding that matters (fatal, both reviewers, all three rounds). The curtailment knees are an artifact of a scalar headroom assumption. Only a generator interconnection study at each specific bus — transformer and switchyard ratings, N-1 contingency, reactive capability, and existing firm reservations — can establish what can actually be exported. That data is not public. This model can show the shape of the trade-off and rule out the largest proposals; it cannot establish that any project is feasible.

A final round reviewed the published pages rather than the model. One reviewer returned do not show. Three findings were correct and are now fixed:

  1. The battery keeps its tax credit and we said it did not (critical). The 2025 law cut the credit for solar and wind but deliberately spared energy storage, which keeps 30% into the 2030s with no construction-start deadline. An earlier version of this page said no credit applied to either. Storage capital is now net of it. The asymmetry is worth noticing: it makes the storage half of a hybrid cheaper than the generating half.
  2. The Upper Basin price transfer rests on a summer window (critical, both reviewers). The hour-of-day ratio for Flaming Gorge and Blue Mesa comes from June and July only, because those markets launched in 2026. Winter price shapes differ materially. Both reviewers named this the weakest step in the whole analysis, and it cannot be fixed until those markets publish a full year. It is now stated wherever those two reservoirs appear.
  3. Ownership is not the same as contractability (critical). The capital page said nobody can own the water and concluded there is nothing to underwrite. The first half is right, the inference was too quick: a payer could contract for a measured service without holding title, which is how system conservation payments already work. The page now separates the property-rights point from the contracting point and says what is actually missing, which is an instrument and a measurement rather than a legal impossibility.

A second pass over the corrected pages found the fixes correct but caught a larger problem underneath them:

  1. The battery was flattering the solar (critical). The headline said storage pulls break-even from $92 to $63/MWh. It does, but at the capacity values used the battery earns about $105M a year against roughly $67M of its own annualised capital, so it is profitable standing alone and was simply offsetting the array's losses. The model now reports the array's economics separately from the battery's, and the page says plainly that at these dams the battery is the investable asset and the solar is not. The effect disappears at the bottom of the capacity-value range.
  2. A stale caveat contradicted the model. The methodology said nothing here prices firm capacity, which stopped being true when the battery capacity credit was added. Corrected: capacity is priced on the battery only, and never on the array.
  1. Wheeling does not apply the way the objection assumed, but interconnection does. A referee said moving power from each dam to a trading hub costs money that was not modelled. Checking it: in these markets the transmission access charge is billed to load, not to generators, and a generator selling at its own node is already paid a location-specific price carrying congestion and losses, which is what the move to per-reservoir nodal pricing accomplished. So there is no separate wheeling charge to add. What a generator does pay, and what was genuinely missing, is 100% of its own interconnection facilities and local network upgrades. That is now modelled from Berkeley Lab's project-level data: $30/kW median for completed projects, with solar averaging nearer $167/kW and recent completions $194/kW. It is a control, because the distribution is heavily right-skewed. It moves the array's break-even at Lake Mead from $92 to between $94 and $104.

An eighth round attacked the newest and boldest claim, that reservoir solar fails on scale as well as on cost, and the correction that had just made the paper's favourite reservoir look better. It found something in the second that seven previous rounds would have been right to look for.

  1. A validation test we had just written was circular, and labelled external (critical). Lake Havasu has no flux measurement, so its evaporation rate was derived by dividing Reclamation's accounting volume by an area. The new test then compared that rate against the same volume over the same area and returned 0.1%, which is arithmetic rather than agreement. Both reviewers caught it independently. It is now labelled circular, which is a category the validation suite already had and which we simply failed to use. The external count drops from 17 to 16, and 16 is the honest number.
  2. The correction it supported was overstated. A volume divided by an area is only a depth if the two describe the same water, and Reclamation does not publish the surface its accounting divides by. The rate we replaced carried that defect in one direction and the replacement carries it in the other. Havasu's evaporation is now stated as an unresolved bracket of 5.2 to 7.4 ft/yr rather than a corrected point value, and we have written to Reclamation's water accounting group to ask what denominator they use. This is the least secure input in the model and it belongs to the reservoir the work otherwise rates highest, which is worth saying plainly.
  3. The scale claim covered seven reservoirs and was phrased as though it covered the basin. Now scoped explicitly. The comparison survives the narrowing by a wide margin, but the wording did not survive it.

A general point this round makes better than any of the previous seven. The correction that looked most like good news was the one that needed most checking, and it got the least, because it arrived with an authoritative source attached. Every other correction here has cut against the technology and been scrutinised accordingly.

A seventh round reviewed the new material specifically, since replacing every surface area and reshaping dam output at six reservoirs had not been looked at by anyone. All four slices returned unsound, and the most serious finding was not about the physics.

  1. The paper had become strata of successive corrections (critical). Two reviewers, independently, said the text described the previous model in places. They were right and it was worse than they could see: the paper carried a hand-typed list of coverage ceilings of which five of seven were stale, an abstract quoting a Navajo bound that had moved, and a limitation still saying that a stage-area curve driven by daily elevations was "the right treatment, which we have not done" when that is precisely what the model now uses. A reader could not have told what the model currently was. The ceilings are now computed at build time, which is the third table on this site to be moved from typed to computed for exactly the same reason.
  2. The clear-sky proxy in the evaporation physics is climate-dependent. The net longwave term uses the 95th percentile of the whole shortwave record to stand in for clear-sky radiation, so it depends on the site's own climate distribution and on how long the record is. It affects the annual total more than the radiative-aerodynamic ratio the paper actually quotes, but it is a real weakness and is now stated.
  3. The 12 m canal default is too narrow for the big conveyances, and NHD proves it. A reviewer pointed out that the surveyed polygons are themselves the evidence that the assumed width understates the major canals. That is right, and it is why the paper reports both figures and calls the canal surface uncertain by a factor of three rather than picking one.

Two criticisms did not survive checking. The wind conversion was called inconsistent: the code multiplies by 3.6 and then divides by 3.6, which looks wrong but round-trips exactly to the standard 10 m to 2 m factor of 0.748. And bank storage was called a calibrated free parameter introduced to move the residual toward the expected answer; it is a quantity Reclamation computes and publishes daily, and it was applied without any tuning.

The largest correction came from a question, not a review round. Mike asked why the water side of the model ran on annual averages when the energy side ran hourly. It did, and closing that gap turned up something bigger than the resolution itself.

  1. Our satellite areas were low at every reservoir, by up to a quarter. Reclamation publishes daily pool elevation and daily storage, and surface area is the derivative of one against the other. Recovering it that way and comparing over exactly the window our composite used: Mohave 4.6% low, Mead 6.9%, Flaming Gorge 13.2%, Navajo 13.5%, Blue Mesa 16.8%, Powell 25.9%. The gap tracks how convoluted each shoreline is, which is the signature of a 30 m water mask losing narrow canyon arms and shadowed banks. Six rounds of review named that risk. None measured it. Areas now come from Reclamation's record, with the satellite kept as a cross-check.
  2. The validation test the paper called its strongest evidence was checking a typed number. It compared our Mead area against 70,500 acres, described as area-capacity tables evaluated at recent elevation, with nothing recomputing it. Reclamation's own daily record puts that figure near 74,800. It has been replaced with a genuine out-of-sample test: fit the hypsometry only to operating-range data, then extrapolate to full pool and compare against published full-pool area, which never enters the fit. Four reservoirs pass within 12%. Mead and Powell are excluded because full pool sits 130 ft and 64 ft above anything in the record.
  3. Three estimators failed before one worked, which is worth recording. A global polynomial through storage against elevation, differentiated, moved 23% at Powell and 33% at Navajo on a change of fit order. Per-day local slopes fixed that and then reported a 157% annual area swing at Lake Mohave, which moves twelve feet. Forcing those slopes to increase monotonically pushed Mohave to 134% of its own full-pool area. All three failed the same way, by differentiating noisy operational data point by point. Fitting the shape a filling valley actually has and differentiating that in closed form is stable to 0.1% at Mead.
  4. What it changed. Cost per acre-foot barely moved, because area multiplies into both the cost and the water and cancels. What moved is the coverage ceilings, since more surface means a given coverage percent buys more panel and fills the line sooner: Mead from 8.0% to 7.25%, Powell 5.75% to 4.25%, Blue Mesa 3.25% to 2.75%. The headline sits further below the 15 to 20% that circulates in policy discussion than it did before, not closer.

A sixth round asked four questions none of the previous five had. The most productive was the simplest: five rounds had attacked what this work says floating solar cannot do, and not one had examined what it says floating solar should do. Both reviewers went straight at it and both were right.

  1. The recommendation was never tested, and has been withdrawn (critical). The paper concluded that the defensible case for reservoir solar is as an energy measure backfilling hydropower capacity that falling reservoir levels are removing. Nothing in the model tests that. It never represents what a plant can still produce as its head declines, and it never represents capacity, ramping, inertia, frequency response or black start, which is what a hydro plant actually sells and what solar cannot supply without storage. Calling solar energy a replacement for hydro capacity conflates two different products. The claim is now stated as a hypothesis, with what would be needed to test it. One reviewer called it a graceful exit, which is fair: it was the sentence that made a negative result feel constructive, and it was doing that job without evidence.
  2. Our evaporation suppression was generous, and correcting it strengthens the finding. Both reviewers said instrumented results from real floating solar cluster nearer 30 to 60% than the 75% we assume, and that 75% is a design assumption rather than a measurement. Our sampled range started at 60%, which sits at the top of what they described, so the interval could not contain the likely answer. Suppression divides into cost per acre-foot, so a lower value makes reservoir solar look worse: widening the range down to 30% raises the median cost about 16% at every reservoir. We have widened it. An uncertainty range that excludes the plausible answer is not an uncertainty range, and it is worth being explicit that this correction cuts against the technology rather than for it.
  3. A second validation test could not fail in the direction that mattered. Round five fixed four of these. A fifth, comparing our summed Lower Basin surface against Reclamation's published figures, was still symmetric. Our surfaces are more recent than the reference and the lakes have fallen, so they must read low; reading high would mean the measurement was wrong. Now enforced.

What this round did not find is also worth saying: no error of arithmetic, no wrong number in the water analysis, and no challenge to the coverage bounds that survived checking. Six rounds in, the things still being found are about what the work claims rather than what it computes.

A fifth round changed tactics. Four rounds of the same four questions had flattened out, so this one attacked from four angles none of them used: a hydroclimatologist rather than a code reviewer, an advocate trying to show the negative conclusion was assumed rather than found, a reproducibility audit, and a pure units-and-dimensions check. The units check came back clean. The other three did not, and the advocate's angle produced the most useful criticism of the whole exercise.

  1. The conclusion is narrower than we were stating it (critical). Every array here is sized against whatever the dam's existing line is not already using. Asked to show where the negative result had been assumed rather than discovered, a reviewer pointed at exactly that: a developer willing to pay for network upgrades, a different interconnection point, or a dedicated line is not represented anywhere in the model. Nothing here demonstrates that floating solar fails under a paid-for interconnection. It demonstrates that it does not fit inside the interconnection that already exists. That is a narrower claim and a cheaper one, and the paper now says so. The coverage bounds are bounds on the free option.
  2. A validation test could not fail in the direction that matters (critical). Four tests compare a reservoir's full-pool outline against its measured water surface. Full pool is the most water the basin can hold, so measured water cannot exceed it. The test allowed 60% either way, so a measured surface 60% larger than full pool would have passed, and that is not a near miss: it is the signature of a water mask picking up water outside the reservoir, which is precisely the failure the 300 m buffer could cause. The test could not catch the thing it existed to catch. Now enforced one-sided.
  3. A file every published price depends on had no way to regenerate it. A reproducibility audit found that the full-year 2024 price archive was read by two scripts and written by none, so a third party could not rebuild it. Everything needed already existed in the code and had never been wired to a full-year pull. There is now a documented command that regenerates it, kept out of the normal run because a re-fetch would move every published price without anyone deciding it should.
  4. Several value streams are counted at zero, and the design space is narrow. The array earns energy revenue and, with storage, capacity. It gets nothing for resilience, local reliability, deferred distribution investment, or the capacity value of the solar itself. One module density and one mooring concept are modelled. None of this closes a tenfold gap, but the tally is deliberately narrow and a reader should be told rather than left to assume it is complete.

One finding did not survive checking: that cost per acre-foot divides gross cost by water saved and ignores power revenue, which would guarantee the answer. It nets revenue explicitly, one line above the division. Being pushed from the opposite direction was still the most valuable round of the five, because every earlier round asked whether the negative result was correct and none asked whether it had been made inevitable.

A fourth pass returned two critical findings. One was real, one was not, and the difference is worth showing because it is the first round where checking a finding mattered more than acting on it.

  1. A published dollar figure had no source (real). We had written that measuring conservation costs about $120 per acre-foot. A reviewer said that overstates it by orders of magnitude, since satellite evapotranspiration for the basin is already published at no cost to the user. Looking for our own basis, there was none: the number was typed, not derived, exactly like the array-size table two rounds ago. Removed rather than replaced, and the page now says why. The underlying point stands and is stronger without it, because measurement is cheaper than we claimed.
  2. A satellite buffer said to be 300 degrees rather than 300 metres (not real). The reviewer read the water-area code as buffering each reservoir by 300 degrees, which would cover the planet, and marked it as changing a published number. Earth Engine measures buffer distance in metres when no projection is given, but the decisive evidence is our own output: a planetary buffer would return enormous areas, and instead every reservoir measures smaller than its published area, by 1.5% at Powell to 37% at Navajo, with Lake Mead agreeing with Reclamation's bathymetric area-capacity relation to 1.3%. A finding that would have been visible in the results if true, and is not.

Three of the four review slices no longer return critical findings that survive checking. The remaining criticism is about framing rather than arithmetic: that a cost ranking is being asked to carry an investability conclusion. That is a fair caution and the capital page now states its own limits, but it is a difference of emphasis rather than an error.

A third pass, again told what the first two had fixed and asked explicitly to say so if it found nothing rather than manufacture a finding, still found four. Two of them were the most substantive of any round:

  1. A table on this page was typed, not computed, and its numbers were wrong (critical). The array-size table claimed three reservoirs drop to no viable array once the shared line is constrained. A reviewer derived from the model's own headroom equation that this is impossible. Where a reservoir has no load on its shoreline, headroom is proportional to the line and output is proportional to the array, so only their ratio matters and the largest acceptable array must scale exactly linearly with the line. Zero is not a reachable answer. Recomputing from the model confirmed it: Mohave is 24 MW at a quarter line, not zero; Navajo is 7 MW, not zero. The table is now computed from the model at build time, which is why the error survived three rounds of review in the first place. The corrected version makes the argument better, because Havasu is now visibly the only reservoir that breaks the proportionality, and it breaks it for a reason.
  2. A causal explanation we had just published was invented (critical). Explaining why the site-specific water cost exceeds the generic one, we wrote that the export limit costs more than the power revenue returns. A reviewer pointed out that revenue can only reduce a cost, so the explanation cannot be the reason. The real reason is duller: one is a median over sampled capital costs reaching the harsh mooring case, the other holds capital at one baseline. The sentence was written in the course of fixing an earlier finding, which is a reminder that fixes need reviewing as much as originals.
  3. The price ratio divided a one-third sample by a full population. The Upper Basin scrape samples every third day; the reference node covered every day in the window. Any weather or outage falling unevenly across the sampled days appeared in the ratio as a structural difference between two markets. The reference is now restricted to exactly the days sampled, which moves Blue Mesa's midday ratio from 2.25 to 2.11 and its capture price from $19.85 to $18.87.
  4. The weather year and the price year are different years. Solar and dam output come from 2015 records, prices from 2024. The daily shape of each survives, but the pairing of a given cloudy day to a given price day is arbitrary. We bounded what that is worth: destroying day-to-day variation entirely moves Lake Mead's capture price about 10%, and a correctly paired year would likely sit on the lower side, because low-output days are high-price days. Now stated in the paper with that figure.

A second end-to-end pass, run after those fixes and told what had changed so it would not re-litigate them, found four more. One changed a published number:

  1. The Upper Basin price series was three hours out of alignment (critical). Two markets publish timestamps differently. The California ISO stamps the START of each hour in GMT. The Southwest Power Pool stamps the END of each hour in Central time. We were reading the second as though it were the first, which slid the entire Blue Mesa price shape three hours against the solar shape it multiplies: two hours of timezone and one of end-versus-start. Solar output was being valued at the wrong hours' prices. Blue Mesa's capture price moves from $14.95 to $19.85 per MWh and its value factor from 0.40 to 0.58. No other reservoir is affected, because only Blue Mesa's prices came through that market. Nothing about the coverage conclusion changes, but the number was wrong and is now right.
  2. A failed satellite measurement was being recorded as zero. If Earth Engine returned no value for a reservoir's water area, the code wrote 0 km² and carried on. A reservoir with no surface is not an implausible-looking output, it is a plausible one, and it would have flowed into every area, coverage and evaporation figure downstream. It now refuses and stops.
  3. Sensitivity was reported for a parameter that could not act. Six of the seven reservoirs have no load on their shoreline, so the share of that load available to the array multiplies zero and can move nothing. A small coefficient was still being computed and printed for it, which is sampling noise presented as a dependence. This is the conditional version of the unused-parameter defect found in the previous round, which is why it survived that round.
  4. Two different floating-solar costs sat next to each other unlabelled. One is the cover alone before power revenue, the other is Lake Mead net of power sales with the array sized against Hoover's real line. Both are correct and they are not comparable. Now labelled, with the gap between them explained.

One earlier finding was itself wrong and worth recording. A reviewer said the model's own metadata still listed a parameter we had deleted. It did. The parameter was gone from the code but the published file had not been regenerated, so the reviewer was reading a stale artefact and was right about what it said. Fixing source without re-running output has now caused three separate errors in this project.

A final end-to-end pass reviewed the whole chain from satellite imagery to published sentence, in four slices across both vendors. Every slice returned unsound. Four findings were real:

  1. A sampled parameter was never used (critical). The Monte Carlo drew a capacity value across a range and passed it to the sensitivity analysis without ever using it in any cost or revenue term, so it was reported as a driver of an output it could not touch. That simulation sizes solar-only arrays and credits capacity to storage only, so the parameter should never have been there. Removed.
  2. The model's own metadata still described the old pricing (critical). It said prices came from a single hub with the Upper Basin as a proxy, and that wheeling was unmodelled. Both had stopped being true. Anyone reading the machine-readable output would have been told the wrong method. Corrected.
  3. The floating-cover cost prices the wrong product. The anchor is a utility's quote for a potable-water cover, which is sealed, tensioned and food-grade. An evaporation cover on a raw reservoir is a different and cheaper thing. That row is now labelled a ceiling and flagged as unresolved. We applied this scrutiny to the shade-ball figure and should have applied it here at the same time.
  4. The pages disagreed on the coverage ceilings. The paper gave every reservoir's figure while this page rounded several to "at or near 1%". The full table is now on both.

One criticism did not survive checking: a reviewer argued the price shape-transfer is invalid because a multiplicative ratio breaks down for a variable that crosses zero. That is true in general and worth taking seriously, but the hourly means used here are positive at every hour of the day, and the resulting ratios run 0.54 to 1.18 and 0.59 to 1.79 with no sign changes.

The strongest counterargument they raised, which we think is fair: if the federal government funds these arrays as drought infrastructure rather than as a merchant energy play, then price nodes, transmission access and cost of capital all stop being the binding questions, and the institutional gates can be legislated away. That is a policy scenario this model does not represent.

Code

Everything above is reproducible from public data. No private or licensed inputs.

Sources

Steps Ventures · independent analysis, not affiliated with any agency, district, utility or investor · mike@stepsventures.com