Skip to content

Add biochar as novel CDR approach (introduction of biopyrX technoloqies) - #2168

Merged
tabeado merged 32 commits into
remindmodel:developfrom
tabeado:v351bc
Jul 31, 2025
Merged

Add biochar as novel CDR approach (introduction of biopyrX technoloqies)#2168
tabeado merged 32 commits into
remindmodel:developfrom
tabeado:v351bc

Conversation

@tabeado

@tabeado tabeado commented Jul 17, 2025

Copy link
Copy Markdown
Contributor

Purpose of this PR

This PR adds biochar to REMIND as described in issue550.

! new inputdata including mrremind-PR705 is required before merging! ✔️
! new reporting required remind2-PR744

Basic implementation logic:
There are 4 new pe2se technologies (biopyrX) that transform pebiolc to the new secondary energy carrier sebiochar. The sebiochar cannot be used energetically, but is demanded by the dummy technology biocharuse and accounted under vm_demSeOth. We further assign a monetary value to the produced product, given by p33_BiocharPrice. The total vm_biocharRevenue is then added to qm_budget.

Options to modify
(1) c_biopyrEstablished turns the 3 established biopyr technologies on/off -> default = ON
(2) c_biopyrliq turns the bioliquid tech on/off -> default = OFF
(3) cm_BClearning can introduce capital cost learning for established tech -> default = OFF (because the other bioenergy technologies aren't learning endogenously either)
(4) cm_33_BCpriceForm adjusts the revenue for biochar -> default = declining price over time . Alternative: set constant price (also 0 = turning it completely off)

Other

  • The implementation is based on a submitted paper. The parametrization choices are additionally documented in the code.

  • The addition of biochar as CDR option mainly has an effect for scenarios strongly limiting geologic CO2 storage availability.

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/tabeado/Biochar/remindv351/remind/output and for the final version here: /p/tmp/tabeado/Biochar/remindv351Final
  • Comparison of results (what changes by this PR?):

@tabeado
tabeado marked this pull request as draft July 17, 2025 07:18
@tabeado tabeado changed the title Add biochar reporting to remind2 Add biochar as novel CDR approach (introduction of biopyrX technoloqies) Jul 17, 2025
@tabeado
tabeado marked this pull request as ready for review July 29, 2025 15:49
@tabeado
tabeado requested review from amerfort and strefler July 29, 2025 15:49
@tabeado
tabeado requested a review from robertsalzwedel July 29, 2025 15:49
@tabeado

tabeado commented Jul 29, 2025

Copy link
Copy Markdown
Contributor Author
image

@tabeado
tabeado requested a review from dklein-pik July 30, 2025 07:35

@dklein-pik dklein-pik left a comment

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.

Thank you for this PR that I find very well documented and commented. I have only a few minor comments.

Comment thread core/bounds.gms Outdated
Comment thread core/datainput.gms Outdated
Comment thread core/datainput.gms Outdated
pm_cf(ttot,regi,"tdh2b") = pm_cf(ttot,regi,"tdh2s");
pm_cf(ttot,regi,"tdh2i") = pm_cf(ttot,regi,"tdh2s");

*TD* Set capacity factors for pyrolysis technologies. *Move to mrremind for final implementation*

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 this not supposed to be the final implementation?

Comment thread core/bounds.gms
vm_deltaCap.fx(t,regi,"biopyrliq",rlf)$(t.val ge cm_startyear) = 0;
else
vm_deltaCap.lo(t,regi,"biopyrliq",rlf)$(t.val gt cm_startyear) = 1.0e-8; !! initiate a negligible increase to help model find the technology
vm_deltaCap.up(t,regi,"biopyrliq",rlf)$(t.val gt cm_startyear) = 1e10; !! necessary to revert fixing to 0

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.

Fixing to zero can only happen if c_bioliqscen eq 0, right? If so, would you mind mentioning it here?

Comment thread main.gms Outdated
Comment thread main.gms Outdated
*** or number (ex. 0.66), multiply by 0.66 Industry CSS cost markup
$setglobal cm_Industry_CCS_markup off !! def = off
*' Flag to change learning assumption for established pyrolysis technologies. 0 = not learning; any number = learning rate
*' Beware: you may need to start a new NPi if you want to have techs learning.

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.

Why is this necessary? Is it only necessary if I want the technologies to learn also in the NPi and not just in the policy scenario, or is it also necessary if I want them to learn only in the policy scenario?

Comment thread modules/33_CDR/portfolio/declarations.gms Outdated
Comment thread main.gms

@amerfort amerfort left a comment

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.

Hi Tabea, thanks for doing all the great work and especially for the detailed documentation of parameter choices and rationales. It looks great from my side.
Maybe we can address David's point about endogenous learning and the necessity to have endogenously learning NPi runs as precursors for endogenously learning policy runs in a separate issue later on, as this is not the default setting.

Comment thread CHANGELOG.md
Comment thread core/sets.gms
bioethl "biomass to ethanol"
bioeths "sugar and starch biomass to ethanol"
biodiesel "oil biomass to biodiesel"
biopyronly "biomass pyrolysis to biochar, no energy co-product (established industrial)"

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'm not sure where this is relevant for REMIND/GAMS. Intuitively it doesn't seem to be a renewable (energy) technology, if there are no energy co-products. But I'm sure there are good reasons to add it to this set.

Comment thread main.gms
Comment thread main.gms
@tabeado
tabeado merged commit 92266fe into remindmodel:develop Jul 31, 2025
2 checks passed
@tabeado tabeado mentioned this pull request Aug 21, 2025
8 tasks
@tabeado

tabeado commented Nov 12, 2025

Copy link
Copy Markdown
Contributor Author

addition: #2240

@tabeado
tabeado deleted the v351bc branch July 17, 2026 14:38
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