Skip to content

ERW improvements & documentation - #2411

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

ERW improvements & documentation#2411
tabeado wants to merge 9 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

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."

;

***---------------------------------------------------------------------------
*' O&M costs of EW, consisting of fix costs for mining, grinding and spreading, and transportation costs.

variables
vm_omcosts_cdr(tall,all_regi) "O&M costs for spreading grinded rocks on fields [T$]"
vm_EW_transport_costs(tall,all_regi) "O&M costs for spreading grinded rocks on fields [T$]"
Parameterization based on Strefler et al (2018) doi.org/10.1088/1748-9326/aaa9c4
annuity factor = 0.08 for lifetime of 20 years and r = 0.05; capacity factor = 0.69
inco0: 5 (USD/t rock) * 0.69 / 0.08 = 43 USD/t rock/a for mining and production
omf: O&M cost from rock mining & production (25 USD/t rock) and transportation & distribution (12 USD/t rock), i.e. 37/(43/0.69) = 0.59
Comment thread standalone/template.gms
Comment thread standalone/template.gms
Comment thread standalone/trade/trade.gms
Comment thread standalone/trade/trade.gms
Comment thread standalone/MOFEX/MOFEX.gms
Comment thread standalone/MOFEX/MOFEX.gms
Comment thread modules/33_carbonRemoval/portfolio/datainput.gms Outdated
Comment thread core/input/generisdata_tech.prn Outdated
Enhanced Rock Weathering - weathering
Parameterization based on Strefler et al (2018) doi.org/10.1088/1748-9326/aaa9c4
annuity factor = 0.08 for lifetime of 20 years and r = 0.05; capacity factor = 0.69
inco0: 5 (USD/t rock) * 0.69 / 0.08 = 43 USD/t rock/a for mining and production

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.

does Strefler et al provide a reference year for the cost assumptions? here it is implicitly assumes that it is USD2015.

Comment thread modules/33_carbonRemoval/portfolio/declarations.gms
Comment thread modules/33_carbonRemoval/portfolio/realization.gms
Comment thread standalone/MOFEX/MOFEX.gms
Comment thread standalone/trade/trade.gms
Comment thread standalone/template.gms
Comment thread main.gms Outdated
Parameterization based on Strefler et al (2018) doi.org/10.1088/1748-9326/aaa9c4
annuity factor = 0.08 for lifetime of 20 years and r = 0.05; capacity factor = 0.69
inco0: 5 (USD/t rock) * 0.69 / 0.08 = 43 USD/t rock/a for mining and production
omf: O&M cost from rock mining & production (25 USD/t rock) and transportation & distribution (12 USD/t rock), i.e. 37/(43/0.69) = 0.59

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.

Copilot raises an important point here which I did not realize beforehand. It is at the moment confusing and should be made more transparent:

This documentation line says the weathering omf includes “transportation & distribution”, but those costs are modeled separately via p33_EW_transport_costs / vm_EW_transport_costs. To avoid confusion (and apparent double-counting), the 12 USD/t component should be described as spreading (fixed O&M), not transport.

Comment thread modules/33_carbonRemoval/portfolio/declarations.gms Outdated

variables
vm_omcosts_cdr(tall,all_regi) "O&M costs for spreading grinded rocks on fields [T$]"
vm_EW_transport_costs(tall,all_regi) "O&M costs for spreading grinded rocks on fields [T$]"

@robertsalzwedel robertsalzwedel Jul 27, 2026

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.

It feels a bit inconsistent between spreading and transport. This should be harmonized.

and small edit: language wise it should be ground rock and not grinded rock

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.

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