Skip to content

Add module 25 WACC with standard and off realizations - #2378

Merged
LaviniaBaumstark merged 8 commits into
remindmodel:developfrom
daymontas1:25-wacc-only
Jun 25, 2026
Merged

Add module 25 WACC with standard and off realizations#2378
LaviniaBaumstark merged 8 commits into
remindmodel:developfrom
daymontas1:25-wacc-only

Conversation

@daymontas1

@daymontas1 daymontas1 commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Purpose of this PR

This PR introduces a new module (Module 25_WACC) for calculating capital costs associated with energy-system and macroeconomic investments.

Please explain your PR here.
Module 25_WACC
Module 25_WACC computes, for each time period, technology-specific weighted average cost of capital (WACC)–related costs for the energy system, as well as costs associated with macroeconomic investment flows.

Energy-technology WACC costs consist of:
(i) costs associated with newly installed capacity in the current period, and
(ii) residual costs of technologies that remain in operation from previous periods.

This structure relies on the assumption that the repayment period equals the technical lifetime of each technology. Input WACC data are primarily drawn from Calcaterra et al. and are aggregated to REMIND regions using GDP-weighted averages of the countries comprising each region.

From these values, WACC mark-ups are derived and defined as the difference between the WACC of a given technology–region pair and the lowest observed WACC. The latter corresponds to natural-gas power generation in the USA and the CAZ region (Canada, Australia, and New Zealand), which serves as the risk-free reference case (i.e., zero mark-up) against which all other combinations are benchmarked.

To preserve budget neutrality, WACC-related costs are recycled back into the economy. At the same time, to capture the stimulating effect of WACC costs on investment decisions, WACC costs calculated in the previous model iteration are deducted from those computed in the current iteration. As the model converges, the net WACC cost component in the budget constraint approaches zero.

Further documentation is provided in the attached presentation and Word file.
Uploading Cost_of_Capital_Documentation_v2.docx…

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:
  • Comparison of results (what changes by this PR?):

Comment thread modules/01_macro/singleSectorGr/equations.gms Outdated
Comment thread modules/25_WACC/standard/declarations.gms Outdated
Comment thread modules/25_WACC/standard/not_used.txt Outdated
Comment thread main.gms
+ vm_costInvTeAdj.l(t2, regi, tewacc)$teAdj(tewacc)
) * p25_techwacc(t2, regi, tewacc) * pm_ts(t2)/2);

p25_techwaccCostO(t, regi) = sum(tewacc, p25_waccCostO_tewacc(t, regi, tewacc));

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.

@LaviniaBaumstark Hi Lavinia, you left this comment in the previous PR at ths line: "Do you want to recalculate this also for fixed time periods?" At this point, I want to aggregate energy-related WACC costs across technologies for each period. p25_waccCostO_tewacc is calculated in the equation above (lines 12-16); this equation is simply meant to aggregate the WACC costs for each period and region across technologies. The resulting value is then subtracted in the next iteration.

I keep the calculation in two steps because I want to report the technology-specific WACC costs for each period and region in the output, rather than only the aggregated value.

I am not sure I fully understand your comment, if you meant something else please explain.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I mean, if this calculation also need to be redoen for the fixed tmie periods, if we have a climate policy scneario, which is fixed to an NPI2025 for 2005-2020.

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.

I mean, if this calculation also need to be redoen for the fixed tmie periods, if we have a climate policy scneario, which is fixed to an NPI2025 for 2005-2020.

For fixed time periods, no.

@daymontas1

Copy link
Copy Markdown
Contributor Author

The checks fail only because of an incompatible terra version, which is a general issue that needs to be fixed by Pascal. All other tests pass.

@LaviniaBaumstark

Copy link
Copy Markdown
Member

Please fill in the PR-template regarding: Parts concerned and Impact, In the end you need to run make testand fulfill all checkboxes of the checklist

@daymontas1

Copy link
Copy Markdown
Contributor Author

Please fill in the PR-template regarding: Parts concerned and Impact, In the end you need to run make testand fulfill all checkboxes of the checklist

I did it, also the make test was sucessful (it complained only about module 33).

@daymontas1

Copy link
Copy Markdown
Contributor Author

Please fill in the PR-template regarding: Parts concerned and Impact, In the end you need to run make testand fulfill all checkboxes of the checklist

I did it, also the make test was sucessful (it complained only about module 33).

@LaviniaBaumstark This looks ready to merge. Please let me know if there's anything else, otherwise, please approve so I can merge the PR. Thanks.

@LaviniaBaumstark
LaviniaBaumstark merged commit 05e9d88 into remindmodel:develop Jun 25, 2026
2 of 4 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