Skip to content

ERW improvements & documentation - #2411

Open
tabeado wants to merge 13 commits into
remindmodel:developfrom
tabeado:ERW
Open

ERW improvements & documentation#2411
tabeado wants to merge 13 commits into
remindmodel:developfrom
tabeado:ERW

Conversation

@tabeado

@tabeado tabeado commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Purpose of this PR

This PR improves our modeling of Enhanced Rock Weathering:

  • adjustment of capital cost assumption: So far, the cost for enhanced weathering were given via s33_costs_fix in the 33_CarbonRemoval module. Therefore, the inco0 in generisdata_tech were negligible. We move the cost calculation from the CDR module such that ERW costs are now a) implemented as any other technology through the core and b) there now are real CAPEX assumptions, providing a handle on upscaling via the adjustment cost (may be further addressed in the future). The specific implications:
    - Adjusted inco0 and omf in generisdata_tech to fit the assumption of 5 USD/t rock in Strefler et al.
    - removed s33_costs_fix
    - renamed vm_omcosts_cdr to vm_EW_transport_costs for a more descriptive name (+ related adjustments in remind2, see PR)
  • documentation of units, assumptions, and conversions in generisdata_tech and core/datainput
  • cm_33_EW_rockRemPot now allows to alter the maximum CO2 removal per ton of rock. In main.gms, explanations for variation of this assumption due to a) variation of the theoretical potential due to chemical differences (i.e. 0.3 t CO2 / t basalt is only an average) and b) loss pathways, because dissolution of rock does not necessarily translate into CDR. Sources are given in 33_carbonRemoval/portfolio/datainput.
  • renaming of s33_CO2_rem_pot into s33_rockRemPot to be more descriptive and match the name of the new switch. This requires a change of reportLCOE in remind2, see PR
  • delete switch cm_gs_ew. Introduces instead s33_rockGrainSize --> can still easily change the rock grain size assumption in a central place if needed
  • improve wording around transportation (=from mine to field) and distribution(= spreading) cost assumptions

Type of change

Indicate the items relevant for your PR by replacing ◻️ with ☑️.
Do not delete any lines. This makes it easier to understand which areas are affected by your changes and which are not.

Parts concerned

  • ☑️ GAMS Code
  • ◻️ R-scripts
  • ☑️ Documentation (GAMS incode documentation, comments, tutorials)
  • ◻️ Input data / CES parameters
  • ◻️ Tests, CI/CD (continuous integration/deployment)
  • ◻️ Configuration (switches in main.gms, default.cfg, and scenario_config*.csv files)
  • ◻️ Other (please give a description)

Impact

  • ☑️ Bug fix
  • ◻️ Refactoring
  • ☑️ New feature
  • ☑️ Change of parameter values or input data (including CES parameters)
  • ☑️ Minor change (default scenarios show only small differences)
  • ◻️ Fundamental change of results of default scenarios

Checklist

Do not delete any line. Leave unfinished elements unchecked so others know how far along you are.
In the end all checkboxes must be ticked before you can merge
.

  • I executed the automated model tests (make test) after my final commit and all tests pass (FAIL 0)
  • I adjusted the reporting in remind2 if and where it was needed
  • I adjusted the madrat packages (mrremind and other packages involved) for input data generation if and where it was needed
  • My code follows the coding etiquette
  • I explained my changes within the PR, particularly in hard-to-understand areas
  • I checked that the in-code documentation is up-to-date
  • I adjusted forbiddenColumnNames in readCheckScenarioConfig.R in case the PR leads to deprecated switches
  • I updated the CHANGELOG.md correctly (added, changed, fixed, removed, input data/calibration)

Further information (optional)

In EC500 runs, ERW decreases due to the increase in cost.
In PB750 runs, it is significantly reduced, except for IND and OAS. Main drivers thereof are the constant CO2 price post global net zero emissions, in combination with the net negative emissions tax.
More information in this issue

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates REMIND’s Enhanced Rock Weathering (ERW) representation by correcting cost parameterization to match stated literature assumptions, improving unit/assumption documentation, and introducing a configurable per-ton rock CO₂ removal potential while removing the deprecated annual rock-spreading cap.

