Skip to content

Update NPi2025 technology capacity targets#2271

Open
lea-hayez wants to merge 21 commits intoremindmodel:developfrom
lea-hayez:updateNPICap-Oct
Open

Update NPi2025 technology capacity targets#2271
lea-hayez wants to merge 21 commits intoremindmodel:developfrom
lea-hayez:updateNPICap-Oct

Conversation

@lea-hayez
Copy link
Contributor

@lea-hayez lea-hayez commented Jan 21, 2026

Purpose of this PR

Update of technological capacity targets in the NPI2025 scenario, based on the scenario protocol from ELEVATE (update from October 2025). See selected policies here: /p/projects/rd3mod/inputdata/sources/NewClimate/NPi_PBL_2025.xlsx The coal bounds still need to be correctly read in remind, or correctly ignored in mrremind (see below). So no coal bound in REMIND added yet.

See full NPi comparison here: /p/tmp/leaha/remind/compScen-NewClimate-77-noCoalp-2026-02-05_14.09.20-H12.pdf
- SSP2−NPi2025−develop−77 : current develop with new input data 7.77
- SSP2−NPi2025−develop−76 : current develop previous input data 7.76
- SSP2−NPi2025−NewClimate−77−noCoalp : new input data 7.77 and remind adjustment
-> excludes coal bound, it needs a fix in mrremind to ignore all countries but EUR and CAZ. Currently, it would read all historical and target data as lower bound, which does not allow coal development in regions such as CAZ or CHA.)

Overview of changes:

Minor changes in total CO2 emissions:
image

Slight increase in biomass use:
image

New nuclear in OAS and NEU:
image

Drop of EU offshore wind target of 300GW by 2050 (FF55):
image

Delayed hydro target in Turkey (from 32GW in 2023 to 35GW in 2035):
image

Related changes in input data generation: pik-piam/mrremind#774

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)

  • Runs with these changes are here: /p/tmp/leaha/remind/SSP2-NPi2025-NewClimate-77-noCoalp.RData
  • Comparison of results (what changes by this PR?): /p/tmp/leaha/remind/compScen-NewClimate-77-noCoalp-2026-02-05_14.09.20-H12.pdf

Copy link
Contributor

@fschreyer fschreyer left a comment

Choose a reason for hiding this comment

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

Thanks for your work!

Overall, the results look good to me. Some code modifications I'd still recommend.

Also, before merging this it would be good to first generate new input data and increment the input data revision cfg$inputRevision in the config/default.cfg file in the present PR to include this data. Otherwise, this REMIND version would run with input data generated with older mrremind versions before your update of capacity targets.

@lea-hayez lea-hayez marked this pull request as ready for review February 4, 2026 12:43
Copy link
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.

Thanks for the great work! Do I see this correctly: Due to the coal implementation being postponed, this PR mainly has the purpose of setting the new input data cfg$inputRevision <- "7.77"?

If so, I only see one missing *!

p40_TechBound(ttot,all_regi,all_te) "NPI capacity targets for solar (pv, csp), wind (total, onshore, offshore), nuclear, hydro, biomass, nuclear (GW)"
p40_ElecBioBound(ttot,all_regi) "level for lower bound on biomass tech. absolute capacities, in GW"
p40_CoalBound(ttot,iso_regi) "level for upper bound on absolute capacities, in GW for all technologies except electromobility"
p40_CoalCapBound(ttot,iso_regi) "level for upper bound on absolute capacities, in GW for all technologies except electromobility"
Copy link
Contributor

@RahelMA RahelMA Feb 4, 2026

Choose a reason for hiding this comment

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

I think you would also want to add * for not having a parameter that is not used!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done!

Copy link
Contributor

Choose a reason for hiding this comment

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

As I mentioned earlier, I don't see a point in having any commented code (I am quite sure that this is also RSE policy). Code that has been added and is not used anymore can be deleted as it can always be restored via your git history.

vm_cap.lo(t,regi,"windoff","1")$(t.val gt 2025) = p40_TechBound(t,regi,"windoff")*0.001;
vm_cap.lo(t,regi,"wind","1")$(t.val gt 2025) = p40_TechBound(t,regi,"wind")*0.001;
*vm_cap.lo(t,regi,"elh2","1")$(t.val gt 2025) = p40_TechBound(t,regi,"elh2")*0.001;
*vm_cap.lo(t,regi,"geohdr","1")$(t.val gt 2025) = p40_TechBound(t,regi,"geohdr")*0.001; quick fix needs adjustments in the mrremind Inputdata generation including new IRENA
Copy link
Contributor

Choose a reason for hiding this comment

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

this can now be dropped as you have it in the input data?

*vm_cap.lo(t,regi,"elh2","1")$(t.val gt 2025) = p40_TechBound(t,regi,"elh2")*0.001;
*vm_cap.lo(t,regi,"geohdr","1")$(t.val gt 2025) = p40_TechBound(t,regi,"geohdr")*0.001; quick fix needs adjustments in the mrremind Inputdata generation including new IRENA
vm_cap.lo(t,regi,"geohdr","1")$( (t.val gt 2025) AND sameas(regi, "OAS")) = p40_TechBound(t,regi,"geohdr")*0.001;
*vm_cap.up(t,regi,"coalchp","1")$(t.val gt 2025) = p40_TechBound(t,regi,"coalchp")*0.001; !!max bound for Canada use the netzero calculator, check coal phase out module
Copy link
Contributor

Choose a reason for hiding this comment

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

this was never active right?

@lea-hayez lea-hayez requested a review from fschreyer February 4, 2026 13:30
@lea-hayez
Copy link
Contributor Author

@LaviniaBaumstark this PR includes the change of input data from 7.76 to 7.77, ready to merge whether!

p40_TechBound(ttot,all_regi,all_te) "NPI capacity targets for solar (pv, csp), wind (total, onshore, offshore), nuclear, hydro, biomass, nuclear (GW)"
p40_ElecBioBound(ttot,all_regi) "level for lower bound on biomass tech. absolute capacities, in GW"
p40_CoalBound(ttot,iso_regi) "level for upper bound on absolute capacities, in GW for all technologies except electromobility"
* p40_CoalCapBound(ttot,iso_regi) "level for upper bound on absolute capacities, in GW for all technologies except electromobility"
Copy link
Member

Choose a reason for hiding this comment

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

please delete not active parameters

*** coal bound: all technologies transforming PE coal into SE electricity. Cannot apply to current input data, as lower bound on historical data affect strongly dynamics in OAS and CHA.
*q40_coalCapBound(t,regi)$(t.val gt 2025
* AND p40_TechBound(t,regi,"coalchp") gt 0)..
* sum(pe2se("pecoal","seel",te),
Copy link
Member

Choose a reason for hiding this comment

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

please do not add a non active equation, we no not want to have code which is out-commented

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.

4 participants