Skip to content

Fix q_shSeFeSector infeasibility on zero solids demand - #2429

Merged
Renato-Rodrigues merged 2 commits into
remindmodel:developfrom
Renato-Rodrigues:infes_fix
Aug 18, 2026
Merged

Fix q_shSeFeSector infeasibility on zero solids demand#2429
Renato-Rodrigues merged 2 commits into
remindmodel:developfrom
Renato-Rodrigues:infes_fix

Conversation

@Renato-Rodrigues

@Renato-Rodrigues Renato-Rodrigues commented Aug 16, 2026

Copy link
Copy Markdown
Member

Purpose of this PR

  • Fix infeasibility on fesos in buildings and industry for regions/periods with zero demand.
  • Add upper bounds ($= 1$) on share variables (v_shSeFeSector, v_shSeFe) to prevent the solver from exploring unphysically large values when demand is small.

Details

The equation q_shSeFeSector triggers a local infeasibility in some REMIND scenarios (e.g., ambitious carbon budget runs where regions like CHA have zero industry solid demand by 2150). With zero total final energy demand, the share equation becomes singular ($v \times 0 = 0$).

Because fesos in buildings and industry is already explicitly excluded from the downstream penalty equation q_penSeFeSectorShareDev, calculating these shares is unnecessary. Excluding them from q_shSeFeSector prevents the zero-demand singularity without side effects on model behavior.

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)

@Renato-Rodrigues
Renato-Rodrigues marked this pull request as ready for review August 16, 2026 18:42
@Renato-Rodrigues
Renato-Rodrigues merged commit 305759a into remindmodel:develop Aug 18, 2026
2 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