Changes:

  • Remove the cm_LimRock annual rock-spreading limit (including equation/parameter scaffolding and standalone templates).
  • Rename s33_co2_rem_pot to s33_rockRemPot and introduce cm_33_EW_rockRemPot to vary ERW removal potential per ton of rock.
  • Update ERW cost assumptions/documentation and clarify unit conversions in input handling.

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
standalone/trade/trade.gms Removes deprecated cm_LimRock switch from standalone trade template.
standalone/template.gms Removes deprecated cm_LimRock switch from standalone template.
standalone/MOFEX/MOFEX.gms Removes deprecated cm_LimRock switch from standalone MOFEX template.
modules/33_carbonRemoval/portfolio/realization.gms Updates ERW module header comments to drop cm_LimRock references.
modules/33_carbonRemoval/portfolio/equations.gms Switches ERW emissions equation to s33_rockRemPot and removes cm_LimRock constraint equation.
modules/33_carbonRemoval/portfolio/declarations.gms Renames/removes ERW scalar/parameter declarations tied to old removal potential / rock limit.
modules/33_carbonRemoval/portfolio/datainput.gms Defines s33_rockRemPot from new cm_33_EW_rockRemPot and removes regional allocation for global rock cap.
main.gms Adds cm_33_EW_rockRemPot as a user-facing switch with explanatory documentation.
core/input/generisdata_tech.prn Adjusts ERW (weathering) cost parameters and documents the parameterization.
core/datainput.gms Expands unit-conversion documentation to explicitly include weathering units.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread core/input/generisdata_tech.prn Outdated
Comment thread core/input/generisdata_tech.prn Outdated
Comment thread core/datainput.gms Outdated
Comment thread main.gms Outdated
tabeado and others added 3 commits July 22, 2026 16:47

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 12 out of 12 changed files in this pull request and generated 9 comments.

Comments suppressed due to low confidence (2)

core/input/generisdata_tech.prn:4

  • Typo in the inco0 definition line (“indutry”). Since this line was updated, it’s a good moment to correct it to avoid propagating the typo into generated docs.
inco0       Initial investment costs given in $[2015] / kW[output] capacity; for dac/prc cc: $[2015] / (tC[captured]/a); for other indutry prc: $[2015]/(t[output]/a); for weathering:  $[2015]/(t rock/a)

main.gms:1091

  • cm_33_EW_rockRemPot is introduced as a new scenario parameter but the description string omits its unit, unlike surrounding switches. Adding the unit makes scenario configuration less error-prone.
  cm_33_EW_rockRemPot             "Maximum CO2 removal potential per ton of rock."

Comment thread modules/33_carbonRemoval/portfolio/equations.gms Outdated
Comment thread modules/33_carbonRemoval/portfolio/declarations.gms Outdated
Comment thread core/input/generisdata_tech.prn Outdated
Comment thread standalone/template.gms Outdated
Comment thread standalone/template.gms Outdated
Comment thread standalone/trade/trade.gms Outdated
Comment thread standalone/trade/trade.gms Outdated
Comment thread standalone/MOFEX/MOFEX.gms Outdated
Comment thread standalone/MOFEX/MOFEX.gms Outdated
Comment thread modules/33_carbonRemoval/portfolio/datainput.gms Outdated
Comment thread core/input/generisdata_tech.prn Outdated
Comment thread core/input/generisdata_tech.prn
Comment thread modules/33_carbonRemoval/portfolio/declarations.gms
Comment thread modules/33_carbonRemoval/portfolio/realization.gms Outdated
Comment thread standalone/MOFEX/MOFEX.gms
Comment thread standalone/trade/trade.gms
Comment thread standalone/template.gms
Comment thread main.gms Outdated
Comment thread core/input/generisdata_tech.prn Outdated
Comment thread modules/33_carbonRemoval/portfolio/declarations.gms Outdated
Comment thread modules/33_carbonRemoval/portfolio/declarations.gms Outdated
Comment thread modules/33_carbonRemoval/portfolio/declarations.gms Outdated
Comment thread modules/33_carbonRemoval/portfolio/declarations.gms Outdated

@robertsalzwedel robertsalzwedel left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great. There is minor inconsistencies which I would resolve.

The slightly more important thing I Would fix is that the transport / spreading split isnt clear to me at the moment. This is mostly a matter of inconsistent wording (sometimes it is spreading, sometimes it is transport). Using the same terminology throughout, and noting what is actually contained would improve this significantly.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated no new comments.

Suppressed comments (3)

core/input/generisdata_tech.prn:4

  • Typo and formatting in the inco0 definition: the text says "indutry" and has a double space before the weathering unit, which makes the header harder to read/search.
inco0       Initial investment costs given in $[2015] / kW[output] capacity; for dac/prc cc: $[2015] / (tC[captured]/a); for other industry prc: $[2015]/(t[output]/a); for weathering:  $[2015]/(t rock/a)

modules/33_carbonRemoval/portfolio/declarations.gms:15

  • s33_step documentation still refers to the old variable/unit ("v33_weathering_onfield" and "Gt stone"). This is now inconsistent with the EW variables and the move from "stone" to "rock" terminology.
s33_step                        "size of bins in v33_weathering_onfield [Gt stone]" / 2.5 /

modules/33_carbonRemoval/portfolio/datainput.gms:47

  • The documentation for the seconds-per-year conversion uses "3.155^7", but the actual calculation uses 3.155*10**7. The current comment is misleading and looks like an exponentiation.
*'      * 3.155^7 s/a * specific surface area(depending on grain size s33_rockGrainSize)

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.

3 participants