BREOS 0.5.0
Purpose
0.5.0 brings optional bifacial rear-gain modelling. You can also choose the PV physics: the IAM model, cell-temperature model and mount-appropriate presets. Every choice ships with seven-site benchmark rows, so you can see what it costs before you switch.
Highlights
Bifacial rear gain. Set bifacial_model="infinite_sheds" with a sourced module bifaciality plus explicit row height and pitch, and rear irradiance feeds both DC power and the cell-temperature model — so rear gain is never credited with power but no heat. It gets its own bifacial_rear_gain stage in the loss waterfall and its own provenance block. Left at the default "none", nothing changes.
Selectable IAM optics. iam_model now takes ashrae (the historical default), physical, or martin_ruiz. With diffuse_iam="marion" enabled, the same model is integrated for sky and ground, so beam and diffuse optics cannot silently disagree.
Cell-temperature fidelity. Named SAPM construction/mounting presets, strict opt-in noct-sam, and PVsyst presets that model a realistic module efficiency instead of pvlib's legacy 0.1 placeholder.
Inverter datasheet limits. InverterConfig accepts the DC voltage/power ceilings, MPPT window, startup voltage, per-MPPT current limits, and strings-per-MPPT. They validate against each other but are not read by any model yet — no result changes.
Documentation. Read the Docs is reorganized around task-oriented guides, model assumptions, and API reference, with internal design notes moved to the repository.
Breaking-ish changes
Three fixes move numbers. None affect a default configuration:
- Multi-array tracking honours the top-level
gcr. Per-array tracking previously fell back to a hardcoded0.35, so a non-default top-levelgcrnever reached it. Setgcrexplicitly on eachpv_arraysentry to keep the old geometry. - An out-of-range
gcris now rejected atApp()construction. pvlib silently derives a different backtracking rotation instead of complaining, so a mistyped3.5used to return roughly half the annual energy with no error. pvsyst-*temperature presets model a realistic module efficiency. Expect cell temperatures roughly 2.5–3 °C lower and annual yield 1.0–1.3% higher for those presets.
Also: provenance.ledger_schema_version is now 1.1 (additive — new waterfall stage, new provenance.pv_model block, iam stage relabelled to name the front side). Consumers that pin the value need to accept 1.1. And InverterConfig now validates its long-standing fields on construction, so a negative rating or an efficiency above 1 raises ValueError instead of quietly producing nonsense.
Validation
Seven sites on four continents, with the self-baseline drift test holding every model variant to 0.1%. The bifacial, IAM, temperature, and equal-nameplate comparison rows are all in validation/REPORT.md, alongside their geometry, albedo, inverter loading, and the front-shading limitation that keeps dense-row rear-gain numbers from being a bankable layout estimate.
What's Changed
- Sync 0.4.2 release back to develop by @Str4vinci in #91
- Add inert bifacial module metadata by @Str4vinci in #92
- Add opt-in bifacial rear-gain modeling by @Str4vinci in #93
- Add bifacial diagnostics and benchmarks by @Str4vinci in #95
- Refactor PV model core and validate reachable configuration by @Str4vinci in #96
- Add selectable PV IAM models by @Str4vinci in #97
- Add PV temperature model fidelity by @Str4vinci in #98
- Add recommended PV guidance and evidence by @Str4vinci in #99
- chore: move core coverage off the per-PR test matrix by @Str4vinci in #106
- docs: correct fast extra description by @Str4vinci in #101
- docs: reorganize public onboarding documentation by @Str4vinci in #102
- refactor: extract battery dispatch seams by @Str4vinci in #103
- Extend inverter datasheet domain model by @Str4vinci in #100
- chore: broaden package metadata, credit pvlib, and route questions to Discussions by @Str4vinci in #105
- docs: describe coverage as a separate report, not a per-PR check by @Str4vinci in #107
- Prepare 0.5.0 release by @Str4vinci in #108
Full Changelog: v0.4.2...v0.5.0