Skip to content

allow regionally different carbon price peak years for regional EOC budget scenarios#2309

Merged
tabeado merged 6 commits intoremindmodel:developfrom
tabeado:regionalTargets
Mar 30, 2026
Merged

allow regionally different carbon price peak years for regional EOC budget scenarios#2309
tabeado merged 6 commits intoremindmodel:developfrom
tabeado:regionalTargets

Conversation

@tabeado
Copy link
Copy Markdown
Contributor

@tabeado tabeado commented Mar 13, 2026

Purpose of this PR

For scenarios with fixed regional EOC carbon budgets via 45_carbonprice/functionalFormRegi, enable region-specific carbon price peak years. So far, only a globally set peak year was possible to set via cm_peakBudgYr. Now, users can set a peak year for each region via cm_peakBudgYr_regi .

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

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)

  • Runs with these changes are here: /p/tmp/tabeado/Equity/EOC_2511/remind_RegiPeak
  • Comparison of results (what changes by this PR?): Earlier test runs were made here /p/tmp/tabeado/Equity/EOC_2511/remind_PBhard/output

@tabeado tabeado requested a review from RahelMA March 13, 2026 13:43
@tabeado
Copy link
Copy Markdown
Contributor Author

tabeado commented Mar 13, 2026

I have test runs on the way to check that it really works as intended...

Copy link
Copy Markdown
Contributor

@RahelMA RahelMA left a comment

Choose a reason for hiding this comment

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

Thank you, Tabea! That's a great improvement!

I only have minor documentation comments ;)

Do you have some test runs? It would be helpful to check the behavior and results in the discussion.

If not in this PR, then in the next one, we should add the ECPC scenario with regional peak year in the JUSTMip config.

p45_budgetCO2from2020Regi(all_regi) "regional carbon budget (Gt CO2)"
p45_budgetCO2from2020RegiShare(all_regi) "share of region in global carbon budget" /%cm_budgetCO2from2020RegiShare%/
$ifthen.Peak not "%cm_peakBudgYr_regi%" == "off"
p45_peakBudgYr_regi(all_regi) "prescribed peak carbon price year for each region" /%cm_peakBudgYr_regi%/
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.

I wonder if it is useful to have the input for p45_peakBudgYr_regi(all_regi) only in the datainput or declaration ? Now it's partly doubled?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

this was my solution to having both options to set a global year through cm_peakBudgYr and cm_peakBudgYr_regi.

  • when cm_peakBudgYr is set, it has to be assigned to p45_peakBudgYr_regi(all_regi) in datainput.
  • when cm_peakBudgYr_regi is set, it can be read in and assigned directly in the declarations - which I find quite elegant.

So it is not double, but the assignment happens in different places for different cases.

@LaviniaBaumstark: is it better to use the simple read-in in the declarations or to have the assignment of p45_peakBudgYr_regi for all cases in the datainput?

@@ -132,7 +132,7 @@ else !! if not yet within tolerance
); !! if iteration far enough

!! Simultaneous up- and downward adjustment of carbon prices in early iterations
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.

Is the carbon price oscillating between iter 12 and 30?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This is not about oscillation, but about avoiding that there are too many effects in different directions by the regions which could make convergence more difficult. Therefore, the carbon prices adjustments are allowed only in one, alternating direction in later iterations.
This feature was introduced to help the convergence when we had big problems early-on. But iter 12 is probably too early to start this,. We may need more analysis whether it is really meaningful at some point. We can also take it out of the normal operation, i.e. set iter = 100 here, and just keep it as a manually adaptable feature for when we have convergence problems in our runs.

@tabeado
Copy link
Copy Markdown
Contributor Author

tabeado commented Mar 20, 2026

Do you have some test runs? It would be helpful to check the behavior and results in the discussion.

I added the path to a folder that includes runs with different carbon price shapes from November in the description. For documentation of the implications of the choice of shapes in general, I would rather add a brief discussion in the general description/tutorial we have planned

@tabeado tabeado merged commit 3c20a02 into remindmodel:develop Mar 30, 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.

2 participants