Skip to content

Split geological CO2 storage into onshore and offshore. Use new storage potentials#2296

Merged
dklein-pik merged 30 commits intoremindmodel:developfrom
dklein-pik:uptake
Mar 3, 2026
Merged

Split geological CO2 storage into onshore and offshore. Use new storage potentials#2296
dklein-pik merged 30 commits intoremindmodel:developfrom
dklein-pik:uptake

Conversation

@dklein-pik
Copy link
Contributor

@dklein-pik dklein-pik commented Feb 24, 2026

Purpose of this PR

Split geological CO2 transport and storage technology (ccsinje) into onshore (ccsinjeon) and offshore (ccsinjeoff).

  • REMIND now only recognizes ccsinjeon and ccsinjeoff, not ccsinje anymore.
  • For ccsinjeon, the same old storage potential is used by default, that has been used for ccsinje so far.
  • ccsinjeon has inherited its parameterization from ccsinje.
  • ccsinjeoff is currently practically disabled (its storage potential is set to 0.00001 GtC, to prevent division by zero).
  • there are new storage potentials available that can be selected via c_geoStorPotScen.

From Anne's comment below:

This PR does so far not change REMIND default behaviour. The parametrisation for ccsinjeon follows our standard parametrisation for ccsine and for ccsinjeoff there are mock-up parameters now in the code for testing the new structure. This PR provides the code-structure to split geological storage into onshore and offshore, but I will update the parametrisation soon. This will likely also affect parametrisation of ccsinjeon. Only thereafter will we decide on how that may or should affect REMIND standard scenarios.

Type of change

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

  • 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)

Requires new input data f_geoStorPot.cs3r from mrremind::calcPotentialGeologicalStorage
…grade anyway but more technologies to come (ccsinjeon and ccsinjeoff), each with its own storage potential defined by pm_dataccs.
Reduce dimensions of q_emiCdrAll to calculate the sum of ccsinjeon and ccsinjeoff and not individually
@dklein-pik dklein-pik requested a review from amerfort February 25, 2026 11:12
@dklein-pik dklein-pik marked this pull request as ready for review February 27, 2026 15:29
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This pull request introduces a distinction between onshore and offshore geological CO2 storage in the REMIND model. The main technology ccsinje has been split into ccsinjeon (onshore) and ccsinjeoff (offshore), with different cost structures, storage potentials, and characteristics.

Changes:

  • Split CCS injection technology from single ccsinje to ccsinjeon (onshore) and ccsinjeoff (offshore)
  • Updated geological storage potential data to use new source with separate onshore/offshore potentials
  • Modified equations to simplify v_co2capture variable by removing unused dimensions

Reviewed changes

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

Show a summary per file
File Description
core/sets.gms Defines new CCS injection technologies (ccsinjeon, ccsinjeoff) and teccsinje set; updates all relevant mappings
core/declarations.gms Changes pm_dataccs indexing from rlf to technology names; simplifies v_co2capture dimensions
core/equations.gms Updates CCS equations to reflect new technology split; simplifies q_balcapture signature
core/datainput.gms Implements new c_geoStorPotScen parameter logic to assign storage potentials to onshore/offshore technologies
core/bounds.gms Updates bounds for both onshore and offshore storage; includes near-term pipeline project bounds (onshore only)
core/postsolve.gms Simplifies pm_share_CCS_CCO2 calculation due to reduced v_co2capture dimensions
core/input/files Changes input file from pm_dataccs.cs3r to f_geoStorPot.cs3r
core/input/generisdata_tech.prn Adds offshore technology parameters (50% higher costs than onshore)
core/input/generisdata_vintages.prn Adds vintage data for both CCS injection technologies
modules/21_tax/on/ Updates CCS tax calculations to use technology-specific parameters
modules/04_PE_FE_parameters/iea2014/datainput.gms Adds electricity co-production coefficient for offshore storage
modules/32_power/IntC/equations.gms Minor whitespace formatting improvements
modules/33_CDR/portfolio/ Simplifies equation signatures by removing unused dimensions
modules/47_regipol/none/bounds.gms Updates Germany-specific CCS bounds
main.gms Adds c_geoStorPotScen parameter with documentation; updates cm_frac_CCS comment
config/default.cfg Updates input revision to 7.83 for new storage data
DESCRIPTION Updates remind2 dependency to >= 2.0.3 for updated reporting
CHANGELOG.md Documents the changes in appropriate sections

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

Comment on lines +1181 to +1184
elseif (c_geoStorPotScen eq 3),
pm_dataccs(all_regi, "quan", "ccsinjeon") = f_geoStorPot(all_regi, "mixedOld");
pm_dataccs(all_regi, "quan", "ccsinjeoff") = 0.00001;
);
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

When c_geoStorPotScen is set to 3 (the old/default scenario), offshore storage potential is set to a very small value (0.00001 GtC) which effectively disables it. This means scenario 3 is not truly backward compatible with the old behavior where there was no distinction between onshore and offshore. Consider documenting this more explicitly in the parameter description or adjusting the implementation to better replicate the old behavior by distributing the "mixedOld" potential between onshore and offshore based on historical usage patterns.

Copilot uses AI. Check for mistakes.
…r dimensions of a few equations and variables changed during split of ccsinje)

New input data
Copy link
Contributor

@amerfort amerfort left a comment

Choose a reason for hiding this comment

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

Thanks a lot David!

@amerfort
Copy link
Contributor

amerfort commented Mar 3, 2026

This does so far not change REMIND default behaviour. The parametrisation for ccsinjeon follows our standard parametrisation for ccsine and for ccsinjeoff there are mock-up parameters now in the code for testing the new structure. This PR provides the code-structure to split geological storage into onshore and offshore, but I will update the parametrisation of ccsinjeoff according to the cost assessment from the "systematic review on geological storage of carbon" that will hopefully be published in the coming weeks. This will likely also affect parametrisation of ccsinjeon. Only thereafter will we decide on how that may or should affect REMIND standard scenarios.
I've created an issue to follow up on a clean and consistent parametrisation of ccsinjeon and ccsinjeoff.

@dklein-pik dklein-pik merged commit df2be4a into remindmodel:develop Mar 3, 2026
2 checks passed
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