Skip to content

Add mixed-upgrade HP adoption trajectory to rate design pipeline #375

@sherryzuo

Description

@sherryzuo

What

Wire NREL's MixedUpgradeScenario (buildstock-fetch v1.6.5) into the rate design pipeline so each CAIRO run can represent a specific year in a multi-year HP adoption trajectory rather than always using a single upgrade (all-baseline or all-HP).

Why

Today every run is either 100% baseline (upgrade=0) or 100% HP (upgrade=2). To model how rates perform as heat pump adoption grows over time — e.g. NYISO's NYCA electrification forecast from the Gold Book 2025 — we need runs where a fraction of buildings have adopted each upgrade in each calendar year.

How

  1. Adoption config YAML (config/adoption/<name>.yaml): specifies per-upgrade adoption fractions for each year index and a year_labels list mapping indices to calendar years.
  2. utils/pre/materialize_mixed_upgrade.py: assigns buildings to upgrades per year using MixedUpgradeScenario, writes year=<N>/metadata-sb.parquet (combined rows from each upgrade) and year=<N>/loads/ (symlinks to correct load parquets). No changes to run_scenario.py.
  3. utils/pre/generate_adoption_scenario_yamls.py: generates scenarios_<utility>_adoption.yaml by copying selected runs from a base scenario YAML and rewriting path_resstock_metadata / path_resstock_loads per year.
  4. Justfile recipes: materialize-adoption, generate-adoption-scenarios, run-adoption-scenario, run-adoption-all.
  5. Tests in tests/pre/test_materialize_mixed_upgrade.py: building assignment fractions, metadata combination, symlink targets, scenario CSV, and validation error paths.

Prerequisites (separate tasks): download and process upgrades 01, 04, 05 through the data/resstock/ pipeline. Until available, the trajectory works with upgrade 02 only.

Deliverables

  • Implemented materialize_mixed_upgrade.py and generate_adoption_scenario_yamls.py with passing tests
  • NYCA adoption config with fractions derived from NYISO Gold Book 2025
  • Justfile recipes wired end-to-end
  • just check and just test pass

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions