ERW improvements & documentation - #2411
Conversation
There was a problem hiding this comment.
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_LimRockannual rock-spreading limit (including equation/parameter scaffolding and standalone templates). - Rename
s33_co2_rem_pottos33_rockRemPotand introducecm_33_EW_rockRemPotto 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.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
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 |
| 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 |
There was a problem hiding this comment.
does Strefler et al provide a reference year for the cost assumptions? here it is implicitly assumes that it is USD2015.
| 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 |
There was a problem hiding this comment.
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.
|
|
||
| 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$]" |
There was a problem hiding this comment.
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
robertsalzwedel
left a comment
There was a problem hiding this comment.
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.
Purpose of this PR
This PR improves our modeling of Enhanced Rock Weathering:
33_CarbonRemovalmodule. Therefore, theinco0in 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_techto fit the assumption of 5 USD/t rock in Strefler et al.- removed
s33_costs_fix- renamed
vm_omcosts_cdrtovm_EW_transport_costsfor a more descriptive name (+ related adjustments inremind2, see PR)generisdata_techandcore/datainputcm_33_EW_rockRemPotnow allows to alter the maximum CO2 removal per ton of rock. Inmain.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 in33_carbonRemoval/portfolio/datainput.s33_CO2_rem_potintos33_rockRemPotto be more descriptive and match the name of the new switch. This requires a change ofreportLCOEinremind2, see PRType 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
Impact
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.
make test) after my final commit and all tests pass (FAIL 0)remind2if and where it was neededforbiddenColumnNamesin readCheckScenarioConfig.R in case the PR leads to deprecated switchesCHANGELOG.mdcorrectly (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