Skip to content

Navigation Menu

Sign in
Sign up

add Perennialisation as Carbon Dioxide Removal Technology and Biogas producer - #2274

Open
BertoGBG wants to merge 11 commits into
PyPSA:master from
BertoGBG:perennialisation_PR
Open

add Perennialisation as Carbon Dioxide Removal Technology and Biogas producer #2274
BertoGBG wants to merge 11 commits into
PyPSA:master from
BertoGBG:perennialisation_PR

Conversation

@BertoGBG

@BertoGBG BertoGBG commented Aug 20, 2026

Copy link
Copy Markdown

Closes # (if applicable).

This PR introduces Perennialisation as Carbon Dioxide Removal (CDR) technology, based on #2142

Perennialisation, is defined as the process of replacing biofuels crops (1st generation unsustainable crops in pypsa-eur) with perennial crops (as clover or grass) which differ from lignocellulosic short rotation coppice (as willow or poplar). The overall substitution process is assumed to reduce the CO2 emission by direct removal and sequestraiton in teh carbon soil (as perennials are not harvested every season) and significant reduction in fertilizers and nitrogen emissions compared to seasonal crops. The perennials crops are refined to two products biogas and proteins for animals (which are assumed to be sold reducing the operational cost of the plant).

The substitution is based on equal land use converting the biofuels crops from biomass Enspreso and to perennials green crops using yeilds form eurostat with NUTS2 resolution for both. The input data for the yields of both 1st generation biofuels crops and perennials crops are pre-processed and compiled and available at the zenodo record https://zenodo.org/records/20799337 (includes afforestation CDR) which is downloaded by the rule retrieve_co2_removal_data within retrieve.smk.

Teh calcualtion of the CO2 removal potential based on substitution is done by the rules, located in build_sector.smk :
build_perennials_yields_eurostat_average (and matching script)
build_perennials_yields (and matching script)

The whole process of CDR and biogas production is introduced within prepare_sector_network.py .

The default.config.yaml contains the main parameters for calculating the CDR potential (including the key assumption on the sequestration_co2 per hectare per year ), and sets perennialisation default to false.

NOTE on Technology-data version.

Data dependency note (technology-data)

add_perennials() requires the "perennials refining" cost entries, which are not part of technology-data v0.14.0 — the version currently pinned in data/versions.csv (costs/"latest supported"). There is an ongoing PR for merging those cost data at PyPSA/technology-data#255

Checklist

Required:

  • [OK ] Changes are tested locally and behave as expected.
  • [ OK] Code and workflow changes are documented.
  • [ OK] A release note entry is added to doc/release_notes.md.
  • [ OK] The description is human-written and any AI-generated content is marked.

If applicable:

  • [OK] Changes in configuration options are reflected in scripts/lib/validation.
  • [OK ] For new data sources or versions, these instructions have been followed.
  • [OK] New rules are documented in the appropriate doc/*.md files.

BertoGBG and others added 9 commits June 23, 2026 09:28
Ported from the a_CDRs development branch. Adds perennialisation
(conversion of 1st-generation biofuel cropland to perennial grasses) as
an optional CDR technology: land area displaced from 1G biofuel
production is backed out from existing biomass potentials and NUTS2 crop
yields, converted to a CO2 sequestration potential, and dispatched via an
April-October harvest profile. Retrieves NUTS2 Eurostat crop-yield data
from the same Zenodo-archived CO2-removal data package afforestation
will also depend on (rules/retrieve.smk: retrieve_co2_removal_data, kept
byte-identical to avoid conflicts whichever PR merges first).
Off by default (sector.perennials: false).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mirrors the pattern set by rock_weathering_PR (scripts/lib/validation/config/rock_weathering.py):
- New scripts/lib/validation/config/perennials.py with PerennialsConfig
 (sequestration_co2), registered on the top-level ConfigSchema in
 _schema.py.
- sector.py: added sector.perennials: bool (the CDR technology toggle).
- data.py: added data.co2_removal_data as a _DataSourceConfig (feeds
 the retrieve_co2_removal_data rule's Eurostat crop yield inputs).
- Regenerated config/config.default.yaml and config/schema.default.json
 from the new models; both config-schema sync tests now pass (they
 were failing before, same root cause as biochar_PR's still-open gap:
 perennials config wasn't covered by any pydantic model).
Also added a release_notes.md entry matching rock_weathering_PR's
"Upcoming Release" bullet style, referencing tracking issue PyPSA#2143.
This commit was preceded by a merge of upstream/master (57 commits
behind at the time) to pull in the validation framework this depends
on. That merge had exactly one conflict, in scripts/_helpers.py: both
branches had independently appended unrelated functions to the end of
the file (resolve_biomass_classes() here vs. _simplify_polys()/
load_data_versions() upstream) - resolved by keeping both.
Full test suite (29 tests) and ruff both pass. Verified via Snakemake
dry-run with sector.perennials temporarily set to true that the full
77-job DAG resolves end-to-end.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mh2EaBSg63Gsi4epA1Rmky 

Copy link
Copy Markdown
Author

BertoGBG and others added 2 commits August 25, 2026 10:04
...gbr"
The technology-data source (BertoGBG/technology-data pypsa-eur_AA branch)
names this row "perennials gbr" (Grass BioRefinery), not "perennials
refining". add_perennials() was looking up the wrong name, which would
crash with KeyError: 'perennials refining' as soon as a run actually
exercised this path. Already fixed on the `perennialisation` branch;
ported here and to a_CDRs/heat_industry.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

1 participant

AltStyle によって変換されたページ (->オリジナル) /