Conversation
…p in configs so can be changed between model runs and countries
…d score (i.e. ratio of clean to total generators across all nodes) or define a specific sub-set (can be multiple or just one, as in recent cfe studies by TZ)
…racted and grid cfe score amended accordingly netting off this clean contracted ppa from brownfield
…onality candidates
…nking C&I bus to multiple brownfields and additionality candidates
… to conditions of additionality
…ity to avoid confusion and implemented nested loop for additionality candidates
…nality supply given other nodes can contribute not through grid but directly via additionality links
…d on an LCOE/unit cost
…een non-neighbouring brownfield buses grid and C&I bus
…vel constraint for PPAs from brownfields
… at 0pc (matches original CFE) and 5pc
…eflects what list function is being applied to
…demand which can be met by existing supply
AggelosRag
reviewed
May 12, 2026
AggelosRag
left a comment
There was a problem hiding this comment.
Hi Dan, I would like to ask some modeling related questions based on the code. You can find them in the comments. Thanks!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request adds features and functionality to the existing cfe repo in two key areas identified as limitations/areas to develop after the 2025 CFE studies:
Strict additionality constraints - whereby the C&I consumer could not sign PPAs directly with existing brownfield capacity but would instead have to import from the brownfield but with potentially high shares of fossil generation (i.e. clean and dirty molecules were mixed into a "grid score")
Strict location constraints - whereby the C&I consumer could only procure clean electricity by building new capacity or by importing from its parent brownfield.
Multiple changes have been made in this PR with three overarching aims:
The main changes are summarised below.
Strict additionality constraints
Strict location constraints
The following have been included as user configurable inputs:
Constraints and equations have been added/amended in the run_scenarios.py and CFE.py scripts to account for the changes made including:
This PR has been tested extensively with the India stock model. Whilst the model is very close to that used in CFE, some minor changes were made between the publication of the India CFE study and picking up the stock model for testing in this repo. Therefore small variations are to be expected.
However, when checking for backwards compatibility to the original CFE study (checked by setting the new user-configurable "cfe_contribution" input parameter to zero ("Additionality_0" in images attached, i.e. no brownfield capacity can be directly contracted via PPAs by the C&I consumer), the results match very closely (see attached images).

