SolarSoiled · Tools
The curve shows how recoverable losses build over a dry season. When it crosses the red line, the cost of waiting exceeds the cost of cleaning. For older systems, persistent soiling that rain cannot remove shifts the entire curve upward.
Your system
Soiling conditions
Cleaning method
~$90 · 70% recovery · water-fed pole, no roof access
System age
Year 2: persistent residue from one season of carryover is now detectable. Both seasonal and persistent components are active.
Pollen films, cemented dust, and biological growth that rain does not wash away. Detected by comparing this month's output to the same month last year.
Where are you now?
Breakeven curve
Breakeven
—
dry days until worth cleaning
Persistent floor
—
carryover loss, day one
Cleaning cost
—
— recovery
Seasonal soiling builds up during the dry season and resets with winter rain. More dust each day means the loss accelerates. This produces the upward-curving shape.
Persistent soiling is the portion that rain does not wash away. Pollen films, cemented deposits, and biological growth carry over year to year. Because it is always present, it shifts the entire curve upward so your breakeven arrives sooner and you may already be past it on day one. For older systems this carryover multiplies: a system in Year 3 has had two full seasons to accumulate what rain could not remove.
The flagging rule: in Year 1, flag when seasonal loss alone exceeds cleaning cost.
Seasonal loss (the curve shape)
On day N of a dry spell, the panel is N × soiling_rate dirtier than on day 0, so it loses a little more energy each successive day. Summing those daily losses from day 1 to day N gives a triangular sum:
The N(N+1)/2 term is what makes the curve bend. At day 60 it equals 1,830. At day 120 it equals 7,260 — four times larger rather than twice. Waiting twice as long does not double the loss; it quadruples it.
Persistent offset (the flat starting line)
This value does not grow with dry days because the production is already being lost year-round from carryover residue. The persistent model derives it by comparing this month's top-quartile 4-hour production block to the same month last year, then projecting that percentage deficit across the full annual output. For older systems the offset compounds with each additional year of accumulation:
For a 3% persistent loss on a 6.9 kW system in Year 3 (two years of accumulation): 0.03 × $4,528 × 2 = $272, which already exceeds a typical cleaning cost.
Combined breakeven
In Year 2 and beyond, the total recoverable value is the sum of both components. Cleaning pays once that total, multiplied by how much a cleaning actually recovers, exceeds the cleaning cost:
Solving for the breakeven day directly:
If the term inside the square root is already negative, R_persist alone covers the cleaning cost and the breakeven is day zero. That is the persistent soiling case this model is most concerned about: arrays that should be cleaned at the start of every season regardless of how little seasonal dust has accumulated.
Two-consecutive-months rule
The model evaluates systems at the end of May, June, and July. For Year 2 and beyond, the combined value must exceed the cleaning cost in two consecutive evaluation windows before a flag is issued. One weak month might be weather noise; two in a row signals a real pattern. The faint vertical lines on the chart mark those three windows.
Seasonal curve uses Kimber (2007) linear accumulation. Persistent offset uses an Enphase-based flagging model: year-over-year loss vs same month prior year, adjusted for 0.5%/yr panel degradation, valued at $0.375/kWh blended annual rate. Persistent accumulation compounds linearly with system age. Heavy soiling rate: average 0.05%/day; heavy soiler (top quartile) 0.10%/day per Mejía and Kleissl (2013). Recovery percentages from UCSD 2013 field cleaning data. Assumes 5.5 peak sun hours per day. Default system size 6.9 kW reflects median permitted system in Santa Cruz County 2014–2025.