Skip to content

Switch default 100 EJ/yr bioenergy bound to implicit quantity target formulation - #2427

Merged
merfort merged 7 commits into
remindmodel:developfrom
merfort:dev__update_bio_bound
Aug 18, 2026
Merged

Switch default 100 EJ/yr bioenergy bound to implicit quantity target formulation#2427
merfort merged 7 commits into
remindmodel:developfrom
merfort:dev__update_bio_bound

Conversation

@merfort

@merfort merfort commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Purpose of this PR

The current implementation of an exogenously set 100 EJ/yr bioenergy bound via cm_maxProdBiolc had the caveat that regional shares where defined ex-ante, such that a the total bound could not be distributed to regions dynamically. This PR changes the default assumptions to instead make use of the implicit quantity target formulation that allows for a dynamic allocation within in nash algorithm. This PR addresses the biomass limitation issue and also fixes the issue with nash convergence. The original mechanism of fixed shares is still available but deactivated by default.

In addition to this switch from static to dynamic allocation there are a few differences:

  • The old default implementation worked in a way that the 100 EJ/yr were applied to lingocellulosic biomass production (purpose grown + residues) excluding traditional biomass
  • The new default implementation works in a way that it affects total primary energy biomass, i.e. total lingocellulosic biomass (purpose grown + residues, including traditional) and total 1st generation bioenergy (from food crops)

Since we decided to keep the number 100 EJ/yr as the limit, while the coverage changed, this means that the effective limit is now stricter. Given that traditional biomass and 1st generation bioenergy make up ca. 10 EJ/yr in years where the limit is binding (this differs, because traditional is phased out over time), the limit on total biomass is now effectively reduced from ca. 110 EJ/yr to exactly 100 EJ/Yr (see figures below).

Note that for SSP1, we before had a default bound of 90 EJ/yr lignocellulosic biomass, i.e. ca. 100 EJ/yr total biomass. We decided to not reduce the bound further but instead also go for the 100 EJ/yr total biomass limit with the new implementation. This has the consequence that SSP1 and SSP2 now have the same limit (as the limit in SSP2 was effectively reduced)

Additionally to the changes in the default settings, there are two (optional) additions:

  • Bioenergy scenarios with total biomass of 100, 110, 150, 200, 250 and 300 EJ/yr can be easily selected (fixed scenarios) via switches cm_implicitQttyTargetType = scenario and (e.g.) cm_implicitQttyTarget = GLO_bio100. (there is still the option to choose a specific value via cm_implicitQttyTargetType = config and (e.g.) cm_implicitQttyTarget = (2030,2035,2040,2045,2050,2055,2060,2070,2080,2090,2100).GLO.tax.t.PE.biomass 3.171, but that clutters the config a bit)
  • There is now the option (deactivated by default) to enforce an implicit quantity target only on lignocellulosic biomass (i.e. excluding 1st gen.), to get closer to the original implementation. Note that traditional biomass is still included (so there will still be a difference in coverage compared to the cm_maxProdBiolc formulation).

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)

Changes in the results

Runs with these changes are here:
/p/tmp/merfort/REMIND_development/remind_test_implicit_qtty_target_biomass
Compare scenarios PDF:
/p/tmp/merfort/REMIND_development/remind_test_implicit_qtty_target_biomass/compScen-orig_new110EJ_new110EJ-2026-08-18_08.07.22-H12.pdf

Scenarios

  • SSP2−PkBudg750_orig: our old default
  • SSP2−PkBudg750_new100EJ: will be our new default
  • SSP2−PkBudg750_new110EJ: for comparison, new version but with bound such that it broadly matches the old global levels

Regional biomass production allocation changes, total biomass demand in new default by about 10 EJ/yr lower
image
image

Also regional biomass consumption changes a bit
image

CO2 prices increase a bit:
image

Comment thread modules/47_regipol/regiCarbonPrice/sets.gms Outdated
@merfort
merfort merged commit 90c93a3 into remindmodel:develop Aug 18, 2026
2 checks passed
@merfort
merfort deleted the dev__update_bio_bound branch August 18, 2026 14:08
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