Repository navigation
FINITO Link - #128
FINITO Link#128mmowers wants to merge 105 commits into
Conversation
…O for resource adequacy calcs
6293f78 to
3a6edbf
Compare
bsergi
left a comment
There was a problem hiding this comment.
Thanks for the helpful feedback here--I took a pass at addressing most of these but let me know if there's any I missed.
I plan to rerun the comparison cases once the HPC comes back. The other outstanding piece is that I'm still sorting through the best way to report fuel prices for coal, biomass, and nuclear from FINITO just to ensure our system cost isn't missing any fuel costs.
| pras_unitsize_source,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,r2x | ||
| pras_vre_combine,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 | ||
| pras_samples,,,,,,10,10,10,,,,,,,,,,,,,,,,10,10,,,,,, | ||
| ,Default Value,Pacific,USA_defaults,Mid_Case,USA_decarb,github_Pacific,github_Everything,github_MA_county_CC,Pacific_CC,Pacific_weks,Pacific_full_year,Interday_storage,Pacific_2020,Pacific_rep15,WY_county,WECC_county,PJM_county_CC,NYVT_mixed,OR_water,MonteCarlo_Random,MonteCarlo_LHS,Everything,Simple,USA_fast,USA_faster,MultiMetricRA,Pacific_DR,Pacific_MGA,Pacific_LoadSite95,MARICTNYNJPAOH_Offshore,R2P,FINITO,FINITO_Pacific |
There was a problem hiding this comment.
The original motivation for two was to have a quick test and a test with the recommended defaults for a national-scale linked run. I'll move the latter to the cases_examples.csv.
My thinking for including the quick test here was that it would be nice as part of Kennedy's regular checks to run a linked case to see if it's working or not. There wouldn't necessarily be an obligation to fix before merging, but it could be helpful for tracing when something broke (it already seems like we have some test cases that are failing in the tagged versions).
| demandscen,Demand scenario (see inputs\load),N/A,AEO_2026_baseline, | ||
| dr_shedscen,DR shed scenario,demo_data_January_2025,demo_data_January_2025, | ||
| evmcscen,EVMC scenario for load and supply curve and flexibility,Baseline,Baseline, | ||
| GSw_FINITO_Link,Switch to enable linkage with FINITO,0; 1,0, |
| finito_dir,Directory with cloned FINITO repository,N/A,/path/to/FINITO/directory, | ||
| finito_cases_file,"extension of the FINITO cases file including all scenarios to be run, e.g., 'linked' for cases_linked.csv",N/A,linked, | ||
| finito_case,Case name for FINITO in {finito_dir}/cases_linked.csv; use 'same' if the scenario name in cases_linked.csv matches the scenario name in the cases file,N/A,BAUfast, | ||
| first_year_finito,First year when the FINITO module is enabled,N/A,2018, |
There was a problem hiding this comment.
I'm open to the idea, but how would this work given that FINITO starts in 2018 and StartMarkets is set to 2026? Are you proposing to try not running FINITO until 2026?
| * ----- ReEDS-FINITO temporal parameters ----- | ||
| *============================================= | ||
| $ifthene.linked_finito_temporal_params %GSw_FINITO_Link% ==1 | ||
| $include finito/model/linked_finito_temporal_params.gms |
There was a problem hiding this comment.
Thought I rooted all these out previously but looks like I missed a few.
| * (ReEDS-FINITO) also reset t_finito | ||
| $ifthene.linked_finito_time %GSw_FINITO_Link% == 1 | ||
| t_finito(t) = no ; | ||
| t_finito(t)$[tmodel(t)$(t.val>=first_year_finito)$(t.val<=endyear)] = yes ; |
There was a problem hiding this comment.
The refer to the same thing--standardized this one to match.
| $ifthene.linked_load Sw_FINITO_Link==1 | ||
| + (USE_ELE_FINITO(r,h,t) / (1.0 - distloss))$[t_finito(t)] * (1 + prm(r,t)$h_stress(h)) | ||
| $endif.linked_load |
There was a problem hiding this comment.
Similar to the other comment, but that approach will cause an error since USE_ELE_FINITO is only defined if FINITO is linked.
| * capture from industry when linked with FINITO [metric_tons-CO2/hr]: | ||
| * calculation: hours_per_year [yrs/hr] * capture [scaled_metric_tons-CO2/yr] / co2_scale [scaled_metric_tons-CO2/metric_tons-CO2] |
| + sum{rr$co2_routes(r,rr), CO2_FLOW(rr,r,h,t) - CO2_FLOW(r,rr,h,t) } | ||
|
|
||
| * (ReEDS-FINITO) extraction - use of CO2 [metric_tons-CO2/hr] | ||
| *calculation: hours_per_year [yrs/hr] * (1 / co2_scale [scaled_metric_tons-CO2/metric_tons-CO2]) * extraction/use [scaled_metric_tons-CO2/yr] |
There was a problem hiding this comment.
Thanks for flagging. I think many of these errors were holdover to when FINITO didn't have the h representation.
| * (ReEDS-FINITO) extraction of CO2 [metric_tons-CO2/hr] | ||
| * calculation: hours_per_year [yrs/hr] * (1 / co2_scale [scaled_metric_tons-CO2/metric_tons-CO2]) * use [scaled_metric_tons-CO2/yr] | ||
| $ifthene.linked_co2_spurline_caplimit Sw_FINITO_Link==1 | ||
| + [ (1 / co2_scale) * EXTRACT_CO2_CS(cs,r,h,t) ]$[h_rep(h)$t_finito(t)] |
There was a problem hiding this comment.
I think that's right about being used to reduce model size. I chatted through this with Charalampos and we think the best approach would be to remove the h_rep(h) conditionals throughout the CO2 equations for the time being so as to be consistent, and to open an issue on the need to revisit ways to improve the CO2 detail treatment more generally.
|
|
||
| *gas used from each bin is the sum of all gas used | ||
| eq_gasused(cendiv,h,t)$[tmodel(t)$((Sw_GasCurve=0) or (Sw_GasCurve=3))].. | ||
| eq_gasused(cendiv,h,t)$[tmodel(t)$tfuel(t)$((Sw_GasCurve=0) or (Sw_GasCurve=3))].. |
There was a problem hiding this comment.
I went through to verify the new not tfinito(t) is applied to all the supply curve constraints.
Summary
This PR provides a linkage to the FINITO model, which is currently a private repository at https://github.com/NatLabRockies/FINITO). The linkage allows the full electricity sector detail of the ReEDS model to be used in combination with the industrial (and other) sector representation of the FINITO model.
The linkage is turned off by default, so this PR itself should not have impact on ReEDS results (although very small differences were observed in out years, presumably because the ReEDS model itself was touched, even if the matrix is identical).
For a high-level overview of FINITO and the linkage points see this slide deck.
See companion FINITO PR: https://github.com/NatLabRockies/FINITO/pull/438
Technical details
Turning on the linkage adds the constraints of the FINITO model to those of the ReEDS model, and adds the two objective functions together.
To turn on the linkage, clone the FINITO model and checkout the
bs/reeds_link2branch, unless this branch has already been merged intomain, at which pointmain.Configure these switches:
GSw_FINITO_Link: This switch turns on the linkagefinito_dir: This switch needs to point to the FINITO directory as a complete, absolute pathfinito_cases_file: This switch should be the suffix of the cases file in the FINITO directory, which contains the corresponding FINITO scenario configurationfinito_case: This switch is the specific case infinito_cases_fileto be runfirst_year_finito: This switch is the first year that the linkage will be implementedThe
reedsconda environment should be used for the linked model.Linked runs result in the the same set of ReEDS outputs, but new outputs are also added from FINITO in the
finitosubdirectory of the run directory.Relevant sources or documentation
FINITO documentation is at https://github.com/NatLabRockies/FINITO
Validation, testing, and comparison report(s)
A comparison of default (Ref) was made berfore and after this change, showing no changes, as expected:
reeds_report_ref_2026-08-05.zip
Running the USA_fast case with the linkage turned on results in moderate generation differences to the ReEDS standalone "USA_fast", but similar amonts of fossil and renewables by 2050:

Electricity load differences show that FINITO endogenous industrial electricity demand is lower than the reference demand that was removed from the EER load profiles, even in the near term:

Gas price differences align with gas generation differences by 2050, although alignment isn't perfect for the years before:

See more results of the comparison here:
reeds_report_finito_vs_usa-fast_plus4_2026-08-08.zip
Also, a more thorough comparison of the reference industrial electricity load that was removed from ReEDS load profiles, as compared to the endogenous finito load that was added back in, is here:
finito_load_check_2026-08-06.zip
Checklist for author
Details to double-check
hourlize/resource.pywas rerun to regenerate the existing/prescribed VRE capacity dataGeneral information to guide review
Did you use LLM tools (chatbot or copilot) in the preparation of this PR? If so, describe how
Tag points of contact here if you would like additional review of the relevant parts of the model