Skip to content

add Rock weathering as Carbon Dioxide Removal Technology#2229

Open
BertoGBG wants to merge 11 commits into
PyPSA:masterfrom
BertoGBG:rock_weathering_PR
Open

add Rock weathering as Carbon Dioxide Removal Technology#2229
BertoGBG wants to merge 11 commits into
PyPSA:masterfrom
BertoGBG:rock_weathering_PR

Conversation

@BertoGBG

Copy link
Copy Markdown

Closes # (if applicable).

Changes proposed in this Pull Request

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

Rock weathering is a land-based CDR technology and its technical potential is related to the land availability. For this CDR and future land-based CDR the land available is calculated from the Corine Land Cover dataset using the new script build_available_land.py which is based on scripts/determine_availability_matrix.py.
In the case of Rock weathering it is introduced a filter for mean annual air temperature as weathering rates drop drastically at low temperatures. This is done in the scripts/determine_rock_weathering_availability_matrix.py which is essentially the same of the base determine_availability_matrix.py with added temperature threeshold.

#NOTE: rock_weathering's land-eligibility settings (corine, natura, cutout, excluder_resolution) live under renewable: rather than a CDR-specific namespace. This is because build_available_land.py/determine_rock_weathering_availability_matrix.py reuse the same atlite ExclusionContainer machinery and config shape that determine_availability_matrix.py already uses for onwind/offwind/solar, read generically via config_provider("renewable", w.technology, ...). It's a pragmatic reuse of existing land-eligibility infrastructure, not a claim that rock weathering is a power-generation technology.
Open to moving it to a separate namespace if preferred. It is especially worth deciding now, before biochar/afforestation following the same pattern will be added.

The actual implementation of the CDR technology is part of scripts/prepare_sector_network.py

The default.config.yaml contains the main parameters for calculating the CDR potential, and sets rock_weathering default to false.

NOTE on Technology-data version.

Data dependency note (technology-data)

add_rock_weathering() requires the "Enhanced Weathering" cost entries, which are not part of technology-data v0.14.0 — the version currently pinned in data/versions.csv (costs/"latest supported"). They're already included in
technology-data v0.15.0, already tagged/released.

However, I found v0.15.0 also includes a deliberate breaking rename (technology-data#264): "electricity grid connection" → "distribution grid reinforcement". That needs a corresponding one-line update in add_electricity_grid_connection() (prepare_sector_network.py) — small, but out of scope for the rock-weathering PR.

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:

  • 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 10 commits June 23, 2026 09:49
Ported from the a_CDRs development branch. Adds enhanced rock weathering
(CDR via accelerated mineral carbonation) as an optional CDR technology:
a single Link per node draws electricity and atmospheric CO2 into a
fixed-capacity Store representing the cumulative mineral-carbonation
potential, dimensioned from CORINE-eligible land area filtered by an
annual-mean-temperature threshold (atlite cutout), rather than a
bioclimate-zone raster.

Shares the build_available_land aggregation step with the
biochar/afforestation PRs (kept byte-identical to avoid conflicts
whichever merges first); the availability-matrix step itself is rock
weathering's own script since it needs the temperature exclusion the
shared determine_availability_matrix.py doesn't have.

Off by default (sector.rock_weathering: false).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
# Conflicts:
#	doc/release_notes.md
@BertoGBG

Copy link
Copy Markdown
Author

@martavp @fneum

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant