From b91d8e0727ac3194e7aa201314e2420727c13e2c Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 12:10:37 -0600 Subject: [PATCH 01/71] move files to github.com --- b_inputs.gms | 57 ++++- c_mga.gms | 81 +++++++ cases.csv | 17 +- cplex.op2 | 2 +- cplex.op3 | 84 +++++++ cplex.op4 | 84 +++++++ cplex.opt | 2 +- d_solveoneyear.gms | 1 + docs/source/user_guide.md | 45 ++-- e_report.gms | 55 +++++ e_report_params.csv | 13 ++ input_processing/copy_files.py | 97 +++++---- .../employment_factor_inter_transmission.csv | 3 + .../employment_factor_plant_JEDI.csv | 206 ++++++++++++++++++ .../employment_factor_plant_Mayfield.csv | 206 ++++++++++++++++++ .../employment_factor_plant_Ram.csv | 206 ++++++++++++++++++ .../employment_factor_plant_Rutovitz.csv | 206 ++++++++++++++++++ inputs/sets/jtype.csv | 3 + reeds/log.py | 4 +- runbatch.py | 65 +++--- runfiles.csv | 14 +- 21 files changed, 1334 insertions(+), 117 deletions(-) create mode 100644 cplex.op3 create mode 100644 cplex.op4 create mode 100644 inputs/employment/employment_factor_inter_transmission.csv create mode 100644 inputs/employment/employment_factor_plant_JEDI.csv create mode 100644 inputs/employment/employment_factor_plant_Mayfield.csv create mode 100644 inputs/employment/employment_factor_plant_Ram.csv create mode 100644 inputs/employment/employment_factor_plant_Rutovitz.csv create mode 100644 inputs/sets/jtype.csv diff --git a/b_inputs.gms b/b_inputs.gms index 0d59e562..cbbfebe1 100644 --- a/b_inputs.gms +++ b/b_inputs.gms @@ -160,6 +160,13 @@ $include inputs_case%ds%etype.csv $onlisting / ; +set jtype "job types used in model (construction and o&m jobs)" +/ +$offlisting +$include inputs_case%ds%jtype.csv +$onlisting +/ ; + Sets nercr "NERC regions" * https://www.nerc.com/pa/RAPA/ra/Reliability%20Assessments%20DL/NERC_LTRA_2021.pdf @@ -442,7 +449,6 @@ set evmc_storage(i) "ev flexibility as direct load control", evmc_shape(i) "ev flexibility as adoptable change to load from response to pricing", fossil(i) "fossil technologies" - fuel_cell(i) "fuel cell technologies", gas_cc_ccs(i) "techs that are gas combined cycle and have CCS", gas_cc(i) "techs that are gas combined cycle", gas_ct(i) "techs that are gas combustion turbine", @@ -752,10 +758,6 @@ if(Sw_H2Combustionupgrade = 0, ban(i)$[i_subsets(i,'h2_combustion')$upgrade(i)] = yes ; ) ; -if(Sw_FuelCell = 0, - ban(i)$i_subsets(i,'fuel_cell') = yes ; -) ; - if(Sw_LfillGas = 0, ban('lfill-gas') = yes ; ) ; @@ -975,7 +977,6 @@ evmc(i)$(not ban(i)) = yes$i_subsets(i,'evmc') ; evmc_storage(i)$(not ban(i)) = yes$i_subsets(i,'evmc_storage') ; evmc_shape(i)$(not ban(i)) = yes$i_subsets(i,'evmc_shape') ; fossil(i)$(not ban(i)) = yes$i_subsets(i,'fossil') ; -fuel_cell(i)$(not ban(i)) = yes$i_subsets(i,'fuel_cell') ; gas_cc_ccs(i)$(not ban(i)) = yes$i_subsets(i,'gas_cc_ccs') ; gas_cc(i)$(not ban(i)) = yes$i_subsets(i,'gas_cc') ; gas_ct(i)$(not ban(i)) = yes$i_subsets(i,'gas_ct') ; @@ -3522,12 +3523,11 @@ $offempty $onempty parameter trancap_init_itlgrp(itlgrp,itlgrpp,trtype) "--MW-- initial upper limit on interface flows between itlgrps" / -*** TEMPORARY 20260402: Skip itlgrp functionality until we fix it -* $offlisting -* $ondelim -* $include inputs_case%ds%trancap_init_itlgrp.csv -* $offdelim -* $onlisting +$offlisting +$ondelim +$include inputs_case%ds%trancap_init_itlgrp.csv +$offdelim +$onlisting / ; $offempty @@ -6597,6 +6597,39 @@ parameter z_rep_inv(t) = 0 ; z_rep_op(t) = 0 ; +*==================================== +* --- Employment Factors --- +*==================================== +* Employment factors of construction and operation of power plants +$onempty +Table employment_factor_plant(i,jtype) "--job-years/MW or job-years/MWh-- employment factors of power plants by technology and job type (construction and o&m jobs)" +$offlisting +$ondelim +$include inputs_case%ds%employment_factor_plant.csv +$offdelim +$onlisting +; +$offempty + +* Employment factors of transmission deployment and flow +parameter employment_factor_inter_transmission(jtype) "--job-years/MW or job-years/$M-- employment factors of transmission lines by job type (construction or o&m jobs)" +/ +$offlisting +$ondelim +$include inputs_case%ds%employment_factor_inter_transmission.csv +$offdelim +$onlisting +/ ; + +* If upgrade techs, construction employment factor is half +* Only apply this to non CCS upgrades if using JEDI EFs since JEDI already specifies CCS upgrade EFs +$ifthen.upgrade_ef %GSw_EmploymentFactor% == "JEDI" +employment_factor_plant(i,"construction")$[upgrade(i) + $(not ccs(i))] = employment_factor_plant(i,"construction") * 0.5 ; +$else.upgrade_ef +employment_factor_plant(i,"construction")$upgrade(i) = employment_factor_plant(i,"construction") * 0.5 ; +$endif.upgrade_ef + *================================================================================================ *== h- and szn-dependent sets and parameters (declared here, populated in d1_temporal_params) === diff --git a/c_mga.gms b/c_mga.gms index 8bf3841b..3bbe7223 100644 --- a/c_mga.gms +++ b/c_mga.gms @@ -12,6 +12,19 @@ eq_MGA_CostEnvelope(t)$[tmodel(t)$Sw_MGA].. * --------------------------------------------------------------------------- $ifthen.mgaobj %GSw_MGA_Objective% == 'capacity' +$ifthen.mgasubobj %GSw_MGA_SubObjective% == 'all' +Equation eq_MGA_Objective "--MW-- Defines generation capacity for MGA" ; +Variable MGA_OBJ "--MW-- Capacity of all technologies to be minimized/maximied" ; +eq_MGA_Objective$Sw_MGA.. + MGA_OBJ + =e= + sum{(i,v,r,t) + $[tmodel(t) + $valcap(i,v,r,t)], + CAP(i,v,r,t) + } +; +$else.mgasubobj Equation eq_MGA_Objective "--MW-- Defines generation capacity for MGA" ; Variable MGA_OBJ "--MW-- Capacity of technology to be minimized/maximied" ; eq_MGA_Objective$Sw_MGA.. @@ -25,6 +38,23 @@ eq_MGA_Objective$Sw_MGA.. } ; +$endif.mgasubobj +* --------------------------------------------------------------------------- + +$elseif.mgaobj %GSw_MGA_Objective% == 'generation' +Equation eq_MGA_Objective "--MW-- Defines generation for MGA" ; +Variable MGA_OBJ "--MWh-- Generation of technology to be minimized/maximied" ; +eq_MGA_Objective$Sw_MGA.. + MGA_OBJ + =e= + sum{(i,v,r,h,t) + $[tmodel(t) + $valgen(i,v,r,t) + $%GSw_MGA_SubObjective%(i)], + GEN(i,v,r,h,t) * hours(h) + } +; + * --------------------------------------------------------------------------- $elseif.mgaobj %GSw_MGA_Objective% == 'transmission' @@ -74,4 +104,55 @@ eq_MGA_Objective$Sw_MGA.. * --------------------------------------------------------------------------- +$elseif.mgaobj %GSw_MGA_Objective% == 'employment' +Equation eq_MGA_Objective "--job-years-- Defines number of job-years for MGA" ; +Variable MGA_OBJ "--job-years-- Total job-years to be minimized/maximized" ; +eq_MGA_Objective$Sw_MGA.. + MGA_OBJ + =e= + sum{(i,v,r,t) + $[tmodel(t) + $valcap(i,v,r,t)], + CAP(i,v,r,t) * pvf_onm(t) * employment_factor_plant(i,"fom") + } + + sum{(i,v,r,h,t) + $[tmodel(t) + $valgen(i,v,r,t)], + GEN(i,v,r,h,t) * pvf_onm(t) * hours(h) * employment_factor_plant(i,"vom") + } + + sum{(i,v,r,t) + $[tmodel(t) + $valinv(i,v,r,t)], + INV(i,v,r,t) * pvf_capital(t) * employment_factor_plant(i,"construction") + } + + # AC construction employment formula here is slightly different than in + # e_report.gms as only cumulative term TRAN_CAPEX_BINS is included here vs + # annual term used in e_report.gms + + sum{(r,rr,tscbin,t) + $[tmodel(t) + $routes_inv(r,rr,"AC",t) + $tsc_binwidth(r,rr,tscbin)], + trans_cost_cap_fin_mult(t) + * ((TRAN_CAPEX_BINS(r,rr,tscbin,t)) + * pvf_capital(t) + * employment_factor_inter_transmission("construction"))} + + + sum{trtype + $[routes_inv(r,rr,trtype,t) + $(not aclike(trtype))], + trans_cost_cap_fin_mult(t) + * transmission_cost_nonac(r,rr,trtype) + * INVTRAN(r,rr,trtype,t) + * employment_factor_inter_transmission("construction") / 2 } + + + sum{(r,rr,trtype,t) + $[tmodel(t) + $routes(r,rr,trtype,t)], + CAPTRAN_ENERGY(r,rr,trtype,t) + * pvf_onm(t) + * employment_factor_inter_transmission("fom") } +; + + $endif.mgaobj diff --git a/cases.csv b/cases.csv index 9d0752e7..0dc5bb24 100644 --- a/cases.csv +++ b/cases.csv @@ -15,7 +15,6 @@ plantchar_biopower,Biopower generators cost and performance characteristics (inp plantchar_coal_ccs,Coal CCS generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_coal_ccs}.csv). Options start with 'coal-ccs_' and the switch should be set to the entire file name (ex: coal-ccs_ATB_2024_moderate),coal-ccs_ATB_(2024)_(conservative|moderate|advanced),coal-ccs_ATB_2024_moderate, plantchar_coal,Coal generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_coal}.csv). Options start with 'coal_' and the switch should be set to the entire file name (ex: coal_ATB_2024_moderate),coal_ATB_(2024)_(moderate),coal_ATB_2024_moderate, plantchar_csp,CSP cost and performance characteristics (inputs\plant_characteristics\{plantchar_csp}.csv). The options for plantchar_csp start with 'csp_' and the switch should be set to the entire file name (ex: csp_ATB_2024_advanced),csp_ATB_(2023|2024)_(conservative|moderate|advanced),csp_ATB_2024_moderate, -plantchar_fuelcell,Fuel cell cost and performance characteristics (inputs\plant_characteristics\{plantchar_fuelcell}.csv). The options for plantchar_fuelcell start with 'fuelcell_' and the switch should be set to the entire file name (ex: fuelcell_ATB_2024_advanced),fuelcell_ATB_2024_(moderate|advanced),fuelcell_ATB_2024_moderate, plantchar_gas_ccs,Natural gas CCS generator cost and performance characteristics (inputs\plant_characteristics\{plantchar_gas_ccs}.csv). Options start with 'gas-ccs' and the switch should be set to the entire file name (ex: gas-ccs_ATB_2024_moderate),gas-ccs_ATB_(2024)_(conservative|moderate|advanced),gas-ccs_ATB_2024_moderate, plantchar_gas,Natural gas generator cost and performance characteristics (inputs\plant_characteristics\{plantchar_gas}.csv). Options start with 'gas_' and the switch should be set to the entire file name (ex: gas_ATB_2024_moderate),gas_ATB_(2024)_(moderate),gas_ATB_2024_moderate, plantchar_geo,Geothermal cost setting (inputs\plant_characteristics\{plantchar_geo}.csv).The options for plantchar_geo start with 'geo_' and the switch should be set to the entire file name (ex: geo_ATB_2023_conservative),geo_ATB_(2023|2024)_(conservative|moderate|advanced),geo_ATB_2024_moderate, @@ -47,7 +46,7 @@ retscen,Retirement Scenario,Nuke60RetireYear; Nuke80RetireYear; NukeEarlyRetireY supplycurve,Wind and Solar Supply Curves,default; 0; naris; 2018,default, uraniumscen,Uranium price scenario,AEO_(2023|2025)_reference,AEO_2025_reference, GSw_Region,Specify column from inputs/userinput/modeled_regions.csv or from {column of hierarchy.csv}/{period-delimited entries to keep from that column},N/A,country/USA, -GSw_ZoneSet,Set of geospatial zones to use as balancing areas (described in inputs/zones/README.md),^(z48|z54|z69|z132|z134|z3109|UTcounty|PJMcounty)$,z132 +GSw_RegionResolution,Specify the spatial resolution of modeled regions,county; ba; aggreg; mixed,aggreg, capcredit_hierarchy_level,Select level at which to aggregate net load for capacity-credit calculation,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,transreg, construction_schedules_suffix,File suffix for construction schedules,default,default, construction_times_suffix,File suffix for construction times by technology,default,default, @@ -134,9 +133,9 @@ GSw_distpv,Turn on/off distpv,0;1,1, GSw_DRShed, switch to turn on/off demand response shed resource,0;1,0, GSw_EFS_Flex,Switch for turning EFS load flexibility on or off,0,0, GSw_EFS2_FlexCase,"Case used for electrification flex_type - format is {1}_{2}, where 1 in [EFS_REFERENCE, EFS_MEDIUM, EFS_HIGH, EFS_Clean2035] and 2 in [Baseflex, Currentflex, Enhancedflex, Uberflex1, Uberflex2]",N/A,EFS_MEDIUM_EnhancedflexStretch2046, +GSw_EmploymentFactor,Employment factor - options to choose from are factor from JEDI model and two papers,JEDI; Mayfield ;Rutovitz ;Ram ,JEDI, GSw_EVMC,Turn on adoptable EV managed charging,0; 1,0, GSw_ForcePrescription,Turn on/off forced prescriptions - turning off will allow unlimited but not free builds in historical years,0; 1,1, -GSw_FuelCell,Turn on/off fuel cells (natural gas / H2) as a technology option,0; 1,0, GSw_FutureHydCF_RepYears,_-delimited years of historical hydro plant data from which to calculate capacity factors representing future hydro,N/A,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022, GSw_GasCurve,"Select natural gas supply curve (0 = cendiv, 1 = national + cendiv, 2 = static, 3 = national)",0; 1; 2; 3,1, GSw_GasCC_H_1x1,Turn on/off both gas-CC_H_1x1 and gas-CC_H_1x1-CCS_mod/max plant options,0; 1,0, @@ -147,7 +146,8 @@ GSw_GenMandate,Turn on/off national Gen Requirement. 2 turns on and applies cons GSw_GenMandateList,Select technology list for national generation standard (see inputs/national_generation/nat_gen_tech_frac.csv),RE; Nuclear; NuclearCCS,RE, GSw_GenMandateScen,Select trajectory for national generation standard (see inputs/national_generation/gen_mandate_trajectory.csv),N/A,100_2035, GSw_Geothermal,"Geothermal can be turned off [0], left to the default representation [1], or have an extended representation [2]",0; 1; 2,1, -GSw_gopt,Select opt file to be used,N/A,1, +GSw_gopt,Select opt file to be used,^[1-4]$,1, +GSw_gopt_mga,Select opt file to be used for MGA runs,^[1-4]$,3, GSw_GrowthAbsCon,Turn on/off absolute growth constraint,0; 1,0, GSw_GrowthConLastYear,The last year that the growth constraint (GSw_GrowthAbsCon) is applied (if it is turned on),int,2026, GSw_GrowthPenalties,Turn on/off relative growth penalties,0; 1,0, @@ -169,6 +169,7 @@ GSw_H2Combustion,Switch to turn on/off H2CT and H2CC techs,0; 1,1, GSw_H2Combustionupgrade,Indicate whether to allow gas-CC and gas-CT to upgrade to H2-CT and H2-CC,0; 1,1, GSw_H2CombinedCycle,Indicate whether to allow H2-CC,0; 1,1, GSw_H2LeakageScen,Scenarios of H2 leakage rates from upstream and process of producing electricity by technology; scenario name options from emission_constraints/h2_leakage_rate.csv,N/A,Fan_et_al_2022/Med, +GSw_HierarchyFile,Indicate the version of the hierarchy file to use (default=hierarchy.csv with 132 zones),default; agg125; agg69; agg54,default, GSw_HourlyChunkAggMethod,How to aggregate CF and load within the chunks specified by GSw_HourlyChunkLengthRep (if set to anything other than 'mean' this switch overrides GSw_PRM_StressLoadAggMethod) (ties for mid are broken by the later hour; i.e. for 4-hour chunks and a setting of 'mid' the 3rd hour is used) (if an integer is provided the index starts at 1; i.e. 1 is the 1st hour),(mean|mid|\d),mean, GSw_HourlyChunkLengthRep,Length of representative-period dispatch timeslices in hours; must be divisible into 24,1; 2; 3; 4; 6; 8; 12; 24,3, GSw_HourlyChunkLengthStress,Length of stress-period dispatch timeslices in hours; must be divisible into 24,1; 2; 3; 4; 6; 8; 12; 24,3, @@ -206,7 +207,7 @@ GSw_Int_CC,"Select intertemporal CC method (0=average undifferentiated, 1=averag GSw_Int_Curt,"Select intertemporal Curt method (0=average undifferentiated, 1=average differentiated , 2=marginal undifferentiated, 3=marginal differentiated)",0; 1; 2; 3,0, GSw_InterDayLinkage,Turn on (1) or off (0) the ability for interday storage techs (specified in tech-subset-table.csv) to shift energy between representative days (non-interday techs are unaffected),0; 1,0, GSw_LfillGas,Turn on/off lfill-gas,0; 1,1, -GSw_LoadProfiles,Name of demand profile matching `inputs/profiles_demand/demand_{GSw_LoadProfiles}.h5` OR an absolute filepath to an EER-formatted demand .h5 file,^(historic|EFS_REFERENCE|EFS_MEDIUM|EFS_HIGH|EFS_Clean2035|EFS_Clean2035clip1pct|EFS_Clean2035_LTS|EFS_MEDIUMStretch2040|EFS_MEDIUMStretch2046|EER2023_Baseline_AEO2022|EER2023_IRAlow|EER2023_IRAmoderate|EER2023_100by2050|EER2025_Baseline_AEO2023|EER2025_IRAlow|EER2025_100by2050|\/.+|[a-zA-Z]:[\\\/].+)$,EER2025_IRAlow, +GSw_LoadProfiles,Name of demand profile matching `inputs/profiles_demand/demand_{GSw_LoadProfiles}.h5` OR an absolute filepath to an EER-formatted demand .h5 file,^(historic|EFS_REFERENCE|EFS_MEDIUM|EFS_HIGH|EFS_Clean2035|EFS_Clean2035clip1pct|EFS_Clean2035_LTS|EFS_MEDIUMStretch2046|EER2023_Baseline_AEO2022|EER2023_IRAlow|EER2023_IRAmoderate|EER2023_100by2050|EER2025_Baseline_AEO2023|EER2025_IRAlow|EER2025_100by2050|\/.+|[a-zA-Z]:[\\\/].+)$,EER2025_IRAlow, GSw_LoadAllocationMethod,"How to allocate state-level load to model regions ('population' uses each region's share of state population, 'state_lpf' uses county-state load participation factors calculated from the NARIS nodal network dataset)",population; state_lpf,population, GSw_Loadpoint,Switch to use or disable a loadpoint for the intertemporal solve after the first iteration,0; 1,0, GSw_LoadSiteCF,Annual capacity factor of optimally sited load (if 0 then optimally sited load is turned off; if between 0 and 1 then load is flexible (obeying stress period weight); if 1 then load is inflexible),float,0, @@ -217,8 +218,8 @@ GSw_MaxDailyCF,Turn on/off daily maximum capacity factor constraint,0; 1,1, GSw_MethaneLeakageScen,Fractional leakage of methane from upstream natural gas production: either float (fixed rate) or scenario name from emission_constraints/methane_leakage_rate.csv,N/A,Alvarez2018_30by2030, GSw_MGA_CostDelta,MGA: Fraction by which to allow objective function to increase when using Modeling to Generate Alternatives (MGA is turned off if set to 0; a common choice for MGA is 0.01),float,0, GSw_MGA_Direction,MGA: Directionality of second optimization,(min|max),min, -GSw_MGA_Objective,MGA: Objective for MGA (uses GSw_MGA_SubObjective to specify technology subset if set to capacity),(capacity|transmission|rasharing|co2),rasharing, -GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity of (only used for GSw_MGA_Objective=capacity),(battery|ccs|coal|dac|fossil|gas|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind),storage, +GSw_MGA_Objective,MGA: Objective for MGA (uses GSw_MGA_SubObjective to specify technology subset if set to capacity),(capacity|generation|transmission|rasharing|co2|employment),capacity, +GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity or generation of (only used for GSw_MGA_Objective=(capacity or generation)),(battery|ccs|coal|dac|fossil|gas|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind|all),storage, GSw_MinCF,Turn on/off regional min CF constraint (applied at i/r level),0; 1,1, GSw_Mingen,Turn on/off min-gen constraints by r/h/szn,0; 1,0, GSw_MingenFixed,Turn on/off fixed min-gen constraints,0; 1,1, @@ -326,7 +327,7 @@ GSw_TransCostMult,Multiplier for bulk BA-BA transmission costs,float,1, GSw_TransHurdleLevel1,Apply hurdle rates from inputs/transmission/cost_hurdle_intra.csv between regions at the specified hierarchy level,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; hurdlereg,transgrp, GSw_TransHurdleLevel2,Apply hurdle rates from inputs/transmission/cost_hurdle_intra.csv between regions at the specified hierarchy level,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; hurdlereg,hurdlereg, GSw_TransHurdleRate,Turn on (1) or off (0) hurdle rates between hierarchy regions as defined by GSw_TransHurdleLevel1/GSw_TransHurdleLevel2 and inputs/transmission/cost_hurdle_intra.csv,0; 1,0, -GSw_TransNetworkSource,Network source for the initial transmission network used in the model,NARIS2024,NARIS2024, +GSw_TransNetworkSource,Network source for the initial transmission network used in the model,NARIS2024; REFS2009,NARIS2024, GSw_TransRestrict,hierarchy level within which to allow new transmission lines,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,country, GSw_TransScen,Transmission expansion scenario (options in inputs/transmission),N/A,default, GSw_TransSquiggliness,Transmission distance multiplier to approximate the squigglier paths followed by actual lines (only applied to NEW lines),float,1, diff --git a/cplex.op2 b/cplex.op2 index e01f19dd..48862a65 100644 --- a/cplex.op2 +++ b/cplex.op2 @@ -68,4 +68,4 @@ barcolnz 100 * bardisplay 2 *** solutiontype (integer): type of solution (basic or non basic): 0 does basic with crossover, 2 skips crossover -* solutiontype 2 +* solutiontype 2 \ No newline at end of file diff --git a/cplex.op3 b/cplex.op3 new file mode 100644 index 00000000..09089416 --- /dev/null +++ b/cplex.op3 @@ -0,0 +1,84 @@ +*** https://www.gams.com/latest/docs/S_CPLEX.html +*** threads (integer): global default thread count +threads = 8 + +*** lpmethod (integer): algorithm to be used for LP problems [4 = barrier] +lpmethod = 4 + +*** advind (integer): advanced basis use [0 = do not use advanced basis] +advind 0 + +*** reslim (integer): solve time limit in seconds [172800 seconds = 2 days] +reslim 172800 + +*** scaind (integer): matrix scaling on/off [1 = modified, more aggressive scaling method] +scaind 1 + +*** aggind (integer): aggregator on/off [5 = aggregator will be applied 5 times] +aggind 5 + +*** iis (boolean): run the conflict refiner also known as IIS finder if the problem is infeasible +iis 1 + +*** eprhs (float): feasibility tolerance [default = 1e-6] +eprhs = 1e-5 + +*** epopt (float): optimality tolerance [default = 1e-6] +epopt = 1e-6 + +*** memoryemphasis (boolean): reduces use of memory but writes TBs of files to disk +memoryemphasis 0 + +*** epmrk (float): Markowitz pivot tolerance +*epmrk = 0.1 + +*** barepcomp (float): tolerance on complementarity for convergence of the barrier algorithm [default 1e-8] +barepcomp = 1e-8 + +*############################################################################################ +*## The settings below can reduce solve time substantially, but their impacts on the solution +*## have not yet been fully characterized, and some of them might do nothing. Use at your own risk. +*## Some background details are available at +*## https://www.slideshare.net/IEA-ETSAP/improving-the-solution-time-of-times-by-playing-with-cplexbarrier +*## https://iea-etsap.org/webinar/CPLEX%20options%20for%20running%20TIMES%20models.pdf +*## This setting is specifically for MGA runs which have difficulties with cplex.opt and cplex.op2 +*## This setting differs from cplex.opt and cplex.op2 in that it: 1. sets predual = -1, which does not +*## dual to optimizer to reduce time; 2. sets barcrossalg = 1, which only performs primal crossover; +*## and 3, sets baralg = 3 + +*** numericalemphasis (boolean): emphasizes precision in numerically unstable or difficult problems [default 0] +* numericalemphasis 1 + +*** depind (integer): dependency checker on/off. 3 = turn on at beginning and end of preprocessing [default -1] +* depind 3 + +*** barcolnz (integer): specifies the number of entries in columns to be considered as dense [default 0] +*** 0 lets CPLEX choose; values ranging from 30-300 can sometimes shorten runtime +barcolnz 100 + +*** barorder (integer): row ordering algorithm selection. 1 = approximate minimum degree (AMD) [default 0] +* barorder 1 + +*** baralg (integer): barrier algorithm selection. 1 = infeasibility-estimate start, 3 = standard barrier [default 0] +baralg 3 + +*** barstartalg (integer): barrier starting point algorithm. 2 = default primal, estimate dual [default 1] +* barstartalg 2 + +*** scaind (described above) +* scaind 0 + +*** Can use bardisplay=2 to print more diagnostics about the barrier method and choice of barcolnz +* bardisplay 2 + +*** solutiontype (integer): type of solution (basic or non basic): 0 does basic with crossover, 2 skips crossover +* solutiontype 2 + +*** predual (integer) [default = 0]: 0 automatic, 1 gives dual to optimizer, -1 does not give dual to optimizer +predual = -1 + +*** barcrossalg (integer) [default = 0]: 0 automatic, 1 primal crossover, 2 dual crossver +barcrossalg = 1 + +*** ppriind (integer): Pricing algorithm +*ppriind = 3 diff --git a/cplex.op4 b/cplex.op4 new file mode 100644 index 00000000..53cd5389 --- /dev/null +++ b/cplex.op4 @@ -0,0 +1,84 @@ +*** https://www.gams.com/latest/docs/S_CPLEX.html +*** threads (integer): global default thread count +threads = 8 + +*** lpmethod (integer): algorithm to be used for LP problems [4 = barrier] +lpmethod = 4 + +*** advind (integer): advanced basis use [0 = do not use advanced basis] +advind 0 + +*** reslim (integer): solve time limit in seconds [172800 seconds = 2 days] +reslim 172800 + +*** scaind (integer): matrix scaling on/off [1 = modified, more aggressive scaling method] +scaind 1 + +*** aggind (integer): aggregator on/off [5 = aggregator will be applied 5 times] +aggind 5 + +*** iis (boolean): run the conflict refiner also known as IIS finder if the problem is infeasible +iis 1 + +*** eprhs (float): feasibility tolerance [default = 1e-6] +eprhs = 1e-5 + +*** epopt (float): optimality tolerance [default = 1e-6] +epopt = 1e-6 + +*** memoryemphasis (boolean): reduces use of memory but writes TBs of files to disk +memoryemphasis 0 + +*** epmrk (float): Markowitz pivot tolerance +*epmrk = 0.1 + +*** barepcomp (float): tolerance on complementarity for convergence of the barrier algorithm [default 1e-8] +barepcomp = 1e-8 + +*############################################################################################ +*## The settings below can reduce solve time substantially, but their impacts on the solution +*## have not yet been fully characterized, and some of them might do nothing. Use at your own risk. +*## Some background details are available at +*## https://www.slideshare.net/IEA-ETSAP/improving-the-solution-time-of-times-by-playing-with-cplexbarrier +*## https://iea-etsap.org/webinar/CPLEX%20options%20for%20running%20TIMES%20models.pdf +*## This setting is specifically for MGA runs which have difficulties with cplex.opt, cplex.op2, and cplex.op3 +*## This setting differs from cplex.opt and cplex.op2 in that it: 1. sets predual = -1, which does not +*## dual to optimizer to reduce time; 2. sets barcrossalg = 1, which only performs primal crossover. +*## It also differs from cplex.op3 in that it keeps baralg at default value (=0) + +*** numericalemphasis (boolean): emphasizes precision in numerically unstable or difficult problems [default 0] +* numericalemphasis 1 + +*** depind (integer): dependency checker on/off. 3 = turn on at beginning and end of preprocessing [default -1] +* depind 3 + +*** barcolnz (integer): specifies the number of entries in columns to be considered as dense [default 0] +*** 0 lets CPLEX choose; values ranging from 30-300 can sometimes shorten runtime +barcolnz 100 + +*** barorder (integer): row ordering algorithm selection. 1 = approximate minimum degree (AMD) [default 0] +* barorder 1 + +*** baralg (integer): barrier algorithm selection. 1 = infeasibility-estimate start, 3 = standard barrier [default 0] +* baralg 3 + +*** barstartalg (integer): barrier starting point algorithm. 2 = default primal, estimate dual [default 1] +* barstartalg 2 + +*** scaind (described above) +* scaind 0 + +*** Can use bardisplay=2 to print more diagnostics about the barrier method and choice of barcolnz +* bardisplay 2 + +*** solutiontype (integer): type of solution (basic or non basic): 0 does basic with crossover, 2 skips crossover +* solutiontype 2 + +*** predual (integer) [default = 0]: 0 automatic, 1 gives dual to optimizer, -1 does not give dual to optimizer +predual = -1 + +*** barcrossalg (integer) [default = 0]: 0 automatic, 1 primal crossover, 2 dual crossver +barcrossalg = 1 + +*** ppriind (integer): Pricing algorithm +*ppriind = 3 diff --git a/cplex.opt b/cplex.opt index 0a6c3ea6..0cc4443f 100644 --- a/cplex.opt +++ b/cplex.opt @@ -68,4 +68,4 @@ barcolnz 30 * bardisplay 2 *** solutiontype (integer): type of solution (basic or non basic): 0 does basic with crossover, 2 skips crossover -* solutiontype 2 +* solutiontype 2 \ No newline at end of file diff --git a/d_solveoneyear.gms b/d_solveoneyear.gms index b3484a80..41ea9390 100644 --- a/d_solveoneyear.gms +++ b/d_solveoneyear.gms @@ -267,6 +267,7 @@ $ifthene.mga %GSw_MGA_CostDelta%>0 $ifthene.mga1 %cur_year%>=%GSw_StartMarkets% *## Activate MGA mode Sw_MGA = 1 ; +ReEDSmodel.optfile = %GSw_gopt_mga% ; solve ReEDSmodel %GSw_MGA_Direction%imizing MGA_OBJ using lp ; *## Deactivate MGA mode Sw_MGA = 0 ; diff --git a/docs/source/user_guide.md b/docs/source/user_guide.md index dd5483ea..7f0864f9 100644 --- a/docs/source/user_guide.md +++ b/docs/source/user_guide.md @@ -36,7 +36,7 @@ Here is partial list of remotely hosted files used by ReEDS: - Switch to `GSw_HourlyType=wek`, which increases the length of the periods from 1 day to 5 days. If all the other switches are left at their defaults, switching to `wek` would increase the coverage from 42 days to 5*42=210 days. - Reduce `GSw_HourlyClusterRegionLevel` to something smaller than transreg (like `st`), and then increase `GSw_HourlyNumClusters` - Switch to `GSw_HourlyClusteAlgorithm=hierarchical` and then increase `GSw_HourlyNumClusters` (although that's less desirable, because hierarchical clustering doesn't do as good of a job of reproducing the actual spatial distribution of CF and load) - - Switch to `Gsw_HourlyType=year`. Although if you're running for the whole US you'll need to turn on region aggregation (`GSw_ZoneSet` in [`z54` or `z69`]) for it to solve. + - Switch to `Gsw_HourlyType=year`. Although if you're running for the whole US you'll need to turn on region aggregation (`GSw_RegionResolution=aggreg` and `GSw_HierarchyFile` in [`default` or `agg1`, or `agg2` or `agg3`]) for it to solve. - `GSw_HourlyClusterAlgorithm` - If set to 'hierarchical', then hierarchical clustering is used via @@ -47,14 +47,15 @@ Here is partial list of remotely hosted files used by ReEDS: ``` - If set to 'optimized', then a two-step custom optimization is performed using the `hourly_repperiods.optimize_period_weights()` and `hourly_repperiods.assign_representative_days()` functions to minimize the deviation in regional load and PV/wind CF between the weighted representative periods and the full year. - - If set to a string containing the substring 'user', then instead of optimizing the choice of representative periods for this run, the model reads a user-supplied file at `inputs/temporal/period_szn_{GSw_HourlyClusterAlgorithm}.csv`. - - So if you want to use the example period:szn map, set `GSw_HourlyClusterAlgorithm=user` and provide `inputs/temporal/period_szn_user.csv`. - - If you want to specify a different period:szn map, then create a file with your label in the filename and set `GSw_HourlyClusterAlgorithm` to that same label (which must contain the substring 'user'). For example, for `GSw_HourlyClusterAlgorithm=user_myname_20230130`, provide `inputs/temporal/period_szn_user_myname_20230130.csv`. - - Make sure the settings for `GSw_HourlyType` and `GSw_HourlyWeatherYears` match your user-defined map. For example, if your user-defined map includes 365 representative days for weather year 2012, then set `GSw_HourlyType=day` and `GSw_HourlyWeatherYears=2012`. + - If set to a string containing the substring 'user', then instead of optimizing the choice of representative periods for this run, we read them from the inputs/temporal/period_szn_user.csv file. + - The scenario name is in the first column, labeled 'scenario'. ReEDS will use rows with the same label as `GSw_HourlyClusterAlgorithm`. + - So if you want to use the example period:szn map, just set `GSw_HourlyClusterAlgorithm=user`. + - If you want to specify a different period:szn map, then add your mapping at the bottom of inputs/temporal/period_szn_user.csv with a unique scenario name in the 'scenario' column, and set `GSw_HourlyClusterAlgorithm` to your unique scenario name, *which must contain the substring 'user'*. (For example, I could use a mapping called 'user_myname_20230130' by adding my period:szn map to inputs/temporal/period_szn_user.csv with 'user_myname_20230130' in the 'scenario' column and setting `GSw_HourlyClusterAlgorithm=user_myname_20230130`.) + - Make sure the settings for `GSw_HourlyType` and `GSw_HourlyWeatherYears` match your user-defined map. For example, if your 'user_myname_20230130' map includes 365 representative days for weather year 2012, then set `GSw_HourlyType=day` and `GSw_HourlyWeatherYears=2012`. - You can feed the period:szn mapping from a completed run into the inputs folder of your repo to force ReEDS to use the same representative or stress periods. More detail can be found in the postprocessing tools guide. -- `GSw_PRM_StressThreshold`: The default setting of 'transgrp_1_EUE_sum' means a threshold of "**1** ppm NEUE in each **transgrp**", with stress periods selected by the daily **sum** of **EUE** within each **transgrp**. +- `GSw_PRM_StressThreshold`: The default setting of 'transgrp_10_EUE_sum' means a threshold of "**10** ppm NEUE in each **transgrp**", with stress periods selected by the daily **sum** of **EUE** within each **transgrp**. - The first argument can be selected from ['country', 'interconnect', 'nercr', 'transreg', 'transgrp', 'st', 'r'] and specifies the hierarchy level within which to compare RA performance against the threshold. - The second argument can be any float and specifies the RA performance threshold in parts per million [ppm]. - The third argument can be 'NEUE' or 'EUE', specifying which metric to use when selecting stress periods. If set to 'NEUE' the model will add stress periods with the largest **fraction** of dropped load; if set to 'EUE' the model will add stress periods with the largest **absolute MWh** of dropped load. @@ -163,7 +164,7 @@ The low cost scenario assumes further declines from 2030 to 2050. Fixed O&M values are assumed to be 5% of CAPEX (source: ) Electrolyzer performance (efficiency) as well as SMR cost and performance assumptions are derived from assumptions [H2A: Hydrogen Analysis Production Models](https://www.nrel.gov/hydrogen/h2a-production-models.html), with guidance from Paige Jadun. -See original input assumptions in the [ReEDS_Input_Processing repo](https://github.com/ReEDS-Model/ReEDS_Input_Processing/blob/main/hydrogen/costs/H2ProductionCosts-20210414.xlsx). +See original input assumptions in the [ReEDS-2.0_Input_Processing repo](https://github.nrel.gov/ReEDS/ReEDS-2.0_Input_Processing/blob/main/H2/costs/H2ProductionCosts-20210414.xlsx). Note that SMR costs are currently in 2018$ and electrolyzer costs are in 2022$. @@ -182,7 +183,7 @@ Note that SMR costs are currently in 2018$ and electrolyzer costs are in 2022$. | Storage | Electric load | MWh/metric ton | The values in `H2_transport_and_storage_costs.csv` are based on raw data provided from the SERA model by Paige Jadun. -The raw data are formatted by the [`process-h2-inputs.py` script](https://github.com/ReEDS-Model/ReEDS_Input_Processing/blob/main/hydrogen/process-h2-inputs.py) in the input processing repository. +The raw data are formatted by the [`process-h2-inputs.py` script](https://github.nrel.gov/ReEDS/ReEDS-2.0_Input_Processing/blob/main/H2/process-h2-inputs.py) in the input processing repository. ### Intra-Regional Hydrogen Transport Cost @@ -379,9 +380,29 @@ In addition, the `GSw_ReducedResource` switch allows for a uniform reduction of ## Transmission +Most transmission input files are in the `inputs/transmission/` folder. + +### Input files + +1. *cost_hurdle_country.csv*: Indicates the hurdle rate for transmission flows between USA/Canada and USA/Mexico. +1. *rev_transmission_basecost.csv*: Base transmission costs (before terrain multipliers) used in reV. Sources for numeric values are: + 1. TEPPC: + 1. SCE: + 1. MISO: + 1. A more recent guide with a working link (as of 20230227) is available at . + 1. Southeast: Private communication with a representative Southeastern utility +1. *transmission_capacity_future_baseline.csv*: Historically installed (since 2010) and currently planned transmission capacity additions. +1. *transmission_capacity_future_{`GSw_TransScen`}.csv*: Available future routes for transmission capacity as specified by `GSw_TransScen`. +1. *transmission_capacity_init_AC_NARIS2024.csv*: Initial AC transmission capacities between 134 US ReEDS zones. Calculated using the code available at and nodal network data from . The method is described by Brown, P.R. et al 2023, "A general method for estimating zonal transmission interface limits from nodal network data", in prep. +1. *transmission_capacity_init_AC_REFS2009.csv*: Initial AC transmission capacities between 134 US ReEDS zones. Calculated for . +1. *transmission_capacity_init_nonAC.csv*: Initial DC transmission capacities between 134 US ReEDS zones. +1. *transmission_cost_ac_500kv_ba.csv* and *transmission_distance_ba.csv*: Distance and cost for a representative transmission route between each pair of 134 US ReEDS zones, assuming a 500 kV single-circuit line. Routes are determined by the reV model using a least-cost-path algorithm accounting for terrain and land type multipliers. Costs represent the appropriate base cost from rev_transmission_basecost.csv multiplied by the appropriate terrain and land type multipliers for each 90m pixel crossed by the path. Endpoints are in inputs/shapefiles/transmission_endpoints and represent a point within the largest urban area in each of the 134 ReEDS zones. +1. *transmission_cost_dc_ba.csv*: Same as transmission_cost_ac_500kv_ba.csv except assuming a 500 kV bipole DC line. + + ### Relevant switches -1. `GSw_ZoneSet`: Defines the model zones via the `inputs/zones/{GSw_ZoneSet}` files. +1. `GSw_HierarchyFile`: Indicate the suffix of the inputs/hierarchy.csv file you wish to use. 1. By default the transreg boundaries are used for operating reserve sharing, capacity credit calculations, and the boundaries for limited-transmission cases. 1. `GSw_TransInvMaxLongTerm`: Limit on annual transmission deployment nationwide **IN/AFTER** `firstyear_trans_longterm`, measured in TW-miles 1. `GSw_TransInvMaxNearTerm`: Limit on annual transmission deployment nationwide **BEFORE** `firstyear_trans_longterm`, measured in TW-miles @@ -391,9 +412,7 @@ In addition, the `GSw_ReducedResource` switch allows for a uniform reduction of 1. `GSw_TransHurdle`: Intra-US hurdle rate for interzonal flows, measured in $2004/MWh 1. `GSw_TransHurdleLevel`: Indicate the level of hierarchy.csv between which to apply the hurdle rate specified by `GSw_TransHurdle`. i.e. if set to ‘st’, intra-state flows will have no hurdle rates but inter-state flows will have hurdle rates specified by `GSw_TransHurdle`. 1. `GSw_TransRestrict`: Indicate the level of hierarchy.csv within which to allow transmission expansion. i.e. if set to ‘st’, no inter-state expansion is allowed. -1. `GSw_TransScen`: Indicate the inputs/transmission/transmission_capacity_future_{`GSw_TransScen`}.csv file to use, which includes the list of interfaces that can be expanded. -Note that the full list of expandable interfaces is indicated by this file plus transmission_capacity_future_default.csv (currently planned additions) plus existing AC and DC interfaces (which can be expanded by default). -Applies to AC, LCC, and VSC. +1. `GSw_TransScen`: Indicate the inputs/transmission/transmission_capacity_future_{`GSw_TransScen`}.csv file to use, which includes the list of interfaces that can be expanded. Note that the full list of expandable interfaces is indicated by this file plus transmission_capacity_future_default.csv (currently planned additions) plus transmission_capacity_init_AC_NARIS2024.csv (existing AC interfaces, which can be expanded by default) plus transmission_capacity_init_nonAC.csv (existing DC connections, which can be expanded by default). Applies to AC, LCC, and VSC. 1. `GSw_PRM_hierarchy_level`: Level of hierarchy.csv within which to calculate net load, used for capacity credit. Larger levels indicate more planning coordination between regions. 1. `GSw_PRMTRADE_level`: Level of hierarchy.csv within which to allow PRM trading. By default it’s set to ‘country’, indicating no limits. If set to ‘r’, no PRM trading is allowed. @@ -596,7 +615,7 @@ MGA is turned off if set to 0; a reasonable choice for MGA is in the range of 0. - `GSw_MGA_Direction` (default `min`): Directionality of the second optimization. Options are `min` or `max`. - `GSw_MGA_Objective` (default `capacity`): Objective for MGA (uses `GSw_MGA_SubObjective` to specify technology subset if set to `capacity`). -Options are `capacity`, `transmission`, `rasharing`, and `co2`. +Options are `capacity`, `generation`, `transmission`, `rasharing`, and `co2`. - `GSw_MGA_SubObjective` (default `fossil`): Technology subset to minimize or maximize the capacity of (only used for `GSw_MGA_Objective = capacity`). Options are the column names in the `inputs/tech-subset-table.csv` file. diff --git a/e_report.gms b/e_report.gms index ebd14d10..a1a15e4c 100644 --- a/e_report.gms +++ b/e_report.gms @@ -2072,6 +2072,61 @@ h2_usage(r,h,t)$tmodel_new(t) = + sum{(i,v)$[valgen(i,v,r,t)$h2_combustion(i)], GEN.l(i,v,r,h,t) * h2_combustion_intensity * heat_rate(i,v,r,t) } ; +*========================= +* EMPLOYMENT +*========================= +* Employment from generators +* Generator O&M employment +employment_generator_fom_ivrt(i,v,r,t)$valcap(i,v,r,t) = CAP.l(i,v,r,t) * employment_factor_plant(i,"fom") ; +employment_generator_vom_ivrt(i,v,r,t)$valgen(i,v,r,t) = sum{h, GEN.l(i,v,r,h,t) + * hours(h) + * employment_factor_plant(i,"vom")} ; +employment_generator_om_ivrt(i,v,r,t) = employment_generator_fom_ivrt(i,v,r,t) + employment_generator_vom_ivrt(i,v,r,t) ; + +* Generator construction employment +employment_generator_construction_inv_ivrt(i,v,r,t)$valinv(i,v,r,t) = INV.l(i,v,r,t) * employment_factor_plant(i,"construction") ; +employment_generator_construction_ivrt(i,v,r,t) = employment_generator_construction_inv_ivrt(i,v,r,t) + sum{tt$tprev(t,tt),employment_generator_construction_inv_ivrt(i,v,r,tt)} ; +* Total generator employment +employment_generator_irt(i,r,t) = sum{v, employment_generator_om_ivrt(i,v,r,t) + employment_generator_construction_ivrt(i,v,r,t)} ; + +* Employment from transmission +* Transmission construction employment +employment_trans_construction_rt(r,rr,t) = +* AC lines +sum{tscbin + $[routes_inv(r,rr,"AC",t) + $tsc_binwidth(r,rr,tscbin)], + trans_cost_cap_fin_mult(t) + * ((TRAN_CAPEX_BINS.l(r,rr,tscbin,t) - sum{tt$tprev(t,tt), TRAN_CAPEX_BINS.l(r,rr,tscbin,tt)}) + * employment_factor_inter_transmission("construction")) } +* non AC lines ++ sum{trtype + $[routes_inv(r,rr,trtype,t) + $(not aclike(trtype))], + trans_cost_cap_fin_mult(t) + * transmission_cost_nonac(r,rr,trtype) + * INVTRAN.l(r,rr,trtype,t) + * employment_factor_inter_transmission("construction") / 2 } ; + +* Transmission O&M employment +employment_trans_om_rt(r,rr,t) = sum{trtype + $[routes(r,rr,trtype,t)], + CAPTRAN_ENERGY.l(r,rr,trtype,t) + * employment_factor_inter_transmission("fom") } ; + +* Total transmission employment +employment_trans_rt(r,t) = sum{rr,(employment_trans_construction_rt(r,rr,t) + employment_trans_om_rt(r,rr,t)) / 2} ; + +* Total O&M employment (generator + transmission) +employment_tot_om_rt(r,t) = sum{(i,v), employment_generator_om_ivrt(i,v,r,t)} + sum{rr,(employment_trans_om_rt(r,rr,t)) / 2} ; + +* Total construction employment (generator + transmission) +employment_tot_construction_rt(r,t) = sum{(i,v), employment_generator_construction_ivrt(i,v,r,t)} + sum{rr,(employment_trans_construction_rt(r,rr,t)) / 2} ; + +* Total employment (generator + transmission) + (construction + O&M) +employment_tot_rt(r,t) = sum{i, employment_generator_irt(i,r,t)} + employment_trans_rt(r,t) ; +employment_tot_t(t) = sum{r, employment_tot_rt(r,t)} ; + *======================================== * Calculate powfrac *======================================== diff --git a/e_report_params.csv b/e_report_params.csv index 70b37020..6cb16126 100644 --- a/e_report_params.csv +++ b/e_report_params.csv @@ -68,6 +68,19 @@ curt_rate(t),frac,fraction of VRE generation that is curtailed,,, "emit_r(etype,eall,r,t)",metric tons,"emissions by pollutant, regional",,, "emit_rate_regional(r,t)",metric tons,"regional average CO2 emissions rate, used in state CO2 caps",,, "emit_weighted(etype,eall)",metric tons * pvf,national emissions * pvf_onm,,, +"employment_generator_fom_ivrt(i,v,r,t)",jobs,generator fixed o&m jobs,,, +"employment_generator_vom_ivrt(i,v,r,t)",jobs,generator variable o&m jobs,,, +"employment_generator_om_ivrt(i,v,r,t)",jobs,generator variable o&m jobs,,, +"employment_generator_construction_inv_ivrt(i,v,r,t)",jobs,generator construction jobs,,, +"employment_generator_construction_ivrt(i,v,r,t)",jobs,cumulative generator construction jobs,,, +"employment_generator_irt(i,r,t)",jobs,generator jobs by tech and region,,, +"employment_trans_construction_rt(r,rr,t)",jobs,transmission construction jobs,,, +"employment_trans_om_rt(r,rr,t)",jobs,transmission o&m jobs,,, +"employment_trans_rt(r,t)",jobs,total transmission jobs by year,,, +"employment_tot_om_rt(r,t)",jobs,total O&M jobs by year and region,,, +"employment_tot_construction_rt(r,t)",jobs,total construction jobs by year and region,,, +"employment_tot_rt(r,t)",jobs,total jobs by region and year,,, +"employment_tot_t(t)",jobs,all jobs nation-wide by year,,, error_check(*),unitless,set of checks to determine if there is an error - values should be zero if there is no error,,, "error_gen(i,v,r,allh,t)",MWh,"erroneous generation that disobeys valgen(i,v,r,t)",,, "excess_load(r,allh,t)",MW,level values of EXCESS variable for surplus load,,, diff --git a/input_processing/copy_files.py b/input_processing/copy_files.py index 90e22a09..3e0edbbe 100644 --- a/input_processing/copy_files.py +++ b/input_processing/copy_files.py @@ -11,7 +11,6 @@ import yaml import json import h5py -from pathlib import Path # Local Imports sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) import reeds @@ -181,6 +180,7 @@ def get_regions_and_agglevel( reeds_path, inputs_case, save_regions_and_agglevel=True, + NARIS=False ): """ Create a regional mapping to help filter for specific regions and aggregation levels. @@ -192,18 +192,17 @@ def get_regions_and_agglevel( """ sw = reeds.io.get_switches(inputs_case) - ## TEMPORARY 20260402: Load the full regions list - ## Use the line below once we make the switch - # hierarchy = reeds.io.assemble_hierarchy(inputs_case) + # Load the full regions list hierarchy = pd.read_csv( - Path(reeds.io.reeds_path, 'inputs', 'zones', sw.GSw_ZoneSet, 'hierarchy_from134.csv') + os.path.join(reeds_path, 'inputs', 'hierarchy{}.csv'.format( + '' if (sw['GSw_HierarchyFile'] == 'default') + else '_'+sw['GSw_HierarchyFile'])) ) hierarchy['offshore'] = 0 # Append offshore zones if using if int(sw.GSw_OffshoreZones): - hierarchy_offshore = reeds.io.assemble_hierarchy( - fpath=os.path.join(reeds_path, 'inputs', 'zones', 'hierarchy_offshore.csv'), - extra=False, + hierarchy_offshore = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'hierarchy_offshore.csv') ).assign(offshore=1) hierarchy = pd.concat([hierarchy, hierarchy_offshore], ignore_index=True) @@ -214,11 +213,12 @@ def get_regions_and_agglevel( index=False, header=True ) + if not NARIS: + hierarchy = hierarchy.loc[hierarchy.country.str.lower()=='usa'].copy() + # Add a row for each county - ## TEMPORARY 20260402: Use the old 134-zone county2zone until the aggregation approach is updated - county2zone = ( - reeds.io.get_county2zone(GSw_ZoneSet='z134', as_map=False) - .rename(columns={'r':'ba'}) + county2zone = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'county2zone.csv'), dtype={'FIPS':str}, ) county2zone['county'] = 'p' + county2zone.FIPS county2zone.to_csv( @@ -232,32 +232,44 @@ def get_regions_and_agglevel( # Subset hierarchy for the region of interest (based on the GSw_Region switch) # Parse the GSw_Region switch. If it includes a '/' character, it has the format # {column of hierarchy.csv}/{period-delimited entries to keep from that column}. - hier_sub = pd.DataFrame() - # allow the list defined by the user to include multiple spatial resolutions - region_groups = sw['GSw_Region'].split('//') if '//' in sw['GSw_Region'] else [sw['GSw_Region']] - # separate lists associated with each spatial resolution - for region_group in region_groups: - GSw_RegionLevel, GSw_Region = region_group.split('/') - GSw_Region = GSw_Region.split('.') - - hier_sub_partial = pd.concat([ - hierarchy[hierarchy[GSw_RegionLevel] == region] for region in GSw_Region - ]) + if '/' in sw['GSw_Region']: + hier_sub = pd.DataFrame() + # allow the list defined by the user to include multiple spatial resolutions + region_groups = sw['GSw_Region'].split('//') if '//' in sw['GSw_Region'] else [sw['GSw_Region']] + # separate lists associated with each spatial resolution + for region_group in region_groups: + GSw_RegionLevel, GSw_Region = region_group.split('/') + GSw_Region = GSw_Region.split('.') + + hier_sub_partial = pd.concat([ + hierarchy[hierarchy[GSw_RegionLevel] == region] for region in GSw_Region + ]) + + hier_sub = pd.concat([hier_sub, hier_sub_partial]) + # Otherwise use the modeled_regions.csv file to define the regions + else: + modeled_regions = pd.read_csv( + os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv')) + modeled_regions.columns = modeled_regions.columns.str.lower() + val_r_in = list( + modeled_regions[~modeled_regions[sw['GSw_Region'].lower()].isna()]['r'].unique()) + hier_sub = hierarchy[hierarchy['ba'].isin(val_r_in)].copy() - hier_sub = pd.concat([hier_sub, hier_sub_partial]) # Read region resolution switch to determine agglevel agglevel = sw['GSw_RegionResolution'].lower() # Check if desired spatial resolution is mixed if agglevel == 'mixed': + #Set value in resolution column of hier_sub to match value assigned in modeled_regions.csv region_def = pd.read_csv( - os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv') - )[['r', sw.GSw_ZoneSet]] + os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv')) + region_def = region_def[['r', sw['GSw_Region']]] - res_map = region_def.set_index('r').squeeze(1).to_dict() + res_map = region_def.set_index('r')[sw['GSw_Region']].to_dict() hier_sub['resolution'] = hier_sub['ba'].map(res_map) + else: hier_sub['resolution'] = agglevel @@ -325,7 +337,7 @@ def get_regions_and_agglevel( os.path.join(inputs_case, 'val_r_all.csv'), header=False, index=False) # Rename columns and save as hierarchy_with_res.csv for use in agglevel_variables function - hier_sub.drop(columns='offshore', errors='ignore').rename(columns={'r':'*r'}).to_csv( + hier_sub.rename(columns={'r':'*r'}).to_csv( os.path.join(inputs_case, 'hierarchy_with_res.csv'), index=False) # Drop county name and resolution columns @@ -350,7 +362,7 @@ def get_regions_and_agglevel( if sw.GSw_RegionResolution == 'mixed': mod_reg = pd.read_csv( os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv')) - if 'aggreg' in mod_reg[sw.GSw_ZoneSet].tolist(): + if 'aggreg' in mod_reg[sw.GSw_Region].tolist(): hier_sub['itlgrp'] = hier_sub['aggreg'] hier_sub[['r','itlgrp']].rename(columns={'r':'*r'}).to_csv( os.path.join(inputs_case, 'hierarchy_itlgrp.csv'), index=False) @@ -360,7 +372,7 @@ def get_regions_and_agglevel( os.path.join(inputs_case, 'val_itlgrp.csv'), header=False, index=False) # Drop any substate region columns as these will no longer be needed - hier_sub = hier_sub.drop(['county', 'ba', 'itlgrp'], axis=1) + hier_sub = hier_sub.drop(['county','ba','itlgrp','st_interconnect'],axis=1) # Populate val_st as unique states (not st_int) from the subsetted hierarchy table # Also include "voluntary" state for modeling voluntary market REC trading @@ -389,7 +401,7 @@ def get_regions_and_agglevel( os.path.join(inputs_case, 'offshore.csv'), index=False, header=False, ) - levels = [i for i in hier_sub if i != 'offshore'] + levels = list(hier_sub.columns) valid_regions = {level: list(hier_sub[level].unique()) for level in levels} val_r = sorted(valid_regions['r']) @@ -623,6 +635,8 @@ def subset_to_valid_regions( # Transmission files need to be filtered differently to allow interfaces between BA and county resolution regions transmission_files = [ + 'transmission_capacity_init_AC_r.csv', + 'transmission_capacity_init_nonAC.csv', 'transmission_cost_ac.csv', 'transmission_cost_dc.csv', 'transmission_distance.csv', @@ -1074,11 +1088,7 @@ def write_disagg_data_files(runfiles, inputs_case): # region-to-county fractions, and the latter is needed to calculate # state-to-county and BA-to-county fractions. county_r_map = reeds.io.get_county2zone(os.path.dirname(inputs_case)) - ## TEMPORARY 20260402: Use the old 134-zone county2zone until the aggregation approach is updated - county2zone = ( - reeds.io.get_county2zone(GSw_ZoneSet='z134', as_map=False) - .rename(columns={'r':'ba'}) - ) + county2zone = reeds.io.get_county2zone(as_map=False) county2zone['county'] = 'p' + county2zone['FIPS'].astype(str).str.zfill(5) county2zone['r'] = county2zone['FIPS'].map(county_r_map) @@ -1335,6 +1345,13 @@ def write_miscellaneous_files( )[sw['GSw_H2LeakageScen']].rename_axis('*i').round(5).to_csv( os.path.join(inputs_case,'h2_leakage_rate.csv')) + # Transmission employment factors: + pd.read_csv( + os.path.join(reeds_path,'inputs','employment','employment_factor_inter_transmission.csv'), + index_col='jtype', + )[sw['GSw_EmploymentFactor']].rename_axis('*jtype').round(8).to_csv( + os.path.join(inputs_case,'employment_factor_inter_transmission.csv')) + # Add this_year to years_until_endogenous to generate the tech-specific firstyear.csv file scalars = reeds.io.get_scalars(full=True) ( @@ -1572,13 +1589,14 @@ def generate_maps_gpkg(inputs_case): #%% =========================================================================== ### --- PROCEDURE --- ### =========================================================================== -def main(reeds_path, inputs_case): +def main(reeds_path, inputs_case, NARIS=False): """ Run copy_files.py for use in the ReEDS workflow Parameters: reeds_path : str (Path to the ReEDS directory) inputs_case : str (Path to the run/inputs_case directory) + NARIS : Ture/False (NARIS: North American Renewable Integration Study) Returns: None (Writes files to the inputs_case directory) @@ -1587,7 +1605,7 @@ def main(reeds_path, inputs_case): ### --- Gather dataframes and dictionaries necessary for the script execution --- ### =========================================================================== # Obtain data necessary to filter and aggregate regions - regions_and_agglevel = get_regions_and_agglevel(reeds_path, inputs_case) + regions_and_agglevel = get_regions_and_agglevel(reeds_path, inputs_case, NARIS=NARIS) # Use agglevel_variables function to obtain spatial resolution variables agglevel_variables = reeds.spatial.get_agglevel_variables(reeds_path, inputs_case) @@ -1664,7 +1682,8 @@ def main(reeds_path, inputs_case): # #%% Settings for testing ### # reeds_path = reeds.io.reeds_path - # inputs_case = os.path.join(reeds_path,'runs','v20260305_itlM0_USA_defaults','inputs_case') + #inputs_case = os.path.join(reeds_path,'runs','test_employment_Pacific','inputs_case') + #NARIS = False # ---- Set up logger ---- diff --git a/inputs/employment/employment_factor_inter_transmission.csv b/inputs/employment/employment_factor_inter_transmission.csv new file mode 100644 index 00000000..1abcc94b --- /dev/null +++ b/inputs/employment/employment_factor_inter_transmission.csv @@ -0,0 +1,3 @@ +jtype,JEDI,Mayfield,Rutovitz,Ram +construction,0.00000331,0.00000499,0.00000029,0.00000596 +fom,0.00075584,0.444,0,0 \ No newline at end of file diff --git a/inputs/employment/employment_factor_plant_JEDI.csv b/inputs/employment/employment_factor_plant_JEDI.csv new file mode 100644 index 00000000..ae6cb8f9 --- /dev/null +++ b/inputs/employment/employment_factor_plant_JEDI.csv @@ -0,0 +1,206 @@ +,construction,fom,vom +battery_li,0.937020565,0.033333333,0 +biopower,3.76446807,1.453074326,0 +beccs_mod,3.76446807,1.453074326,0 +beccs_max,3.76446807,1.453074326,0 +coal-CCS_mod,4.196159448,0.186153846,0.00005346 +coal-CCS_max,4.196159448,0.186153846,0.00005346 +coal-CCS-F1,4.196159448,0.186153846,0.00005346 +coal-CCS-F2,4.196159448,0.186153846,0.00005346 +coal-CCS-F3,4.196159448,0.186153846,0.00005346 +Coal-IGCC,4.149232006,0.181538462,0.00003725 +coal-new,2.663868535,0.16,0.00003948 +CoalOldScr,2.663868535,0.16,0.00003948 +CoalOldUns,2.663868535,0.16,0.00003948 +CofireNew,2.663868535,0.16,0.00003948 +CofireOld,2.663868535,0.16,0.00003948 +csp-ns,5.860286945,0.257823504,0 +distpv,2.97777666,0.203887755,0 +Gas-CC,0.57898781,0.052,0.00002764 +Gas-CC-CCS_mod,1.301540146,0.072,0.00005346 +Gas-CC-CCS_max,1.301540146,0.072,0.00005346 +Gas-CC-CCS-F1,1.301540146,0.072,0.00005346 +Gas-CC-CCS-F2,1.301540146,0.072,0.00005346 +Gas-CC-CCS-F3,1.301540146,0.072,0.00005346 +Gas-CT,1.124155973,0.28,0.00004233 +H2-CT,1.124155973,0.28,0 +H2-CC,0.57898781,0.052,0 +geothermal,4.614237729,0.15681119,0.00003511 +Hydro,3.088992778,0.019831569,0 +lfill-gas,0.57898781,0.052,0 +Nuclear,13.74608053,1.042875956,0.00002946 +Nuclear-SMR,4.35325963,0.278978818,0.00001645 +o-g-s,0.57898781,0.052,0.00002764 +pumped-hydro,4.437357277,0.105776354,0 +pumped-hydro-flex,4.437357277,0.105776354,0 +upv_1,2.31800771,0.049966822,0 +upv_2,2.31800771,0.049966822,0 +upv_3,2.31800771,0.049966822,0 +upv_4,2.31800771,0.049966822,0 +upv_5,2.31800771,0.049966822,0 +upv_6,2.31800771,0.049966822,0 +upv_7,2.31800771,0.049966822,0 +upv_8,2.31800771,0.049966822,0 +upv_9,2.31800771,0.049966822,0 +upv_10,2.31800771,0.049966822,0 +pvb1_1,2.31800771,0.049966822,0 +pvb1_2,2.31800771,0.049966822,0 +pvb1_3,2.31800771,0.049966822,0 +pvb1_4,2.31800771,0.049966822,0 +pvb1_5,2.31800771,0.049966822,0 +pvb1_6,2.31800771,0.049966822,0 +pvb1_7,2.31800771,0.049966822,0 +pvb1_8,2.31800771,0.049966822,0 +pvb1_9,2.31800771,0.049966822,0 +pvb1_10,2.31800771,0.049966822,0 +pvb2_1,2.31800771,0.049966822,0 +pvb2_2,2.31800771,0.049966822,0 +pvb2_3,2.31800771,0.049966822,0 +pvb2_4,2.31800771,0.049966822,0 +pvb2_5,2.31800771,0.049966822,0 +pvb2_6,2.31800771,0.049966822,0 +pvb2_7,2.31800771,0.049966822,0 +pvb2_8,2.31800771,0.049966822,0 +pvb2_9,2.31800771,0.049966822,0 +pvb2_10,2.31800771,0.049966822,0 +pvb3_1,2.31800771,0.049966822,0 +pvb3_2,2.31800771,0.049966822,0 +pvb3_3,2.31800771,0.049966822,0 +pvb3_4,2.31800771,0.049966822,0 +pvb3_5,2.31800771,0.049966822,0 +pvb3_6,2.31800771,0.049966822,0 +pvb3_7,2.31800771,0.049966822,0 +pvb3_8,2.31800771,0.049966822,0 +pvb3_9,2.31800771,0.049966822,0 +pvb3_10,2.31800771,0.049966822,0 +wind-ofs_1,1.747743604,0.11549396,0 +wind-ofs_2,1.747743604,0.11549396,0 +wind-ofs_3,1.747743604,0.11549396,0 +wind-ofs_4,1.747743604,0.11549396,0 +wind-ofs_5,1.747743604,0.11549396,0 +wind-ofs_6,1.747743604,0.11549396,0 +wind-ofs_7,1.747743604,0.11549396,0 +wind-ofs_8,1.747743604,0.11549396,0 +wind-ofs_9,1.747743604,0.11549396,0 +wind-ofs_10,1.747743604,0.11549396,0 +wind-ons_1,1.233305044,0.033060233,0 +wind-ons_2,1.233305044,0.033060233,0 +wind-ons_3,1.233305044,0.033060233,0 +wind-ons_4,1.233305044,0.033060233,0 +wind-ons_5,1.233305044,0.033060233,0 +wind-ons_6,1.233305044,0.033060233,0 +wind-ons_7,1.233305044,0.033060233,0 +wind-ons_8,1.233305044,0.033060233,0 +wind-ons_9,1.233305044,0.033060233,0 +wind-ons_10,1.233305044,0.033060233,0 +csp1_1,5.860286945,0.257823504,0 +csp1_2,5.860286945,0.257823504,0 +csp1_3,5.860286945,0.257823504,0 +csp1_4,5.860286945,0.257823504,0 +csp1_5,5.860286945,0.257823504,0 +csp1_6,5.860286945,0.257823504,0 +csp1_7,5.860286945,0.257823504,0 +csp1_8,5.860286945,0.257823504,0 +csp1_9,5.860286945,0.257823504,0 +csp1_10,5.860286945,0.257823504,0 +csp1_11,5.860286945,0.257823504,0 +csp1_12,5.860286945,0.257823504,0 +csp2_1,5.860286945,0.257823504,0 +csp2_2,5.860286945,0.257823504,0 +csp2_3,5.860286945,0.257823504,0 +csp2_4,5.860286945,0.257823504,0 +csp2_5,5.860286945,0.257823504,0 +csp2_6,5.860286945,0.257823504,0 +csp2_7,5.860286945,0.257823504,0 +csp2_8,5.860286945,0.257823504,0 +csp2_9,5.860286945,0.257823504,0 +csp2_10,5.860286945,0.257823504,0 +csp2_11,5.860286945,0.257823504,0 +csp2_12,5.860286945,0.257823504,0 +csp3_1,5.860286945,0.257823504,0 +csp3_2,5.860286945,0.257823504,0 +csp3_3,5.860286945,0.257823504,0 +csp3_4,5.860286945,0.257823504,0 +csp3_5,5.860286945,0.257823504,0 +csp3_6,5.860286945,0.257823504,0 +csp3_7,5.860286945,0.257823504,0 +csp3_8,5.860286945,0.257823504,0 +csp3_9,5.860286945,0.257823504,0 +csp3_10,5.860286945,0.257823504,0 +csp3_11,5.860286945,0.257823504,0 +csp3_12,5.860286945,0.257823504,0 +csp4_1,5.860286945,0.257823504,0 +csp4_2,5.860286945,0.257823504,0 +csp4_3,5.860286945,0.257823504,0 +csp4_4,5.860286945,0.257823504,0 +csp4_5,5.860286945,0.257823504,0 +csp4_6,5.860286945,0.257823504,0 +csp4_7,5.860286945,0.257823504,0 +csp4_8,5.860286945,0.257823504,0 +csp4_9,5.860286945,0.257823504,0 +csp4_10,5.860286945,0.257823504,0 +csp4_11,5.860286945,0.257823504,0 +csp4_12,5.860286945,0.257823504,0 +hydD,3.088992778,0.019831569,0 +hydND,3.088992778,0.019831569,0 +hydSD,3.088992778,0.019831569,0 +hydSND,3.088992778,0.019831569,0 +hydUD,3.088992778,0.019831569,0 +hydUND,3.088992778,0.019831569,0 +hydNPD,3.088992778,0.019831569,0 +hydNPND,3.088992778,0.019831569,0 +hydED,3.088992778,0.019831569,0 +hydEND,3.088992778,0.019831569,0 +egs_allkm_1,5.506553405,0.151210424,0.00004967 +egs_allkm_2,5.506553405,0.151210424,0.00004967 +egs_allkm_3,5.506553405,0.151210424,0.00004967 +egs_allkm_4,5.506553405,0.151210424,0.00004967 +egs_allkm_5,5.506553405,0.151210424,0.00004967 +egs_allkm_6,5.506553405,0.151210424,0.00004967 +egs_allkm_7,5.506553405,0.151210424,0.00004967 +egs_allkm_8,5.506553405,0.151210424,0.00004967 +egs_allkm_9,5.506553405,0.151210424,0.00004967 +egs_allkm_10,5.506553405,0.151210424,0.00004967 +geohydro_allkm_1,4.614237729,0.15681119,0.00003511 +geohydro_allkm_2,4.614237729,0.15681119,0.00003511 +geohydro_allkm_3,4.614237729,0.15681119,0.00003511 +geohydro_allkm_4,4.614237729,0.15681119,0.00003511 +geohydro_allkm_5,4.614237729,0.15681119,0.00003511 +geohydro_allkm_6,4.614237729,0.15681119,0.00003511 +geohydro_allkm_7,4.614237729,0.15681119,0.00003511 +geohydro_allkm_8,4.614237729,0.15681119,0.00003511 +geohydro_allkm_9,4.614237729,0.15681119,0.00003511 +geohydro_allkm_10,4.614237729,0.15681119,0.00003511 +egs_nearfield_1,5.506553405,0.151210424,0.00004967 +egs_nearfield_2,5.506553405,0.151210424,0.00004967 +egs_nearfield_3,5.506553405,0.151210424,0.00004967 +egs_nearfield_4,5.506553405,0.151210424,0.00004967 +egs_nearfield_5,5.506553405,0.151210424,0.00004967 +egs_nearfield_6,5.506553405,0.151210424,0.00004967 +egs_nearfield_7,5.506553405,0.151210424,0.00004967 +egs_nearfield_8,5.506553405,0.151210424,0.00004967 +egs_nearfield_9,5.506553405,0.151210424,0.00004967 +egs_nearfield_10,5.506553405,0.151210424,0.00004967 +Gas-CT_H2-CT,1.124155973,0.28,0.00004233 +Gas-CC_H2-CC,0.57898781,0.052,0.00002764 +CoalOldUns_CoalOldScr,2.663868535,0.16,0.00003948 +CoalOldUns_CofireOld,2.663868535,0.16,0.00003948 +CoalOldScr_CofireOld,2.663868535,0.16,0.00003948 +coal-new_CofireNew,2.663868535,0.16,0.00003948 +Gas-CC_Gas-CC-CCS_mod,0.858296124,0.084,0.00005634 +Coal-IGCC_coal-CCS_mod,1.617499527,0.156923077,0.00005634 +coal-new_coal-CCS_mod,1.617499527,0.156923077,0.00005634 +CoalOldScr_coal-CCS_mod,1.617499527,0.156923077,0.00005634 +CoalOldUns_coal-CCS_mod,1.617499527,0.156923077,0.00005634 +CofireNew_coal-CCS_mod,1.617499527,0.156923077,0.00005634 +CofireOld_coal-CCS_mod,1.617499527,0.156923077,0.00005634 +Gas-CC_Gas-CC-CCS_max,0.858296124,0.084,0.00005634 +Coal-IGCC_coal-CCS_max,1.617499527,0.156923077,0.00005634 +coal-new_coal-CCS_max,1.617499527,0.156923077,0.00005634 +CoalOldScr_coal-CCS_max,1.617499527,0.156923077,0.00005634 +CoalOldUns_coal-CCS_max,1.617499527,0.156923077,0.00005634 +CofireNew_coal-CCS_max,1.617499527,0.156923077,0.00005634 +CofireOld_coal-CCS_max,1.617499527,0.156923077,0.00005634 +hydEND_hydED,3.088992778,0.019831569,0 +hydED_pumped-hydro,4.437357277,0.105776354,0 +hydED_pumped-hydro-flex,4.437357277,0.105776354,0 \ No newline at end of file diff --git a/inputs/employment/employment_factor_plant_Mayfield.csv b/inputs/employment/employment_factor_plant_Mayfield.csv new file mode 100644 index 00000000..c2da2942 --- /dev/null +++ b/inputs/employment/employment_factor_plant_Mayfield.csv @@ -0,0 +1,206 @@ +,construction,fom,vom +battery_li,0,0,0 +biopower,0.346,0.123,0 +beccs_mod,0.346,0.123,0 +beccs_max,0.346,0.123,0 +coal-CCS_mod,0,0.266,0 +coal-CCS_max,0,0.266,0 +coal-CCS-F1,0,0.266,0 +coal-CCS-F2,0,0.266,0 +coal-CCS-F3,0,0.266,0 +Coal-IGCC,0,0.266,0 +coal-new,0,0.266,0 +CoalOldScr,0,0.266,0 +CoalOldUns,0,0.266,0 +CofireNew,0,0.266,0 +CofireOld,0,0.266,0 +csp-ns,6.468,0.448,0 +distpv,35.337,0.541,0 +Gas-CC,0.346,0.123,0 +Gas-CC-CCS_mod,0.346,0.123,0 +Gas-CC-CCS_max,0.346,0.123,0 +Gas-CC-CCS-F1,0.346,0.123,0 +Gas-CC-CCS-F2,0.346,0.123,0 +Gas-CC-CCS-F3,0.346,0.123,0 +Gas-CT,0.346,0.123,0 +H2-CT,0.346,0.123,0 +H2-CC,0.346,0.123,0 +geothermal,0,0,0 +Hydro,0,0,0 +lfill-gas,0.346,0.123,0 +Nuclear,9.93,0.513,0 +Nuclear-SMR,9.93,0.513,0 +o-g-s,0.346,0.123,0 +pumped-hydro,0,0,0 +pumped-hydro-flex,0,0,0 +upv_1,6.468,0.448,0 +upv_2,6.468,0.448,0 +upv_3,6.468,0.448,0 +upv_4,6.468,0.448,0 +upv_5,6.468,0.448,0 +upv_6,6.468,0.448,0 +upv_7,6.468,0.448,0 +upv_8,6.468,0.448,0 +upv_9,6.468,0.448,0 +upv_10,6.468,0.448,0 +pvb1_1,6.468,0.448,0 +pvb1_2,6.468,0.448,0 +pvb1_3,6.468,0.448,0 +pvb1_4,6.468,0.448,0 +pvb1_5,6.468,0.448,0 +pvb1_6,6.468,0.448,0 +pvb1_7,6.468,0.448,0 +pvb1_8,6.468,0.448,0 +pvb1_9,6.468,0.448,0 +pvb1_10,6.468,0.448,0 +pvb2_1,6.468,0.448,0 +pvb2_2,6.468,0.448,0 +pvb2_3,6.468,0.448,0 +pvb2_4,6.468,0.448,0 +pvb2_5,6.468,0.448,0 +pvb2_6,6.468,0.448,0 +pvb2_7,6.468,0.448,0 +pvb2_8,6.468,0.448,0 +pvb2_9,6.468,0.448,0 +pvb2_10,6.468,0.448,0 +pvb3_1,6.468,0.448,0 +pvb3_2,6.468,0.448,0 +pvb3_3,6.468,0.448,0 +pvb3_4,6.468,0.448,0 +pvb3_5,6.468,0.448,0 +pvb3_6,6.468,0.448,0 +pvb3_7,6.468,0.448,0 +pvb3_8,6.468,0.448,0 +pvb3_9,6.468,0.448,0 +pvb3_10,6.468,0.448,0 +wind-ofs_1,0.263,0.894,0 +wind-ofs_2,0.263,0.894,0 +wind-ofs_3,0.263,0.894,0 +wind-ofs_4,0.263,0.894,0 +wind-ofs_5,0.263,0.894,0 +wind-ofs_6,0.263,0.894,0 +wind-ofs_7,0.263,0.894,0 +wind-ofs_8,0.263,0.894,0 +wind-ofs_9,0.263,0.894,0 +wind-ofs_10,0.263,0.894,0 +wind-ons_1,0.263,0.894,0 +wind-ons_2,0.263,0.894,0 +wind-ons_3,0.263,0.894,0 +wind-ons_4,0.263,0.894,0 +wind-ons_5,0.263,0.894,0 +wind-ons_6,0.263,0.894,0 +wind-ons_7,0.263,0.894,0 +wind-ons_8,0.263,0.894,0 +wind-ons_9,0.263,0.894,0 +wind-ons_10,0.263,0.894,0 +csp1_1,6.468,0.448,0 +csp1_2,6.468,0.448,0 +csp1_3,6.468,0.448,0 +csp1_4,6.468,0.448,0 +csp1_5,6.468,0.448,0 +csp1_6,6.468,0.448,0 +csp1_7,6.468,0.448,0 +csp1_8,6.468,0.448,0 +csp1_9,6.468,0.448,0 +csp1_10,6.468,0.448,0 +csp1_11,6.468,0.448,0 +csp1_12,6.468,0.448,0 +csp2_1,6.468,0.448,0 +csp2_2,6.468,0.448,0 +csp2_3,6.468,0.448,0 +csp2_4,6.468,0.448,0 +csp2_5,6.468,0.448,0 +csp2_6,6.468,0.448,0 +csp2_7,6.468,0.448,0 +csp2_8,6.468,0.448,0 +csp2_9,6.468,0.448,0 +csp2_10,6.468,0.448,0 +csp2_11,6.468,0.448,0 +csp2_12,6.468,0.448,0 +csp3_1,6.468,0.448,0 +csp3_2,6.468,0.448,0 +csp3_3,6.468,0.448,0 +csp3_4,6.468,0.448,0 +csp3_5,6.468,0.448,0 +csp3_6,6.468,0.448,0 +csp3_7,6.468,0.448,0 +csp3_8,6.468,0.448,0 +csp3_9,6.468,0.448,0 +csp3_10,6.468,0.448,0 +csp3_11,6.468,0.448,0 +csp3_12,6.468,0.448,0 +csp4_1,6.468,0.448,0 +csp4_2,6.468,0.448,0 +csp4_3,6.468,0.448,0 +csp4_4,6.468,0.448,0 +csp4_5,6.468,0.448,0 +csp4_6,6.468,0.448,0 +csp4_7,6.468,0.448,0 +csp4_8,6.468,0.448,0 +csp4_9,6.468,0.448,0 +csp4_10,6.468,0.448,0 +csp4_11,6.468,0.448,0 +csp4_12,6.468,0.448,0 +hydD,0,0,0 +hydND,0,0,0 +hydSD,0,0,0 +hydSND,0,0,0 +hydUD,0,0,0 +hydUND,0,0,0 +hydNPD,0,0,0 +hydNPND,0,0,0 +hydED,0,0,0 +hydEND,0,0,0 +egs_allkm_1,0,0,0 +egs_allkm_2,0,0,0 +egs_allkm_3,0,0,0 +egs_allkm_4,0,0,0 +egs_allkm_5,0,0,0 +egs_allkm_6,0,0,0 +egs_allkm_7,0,0,0 +egs_allkm_8,0,0,0 +egs_allkm_9,0,0,0 +egs_allkm_10,0,0,0 +geohydro_allkm_1,0,0,0 +geohydro_allkm_2,0,0,0 +geohydro_allkm_3,0,0,0 +geohydro_allkm_4,0,0,0 +geohydro_allkm_5,0,0,0 +geohydro_allkm_6,0,0,0 +geohydro_allkm_7,0,0,0 +geohydro_allkm_8,0,0,0 +geohydro_allkm_9,0,0,0 +geohydro_allkm_10,0,0,0 +egs_nearfield_1,0,0,0 +egs_nearfield_2,0,0,0 +egs_nearfield_3,0,0,0 +egs_nearfield_4,0,0,0 +egs_nearfield_5,0,0,0 +egs_nearfield_6,0,0,0 +egs_nearfield_7,0,0,0 +egs_nearfield_8,0,0,0 +egs_nearfield_9,0,0,0 +egs_nearfield_10,0,0,0 +Gas-CT_H2-CT,0.346,0.123,0 +Gas-CC_H2-CC,0.346,0.123,0 +CoalOldUns_CoalOldScr,0,0.266,0 +CoalOldUns_CofireOld,0,0.266,0 +CoalOldScr_CofireOld,0,0.266,0 +coal-new_CofireNew,0,0.266,0 +Gas-CC_Gas-CC-CCS_mod,0.346,0.266,0 +Coal-IGCC_coal-CCS_mod,0,0.266,0 +coal-new_coal-CCS_mod,0,0.266,0 +CoalOldScr_coal-CCS_mod,0,0.266,0 +CoalOldUns_coal-CCS_mod,0,0.266,0 +CofireNew_coal-CCS_mod,0,0.266,0 +CofireOld_coal-CCS_mod,0,0.266,0 +Gas-CC_Gas-CC-CCS_max,0.346,0.123,0 +Coal-IGCC_coal-CCS_max,0,0.266,0 +coal-new_coal-CCS_max,0,0.266,0 +CoalOldScr_coal-CCS_max,0,0.266,0 +CoalOldUns_coal-CCS_max,0,0.266,0 +CofireNew_coal-CCS_max,0,0.266,0 +CofireOld_coal-CCS_max,0,0.266,0 +hydEND_hydED,0,0,0 +hydED_pumped-hydro,0,0,0 +hydED_pumped-hydro-flex,0,0,0 \ No newline at end of file diff --git a/inputs/employment/employment_factor_plant_Ram.csv b/inputs/employment/employment_factor_plant_Ram.csv new file mode 100644 index 00000000..43731f32 --- /dev/null +++ b/inputs/employment/employment_factor_plant_Ram.csv @@ -0,0 +1,206 @@ +,construction,fom,vom +battery_li,0.53,0.23,0 +biopower,14,1.5,0 +beccs_mod,14,1.5,0 +beccs_max,14,1.5,0 +coal-CCS_mod,11.08,0.22,0.00001 +coal-CCS_max,11.08,0.22,0.00001 +coal-CCS-F1,11.08,0.22,0.00001 +coal-CCS-F2,11.08,0.22,0.00001 +coal-CCS-F3,11.08,0.22,0.00001 +Coal-IGCC,11.08,0.22,0.00001 +coal-new,11.08,0.22,0.00001 +CoalOldScr,11.08,0.22,0.00001 +CoalOldUns,11.08,0.22,0.00001 +CofireNew,11.08,0.22,0.00001 +CofireOld,11.08,0.22,0.00001 +csp-ns,1.61,0.14,0 +distpv,4.19,0.13,0 +Gas-CC,1.27,0.14,0.00007 +Gas-CC-CCS_mod,1.27,0.14,0.00007 +Gas-CC-CCS_max,1.27,0.14,0.00007 +Gas-CC-CCS-F1,1.27,0.14,0.00007 +Gas-CC-CCS-F2,1.27,0.14,0.00007 +Gas-CC-CCS-F3,1.27,0.14,0.00007 +Gas-CT,1.27,0.14,0.00007 +H2-CT,1.27,0.14,0.00007 +H2-CC,1.27,0.14,0.00007 +geothermal,6.8,0.4,0 +Hydro,7.36,0.14,0 +lfill-gas,1.27,0.14,0 +Nuclear,11.8,0.6,0 +Nuclear-SMR,11.8,0.6,0 +o-g-s,1.27,0.14,0 +pumped-hydro,7.18,0.08,0 +pumped-hydro-flex,7.18,0.08,0 +upv_1,1.61,0.09,0 +upv_2,1.61,0.09,0 +upv_3,1.61,0.09,0 +upv_4,1.61,0.09,0 +upv_5,1.61,0.09,0 +upv_6,1.61,0.09,0 +upv_7,1.61,0.09,0 +upv_8,1.61,0.09,0 +upv_9,1.61,0.09,0 +upv_10,1.61,0.09,0 +pvb1_1,1.61,0.09,0 +pvb1_2,1.61,0.09,0 +pvb1_3,1.61,0.09,0 +pvb1_4,1.61,0.09,0 +pvb1_5,1.61,0.09,0 +pvb1_6,1.61,0.09,0 +pvb1_7,1.61,0.09,0 +pvb1_8,1.61,0.09,0 +pvb1_9,1.61,0.09,0 +pvb1_10,1.61,0.09,0 +pvb2_1,1.61,0.09,0 +pvb2_2,1.61,0.09,0 +pvb2_3,1.61,0.09,0 +pvb2_4,1.61,0.09,0 +pvb2_5,1.61,0.09,0 +pvb2_6,1.61,0.09,0 +pvb2_7,1.61,0.09,0 +pvb2_8,1.61,0.09,0 +pvb2_9,1.61,0.09,0 +pvb2_10,1.61,0.09,0 +pvb3_1,1.61,0.09,0 +pvb3_2,1.61,0.09,0 +pvb3_3,1.61,0.09,0 +pvb3_4,1.61,0.09,0 +pvb3_5,1.61,0.09,0 +pvb3_6,1.61,0.09,0 +pvb3_7,1.61,0.09,0 +pvb3_8,1.61,0.09,0 +pvb3_9,1.61,0.09,0 +pvb3_10,1.61,0.09,0 +wind-ofs_1,1.5,0.28,0 +wind-ofs_2,1.5,0.28,0 +wind-ofs_3,1.5,0.28,0 +wind-ofs_4,1.5,0.28,0 +wind-ofs_5,1.5,0.28,0 +wind-ofs_6,1.5,0.28,0 +wind-ofs_7,1.5,0.28,0 +wind-ofs_8,1.5,0.28,0 +wind-ofs_9,1.5,0.28,0 +wind-ofs_10,1.5,0.28,0 +wind-ons_1,2.65,0.21,0 +wind-ons_2,2.65,0.21,0 +wind-ons_3,2.65,0.21,0 +wind-ons_4,2.65,0.21,0 +wind-ons_5,2.65,0.21,0 +wind-ons_6,2.65,0.21,0 +wind-ons_7,2.65,0.21,0 +wind-ons_8,2.65,0.21,0 +wind-ons_9,2.65,0.21,0 +wind-ons_10,2.65,0.21,0 +csp1_1,1.61,0.6,0 +csp1_2,1.61,0.6,0 +csp1_3,1.61,0.6,0 +csp1_4,1.61,0.6,0 +csp1_5,1.61,0.6,0 +csp1_6,1.61,0.6,0 +csp1_7,1.61,0.6,0 +csp1_8,1.61,0.6,0 +csp1_9,1.61,0.6,0 +csp1_10,1.61,0.6,0 +csp1_11,1.61,0.6,0 +csp1_12,1.61,0.6,0 +csp2_1,1.61,0.6,0 +csp2_2,1.61,0.6,0 +csp2_3,1.61,0.6,0 +csp2_4,1.61,0.6,0 +csp2_5,1.61,0.6,0 +csp2_6,1.61,0.6,0 +csp2_7,1.61,0.6,0 +csp2_8,1.61,0.6,0 +csp2_9,1.61,0.6,0 +csp2_10,1.61,0.6,0 +csp2_11,1.61,0.6,0 +csp2_12,1.61,0.6,0 +csp3_1,1.61,0.6,0 +csp3_2,1.61,0.6,0 +csp3_3,1.61,0.6,0 +csp3_4,1.61,0.6,0 +csp3_5,1.61,0.6,0 +csp3_6,1.61,0.6,0 +csp3_7,1.61,0.6,0 +csp3_8,1.61,0.6,0 +csp3_9,1.61,0.6,0 +csp3_10,1.61,0.6,0 +csp3_11,1.61,0.6,0 +csp3_12,1.61,0.6,0 +csp4_1,1.61,0.6,0 +csp4_2,1.61,0.6,0 +csp4_3,1.61,0.6,0 +csp4_4,1.61,0.6,0 +csp4_5,1.61,0.6,0 +csp4_6,1.61,0.6,0 +csp4_7,1.61,0.6,0 +csp4_8,1.61,0.6,0 +csp4_9,1.61,0.6,0 +csp4_10,1.61,0.6,0 +csp4_11,1.61,0.6,0 +csp4_12,1.61,0.6,0 +hydD,7.36,0.14,0 +hydND,7.36,0.14,0 +hydSD,7.36,0.14,0 +hydSND,7.36,0.14,0 +hydUD,7.36,0.14,0 +hydUND,7.36,0.14,0 +hydNPD,7.36,0.14,0 +hydNPND,7.36,0.14,0 +hydED,7.36,0.14,0 +hydEND,7.36,0.14,0 +egs_allkm_1,6.8,0.4,0 +egs_allkm_2,6.8,0.4,0 +egs_allkm_3,6.8,0.4,0 +egs_allkm_4,6.8,0.4,0 +egs_allkm_5,6.8,0.4,0 +egs_allkm_6,6.8,0.4,0 +egs_allkm_7,6.8,0.4,0 +egs_allkm_8,6.8,0.4,0 +egs_allkm_9,6.8,0.4,0 +egs_allkm_10,6.8,0.4,0 +geohydro_allkm_1,6.8,0.4,0 +geohydro_allkm_2,6.8,0.4,0 +geohydro_allkm_3,6.8,0.4,0 +geohydro_allkm_4,6.8,0.4,0 +geohydro_allkm_5,6.8,0.4,0 +geohydro_allkm_6,6.8,0.4,0 +geohydro_allkm_7,6.8,0.4,0 +geohydro_allkm_8,6.8,0.4,0 +geohydro_allkm_9,6.8,0.4,0 +geohydro_allkm_10,6.8,0.4,0 +egs_nearfield_1,6.8,0.4,0 +egs_nearfield_2,6.8,0.4,0 +egs_nearfield_3,6.8,0.4,0 +egs_nearfield_4,6.8,0.4,0 +egs_nearfield_5,6.8,0.4,0 +egs_nearfield_6,6.8,0.4,0 +egs_nearfield_7,6.8,0.4,0 +egs_nearfield_8,6.8,0.4,0 +egs_nearfield_9,6.8,0.4,0 +egs_nearfield_10,6.8,0.4,0 +Gas-CT_H2-CT,1.27,0.14,0.00007 +Gas-CC_H2-CC,1.27,0.14,0.00007 +CoalOldUns_CoalOldScr,11.08,0.22,0.00001 +CoalOldUns_CofireOld,11.08,0.22,0.00001 +CoalOldScr_CofireOld,11.08,0.22,0.00001 +coal-new_CofireNew,11.08,0.22,0.00001 +Gas-CC_Gas-CC-CCS_mod,1.27,0.14,0.00007 +Coal-IGCC_coal-CCS_mod,11.08,0.22,0.00001 +coal-new_coal-CCS_mod,11.08,0.22,0.00001 +CoalOldScr_coal-CCS_mod,11.08,0.22,0.00001 +CoalOldUns_coal-CCS_mod,11.08,0.22,0.00001 +CofireNew_coal-CCS_mod,11.08,0.22,0.00001 +CofireOld_coal-CCS_mod,11.08,0.22,0.00001 +Gas-CC_Gas-CC-CCS_max,1.27,0.14,0.00007 +Coal-IGCC_coal-CCS_max,11.08,0.22,0.00001 +coal-new_coal-CCS_max,11.08,0.22,0.00001 +CoalOldScr_coal-CCS_max,11.08,0.22,0.00001 +CoalOldUns_coal-CCS_max,11.08,0.22,0.00001 +CofireNew_coal-CCS_max,11.08,0.22,0.00001 +CofireOld_coal-CCS_max,11.08,0.22,0.00001 +hydEND_hydED,7.36,0.14,0 +hydED_pumped-hydro,7.18,0.08,0 +hydED_pumped-hydro-flex,7.18,0.08,0 \ No newline at end of file diff --git a/inputs/employment/employment_factor_plant_Rutovitz.csv b/inputs/employment/employment_factor_plant_Rutovitz.csv new file mode 100644 index 00000000..43731f32 --- /dev/null +++ b/inputs/employment/employment_factor_plant_Rutovitz.csv @@ -0,0 +1,206 @@ +,construction,fom,vom +battery_li,0.53,0.23,0 +biopower,14,1.5,0 +beccs_mod,14,1.5,0 +beccs_max,14,1.5,0 +coal-CCS_mod,11.08,0.22,0.00001 +coal-CCS_max,11.08,0.22,0.00001 +coal-CCS-F1,11.08,0.22,0.00001 +coal-CCS-F2,11.08,0.22,0.00001 +coal-CCS-F3,11.08,0.22,0.00001 +Coal-IGCC,11.08,0.22,0.00001 +coal-new,11.08,0.22,0.00001 +CoalOldScr,11.08,0.22,0.00001 +CoalOldUns,11.08,0.22,0.00001 +CofireNew,11.08,0.22,0.00001 +CofireOld,11.08,0.22,0.00001 +csp-ns,1.61,0.14,0 +distpv,4.19,0.13,0 +Gas-CC,1.27,0.14,0.00007 +Gas-CC-CCS_mod,1.27,0.14,0.00007 +Gas-CC-CCS_max,1.27,0.14,0.00007 +Gas-CC-CCS-F1,1.27,0.14,0.00007 +Gas-CC-CCS-F2,1.27,0.14,0.00007 +Gas-CC-CCS-F3,1.27,0.14,0.00007 +Gas-CT,1.27,0.14,0.00007 +H2-CT,1.27,0.14,0.00007 +H2-CC,1.27,0.14,0.00007 +geothermal,6.8,0.4,0 +Hydro,7.36,0.14,0 +lfill-gas,1.27,0.14,0 +Nuclear,11.8,0.6,0 +Nuclear-SMR,11.8,0.6,0 +o-g-s,1.27,0.14,0 +pumped-hydro,7.18,0.08,0 +pumped-hydro-flex,7.18,0.08,0 +upv_1,1.61,0.09,0 +upv_2,1.61,0.09,0 +upv_3,1.61,0.09,0 +upv_4,1.61,0.09,0 +upv_5,1.61,0.09,0 +upv_6,1.61,0.09,0 +upv_7,1.61,0.09,0 +upv_8,1.61,0.09,0 +upv_9,1.61,0.09,0 +upv_10,1.61,0.09,0 +pvb1_1,1.61,0.09,0 +pvb1_2,1.61,0.09,0 +pvb1_3,1.61,0.09,0 +pvb1_4,1.61,0.09,0 +pvb1_5,1.61,0.09,0 +pvb1_6,1.61,0.09,0 +pvb1_7,1.61,0.09,0 +pvb1_8,1.61,0.09,0 +pvb1_9,1.61,0.09,0 +pvb1_10,1.61,0.09,0 +pvb2_1,1.61,0.09,0 +pvb2_2,1.61,0.09,0 +pvb2_3,1.61,0.09,0 +pvb2_4,1.61,0.09,0 +pvb2_5,1.61,0.09,0 +pvb2_6,1.61,0.09,0 +pvb2_7,1.61,0.09,0 +pvb2_8,1.61,0.09,0 +pvb2_9,1.61,0.09,0 +pvb2_10,1.61,0.09,0 +pvb3_1,1.61,0.09,0 +pvb3_2,1.61,0.09,0 +pvb3_3,1.61,0.09,0 +pvb3_4,1.61,0.09,0 +pvb3_5,1.61,0.09,0 +pvb3_6,1.61,0.09,0 +pvb3_7,1.61,0.09,0 +pvb3_8,1.61,0.09,0 +pvb3_9,1.61,0.09,0 +pvb3_10,1.61,0.09,0 +wind-ofs_1,1.5,0.28,0 +wind-ofs_2,1.5,0.28,0 +wind-ofs_3,1.5,0.28,0 +wind-ofs_4,1.5,0.28,0 +wind-ofs_5,1.5,0.28,0 +wind-ofs_6,1.5,0.28,0 +wind-ofs_7,1.5,0.28,0 +wind-ofs_8,1.5,0.28,0 +wind-ofs_9,1.5,0.28,0 +wind-ofs_10,1.5,0.28,0 +wind-ons_1,2.65,0.21,0 +wind-ons_2,2.65,0.21,0 +wind-ons_3,2.65,0.21,0 +wind-ons_4,2.65,0.21,0 +wind-ons_5,2.65,0.21,0 +wind-ons_6,2.65,0.21,0 +wind-ons_7,2.65,0.21,0 +wind-ons_8,2.65,0.21,0 +wind-ons_9,2.65,0.21,0 +wind-ons_10,2.65,0.21,0 +csp1_1,1.61,0.6,0 +csp1_2,1.61,0.6,0 +csp1_3,1.61,0.6,0 +csp1_4,1.61,0.6,0 +csp1_5,1.61,0.6,0 +csp1_6,1.61,0.6,0 +csp1_7,1.61,0.6,0 +csp1_8,1.61,0.6,0 +csp1_9,1.61,0.6,0 +csp1_10,1.61,0.6,0 +csp1_11,1.61,0.6,0 +csp1_12,1.61,0.6,0 +csp2_1,1.61,0.6,0 +csp2_2,1.61,0.6,0 +csp2_3,1.61,0.6,0 +csp2_4,1.61,0.6,0 +csp2_5,1.61,0.6,0 +csp2_6,1.61,0.6,0 +csp2_7,1.61,0.6,0 +csp2_8,1.61,0.6,0 +csp2_9,1.61,0.6,0 +csp2_10,1.61,0.6,0 +csp2_11,1.61,0.6,0 +csp2_12,1.61,0.6,0 +csp3_1,1.61,0.6,0 +csp3_2,1.61,0.6,0 +csp3_3,1.61,0.6,0 +csp3_4,1.61,0.6,0 +csp3_5,1.61,0.6,0 +csp3_6,1.61,0.6,0 +csp3_7,1.61,0.6,0 +csp3_8,1.61,0.6,0 +csp3_9,1.61,0.6,0 +csp3_10,1.61,0.6,0 +csp3_11,1.61,0.6,0 +csp3_12,1.61,0.6,0 +csp4_1,1.61,0.6,0 +csp4_2,1.61,0.6,0 +csp4_3,1.61,0.6,0 +csp4_4,1.61,0.6,0 +csp4_5,1.61,0.6,0 +csp4_6,1.61,0.6,0 +csp4_7,1.61,0.6,0 +csp4_8,1.61,0.6,0 +csp4_9,1.61,0.6,0 +csp4_10,1.61,0.6,0 +csp4_11,1.61,0.6,0 +csp4_12,1.61,0.6,0 +hydD,7.36,0.14,0 +hydND,7.36,0.14,0 +hydSD,7.36,0.14,0 +hydSND,7.36,0.14,0 +hydUD,7.36,0.14,0 +hydUND,7.36,0.14,0 +hydNPD,7.36,0.14,0 +hydNPND,7.36,0.14,0 +hydED,7.36,0.14,0 +hydEND,7.36,0.14,0 +egs_allkm_1,6.8,0.4,0 +egs_allkm_2,6.8,0.4,0 +egs_allkm_3,6.8,0.4,0 +egs_allkm_4,6.8,0.4,0 +egs_allkm_5,6.8,0.4,0 +egs_allkm_6,6.8,0.4,0 +egs_allkm_7,6.8,0.4,0 +egs_allkm_8,6.8,0.4,0 +egs_allkm_9,6.8,0.4,0 +egs_allkm_10,6.8,0.4,0 +geohydro_allkm_1,6.8,0.4,0 +geohydro_allkm_2,6.8,0.4,0 +geohydro_allkm_3,6.8,0.4,0 +geohydro_allkm_4,6.8,0.4,0 +geohydro_allkm_5,6.8,0.4,0 +geohydro_allkm_6,6.8,0.4,0 +geohydro_allkm_7,6.8,0.4,0 +geohydro_allkm_8,6.8,0.4,0 +geohydro_allkm_9,6.8,0.4,0 +geohydro_allkm_10,6.8,0.4,0 +egs_nearfield_1,6.8,0.4,0 +egs_nearfield_2,6.8,0.4,0 +egs_nearfield_3,6.8,0.4,0 +egs_nearfield_4,6.8,0.4,0 +egs_nearfield_5,6.8,0.4,0 +egs_nearfield_6,6.8,0.4,0 +egs_nearfield_7,6.8,0.4,0 +egs_nearfield_8,6.8,0.4,0 +egs_nearfield_9,6.8,0.4,0 +egs_nearfield_10,6.8,0.4,0 +Gas-CT_H2-CT,1.27,0.14,0.00007 +Gas-CC_H2-CC,1.27,0.14,0.00007 +CoalOldUns_CoalOldScr,11.08,0.22,0.00001 +CoalOldUns_CofireOld,11.08,0.22,0.00001 +CoalOldScr_CofireOld,11.08,0.22,0.00001 +coal-new_CofireNew,11.08,0.22,0.00001 +Gas-CC_Gas-CC-CCS_mod,1.27,0.14,0.00007 +Coal-IGCC_coal-CCS_mod,11.08,0.22,0.00001 +coal-new_coal-CCS_mod,11.08,0.22,0.00001 +CoalOldScr_coal-CCS_mod,11.08,0.22,0.00001 +CoalOldUns_coal-CCS_mod,11.08,0.22,0.00001 +CofireNew_coal-CCS_mod,11.08,0.22,0.00001 +CofireOld_coal-CCS_mod,11.08,0.22,0.00001 +Gas-CC_Gas-CC-CCS_max,1.27,0.14,0.00007 +Coal-IGCC_coal-CCS_max,11.08,0.22,0.00001 +coal-new_coal-CCS_max,11.08,0.22,0.00001 +CoalOldScr_coal-CCS_max,11.08,0.22,0.00001 +CoalOldUns_coal-CCS_max,11.08,0.22,0.00001 +CofireNew_coal-CCS_max,11.08,0.22,0.00001 +CofireOld_coal-CCS_max,11.08,0.22,0.00001 +hydEND_hydED,7.36,0.14,0 +hydED_pumped-hydro,7.18,0.08,0 +hydED_pumped-hydro-flex,7.18,0.08,0 \ No newline at end of file diff --git a/inputs/sets/jtype.csv b/inputs/sets/jtype.csv new file mode 100644 index 00000000..4c3e2f6b --- /dev/null +++ b/inputs/sets/jtype.csv @@ -0,0 +1,3 @@ +construction +fom +vom \ No newline at end of file diff --git a/reeds/log.py b/reeds/log.py index 2dee9a4a..c60fe2e4 100755 --- a/reeds/log.py +++ b/reeds/log.py @@ -68,7 +68,7 @@ def toc(tic, year, process, path=''): def get_solve_times(path=''): """Get all solve times, disaggregated by GAMS/barrier/crossover/remainder. Disaggregation only works when using CPLEX as the solver.""" - # path = '/Users/pbrown/github/ReEDS-2.0/runs/v20240111_stressM0_stress_WECC_crossover' + #path = '/Users/apham/Documents/GitHub/ReEDS/ReEDS-2.0/runs/test_log' lengths = { 'gams': {}, 'barrier': {}, @@ -79,7 +79,7 @@ def get_solve_times(path=''): 'start': {}, 'stop': {}, } - with open(os.path.join(path, 'gamslog.txt'), 'r') as f: + with open(os.path.join(path, 'gamslog.txt'), 'r', encoding="ISO-8859-1") as f: for _line in f: line = _line.strip() ## Get the year/iteration diff --git a/runbatch.py b/runbatch.py index 33b32979..0441501c 100644 --- a/runbatch.py +++ b/runbatch.py @@ -9,7 +9,6 @@ import time import shutil import csv -import importlib import numpy as np import pandas as pd import subprocess @@ -283,8 +282,6 @@ def check_compatibility(sw): .format('\n'.join(err_switch_configs)) ) - reeds.inputs.validate_zoneset(sw['GSw_ZoneSet']) - ### Aggregation if (sw['GSw_RegionResolution'] != 'aggreg') and (int(sw['GSw_NumCSPclasses']) != 12): raise NotImplementedError( @@ -295,7 +292,7 @@ def check_compatibility(sw): ### Parsed string switches ## Automatic inputs reeds_path = os.path.dirname(__file__) - hierarchy = reeds.io.get_hierarchy(GSw_ZoneSet=sw['GSw_ZoneSet']).reset_index() + hierarchy = pd.read_csv(os.path.join(reeds_path,'inputs','hierarchy.csv')) for threshold in sw['GSw_PRM_StressThreshold'].split('/'): ## Example: threshold = 'transgrp_10_EUE_sum' @@ -428,29 +425,33 @@ def check_compatibility(sw): raise ValueError(err) # Add a row for each county - ## TEMPORARY 20260402 until the aggregation procedure is updated - county2zone = reeds.io.get_county2zone(GSw_ZoneSet='z134', as_map=False) + county2zone = pd.read_csv( + os.path.join(reeds_path, 'inputs', 'county2zone.csv'), dtype={'FIPS':str}, + ) county2zone['county'] = 'p' + county2zone.FIPS # Add county info to hierarchy - hierarchy = hierarchy.merge(county2zone.drop(columns=['FIPS','state']), on='r') - - # Make sure specified regions are allowed for the specified hierarchy level - region_groups = sw['GSw_Region'].split('//') if '//' in sw['GSw_Region'] else [sw['GSw_Region']] - for group in region_groups: - level, regions = group.split('/') - if level not in hierarchy: - err = ( - f"The specified hierarchy level '{level}' does not exist in the hierarchy file." - f"\nUpdate GSw_Region={sw['GSw_Region']} to specify a valid level." - ) - raise ValueError(err) - invalid_regions = [ - region for region in regions.split('.') - if region.lower() not in hierarchy[level].str.lower().values - ] - if invalid_regions: - err = f"GSw_Region: {', '.join(invalid_regions)} need to be in {hierarchy[level].unique()}" - raise Exception(err) + hierarchy = hierarchy.merge(county2zone.drop(columns=['FIPS','state']), on='ba') + + if '/' in sw['GSw_Region']: + # Handle multiple spatial resolutions + region_groups = sw['GSw_Region'].split('//') if '//' in sw['GSw_Region'] else [sw['GSw_Region']] + for group in region_groups: + level, regions = group.split('/') + if level not in hierarchy: + raise ValueError("Fix level in GSw_Region") + invalid_regions = [ + region for region in regions.split('.') + if region.lower() not in hierarchy[level].str.lower().values + ] + if invalid_regions: + err = f"GSw_Region: {', '.join(invalid_regions)} need to be in {hierarchy[level].unique()}" + raise Exception(err) + else: + modeled_regions = pd.read_csv( + os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv') + ) + if sw['GSw_Region'] not in modeled_regions: + raise ValueError("No column in modeled_regions.csv matching GSw_Region") ### Compatible switch combinations if sw['GSw_LoadProfiles'] == 'historic': @@ -496,19 +497,6 @@ def check_compatibility(sw): ### Contents of user-specified files reeds.checks.check_switches(sw) - ### Uncommonly used packages - if sw['GSw_HourlyClusterAlgorithm'].lower().startswith('kmedoids'): - if importlib.util.find_spec("sklearn_extra") is None: - err = ( - "The scikit-learn-extra package is required for GSw_HourlyClusterAlgorithm=" - f"{sw['GSw_HourlyClusterAlgorithm']} but is not available in your conda " - "environment. Please install it by running:\n" - " pip install 'scikit-learn-extra>=0.2.0,<0.3.0'" - "\nor:\n" - " conda install -c conda-forge scikit-learn-extra=0.2" - ) - raise ModuleNotFoundError(err) - def solvestring_sequential( batch_case, caseSwitches, @@ -543,6 +531,7 @@ def solvestring_sequential( 'GSw_ClimateHydro', 'GSw_ClimateWater', 'GSw_gopt', + 'GSw_gopt_mga', 'GSw_HourlyChunkLengthRep', 'GSw_HourlyChunkLengthStress', 'GSw_HourlyType', diff --git a/runfiles.csv b/runfiles.csv index 1a60f823..3179e6f7 100644 --- a/runfiles.csv +++ b/runfiles.csv @@ -127,6 +127,8 @@ e.csv,inputs/sets/e.csv,1,ignore,ignore,,,,,0,,,,e,, eall.csv,inputs/sets/eall.csv,1,ignore,ignore,,,,,,,,,eall,, emit_rate.csv,,1,ignore,ignore,,"etype,e,i,v,r",,0,0,,,,,,ReEDS-to-PLEXOS output emitrate.csv,inputs/emission_constraints/emitrate.csv,1,ignore,ignore,,,,,0,,,,,, +employment_factor_plant.csv,inputs/employment/employment_factor_plant_{GSw_EmploymentFactor}.csv,1,ignore,ignore,,,,,0,,,,,, +employment_factor_inter_transmission.csv,inputs/employment/employment_factor_inter_transmission.csv,1,ignore,ignore,,,,,0,,,,,, energy_communities.csv,inputs/financials/energy_communities.csv,1,ignore,ignore,,,,,0,,,,,,region aggregation and filtering is handled in copy_files etype.csv,inputs/sets/etype.csv,1,ignore,ignore,,,,,,,,,etype,, eval_period_adj_mult.csv,,1,ignore,ignore,,,,,0,,,,,, @@ -233,12 +235,13 @@ itc_frac_monetized.csv,,1,ignore,ignore,,,,,0,,,,,, itc_fractions.csv,,1,ignore,ignore,,"i,country,t",,0,0,,,,,, ivt.csv,,1,ignore,ignore,,,,,0,,,,,,created in runbatch.py ivt_step.csv,,1,ignore,ignore,,,,,0,,,,,, +jtype.csv,inputs/sets/jtype.csv,1,ignore,ignore,,,,,,,,,jtype,, lcclike.csv,inputs/sets/lcclike.csv,1,ignore,ignore,,,,,0,,,,lcclike,, load_2010.csv,,1,sum,ignore,r,wide,,1,0,,1,,,,disaggfunc set to ignore because load will already be in correct spatial resolution load_allyear.csv,,1,sum,ignore,*r,"h,t",,0,0,,1,,,,disaggfunc set to ignore because load will already be in correct spatial resolution load_multiplier.csv,inputs/load/demand_{demandscen}.csv,1,ignore,ignore,,,,,0,,,,,, load_multiplier_r.csv,,1,ignore,ignore,,,,1,0,,,,,, -loadsite_annual.csv,inputs/load/loadsite_{GSw_LoadSiteTrajectory}.csv,float(sw.GSw_LoadSiteCF) > 0,ignore,ignore,*loadsitereg,t,,,0,,,,,, +loadsite_annual.csv,inputs/load/loadsite_{GSw_LoadSiteTrajectory}.csv,int(sw.GSw_LoadSiteCF) != 0,ignore,ignore,*loadsitereg,t,,,0,,,,,, maps.gpkg,,1,ignore,ignore,,,,,,,1,,,, maxage.csv,inputs/plant_characteristics/maxage.csv,1,ignore,ignore,,,,,0,,,,,, maxdailycf.csv,inputs/plant_characteristics/maxdailycf.csv,int(sw.GSw_MaxDailyCF) != 0,ignore,ignore,,,,,0,,,,,, @@ -314,7 +317,6 @@ plantchar_dr_shed_vom.csv,inputs/plant_characteristics/dr_shed_vom_{dr_shedscen} plantchar_dr_shed_fom.csv,inputs/plant_characteristics/dr_shed_fom_{dr_shedscen}.csv,int(sw.GSw_DRShed) != 0,ignore,ignore,r,"tech,wide",,1,0,,,,,,used to define plantcharout.csv plantchar_evmc_shape.csv,inputs/plant_characteristics/evmc_shape_{evmcscen}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv plantchar_evmc_storage.csv,inputs/plant_characteristics/evmc_storage_{evmcscen}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv -plantchar_fuelcell.csv,inputs/plant_characteristics/{plantchar_fuelcell}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv plantchar_gas_ccs.csv,inputs/plant_characteristics/{plantchar_gas_ccs}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv plantchar_gas.csv,inputs/plant_characteristics/{plantchar_gas}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv plantchar_geo.csv,inputs/plant_characteristics/{plantchar_geo}.csv,int(sw.GSw_Geothermal) != 0,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv @@ -427,6 +429,10 @@ tranloss.csv,,1,trans_lookup,ignore,"*r,rr",trtype,,0,0,drop_dup_r,1,,,,disaggfu trans_itc_fractions.csv,,1,ignore,ignore,,,,,0,,,,,, transmission_capacity_future.csv,inputs/transmission/transmission_capacity_future_{lvl}_{GSw_TransScen}.csv,1,sum,ignore,"r,rr","status,trtype,t",,0,0,drop_dup_r,,,,,'ignore’ in disaggfunc because all transmisison data will be read into model at appropriate spatial resolution transmission_capacity_future_baseline.csv,inputs/transmission/transmission_capacity_future_{lvl}_baseline.csv,1,sum,ignore,"r,rr","status,trtype,t",,0,0,drop_dup_r,,,,,'ignore’ in disaggfunc because all transmisison data will be read into model at appropriate spatial resolution +transmission_capacity_init_AC_r.csv,inputs/transmission/transmission_capacity_init_AC_{lvl}_{GSw_TransNetworkSource}.csv,1,sum,ignore,"r,rr",interface,,0,0,drop_dup_r,,,,, +transmission_capacity_init_AC_itlgrp.csv,inputs/transmission/transmission_capacity_init_AC_ba_{GSw_TransNetworkSource}.csv,1,sum,ignore,"r,rr",interface,,0,0,drop_dup_r,,,,, +transmission_capacity_init_AC_transgrp.csv,inputs/transmission/transmission_capacity_init_AC_transgrp_{GSw_TransNetworkSource}.csv,1,sum,ignore,"transgrp,transgrpp",interface,,0,0,,,,,, +transmission_capacity_init_nonAC.csv,inputs/transmission/transmission_capacity_init_nonAC_{lvl}.csv,1,sum,ignore,"r,rr",trtype,,0,0,drop_dup_r,,,,,'ignore’ in disaggfunc because all transmisison data will be read into model at appropriate spatial resolution transmission_cost_ac.csv,inputs/transmission/transmission_cost_ac_{GSw_TransUpgradeMethod}_{lvl}.h5,1,trans_lookup,ignore,"r,rr",tscbin,,0,0,drop_dup_r,,,,, transmission_cost_dc.csv,inputs/transmission/transmission_cost_dc_{lvl}.csv,1,trans_lookup,ignore,"r,rr",,,0,0,drop_dup_r,,,,, transmission_distance.csv,inputs/transmission/transmission_distance_{lvl}.h5,1,trans_lookup,ignore,"r,rr",,,0,0,drop_dup_r,,,,,Stored in wide-format h5 to reduce county filesize but converted to long in copy_files.py @@ -496,6 +502,8 @@ c_supplymodel.gms,c_supplymodel.gms,1,ignore,ignore,,,,,,,,,,, c_supplyobjective.gms,c_supplyobjective.gms,1,ignore,ignore,,,,,,,,,,, cbc.opt,cbc.opt,1,ignore,ignore,,,,,,,,,,, cplex.op2,cplex.op2,1,ignore,ignore,,,,,,,,,,, +cplex.op3,cplex.op3,1,ignore,ignore,,,,,,,,,,, +cplex.op4,cplex.op4,1,ignore,ignore,,,,,,,,,,, cplex.opt,cplex.opt,1,ignore,ignore,,,,,,,,,,, createmodel.gms,createmodel.gms,1,ignore,ignore,,,,,,,,,,, d_solveallyears.gms,d_solveallyears.gms,1,ignore,ignore,,,,,,,,,,, @@ -522,4 +530,4 @@ max_hintage_number.txt,,1,ignore,ignore,,,,,0,,,,,, raw_value_streams.py,raw_value_streams.py,1,ignore,ignore,,,,,,,,,,, runbatch.py,runbatch.py,1,ignore,ignore,,,,,,,,,,, tc_phaseout.py,tc_phaseout.py,1,ignore,ignore,,,,,,,,,,, -valuestreams.py,valuestreams.py,1,ignore,ignore,,,,,,,,,,, +valuestreams.py,valuestreams.py,1,ignore,ignore,,,,,,,,,,, \ No newline at end of file From 261d0f441bfb0aaa51a0fbd1ff2c2d4160b0ae27 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 12:59:17 -0600 Subject: [PATCH 02/71] use gentech as MGA subobjective instead of all techs --- b_inputs.gms | 2 + c_mga.gms | 13 --- cases.csv | 2 +- inputs/tech-subset-table.csv | 148 +++++++++++++++++------------------ 4 files changed, 77 insertions(+), 88 deletions(-) diff --git a/b_inputs.gms b/b_inputs.gms index cbbfebe1..a3cb2c06 100644 --- a/b_inputs.gms +++ b/b_inputs.gms @@ -453,6 +453,7 @@ set gas_cc(i) "techs that are gas combined cycle", gas_ct(i) "techs that are gas combustion turbine", gas(i) "techs that use gas (but not o-g-s)", + gentech(i) "generation technologies", geo(i) "geothermal technologies", geo_base(i) "geothermal technologies typically considered in model runs", geo_hydro(i) "geothermal hydrothermal technologies", @@ -981,6 +982,7 @@ gas_cc_ccs(i)$(not ban(i)) = yes$i_subsets(i,'gas_cc_ccs') ; gas_cc(i)$(not ban(i)) = yes$i_subsets(i,'gas_cc') ; gas_ct(i)$(not ban(i)) = yes$i_subsets(i,'gas_ct') ; gas(i)$(not ban(i)) = yes$i_subsets(i,'gas') ; +gentech(i)$(not ban(i)) = yes$i_subsets(i,'gentech') geo(i)$(not ban(i)) = yes$i_subsets(i,'geo') ; geo_base(i)$(not ban(i)) = yes$i_subsets(i,'geo_base') ; geo_hydro(i)$(not ban(i)) = yes$i_subsets(i,'geo_hydro') ; diff --git a/c_mga.gms b/c_mga.gms index 3bbe7223..23e66ce6 100644 --- a/c_mga.gms +++ b/c_mga.gms @@ -12,19 +12,6 @@ eq_MGA_CostEnvelope(t)$[tmodel(t)$Sw_MGA].. * --------------------------------------------------------------------------- $ifthen.mgaobj %GSw_MGA_Objective% == 'capacity' -$ifthen.mgasubobj %GSw_MGA_SubObjective% == 'all' -Equation eq_MGA_Objective "--MW-- Defines generation capacity for MGA" ; -Variable MGA_OBJ "--MW-- Capacity of all technologies to be minimized/maximied" ; -eq_MGA_Objective$Sw_MGA.. - MGA_OBJ - =e= - sum{(i,v,r,t) - $[tmodel(t) - $valcap(i,v,r,t)], - CAP(i,v,r,t) - } -; -$else.mgasubobj Equation eq_MGA_Objective "--MW-- Defines generation capacity for MGA" ; Variable MGA_OBJ "--MW-- Capacity of technology to be minimized/maximied" ; eq_MGA_Objective$Sw_MGA.. diff --git a/cases.csv b/cases.csv index 0dc5bb24..70585853 100644 --- a/cases.csv +++ b/cases.csv @@ -219,7 +219,7 @@ GSw_MethaneLeakageScen,Fractional leakage of methane from upstream natural gas p GSw_MGA_CostDelta,MGA: Fraction by which to allow objective function to increase when using Modeling to Generate Alternatives (MGA is turned off if set to 0; a common choice for MGA is 0.01),float,0, GSw_MGA_Direction,MGA: Directionality of second optimization,(min|max),min, GSw_MGA_Objective,MGA: Objective for MGA (uses GSw_MGA_SubObjective to specify technology subset if set to capacity),(capacity|generation|transmission|rasharing|co2|employment),capacity, -GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity or generation of (only used for GSw_MGA_Objective=(capacity or generation)),(battery|ccs|coal|dac|fossil|gas|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind|all),storage, +GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity or generation of (only used for GSw_MGA_Objective=(capacity or generation)),(battery|ccs|coal|dac|fossil|gas|geo|gentech|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind),gentech, GSw_MinCF,Turn on/off regional min CF constraint (applied at i/r level),0; 1,1, GSw_Mingen,Turn on/off min-gen constraints by r/h/szn,0; 1,0, GSw_MingenFixed,Turn on/off fixed min-gen constraints,0; 1,1, diff --git a/inputs/tech-subset-table.csv b/inputs/tech-subset-table.csv index 2c5507ec..e17ad247 100644 --- a/inputs/tech-subset-table.csv +++ b/inputs/tech-subset-table.csv @@ -1,74 +1,74 @@ -,BIO,COAL,COAL_CCS,GAS,GAS_CC,GAS_CC_CCS,GAS_CT,COMBINED_CYCLE,COMBUSTION_TURBINE,FUEL_CELL,CONV,CCS,CCS_MOD,CCS_MAX,CCSFLEX,CCSFLEX_BYP,CCSFLEX_STO,CCSFLEX_DAC,BECCS,RE,VRE,RSC,WIND,ONSWIND,OFSWIND,UPV,distpv,PV,PVB,PVB1,PVB2,PVB3,CSP,CSP_STORAGE,CSP1,CSP2,CSP3,CSP4,STORAGE,STORAGE_HYBRID,STORAGE_STANDALONE,STORAGE_INTERDAY,THERMAL_STORAGE,BATTERY,DEMAND_FLEX,EVMC,EVMC_STORAGE,EVMC_SHAPE,COFIRE,HYDRO,HYDRO_D,HYDRO_ND,PSH,GEO,GEO_HYDRO,GEO_EGS,GEO_EGS_ALLKM,GEO_EGS_NF,GEO_BASE,GEO_EXTRA,CANADA,VRE_NO_CSP,VRE_UTILITY,VRE_DISTRIBUTED,NUCLEAR,OGS,CONSUME,H2,SMR,DAC,LFILL,H2_COMBUSTION,H2_CC,H2_CT,REFURBTECH,cf_tech,FOSSIL,BOILER,NONDISPATCH,DR_SHED -can-imports,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,, -coal-CCS_mod,,YES,YES,,,,,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-CCS_max,,YES,YES,,,,,,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-CCS-F1,,YES,YES,,,,,,,,YES,YES,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-CCS-F2,,YES,YES,,,,,,,,YES,YES,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-CCS-F3,,YES,YES,,,,,,,,YES,YES,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -Coal-IGCC,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-new,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -CoalOldScr,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -CoalOldUns,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -CofireNew,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -CofireOld,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -Gas-CC,,,,YES,YES,,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_1x1,,,,YES,YES,,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_2x1,,,,YES,YES,,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_1x1-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_1x1-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_2x1-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_2x1-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS-F1,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS-F2,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS-F3,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CT,,,,YES,,,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CT_aero,,,,YES,,,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -ng-fuel-cell,,,,YES,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -o-g-s,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,YES,YES,, -Nuclear,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,YES,, -Nuclear-SMR,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,YES,, -H2-CT,,,,,,,,,YES,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,, -H2-CC,,,,,,,,YES,,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,, -biopower,YES,,,,,,,,,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,, -geothermal,,,,,,,,,,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,, -beccs_mod,YES,,,,,,,,,,YES,YES,YES,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,, -beccs_max,YES,,,,,,,,,,YES,YES,,YES,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,, -Hydro,,,,,,,,,,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -lfill-gas,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,, -battery_li,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -dr_shed_1*dr_shed_2,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES -evmc_storage_1*evmc_storage_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,, -evmc_shape_1*evmc_shape_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,, -pumped-hydro,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,YES,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,, -pumped-hydro-flex,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,, -distpv,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,YES, -upv_1*upv_10,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,, -pvb1_1*pvb1_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,, -pvb2_1*pvb2_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,,YES,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,, -pvb3_1*pvb3_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,,,YES,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,, -wind-ofs_1*wind-ofs_10,,,,,,,,,,,,,,,,,,,,YES,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,, -wind-ons_1*wind-ons_10,,,,,,,,,,,,,,,,,,,,YES,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,, -csp1_1*csp1_12,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,YES,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -csp2_1*csp2_12,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -csp3_1*csp3_12,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -csp4_1*csp4_12,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydD,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -hydSD,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydSND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -hydUD,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydUND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -hydNPD,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydNPND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -hydED,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydEND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -electrolyzer,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,, -smr,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,, -smr_ccs,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,, -dac,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,, -dac_gas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,, -egs_allkm_1*egs_allkm_10,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,YES,,,YES,,,,,,,,,,,,,,,,,,,, -geohydro_allkm_1*geohydro_allkm_10,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,YES,,,,,,,,,,,,,,,,,,,,, -egs_nearfield_1*egs_nearfield_10,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,, +,BIO,COAL,COAL_CCS,GAS,GAS_CC,GAS_CC_CCS,GAS_CT,COMBINED_CYCLE,COMBUSTION_TURBINE,FUEL_CELL,CONV,CCS,CCS_MOD,CCS_MAX,CCSFLEX,CCSFLEX_BYP,CCSFLEX_STO,CCSFLEX_DAC,BECCS,RE,VRE,RSC,WIND,ONSWIND,OFSWIND,UPV,distpv,PV,PVB,PVB1,PVB2,PVB3,CSP,CSP_STORAGE,CSP1,CSP2,CSP3,CSP4,STORAGE,STORAGE_HYBRID,STORAGE_STANDALONE,STORAGE_INTERDAY,THERMAL_STORAGE,BATTERY,DEMAND_FLEX,EVMC,EVMC_STORAGE,EVMC_SHAPE,COFIRE,HYDRO,HYDRO_D,HYDRO_ND,PSH,GEO,GEO_HYDRO,GEO_EGS,GEO_EGS_ALLKM,GEO_EGS_NF,GEO_BASE,GEO_EXTRA,CANADA,VRE_NO_CSP,VRE_UTILITY,VRE_DISTRIBUTED,NUCLEAR,OGS,CONSUME,H2,SMR,DAC,LFILL,H2_COMBUSTION,H2_CC,H2_CT,REFURBTECH,cf_tech,FOSSIL,BOILER,NONDISPATCH,DR_SHED,GENTECH +can-imports,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,, +coal-CCS_mod,,YES,YES,,,,,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-CCS_max,,YES,YES,,,,,,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-CCS-F1,,YES,YES,,,,,,,,YES,YES,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-CCS-F2,,YES,YES,,,,,,,,YES,YES,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-CCS-F3,,YES,YES,,,,,,,,YES,YES,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +Coal-IGCC,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-new,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +CoalOldScr,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +CoalOldUns,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +CofireNew,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +CofireOld,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +Gas-CC,,,,YES,YES,,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_1x1,,,,YES,YES,,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_2x1,,,,YES,YES,,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_1x1-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_1x1-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_2x1-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_2x1-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS-F1,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS-F2,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS-F3,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CT,,,,YES,,,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CT_aero,,,,YES,,,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +ng-fuel-cell,,,,YES,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +o-g-s,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,YES,YES,,,YES +Nuclear,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,YES,,,YES +Nuclear-SMR,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,YES,,,YES +H2-CT,,,,,,,,,YES,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,YES +H2-CC,,,,,,,,YES,,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,YES +biopower,YES,,,,,,,,,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES +geothermal,,,,,,,,,,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,YES +beccs_mod,YES,,,,,,,,,,YES,YES,YES,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES +beccs_max,YES,,,,,,,,,,YES,YES,,YES,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES +Hydro,,,,,,,,,,,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES +lfill-gas,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,YES +battery_li,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES +dr_shed_1*dr_shed_2,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES, +evmc_storage_1*evmc_storage_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,, +evmc_shape_1*evmc_shape_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,, +pumped-hydro,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,YES,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES +pumped-hydro-flex,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES +distpv,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,YES,,YES +upv_1*upv_10,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,,,YES +pvb1_1*pvb1_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,YES +pvb2_1*pvb2_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,,YES,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,YES +pvb3_1*pvb3_10,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,,,YES,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,YES +wind-ofs_1*wind-ofs_10,,,,,,,,,,,,,,,,,,,,YES,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,,,YES +wind-ons_1*wind-ons_10,,,,,,,,,,,,,,,,,,,,YES,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,,,YES +csp1_1*csp1_12,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,YES,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +csp2_1*csp2_12,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +csp3_1*csp3_12,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +csp4_1*csp4_12,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydD,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +hydSD,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydSND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +hydUD,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydUND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +hydNPD,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydNPND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +hydED,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydEND,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +electrolyzer,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,YES +smr,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,,,YES +smr_ccs,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,,,YES +dac,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,,,YES +dac_gas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,,,YES +egs_allkm_1*egs_allkm_10,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,YES,,,YES,,,,,,,,,,,,,,,,,,,,,YES +geohydro_allkm_1*geohydro_allkm_10,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,YES,,,,,,,,,,,,,,,,,,,,,,YES +egs_nearfield_1*egs_nearfield_10,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,YES \ No newline at end of file From 0149846328abeb6f5b00db452501ee807b1a824e Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 13:42:49 -0600 Subject: [PATCH 03/71] resolve conflicts --- cases.csv | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cases.csv b/cases.csv index 70585853..21dcd290 100644 --- a/cases.csv +++ b/cases.csv @@ -15,6 +15,7 @@ plantchar_biopower,Biopower generators cost and performance characteristics (inp plantchar_coal_ccs,Coal CCS generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_coal_ccs}.csv). Options start with 'coal-ccs_' and the switch should be set to the entire file name (ex: coal-ccs_ATB_2024_moderate),coal-ccs_ATB_(2024)_(conservative|moderate|advanced),coal-ccs_ATB_2024_moderate, plantchar_coal,Coal generators cost and performance characteristics (inputs\plant_characteristics\{plantchar_coal}.csv). Options start with 'coal_' and the switch should be set to the entire file name (ex: coal_ATB_2024_moderate),coal_ATB_(2024)_(moderate),coal_ATB_2024_moderate, plantchar_csp,CSP cost and performance characteristics (inputs\plant_characteristics\{plantchar_csp}.csv). The options for plantchar_csp start with 'csp_' and the switch should be set to the entire file name (ex: csp_ATB_2024_advanced),csp_ATB_(2023|2024)_(conservative|moderate|advanced),csp_ATB_2024_moderate, +plantchar_fuelcell,Fuel cell cost and performance characteristics (inputs\plant_characteristics\{plantchar_fuelcell}.csv). The options for plantchar_fuelcell start with 'fuelcell_' and the switch should be set to the entire file name (ex: fuelcell_ATB_2024_advanced),fuelcell_ATB_2024_(moderate|advanced),fuelcell_ATB_2024_moderate, plantchar_gas_ccs,Natural gas CCS generator cost and performance characteristics (inputs\plant_characteristics\{plantchar_gas_ccs}.csv). Options start with 'gas-ccs' and the switch should be set to the entire file name (ex: gas-ccs_ATB_2024_moderate),gas-ccs_ATB_(2024)_(conservative|moderate|advanced),gas-ccs_ATB_2024_moderate, plantchar_gas,Natural gas generator cost and performance characteristics (inputs\plant_characteristics\{plantchar_gas}.csv). Options start with 'gas_' and the switch should be set to the entire file name (ex: gas_ATB_2024_moderate),gas_ATB_(2024)_(moderate),gas_ATB_2024_moderate, plantchar_geo,Geothermal cost setting (inputs\plant_characteristics\{plantchar_geo}.csv).The options for plantchar_geo start with 'geo_' and the switch should be set to the entire file name (ex: geo_ATB_2023_conservative),geo_ATB_(2023|2024)_(conservative|moderate|advanced),geo_ATB_2024_moderate, @@ -46,7 +47,7 @@ retscen,Retirement Scenario,Nuke60RetireYear; Nuke80RetireYear; NukeEarlyRetireY supplycurve,Wind and Solar Supply Curves,default; 0; naris; 2018,default, uraniumscen,Uranium price scenario,AEO_(2023|2025)_reference,AEO_2025_reference, GSw_Region,Specify column from inputs/userinput/modeled_regions.csv or from {column of hierarchy.csv}/{period-delimited entries to keep from that column},N/A,country/USA, -GSw_RegionResolution,Specify the spatial resolution of modeled regions,county; ba; aggreg; mixed,aggreg, +GSw_ZoneSet,Set of geospatial zones to use as balancing areas (described in inputs/zones/README.md),^(z48|z54|z69|z132|z134|z3109|UTcounty|PJMcounty)$,z132 capcredit_hierarchy_level,Select level at which to aggregate net load for capacity-credit calculation,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,transreg, construction_schedules_suffix,File suffix for construction schedules,default,default, construction_times_suffix,File suffix for construction times by technology,default,default, @@ -136,6 +137,7 @@ GSw_EFS2_FlexCase,"Case used for electrification flex_type - format is {1}_{2}, GSw_EmploymentFactor,Employment factor - options to choose from are factor from JEDI model and two papers,JEDI; Mayfield ;Rutovitz ;Ram ,JEDI, GSw_EVMC,Turn on adoptable EV managed charging,0; 1,0, GSw_ForcePrescription,Turn on/off forced prescriptions - turning off will allow unlimited but not free builds in historical years,0; 1,1, +GSw_FuelCell,Turn on/off fuel cells (natural gas / H2) as a technology option,0; 1,0, GSw_FutureHydCF_RepYears,_-delimited years of historical hydro plant data from which to calculate capacity factors representing future hydro,N/A,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022, GSw_GasCurve,"Select natural gas supply curve (0 = cendiv, 1 = national + cendiv, 2 = static, 3 = national)",0; 1; 2; 3,1, GSw_GasCC_H_1x1,Turn on/off both gas-CC_H_1x1 and gas-CC_H_1x1-CCS_mod/max plant options,0; 1,0, @@ -169,7 +171,6 @@ GSw_H2Combustion,Switch to turn on/off H2CT and H2CC techs,0; 1,1, GSw_H2Combustionupgrade,Indicate whether to allow gas-CC and gas-CT to upgrade to H2-CT and H2-CC,0; 1,1, GSw_H2CombinedCycle,Indicate whether to allow H2-CC,0; 1,1, GSw_H2LeakageScen,Scenarios of H2 leakage rates from upstream and process of producing electricity by technology; scenario name options from emission_constraints/h2_leakage_rate.csv,N/A,Fan_et_al_2022/Med, -GSw_HierarchyFile,Indicate the version of the hierarchy file to use (default=hierarchy.csv with 132 zones),default; agg125; agg69; agg54,default, GSw_HourlyChunkAggMethod,How to aggregate CF and load within the chunks specified by GSw_HourlyChunkLengthRep (if set to anything other than 'mean' this switch overrides GSw_PRM_StressLoadAggMethod) (ties for mid are broken by the later hour; i.e. for 4-hour chunks and a setting of 'mid' the 3rd hour is used) (if an integer is provided the index starts at 1; i.e. 1 is the 1st hour),(mean|mid|\d),mean, GSw_HourlyChunkLengthRep,Length of representative-period dispatch timeslices in hours; must be divisible into 24,1; 2; 3; 4; 6; 8; 12; 24,3, GSw_HourlyChunkLengthStress,Length of stress-period dispatch timeslices in hours; must be divisible into 24,1; 2; 3; 4; 6; 8; 12; 24,3, @@ -207,7 +208,7 @@ GSw_Int_CC,"Select intertemporal CC method (0=average undifferentiated, 1=averag GSw_Int_Curt,"Select intertemporal Curt method (0=average undifferentiated, 1=average differentiated , 2=marginal undifferentiated, 3=marginal differentiated)",0; 1; 2; 3,0, GSw_InterDayLinkage,Turn on (1) or off (0) the ability for interday storage techs (specified in tech-subset-table.csv) to shift energy between representative days (non-interday techs are unaffected),0; 1,0, GSw_LfillGas,Turn on/off lfill-gas,0; 1,1, -GSw_LoadProfiles,Name of demand profile matching `inputs/profiles_demand/demand_{GSw_LoadProfiles}.h5` OR an absolute filepath to an EER-formatted demand .h5 file,^(historic|EFS_REFERENCE|EFS_MEDIUM|EFS_HIGH|EFS_Clean2035|EFS_Clean2035clip1pct|EFS_Clean2035_LTS|EFS_MEDIUMStretch2046|EER2023_Baseline_AEO2022|EER2023_IRAlow|EER2023_IRAmoderate|EER2023_100by2050|EER2025_Baseline_AEO2023|EER2025_IRAlow|EER2025_100by2050|\/.+|[a-zA-Z]:[\\\/].+)$,EER2025_IRAlow, +GSw_LoadProfiles,Name of demand profile matching `inputs/profiles_demand/demand_{GSw_LoadProfiles}.h5` OR an absolute filepath to an EER-formatted demand .h5 file,^(historic|EFS_REFERENCE|EFS_MEDIUM|EFS_HIGH|EFS_Clean2035|EFS_Clean2035clip1pct|EFS_Clean2035_LTS|EFS_MEDIUMStretch2040|EFS_MEDIUMStretch2046|EER2023_Baseline_AEO2022|EER2023_IRAlow|EER2023_IRAmoderate|EER2023_100by2050|EER2025_Baseline_AEO2023|EER2025_IRAlow|EER2025_100by2050|\/.+|[a-zA-Z]:[\\\/].+)$,EER2025_IRAlow, GSw_LoadAllocationMethod,"How to allocate state-level load to model regions ('population' uses each region's share of state population, 'state_lpf' uses county-state load participation factors calculated from the NARIS nodal network dataset)",population; state_lpf,population, GSw_Loadpoint,Switch to use or disable a loadpoint for the intertemporal solve after the first iteration,0; 1,0, GSw_LoadSiteCF,Annual capacity factor of optimally sited load (if 0 then optimally sited load is turned off; if between 0 and 1 then load is flexible (obeying stress period weight); if 1 then load is inflexible),float,0, @@ -327,7 +328,7 @@ GSw_TransCostMult,Multiplier for bulk BA-BA transmission costs,float,1, GSw_TransHurdleLevel1,Apply hurdle rates from inputs/transmission/cost_hurdle_intra.csv between regions at the specified hierarchy level,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; hurdlereg,transgrp, GSw_TransHurdleLevel2,Apply hurdle rates from inputs/transmission/cost_hurdle_intra.csv between regions at the specified hierarchy level,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region; hurdlereg,hurdlereg, GSw_TransHurdleRate,Turn on (1) or off (0) hurdle rates between hierarchy regions as defined by GSw_TransHurdleLevel1/GSw_TransHurdleLevel2 and inputs/transmission/cost_hurdle_intra.csv,0; 1,0, -GSw_TransNetworkSource,Network source for the initial transmission network used in the model,NARIS2024; REFS2009,NARIS2024, +GSw_TransNetworkSource,Network source for the initial transmission network used in the model,NARIS2024,NARIS2024, GSw_TransRestrict,hierarchy level within which to allow new transmission lines,r; nercr; transreg; transgrp; cendiv; st; interconnect; country; usda_region,country, GSw_TransScen,Transmission expansion scenario (options in inputs/transmission),N/A,default, GSw_TransSquiggliness,Transmission distance multiplier to approximate the squigglier paths followed by actual lines (only applied to NEW lines),float,1, From c980617f92ad44583f843c2231a45a067ceb6c73 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 13:53:33 -0600 Subject: [PATCH 04/71] Update user_guide.md --- docs/source/user_guide.md | 47 ++++++++++++--------------------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/docs/source/user_guide.md b/docs/source/user_guide.md index 7f0864f9..5955bea8 100644 --- a/docs/source/user_guide.md +++ b/docs/source/user_guide.md @@ -36,7 +36,7 @@ Here is partial list of remotely hosted files used by ReEDS: - Switch to `GSw_HourlyType=wek`, which increases the length of the periods from 1 day to 5 days. If all the other switches are left at their defaults, switching to `wek` would increase the coverage from 42 days to 5*42=210 days. - Reduce `GSw_HourlyClusterRegionLevel` to something smaller than transreg (like `st`), and then increase `GSw_HourlyNumClusters` - Switch to `GSw_HourlyClusteAlgorithm=hierarchical` and then increase `GSw_HourlyNumClusters` (although that's less desirable, because hierarchical clustering doesn't do as good of a job of reproducing the actual spatial distribution of CF and load) - - Switch to `Gsw_HourlyType=year`. Although if you're running for the whole US you'll need to turn on region aggregation (`GSw_RegionResolution=aggreg` and `GSw_HierarchyFile` in [`default` or `agg1`, or `agg2` or `agg3`]) for it to solve. + - Switch to `Gsw_HourlyType=year`. Although if you're running for the whole US you'll need to turn on region aggregation (`GSw_ZoneSet` in [`z54` or `z69`]) for it to solve. - `GSw_HourlyClusterAlgorithm` - If set to 'hierarchical', then hierarchical clustering is used via @@ -47,15 +47,14 @@ Here is partial list of remotely hosted files used by ReEDS: ``` - If set to 'optimized', then a two-step custom optimization is performed using the `hourly_repperiods.optimize_period_weights()` and `hourly_repperiods.assign_representative_days()` functions to minimize the deviation in regional load and PV/wind CF between the weighted representative periods and the full year. - - If set to a string containing the substring 'user', then instead of optimizing the choice of representative periods for this run, we read them from the inputs/temporal/period_szn_user.csv file. - - The scenario name is in the first column, labeled 'scenario'. ReEDS will use rows with the same label as `GSw_HourlyClusterAlgorithm`. - - So if you want to use the example period:szn map, just set `GSw_HourlyClusterAlgorithm=user`. - - If you want to specify a different period:szn map, then add your mapping at the bottom of inputs/temporal/period_szn_user.csv with a unique scenario name in the 'scenario' column, and set `GSw_HourlyClusterAlgorithm` to your unique scenario name, *which must contain the substring 'user'*. (For example, I could use a mapping called 'user_myname_20230130' by adding my period:szn map to inputs/temporal/period_szn_user.csv with 'user_myname_20230130' in the 'scenario' column and setting `GSw_HourlyClusterAlgorithm=user_myname_20230130`.) - - Make sure the settings for `GSw_HourlyType` and `GSw_HourlyWeatherYears` match your user-defined map. For example, if your 'user_myname_20230130' map includes 365 representative days for weather year 2012, then set `GSw_HourlyType=day` and `GSw_HourlyWeatherYears=2012`. + - If set to a string containing the substring 'user', then instead of optimizing the choice of representative periods for this run, the model reads a user-supplied file at `inputs/temporal/period_szn_{GSw_HourlyClusterAlgorithm}.csv`. + - So if you want to use the example period:szn map, set `GSw_HourlyClusterAlgorithm=user` and provide `inputs/temporal/period_szn_user.csv`. + - If you want to specify a different period:szn map, then create a file with your label in the filename and set `GSw_HourlyClusterAlgorithm` to that same label (which must contain the substring 'user'). For example, for `GSw_HourlyClusterAlgorithm=user_myname_20230130`, provide `inputs/temporal/period_szn_user_myname_20230130.csv`. + - Make sure the settings for `GSw_HourlyType` and `GSw_HourlyWeatherYears` match your user-defined map. For example, if your user-defined map includes 365 representative days for weather year 2012, then set `GSw_HourlyType=day` and `GSw_HourlyWeatherYears=2012`. - You can feed the period:szn mapping from a completed run into the inputs folder of your repo to force ReEDS to use the same representative or stress periods. More detail can be found in the postprocessing tools guide. -- `GSw_PRM_StressThreshold`: The default setting of 'transgrp_10_EUE_sum' means a threshold of "**10** ppm NEUE in each **transgrp**", with stress periods selected by the daily **sum** of **EUE** within each **transgrp**. +- `GSw_PRM_StressThreshold`: The default setting of 'transgrp_1_EUE_sum' means a threshold of "**1** ppm NEUE in each **transgrp**", with stress periods selected by the daily **sum** of **EUE** within each **transgrp**. - The first argument can be selected from ['country', 'interconnect', 'nercr', 'transreg', 'transgrp', 'st', 'r'] and specifies the hierarchy level within which to compare RA performance against the threshold. - The second argument can be any float and specifies the RA performance threshold in parts per million [ppm]. - The third argument can be 'NEUE' or 'EUE', specifying which metric to use when selecting stress periods. If set to 'NEUE' the model will add stress periods with the largest **fraction** of dropped load; if set to 'EUE' the model will add stress periods with the largest **absolute MWh** of dropped load. @@ -164,7 +163,7 @@ The low cost scenario assumes further declines from 2030 to 2050. Fixed O&M values are assumed to be 5% of CAPEX (source: ) Electrolyzer performance (efficiency) as well as SMR cost and performance assumptions are derived from assumptions [H2A: Hydrogen Analysis Production Models](https://www.nrel.gov/hydrogen/h2a-production-models.html), with guidance from Paige Jadun. -See original input assumptions in the [ReEDS-2.0_Input_Processing repo](https://github.nrel.gov/ReEDS/ReEDS-2.0_Input_Processing/blob/main/H2/costs/H2ProductionCosts-20210414.xlsx). +See original input assumptions in the [ReEDS_Input_Processing repo](https://github.com/ReEDS-Model/ReEDS_Input_Processing/blob/main/hydrogen/costs/H2ProductionCosts-20210414.xlsx). Note that SMR costs are currently in 2018$ and electrolyzer costs are in 2022$. @@ -183,7 +182,7 @@ Note that SMR costs are currently in 2018$ and electrolyzer costs are in 2022$. | Storage | Electric load | MWh/metric ton | The values in `H2_transport_and_storage_costs.csv` are based on raw data provided from the SERA model by Paige Jadun. -The raw data are formatted by the [`process-h2-inputs.py` script](https://github.nrel.gov/ReEDS/ReEDS-2.0_Input_Processing/blob/main/H2/process-h2-inputs.py) in the input processing repository. +The raw data are formatted by the [`process-h2-inputs.py` script](https://github.com/ReEDS-Model/ReEDS_Input_Processing/blob/main/hydrogen/process-h2-inputs.py) in the input processing repository. ### Intra-Regional Hydrogen Transport Cost @@ -327,7 +326,7 @@ This assumption is enforced by the constraints `eq_h2_ptc_region_balance` and `e | -- | -- | -- | -- | | GSw_H2_PTC | 1 | Required | Turns on and off hydrogen production tax credit | | GSw_H2 | 2 | Recommended | Representation of hydrogen supply/demand balance. Sw_H2=1 will not cause the model to fail but it is not recommended for the most accurate representation of the H2 PTC. | -| GSw_H2_Demand_Case | Anything except 'none' | Recommended |  Annual H2 demand profile | +| GSw_H2_Demand_Case | Anything except 'none' | Recommended | Annual H2 demand profile | | GSw_H2_IntraReg_Transport | 0.32 | Recommended | Flat cost for intra-ReEDS BA hydrogen transport and storage in $2004 / kg H2 produced. Note: This is now included as the default representation even if the H2 PTC is not enabled. This is assuming transport via pipelines. Transport costs could be more expensive if you assume other methods of H2 transport (ex. trucking). | | GSw_RetailAdder | $0/MWh | Recommended | 2004$/MWh adder to the cost of energy consumed by hydrogen producing facilities and direct air CO2 capture facilities. Included to represent the non-bulk-power-system costs of increasing electrical loads that are not captured within ReEDS. The default value of 0 indicates an assumption that these facilities are large enough to participate directly in wholesale markets. | @@ -380,29 +379,9 @@ In addition, the `GSw_ReducedResource` switch allows for a uniform reduction of ## Transmission -Most transmission input files are in the `inputs/transmission/` folder. - -### Input files - -1. *cost_hurdle_country.csv*: Indicates the hurdle rate for transmission flows between USA/Canada and USA/Mexico. -1. *rev_transmission_basecost.csv*: Base transmission costs (before terrain multipliers) used in reV. Sources for numeric values are: - 1. TEPPC: - 1. SCE: - 1. MISO: - 1. A more recent guide with a working link (as of 20230227) is available at . - 1. Southeast: Private communication with a representative Southeastern utility -1. *transmission_capacity_future_baseline.csv*: Historically installed (since 2010) and currently planned transmission capacity additions. -1. *transmission_capacity_future_{`GSw_TransScen`}.csv*: Available future routes for transmission capacity as specified by `GSw_TransScen`. -1. *transmission_capacity_init_AC_NARIS2024.csv*: Initial AC transmission capacities between 134 US ReEDS zones. Calculated using the code available at and nodal network data from . The method is described by Brown, P.R. et al 2023, "A general method for estimating zonal transmission interface limits from nodal network data", in prep. -1. *transmission_capacity_init_AC_REFS2009.csv*: Initial AC transmission capacities between 134 US ReEDS zones. Calculated for . -1. *transmission_capacity_init_nonAC.csv*: Initial DC transmission capacities between 134 US ReEDS zones. -1. *transmission_cost_ac_500kv_ba.csv* and *transmission_distance_ba.csv*: Distance and cost for a representative transmission route between each pair of 134 US ReEDS zones, assuming a 500 kV single-circuit line. Routes are determined by the reV model using a least-cost-path algorithm accounting for terrain and land type multipliers. Costs represent the appropriate base cost from rev_transmission_basecost.csv multiplied by the appropriate terrain and land type multipliers for each 90m pixel crossed by the path. Endpoints are in inputs/shapefiles/transmission_endpoints and represent a point within the largest urban area in each of the 134 ReEDS zones. -1. *transmission_cost_dc_ba.csv*: Same as transmission_cost_ac_500kv_ba.csv except assuming a 500 kV bipole DC line. - - ### Relevant switches -1. `GSw_HierarchyFile`: Indicate the suffix of the inputs/hierarchy.csv file you wish to use. +1. `GSw_ZoneSet`: Defines the model zones via the `inputs/zones/{GSw_ZoneSet}` files. 1. By default the transreg boundaries are used for operating reserve sharing, capacity credit calculations, and the boundaries for limited-transmission cases. 1. `GSw_TransInvMaxLongTerm`: Limit on annual transmission deployment nationwide **IN/AFTER** `firstyear_trans_longterm`, measured in TW-miles 1. `GSw_TransInvMaxNearTerm`: Limit on annual transmission deployment nationwide **BEFORE** `firstyear_trans_longterm`, measured in TW-miles @@ -412,7 +391,9 @@ Most transmission input files are in the `inputs/transmission/` folder. 1. `GSw_TransHurdle`: Intra-US hurdle rate for interzonal flows, measured in $2004/MWh 1. `GSw_TransHurdleLevel`: Indicate the level of hierarchy.csv between which to apply the hurdle rate specified by `GSw_TransHurdle`. i.e. if set to ‘st’, intra-state flows will have no hurdle rates but inter-state flows will have hurdle rates specified by `GSw_TransHurdle`. 1. `GSw_TransRestrict`: Indicate the level of hierarchy.csv within which to allow transmission expansion. i.e. if set to ‘st’, no inter-state expansion is allowed. -1. `GSw_TransScen`: Indicate the inputs/transmission/transmission_capacity_future_{`GSw_TransScen`}.csv file to use, which includes the list of interfaces that can be expanded. Note that the full list of expandable interfaces is indicated by this file plus transmission_capacity_future_default.csv (currently planned additions) plus transmission_capacity_init_AC_NARIS2024.csv (existing AC interfaces, which can be expanded by default) plus transmission_capacity_init_nonAC.csv (existing DC connections, which can be expanded by default). Applies to AC, LCC, and VSC. +1. `GSw_TransScen`: Indicate the inputs/transmission/transmission_capacity_future_{`GSw_TransScen`}.csv file to use, which includes the list of interfaces that can be expanded. +Note that the full list of expandable interfaces is indicated by this file plus transmission_capacity_future_default.csv (currently planned additions) plus existing AC and DC interfaces (which can be expanded by default). +Applies to AC, LCC, and VSC. 1. `GSw_PRM_hierarchy_level`: Level of hierarchy.csv within which to calculate net load, used for capacity credit. Larger levels indicate more planning coordination between regions. 1. `GSw_PRMTRADE_level`: Level of hierarchy.csv within which to allow PRM trading. By default it’s set to ‘country’, indicating no limits. If set to ‘r’, no PRM trading is allowed. @@ -616,7 +597,7 @@ MGA is turned off if set to 0; a reasonable choice for MGA is in the range of 0. Options are `min` or `max`. - `GSw_MGA_Objective` (default `capacity`): Objective for MGA (uses `GSw_MGA_SubObjective` to specify technology subset if set to `capacity`). Options are `capacity`, `generation`, `transmission`, `rasharing`, and `co2`. -- `GSw_MGA_SubObjective` (default `fossil`): Technology subset to minimize or maximize the capacity of (only used for `GSw_MGA_Objective = capacity`). +- `GSw_MGA_SubObjective` (default `gentech`): Technology subset to minimize or maximize the capacity of (only used for `GSw_MGA_Objective = capacity`). Options are the column names in the `inputs/tech-subset-table.csv` file. Users familiar with GAMS can add alternative objective functions to the `c_mga.gms` file and associated options to the `GSw_MGA_Objective` switch in `cases.csv`. From 54fac4163fdaf80ad0cc35db350ee7202d813ff4 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 14:17:40 -0600 Subject: [PATCH 05/71] resolve conflicts --- b_inputs.gms | 19 ++++--- c_mga.gms | 13 +++++ cases.csv | 2 +- docs/source/user_guide.md | 4 +- input_processing/copy_files.py | 90 +++++++++++++++------------------- runbatch.py | 64 ++++++++++++++---------- runfiles.csv | 7 +-- 7 files changed, 107 insertions(+), 92 deletions(-) diff --git a/b_inputs.gms b/b_inputs.gms index a3cb2c06..9f0400a8 100644 --- a/b_inputs.gms +++ b/b_inputs.gms @@ -449,11 +449,11 @@ set evmc_storage(i) "ev flexibility as direct load control", evmc_shape(i) "ev flexibility as adoptable change to load from response to pricing", fossil(i) "fossil technologies" + fuel_cell(i) "fuel cell technologies", gas_cc_ccs(i) "techs that are gas combined cycle and have CCS", gas_cc(i) "techs that are gas combined cycle", gas_ct(i) "techs that are gas combustion turbine", gas(i) "techs that use gas (but not o-g-s)", - gentech(i) "generation technologies", geo(i) "geothermal technologies", geo_base(i) "geothermal technologies typically considered in model runs", geo_hydro(i) "geothermal hydrothermal technologies", @@ -759,6 +759,10 @@ if(Sw_H2Combustionupgrade = 0, ban(i)$[i_subsets(i,'h2_combustion')$upgrade(i)] = yes ; ) ; +if(Sw_FuelCell = 0, + ban(i)$i_subsets(i,'fuel_cell') = yes ; +) ; + if(Sw_LfillGas = 0, ban('lfill-gas') = yes ; ) ; @@ -978,11 +982,11 @@ evmc(i)$(not ban(i)) = yes$i_subsets(i,'evmc') ; evmc_storage(i)$(not ban(i)) = yes$i_subsets(i,'evmc_storage') ; evmc_shape(i)$(not ban(i)) = yes$i_subsets(i,'evmc_shape') ; fossil(i)$(not ban(i)) = yes$i_subsets(i,'fossil') ; +fuel_cell(i)$(not ban(i)) = yes$i_subsets(i,'fuel_cell') ; gas_cc_ccs(i)$(not ban(i)) = yes$i_subsets(i,'gas_cc_ccs') ; gas_cc(i)$(not ban(i)) = yes$i_subsets(i,'gas_cc') ; gas_ct(i)$(not ban(i)) = yes$i_subsets(i,'gas_ct') ; gas(i)$(not ban(i)) = yes$i_subsets(i,'gas') ; -gentech(i)$(not ban(i)) = yes$i_subsets(i,'gentech') geo(i)$(not ban(i)) = yes$i_subsets(i,'geo') ; geo_base(i)$(not ban(i)) = yes$i_subsets(i,'geo_base') ; geo_hydro(i)$(not ban(i)) = yes$i_subsets(i,'geo_hydro') ; @@ -3525,11 +3529,12 @@ $offempty $onempty parameter trancap_init_itlgrp(itlgrp,itlgrpp,trtype) "--MW-- initial upper limit on interface flows between itlgrps" / -$offlisting -$ondelim -$include inputs_case%ds%trancap_init_itlgrp.csv -$offdelim -$onlisting +*** TEMPORARY 20260402: Skip itlgrp functionality until we fix it +* $offlisting +* $ondelim +* $include inputs_case%ds%trancap_init_itlgrp.csv +* $offdelim +* $onlisting / ; $offempty diff --git a/c_mga.gms b/c_mga.gms index 23e66ce6..3bbe7223 100644 --- a/c_mga.gms +++ b/c_mga.gms @@ -12,6 +12,19 @@ eq_MGA_CostEnvelope(t)$[tmodel(t)$Sw_MGA].. * --------------------------------------------------------------------------- $ifthen.mgaobj %GSw_MGA_Objective% == 'capacity' +$ifthen.mgasubobj %GSw_MGA_SubObjective% == 'all' +Equation eq_MGA_Objective "--MW-- Defines generation capacity for MGA" ; +Variable MGA_OBJ "--MW-- Capacity of all technologies to be minimized/maximied" ; +eq_MGA_Objective$Sw_MGA.. + MGA_OBJ + =e= + sum{(i,v,r,t) + $[tmodel(t) + $valcap(i,v,r,t)], + CAP(i,v,r,t) + } +; +$else.mgasubobj Equation eq_MGA_Objective "--MW-- Defines generation capacity for MGA" ; Variable MGA_OBJ "--MW-- Capacity of technology to be minimized/maximied" ; eq_MGA_Objective$Sw_MGA.. diff --git a/cases.csv b/cases.csv index 21dcd290..f6ef90c7 100644 --- a/cases.csv +++ b/cases.csv @@ -220,7 +220,7 @@ GSw_MethaneLeakageScen,Fractional leakage of methane from upstream natural gas p GSw_MGA_CostDelta,MGA: Fraction by which to allow objective function to increase when using Modeling to Generate Alternatives (MGA is turned off if set to 0; a common choice for MGA is 0.01),float,0, GSw_MGA_Direction,MGA: Directionality of second optimization,(min|max),min, GSw_MGA_Objective,MGA: Objective for MGA (uses GSw_MGA_SubObjective to specify technology subset if set to capacity),(capacity|generation|transmission|rasharing|co2|employment),capacity, -GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity or generation of (only used for GSw_MGA_Objective=(capacity or generation)),(battery|ccs|coal|dac|fossil|gas|geo|gentech|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind),gentech, +GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity or generation of (only used for GSw_MGA_Objective=(capacity or generation)),(battery|ccs|coal|dac|fossil|gas|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind|all),storage, GSw_MinCF,Turn on/off regional min CF constraint (applied at i/r level),0; 1,1, GSw_Mingen,Turn on/off min-gen constraints by r/h/szn,0; 1,0, GSw_MingenFixed,Turn on/off fixed min-gen constraints,0; 1,1, diff --git a/docs/source/user_guide.md b/docs/source/user_guide.md index 5955bea8..50a56506 100644 --- a/docs/source/user_guide.md +++ b/docs/source/user_guide.md @@ -326,7 +326,7 @@ This assumption is enforced by the constraints `eq_h2_ptc_region_balance` and `e | -- | -- | -- | -- | | GSw_H2_PTC | 1 | Required | Turns on and off hydrogen production tax credit | | GSw_H2 | 2 | Recommended | Representation of hydrogen supply/demand balance. Sw_H2=1 will not cause the model to fail but it is not recommended for the most accurate representation of the H2 PTC. | -| GSw_H2_Demand_Case | Anything except 'none' | Recommended | Annual H2 demand profile | +| GSw_H2_Demand_Case | Anything except 'none' | Recommended |  Annual H2 demand profile | | GSw_H2_IntraReg_Transport | 0.32 | Recommended | Flat cost for intra-ReEDS BA hydrogen transport and storage in $2004 / kg H2 produced. Note: This is now included as the default representation even if the H2 PTC is not enabled. This is assuming transport via pipelines. Transport costs could be more expensive if you assume other methods of H2 transport (ex. trucking). | | GSw_RetailAdder | $0/MWh | Recommended | 2004$/MWh adder to the cost of energy consumed by hydrogen producing facilities and direct air CO2 capture facilities. Included to represent the non-bulk-power-system costs of increasing electrical loads that are not captured within ReEDS. The default value of 0 indicates an assumption that these facilities are large enough to participate directly in wholesale markets. | @@ -597,7 +597,7 @@ MGA is turned off if set to 0; a reasonable choice for MGA is in the range of 0. Options are `min` or `max`. - `GSw_MGA_Objective` (default `capacity`): Objective for MGA (uses `GSw_MGA_SubObjective` to specify technology subset if set to `capacity`). Options are `capacity`, `generation`, `transmission`, `rasharing`, and `co2`. -- `GSw_MGA_SubObjective` (default `gentech`): Technology subset to minimize or maximize the capacity of (only used for `GSw_MGA_Objective = capacity`). +- `GSw_MGA_SubObjective` (default `fossil`): Technology subset to minimize or maximize the capacity of (only used for `GSw_MGA_Objective = capacity`). Options are the column names in the `inputs/tech-subset-table.csv` file. Users familiar with GAMS can add alternative objective functions to the `c_mga.gms` file and associated options to the `GSw_MGA_Objective` switch in `cases.csv`. diff --git a/input_processing/copy_files.py b/input_processing/copy_files.py index 3e0edbbe..731b2533 100644 --- a/input_processing/copy_files.py +++ b/input_processing/copy_files.py @@ -11,6 +11,7 @@ import yaml import json import h5py +from pathlib import Path # Local Imports sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) import reeds @@ -180,7 +181,6 @@ def get_regions_and_agglevel( reeds_path, inputs_case, save_regions_and_agglevel=True, - NARIS=False ): """ Create a regional mapping to help filter for specific regions and aggregation levels. @@ -192,17 +192,18 @@ def get_regions_and_agglevel( """ sw = reeds.io.get_switches(inputs_case) - # Load the full regions list + ## TEMPORARY 20260402: Load the full regions list + ## Use the line below once we make the switch + # hierarchy = reeds.io.assemble_hierarchy(inputs_case) hierarchy = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'hierarchy{}.csv'.format( - '' if (sw['GSw_HierarchyFile'] == 'default') - else '_'+sw['GSw_HierarchyFile'])) + Path(reeds.io.reeds_path, 'inputs', 'zones', sw.GSw_ZoneSet, 'hierarchy_from134.csv') ) hierarchy['offshore'] = 0 # Append offshore zones if using if int(sw.GSw_OffshoreZones): - hierarchy_offshore = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'hierarchy_offshore.csv') + hierarchy_offshore = reeds.io.assemble_hierarchy( + fpath=os.path.join(reeds_path, 'inputs', 'zones', 'hierarchy_offshore.csv'), + extra=False, ).assign(offshore=1) hierarchy = pd.concat([hierarchy, hierarchy_offshore], ignore_index=True) @@ -213,12 +214,11 @@ def get_regions_and_agglevel( index=False, header=True ) - if not NARIS: - hierarchy = hierarchy.loc[hierarchy.country.str.lower()=='usa'].copy() - # Add a row for each county - county2zone = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'county2zone.csv'), dtype={'FIPS':str}, + ## TEMPORARY 20260402: Use the old 134-zone county2zone until the aggregation approach is updated + county2zone = ( + reeds.io.get_county2zone(GSw_ZoneSet='z134', as_map=False) + .rename(columns={'r':'ba'}) ) county2zone['county'] = 'p' + county2zone.FIPS county2zone.to_csv( @@ -232,44 +232,32 @@ def get_regions_and_agglevel( # Subset hierarchy for the region of interest (based on the GSw_Region switch) # Parse the GSw_Region switch. If it includes a '/' character, it has the format # {column of hierarchy.csv}/{period-delimited entries to keep from that column}. - if '/' in sw['GSw_Region']: - hier_sub = pd.DataFrame() - # allow the list defined by the user to include multiple spatial resolutions - region_groups = sw['GSw_Region'].split('//') if '//' in sw['GSw_Region'] else [sw['GSw_Region']] - # separate lists associated with each spatial resolution - for region_group in region_groups: - GSw_RegionLevel, GSw_Region = region_group.split('/') - GSw_Region = GSw_Region.split('.') - - hier_sub_partial = pd.concat([ - hierarchy[hierarchy[GSw_RegionLevel] == region] for region in GSw_Region - ]) - - hier_sub = pd.concat([hier_sub, hier_sub_partial]) - # Otherwise use the modeled_regions.csv file to define the regions - else: - modeled_regions = pd.read_csv( - os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv')) - modeled_regions.columns = modeled_regions.columns.str.lower() - val_r_in = list( - modeled_regions[~modeled_regions[sw['GSw_Region'].lower()].isna()]['r'].unique()) - hier_sub = hierarchy[hierarchy['ba'].isin(val_r_in)].copy() + hier_sub = pd.DataFrame() + # allow the list defined by the user to include multiple spatial resolutions + region_groups = sw['GSw_Region'].split('//') if '//' in sw['GSw_Region'] else [sw['GSw_Region']] + # separate lists associated with each spatial resolution + for region_group in region_groups: + GSw_RegionLevel, GSw_Region = region_group.split('/') + GSw_Region = GSw_Region.split('.') + + hier_sub_partial = pd.concat([ + hierarchy[hierarchy[GSw_RegionLevel] == region] for region in GSw_Region + ]) + hier_sub = pd.concat([hier_sub, hier_sub_partial]) # Read region resolution switch to determine agglevel agglevel = sw['GSw_RegionResolution'].lower() # Check if desired spatial resolution is mixed if agglevel == 'mixed': - #Set value in resolution column of hier_sub to match value assigned in modeled_regions.csv region_def = pd.read_csv( - os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv')) - region_def = region_def[['r', sw['GSw_Region']]] + os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv') + )[['r', sw.GSw_ZoneSet]] - res_map = region_def.set_index('r')[sw['GSw_Region']].to_dict() + res_map = region_def.set_index('r').squeeze(1).to_dict() hier_sub['resolution'] = hier_sub['ba'].map(res_map) - else: hier_sub['resolution'] = agglevel @@ -337,7 +325,7 @@ def get_regions_and_agglevel( os.path.join(inputs_case, 'val_r_all.csv'), header=False, index=False) # Rename columns and save as hierarchy_with_res.csv for use in agglevel_variables function - hier_sub.rename(columns={'r':'*r'}).to_csv( + hier_sub.drop(columns='offshore', errors='ignore').rename(columns={'r':'*r'}).to_csv( os.path.join(inputs_case, 'hierarchy_with_res.csv'), index=False) # Drop county name and resolution columns @@ -362,7 +350,7 @@ def get_regions_and_agglevel( if sw.GSw_RegionResolution == 'mixed': mod_reg = pd.read_csv( os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv')) - if 'aggreg' in mod_reg[sw.GSw_Region].tolist(): + if 'aggreg' in mod_reg[sw.GSw_ZoneSet].tolist(): hier_sub['itlgrp'] = hier_sub['aggreg'] hier_sub[['r','itlgrp']].rename(columns={'r':'*r'}).to_csv( os.path.join(inputs_case, 'hierarchy_itlgrp.csv'), index=False) @@ -372,7 +360,7 @@ def get_regions_and_agglevel( os.path.join(inputs_case, 'val_itlgrp.csv'), header=False, index=False) # Drop any substate region columns as these will no longer be needed - hier_sub = hier_sub.drop(['county','ba','itlgrp','st_interconnect'],axis=1) + hier_sub = hier_sub.drop(['county', 'ba', 'itlgrp'], axis=1) # Populate val_st as unique states (not st_int) from the subsetted hierarchy table # Also include "voluntary" state for modeling voluntary market REC trading @@ -401,7 +389,7 @@ def get_regions_and_agglevel( os.path.join(inputs_case, 'offshore.csv'), index=False, header=False, ) - levels = list(hier_sub.columns) + levels = [i for i in hier_sub if i != 'offshore'] valid_regions = {level: list(hier_sub[level].unique()) for level in levels} val_r = sorted(valid_regions['r']) @@ -635,8 +623,6 @@ def subset_to_valid_regions( # Transmission files need to be filtered differently to allow interfaces between BA and county resolution regions transmission_files = [ - 'transmission_capacity_init_AC_r.csv', - 'transmission_capacity_init_nonAC.csv', 'transmission_cost_ac.csv', 'transmission_cost_dc.csv', 'transmission_distance.csv', @@ -1088,7 +1074,11 @@ def write_disagg_data_files(runfiles, inputs_case): # region-to-county fractions, and the latter is needed to calculate # state-to-county and BA-to-county fractions. county_r_map = reeds.io.get_county2zone(os.path.dirname(inputs_case)) - county2zone = reeds.io.get_county2zone(as_map=False) + ## TEMPORARY 20260402: Use the old 134-zone county2zone until the aggregation approach is updated + county2zone = ( + reeds.io.get_county2zone(GSw_ZoneSet='z134', as_map=False) + .rename(columns={'r':'ba'}) + ) county2zone['county'] = 'p' + county2zone['FIPS'].astype(str).str.zfill(5) county2zone['r'] = county2zone['FIPS'].map(county_r_map) @@ -1589,14 +1579,13 @@ def generate_maps_gpkg(inputs_case): #%% =========================================================================== ### --- PROCEDURE --- ### =========================================================================== -def main(reeds_path, inputs_case, NARIS=False): +def main(reeds_path, inputs_case): """ Run copy_files.py for use in the ReEDS workflow Parameters: reeds_path : str (Path to the ReEDS directory) inputs_case : str (Path to the run/inputs_case directory) - NARIS : Ture/False (NARIS: North American Renewable Integration Study) Returns: None (Writes files to the inputs_case directory) @@ -1605,7 +1594,7 @@ def main(reeds_path, inputs_case, NARIS=False): ### --- Gather dataframes and dictionaries necessary for the script execution --- ### =========================================================================== # Obtain data necessary to filter and aggregate regions - regions_and_agglevel = get_regions_and_agglevel(reeds_path, inputs_case, NARIS=NARIS) + regions_and_agglevel = get_regions_and_agglevel(reeds_path, inputs_case) # Use agglevel_variables function to obtain spatial resolution variables agglevel_variables = reeds.spatial.get_agglevel_variables(reeds_path, inputs_case) @@ -1682,8 +1671,7 @@ def main(reeds_path, inputs_case, NARIS=False): # #%% Settings for testing ### # reeds_path = reeds.io.reeds_path - #inputs_case = os.path.join(reeds_path,'runs','test_employment_Pacific','inputs_case') - #NARIS = False + # inputs_case = os.path.join(reeds_path,'runs','v20260305_itlM0_USA_defaults','inputs_case') # ---- Set up logger ---- diff --git a/runbatch.py b/runbatch.py index 0441501c..c2670376 100644 --- a/runbatch.py +++ b/runbatch.py @@ -9,6 +9,7 @@ import time import shutil import csv +import importlib import numpy as np import pandas as pd import subprocess @@ -282,6 +283,8 @@ def check_compatibility(sw): .format('\n'.join(err_switch_configs)) ) + reeds.inputs.validate_zoneset(sw['GSw_ZoneSet']) + ### Aggregation if (sw['GSw_RegionResolution'] != 'aggreg') and (int(sw['GSw_NumCSPclasses']) != 12): raise NotImplementedError( @@ -292,7 +295,7 @@ def check_compatibility(sw): ### Parsed string switches ## Automatic inputs reeds_path = os.path.dirname(__file__) - hierarchy = pd.read_csv(os.path.join(reeds_path,'inputs','hierarchy.csv')) + hierarchy = reeds.io.get_hierarchy(GSw_ZoneSet=sw['GSw_ZoneSet']).reset_index() for threshold in sw['GSw_PRM_StressThreshold'].split('/'): ## Example: threshold = 'transgrp_10_EUE_sum' @@ -425,33 +428,29 @@ def check_compatibility(sw): raise ValueError(err) # Add a row for each county - county2zone = pd.read_csv( - os.path.join(reeds_path, 'inputs', 'county2zone.csv'), dtype={'FIPS':str}, - ) + ## TEMPORARY 20260402 until the aggregation procedure is updated + county2zone = reeds.io.get_county2zone(GSw_ZoneSet='z134', as_map=False) county2zone['county'] = 'p' + county2zone.FIPS # Add county info to hierarchy - hierarchy = hierarchy.merge(county2zone.drop(columns=['FIPS','state']), on='ba') - - if '/' in sw['GSw_Region']: - # Handle multiple spatial resolutions - region_groups = sw['GSw_Region'].split('//') if '//' in sw['GSw_Region'] else [sw['GSw_Region']] - for group in region_groups: - level, regions = group.split('/') - if level not in hierarchy: - raise ValueError("Fix level in GSw_Region") - invalid_regions = [ - region for region in regions.split('.') - if region.lower() not in hierarchy[level].str.lower().values - ] - if invalid_regions: - err = f"GSw_Region: {', '.join(invalid_regions)} need to be in {hierarchy[level].unique()}" - raise Exception(err) - else: - modeled_regions = pd.read_csv( - os.path.join(reeds_path,'inputs','userinput','modeled_regions.csv') - ) - if sw['GSw_Region'] not in modeled_regions: - raise ValueError("No column in modeled_regions.csv matching GSw_Region") + hierarchy = hierarchy.merge(county2zone.drop(columns=['FIPS','state']), on='r') + + # Make sure specified regions are allowed for the specified hierarchy level + region_groups = sw['GSw_Region'].split('//') if '//' in sw['GSw_Region'] else [sw['GSw_Region']] + for group in region_groups: + level, regions = group.split('/') + if level not in hierarchy: + err = ( + f"The specified hierarchy level '{level}' does not exist in the hierarchy file." + f"\nUpdate GSw_Region={sw['GSw_Region']} to specify a valid level." + ) + raise ValueError(err) + invalid_regions = [ + region for region in regions.split('.') + if region.lower() not in hierarchy[level].str.lower().values + ] + if invalid_regions: + err = f"GSw_Region: {', '.join(invalid_regions)} need to be in {hierarchy[level].unique()}" + raise Exception(err) ### Compatible switch combinations if sw['GSw_LoadProfiles'] == 'historic': @@ -497,6 +496,19 @@ def check_compatibility(sw): ### Contents of user-specified files reeds.checks.check_switches(sw) + ### Uncommonly used packages + if sw['GSw_HourlyClusterAlgorithm'].lower().startswith('kmedoids'): + if importlib.util.find_spec("sklearn_extra") is None: + err = ( + "The scikit-learn-extra package is required for GSw_HourlyClusterAlgorithm=" + f"{sw['GSw_HourlyClusterAlgorithm']} but is not available in your conda " + "environment. Please install it by running:\n" + " pip install 'scikit-learn-extra>=0.2.0,<0.3.0'" + "\nor:\n" + " conda install -c conda-forge scikit-learn-extra=0.2" + ) + raise ModuleNotFoundError(err) + def solvestring_sequential( batch_case, caseSwitches, diff --git a/runfiles.csv b/runfiles.csv index 3179e6f7..1900a944 100644 --- a/runfiles.csv +++ b/runfiles.csv @@ -241,7 +241,7 @@ load_2010.csv,,1,sum,ignore,r,wide,,1,0,,1,,,,disaggfunc set to ignore because l load_allyear.csv,,1,sum,ignore,*r,"h,t",,0,0,,1,,,,disaggfunc set to ignore because load will already be in correct spatial resolution load_multiplier.csv,inputs/load/demand_{demandscen}.csv,1,ignore,ignore,,,,,0,,,,,, load_multiplier_r.csv,,1,ignore,ignore,,,,1,0,,,,,, -loadsite_annual.csv,inputs/load/loadsite_{GSw_LoadSiteTrajectory}.csv,int(sw.GSw_LoadSiteCF) != 0,ignore,ignore,*loadsitereg,t,,,0,,,,,, +loadsite_annual.csv,inputs/load/loadsite_{GSw_LoadSiteTrajectory}.csv,float(sw.GSw_LoadSiteCF) > 0,ignore,ignore,*loadsitereg,t,,,0,,,,,, maps.gpkg,,1,ignore,ignore,,,,,,,1,,,, maxage.csv,inputs/plant_characteristics/maxage.csv,1,ignore,ignore,,,,,0,,,,,, maxdailycf.csv,inputs/plant_characteristics/maxdailycf.csv,int(sw.GSw_MaxDailyCF) != 0,ignore,ignore,,,,,0,,,,,, @@ -317,6 +317,7 @@ plantchar_dr_shed_vom.csv,inputs/plant_characteristics/dr_shed_vom_{dr_shedscen} plantchar_dr_shed_fom.csv,inputs/plant_characteristics/dr_shed_fom_{dr_shedscen}.csv,int(sw.GSw_DRShed) != 0,ignore,ignore,r,"tech,wide",,1,0,,,,,,used to define plantcharout.csv plantchar_evmc_shape.csv,inputs/plant_characteristics/evmc_shape_{evmcscen}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv plantchar_evmc_storage.csv,inputs/plant_characteristics/evmc_storage_{evmcscen}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv +plantchar_fuelcell.csv,inputs/plant_characteristics/{plantchar_fuelcell}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv plantchar_gas_ccs.csv,inputs/plant_characteristics/{plantchar_gas_ccs}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv plantchar_gas.csv,inputs/plant_characteristics/{plantchar_gas}.csv,1,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv plantchar_geo.csv,inputs/plant_characteristics/{plantchar_geo}.csv,int(sw.GSw_Geothermal) != 0,ignore,ignore,,,,,0,,,,,,used to define plantcharout.csv @@ -429,10 +430,6 @@ tranloss.csv,,1,trans_lookup,ignore,"*r,rr",trtype,,0,0,drop_dup_r,1,,,,disaggfu trans_itc_fractions.csv,,1,ignore,ignore,,,,,0,,,,,, transmission_capacity_future.csv,inputs/transmission/transmission_capacity_future_{lvl}_{GSw_TransScen}.csv,1,sum,ignore,"r,rr","status,trtype,t",,0,0,drop_dup_r,,,,,'ignore’ in disaggfunc because all transmisison data will be read into model at appropriate spatial resolution transmission_capacity_future_baseline.csv,inputs/transmission/transmission_capacity_future_{lvl}_baseline.csv,1,sum,ignore,"r,rr","status,trtype,t",,0,0,drop_dup_r,,,,,'ignore’ in disaggfunc because all transmisison data will be read into model at appropriate spatial resolution -transmission_capacity_init_AC_r.csv,inputs/transmission/transmission_capacity_init_AC_{lvl}_{GSw_TransNetworkSource}.csv,1,sum,ignore,"r,rr",interface,,0,0,drop_dup_r,,,,, -transmission_capacity_init_AC_itlgrp.csv,inputs/transmission/transmission_capacity_init_AC_ba_{GSw_TransNetworkSource}.csv,1,sum,ignore,"r,rr",interface,,0,0,drop_dup_r,,,,, -transmission_capacity_init_AC_transgrp.csv,inputs/transmission/transmission_capacity_init_AC_transgrp_{GSw_TransNetworkSource}.csv,1,sum,ignore,"transgrp,transgrpp",interface,,0,0,,,,,, -transmission_capacity_init_nonAC.csv,inputs/transmission/transmission_capacity_init_nonAC_{lvl}.csv,1,sum,ignore,"r,rr",trtype,,0,0,drop_dup_r,,,,,'ignore’ in disaggfunc because all transmisison data will be read into model at appropriate spatial resolution transmission_cost_ac.csv,inputs/transmission/transmission_cost_ac_{GSw_TransUpgradeMethod}_{lvl}.h5,1,trans_lookup,ignore,"r,rr",tscbin,,0,0,drop_dup_r,,,,, transmission_cost_dc.csv,inputs/transmission/transmission_cost_dc_{lvl}.csv,1,trans_lookup,ignore,"r,rr",,,0,0,drop_dup_r,,,,, transmission_distance.csv,inputs/transmission/transmission_distance_{lvl}.h5,1,trans_lookup,ignore,"r,rr",,,0,0,drop_dup_r,,,,,Stored in wide-format h5 to reduce county filesize but converted to long in copy_files.py From 4edc116b895c5b5387ab9a95511b57e466425582 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 14:36:51 -0600 Subject: [PATCH 06/71] clean up --- b_inputs.gms | 164 +++++++++++++++++++------------------- c_mga.gms | 13 --- cases.csv | 2 +- docs/source/user_guide.md | 2 +- 4 files changed, 85 insertions(+), 96 deletions(-) diff --git a/b_inputs.gms b/b_inputs.gms index 9f0400a8..658529e6 100644 --- a/b_inputs.gms +++ b/b_inputs.gms @@ -415,88 +415,89 @@ $onlisting set *technology-specific subsets - battery(i) "battery storage technologies", - beccs(i) "Bio with CCS", - bio(i) "technologies that use only biofuel", - boiler(i) "technologies that use steam boilers" - canada(i) "Canadian imports", - ccs(i) "CCS technologies", - ccs_mod(i) "CCS technologies with moderate capture rate", - ccs_max(i) "CCS technologies with maximum capture rate", - ccsflex_byp(i) "Flexible CCS technologies with bypass", - ccsflex_dac(i) "Flexible CCS technologies with direct air capture", - ccsflex_sto(i) "Flexible CCS technologies with storage", - ccsflex(i) "Flexible CCS technologies", - cf_tech(i) "technologies that have a specified capacity factor" - coal_ccs(i) "technologies that use coal and have CCS", - coal(i) "technologies that use coal", - cofire(i) "cofire technologies", - combined_cycle(i) "combined cycle technologies", - combustion_turbine(i)"combustion turbine technologies", - consume(i) "technologies that consume electricity and add to load", - conv(i) "conventional generation technologies", - csp_storage(i) "csp generation technologies with thermal storage", - csp(i) "csp generation technologies", - csp1(i) "csp-tes generation technologies 1", - csp2(i) "csp-tes generation technologies 2", - csp3(i) "csp-tes generation technologies 3", - csp4(i) "csp-tes generation technologies 4", - dac(i) "direct air capture technologies", - distpv(i) "distpv (i.e., rooftop PV) generation technologies", - demand_flex(i) "demand flexibility technologies (includes DR and EVMC)", - dr_shed(i) "DR shed technologies" - evmc(i) "ev flexibility technologies", - evmc_storage(i) "ev flexibility as direct load control", - evmc_shape(i) "ev flexibility as adoptable change to load from response to pricing", - fossil(i) "fossil technologies" - fuel_cell(i) "fuel cell technologies", - gas_cc_ccs(i) "techs that are gas combined cycle and have CCS", - gas_cc(i) "techs that are gas combined cycle", - gas_ct(i) "techs that are gas combustion turbine", - gas(i) "techs that use gas (but not o-g-s)", - geo(i) "geothermal technologies", - geo_base(i) "geothermal technologies typically considered in model runs", - geo_hydro(i) "geothermal hydrothermal technologies", - geo_egs(i) "geothermal enhanced geothermal systems technologies", - geo_extra(i) "geothermal technologies not typically considered in model runs", - geo_egs_allkm(i) "egs (covering deep egs depths of all km) technologies", - geo_egs_nf(i) "egs (near-field) technologies", - h2_combustion(i) "h2-ct and h2-cc technologies", - h2_cc(i) "h2-cc technologies" - h2_ct(i) "h2-ct technologies", - h2(i) "hydrogen-producing technologies", - hyd_add_pump(i) "hydro techs with an added pump", - hydro_d(i) "dispatchable hydro technologies", - hydro_nd(i) "non-dispatchable hydro technologies", - hydro(i) "hydro technologies", - lfill(i) "land-fill gas technologies", - nondispatch(i) "technologies that are not dispatchable" - nuclear(i) "nuclear technologies", - ofswind(i) "offshore wind technologies", - ogs(i) "oil-gas-steam technologies", - onswind(i) "onshore wind technologies", - psh(i) "pumped hydro storage technologies", - pv(i) "all PV generation technologies", - pvb(i) "hybrid pv+battery technologies", - pvb1(i) "pvb generation technologies 1", - pvb2(i) "pvb generation technologies 2", - pvb3(i) "pvb generation technologies 3", - re(i) "renewable energy technologies", - refurbtech(i) "technologies that can be refurbished", - rsc_i(i) "technologies based on Resource supply curves", - smr(i) "steam methane reforming technologies", - storage_hybrid(i) "hybrid VRE-storage technologies", + battery(i) "battery storage technologies", + beccs(i) "Bio with CCS", + bio(i) "technologies that use only biofuel", + boiler(i) "technologies that use steam boilers" + canada(i) "Canadian imports", + ccs(i) "CCS technologies", + ccs_mod(i) "CCS technologies with moderate capture rate", + ccs_max(i) "CCS technologies with maximum capture rate", + ccsflex_byp(i) "Flexible CCS technologies with bypass", + ccsflex_dac(i) "Flexible CCS technologies with direct air capture", + ccsflex_sto(i) "Flexible CCS technologies with storage", + ccsflex(i) "Flexible CCS technologies", + cf_tech(i) "technologies that have a specified capacity factor" + coal_ccs(i) "technologies that use coal and have CCS", + coal(i) "technologies that use coal", + cofire(i) "cofire technologies", + combined_cycle(i) "combined cycle technologies", + combustion_turbine(i) "combustion turbine technologies", + consume(i) "technologies that consume electricity and add to load", + conv(i) "conventional generation technologies", + csp_storage(i) "csp generation technologies with thermal storage", + csp(i) "csp generation technologies", + csp1(i) "csp-tes generation technologies 1", + csp2(i) "csp-tes generation technologies 2", + csp3(i) "csp-tes generation technologies 3", + csp4(i) "csp-tes generation technologies 4", + dac(i) "direct air capture technologies", + distpv(i) "distpv (i.e., rooftop PV) generation technologies", + demand_flex(i) "demand flexibility technologies (includes DR and EVMC)", + dr_shed(i) "DR shed technologies" + evmc(i) "ev flexibility technologies", + evmc_storage(i) "ev flexibility as direct load control", + evmc_shape(i) "ev flexibility as adoptable change to load from response to pricing", + fossil(i) "fossil technologies" + fuel_cell(i) "fuel cell technologies", + gas_cc_ccs(i) "techs that are gas combined cycle and have CCS", + gas_cc(i) "techs that are gas combined cycle", + gas_ct(i) "techs that are gas combustion turbine", + gas(i) "techs that use gas (but not o-g-s)", + gentech(i) "generation technologies", + geo(i) "geothermal technologies", + geo_base(i) "geothermal technologies typically considered in model runs", + geo_hydro(i) "geothermal hydrothermal technologies", + geo_egs(i) "geothermal enhanced geothermal systems technologies", + geo_extra(i) "geothermal technologies not typically considered in model runs", + geo_egs_allkm(i) "egs (covering deep egs depths of all km) technologies", + geo_egs_nf(i) "egs (near-field) technologies", + h2_combustion(i) "h2-ct and h2-cc technologies", + h2_cc(i) "h2-cc technologies" + h2_ct(i) "h2-ct technologies", + h2(i) "hydrogen-producing technologies", + hyd_add_pump(i) "hydro techs with an added pump", + hydro_d(i) "dispatchable hydro technologies", + hydro_nd(i) "non-dispatchable hydro technologies", + hydro(i) "hydro technologies", + lfill(i) "land-fill gas technologies", + nondispatch(i) "technologies that are not dispatchable" + nuclear(i) "nuclear technologies", + ofswind(i) "offshore wind technologies", + ogs(i) "oil-gas-steam technologies", + onswind(i) "onshore wind technologies", + psh(i) "pumped hydro storage technologies", + pv(i) "all PV generation technologies", + pvb(i) "hybrid pv+battery technologies", + pvb1(i) "pvb generation technologies 1", + pvb2(i) "pvb generation technologies 2", + pvb3(i) "pvb generation technologies 3", + re(i) "renewable energy technologies", + refurbtech(i) "technologies that can be refurbished", + rsc_i(i) "technologies based on Resource supply curves", + smr(i) "steam methane reforming technologies", + storage_hybrid(i) "hybrid VRE-storage technologies", storage_standalone(i) "stand alone storage technologies", - storage(i) "storage technologies", - storage_interday(i) "interday storage", - thermal_storage(i) "thermal storage technologies", - upgrade(i) "technologies that are upgrades from other technologies", - upv(i) "upv generation technologies", - vre_distributed(i) "distributed PV technologies", - vre_no_csp(i) "variable renewable energy technologies that are not csp", - vre_utility(i) "utility scale wind and PV technologies", - vre(i) "variable renewable energy technologies", - wind(i) "wind generation technologies", + storage(i) "storage technologies", + storage_interday(i) "interday storage", + thermal_storage(i) "thermal storage technologies", + upgrade(i) "technologies that are upgrades from other technologies", + upv(i) "upv generation technologies", + vre_distributed(i) "distributed PV technologies", + vre_no_csp(i) "variable renewable energy technologies that are not csp", + vre_utility(i) "utility scale wind and PV technologies", + vre(i) "variable renewable energy technologies", + wind(i) "wind generation technologies", t(allt) "full set of years" /%startyear%*%endyear%/, @@ -987,6 +988,7 @@ gas_cc_ccs(i)$(not ban(i)) = yes$i_subsets(i,'gas_cc_ccs') ; gas_cc(i)$(not ban(i)) = yes$i_subsets(i,'gas_cc') ; gas_ct(i)$(not ban(i)) = yes$i_subsets(i,'gas_ct') ; gas(i)$(not ban(i)) = yes$i_subsets(i,'gas') ; +gentech(i)$(not ban(i)) = yes$i_subsets(i,'gentech') ; geo(i)$(not ban(i)) = yes$i_subsets(i,'geo') ; geo_base(i)$(not ban(i)) = yes$i_subsets(i,'geo_base') ; geo_hydro(i)$(not ban(i)) = yes$i_subsets(i,'geo_hydro') ; diff --git a/c_mga.gms b/c_mga.gms index 3bbe7223..23e66ce6 100644 --- a/c_mga.gms +++ b/c_mga.gms @@ -12,19 +12,6 @@ eq_MGA_CostEnvelope(t)$[tmodel(t)$Sw_MGA].. * --------------------------------------------------------------------------- $ifthen.mgaobj %GSw_MGA_Objective% == 'capacity' -$ifthen.mgasubobj %GSw_MGA_SubObjective% == 'all' -Equation eq_MGA_Objective "--MW-- Defines generation capacity for MGA" ; -Variable MGA_OBJ "--MW-- Capacity of all technologies to be minimized/maximied" ; -eq_MGA_Objective$Sw_MGA.. - MGA_OBJ - =e= - sum{(i,v,r,t) - $[tmodel(t) - $valcap(i,v,r,t)], - CAP(i,v,r,t) - } -; -$else.mgasubobj Equation eq_MGA_Objective "--MW-- Defines generation capacity for MGA" ; Variable MGA_OBJ "--MW-- Capacity of technology to be minimized/maximied" ; eq_MGA_Objective$Sw_MGA.. diff --git a/cases.csv b/cases.csv index f6ef90c7..c8247951 100644 --- a/cases.csv +++ b/cases.csv @@ -220,7 +220,7 @@ GSw_MethaneLeakageScen,Fractional leakage of methane from upstream natural gas p GSw_MGA_CostDelta,MGA: Fraction by which to allow objective function to increase when using Modeling to Generate Alternatives (MGA is turned off if set to 0; a common choice for MGA is 0.01),float,0, GSw_MGA_Direction,MGA: Directionality of second optimization,(min|max),min, GSw_MGA_Objective,MGA: Objective for MGA (uses GSw_MGA_SubObjective to specify technology subset if set to capacity),(capacity|generation|transmission|rasharing|co2|employment),capacity, -GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity or generation of (only used for GSw_MGA_Objective=(capacity or generation)),(battery|ccs|coal|dac|fossil|gas|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind|all),storage, +GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity or generation of (only used for GSw_MGA_Objective=(capacity or generation)),(battery|ccs|coal|dac|fossil|gas|gentech|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind|all),gentech, GSw_MinCF,Turn on/off regional min CF constraint (applied at i/r level),0; 1,1, GSw_Mingen,Turn on/off min-gen constraints by r/h/szn,0; 1,0, GSw_MingenFixed,Turn on/off fixed min-gen constraints,0; 1,1, diff --git a/docs/source/user_guide.md b/docs/source/user_guide.md index 50a56506..eca9e5bf 100644 --- a/docs/source/user_guide.md +++ b/docs/source/user_guide.md @@ -597,7 +597,7 @@ MGA is turned off if set to 0; a reasonable choice for MGA is in the range of 0. Options are `min` or `max`. - `GSw_MGA_Objective` (default `capacity`): Objective for MGA (uses `GSw_MGA_SubObjective` to specify technology subset if set to `capacity`). Options are `capacity`, `generation`, `transmission`, `rasharing`, and `co2`. -- `GSw_MGA_SubObjective` (default `fossil`): Technology subset to minimize or maximize the capacity of (only used for `GSw_MGA_Objective = capacity`). +- `GSw_MGA_SubObjective` (default `gentech`): Technology subset to minimize or maximize the capacity of (only used for `GSw_MGA_Objective = capacity` or `GSw_MGA_Objective = generation`). Options are the column names in the `inputs/tech-subset-table.csv` file. Users familiar with GAMS can add alternative objective functions to the `c_mga.gms` file and associated options to the `GSw_MGA_Objective` switch in `cases.csv`. From 145d3c20fadc58a2dfe9ca6dcf79027bfb335b70 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 14:52:50 -0600 Subject: [PATCH 07/71] remove all cap MGA max/min option --- cases.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cases.csv b/cases.csv index c8247951..051efcf0 100644 --- a/cases.csv +++ b/cases.csv @@ -220,7 +220,7 @@ GSw_MethaneLeakageScen,Fractional leakage of methane from upstream natural gas p GSw_MGA_CostDelta,MGA: Fraction by which to allow objective function to increase when using Modeling to Generate Alternatives (MGA is turned off if set to 0; a common choice for MGA is 0.01),float,0, GSw_MGA_Direction,MGA: Directionality of second optimization,(min|max),min, GSw_MGA_Objective,MGA: Objective for MGA (uses GSw_MGA_SubObjective to specify technology subset if set to capacity),(capacity|generation|transmission|rasharing|co2|employment),capacity, -GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity or generation of (only used for GSw_MGA_Objective=(capacity or generation)),(battery|ccs|coal|dac|fossil|gas|gentech|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind|all),gentech, +GSw_MGA_SubObjective,MGA: Technology subset to minimize or maximize the capacity or generation of (only used for GSw_MGA_Objective=(capacity or generation)),(battery|ccs|coal|dac|fossil|gas|gentech|geo|h2_combustion|hydro|nuclear|ofswind|onswind|pv|re|storage|upv|vre|wind),gentech, GSw_MinCF,Turn on/off regional min CF constraint (applied at i/r level),0; 1,1, GSw_Mingen,Turn on/off min-gen constraints by r/h/szn,0; 1,0, GSw_MingenFixed,Turn on/off fixed min-gen constraints,0; 1,1, From 6f8216b90f1a6094796b7ac9c9ea817396c252b6 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 16:26:31 -0600 Subject: [PATCH 08/71] add gentech to i_subtech set --- c_mga.gms | 1 - docs/source/user_guide.md | 2 +- inputs/sets/i_subtech.csv | 3 ++- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/c_mga.gms b/c_mga.gms index 23e66ce6..9d65f13a 100644 --- a/c_mga.gms +++ b/c_mga.gms @@ -25,7 +25,6 @@ eq_MGA_Objective$Sw_MGA.. } ; -$endif.mgasubobj * --------------------------------------------------------------------------- $elseif.mgaobj %GSw_MGA_Objective% == 'generation' diff --git a/docs/source/user_guide.md b/docs/source/user_guide.md index eca9e5bf..04b6613a 100644 --- a/docs/source/user_guide.md +++ b/docs/source/user_guide.md @@ -597,7 +597,7 @@ MGA is turned off if set to 0; a reasonable choice for MGA is in the range of 0. Options are `min` or `max`. - `GSw_MGA_Objective` (default `capacity`): Objective for MGA (uses `GSw_MGA_SubObjective` to specify technology subset if set to `capacity`). Options are `capacity`, `generation`, `transmission`, `rasharing`, and `co2`. -- `GSw_MGA_SubObjective` (default `gentech`): Technology subset to minimize or maximize the capacity of (only used for `GSw_MGA_Objective = capacity` or `GSw_MGA_Objective = generation`). +- `GSw_MGA_SubObjective` (default `gentech`): Technology subset to minimize or maximize the capacity of (only used for `GSw_MGA_Objective = (capacity or generation)`). Options are the column names in the `inputs/tech-subset-table.csv` file. Users familiar with GAMS can add alternative objective functions to the `c_mga.gms` file and associated options to the `GSw_MGA_Objective` switch in `cases.csv`. diff --git a/inputs/sets/i_subtech.csv b/inputs/sets/i_subtech.csv index fabf8237..c60eefce 100755 --- a/inputs/sets/i_subtech.csv +++ b/inputs/sets/i_subtech.csv @@ -79,4 +79,5 @@ REFURBTECH cf_tech FOSSIL BOILER -NONDISPATCH \ No newline at end of file +NONDISPATCH +GENTECH From ffd3c6ffb2e878623ec8e79afd23966fbb674516 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 17:59:13 -0600 Subject: [PATCH 09/71] resolve to pass github tests --- inputs/userinput/futurefiles.csv | 2 ++ 1 file changed, 2 insertions(+) diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index defb65b5..10443b6d 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -126,6 +126,8 @@ e.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, eall.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, emit_rate.csv,.csv,0,None,t,"etype,e,i,v,r",0,0,constant,0,None,done,constant emitrate.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant +employment_factor_plant.csv,.csv,1,ignore,9999,None,9999,0,constant,0,None,, +employment_factor_inter_transmission.csv,.csv,1,ignore,9999,None,9999,0,constant,0,None,, energy_communities.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, etype.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, ev_baseline_load.csv,.csv,0,None,2,"0,1",0,None,linear_5,None,None,linear or saturate?,linear_5 From 255c39f605789ae1a84a4ba6bf0194eb353fb6ec Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 16 Apr 2026 19:30:15 -0600 Subject: [PATCH 10/71] Update futurefiles.csv --- inputs/userinput/futurefiles.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/inputs/userinput/futurefiles.csv b/inputs/userinput/futurefiles.csv index 10443b6d..3fd2c463 100644 --- a/inputs/userinput/futurefiles.csv +++ b/inputs/userinput/futurefiles.csv @@ -243,6 +243,7 @@ ivt_default.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done (special ca ivt_small.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done (special case: ivt is extended in calc_financial_inputs.py since ivt is needed there),constant ivt_step.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant ivt.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done (special case: ivt is extended in calc_financial_inputs.py since ivt is needed there),constant +jtype.csv,.csv,1,None,9999,None,9999,0,constant,None,None,, lcclike.csv,.csv,1,None,9999,None,9999,0,constant,None,None,new, load_2010.csv,.csv,1,None,9999,None,9999,0,constant,None,None,done,constant load_allyear.csv,.csv,0,None,t,"*r,h",0,0,linear_5,0,None,done,linear_5 From ab732e8adcb79f34b302d90b4cfa20ee2404c88a Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 27 Apr 2026 14:00:58 -0600 Subject: [PATCH 11/71] reduce number of employment output files --- e_report_params.csv | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/e_report_params.csv b/e_report_params.csv index 6cb16126..cf7bf3e6 100644 --- a/e_report_params.csv +++ b/e_report_params.csv @@ -68,19 +68,9 @@ curt_rate(t),frac,fraction of VRE generation that is curtailed,,, "emit_r(etype,eall,r,t)",metric tons,"emissions by pollutant, regional",,, "emit_rate_regional(r,t)",metric tons,"regional average CO2 emissions rate, used in state CO2 caps",,, "emit_weighted(etype,eall)",metric tons * pvf,national emissions * pvf_onm,,, -"employment_generator_fom_ivrt(i,v,r,t)",jobs,generator fixed o&m jobs,,, -"employment_generator_vom_ivrt(i,v,r,t)",jobs,generator variable o&m jobs,,, -"employment_generator_om_ivrt(i,v,r,t)",jobs,generator variable o&m jobs,,, -"employment_generator_construction_inv_ivrt(i,v,r,t)",jobs,generator construction jobs,,, -"employment_generator_construction_ivrt(i,v,r,t)",jobs,cumulative generator construction jobs,,, -"employment_generator_irt(i,r,t)",jobs,generator jobs by tech and region,,, -"employment_trans_construction_rt(r,rr,t)",jobs,transmission construction jobs,,, -"employment_trans_om_rt(r,rr,t)",jobs,transmission o&m jobs,,, -"employment_trans_rt(r,t)",jobs,total transmission jobs by year,,, -"employment_tot_om_rt(r,t)",jobs,total O&M jobs by year and region,,, -"employment_tot_construction_rt(r,t)",jobs,total construction jobs by year and region,,, -"employment_tot_rt(r,t)",jobs,total jobs by region and year,,, -"employment_tot_t(t)",jobs,all jobs nation-wide by year,,, +"employment_generator(i,jtype,r,t)",jobs,"generator job-years by job type, tech, region, and solveyear",,, +"employment_transmission(jtype,r,t)",jobs,"transmission job-years by job type, region, and solveyear",,, +"employment_tot(r,t)",jobs,all job-years nation-wide by region and solveyear,,, error_check(*),unitless,set of checks to determine if there is an error - values should be zero if there is no error,,, "error_gen(i,v,r,allh,t)",MWh,"erroneous generation that disobeys valgen(i,v,r,t)",,, "excess_load(r,allh,t)",MW,level values of EXCESS variable for surplus load,,, From ea35ef81046f160ff83ab7b37eb9cadff5b0569d Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 27 Apr 2026 15:47:45 -0600 Subject: [PATCH 12/71] consolidate employment output files --- e_report.gms | 61 +++++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/e_report.gms b/e_report.gms index a1a15e4c..ed19c98f 100644 --- a/e_report.gms +++ b/e_report.gms @@ -2075,23 +2075,27 @@ h2_usage(r,h,t)$tmodel_new(t) = *========================= * EMPLOYMENT *========================= -* Employment from generators -* Generator O&M employment -employment_generator_fom_ivrt(i,v,r,t)$valcap(i,v,r,t) = CAP.l(i,v,r,t) * employment_factor_plant(i,"fom") ; -employment_generator_vom_ivrt(i,v,r,t)$valgen(i,v,r,t) = sum{h, GEN.l(i,v,r,h,t) - * hours(h) - * employment_factor_plant(i,"vom")} ; -employment_generator_om_ivrt(i,v,r,t) = employment_generator_fom_ivrt(i,v,r,t) + employment_generator_vom_ivrt(i,v,r,t) ; - -* Generator construction employment -employment_generator_construction_inv_ivrt(i,v,r,t)$valinv(i,v,r,t) = INV.l(i,v,r,t) * employment_factor_plant(i,"construction") ; -employment_generator_construction_ivrt(i,v,r,t) = employment_generator_construction_inv_ivrt(i,v,r,t) + sum{tt$tprev(t,tt),employment_generator_construction_inv_ivrt(i,v,r,tt)} ; -* Total generator employment -employment_generator_irt(i,r,t) = sum{v, employment_generator_om_ivrt(i,v,r,t) + employment_generator_construction_ivrt(i,v,r,t)} ; - -* Employment from transmission -* Transmission construction employment -employment_trans_construction_rt(r,rr,t) = +* Employment from generators (job-years) +* Generator O&M job-years +employment_generator(i,"fom",r,t) = sum{v, CAP.l(i,v,r,t)$valcap(i,v,r,t) * employment_factor_plant(i,"fom")} ; +employment_generator(i,"vom",r,t) = sum{(v,h), GEN.l(i,v,r,h,t)$valgen(i,v,r,t) * hours(h)* employment_factor_plant(i,"vom")} ; +* Generator construction job-years +parameter employment_generator_construction_inv(i,r,t) "Annual generator construction employment" ; +employment_generator_construction_inv(i,r,t) = sum{v, INV.l(i,v,r,t)$valinv(i,v,r,t) * employment_factor_plant(i,"construction")} ; +employment_generator(i,"construction",r,t) = employment_generator_construction_inv(i,r,t) + sum{tt$tprev(t,tt),employment_generator_construction_inv(i,r,tt)} ; + +* Employment from transmission (job-years) +* Transmission O&M job-years +parameter employment_transmission_fom(r,rr,t) "Transmission FO&M employment by line" ; +employment_transmission_fom(r,rr,t) = sum{trtype + $[routes(r,rr,trtype,t)], + CAPTRAN_ENERGY.l(r,rr,trtype,t) + * employment_factor_inter_transmission("fom") } ; +* Transmission FO&M employment by region and solveyear +employment_transmission("fom",r,t) = sum{rr,(employment_transmission_r_rr("fom",r,rr,t)) / 2} ; +* Transmission construction job-years +parameter employment_transmission_construction(r,rr,t) "Transmission construction employment by line" ; +employment_transmission_construction(r,rr,t) = * AC lines sum{tscbin $[routes_inv(r,rr,"AC",t) @@ -2107,25 +2111,10 @@ sum{tscbin * transmission_cost_nonac(r,rr,trtype) * INVTRAN.l(r,rr,trtype,t) * employment_factor_inter_transmission("construction") / 2 } ; - -* Transmission O&M employment -employment_trans_om_rt(r,rr,t) = sum{trtype - $[routes(r,rr,trtype,t)], - CAPTRAN_ENERGY.l(r,rr,trtype,t) - * employment_factor_inter_transmission("fom") } ; - -* Total transmission employment -employment_trans_rt(r,t) = sum{rr,(employment_trans_construction_rt(r,rr,t) + employment_trans_om_rt(r,rr,t)) / 2} ; - -* Total O&M employment (generator + transmission) -employment_tot_om_rt(r,t) = sum{(i,v), employment_generator_om_ivrt(i,v,r,t)} + sum{rr,(employment_trans_om_rt(r,rr,t)) / 2} ; - -* Total construction employment (generator + transmission) -employment_tot_construction_rt(r,t) = sum{(i,v), employment_generator_construction_ivrt(i,v,r,t)} + sum{rr,(employment_trans_construction_rt(r,rr,t)) / 2} ; - -* Total employment (generator + transmission) + (construction + O&M) -employment_tot_rt(r,t) = sum{i, employment_generator_irt(i,r,t)} + employment_trans_rt(r,t) ; -employment_tot_t(t) = sum{r, employment_tot_rt(r,t)} ; +employment_transmission("construction",r,t) = sum{rr,(employment_transmission_construction(r,rr,t)) / 2} ; +* Total employment (generator + transmission) +employment_tot(r,t) = sum{(i,jtype), employment_generator(i,jtype,r,t) } + + sum{jtype, employment_transmission(jtype,r,t) } ; *======================================== * Calculate powfrac From a010fccd4b6d433610a490a9e9f37926ecc6220b Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 27 Apr 2026 15:59:13 -0600 Subject: [PATCH 13/71] clean up --- e_report.gms | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/e_report.gms b/e_report.gms index ed19c98f..9e96c9df 100644 --- a/e_report.gms +++ b/e_report.gms @@ -2077,24 +2077,29 @@ h2_usage(r,h,t)$tmodel_new(t) = *========================= * Employment from generators (job-years) * Generator O&M job-years -employment_generator(i,"fom",r,t) = sum{v, CAP.l(i,v,r,t)$valcap(i,v,r,t) * employment_factor_plant(i,"fom")} ; -employment_generator(i,"vom",r,t) = sum{(v,h), GEN.l(i,v,r,h,t)$valgen(i,v,r,t) * hours(h)* employment_factor_plant(i,"vom")} ; +employment_generator(i,"fom",r,t) = sum{v, CAP.l(i,v,r,t)$valcap(i,v,r,t) + * employment_factor_plant(i,"fom")} ; +employment_generator(i,"vom",r,t) = sum{(v,h), GEN.l(i,v,r,h,t)$valgen(i,v,r,t) + * hours(h)* employment_factor_plant(i,"vom")} ; * Generator construction job-years -parameter employment_generator_construction_inv(i,r,t) "Annual generator construction employment" ; -employment_generator_construction_inv(i,r,t) = sum{v, INV.l(i,v,r,t)$valinv(i,v,r,t) * employment_factor_plant(i,"construction")} ; -employment_generator(i,"construction",r,t) = employment_generator_construction_inv(i,r,t) + sum{tt$tprev(t,tt),employment_generator_construction_inv(i,r,tt)} ; +parameter employment_generator_construction_inv(i,r,t) "Annual generator construction job-years" ; +employment_generator_construction_inv(i,r,t) = sum{v, INV.l(i,v,r,t)$valinv(i,v,r,t) + * employment_factor_plant(i,"construction")} ; +* Cumulative generator construction job-years +employment_generator(i,"construction",r,t) = employment_generator_construction_inv(i,r,t) + + sum{tt$tprev(t,tt),employment_generator_construction_inv(i,r,tt)} ; * Employment from transmission (job-years) * Transmission O&M job-years -parameter employment_transmission_fom(r,rr,t) "Transmission FO&M employment by line" ; +parameter employment_transmission_fom(r,rr,t) "Transmission FO&M job-years by line and solveyear" ; employment_transmission_fom(r,rr,t) = sum{trtype $[routes(r,rr,trtype,t)], CAPTRAN_ENERGY.l(r,rr,trtype,t) * employment_factor_inter_transmission("fom") } ; -* Transmission FO&M employment by region and solveyear +* Transmission FO&M job-years by region and solveyear employment_transmission("fom",r,t) = sum{rr,(employment_transmission_r_rr("fom",r,rr,t)) / 2} ; * Transmission construction job-years -parameter employment_transmission_construction(r,rr,t) "Transmission construction employment by line" ; +parameter employment_transmission_construction(r,rr,t) "Transmission construction job-years by line and solveyear" ; employment_transmission_construction(r,rr,t) = * AC lines sum{tscbin @@ -2111,8 +2116,10 @@ sum{tscbin * transmission_cost_nonac(r,rr,trtype) * INVTRAN.l(r,rr,trtype,t) * employment_factor_inter_transmission("construction") / 2 } ; +* Transmission construction job-years by region and solveyear employment_transmission("construction",r,t) = sum{rr,(employment_transmission_construction(r,rr,t)) / 2} ; -* Total employment (generator + transmission) + +* Total employment (generator + transmission) by region and solveyear employment_tot(r,t) = sum{(i,jtype), employment_generator(i,jtype,r,t) } + sum{jtype, employment_transmission(jtype,r,t) } ; From de3059730ff6f92c83041e0ac0879e0fbc529dbf Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 27 Apr 2026 16:56:24 -0600 Subject: [PATCH 14/71] clean up --- e_report.gms | 2 +- e_report_params.csv | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/e_report.gms b/e_report.gms index 9e96c9df..7e67bb4f 100644 --- a/e_report.gms +++ b/e_report.gms @@ -2097,7 +2097,7 @@ employment_transmission_fom(r,rr,t) = sum{trtype CAPTRAN_ENERGY.l(r,rr,trtype,t) * employment_factor_inter_transmission("fom") } ; * Transmission FO&M job-years by region and solveyear -employment_transmission("fom",r,t) = sum{rr,(employment_transmission_r_rr("fom",r,rr,t)) / 2} ; +employment_transmission("fom",r,t) = sum{rr,(employment_transmission_fom(r,rr,t)) / 2} ; * Transmission construction job-years parameter employment_transmission_construction(r,rr,t) "Transmission construction job-years by line and solveyear" ; employment_transmission_construction(r,rr,t) = diff --git a/e_report_params.csv b/e_report_params.csv index cf7bf3e6..5aaa491b 100644 --- a/e_report_params.csv +++ b/e_report_params.csv @@ -68,8 +68,8 @@ curt_rate(t),frac,fraction of VRE generation that is curtailed,,, "emit_r(etype,eall,r,t)",metric tons,"emissions by pollutant, regional",,, "emit_rate_regional(r,t)",metric tons,"regional average CO2 emissions rate, used in state CO2 caps",,, "emit_weighted(etype,eall)",metric tons * pvf,national emissions * pvf_onm,,, -"employment_generator(i,jtype,r,t)",jobs,"generator job-years by job type, tech, region, and solveyear",,, -"employment_transmission(jtype,r,t)",jobs,"transmission job-years by job type, region, and solveyear",,, +"employment_generator(i,jtype,r,t)",job-years,"generator employment by job type, tech, region, and solveyear",,, +"employment_transmission(jtype,r,t)",job-years,"transmission employment by job type, region, and solveyear",,, "employment_tot(r,t)",jobs,all job-years nation-wide by region and solveyear,,, error_check(*),unitless,set of checks to determine if there is an error - values should be zero if there is no error,,, "error_gen(i,v,r,allh,t)",MWh,"erroneous generation that disobeys valgen(i,v,r,t)",,, From 98f2e4370794af86b02c8e708cd7f2ec384450e7 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 27 Apr 2026 17:59:27 -0600 Subject: [PATCH 15/71] fix construction job-years calculation --- e_report.gms | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/e_report.gms b/e_report.gms index 7e67bb4f..2bcb13de 100644 --- a/e_report.gms +++ b/e_report.gms @@ -2082,12 +2082,8 @@ employment_generator(i,"fom",r,t) = sum{v, CAP.l(i,v,r,t)$valcap(i,v,r,t) employment_generator(i,"vom",r,t) = sum{(v,h), GEN.l(i,v,r,h,t)$valgen(i,v,r,t) * hours(h)* employment_factor_plant(i,"vom")} ; * Generator construction job-years -parameter employment_generator_construction_inv(i,r,t) "Annual generator construction job-years" ; -employment_generator_construction_inv(i,r,t) = sum{v, INV.l(i,v,r,t)$valinv(i,v,r,t) - * employment_factor_plant(i,"construction")} ; -* Cumulative generator construction job-years -employment_generator(i,"construction",r,t) = employment_generator_construction_inv(i,r,t) - + sum{tt$tprev(t,tt),employment_generator_construction_inv(i,r,tt)} ; +employment_generator(i,"construction",r,t) = sum{v, INV.l(i,v,r,t)$valinv(i,v,r,t) + * employment_factor_plant(i,"construction")} ; * Employment from transmission (job-years) * Transmission O&M job-years From 13224b8ddaef5e5fa15ce6c91514e35f19360e34 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 27 Apr 2026 18:28:21 -0600 Subject: [PATCH 16/71] no longer need encoding when writing log file --- reeds/log.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/log.py b/reeds/log.py index c60fe2e4..f2496c91 100755 --- a/reeds/log.py +++ b/reeds/log.py @@ -79,7 +79,7 @@ def get_solve_times(path=''): 'start': {}, 'stop': {}, } - with open(os.path.join(path, 'gamslog.txt'), 'r', encoding="ISO-8859-1") as f: + with open(os.path.join(path, 'gamslog.txt'), 'r') as f: for _line in f: line = _line.strip() ## Get the year/iteration From a8278792e2e452632d0668568950284d5238a3cc Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 12 May 2026 01:43:51 -0600 Subject: [PATCH 17/71] revert changes --- reeds/log.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/log.py b/reeds/log.py index 914b1b32..e11d8d53 100755 --- a/reeds/log.py +++ b/reeds/log.py @@ -79,7 +79,7 @@ def get_solve_times(path=''): 'start': {}, 'stop': {}, } - with open(os.path.join(path, 'gamslog.txt'), 'r') as f: + with open(os.path.join(path, 'gamslog.txt'), 'r') as f: for _line in f: line = _line.strip() ## Get the year/iteration From 61e2c5d07442e9c7aeb267884f6689215e4f1b19 Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 12 May 2026 01:46:46 -0600 Subject: [PATCH 18/71] revert changes --- reeds/log.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reeds/log.py b/reeds/log.py index e11d8d53..2216eebd 100755 --- a/reeds/log.py +++ b/reeds/log.py @@ -79,7 +79,7 @@ def get_solve_times(path=''): 'start': {}, 'stop': {}, } - with open(os.path.join(path, 'gamslog.txt'), 'r') as f: + with open(os.path.join(path, 'gamslog.txt'), 'r') as f: for _line in f: line = _line.strip() ## Get the year/iteration @@ -259,3 +259,4 @@ def get_model_dimensions(casedir, t): except Exception: print('meta.csv not found or not writeable:') print(traceback.format_exc()) + \ No newline at end of file From 3e52966f8db68a22bc2d78ba2e900c93648d6b38 Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 12 May 2026 01:47:35 -0600 Subject: [PATCH 19/71] Update log.py --- reeds/log.py | 1 - 1 file changed, 1 deletion(-) diff --git a/reeds/log.py b/reeds/log.py index 2216eebd..9816d719 100755 --- a/reeds/log.py +++ b/reeds/log.py @@ -259,4 +259,3 @@ def get_model_dimensions(casedir, t): except Exception: print('meta.csv not found or not writeable:') print(traceback.format_exc()) - \ No newline at end of file From 54917996c46f911dfc07a1dbe6e81e13124fc8f2 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 21 May 2026 17:51:04 -0600 Subject: [PATCH 20/71] add mga cplex settings --- reeds/inputs.py | 1 + cplex.op3 => reeds/solver/cplex.op3 | 0 cplex.op4 => reeds/solver/cplex.op4 | 0 3 files changed, 1 insertion(+) rename cplex.op3 => reeds/solver/cplex.op3 (100%) rename cplex.op4 => reeds/solver/cplex.op4 (100%) diff --git a/reeds/inputs.py b/reeds/inputs.py index 416bebbd..a2abd507 100644 --- a/reeds/inputs.py +++ b/reeds/inputs.py @@ -371,6 +371,7 @@ def solvestring_sequential( 'GSw_ClimateHydro', 'GSw_ClimateWater', 'GSw_gopt', + 'GSw_gopt_mga', 'GSw_HourlyChunkLengthRep', 'GSw_HourlyChunkLengthStress', 'GSw_HourlyType', diff --git a/cplex.op3 b/reeds/solver/cplex.op3 similarity index 100% rename from cplex.op3 rename to reeds/solver/cplex.op3 diff --git a/cplex.op4 b/reeds/solver/cplex.op4 similarity index 100% rename from cplex.op4 rename to reeds/solver/cplex.op4 From 76c0541e6d85f3397839643247250a782f32015f Mon Sep 17 00:00:00 2001 From: An Pham Date: Sat, 6 Jun 2026 17:02:36 -0600 Subject: [PATCH 21/71] resolve conflicts --- docs/sources.csv | 1 + reeds/core/setup/b_inputs.gms | 34 ---------------------------------- 2 files changed, 1 insertion(+), 34 deletions(-) diff --git a/docs/sources.csv b/docs/sources.csv index 456c17fe..02edda24 100644 --- a/docs/sources.csv +++ b/docs/sources.csv @@ -508,6 +508,7 @@ RelativeFilePath,RelativeFolderPath,FileName_new,FileExtension,Description_new,I /inputs/sets/e.csv,/inputs/sets,e,.csv,set of emission categories used in model,,,,GAMS set, /inputs/sets/eall.csv,/inputs/sets,eall,.csv,set of emission categories used in reporting,,,,GAMS set, /inputs/sets/etype.csv,/inputs/sets,etype,.csv,,,,,, +/inputs/sets/jtype.csv,/inputs/sets,jtype,.csv,,,,,, /inputs/sets/f.csv,/inputs/sets,f,.csv,set of fuel types,,,,GAMS set, /inputs/sets/flex_type.csv,/inputs/sets,flex_type,.csv,set of demand flexibility types,,,,GAMS set, /inputs/sets/fuel2tech.csv,/inputs/sets,fuel2tech,.csv,mapping between fuel types and generations,,,,GAMS set, diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index c0b749a0..8878a18d 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6026,40 +6026,6 @@ $else.upgrade_ef employment_factor_plant(i,"construction")$upgrade(i) = employment_factor_plant(i,"construction") * 0.5 ; $endif.upgrade_ef -*==================================== -* --- Employment Factors --- -*==================================== -* Employment factors of construction and operation of power plants -$onempty -Table employment_factor_plant(i,jtype) "--job-years/MW or job-years/MWh-- employment factors of power plants by technology and job type (construction and o&m jobs)" -$offlisting -$ondelim -$include inputs_case%ds%employment_factor_plant.csv -$offdelim -$onlisting -; -$offempty - -* Employment factors of transmission deployment and flow -parameter employment_factor_inter_transmission(jtype) "--job-years/MW or job-years/$M-- employment factors of transmission lines by job type (construction or o&m jobs)" -/ -$offlisting -$ondelim -$include inputs_case%ds%employment_factor_inter_transmission.csv -$offdelim -$onlisting -/ ; - -* If upgrade techs, construction employment factor is half -* Only apply this to non CCS upgrades if using JEDI EFs since JEDI already specifies CCS upgrade EFs -$ifthen.upgrade_ef %GSw_EmploymentFactor% == "JEDI" -employment_factor_plant(i,"construction")$[upgrade(i) - $(not ccs(i))] = employment_factor_plant(i,"construction") * 0.5 ; -$else.upgrade_ef -employment_factor_plant(i,"construction")$upgrade(i) = employment_factor_plant(i,"construction") * 0.5 ; -$endif.upgrade_ef - - *================================================================================================ *== h- and szn-dependent sets and parameters (declared here, populated in 2_temporal_params) === *================================================================================================ From 0249828462bc9606d4d85d9a446b89b13c156add Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 9 Jun 2026 14:35:28 -0600 Subject: [PATCH 22/71] resolve conflicts --- inputs/tech-subset-table.csv | 148 ++++++++++++++-------------- reeds/core/setup/b_inputs.gms | 1 + reeds/input_processing/runfiles.csv | 1 + 3 files changed, 76 insertions(+), 74 deletions(-) diff --git a/inputs/tech-subset-table.csv b/inputs/tech-subset-table.csv index 8493a78c..0e9c7b62 100644 --- a/inputs/tech-subset-table.csv +++ b/inputs/tech-subset-table.csv @@ -1,74 +1,74 @@ -,BIO,COAL,COAL_CCS,GAS,GAS_CC,GAS_CC_CCS,GAS_CT,COMBINED_CYCLE,COMBUSTION_TURBINE,FUEL_CELL,CONV,TEMP_DERATE,CCS,CCS_MOD,CCS_MAX,CCSFLEX,CCSFLEX_BYP,CCSFLEX_STO,CCSFLEX_DAC,BECCS,RE,VRE,RSC,WIND,ONSWIND,OFSWIND,UPV,distpv,PV,PVB,PVB1,PVB2,PVB3,CSP,CSP_STORAGE,CSP1,CSP2,CSP3,CSP4,STORAGE,STORAGE_HYBRID,STORAGE_STANDALONE,STORAGE_INTERDAY,THERMAL_STORAGE,BATTERY,DEMAND_FLEX,EVMC,EVMC_STORAGE,EVMC_SHAPE,COFIRE,HYDRO,HYDRO_D,HYDRO_ND,PSH,GEO,GEO_HYDRO,GEO_EGS,GEO_EGS_ALLKM,GEO_EGS_NF,GEO_BASE,GEO_EXTRA,CANADA,VRE_NO_CSP,VRE_UTILITY,VRE_DISTRIBUTED,NUCLEAR,OGS,CONSUME,H2,SMR,DAC,LFILL,H2_COMBUSTION,H2_CC,H2_CT,REFURBTECH,cf_tech,FOSSIL,BOILER,NONDISPATCH,DR_SHED -can-imports,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,, -coal-CCS_mod,,YES,YES,,,,,,,,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-CCS_max,,YES,YES,,,,,,,,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-CCS-F1,,YES,YES,,,,,,,,YES,YES,YES,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-CCS-F2,,YES,YES,,,,,,,,YES,YES,YES,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-CCS-F3,,YES,YES,,,,,,,,YES,YES,YES,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -Coal-IGCC,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -coal-new,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -CoalOldScr,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -CoalOldUns,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -CofireNew,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -CofireOld,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,, -Gas-CC,,,,YES,YES,,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_1x1,,,,YES,YES,,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_2x1,,,,YES,YES,,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_1x1-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_1x1-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_2x1-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC_H_2x1-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS-F1,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS-F2,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CC-CCS-F3,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CT,,,,YES,,,YES,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -Gas-CT_aero,,,,YES,,,YES,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -ng-fuel-cell,,,,YES,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,, -o-g-s,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,YES,YES,, -Nuclear,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,YES,, -Nuclear-SMR,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,YES,, -H2-CT,,,,,,,,,YES,,YES,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,, -H2-CC,,,,,,,,YES,,,YES,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,, -biopower,YES,,,,,,,,,,YES,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,, -geothermal,,,,,,,,,,,YES,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,, -beccs_mod,YES,,,,,,,,,,YES,YES,YES,YES,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,, -beccs_max,YES,,,,,,,,,,YES,YES,YES,,YES,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,, -Hydro,,,,,,,,,,,YES,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -lfill-gas,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,, -battery_li,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -dr_shed_1*dr_shed_2,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES -evmc_storage_1*evmc_storage_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,, -evmc_shape_1*evmc_shape_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,, -pumped-hydro,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,YES,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,, -pumped-hydro-flex,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,, -distpv,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,YES, -upv_1*upv_10,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,, -pvb1_1*pvb1_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,, -pvb2_1*pvb2_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,,YES,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,, -pvb3_1*pvb3_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,,,YES,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,, -wind-ofs_1*wind-ofs_10,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,, -wind-ons_1*wind-ons_10,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,, -csp1_1*csp1_12,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,YES,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -csp2_1*csp2_12,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -csp3_1*csp3_12,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -csp4_1*csp4_12,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydD,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -hydSD,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydSND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -hydUD,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydUND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -hydNPD,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydNPND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -hydED,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,, -hydEND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES, -electrolyzer,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,, -smr,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,, -smr_ccs,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,, -dac,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,, -dac_gas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,, -egs_allkm_1*egs_allkm_10,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,YES,,,YES,,,,,,,,,,,,,,,,,,,, -geohydro_allkm_1*geohydro_allkm_10,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,YES,,,,,,,,,,,,,,,,,,,,, -egs_nearfield_1*egs_nearfield_10,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,, +,BIO,COAL,COAL_CCS,GAS,GAS_CC,GAS_CC_CCS,GAS_CT,COMBINED_CYCLE,COMBUSTION_TURBINE,FUEL_CELL,CONV,TEMP_DERATE,CCS,CCS_MOD,CCS_MAX,CCSFLEX,CCSFLEX_BYP,CCSFLEX_STO,CCSFLEX_DAC,BECCS,RE,VRE,RSC,WIND,ONSWIND,OFSWIND,UPV,distpv,PV,PVB,PVB1,PVB2,PVB3,CSP,CSP_STORAGE,CSP1,CSP2,CSP3,CSP4,STORAGE,STORAGE_HYBRID,STORAGE_STANDALONE,STORAGE_INTERDAY,THERMAL_STORAGE,BATTERY,DEMAND_FLEX,EVMC,EVMC_STORAGE,EVMC_SHAPE,COFIRE,HYDRO,HYDRO_D,HYDRO_ND,PSH,GEO,GEO_HYDRO,GEO_EGS,GEO_EGS_ALLKM,GEO_EGS_NF,GEO_BASE,GEO_EXTRA,CANADA,VRE_NO_CSP,VRE_UTILITY,VRE_DISTRIBUTED,NUCLEAR,OGS,CONSUME,H2,SMR,DAC,LFILL,H2_COMBUSTION,H2_CC,H2_CT,REFURBTECH,cf_tech,FOSSIL,BOILER,NONDISPATCH,DR_SHED,GENTECH +can-imports,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,, +coal-CCS_mod,,YES,YES,,,,,,,,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-CCS_max,,YES,YES,,,,,,,,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-CCS-F1,,YES,YES,,,,,,,,YES,YES,YES,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-CCS-F2,,YES,YES,,,,,,,,YES,YES,YES,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-CCS-F3,,YES,YES,,,,,,,,YES,YES,YES,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +Coal-IGCC,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +coal-new,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +CoalOldScr,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +CoalOldUns,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +CofireNew,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +CofireOld,,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,YES +Gas-CC,,,,YES,YES,,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_1x1,,,,YES,YES,,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_2x1,,,,YES,YES,,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_1x1-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_1x1-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_2x1-CCS_mod,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC_H_2x1-CCS_max,,,,YES,YES,YES,,YES,,,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS-F1,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS-F2,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CC-CCS-F3,,,,YES,YES,YES,,YES,,,YES,YES,YES,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CT,,,,YES,,,YES,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +Gas-CT_aero,,,,YES,,,YES,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +ng-fuel-cell,,,,YES,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,YES +o-g-s,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,YES,YES,,,YES +Nuclear,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,YES,,,YES +Nuclear-SMR,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,YES,,,YES +H2-CT,,,,,,,,,YES,,YES,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,YES +H2-CC,,,,,,,,YES,,,YES,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,YES +biopower,YES,,,,,,,,,,YES,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES +geothermal,,,,,,,,,,,YES,YES,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,YES +beccs_mod,YES,,,,,,,,,,YES,YES,YES,YES,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES +beccs_max,YES,,,,,,,,,,YES,YES,YES,,YES,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES +Hydro,,,,,,,,,,,YES,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES +lfill-gas,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,YES +battery_li,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +dr_shed_1*dr_shed_2,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES, +evmc_storage_1*evmc_storage_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,, +evmc_shape_1*evmc_shape_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,, +pumped-hydro,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,YES,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,, +pumped-hydro-flex,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,, +distpv,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,YES,,YES +upv_1*upv_10,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,,,YES +pvb1_1*pvb1_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,YES,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,YES +pvb2_1*pvb2_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,,YES,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,YES +pvb3_1*pvb3_10,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,,,YES,,,YES,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,YES +wind-ofs_1*wind-ofs_10,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,,,YES +wind-ons_1*wind-ons_10,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,YES,YES,,,,,YES +csp1_1*csp1_12,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,YES,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +csp2_1*csp2_12,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,YES,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +csp3_1*csp3_12,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +csp4_1*csp4_12,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,YES,YES,,,,YES,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydD,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +hydSD,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydSND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +hydUD,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydUND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +hydNPD,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydNPND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +hydED,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,,,YES +hydEND,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,YES +electrolyzer,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,,,,,,,,,, +smr,,,,,,,,,,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,,, +smr_ccs,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,YES,,,,,,,,,,,, +dac,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,,, +dac_gas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,,YES,,,,,,,,,,, +egs_allkm_1*egs_allkm_10,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,YES,,,YES,,,,,,,,,,,,,,,,,,,,,YES +geohydro_allkm_1*geohydro_allkm_10,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,YES,,,,YES,,,,,,,,,,,,,,,,,,,,,,YES +egs_nearfield_1*egs_nearfield_10,,,,,,,,,,,,,,,,,,,,,YES,,YES,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,YES,,YES,,YES,YES,,,,,,,,,,,,,,,,,,,,,,YES diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 1c184a25..4fa84b0c 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -279,6 +279,7 @@ set gas_cc(i) "techs that are gas combined cycle", gas_ct(i) "techs that are gas combustion turbine", gas(i) "techs that use gas (but not o-g-s)", + gentech(i) "generation technologies", geo(i) "geothermal technologies", geo_base(i) "geothermal technologies typically considered in model runs", geo_hydro(i) "geothermal hydrothermal technologies", diff --git a/reeds/input_processing/runfiles.csv b/reeds/input_processing/runfiles.csv index 98d37b67..986bfe13 100644 --- a/reeds/input_processing/runfiles.csv +++ b/reeds/input_processing/runfiles.csv @@ -134,6 +134,7 @@ i_water_nocooling.csv,inputs/sets/i_water_nocooling.csv,1,ignore,ignore,,,,,0,,, incentives.csv,inputs/financials/incentives_{incentives_suffix}.csv,1,ignore,ignore,,,,,0,,,,,, inflation.csv,inputs/financials/inflation_{inflation_suffix}.csv,1,ignore,ignore,,,,0,0,,,,,, interconnection_queues.csv,inputs/capacity_exogenous/interconnection_queues.csv,1,ignore,ignore,r,"tg,r",,1,0,,,,,, +jtype.csv,inputs/sets/jtype.csv,1,ignore,ignore,,,,,,,,set,jtype,job types used in model (contstruction and om), lcclike.csv,inputs/sets/lcclike.csv,1,ignore,ignore,,,,,0,,,set,lcclike,transmission capacity types where lines are bundled with AC/DC converters, load_multiplier.csv,inputs/load/demand_{demandscen}.csv,1,ignore,ignore,,,,,0,,,,,, loadsite_annual.csv,inputs/load/loadsite_{GSw_LoadSiteTrajectory}.csv,float(sw.GSw_LoadSiteCF) > 0,ignore,ignore,*loadsitereg,t,,,0,,,,,, From ac4f01395422218ad0fba5d9dbf0b6c03207cf84 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 11 Jun 2026 11:08:51 -0600 Subject: [PATCH 23/71] reformat transmission employment factor data file --- .../employment/employment_factor_inter_transmission.csv | 8 +++++--- reeds/input_processing/copy_files.py | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/inputs/employment/employment_factor_inter_transmission.csv b/inputs/employment/employment_factor_inter_transmission.csv index 1abcc94b..68a95f9f 100644 --- a/inputs/employment/employment_factor_inter_transmission.csv +++ b/inputs/employment/employment_factor_inter_transmission.csv @@ -1,3 +1,5 @@ -jtype,JEDI,Mayfield,Rutovitz,Ram -construction,0.00000331,0.00000499,0.00000029,0.00000596 -fom,0.00075584,0.444,0,0 \ No newline at end of file +*source,construction,fom,vom +JEDI,0.00000331,0.00075584,0 +Mayfield,0.00000499,0.444,0 +Rutovitz,0.00000029,0,0 +Ram,0.00000596,0,0 \ No newline at end of file diff --git a/reeds/input_processing/copy_files.py b/reeds/input_processing/copy_files.py index e54dbad7..cf104b0b 100644 --- a/reeds/input_processing/copy_files.py +++ b/reeds/input_processing/copy_files.py @@ -1220,10 +1220,10 @@ def write_miscellaneous_files( os.path.join(inputs_case,'h2_leakage_rate.csv')) # Transmission employment factors: - pd.read_csv( + ef_trans = pd.read_csv( os.path.join(reeds_path,'inputs','employment','employment_factor_inter_transmission.csv'), - index_col='jtype', - )[sw['GSw_EmploymentFactor']].rename_axis('*jtype').round(8).to_csv( + index_col='*source') + ef_trans = ef_trans[ef_trans.index == sw['GSw_EmploymentFactor']].round(8).to_csv( os.path.join(inputs_case,'employment_factor_inter_transmission.csv')) # Add this_year to years_until_endogenous to generate the tech-specific firstyear.csv file From 2c78ed4fe2dcd84883c6e049884c6b5b0c36316a Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 11 Jun 2026 14:57:22 -0600 Subject: [PATCH 24/71] clean up --- inputs/employment/employment_factor_inter_transmission.csv | 2 +- reeds/input_processing/copy_files.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/inputs/employment/employment_factor_inter_transmission.csv b/inputs/employment/employment_factor_inter_transmission.csv index 68a95f9f..b160e1ce 100644 --- a/inputs/employment/employment_factor_inter_transmission.csv +++ b/inputs/employment/employment_factor_inter_transmission.csv @@ -1,4 +1,4 @@ -*source,construction,fom,vom +,construction,fom,vom JEDI,0.00000331,0.00075584,0 Mayfield,0.00000499,0.444,0 Rutovitz,0.00000029,0,0 diff --git a/reeds/input_processing/copy_files.py b/reeds/input_processing/copy_files.py index cf104b0b..15ecf74d 100644 --- a/reeds/input_processing/copy_files.py +++ b/reeds/input_processing/copy_files.py @@ -1222,9 +1222,9 @@ def write_miscellaneous_files( # Transmission employment factors: ef_trans = pd.read_csv( os.path.join(reeds_path,'inputs','employment','employment_factor_inter_transmission.csv'), - index_col='*source') - ef_trans = ef_trans[ef_trans.index == sw['GSw_EmploymentFactor']].round(8).to_csv( - os.path.join(inputs_case,'employment_factor_inter_transmission.csv')) + index_col=0) + ef_trans = ef_trans[ef_trans.index == sw['GSw_EmploymentFactor']].T.round(8).to_csv( + os.path.join(inputs_case,'employment_factor_inter_transmission.csv'),index=False) # Add this_year to years_until_endogenous to generate the tech-specific firstyear.csv file scalars = reeds.io.get_scalars(full=True) From 35820e5c6ad3fe0f5412fe574c6684575c3d6170 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 11 Jun 2026 17:01:54 -0600 Subject: [PATCH 25/71] clean up --- reeds/input_processing/copy_files.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/input_processing/copy_files.py b/reeds/input_processing/copy_files.py index 15ecf74d..74043841 100644 --- a/reeds/input_processing/copy_files.py +++ b/reeds/input_processing/copy_files.py @@ -1224,7 +1224,7 @@ def write_miscellaneous_files( os.path.join(reeds_path,'inputs','employment','employment_factor_inter_transmission.csv'), index_col=0) ef_trans = ef_trans[ef_trans.index == sw['GSw_EmploymentFactor']].T.round(8).to_csv( - os.path.join(inputs_case,'employment_factor_inter_transmission.csv'),index=False) + os.path.join(inputs_case,'employment_factor_inter_transmission.csv'),header=False) # Add this_year to years_until_endogenous to generate the tech-specific firstyear.csv file scalars = reeds.io.get_scalars(full=True) From 56d7b617c0a50e54e956435c6fb221d3844eb2a6 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 15 Jun 2026 11:14:35 -0600 Subject: [PATCH 26/71] clean up --- cases.csv | 2 +- .../employment/employment_factor_inter_transmission.csv | 8 ++++---- reeds/core/setup/b_inputs.gms | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cases.csv b/cases.csv index e91a7164..6aedcefa 100644 --- a/cases.csv +++ b/cases.csv @@ -134,7 +134,7 @@ GSw_distpv,Turn on/off distpv,0;1,1, GSw_DRShed, switch to turn on/off demand response shed resource,0;1,0, GSw_EFS_Flex,Switch for turning EFS load flexibility on or off,0,0, GSw_EFS2_FlexCase,"Case used for electrification flex_type - format is {1}_{2}, where 1 in [EFS_REFERENCE, EFS_MEDIUM, EFS_HIGH, EFS_Clean2035] and 2 in [Baseflex, Currentflex, Enhancedflex, Uberflex1, Uberflex2]",N/A,EFS_MEDIUM_EnhancedflexStretch2046, -GSw_EmploymentFactor,Employment factor - options to choose from are factor from JEDI model and two papers,JEDI; Mayfield ;Rutovitz ;Ram ,JEDI, +GSw_EmploymentFactor,Source for employment factor data - see inputs/employment/README.md for descriptions,^(jedi|mayfield|rutovitz|ram)$,jedi, GSw_EVMC,Turn on adoptable EV managed charging,0; 1,0, GSw_FakeData,Use fake capacity factor profiles (for TESTING ONLY when you do not want to download the real CF data),^[0-1]$,0, GSw_ForcePrescription,Turn on/off forced prescriptions - turning off will allow unlimited but not free builds in historical years,0; 1,1, diff --git a/inputs/employment/employment_factor_inter_transmission.csv b/inputs/employment/employment_factor_inter_transmission.csv index b160e1ce..2a5e0da5 100644 --- a/inputs/employment/employment_factor_inter_transmission.csv +++ b/inputs/employment/employment_factor_inter_transmission.csv @@ -1,5 +1,5 @@ ,construction,fom,vom -JEDI,0.00000331,0.00075584,0 -Mayfield,0.00000499,0.444,0 -Rutovitz,0.00000029,0,0 -Ram,0.00000596,0,0 \ No newline at end of file +jedi,0.00000331,0.00075584,0 +mayfield,0.00000499,0.444,0 +rutovitz,0.00000029,0,0 +ram,0.00000596,0,0 diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 4fa84b0c..9e93af3b 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6021,7 +6021,7 @@ $onlisting * If upgrade techs, construction employment factor is half * Only apply this to non CCS upgrades if using JEDI EFs since JEDI already specifies CCS upgrade EFs -$ifthen.upgrade_ef %GSw_EmploymentFactor% == "JEDI" +$ifthen.upgrade_ef %GSw_EmploymentFactor% == "jedi" employment_factor_plant(i,"construction")$[upgrade(i) $(not ccs(i))] = employment_factor_plant(i,"construction") * 0.5 ; $else.upgrade_ef From 5127943b5dda9a4a4d837f84250d056c23a9cf6e Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 15 Jun 2026 11:16:42 -0600 Subject: [PATCH 27/71] Update reeds/core/terminus/report_params.csv Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/terminus/report_params.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/core/terminus/report_params.csv b/reeds/core/terminus/report_params.csv index 6abc59b8..fe9a0e79 100644 --- a/reeds/core/terminus/report_params.csv +++ b/reeds/core/terminus/report_params.csv @@ -70,7 +70,7 @@ curt_rate(t),frac,fraction of VRE generation that is curtailed,,, "emit_weighted(etype,eall)",metric tons * pvf,national emissions * pvf_onm,,, "employment_generator(i,jtype,r,t)",job-years,"generator employment by job type, tech, region, and solveyear",,, "employment_transmission(jtype,r,t)",job-years,"transmission employment by job type, region, and solveyear",,, -"employment_tot(r,t)",jobs,all job-years nation-wide by region and solveyear,,, +"employment_tot(r,t)",job-years,employment by region and solveyear,,, error_check(*),unitless,set of checks to determine if there is an error - values should be zero if there is no error,,, "error_gen(i,v,r,allh,t)",MWh,"erroneous generation that disobeys valgen(i,v,r,t)",,, "excess_load(r,allh,t)",MW,level values of EXCESS variable for surplus load,,, From 76afa5c4480fac4ed182a78bc3d0a6708c191fa3 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 15 Jun 2026 11:17:07 -0600 Subject: [PATCH 28/71] Update reeds/core/terminus/report_params.csv Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/terminus/report_params.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/core/terminus/report_params.csv b/reeds/core/terminus/report_params.csv index fe9a0e79..626cc508 100644 --- a/reeds/core/terminus/report_params.csv +++ b/reeds/core/terminus/report_params.csv @@ -68,7 +68,7 @@ curt_rate(t),frac,fraction of VRE generation that is curtailed,,, "emit_r(etype,eall,r,t)",metric tons,"emissions by pollutant, regional",,, "emit_rate_regional(r,t)",metric tons,"regional average CO2 emissions rate, used in state CO2 caps",,, "emit_weighted(etype,eall)",metric tons * pvf,national emissions * pvf_onm,,, -"employment_generator(i,jtype,r,t)",job-years,"generator employment by job type, tech, region, and solveyear",,, +"employment_generator(i,jtype,r,t)",job-years,"generator employment by tech, job type, region, and solveyear",,, "employment_transmission(jtype,r,t)",job-years,"transmission employment by job type, region, and solveyear",,, "employment_tot(r,t)",job-years,employment by region and solveyear,,, error_check(*),unitless,set of checks to determine if there is an error - values should be zero if there is no error,,, From 09278492c8d52ff226cb7464b09978acdcf47a14 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 15 Jun 2026 11:31:10 -0600 Subject: [PATCH 29/71] Update reeds/core/setup/d_mga.gms Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/setup/d_mga.gms | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index 9d65f13a..667001f7 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -112,9 +112,9 @@ eq_MGA_Objective$Sw_MGA.. INV(i,v,r,t) * pvf_capital(t) * employment_factor_plant(i,"construction") } - # AC construction employment formula here is slightly different than in - # e_report.gms as only cumulative term TRAN_CAPEX_BINS is included here vs - # annual term used in e_report.gms +* AC construction employment formula here is slightly different than in +* e_report.gms as only cumulative term TRAN_CAPEX_BINS is included here vs +* annual term used in e_report.gms + sum{(r,rr,tscbin,t) $[tmodel(t) $routes_inv(r,rr,"AC",t) From e9f1d8973b1447d4b747d2509541029a56d7af4c Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 15 Jun 2026 11:31:32 -0600 Subject: [PATCH 30/71] Update reeds/core/setup/d_mga.gms Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/setup/d_mga.gms | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index 667001f7..4ef4ea0d 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -130,7 +130,8 @@ eq_MGA_Objective$Sw_MGA.. trans_cost_cap_fin_mult(t) * transmission_cost_nonac(r,rr,trtype) * INVTRAN(r,rr,trtype,t) - * employment_factor_inter_transmission("construction") / 2 } +* INVTRAN is defined in both directions so needs to be divided by 2 + * employment_factor_inter_transmission("construction") / 2 } + sum{(r,rr,trtype,t) $[tmodel(t) From 4d91aa2ca547359c43fa3e50937837ec201a1263 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 15 Jun 2026 11:32:27 -0600 Subject: [PATCH 31/71] Update reeds/core/setup/d_mga.gms Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/setup/d_mga.gms | 1 + 1 file changed, 1 insertion(+) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index 4ef4ea0d..0e048c0b 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -104,6 +104,7 @@ eq_MGA_Objective$Sw_MGA.. + sum{(i,v,r,h,t) $[tmodel(t) $valgen(i,v,r,t)], +* [MW] * [.] * [MWh/MW] * [job-years/MWh] = [job-years] GEN(i,v,r,h,t) * pvf_onm(t) * hours(h) * employment_factor_plant(i,"vom") } + sum{(i,v,r,t) From 9bba8b6977ffbe79a87ecb3bcfa36bed03eb5704 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 15 Jun 2026 12:52:16 -0600 Subject: [PATCH 32/71] clean up --- ...ent_factor_plant_JEDI.csv => employment_factor_plant_jedi.csv} | 0 ...or_plant_Mayfield.csv => employment_factor_plant_mayfield.csv} | 0 ...yment_factor_plant_Ram.csv => employment_factor_plant_ram.csv} | 0 ...or_plant_Rutovitz.csv => employment_factor_plant_rutovitz.csv} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename inputs/employment/{employment_factor_plant_JEDI.csv => employment_factor_plant_jedi.csv} (100%) rename inputs/employment/{employment_factor_plant_Mayfield.csv => employment_factor_plant_mayfield.csv} (100%) rename inputs/employment/{employment_factor_plant_Ram.csv => employment_factor_plant_ram.csv} (100%) rename inputs/employment/{employment_factor_plant_Rutovitz.csv => employment_factor_plant_rutovitz.csv} (100%) diff --git a/inputs/employment/employment_factor_plant_JEDI.csv b/inputs/employment/employment_factor_plant_jedi.csv similarity index 100% rename from inputs/employment/employment_factor_plant_JEDI.csv rename to inputs/employment/employment_factor_plant_jedi.csv diff --git a/inputs/employment/employment_factor_plant_Mayfield.csv b/inputs/employment/employment_factor_plant_mayfield.csv similarity index 100% rename from inputs/employment/employment_factor_plant_Mayfield.csv rename to inputs/employment/employment_factor_plant_mayfield.csv diff --git a/inputs/employment/employment_factor_plant_Ram.csv b/inputs/employment/employment_factor_plant_ram.csv similarity index 100% rename from inputs/employment/employment_factor_plant_Ram.csv rename to inputs/employment/employment_factor_plant_ram.csv diff --git a/inputs/employment/employment_factor_plant_Rutovitz.csv b/inputs/employment/employment_factor_plant_rutovitz.csv similarity index 100% rename from inputs/employment/employment_factor_plant_Rutovitz.csv rename to inputs/employment/employment_factor_plant_rutovitz.csv From b673d8d57f22da6c9242f23f63293a3438743931 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 15 Jun 2026 15:52:14 -0600 Subject: [PATCH 33/71] clean up and add USA fast MGA test case --- cases_test.csv | 130 ++++++++++++++++++++--------------------- reeds/solver/cplex.op3 | 2 +- reeds/solver/cplex.op4 | 2 +- 3 files changed, 67 insertions(+), 67 deletions(-) diff --git a/cases_test.csv b/cases_test.csv index a87de967..7cd086a3 100644 --- a/cases_test.csv +++ b/cases_test.csv @@ -1,65 +1,65 @@ -,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,Pacific_DR,Pacific_MGA,Pacific_LoadSite95,MARICTNYNJPAOH_Offshore,R2P -ignore,1,0,,,,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_Region,cendiv/Pacific,,country/USA,country/USA,country/USA,,st/ID.WY.NE.IA.IL,st/MA,,,,,,,st/WY,interconnect/western,transreg/PJM,st/NY.VT,st/OR,st/NE.NY.PA,st/NE.NY.PA,st/ID.WY.NE.IA.IL,st/KS,country/USA,country/USA,,,,st/MA.RI.CT.NY.NJ.PA.OH, -endyear,2032,,2050,2050,2050,2029,2060,2026,,,,,,,,,,,2035,2030,2030,2060,2035,2050,2050,,,,, -yearset,,,,,,,2010..2060..10,,,,,,,,,,,,,2010..2050..5,2010..2050..5,2010..2060..10,,,2010_2025_2050,,,,, -GSw_ZoneSet,,,,,,,z54,z3109,,,,,,,z3109,z3109,z3109,PJMcounty,,,,z54,,z54,z48,,,,, -GSw_GasCurve,2,,1,1,,,,,,,,,,,,,,,,,,,,1,1,,,,, -GSw_Geothermal,,,,2,,,,,,,,,,,,,,,,,,,0,,0,,,,, -GSw_GrowthPenalties,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_Upstream,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_TransHurdleRate,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, -distpvscen,,,,,stscen2023_mid_case_95_by_2035,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_AnnualCap,,,,,2,,1,,,,,,,,,,,,,,,1,,,,,,,, -GSw_AnnualCapScen,,,,,start2024_90pct2035_100pct2045,,start2027_95pct2035,,,,,,,,,,,,,,,start2027_95pct2035,,,,,,,, -GSw_LoadProfiles,,,,,EER2025_100by2050,EER2025_IRAlow,EER2025_IRAlow,EER2025_IRAlow,,,,,historic,,,,,,,,,EER2025_100by2050,,,,historic,,,, -GSw_NG_CRF_penalty,,,,,ramp_2045,,ramp_2023_2035,,,,,,,,,,,,,,,ramp_2023_2035,,,,,,,, -GSw_PRM_NetImportLimit,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_RetirePenalty,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_FakeData,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,, -GSw_PRM_CapCredit,,,,,,,,1,1,,,,,,,,1,,,,,,,,,,,,, -GSw_PRM_scenario,,,,,,,,,static,,,,,,,,static,,,,,,,,,,,,, -GSw_PRM_UpdateMethod,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,, -GSw_HourlyType,,,,,,,,,,wek,year,,,,,,,,,,,,,,,,,,, -GSw_InterDayLinkage,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, -GSw_HourlyWeatherYears,,,,,,,2012_2013,,,,,,2020,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022_2023,,,,,,,,2012_2013,,,,2018,,,, -GSw_HourlyClusterMapMethod,,,,,,,,,,,,,,bestfirst,,,,,,,,,,,,,,,, -GSw_WaterCapacity,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -GSw_WaterMain,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -GSw_WaterUse,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -resource_adequacy_years,,,,,,,2011_2012_2013_2021_2022_2023,,,,,,,,,,,,,,,2011_2012_2013_2021_2022_2023,,,,,,,, -GSw_HourlyClusterAlgorithm,,,,,,,,,,,,,,,,,,,,user,user,,,,,,,,, -MCS_runs,,,,,,,,,,,,,,,,,,,,2,2,,,,,,,,, -MCS_dist_groups,,,,,,,,,,,,,,,,,,,,tech.hydro.nuclear.gas.coal.load_country,upv_tri.nuclear_tri.ng_fuel_price_tri.load_country_unif,,,,,,,,, -MCS_lhs,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,, -GSw_PRM_StressIterateMax,,,,,,,,0,,,,,,,,0,0,,,1,1,,,,,,,,, -GSw_ReducedResource,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,, -GSw_SitingUPV,,,,,,limited,limited,limited,,,,,,,,,,,,,,limited,,,,,,,, -GSw_SitingWindOfs,,,,,,limited,limited,limited,,,,,,,,,,,,,,open,,,,,,,, -GSw_SitingWindOns,,,,,,limited,limited,limited,,,,,,,,,,,,,,limited,,,,,,,, -GSw_TransScen,,,,,,,NTP_MT,,,,,,,,,,,,,,,NTP_MT,,,,,,,, -GSw_CO2_Detail,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,, -GSw_DAC,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,, -GSw_NoFossilOffsetCDR,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,, -GSw_Biopower,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,, -GSw_HourlyChunkLengthRep,,,,,,,,,,,,,,,,,,,,,,,6,4,4,,,,, -GSw_HourlyChunkLengthStress,,,,,,,,,,,,,,,,,,,,,,,6,4,4,,,,, -GSw_LfillGas,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,, -GSw_Nuclear,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,, -GSw_OpRes,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,, -GSw_StartCost,,,,,,,,,,,,,,,,,,,,,,,0,0,0,,,,, -GSw_H2,,,,,,,,,,,,,,,,,,,,,,,,0,0,,,,, -GSw_H2_PTC,,,,,,,,,,,,,,,,,,,,,,,,0,0,,,,, -GSw_H2Combustion,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,, -GSw_DRShed,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,, -GSw_MGA_CostDelta,,,,,,,,,,,,,,,,,,,,,,,,,,,0.01,,, -GSw_LoadSiteCF,,,,,,,,,,,,,,,,,,,,,,,,,,,,0.95,, -GSw_OffshoreZones,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -GSw_OffshoreBackbone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -GSw_OffshoreBackflow,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -pras_agg_ogs_lfillgas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 -pras_existing_unit_size,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0 -pras_scheduled_outage,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0 -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,Pacific_DR,Pacific_MGA,USA_MGA_fast,Pacific_LoadSite95,MARICTNYNJPAOH_Offshore,R2P +ignore,1,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_Region,cendiv/Pacific,,country/USA,country/USA,country/USA,,st/ID.WY.NE.IA.IL,st/MA,,,,,,,st/WY,interconnect/western,transreg/PJM,st/NY.VT,st/OR,st/NE.NY.PA,st/NE.NY.PA,st/ID.WY.NE.IA.IL,st/KS,country/USA,country/USA,,,country/USA,,st/MA.RI.CT.NY.NJ.PA.OH, +endyear,2032,,2050,2050,2050,2029,2060,2026,,,,,,,,,,,2035,2030,2030,2060,2035,2050,2050,,,2050,,, +yearset,,,,,,,2010..2060..10,,,,,,,,,,,,,2010..2050..5,2010..2050..5,2010..2060..10,,,2010_2025_2050,,,2010_2015_2020..2050..5,,, +GSw_ZoneSet,,,,,,,z54,z3109,,,,,,,z3109,z3109,z3109,PJMcounty,,,,z54,,z54,z48,,,z54,,, +GSw_GasCurve,2,,1,1,,,,,,,,,,,,,,,,,,,,1,1,,,,,, +GSw_Geothermal,,,,2,,,,,,,,,,,,,,,,,,,0,,0,,,,,, +GSw_GrowthPenalties,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_Upstream,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_TransHurdleRate,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, +distpvscen,,,,,stscen2023_mid_case_95_by_2035,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_AnnualCap,,,,,2,,1,,,,,,,,,,,,,,,1,,,,,,,,, +GSw_AnnualCapScen,,,,,start2024_90pct2035_100pct2045,,start2027_95pct2035,,,,,,,,,,,,,,,start2027_95pct2035,,,,,,,,, +GSw_LoadProfiles,,,,,EER2025_100by2050,EER2025_IRAlow,EER2025_IRAlow,EER2025_IRAlow,,,,,historic,,,,,,,,,EER2025_100by2050,,,,historic,,,,, +GSw_NG_CRF_penalty,,,,,ramp_2045,,ramp_2023_2035,,,,,,,,,,,,,,,ramp_2023_2035,,,,,,,,, +GSw_PRM_NetImportLimit,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_RetirePenalty,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_FakeData,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,, +GSw_PRM_CapCredit,,,,,,,,1,1,,,,,,,,1,,,,,,,,,,,,,, +GSw_PRM_scenario,,,,,,,,,static,,,,,,,,static,,,,,,,,,,,,,, +GSw_PRM_UpdateMethod,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,, +GSw_HourlyType,,,,,,,,,,wek,year,,,,,,,,,,,,,,,,,,,, +GSw_InterDayLinkage,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,, +GSw_HourlyWeatherYears,,,,,,,2012_2013,,,,,,2020,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022_2023,,,,,,,,2012_2013,,,,2018,,,,, +GSw_HourlyClusterMapMethod,,,,,,,,,,,,,,bestfirst,,,,,,,,,,,,,,,,, +GSw_WaterCapacity,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, +GSw_WaterMain,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, +GSw_WaterUse,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, +resource_adequacy_years,,,,,,,2011_2012_2013_2021_2022_2023,,,,,,,,,,,,,,,2011_2012_2013_2021_2022_2023,,,,,,,,, +GSw_HourlyClusterAlgorithm,,,,,,,,,,,,,,,,,,,,user,user,,,,,,,,,, +MCS_runs,,,,,,,,,,,,,,,,,,,,2,2,,,,,,,,,, +MCS_dist_groups,,,,,,,,,,,,,,,,,,,,tech.hydro.nuclear.gas.coal.load_country,upv_tri.nuclear_tri.ng_fuel_price_tri.load_country_unif,,,,,,,,,, +MCS_lhs,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, +GSw_PRM_StressIterateMax,,,,,,,,0,,,,,,,,0,0,,,1,1,,,,,,,,,, +GSw_ReducedResource,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,, +GSw_SitingUPV,,,,,,limited,limited,limited,,,,,,,,,,,,,,limited,,,,,,,,, +GSw_SitingWindOfs,,,,,,limited,limited,limited,,,,,,,,,,,,,,open,,,,,,,,, +GSw_SitingWindOns,,,,,,limited,limited,limited,,,,,,,,,,,,,,limited,,,,,,,,, +GSw_TransScen,,,,,,,NTP_MT,,,,,,,,,,,,,,,NTP_MT,,,,,,,,, +GSw_CO2_Detail,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,, +GSw_DAC,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,, +GSw_NoFossilOffsetCDR,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,, +GSw_Biopower,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,,, +GSw_HourlyChunkLengthRep,,,,,,,,,,,,,,,,,,,,,,,6,4,4,,,4,,, +GSw_HourlyChunkLengthStress,,,,,,,,,,,,,,,,,,,,,,,6,4,4,,,4,,, +GSw_LfillGas,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,,, +GSw_Nuclear,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,,, +GSw_OpRes,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,,, +GSw_StartCost,,,,,,,,,,,,,,,,,,,,,,,0,0,0,,,,,, +GSw_H2,,,,,,,,,,,,,,,,,,,,,,,,0,0,,,0,,, +GSw_H2_PTC,,,,,,,,,,,,,,,,,,,,,,,,0,0,,,0,,, +GSw_H2Combustion,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,, +GSw_DRShed,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,, +GSw_MGA_CostDelta,,,,,,,,,,,,,,,,,,,,,,,,,,,0.01,0.01,,, +GSw_LoadSiteCF,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0.95,, +GSw_OffshoreZones,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +GSw_OffshoreBackbone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +GSw_OffshoreBackflow,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +pras_agg_ogs_lfillgas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +pras_existing_unit_size,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0 +pras_scheduled_outage,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0 +pras_unitsize_source,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,r2x +pras_vre_combine,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +pras_samples,,,,,,10,10,10,,,,,,,,,,,,,,,,10,10,,,,,, diff --git a/reeds/solver/cplex.op3 b/reeds/solver/cplex.op3 index 09089416..e943b3c8 100644 --- a/reeds/solver/cplex.op3 +++ b/reeds/solver/cplex.op3 @@ -42,7 +42,7 @@ barepcomp = 1e-8 *## https://www.slideshare.net/IEA-ETSAP/improving-the-solution-time-of-times-by-playing-with-cplexbarrier *## https://iea-etsap.org/webinar/CPLEX%20options%20for%20running%20TIMES%20models.pdf *## This setting is specifically for MGA runs which have difficulties with cplex.opt and cplex.op2 -*## This setting differs from cplex.opt and cplex.op2 in that it: 1. sets predual = -1, which does not +*## This setting differs from cplex.opt and cplex.op2 in that it: 1. sets predual = -1, which does not send *## dual to optimizer to reduce time; 2. sets barcrossalg = 1, which only performs primal crossover; *## and 3, sets baralg = 3 diff --git a/reeds/solver/cplex.op4 b/reeds/solver/cplex.op4 index 53cd5389..30f0817c 100644 --- a/reeds/solver/cplex.op4 +++ b/reeds/solver/cplex.op4 @@ -42,7 +42,7 @@ barepcomp = 1e-8 *## https://www.slideshare.net/IEA-ETSAP/improving-the-solution-time-of-times-by-playing-with-cplexbarrier *## https://iea-etsap.org/webinar/CPLEX%20options%20for%20running%20TIMES%20models.pdf *## This setting is specifically for MGA runs which have difficulties with cplex.opt, cplex.op2, and cplex.op3 -*## This setting differs from cplex.opt and cplex.op2 in that it: 1. sets predual = -1, which does not +*## This setting differs from cplex.opt and cplex.op2 in that it: 1. sets predual = -1, which does not send *## dual to optimizer to reduce time; 2. sets barcrossalg = 1, which only performs primal crossover. *## It also differs from cplex.op3 in that it keeps baralg at default value (=0) From 1ecb9aeea79185d104f6dcf5b15ad0544d401363 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 15 Jun 2026 16:06:21 -0600 Subject: [PATCH 34/71] Update reeds/core/setup/d_mga.gms Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/setup/d_mga.gms | 1 + 1 file changed, 1 insertion(+) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index 0e048c0b..cdbfb858 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -123,6 +123,7 @@ eq_MGA_Objective$Sw_MGA.. trans_cost_cap_fin_mult(t) * ((TRAN_CAPEX_BINS(r,rr,tscbin,t)) * pvf_capital(t) +* TRAN_CAPEX_BINS is only defined for r < rr so is not divided by 2 * employment_factor_inter_transmission("construction"))} + sum{trtype From 1da04273243657140ead7ce92421505b72ba4a85 Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 16 Jun 2026 11:22:43 -0600 Subject: [PATCH 35/71] Update d_mga.gms --- reeds/core/setup/d_mga.gms | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index cdbfb858..67bf276a 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -140,6 +140,9 @@ eq_MGA_Objective$Sw_MGA.. $routes(r,rr,trtype,t)], CAPTRAN_ENERGY(r,rr,trtype,t) * pvf_onm(t) +* CAPTRAN_ENERGY is defined in both directions so needs to be divided by 2 +* but we don't divide by 2 here since it is not divided by 2 in the +* objective function (will fix this separately) * employment_factor_inter_transmission("fom") } ; From 06521bd905c8450c94a709458f5946a449bae214 Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 16 Jun 2026 21:25:38 -0600 Subject: [PATCH 36/71] clean up --- cases_test.csv | 1 + reeds/solver/cplex.op4 | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cases_test.csv b/cases_test.csv index 7cd086a3..5d49c360 100644 --- a/cases_test.csv +++ b/cases_test.csv @@ -53,6 +53,7 @@ GSw_H2_PTC,,,,,,,,,,,,,,,,,,,,,,,,0,0,,,0,,, GSw_H2Combustion,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,, GSw_DRShed,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,, GSw_MGA_CostDelta,,,,,,,,,,,,,,,,,,,,,,,,,,,0.01,0.01,,, +GSw_gopt_mga,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,, GSw_LoadSiteCF,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0.95,, GSw_OffshoreZones,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, GSw_OffshoreBackbone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, diff --git a/reeds/solver/cplex.op4 b/reeds/solver/cplex.op4 index 30f0817c..3a537415 100644 --- a/reeds/solver/cplex.op4 +++ b/reeds/solver/cplex.op4 @@ -44,7 +44,8 @@ barepcomp = 1e-8 *## This setting is specifically for MGA runs which have difficulties with cplex.opt, cplex.op2, and cplex.op3 *## This setting differs from cplex.opt and cplex.op2 in that it: 1. sets predual = -1, which does not send *## dual to optimizer to reduce time; 2. sets barcrossalg = 1, which only performs primal crossover. -*## It also differs from cplex.op3 in that it keeps baralg at default value (=0) +*## It also differs from cplex.op3 in that it sets barcolnz = 300 +*## baralg can be set at default value (=0) or = 3 depending on runs. *** numericalemphasis (boolean): emphasizes precision in numerically unstable or difficult problems [default 0] * numericalemphasis 1 @@ -54,7 +55,7 @@ barepcomp = 1e-8 *** barcolnz (integer): specifies the number of entries in columns to be considered as dense [default 0] *** 0 lets CPLEX choose; values ranging from 30-300 can sometimes shorten runtime -barcolnz 100 +barcolnz 300 *** barorder (integer): row ordering algorithm selection. 1 = approximate minimum degree (AMD) [default 0] * barorder 1 From 06b1575c4fad368a51625d6428222aa9d4c47dc6 Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 18 Jun 2026 13:02:48 -0600 Subject: [PATCH 37/71] clean up and check employment calculation --- reeds/core/setup/d_mga.gms | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index 67bf276a..b5a677e8 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -99,6 +99,7 @@ eq_MGA_Objective$Sw_MGA.. sum{(i,v,r,t) $[tmodel(t) $valcap(i,v,r,t)], +* [MW] * [.] * [job-years/MW] = [job-years] CAP(i,v,r,t) * pvf_onm(t) * employment_factor_plant(i,"fom") } + sum{(i,v,r,h,t) @@ -110,6 +111,7 @@ eq_MGA_Objective$Sw_MGA.. + sum{(i,v,r,t) $[tmodel(t) $valinv(i,v,r,t)], +* [MW] * [.] * [job-years/MW] = [job-years] INV(i,v,r,t) * pvf_capital(t) * employment_factor_plant(i,"construction") } @@ -120,7 +122,8 @@ eq_MGA_Objective$Sw_MGA.. $[tmodel(t) $routes_inv(r,rr,"AC",t) $tsc_binwidth(r,rr,tscbin)], - trans_cost_cap_fin_mult(t) + trans_cost_cap_fin_mult(t) +* [$] * [.] * [job-years/$] = [job-years] * ((TRAN_CAPEX_BINS(r,rr,tscbin,t)) * pvf_capital(t) * TRAN_CAPEX_BINS is only defined for r < rr so is not divided by 2 @@ -130,6 +133,7 @@ eq_MGA_Objective$Sw_MGA.. $[routes_inv(r,rr,trtype,t) $(not aclike(trtype))], trans_cost_cap_fin_mult(t) +* [$/MW] * [MW] * [job-years/$] = [job-years] * transmission_cost_nonac(r,rr,trtype) * INVTRAN(r,rr,trtype,t) * INVTRAN is defined in both directions so needs to be divided by 2 @@ -138,11 +142,12 @@ eq_MGA_Objective$Sw_MGA.. + sum{(r,rr,trtype,t) $[tmodel(t) $routes(r,rr,trtype,t)], +* [MW] * [.] * [job-years/MW] = [job-years] CAPTRAN_ENERGY(r,rr,trtype,t) * pvf_onm(t) * CAPTRAN_ENERGY is defined in both directions so needs to be divided by 2 -* but we don't divide by 2 here since it is not divided by 2 in the -* objective function (will fix this separately) +* but we don't divide by 2 here since this portion in the objective function +* is high by factor of 2 (will fix this separately) * employment_factor_inter_transmission("fom") } ; From 76bc46d18984ccd00ffa9a7a024ede46cccc8363 Mon Sep 17 00:00:00 2001 From: An Pham Date: Fri, 19 Jun 2026 21:06:44 -0600 Subject: [PATCH 38/71] use cost ratio to adjust employment factors for upgrade techs --- reeds/core/setup/b_inputs.gms | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 9e93af3b..b3fa6b9f 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6000,7 +6000,7 @@ z_rep_op(t) = 0 ; *==================================== * Employment factors of construction and operation of power plants $onempty -Table employment_factor_plant(i,jtype) "--job-years/MW or job-years/MWh-- employment factors of power plants by technology and job type (construction and o&m jobs)" +Table employment_factor_plant(i,jtype) "--job-years/MW (construction) or job-years/MWh (o&m)-- employment factors of power plants by technology and job type" $offlisting $ondelim $include inputs_case%ds%employment_factor_plant.csv @@ -6010,7 +6010,7 @@ $onlisting $offempty * Employment factors of transmission deployment and flow -parameter employment_factor_inter_transmission(jtype) "--job-years/MW or job-years/$M-- employment factors of transmission lines by job type (construction or o&m jobs)" +parameter employment_factor_inter_transmission(jtype) "--job-years/MW (fo&m) or job-years/$ (construction)-- employment factors of transmission lines by job type" / $offlisting $ondelim @@ -6019,13 +6019,25 @@ $offdelim $onlisting / ; -* If upgrade techs, construction employment factor is half +* If upgrade techs, construction employment factor is adjusted by upgrade capital cost ratio * Only apply this to non CCS upgrades if using JEDI EFs since JEDI already specifies CCS upgrade EFs + +parameter upgrade_ratio(i) ; +upgrade_ratio(i)$upgrade(i) = 1 ; +upgrade_ratio(i)$[upgrade(i) + $(sum{(ii,t)$upgrade_to(i,ii), cost_cap(ii,t)$tmodel_new(t) } + - sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } > 0)] + = (sum{(ii,t)$upgrade_to(i,ii), cost_cap(ii,t)$tmodel_new(t) } + - sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } ) / + sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } ; + $ifthen.upgrade_ef %GSw_EmploymentFactor% == "jedi" employment_factor_plant(i,"construction")$[upgrade(i) - $(not ccs(i))] = employment_factor_plant(i,"construction") * 0.5 ; + $(not ccs(i))] = employment_factor_plant(i,"construction") + * upgrade_ratio(i) ; $else.upgrade_ef -employment_factor_plant(i,"construction")$upgrade(i) = employment_factor_plant(i,"construction") * 0.5 ; +employment_factor_plant(i,"construction")$upgrade(i) = employment_factor_plant(i,"construction") + * upgrade_ratio(i) ; $endif.upgrade_ef *================================================================================================ From e801f347b99f88ab7703222930017521971754ba Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 22 Jun 2026 14:01:47 -0600 Subject: [PATCH 39/71] clean up --- reeds/core/setup/b_inputs.gms | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index b3fa6b9f..46b0aa4d 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6000,7 +6000,7 @@ z_rep_op(t) = 0 ; *==================================== * Employment factors of construction and operation of power plants $onempty -Table employment_factor_plant(i,jtype) "--job-years/MW (construction) or job-years/MWh (o&m)-- employment factors of power plants by technology and job type" +Table employment_factor_plant(i,jtype) "--job-years/MW (construction & fom) or job-years/MWh (vom)-- employment factors of power plants by technology and job type" $offlisting $ondelim $include inputs_case%ds%employment_factor_plant.csv @@ -6010,7 +6010,7 @@ $onlisting $offempty * Employment factors of transmission deployment and flow -parameter employment_factor_inter_transmission(jtype) "--job-years/MW (fo&m) or job-years/$ (construction)-- employment factors of transmission lines by job type" +parameter employment_factor_inter_transmission(jtype) "--job-years/$ (construction) or job-years/MW (fom) or job-years/MWh (vom)-- employment factors of transmission lines by job type" / $offlisting $ondelim From 651d50e25b46caedacc0ce92dfcd04d08a929ccc Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 22 Jun 2026 15:44:31 -0600 Subject: [PATCH 40/71] calculate transmission fom employment as construction employment x trans_fom_frac --- reeds/core/setup/d_mga.gms | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index b5a677e8..587411a2 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -96,18 +96,21 @@ Variable MGA_OBJ "--job-years-- Total job-years to be minimized/maximized" ; eq_MGA_Objective$Sw_MGA.. MGA_OBJ =e= +* Power plant FO&M employment sum{(i,v,r,t) $[tmodel(t) $valcap(i,v,r,t)], * [MW] * [.] * [job-years/MW] = [job-years] CAP(i,v,r,t) * pvf_onm(t) * employment_factor_plant(i,"fom") } +* Power plant VO&M employment + sum{(i,v,r,h,t) $[tmodel(t) $valgen(i,v,r,t)], * [MW] * [.] * [MWh/MW] * [job-years/MWh] = [job-years] GEN(i,v,r,h,t) * pvf_onm(t) * hours(h) * employment_factor_plant(i,"vom") } +* Power plant construction employment + sum{(i,v,r,t) $[tmodel(t) $valinv(i,v,r,t)], @@ -118,6 +121,8 @@ eq_MGA_Objective$Sw_MGA.. * AC construction employment formula here is slightly different than in * e_report.gms as only cumulative term TRAN_CAPEX_BINS is included here vs * annual term used in e_report.gms + +* Transmission line construction employment + sum{(r,rr,tscbin,t) $[tmodel(t) $routes_inv(r,rr,"AC",t) @@ -139,17 +144,27 @@ eq_MGA_Objective$Sw_MGA.. * INVTRAN is defined in both directions so needs to be divided by 2 * employment_factor_inter_transmission("construction") / 2 } - + sum{(r,rr,trtype,t) - $[tmodel(t) - $routes(r,rr,trtype,t)], -* [MW] * [.] * [job-years/MW] = [job-years] - CAPTRAN_ENERGY(r,rr,trtype,t) - * pvf_onm(t) +* Transmission line FO&M employment is assumed to be +* transmission line construction x trans_fom_frac + * (1 + trans_fom_frac) +; + +*************************************************************************** +* Alternative way of estimating transmission line +* FO&M employment using FTE/MW employment factor data +* (currently not used) +* + sum{(r,rr,trtype,t) +* $[tmodel(t) +* $routes(r,rr,trtype,t)], +** [MW] * [.] * [job-years/MW] = [job-years] +* CAPTRAN_ENERGY(r,rr,trtype,t) +* * pvf_onm(t) * CAPTRAN_ENERGY is defined in both directions so needs to be divided by 2 * but we don't divide by 2 here since this portion in the objective function * is high by factor of 2 (will fix this separately) - * employment_factor_inter_transmission("fom") } -; +* * employment_factor_inter_transmission("fom") } +*; +*************************************************************************** $endif.mgaobj From aea0c4d07b2a954ebc7d10e59fe0b017783d7c9b Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 22 Jun 2026 15:47:59 -0600 Subject: [PATCH 41/71] clean up --- reeds/core/setup/b_inputs.gms | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 46b0aa4d..b6d6bb2f 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6019,9 +6019,9 @@ $offdelim $onlisting / ; -* If upgrade techs, construction employment factor is adjusted by upgrade capital cost ratio -* Only apply this to non CCS upgrades if using JEDI EFs since JEDI already specifies CCS upgrade EFs - +* If upgrade techs, construction employment factor is adjusted by upgrade ratio +* calculated as the ratio of the difference in capital costs between the initial +* techs and the upgraded tech divided by the capital costs of the initial techs parameter upgrade_ratio(i) ; upgrade_ratio(i)$upgrade(i) = 1 ; upgrade_ratio(i)$[upgrade(i) @@ -6031,6 +6031,7 @@ upgrade_ratio(i)$[upgrade(i) - sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } ) / sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } ; +* Only apply this ratio to non CCS upgrades if using JEDI EFs since JEDI already specifies CCS upgrade EFs $ifthen.upgrade_ef %GSw_EmploymentFactor% == "jedi" employment_factor_plant(i,"construction")$[upgrade(i) $(not ccs(i))] = employment_factor_plant(i,"construction") From 7bd71c0dc02618f7cb800d7b12c4ac338bc71853 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 22 Jun 2026 20:53:51 -0600 Subject: [PATCH 42/71] update transmission fom employment in report.gms + clean up --- reeds/core/setup/d_mga.gms | 2 +- reeds/core/terminus/report.gms | 16 ++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index 587411a2..229f6b45 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -120,7 +120,7 @@ eq_MGA_Objective$Sw_MGA.. * AC construction employment formula here is slightly different than in * e_report.gms as only cumulative term TRAN_CAPEX_BINS is included here vs -* annual term used in e_report.gms +* annual term used in report.gms * Transmission line construction employment + sum{(r,rr,tscbin,t) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 7d021555..da389e56 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -2089,19 +2089,11 @@ employment_generator(i,"construction",r,t) = sum{v, INV.l(i,v,r,t)$valinv(i,v,r, * employment_factor_plant(i,"construction")} ; * Employment from transmission (job-years) -* Transmission O&M job-years -parameter employment_transmission_fom(r,rr,t) "Transmission FO&M job-years by line and solveyear" ; -employment_transmission_fom(r,rr,t) = sum{trtype - $[routes(r,rr,trtype,t)], - CAPTRAN_ENERGY.l(r,rr,trtype,t) - * employment_factor_inter_transmission("fom") } ; -* Transmission FO&M job-years by region and solveyear -employment_transmission("fom",r,t) = sum{rr,(employment_transmission_fom(r,rr,t)) / 2} ; * Transmission construction job-years parameter employment_transmission_construction(r,rr,t) "Transmission construction job-years by line and solveyear" ; employment_transmission_construction(r,rr,t) = * AC lines -sum{tscbin +(sum{tscbin $[routes_inv(r,rr,"AC",t) $tsc_binwidth(r,rr,tscbin)], trans_cost_cap_fin_mult(t) @@ -2114,7 +2106,11 @@ sum{tscbin trans_cost_cap_fin_mult(t) * transmission_cost_nonac(r,rr,trtype) * INVTRAN.l(r,rr,trtype,t) - * employment_factor_inter_transmission("construction") / 2 } ; + * employment_factor_inter_transmission("construction") / 2 }) +* Transmission fom employment = transmission line construction x trans_fom_frac + * (1 + trans_fom_frac) +; + * Transmission construction job-years by region and solveyear employment_transmission("construction",r,t) = sum{rr,(employment_transmission_construction(r,rr,t)) / 2} ; From e097212b7e5f3f74bba5435fc1ee49ed237f24a7 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 11:05:17 -0600 Subject: [PATCH 43/71] add documentation for JEDI/WIRED employment factors --- docs/source/model_documentation.md | 35 +++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index 0d4b14be..51881480 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -149,7 +149,7 @@ National Laboratory of the Rockies. ({{ cite_date_last_updated }}). *Model docum | WECC | Western Electricity Coordinating Council | | WIND | Wind Integration National Dataset | | WinDS | Wind Deployment System | - +| WIRED | Workforce Impacts and Regional Economic Development | ## Introduction @@ -2820,6 +2820,39 @@ SO2 and NOx are also included in the [cost of health damag +## Power sector Employment + +Employment factors for biopower, solar PV, hydropower, pumped storage, and land-based wind are derived respectively from the Jobs and Economic Development Impact (JEDI) models {cite}`JEDI_2025` of individual technologies, all of which are publicly available. Employment factors for battery storage, coal, natural gas, geothermal, offshore wind, and transmission lines are derived respectively from the Workforce Impacts and Regional Economic Development (WIRED) models of individual technologies, all of which are not yet publicly available but are based on publicly available data inputs. Details are shown in {numref}`employment-factors` below. + +```{table} Technology-specific construction and FOM employment factors. +:name: employment-factors +| Technology | Construction EF | FOM EF | Unit | Source | +|-------------------------|-----------------|--------|------------|---------------------------------| +| Biopower | 3.76 | 1.453 | FTE/MW | JEDI {cite}`JEDI_2025` | +| Battery | 0.94 | 0.033 | FTE/MW | WIRED {cite}`Ramasamy_et_al_2022` | +| Coal-IGCC | 4.15 | 0.182 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`| +| Coal-PC | 2.66 | 0.160 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`| +| Coal-CCS RT | 1.62 | 0.157 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`| +| Coal-CCS GF | 4.20 | 0.186 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`| +| DPV | 2.98 | 0.204 | FTE/MW | JEDI {cite}`JEDI_2025` | +| Geothermal-Hydrothermal | 4.61 | 0.157 | FTE/MW | WIRED {cite}`SAM` | +| Geothermal-EGS | 5.51 | 0.151 | FTE/MW | WIRED {cite}`SAM` | +| Hydropower | 3.09 | 0.02 | FTE/MW | JEDI {cite}`JEDI_2025` | +| Land-based Wind | 1.23 | 0.033 | FTE/MW | JEDI {cite}`JEDI_2025` | +| NG-CC | 0.58 | 0.052 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| NG-CC-CCS RT | 0.86 | 0.084 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| NG-CC-CCS GF | 1.30 | 0.072 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| NG-CT | 1.12 | 0.28 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| Nuclear Conventional | 13.75 | 1.043 | FTE/MW | {cite}`Abou_Jaoude_et_al_2023` | +| Nuclear SMR | 13.75 | 1.043 | FTE/MW | {cite}`Asuega_et_al_2023` | +| Offshore Wind | 1.75 | 0.115 | FTE/MW | {cite}`Hammond_and_Cooperman_2022` and {cite}`Nunemaker_et_al_2020` | +| Transmission-500kW AC | 12.68 | 0.093 | FTE/MW | JEDI {cite}`JEDI_2025`| +| Transmission-230kW AC | 4.71 | 0.089 | FTE/MW | JEDI {cite}`JEDI_2025`| +| Transmission-500kW AC | 1.99 | 0.978 | FTE/M2004$ | Estimated | +| Transmission-230kW AC | 1.57 | 0.938 | FTE/M2004$ | Estimated | +| UPV | 2.32 | 0.05 | FTE/MW | JEDI {cite}`JEDI_2025` | + +``` From 96c3ea593e4cbcbfffad8f5b81de4eca59f69c0a Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 11:05:57 -0600 Subject: [PATCH 44/71] Update references.bib --- docs/source/references.bib | 100 +++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/docs/source/references.bib b/docs/source/references.bib index 1fd019de..427aa90c 100644 --- a/docs/source/references.bib +++ b/docs/source/references.bib @@ -30494,3 +30494,103 @@ @misc{zuluagaNodalCapacityExpansion2025 archiveprefix = {arXiv}, langid = {english} } + +@misc{JEDI_2025, + author = {NLR}, + year = {2025}, + institution = {NLR}, + title = {Jobs and Economic Development Impact Models}, + url = {https://www.nlr.gov/analysis/jedi/} +} + +@article{Asuega_et_al_2023, +title = {Techno-economic analysis of advanced small modular nuclear reactors}, +journal = {Applied Energy}, +volume = {334}, +pages = {120669}, +year = {2023}, +issn = {0306-2619}, +doi = {https://doi.org/10.1016/j.apenergy.2023.120669}, +url = {https://www.sciencedirect.com/science/article/pii/S0306261923000338}, +author = {Anthony Asuega and Braden J. Limb and Jason C. Quinn} +} + +@techreport{Abou_Jaoude_et_al_2023, + author = {Abdalla Abou-Jaoude and Linyu Lin and Chandrakanth Bolisetti and Elizabeth Worsham and Levi M Larsen and Aaron Epiney}, + title = {Literature Review of Advanced Reactor Cost Estimates. Milestone M3CT-23IN1207065}, + institution = {Idaho National Laboratory}, + year = {2023} +} + +@misc{Basore_et_al_2025, + author = {Paul Basore and Krysta Dummit and Andy Thomas and Margaret Taylor and Peter Benoliel and David Feldman and Meenakshi Narayanaswami and Vignesh Ramasamy and Michael Woodhouse and Jarett Zuboy and Jennifer Braid and Norman Jost and Evan Sproul}, + year = {2025}, + institution = {National Laboratory of the Rockies}, + title = {Q1-2025 Solar Photovoltaic System Cost Benchmarks. NLR Data Catalog}, + url = {https://data.nlr.gov/submissions/304} +} + +@techreport{Hammond_and_Cooperman_2022, + author = {Rob Hammond and Aubryn Cooperman}, + title = {Windfarm Operations and Maintenance cost-Benefit Analysis Tool (WOMBAT). NREL/TP-5000-83712}, + institution = {National Renewable Energy Laboratory}, + year = {2022}, + url = {https://www.osti.gov/biblio/1894867} +} + +@misc{SAM, + author = {NLR}, + year = {2025}, + institution = {National Laboratory of the Rockies}, + title = {System Advisor Model – Geothermal (GETEM)}, + url = {https://sam.nlr.gov/geothermal.html} +} + +@techreport{NETL_2022, + author = {NETL}, + title = {Cost and Performance Baseline for Fossil Energy Plants. Volume 1: Bituminous Coal and Natural Gas to Electricity. DOE/NETL-2023/4320}, + institution = {National Energy Technology Laboratory} , + year = {2022} +} + +@techreport{NETL_2023a, + author = {NETL}, + title = {Cost and Performance Baseline for Fossil Energy Plants. Volume 3: Low Rank Coal and Natural Gas to Electricity. DOE/NETL-2023/3852}, + institution = {National Energy Technology Laboratory} , + year = {2023} +} + +@techreport{NETL_2023b, + author = {NETL}, + title = {Cost and Performance Baseline for Fossil Energy Plants. Volume 5: Natural Gas Electricity Generating Units for Flexible Operation. DOE/NETL-2023/3855}, + institution = {National Energy Technology Laboratory} , + year = {2023} +} + +@techreport{NETL_2023c, + author = {NETL}, + title = {Eliminating the Derate of Carbon Capture Retrofits - Revision 2. DOE/NETL-2023/3850}, + institution = {National Energy Technology Laboratory} , + year = {2023} +} + +@techreport{NETL_2025, + author = {NETL}, + title = {Cost and Performance of Retrofitting NGCC Units for Carbon Capture - Revision 3. DOE/NETL-2023/3848}, + institution = {National Energy Technology Laboratory} , + year = {2025} +} + +@techreport{Nunemaker_et_al_2020, + author = {Jake Nunemaker and Matt Shields and Robert Hammond and and Patrick Duffy}, + title = {ORBIT: Offshore Renewables Balance-of-System and Installation Tool. NREL/TP-5000-77081}, + institution = {National Renewable Energy Laboratory (NREL)} , + year = {2020} +} + +@techreport{Ramasamy_et_al_2022, + author = {Vignesh Ramasamy and Jarett Zuboy and Eric O’Shaughnessy and David Feldman and Jal Desai and Michael Woodhouse and Paul Basore and Robert Margolis}, + title = {U.S. Solar Photovoltaic System and Energy Storage Cost Benchmarks, With Minimum Sustainable Price Analysis: Q1 2022. NREL/TP-7A40-83586}, + institution = {National Renewable Energy Laboratory (NREL)} , + year = {2022} +} From 5d01b36fba015dc15f9f05ce5bd2102e15bd0dcf Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 16:34:21 -0600 Subject: [PATCH 45/71] update VOM EFs --- docs/source/model_documentation.md | 50 +++++++++++++++--------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index 51881480..73764509 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -2826,31 +2826,31 @@ Employment factors for biopower, solar PV, hydropower, pumped storage, and land- ```{table} Technology-specific construction and FOM employment factors. :name: employment-factors -| Technology | Construction EF | FOM EF | Unit | Source | -|-------------------------|-----------------|--------|------------|---------------------------------| -| Biopower | 3.76 | 1.453 | FTE/MW | JEDI {cite}`JEDI_2025` | -| Battery | 0.94 | 0.033 | FTE/MW | WIRED {cite}`Ramasamy_et_al_2022` | -| Coal-IGCC | 4.15 | 0.182 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`| -| Coal-PC | 2.66 | 0.160 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`| -| Coal-CCS RT | 1.62 | 0.157 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`| -| Coal-CCS GF | 4.20 | 0.186 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`| -| DPV | 2.98 | 0.204 | FTE/MW | JEDI {cite}`JEDI_2025` | -| Geothermal-Hydrothermal | 4.61 | 0.157 | FTE/MW | WIRED {cite}`SAM` | -| Geothermal-EGS | 5.51 | 0.151 | FTE/MW | WIRED {cite}`SAM` | -| Hydropower | 3.09 | 0.02 | FTE/MW | JEDI {cite}`JEDI_2025` | -| Land-based Wind | 1.23 | 0.033 | FTE/MW | JEDI {cite}`JEDI_2025` | -| NG-CC | 0.58 | 0.052 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| NG-CC-CCS RT | 0.86 | 0.084 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| NG-CC-CCS GF | 1.30 | 0.072 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| NG-CT | 1.12 | 0.28 | FTE/MW | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| Nuclear Conventional | 13.75 | 1.043 | FTE/MW | {cite}`Abou_Jaoude_et_al_2023` | -| Nuclear SMR | 13.75 | 1.043 | FTE/MW | {cite}`Asuega_et_al_2023` | -| Offshore Wind | 1.75 | 0.115 | FTE/MW | {cite}`Hammond_and_Cooperman_2022` and {cite}`Nunemaker_et_al_2020` | -| Transmission-500kW AC | 12.68 | 0.093 | FTE/MW | JEDI {cite}`JEDI_2025`| -| Transmission-230kW AC | 4.71 | 0.089 | FTE/MW | JEDI {cite}`JEDI_2025`| -| Transmission-500kW AC | 1.99 | 0.978 | FTE/M2004$ | Estimated | -| Transmission-230kW AC | 1.57 | 0.938 | FTE/M2004$ | Estimated | -| UPV | 2.32 | 0.05 | FTE/MW | JEDI {cite}`JEDI_2025` | +| Technology | Construction EF | FOM EF | VOM EF | Unit | Source | +|-------------------------|-----------------|--------|----------|---------------------------------------------------------------------------------| +| Biopower | 3.76 | 1.453 | 4.52E-05 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | +| Battery | 0.94 | 0.033 | 0 | FTE/MW[h] | WIRED {cite}`Ramasamy_et_al_2022` | +| Coal-IGCC | 4.15 | 0.182 | 3.72E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | +| Coal-PC | 2.66 | 0.160 | 3.95E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | +| Coal-CCS RT | 1.62 | 0.157 | 5.63E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | +| Coal-CCS GF | 4.20 | 0.186 | 5.35E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | +| DPV | 2.98 | 0.204 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | +| Geothermal-Hydrothermal | 4.61 | 0.157 | 3.51E-05 | FTE/MW[h] | WIRED {cite}`SAM` | +| Geothermal-EGS | 5.51 | 0.151 | 4.97E-05 | FTE/MW[h] | WIRED {cite}`SAM` | +| Hydropower | 3.09 | 0.02 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | +| Land-based Wind | 1.23 | 0.033 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | +| NG-CC | 0.58 | 0.052 | 2.76E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| NG-CC-CCS RT | 0.86 | 0.084 | 3.31E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| NG-CC-CCS GF | 1.30 | 0.072 | 3.11E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| NG-CT | 1.12 | 0.28 | 4.23E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| Nuclear Conventional | 13.75 | 1.043 | 2.95E-05 | FTE/MW[h] | {cite}`Abou_Jaoude_et_al_2023` | +| Nuclear SMR | 13.75 | 1.043 | 1.65E-05 | FTE/MW[h] | {cite}`Asuega_et_al_2023` | +| Offshore Wind | 1.75 | 0.115 | 0 | FTE/MW[h] | {cite}`Hammond_and_Cooperman_2022` and {cite}`Nunemaker_et_al_2020` | +| Transmission-500kW AC | 12.68 | 0.093 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | +| Transmission-230kW AC | 4.71 | 0.089 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | +| Transmission-500kW AC | 1.99 | 0.978 | 0 | FTE/M2004$| Estimated | +| Transmission-230kW AC | 1.57 | 0.938 | 0 | FTE/M2004$| Estimated | +| UPV | 2.32 | 0.05 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | ``` From 0b64fde8c00d11aafd3d31148467c67f6deaef2b Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:09:57 -0600 Subject: [PATCH 46/71] Update docs/source/model_documentation.md Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- docs/source/model_documentation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index 73764509..6d67874f 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -2820,7 +2820,7 @@ SO2 and NOx are also included in the [cost of health damag -## Power sector Employment +## Power sector employment Employment factors for biopower, solar PV, hydropower, pumped storage, and land-based wind are derived respectively from the Jobs and Economic Development Impact (JEDI) models {cite}`JEDI_2025` of individual technologies, all of which are publicly available. Employment factors for battery storage, coal, natural gas, geothermal, offshore wind, and transmission lines are derived respectively from the Workforce Impacts and Regional Economic Development (WIRED) models of individual technologies, all of which are not yet publicly available but are based on publicly available data inputs. Details are shown in {numref}`employment-factors` below. From 58ed89478ad5e801f941174d625617a8a3dbe84c Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:17:21 -0600 Subject: [PATCH 47/71] remove employment_factor_inter_transmission.csv from runfiles.csv --- reeds/input_processing/runfiles.csv | 1 - 1 file changed, 1 deletion(-) diff --git a/reeds/input_processing/runfiles.csv b/reeds/input_processing/runfiles.csv index b3a2de80..a25b8992 100644 --- a/reeds/input_processing/runfiles.csv +++ b/reeds/input_processing/runfiles.csv @@ -77,7 +77,6 @@ e.csv,inputs/sets/e.csv,1,ignore,ignore,,,,,0,,,set,e,emission categories used i eall.csv,inputs/sets/eall.csv,1,ignore,ignore,,,,,,,,set,eall,emission categories used in reporting, emitrate.csv,inputs/emission_constraints/emitrate.csv,1,ignore,ignore,,,,,0,,,,,, employment_factor_plant.csv,inputs/employment/employment_factor_plant_{GSw_EmploymentFactor}.csv,1,ignore,ignore,,,,,0,,,,,, -employment_factor_inter_transmission.csv,inputs/employment/employment_factor_inter_transmission.csv,1,ignore,ignore,,,,,0,,,,,, energy_communities.csv,inputs/financials/energy_communities.csv,1,ignore,ignore,,,,,0,,,,,,region aggregation and filtering is handled in copy_files etype.csv,inputs/sets/etype.csv,1,ignore,ignore,,,,,,,,set,etype,emission types used in model (upstream and process), exog_cap_geohydro.csv,inputs/capacity_exogenous/exog_cap_geohydro_{GSw_SitingGeo}.csv,int(sw.GSw_Geothermal) != 0,ignore,ignore,region,"*tech,sc_point_gid,year",,0,0,,,,,, From aeba6ecff96cce79ece54b8b2fa420ede67199d7 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:20:35 -0600 Subject: [PATCH 48/71] Update reeds/input_processing/copy_files.py Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/input_processing/copy_files.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/input_processing/copy_files.py b/reeds/input_processing/copy_files.py index ba76bea2..68408d60 100644 --- a/reeds/input_processing/copy_files.py +++ b/reeds/input_processing/copy_files.py @@ -1016,7 +1016,7 @@ def write_miscellaneous_files( ef_trans = pd.read_csv( os.path.join(reeds_path,'inputs','employment','employment_factor_inter_transmission.csv'), index_col=0) - ef_trans = ef_trans[ef_trans.index == sw['GSw_EmploymentFactor']].T.round(8).to_csv( + ef_trans[ef_trans.index == sw['GSw_EmploymentFactor']].T.round(8).to_csv( os.path.join(inputs_case,'employment_factor_inter_transmission.csv'),header=False) # Add this_year to years_until_endogenous to generate the tech-specific firstyear.csv file From aeb4a276d66764bf25f0a141823cc57de7d59468 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:22:35 -0600 Subject: [PATCH 49/71] remove FOM & VOM EF from transmission employment factor --- .../employment_factor_inter_transmission.csv | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/inputs/employment/employment_factor_inter_transmission.csv b/inputs/employment/employment_factor_inter_transmission.csv index 2a5e0da5..fd68987b 100644 --- a/inputs/employment/employment_factor_inter_transmission.csv +++ b/inputs/employment/employment_factor_inter_transmission.csv @@ -1,5 +1,5 @@ -,construction,fom,vom -jedi,0.00000331,0.00075584,0 -mayfield,0.00000499,0.444,0 -rutovitz,0.00000029,0,0 -ram,0.00000596,0,0 +,construction +jedi,0.00000331 +mayfield,0.00000499 +rutovitz,0.00000029 +ram,0.00000596 \ No newline at end of file From dbe0b485986a32223f15935d3f3fe86b3f111c30 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:23:49 -0600 Subject: [PATCH 50/71] Update reeds/core/setup/b_inputs.gms Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/setup/b_inputs.gms | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 05b4b5e8..006dcc8f 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6029,8 +6029,8 @@ upgrade_ratio(i)$[upgrade(i) $(sum{(ii,t)$upgrade_to(i,ii), cost_cap(ii,t)$tmodel_new(t) } - sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } > 0)] = (sum{(ii,t)$upgrade_to(i,ii), cost_cap(ii,t)$tmodel_new(t) } - - sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } ) / - sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } ; + - sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } ) + / sum{(ii,t)$upgrade_from(i,ii), cost_cap(ii,t)$tmodel_new(t) } ; * Only apply this ratio to non CCS upgrades if using JEDI EFs since JEDI already specifies CCS upgrade EFs $ifthen.upgrade_ef %GSw_EmploymentFactor% == "jedi" From de30412b7b35ee7525a70a5556c97083efa5a66e Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:24:53 -0600 Subject: [PATCH 51/71] Update reeds/core/setup/b_inputs.gms Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/setup/b_inputs.gms | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index 006dcc8f..a60da6ae 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6034,9 +6034,9 @@ upgrade_ratio(i)$[upgrade(i) * Only apply this ratio to non CCS upgrades if using JEDI EFs since JEDI already specifies CCS upgrade EFs $ifthen.upgrade_ef %GSw_EmploymentFactor% == "jedi" -employment_factor_plant(i,"construction")$[upgrade(i) - $(not ccs(i))] = employment_factor_plant(i,"construction") - * upgrade_ratio(i) ; +employment_factor_plant(i,"construction") + $[upgrade(i)$(not ccs(i))] + = employment_factor_plant(i,"construction") * upgrade_ratio(i) ; $else.upgrade_ef employment_factor_plant(i,"construction")$upgrade(i) = employment_factor_plant(i,"construction") * upgrade_ratio(i) ; From 3e61db290b1b2d6af20b65ae2bc8ad83c571812c Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:25:39 -0600 Subject: [PATCH 52/71] Update reeds/core/setup/b_inputs.gms Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/setup/b_inputs.gms | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index a60da6ae..a0cc88bc 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6038,8 +6038,9 @@ employment_factor_plant(i,"construction") $[upgrade(i)$(not ccs(i))] = employment_factor_plant(i,"construction") * upgrade_ratio(i) ; $else.upgrade_ef -employment_factor_plant(i,"construction")$upgrade(i) = employment_factor_plant(i,"construction") - * upgrade_ratio(i) ; +employment_factor_plant(i,"construction") + $upgrade(i) + = employment_factor_plant(i,"construction") * upgrade_ratio(i) ; $endif.upgrade_ef *================================================================================================ From fbf954e9f6b886a24dc28c6a5f32fc0a339dd455 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:26:46 -0600 Subject: [PATCH 53/71] remove alternative way to estimate transmission FOM employment --- reeds/core/setup/d_mga.gms | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index 229f6b45..7ae51bcc 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -149,22 +149,5 @@ eq_MGA_Objective$Sw_MGA.. * (1 + trans_fom_frac) ; -*************************************************************************** -* Alternative way of estimating transmission line -* FO&M employment using FTE/MW employment factor data -* (currently not used) -* + sum{(r,rr,trtype,t) -* $[tmodel(t) -* $routes(r,rr,trtype,t)], -** [MW] * [.] * [job-years/MW] = [job-years] -* CAPTRAN_ENERGY(r,rr,trtype,t) -* * pvf_onm(t) -* CAPTRAN_ENERGY is defined in both directions so needs to be divided by 2 -* but we don't divide by 2 here since this portion in the objective function -* is high by factor of 2 (will fix this separately) -* * employment_factor_inter_transmission("fom") } -*; -*************************************************************************** - $endif.mgaobj From d693897f94558b6209414efd3e088eb2449b6d10 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:29:29 -0600 Subject: [PATCH 54/71] add new line back at end --- reeds/solver/cplex.op2 | 2 +- reeds/solver/cplex.opt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reeds/solver/cplex.op2 b/reeds/solver/cplex.op2 index 48862a65..e01f19dd 100644 --- a/reeds/solver/cplex.op2 +++ b/reeds/solver/cplex.op2 @@ -68,4 +68,4 @@ barcolnz 100 * bardisplay 2 *** solutiontype (integer): type of solution (basic or non basic): 0 does basic with crossover, 2 skips crossover -* solutiontype 2 \ No newline at end of file +* solutiontype 2 diff --git a/reeds/solver/cplex.opt b/reeds/solver/cplex.opt index 0cc4443f..0a6c3ea6 100644 --- a/reeds/solver/cplex.opt +++ b/reeds/solver/cplex.opt @@ -68,4 +68,4 @@ barcolnz 30 * bardisplay 2 *** solutiontype (integer): type of solution (basic or non basic): 0 does basic with crossover, 2 skips crossover -* solutiontype 2 \ No newline at end of file +* solutiontype 2 From 4d255e62c4e7add59007c35c43210f2c73bb2223 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:46:28 -0600 Subject: [PATCH 55/71] remove USA_MGA_fast test --- cases_test.csv | 132 ++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/cases_test.csv b/cases_test.csv index 5d49c360..0e89185c 100644 --- a/cases_test.csv +++ b/cases_test.csv @@ -1,66 +1,66 @@ -,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,Pacific_DR,Pacific_MGA,USA_MGA_fast,Pacific_LoadSite95,MARICTNYNJPAOH_Offshore,R2P -ignore,1,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_Region,cendiv/Pacific,,country/USA,country/USA,country/USA,,st/ID.WY.NE.IA.IL,st/MA,,,,,,,st/WY,interconnect/western,transreg/PJM,st/NY.VT,st/OR,st/NE.NY.PA,st/NE.NY.PA,st/ID.WY.NE.IA.IL,st/KS,country/USA,country/USA,,,country/USA,,st/MA.RI.CT.NY.NJ.PA.OH, -endyear,2032,,2050,2050,2050,2029,2060,2026,,,,,,,,,,,2035,2030,2030,2060,2035,2050,2050,,,2050,,, -yearset,,,,,,,2010..2060..10,,,,,,,,,,,,,2010..2050..5,2010..2050..5,2010..2060..10,,,2010_2025_2050,,,2010_2015_2020..2050..5,,, -GSw_ZoneSet,,,,,,,z54,z3109,,,,,,,z3109,z3109,z3109,PJMcounty,,,,z54,,z54,z48,,,z54,,, -GSw_GasCurve,2,,1,1,,,,,,,,,,,,,,,,,,,,1,1,,,,,, -GSw_Geothermal,,,,2,,,,,,,,,,,,,,,,,,,0,,0,,,,,, -GSw_GrowthPenalties,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_Upstream,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_TransHurdleRate,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -distpvscen,,,,,stscen2023_mid_case_95_by_2035,,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_AnnualCap,,,,,2,,1,,,,,,,,,,,,,,,1,,,,,,,,, -GSw_AnnualCapScen,,,,,start2024_90pct2035_100pct2045,,start2027_95pct2035,,,,,,,,,,,,,,,start2027_95pct2035,,,,,,,,, -GSw_LoadProfiles,,,,,EER2025_100by2050,EER2025_IRAlow,EER2025_IRAlow,EER2025_IRAlow,,,,,historic,,,,,,,,,EER2025_100by2050,,,,historic,,,,, -GSw_NG_CRF_penalty,,,,,ramp_2045,,ramp_2023_2035,,,,,,,,,,,,,,,ramp_2023_2035,,,,,,,,, -GSw_PRM_NetImportLimit,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_RetirePenalty,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,,, -GSw_FakeData,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,,, -GSw_PRM_CapCredit,,,,,,,,1,1,,,,,,,,1,,,,,,,,,,,,,, -GSw_PRM_scenario,,,,,,,,,static,,,,,,,,static,,,,,,,,,,,,,, -GSw_PRM_UpdateMethod,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,, -GSw_HourlyType,,,,,,,,,,wek,year,,,,,,,,,,,,,,,,,,,, -GSw_InterDayLinkage,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,, -GSw_HourlyWeatherYears,,,,,,,2012_2013,,,,,,2020,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022_2023,,,,,,,,2012_2013,,,,2018,,,,, -GSw_HourlyClusterMapMethod,,,,,,,,,,,,,,bestfirst,,,,,,,,,,,,,,,,, -GSw_WaterCapacity,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, -GSw_WaterMain,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, -GSw_WaterUse,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, -resource_adequacy_years,,,,,,,2011_2012_2013_2021_2022_2023,,,,,,,,,,,,,,,2011_2012_2013_2021_2022_2023,,,,,,,,, -GSw_HourlyClusterAlgorithm,,,,,,,,,,,,,,,,,,,,user,user,,,,,,,,,, -MCS_runs,,,,,,,,,,,,,,,,,,,,2,2,,,,,,,,,, -MCS_dist_groups,,,,,,,,,,,,,,,,,,,,tech.hydro.nuclear.gas.coal.load_country,upv_tri.nuclear_tri.ng_fuel_price_tri.load_country_unif,,,,,,,,,, -MCS_lhs,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, -GSw_PRM_StressIterateMax,,,,,,,,0,,,,,,,,0,0,,,1,1,,,,,,,,,, -GSw_ReducedResource,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,, -GSw_SitingUPV,,,,,,limited,limited,limited,,,,,,,,,,,,,,limited,,,,,,,,, -GSw_SitingWindOfs,,,,,,limited,limited,limited,,,,,,,,,,,,,,open,,,,,,,,, -GSw_SitingWindOns,,,,,,limited,limited,limited,,,,,,,,,,,,,,limited,,,,,,,,, -GSw_TransScen,,,,,,,NTP_MT,,,,,,,,,,,,,,,NTP_MT,,,,,,,,, -GSw_CO2_Detail,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,, -GSw_DAC,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,, -GSw_NoFossilOffsetCDR,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,,, -GSw_Biopower,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,,, -GSw_HourlyChunkLengthRep,,,,,,,,,,,,,,,,,,,,,,,6,4,4,,,4,,, -GSw_HourlyChunkLengthStress,,,,,,,,,,,,,,,,,,,,,,,6,4,4,,,4,,, -GSw_LfillGas,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,,, -GSw_Nuclear,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,,, -GSw_OpRes,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,,, -GSw_StartCost,,,,,,,,,,,,,,,,,,,,,,,0,0,0,,,,,, -GSw_H2,,,,,,,,,,,,,,,,,,,,,,,,0,0,,,0,,, -GSw_H2_PTC,,,,,,,,,,,,,,,,,,,,,,,,0,0,,,0,,, -GSw_H2Combustion,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,, -GSw_DRShed,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,, -GSw_MGA_CostDelta,,,,,,,,,,,,,,,,,,,,,,,,,,,0.01,0.01,,, -GSw_gopt_mga,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,, -GSw_LoadSiteCF,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0.95,, -GSw_OffshoreZones,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -GSw_OffshoreBackbone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -GSw_OffshoreBackflow,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -pras_agg_ogs_lfillgas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 -pras_existing_unit_size,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0 -pras_scheduled_outage,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0 -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,Pacific_DR,Pacific_MGA,Pacific_LoadSite95,MARICTNYNJPAOH_Offshore,R2P +ignore,1,0,,,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_Region,cendiv/Pacific,,country/USA,country/USA,country/USA,,st/ID.WY.NE.IA.IL,st/MA,,,,,,,st/WY,interconnect/western,transreg/PJM,st/NY.VT,st/OR,st/NE.NY.PA,st/NE.NY.PA,st/ID.WY.NE.IA.IL,st/KS,country/USA,country/USA,,,,st/MA.RI.CT.NY.NJ.PA.OH, +endyear,2032,,2050,2050,2050,2029,2060,2026,,,,,,,,,,,2035,2030,2030,2060,2035,2050,2050,,,,, +yearset,,,,,,,2010..2060..10,,,,,,,,,,,,,2010..2050..5,2010..2050..5,2010..2060..10,,,2010_2025_2050,,,,, +GSw_ZoneSet,,,,,,,z54,z3109,,,,,,,z3109,z3109,z3109,PJMcounty,,,,z54,,z54,z48,,,,, +GSw_GasCurve,2,,1,1,,,,,,,,,,,,,,,,,,,,1,1,,,,, +GSw_Geothermal,,,,2,,,,,,,,,,,,,,,,,,,0,,0,,,,, +GSw_GrowthPenalties,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_Upstream,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_TransHurdleRate,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,, +distpvscen,,,,,stscen2023_mid_case_95_by_2035,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_AnnualCap,,,,,2,,1,,,,,,,,,,,,,,,1,,,,,,,, +GSw_AnnualCapScen,,,,,start2024_90pct2035_100pct2045,,start2027_95pct2035,,,,,,,,,,,,,,,start2027_95pct2035,,,,,,,, +GSw_LoadProfiles,,,,,EER2025_100by2050,EER2025_IRAlow,EER2025_IRAlow,EER2025_IRAlow,,,,,historic,,,,,,,,,EER2025_100by2050,,,,historic,,,, +GSw_NG_CRF_penalty,,,,,ramp_2045,,ramp_2023_2035,,,,,,,,,,,,,,,ramp_2023_2035,,,,,,,, +GSw_PRM_NetImportLimit,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_RetirePenalty,,,,,0,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_FakeData,,,,,,1,1,1,,,,,,,,,,,,,,,,,,,,,, +GSw_PRM_CapCredit,,,,,,,,1,1,,,,,,,,1,,,,,,,,,,,,, +GSw_PRM_scenario,,,,,,,,,static,,,,,,,,static,,,,,,,,,,,,, +GSw_PRM_UpdateMethod,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,, +GSw_HourlyType,,,,,,,,,,wek,year,,,,,,,,,,,,,,,,,,, +GSw_InterDayLinkage,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, +GSw_HourlyWeatherYears,,,,,,,2012_2013,,,,,,2020,2007_2008_2009_2010_2011_2012_2013_2016_2017_2018_2019_2020_2021_2022_2023,,,,,,,,2012_2013,,,,2018,,,, +GSw_HourlyClusterMapMethod,,,,,,,,,,,,,,bestfirst,,,,,,,,,,,,,,,, +GSw_WaterCapacity,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +GSw_WaterMain,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +GSw_WaterUse,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, +resource_adequacy_years,,,,,,,2011_2012_2013_2021_2022_2023,,,,,,,,,,,,,,,2011_2012_2013_2021_2022_2023,,,,,,,, +GSw_HourlyClusterAlgorithm,,,,,,,,,,,,,,,,,,,,user,user,,,,,,,,, +MCS_runs,,,,,,,,,,,,,,,,,,,,2,2,,,,,,,,, +MCS_dist_groups,,,,,,,,,,,,,,,,,,,,tech.hydro.nuclear.gas.coal.load_country,upv_tri.nuclear_tri.ng_fuel_price_tri.load_country_unif,,,,,,,,, +MCS_lhs,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,, +GSw_PRM_StressIterateMax,,,,,,,,0,,,,,,,,0,0,,,1,1,,,,,,,,, +GSw_ReducedResource,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,, +GSw_SitingUPV,,,,,,limited,limited,limited,,,,,,,,,,,,,,limited,,,,,,,, +GSw_SitingWindOfs,,,,,,limited,limited,limited,,,,,,,,,,,,,,open,,,,,,,, +GSw_SitingWindOns,,,,,,limited,limited,limited,,,,,,,,,,,,,,limited,,,,,,,, +GSw_TransScen,,,,,,,NTP_MT,,,,,,,,,,,,,,,NTP_MT,,,,,,,, +GSw_CO2_Detail,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,, +GSw_DAC,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,, +GSw_NoFossilOffsetCDR,,,,,,,1,,,,,,,,,,,,,,,1,,,,,,,, +GSw_Biopower,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,, +GSw_HourlyChunkLengthRep,,,,,,,,,,,,,,,,,,,,,,,6,4,4,,,,, +GSw_HourlyChunkLengthStress,,,,,,,,,,,,,,,,,,,,,,,6,4,4,,,,, +GSw_LfillGas,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,, +GSw_Nuclear,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,, +GSw_OpRes,,,,,,,,,,,,,,,,,,,,,,,0,,0,,,,, +GSw_StartCost,,,,,,,,,,,,,,,,,,,,,,,0,0,0,,,,, +GSw_H2,,,,,,,,,,,,,,,,,,,,,,,,0,0,,,,, +GSw_H2_PTC,,,,,,,,,,,,,,,,,,,,,,,,0,0,,,,, +GSw_H2Combustion,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,, +GSw_DRShed,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,, +GSw_MGA_CostDelta,,,,,,,,,,,,,,,,,,,,,,,,,,,0.01,,, +GSw_gopt_mga,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +GSw_LoadSiteCF,,,,,,,,,,,,,,,,,,,,,,,,,,,,0.95,, +GSw_OffshoreZones,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +GSw_OffshoreBackbone,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +GSw_OffshoreBackflow,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +pras_agg_ogs_lfillgas,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +pras_existing_unit_size,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0 +pras_scheduled_outage,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0 +pras_unitsize_source,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,r2x +pras_vre_combine,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 +pras_samples,,,,,,10,10,10,,,,,,,,,,,,,,,,10,10,,,,, \ No newline at end of file From af0b40d0c0fb51d220240f29099238a9d513ef47 Mon Sep 17 00:00:00 2001 From: An Pham Date: Mon, 6 Jul 2026 23:52:52 -0600 Subject: [PATCH 56/71] clean up EF unit --- reeds/core/setup/b_inputs.gms | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reeds/core/setup/b_inputs.gms b/reeds/core/setup/b_inputs.gms index a0cc88bc..e2e918d0 100644 --- a/reeds/core/setup/b_inputs.gms +++ b/reeds/core/setup/b_inputs.gms @@ -6001,7 +6001,7 @@ z_rep_op(t) = 0 ; *==================================== * Employment factors of construction and operation of power plants $onempty -Table employment_factor_plant(i,jtype) "--job-years/MW (construction & fom) or job-years/MWh (vom)-- employment factors of power plants by technology and job type" +Table employment_factor_plant(i,jtype) "--job-years/MW (construction), job-years/MW-year (fom) or job-years/MWh (vom)-- employment factors of power plants by technology and job type" $offlisting $ondelim $include inputs_case%ds%employment_factor_plant.csv @@ -6011,7 +6011,7 @@ $onlisting $offempty * Employment factors of transmission deployment and flow -parameter employment_factor_inter_transmission(jtype) "--job-years/$ (construction) or job-years/MW (fom) or job-years/MWh (vom)-- employment factors of transmission lines by job type" +parameter employment_factor_inter_transmission(jtype) "--job-years/$ (construction) -- construction employment factors of transmission lines" / $offlisting $ondelim From 3d77c8064ba1ee546abcf24211891742bba8afc1 Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 7 Jul 2026 00:17:38 -0600 Subject: [PATCH 57/71] add README for employment --- docs/source/model_documentation.md | 33 +----------------------- inputs/employment/README.md | 40 ++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 32 deletions(-) create mode 100644 inputs/employment/README.md diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index 6d67874f..c4e741ff 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -2822,38 +2822,7 @@ SO2 and NOx are also included in the [cost of health damag ## Power sector employment -Employment factors for biopower, solar PV, hydropower, pumped storage, and land-based wind are derived respectively from the Jobs and Economic Development Impact (JEDI) models {cite}`JEDI_2025` of individual technologies, all of which are publicly available. Employment factors for battery storage, coal, natural gas, geothermal, offshore wind, and transmission lines are derived respectively from the Workforce Impacts and Regional Economic Development (WIRED) models of individual technologies, all of which are not yet publicly available but are based on publicly available data inputs. Details are shown in {numref}`employment-factors` below. - -```{table} Technology-specific construction and FOM employment factors. -:name: employment-factors -| Technology | Construction EF | FOM EF | VOM EF | Unit | Source | -|-------------------------|-----------------|--------|----------|---------------------------------------------------------------------------------| -| Biopower | 3.76 | 1.453 | 4.52E-05 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | -| Battery | 0.94 | 0.033 | 0 | FTE/MW[h] | WIRED {cite}`Ramasamy_et_al_2022` | -| Coal-IGCC | 4.15 | 0.182 | 3.72E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | -| Coal-PC | 2.66 | 0.160 | 3.95E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | -| Coal-CCS RT | 1.62 | 0.157 | 5.63E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | -| Coal-CCS GF | 4.20 | 0.186 | 5.35E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | -| DPV | 2.98 | 0.204 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | -| Geothermal-Hydrothermal | 4.61 | 0.157 | 3.51E-05 | FTE/MW[h] | WIRED {cite}`SAM` | -| Geothermal-EGS | 5.51 | 0.151 | 4.97E-05 | FTE/MW[h] | WIRED {cite}`SAM` | -| Hydropower | 3.09 | 0.02 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | -| Land-based Wind | 1.23 | 0.033 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | -| NG-CC | 0.58 | 0.052 | 2.76E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| NG-CC-CCS RT | 0.86 | 0.084 | 3.31E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| NG-CC-CCS GF | 1.30 | 0.072 | 3.11E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| NG-CT | 1.12 | 0.28 | 4.23E-05 | FTE/MW[h] | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| Nuclear Conventional | 13.75 | 1.043 | 2.95E-05 | FTE/MW[h] | {cite}`Abou_Jaoude_et_al_2023` | -| Nuclear SMR | 13.75 | 1.043 | 1.65E-05 | FTE/MW[h] | {cite}`Asuega_et_al_2023` | -| Offshore Wind | 1.75 | 0.115 | 0 | FTE/MW[h] | {cite}`Hammond_and_Cooperman_2022` and {cite}`Nunemaker_et_al_2020` | -| Transmission-500kW AC | 12.68 | 0.093 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | -| Transmission-230kW AC | 4.71 | 0.089 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | -| Transmission-500kW AC | 1.99 | 0.978 | 0 | FTE/M2004$| Estimated | -| Transmission-230kW AC | 1.57 | 0.938 | 0 | FTE/M2004$| Estimated | -| UPV | 2.32 | 0.05 | 0 | FTE/MW[h] | JEDI {cite}`JEDI_2025` | - -``` - +Employment factors for biopower, solar PV, hydropower, pumped storage, and land-based wind are derived respectively from the Jobs and Economic Development Impact (JEDI) models {cite}`JEDI_2025` of individual technologies, all of which are publicly available. Employment factors for battery storage, coal, natural gas, geothermal, offshore wind, and transmission lines are derived respectively from the Workforce Impacts and Regional Economic Development (WIRED) models of individual technologies, all of which are not yet publicly available but are based on publicly available data inputs. | diff --git a/inputs/employment/README.md b/inputs/employment/README.md new file mode 100644 index 00000000..b9dde3b0 --- /dev/null +++ b/inputs/employment/README.md @@ -0,0 +1,40 @@ +# Power sector employment data +## Data input options +- `employment_factor_plant_jedi.csv`: Employment factor data for power plants of different technologies, taken from the JEDI/WIRED model. +Sources for employment data of individual technologies in JEDI/WIRED are shown in the table below. + +| Technology | Source | +|-------------------------|---------------------------------------------------------------------| +| Biopower | JEDI {cite}`JEDI_2025` | +| Battery | WIRED {cite}`Ramasamy_et_al_2022` | +| Coal-IGCC | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | +| Coal-PC | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | +| Coal-CCS RT | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | +| Coal-CCS GF | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | +| DPV | JEDI {cite}`JEDI_2025` | +| Geothermal-Hydrothermal | WIRED {cite}`SAM` | +| Geothermal-EGS | WIRED {cite}`SAM` | +| Hydropower | JEDI {cite}`JEDI_2025` | +| Land-based Wind | JEDI {cite}`JEDI_2025` | +| NG-CC | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| NG-CC-CCS RT | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| NG-CC-CCS GF | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| NG-CT | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | +| Nuclear Conventional | {cite}`Abou_Jaoude_et_al_2023` | +| Nuclear SMR | {cite}`Asuega_et_al_2023` | +| Offshore Wind | {cite}`Hammond_and_Cooperman_2022` and {cite}`Nunemaker_et_al_2020` | +| Transmission-500kW AC | JEDI {cite}`JEDI_2025` | +| Transmission-230kW AC | JEDI {cite}`JEDI_2025` | | +| UPV | JEDI {cite}`JEDI_2025` + +- `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- Mayfield et al. (2023), Rutovitz et al. (2024) and Ram et al. (2020). + +- `employment_factor_inter_transmission.csv`: Employment factor data for transmission line construction, taken from the four data source mentioned above (JEDI/WIRED models), Mayfield et al. (2023), Rutovitz et al. (2024) and Ram et al. (2020). + +## Employment factor unit +- Power plants: + - Construction: [job-years/MW] + - FOM: [job-years/MW-year] + - VOM: [job-years/MWh] +- Transmission lines: + - Construction: [job-years/(2004$)] From 9113aebae4f06acbe61cac24689c833ba6ddf5ab Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 7 Jul 2026 15:52:42 -0600 Subject: [PATCH 58/71] incorporate citations from zotero --- docs/source/model_documentation.md | 2 +- docs/source/references.bib | 244 +++++++++++++++++------------ inputs/employment/README.md | 43 ++--- 3 files changed, 171 insertions(+), 118 deletions(-) diff --git a/docs/source/model_documentation.md b/docs/source/model_documentation.md index c4e741ff..6ef484ed 100644 --- a/docs/source/model_documentation.md +++ b/docs/source/model_documentation.md @@ -2822,7 +2822,7 @@ SO2 and NOx are also included in the [cost of health damag ## Power sector employment -Employment factors for biopower, solar PV, hydropower, pumped storage, and land-based wind are derived respectively from the Jobs and Economic Development Impact (JEDI) models {cite}`JEDI_2025` of individual technologies, all of which are publicly available. Employment factors for battery storage, coal, natural gas, geothermal, offshore wind, and transmission lines are derived respectively from the Workforce Impacts and Regional Economic Development (WIRED) models of individual technologies, all of which are not yet publicly available but are based on publicly available data inputs. | +Employment factors for biopower, solar PV, hydropower, pumped storage, and land-based wind are derived respectively from the Jobs and Economic Development Impact (JEDI) models {cite}`JobsEconomicDevelopment` of individual technologies, all of which are publicly available. Employment factors for battery storage, coal, natural gas, geothermal, offshore wind, and transmission lines are derived respectively from the Workforce Impacts and Regional Economic Development (WIRED) models of individual technologies, all of which are not yet publicly available but are based on publicly available data inputs. | diff --git a/docs/source/references.bib b/docs/source/references.bib index 427aa90c..f9ae2cad 100644 --- a/docs/source/references.bib +++ b/docs/source/references.bib @@ -30495,102 +30495,152 @@ @misc{zuluagaNodalCapacityExpansion2025 langid = {english} } -@misc{JEDI_2025, - author = {NLR}, - year = {2025}, - institution = {NLR}, - title = {Jobs and Economic Development Impact Models}, - url = {https://www.nlr.gov/analysis/jedi/} +@online{JobsEconomicDevelopment, + title = {Jobs and Economic Development Impact Models {\textbar} {NLR}}, + url = {https://www.nlr.gov/analysis/jedi/}, + urldate = {2026-07-07}, + file = {Jobs and Economic Development Impact Models | NLR:files/8170/jedi.html:text/html}, +} + +@article{asuegaTechnoeconomicAnalysisAdvanced2023, + title = {Techno-economic analysis of advanced small modular nuclear reactors}, + volume = {334}, + issn = {0306-2619}, + url = {https://www.sciencedirect.com/science/article/pii/S0306261923000338}, + doi = {10.1016/j.apenergy.2023.120669}, + pages = {120669}, + journaltitle = {Applied Energy}, + shortjournal = {Applied Energy}, + author = {Asuega, Anthony and Limb, Braden J. and Quinn, Jason C.}, + urldate = {2026-07-07}, + date = {2023-03-15}, + keywords = {Levelized cost of energy, Overnight capital cost, Small modular reactors, {SMRs}, Techno-economic analysis}, + file = {ScienceDirect Snapshot:files/8183/S0306261923000338.html:text/html;Submitted Version:files/8182/Asuega et al. - 2023 - Techno-economic analysis of advanced small modular nuclear reactors.pdf:application/pdf}, +} + +@report{abou-jaoudeLiteratureReviewAdvanced2023, + title = {Literature Review of Advanced Reactor Cost Estimates}, + url = {https://www.osti.gov/servlets/purl/1986466/}, + doi = {10.2172/1986466}, + pages = {INL/RPT--23--72972--Rev000, 1986466}, + number = {{INL}/{RPT}--23-72972-Rev000, 1986466}, + author = {Abou-Jaoude, Abdalla and Lin, Linyu and Bolisetti, Chandrakanth and Worsham, Elizabeth and Larsen, Levi and Epiney, Aaron}, + urldate = {2026-07-07}, + date = {2023-06-01}, + langid = {english}, + file = {PDF:files/8184/Abou-Jaoude et al. - 2023 - Literature Review of Advanced Reactor Cost Estimates.pdf:application/pdf}, +} + +@misc{basoreQ12025SolarPhotovoltaic, + title = {Q1-2025 Solar Photovoltaic System Cost Benchmarks}, + url = {https://www.osti.gov/servlets/purl/3009689}, + doi = {10.7799/3009689}, + abstract = {The U.S. Department of Energy’s solar office and its national laboratory partners analyze cost data for U.S. solar photovoltaic systems to develop cost benchmarks to measure progress toward goals and guide research and development programs. The cost data is available in an Excel spreadsheet model that can be downloaded here.}, + publisher = {National Laboratory of the Rockies}, + author = {Basore, Paul and Dummit, Krysta and Thomas, Andy and Taylor, Margaret and Benoliel, Peter and Feldman, David and Narayanaswami, Meenakshi and Ramasamy, Vignesh and Woodhouse, Michael and Zuboy, Jarett and Braid, Jennifer and Jost, Norman and Sproul, Evan}, + urldate = {2026-07-07}, + note = {Artwork Size: 7 files. +Pages: 7 files.}, + keywords = {14 {SOLAR} {ENERGY}, battery cost 2025, battery system cost, pv cost 2025, pv module cost, pv system cost}, +} + +@report{hammondWindfarmOperationsMaintenance2022, + title = {Windfarm Operations and Maintenance cost-Benefit Analysis Tool ({WOMBAT})}, + url = {https://www.osti.gov/servlets/purl/1894867/}, + doi = {10.2172/1894867}, + pages = {NREL/TP--5000--83712, 1894867, MainId:84485}, + number = {{NREL}/{TP}-5000-83712, 1894867, {MainId}:84485}, + author = {Hammond, Rob and Cooperman, Aubryn}, + urldate = {2026-07-07}, + date = {2022-10-01}, + langid = {english}, + file = {PDF:files/8187/Hammond and Cooperman - 2022 - Windfarm Operations and Maintenance cost-Benefit Analysis Tool (WOMBAT).pdf:application/pdf}, +} + +@misc{hansonGeothermalElectricityTechnology2013, + title = {Geothermal Electricity Technology Evaluation Model ({GETEM}) Individual Case Files and Summary Spreadsheet ({GETEM} version Spring 2013)}, + url = {http://www.osti.gov/servlets/purl/1148822/}, + doi = {10.15121/1148822}, + abstract = {This group of files-- 10 {GETEM} individual case files and 1 summary spreadsheet-- contain final data from the revisions between summer 2011 and spring 2013.}, + publisher = {{DOE} Geothermal Data Repository; Idaho National Laboratory ({INL}), Idaho Falls, {ID} (United States)}, + author = {Hanson, Steven}, + urldate = {2026-07-07}, + date = {2013}, + langid = {english}, + keywords = {15 Geothermal Energy, geothermal, Geothermal Electricity Technology Evaluation Model, {GETEM}, {LCOE}, Levelized Cost of Electricity}, +} + +@report{schmitt_et_al_2022, + title = {Cost and Performance Baseline for Fossil Energy Plants. Volume 1: Bituminous Coal and Natural Gas to Electricity}, + url = {https://www.osti.gov/servlets/purl/1893822/}, + institution = {National Energy Technology Laboratory}, + author = {{Schmitt, Tommy} and {Leptinsky, Sarah} and {Turner, Marc} and {Zoelle, Alexander} and {White, Charles W.} and {Hughes, Sydney} and {Homsy, Sally} and {Woods, Mark} and {Hoffman, Hannah} and {Shultz, Travis} and {James, Robert}}, + urldate = {2026-07-07}, + date = {2022}, +} + +@article{james_et_al_2023, + title = {Cost and Performance Baseline for Fossil Energy Plants, Volume 3 – Low Rank Coal and Natural Gas to Electricity}, + author = {James, Robert and Woods, Mark and Turner, Marc and Schmitt, Tommy and Oakes, Matt and Konrade, Jacob and Bleckinger, Mark and Sturdivan, Mark}, + langid = {english}, + file = {PDF:files/8176/James et al. - Cost and Performance Baseline for Fossil Energy Plants, Volume 3 – Low Rank Coal and Natural Gas to.pdf:application/pdf}, +} + +@report{oakesCostPerformanceBaseline2023, + title = {Cost and Performance Baseline for Fossil Energy Plants, Volume 5: Natural Gas Electricity Generating Units for Flexible Operation}, + url = {https://www.osti.gov/servlets/purl/1973266/}, + doi = {10.2172/1973266}, + shorttitle = {Cost and Performance Baseline for Fossil Energy Plants, Volume 5}, + pages = {DOE/NETL--2023/3855, 1973266}, + number = {{DOE}/{NETL}--2023/3855, 1973266}, + author = {Oakes, Matt and Konrade, Jacob and Bleckinger, Mark and Turner, Marc and Hughes, Sydney and Hoffman, Hannah and Shultz, Travis and Lewis, Eric}, + urldate = {2026-07-07}, + date = {2023-05-05}, + langid = {english}, + file = {PDF:files/8189/Oakes et al. - 2023 - Cost and Performance Baseline for Fossil Energy Plants, Volume 5 Natural Gas Electricity Generating.pdf:application/pdf}, +} + +@article{EliminatingDerateCarbon, + title = {Eliminating the Derate of Carbon Capture Retrofits}, + journaltitle = {National Energy Technology Laboratory}, + author = {{K. Buchheit} and {N. Kuehn}}, + langid = {english}, + file = {PDF:files/8178/K. Buchheit and N. Kuehn - Eliminating the Derate of Carbon Capture Retrofits.pdf:application/pdf}, +} + +@report{schmittCostPerformanceRetrofitting2023, + title = {Cost and Performance of Retrofitting {NGCC} Units for Carbon Capture – Revision 3}, + url = {https://www.osti.gov/servlets/purl/1961845/}, + doi = {10.2172/1961845}, + pages = {DOE/NETL--2023/3848, 1961845}, + number = {{DOE}/{NETL}-2023/3848, 1961845}, + author = {Schmitt, Tommy and Homsy, Sally and Mantripragada, Hari and Woods, Mark and Hoffman, Hannah and Shultz, Travis and Fout, Timothy and Hackett, Gregory}, + urldate = {2026-07-07}, + date = {2023-05-31}, + langid = {english}, + file = {PDF:files/8191/Schmitt et al. - 2023 - Cost and Performance of Retrofitting NGCC Units for Carbon Capture – Revision 3.pdf:application/pdf}, +} + +@report{nunemakerORBITOffshoreRenewables2020, + title = {{ORBIT}: Offshore Renewables Balance-of-System and Installation Tool}, + url = {https://www.osti.gov/servlets/purl/1660132/}, + doi = {10.2172/1660132}, + shorttitle = {{ORBIT}}, + pages = {NREL/TP--5000--77081, 1660132, MainId:26027}, + number = {{NREL}/{TP}-5000-77081, 1660132, {MainId}:26027}, + author = {Nunemaker, Jacob and Shields, Matthew and Hammond, Robert and Duffy, Patrick}, + urldate = {2026-07-07}, + date = {2020-08-10}, + langid = {english}, + file = {PDF:files/8193/Nunemaker et al. - 2020 - ORBIT Offshore Renewables Balance-of-System and Installation Tool.pdf:application/pdf}, +} + +@article{ramasamyUSSolarPhotovoltaic2022, + title = {U.S. Solar Photovoltaic System and Energy Storage Cost Benchmarks, With Minimum Sustainable Price Analysis: Q1 2022}, + journaltitle = {Renewable Energy}, + author = {Ramasamy, Vignesh and Zuboy, Jarett and O'Shaughnessy, Eric and Feldman, David and Desai, Jal and Woodhouse, Michael and Basore, Paul and Margolis, Robert}, + date = {2022}, + langid = {english}, + file = {PDF:files/8171/Ramasamy et al. - 2022 - U.S. Solar Photovoltaic System and Energy Storage Cost Benchmarks, With Minimum Sustainable Price An.pdf:application/pdf}, } -@article{Asuega_et_al_2023, -title = {Techno-economic analysis of advanced small modular nuclear reactors}, -journal = {Applied Energy}, -volume = {334}, -pages = {120669}, -year = {2023}, -issn = {0306-2619}, -doi = {https://doi.org/10.1016/j.apenergy.2023.120669}, -url = {https://www.sciencedirect.com/science/article/pii/S0306261923000338}, -author = {Anthony Asuega and Braden J. Limb and Jason C. Quinn} -} - -@techreport{Abou_Jaoude_et_al_2023, - author = {Abdalla Abou-Jaoude and Linyu Lin and Chandrakanth Bolisetti and Elizabeth Worsham and Levi M Larsen and Aaron Epiney}, - title = {Literature Review of Advanced Reactor Cost Estimates. Milestone M3CT-23IN1207065}, - institution = {Idaho National Laboratory}, - year = {2023} -} - -@misc{Basore_et_al_2025, - author = {Paul Basore and Krysta Dummit and Andy Thomas and Margaret Taylor and Peter Benoliel and David Feldman and Meenakshi Narayanaswami and Vignesh Ramasamy and Michael Woodhouse and Jarett Zuboy and Jennifer Braid and Norman Jost and Evan Sproul}, - year = {2025}, - institution = {National Laboratory of the Rockies}, - title = {Q1-2025 Solar Photovoltaic System Cost Benchmarks. NLR Data Catalog}, - url = {https://data.nlr.gov/submissions/304} -} - -@techreport{Hammond_and_Cooperman_2022, - author = {Rob Hammond and Aubryn Cooperman}, - title = {Windfarm Operations and Maintenance cost-Benefit Analysis Tool (WOMBAT). NREL/TP-5000-83712}, - institution = {National Renewable Energy Laboratory}, - year = {2022}, - url = {https://www.osti.gov/biblio/1894867} -} - -@misc{SAM, - author = {NLR}, - year = {2025}, - institution = {National Laboratory of the Rockies}, - title = {System Advisor Model – Geothermal (GETEM)}, - url = {https://sam.nlr.gov/geothermal.html} -} - -@techreport{NETL_2022, - author = {NETL}, - title = {Cost and Performance Baseline for Fossil Energy Plants. Volume 1: Bituminous Coal and Natural Gas to Electricity. DOE/NETL-2023/4320}, - institution = {National Energy Technology Laboratory} , - year = {2022} -} - -@techreport{NETL_2023a, - author = {NETL}, - title = {Cost and Performance Baseline for Fossil Energy Plants. Volume 3: Low Rank Coal and Natural Gas to Electricity. DOE/NETL-2023/3852}, - institution = {National Energy Technology Laboratory} , - year = {2023} -} - -@techreport{NETL_2023b, - author = {NETL}, - title = {Cost and Performance Baseline for Fossil Energy Plants. Volume 5: Natural Gas Electricity Generating Units for Flexible Operation. DOE/NETL-2023/3855}, - institution = {National Energy Technology Laboratory} , - year = {2023} -} - -@techreport{NETL_2023c, - author = {NETL}, - title = {Eliminating the Derate of Carbon Capture Retrofits - Revision 2. DOE/NETL-2023/3850}, - institution = {National Energy Technology Laboratory} , - year = {2023} -} - -@techreport{NETL_2025, - author = {NETL}, - title = {Cost and Performance of Retrofitting NGCC Units for Carbon Capture - Revision 3. DOE/NETL-2023/3848}, - institution = {National Energy Technology Laboratory} , - year = {2025} -} - -@techreport{Nunemaker_et_al_2020, - author = {Jake Nunemaker and Matt Shields and Robert Hammond and and Patrick Duffy}, - title = {ORBIT: Offshore Renewables Balance-of-System and Installation Tool. NREL/TP-5000-77081}, - institution = {National Renewable Energy Laboratory (NREL)} , - year = {2020} -} - -@techreport{Ramasamy_et_al_2022, - author = {Vignesh Ramasamy and Jarett Zuboy and Eric O’Shaughnessy and David Feldman and Jal Desai and Michael Woodhouse and Paul Basore and Robert Margolis}, - title = {U.S. Solar Photovoltaic System and Energy Storage Cost Benchmarks, With Minimum Sustainable Price Analysis: Q1 2022. NREL/TP-7A40-83586}, - institution = {National Renewable Energy Laboratory (NREL)} , - year = {2022} -} diff --git a/inputs/employment/README.md b/inputs/employment/README.md index b9dde3b0..4239d399 100644 --- a/inputs/employment/README.md +++ b/inputs/employment/README.md @@ -3,31 +3,34 @@ - `employment_factor_plant_jedi.csv`: Employment factor data for power plants of different technologies, taken from the JEDI/WIRED model. Sources for employment data of individual technologies in JEDI/WIRED are shown in the table below. +```{table} Employment factors for individual ReEDS technologies +:name: employment-factors | Technology | Source | |-------------------------|---------------------------------------------------------------------| -| Biopower | JEDI {cite}`JEDI_2025` | -| Battery | WIRED {cite}`Ramasamy_et_al_2022` | -| Coal-IGCC | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | -| Coal-PC | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | -| Coal-CCS RT | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | -| Coal-CCS GF | WIRED {cite}`NETL_2022`, {cite}`NETL_2023a` and {cite}`NETL_2023c`. | -| DPV | JEDI {cite}`JEDI_2025` | -| Geothermal-Hydrothermal | WIRED {cite}`SAM` | -| Geothermal-EGS | WIRED {cite}`SAM` | +| Biopower | JEDI {cite}`JobsEconomicDevelopment` | +| Battery | WIRED {cite}`ramasamyUSSolarPhotovoltaic2022` | +| Coal-IGCC | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | +| Coal-PC | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | +| Coal-CCS RT | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | +| Coal-CCS GF | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | +| DPV | JEDI {cite}`JobsEconomicDevelopment` | +| Geothermal-Hydrothermal | WIRED {cite}`hansonGeothermalElectricityTechnology2013` | +| Geothermal-EGS | WIRED {cite}`hansonGeothermalElectricityTechnology2013` | | Hydropower | JEDI {cite}`JEDI_2025` | | Land-based Wind | JEDI {cite}`JEDI_2025` | -| NG-CC | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| NG-CC-CCS RT | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| NG-CC-CCS GF | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| NG-CT | WIRED {cite}`NETL_2022`, {cite}`NETL_2023b` and {cite}`NETL_2025` | -| Nuclear Conventional | {cite}`Abou_Jaoude_et_al_2023` | -| Nuclear SMR | {cite}`Asuega_et_al_2023` | -| Offshore Wind | {cite}`Hammond_and_Cooperman_2022` and {cite}`Nunemaker_et_al_2020` | -| Transmission-500kW AC | JEDI {cite}`JEDI_2025` | -| Transmission-230kW AC | JEDI {cite}`JEDI_2025` | | -| UPV | JEDI {cite}`JEDI_2025` +| NG-CC | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | +| NG-CC-CCS RT | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | +| NG-CC-CCS GF | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | +| NG-CT | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | +| Nuclear Conventional | {cite}`abou-jaoudeLiteratureReviewAdvanced2023` | +| Nuclear SMR | {cite}`asuegaTechnoeconomicAnalysisAdvanced2023` | +| Offshore Wind | {cite}`hammondWindfarmOperationsMaintenance2022` and {cite}`nunemakerORBITOffshoreRenewables2020` | +| Transmission-500kW AC | JEDI {cite}`JobsEconomicDevelopment` | +| Transmission-230kW AC | JEDI {cite}`JobsEconomicDevelopment` | | +| UPV | JEDI {cite}`JobsEconomicDevelopment` +``` -- `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- Mayfield et al. (2023), Rutovitz et al. (2024) and Ram et al. (2020). +- `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- Mayfield et al. (2023) {cite}`mayfieldLaborPathwaysAchieve2023`, Rutovitz et al. (2024) {cite}`rutovitzUpdatedEmploymentFactors2025` and Ram et al. (2020) {cite}`ramJobCreationGlobal2020`. - `employment_factor_inter_transmission.csv`: Employment factor data for transmission line construction, taken from the four data source mentioned above (JEDI/WIRED models), Mayfield et al. (2023), Rutovitz et al. (2024) and Ram et al. (2020). From 3cedf1809be33e67dcaab4053c0f8a13c04cd72b Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 7 Jul 2026 18:34:18 -0600 Subject: [PATCH 59/71] Update README.md --- inputs/employment/README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/inputs/employment/README.md b/inputs/employment/README.md index 4239d399..1a3db9de 100644 --- a/inputs/employment/README.md +++ b/inputs/employment/README.md @@ -3,8 +3,6 @@ - `employment_factor_plant_jedi.csv`: Employment factor data for power plants of different technologies, taken from the JEDI/WIRED model. Sources for employment data of individual technologies in JEDI/WIRED are shown in the table below. -```{table} Employment factors for individual ReEDS technologies -:name: employment-factors | Technology | Source | |-------------------------|---------------------------------------------------------------------| | Biopower | JEDI {cite}`JobsEconomicDevelopment` | @@ -26,9 +24,8 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Nuclear SMR | {cite}`asuegaTechnoeconomicAnalysisAdvanced2023` | | Offshore Wind | {cite}`hammondWindfarmOperationsMaintenance2022` and {cite}`nunemakerORBITOffshoreRenewables2020` | | Transmission-500kW AC | JEDI {cite}`JobsEconomicDevelopment` | -| Transmission-230kW AC | JEDI {cite}`JobsEconomicDevelopment` | | -| UPV | JEDI {cite}`JobsEconomicDevelopment` -``` +| Transmission-230kW AC | JEDI {cite}`JobsEconomicDevelopment` | +| UPV | JEDI {cite}`JobsEconomicDevelopment` | - `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- Mayfield et al. (2023) {cite}`mayfieldLaborPathwaysAchieve2023`, Rutovitz et al. (2024) {cite}`rutovitzUpdatedEmploymentFactors2025` and Ram et al. (2020) {cite}`ramJobCreationGlobal2020`. From b049e4bc70c04a2d95e00caa18442fb362fe8f64 Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 7 Jul 2026 18:40:25 -0600 Subject: [PATCH 60/71] Update README.md --- inputs/employment/README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/inputs/employment/README.md b/inputs/employment/README.md index 1a3db9de..6a88bc3f 100644 --- a/inputs/employment/README.md +++ b/inputs/employment/README.md @@ -5,17 +5,17 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Technology | Source | |-------------------------|---------------------------------------------------------------------| -| Biopower | JEDI {cite}`JobsEconomicDevelopment` | +| Biopower | JEDI Biopower Model (B12.23.16)[^1] | | Battery | WIRED {cite}`ramasamyUSSolarPhotovoltaic2022` | | Coal-IGCC | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | | Coal-PC | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | | Coal-CCS RT | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | | Coal-CCS GF | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | -| DPV | JEDI {cite}`JobsEconomicDevelopment` | +| DPV | JEDI Photovoltaics Model (PV05.20.21)[^1] | | Geothermal-Hydrothermal | WIRED {cite}`hansonGeothermalElectricityTechnology2013` | | Geothermal-EGS | WIRED {cite}`hansonGeothermalElectricityTechnology2013` | -| Hydropower | JEDI {cite}`JEDI_2025` | -| Land-based Wind | JEDI {cite}`JEDI_2025` | +| Hydropower | JEDI Conventional Hydro Model (CH12.23.16)[^1] | +| Land-based Wind | JEDI Onshore Wind Model (W2000)[^1] | | NG-CC | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | | NG-CC-CCS RT | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | | NG-CC-CCS GF | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | @@ -23,9 +23,9 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Nuclear Conventional | {cite}`abou-jaoudeLiteratureReviewAdvanced2023` | | Nuclear SMR | {cite}`asuegaTechnoeconomicAnalysisAdvanced2023` | | Offshore Wind | {cite}`hammondWindfarmOperationsMaintenance2022` and {cite}`nunemakerORBITOffshoreRenewables2020` | -| Transmission-500kW AC | JEDI {cite}`JobsEconomicDevelopment` | -| Transmission-230kW AC | JEDI {cite}`JobsEconomicDevelopment` | -| UPV | JEDI {cite}`JobsEconomicDevelopment` | +| Transmission-500kW AC | WIRED Transmission Line Model (TL.12.23.16) based on JEDI Transmission Line Model[^1] | +| Transmission-230kW AC | WIRED Transmission Line Model (TL.12.23.16) based on JEDI Transmission Line Model[^1] | +| UPV | JEDI Photovoltaics Model (PV05.20.21)[^1] | - `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- Mayfield et al. (2023) {cite}`mayfieldLaborPathwaysAchieve2023`, Rutovitz et al. (2024) {cite}`rutovitzUpdatedEmploymentFactors2025` and Ram et al. (2020) {cite}`ramJobCreationGlobal2020`. @@ -38,3 +38,5 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i - VOM: [job-years/MWh] - Transmission lines: - Construction: [job-years/(2004$)] + +[^1] NLR. Jobs and economic development impact models, 2025. https://www.nlr.gov/analysis/jedi/ From d6f27fd3732c8fb82ee9a2e86c88df8b0ba70d94 Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 7 Jul 2026 19:19:06 -0600 Subject: [PATCH 61/71] Update README.md --- inputs/employment/README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/inputs/employment/README.md b/inputs/employment/README.md index 6a88bc3f..ecf14027 100644 --- a/inputs/employment/README.md +++ b/inputs/employment/README.md @@ -5,17 +5,17 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Technology | Source | |-------------------------|---------------------------------------------------------------------| -| Biopower | JEDI Biopower Model (B12.23.16)[^1] | -| Battery | WIRED {cite}`ramasamyUSSolarPhotovoltaic2022` | -| Coal-IGCC | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | -| Coal-PC | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | -| Coal-CCS RT | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | -| Coal-CCS GF | WIRED {cite}`schmitt_et_al_2022`, {cite}`james_et_al_2023` and {cite}`EliminatingDerateCarbon`. | -| DPV | JEDI Photovoltaics Model (PV05.20.21)[^1] | +| Biopower | [JEDI Biofuels Model (B12.23.16)](nlr.gov/analysis/jedi/biofuels) | +| Battery | WIRED Battery Storage Model (BESS.2025.09.30) based on [Ramasamy et al. (2022)](https://research-hub.nlr.gov/en/publications/us-solar-photovoltaic-system-and-energy-storage-cost-benchmarks-w/). | +| Coal-IGCC | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | +| Coal-PC | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | +| Coal-CCS RT | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | +| Coal-CCS GF | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | +| DPV | [JEDI Photovoltaics Model (PV05.20.21)](https://www.nlr.gov/analysis/jedi/pv) | | Geothermal-Hydrothermal | WIRED {cite}`hansonGeothermalElectricityTechnology2013` | | Geothermal-EGS | WIRED {cite}`hansonGeothermalElectricityTechnology2013` | -| Hydropower | JEDI Conventional Hydro Model (CH12.23.16)[^1] | -| Land-based Wind | JEDI Onshore Wind Model (W2000)[^1] | +| Hydropower | [JEDI Conventional Hydro Model (CH12.23.16)](https://www.nlr.gov/analysis/jedi/conventional-hydro) | +| Land-based Wind | [JEDI Onshore Wind Model (W2000)](https://www.nlr.gov/analysis/jedi/wind) | | NG-CC | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | | NG-CC-CCS RT | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | | NG-CC-CCS GF | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | @@ -25,7 +25,7 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Offshore Wind | {cite}`hammondWindfarmOperationsMaintenance2022` and {cite}`nunemakerORBITOffshoreRenewables2020` | | Transmission-500kW AC | WIRED Transmission Line Model (TL.12.23.16) based on JEDI Transmission Line Model[^1] | | Transmission-230kW AC | WIRED Transmission Line Model (TL.12.23.16) based on JEDI Transmission Line Model[^1] | -| UPV | JEDI Photovoltaics Model (PV05.20.21)[^1] | +| UPV | [JEDI Photovoltaics Model (PV05.20.21)](https://www.nlr.gov/analysis/jedi/pv) | - `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- Mayfield et al. (2023) {cite}`mayfieldLaborPathwaysAchieve2023`, Rutovitz et al. (2024) {cite}`rutovitzUpdatedEmploymentFactors2025` and Ram et al. (2020) {cite}`ramJobCreationGlobal2020`. @@ -39,4 +39,3 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i - Transmission lines: - Construction: [job-years/(2004$)] -[^1] NLR. Jobs and economic development impact models, 2025. https://www.nlr.gov/analysis/jedi/ From 16446e33abd661d5bafc7ebb07bea9fcf2c4966e Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 7 Jul 2026 20:26:34 -0600 Subject: [PATCH 62/71] Update README.md --- inputs/employment/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/inputs/employment/README.md b/inputs/employment/README.md index ecf14027..a337a934 100644 --- a/inputs/employment/README.md +++ b/inputs/employment/README.md @@ -16,10 +16,10 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Geothermal-EGS | WIRED {cite}`hansonGeothermalElectricityTechnology2013` | | Hydropower | [JEDI Conventional Hydro Model (CH12.23.16)](https://www.nlr.gov/analysis/jedi/conventional-hydro) | | Land-based Wind | [JEDI Onshore Wind Model (W2000)](https://www.nlr.gov/analysis/jedi/wind) | -| NG-CC | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | -| NG-CC-CCS RT | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | -| NG-CC-CCS GF | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | -| NG-CT | WIRED {cite}`schmitt_et_al_2022`, {cite}`oakesCostPerformanceBaseline2023` and {cite}`schmittCostPerformanceRetrofitting2023` | +| NG-CC | WIRED Natural Gas Model (NG.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Oakes et al. (2023)](https://www.osti.gov/biblio/1973266), and [Schmitt and Homsy (2023)](https://www.netl.doe.gov/projects/files/CostandPerformanceofRetrofittingNGCCUnitsforCarbonCaptureRevision3_031723.pdf) | +| NG-CC-CCS RT | WIRED Natural Gas Model (NG.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Oakes et al. (2023)](https://www.osti.gov/biblio/1973266), and [Schmitt and Homsy (2023)](https://www.netl.doe.gov/projects/files/CostandPerformanceofRetrofittingNGCCUnitsforCarbonCaptureRevision3_031723.pdf)| +| NG-CC-CCS GF | WIRED Natural Gas Model (NG.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Oakes et al. (2023)](https://www.osti.gov/biblio/1973266), and [Schmitt and Homsy (2023)](https://www.netl.doe.gov/projects/files/CostandPerformanceofRetrofittingNGCCUnitsforCarbonCaptureRevision3_031723.pdf)| +| NG-CT | WIRED Natural Gas Model (NG.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Oakes et al. (2023)](https://www.osti.gov/biblio/1973266), and [Schmitt and Homsy (2023)](https://www.netl.doe.gov/projects/files/CostandPerformanceofRetrofittingNGCCUnitsforCarbonCaptureRevision3_031723.pdf)| | Nuclear Conventional | {cite}`abou-jaoudeLiteratureReviewAdvanced2023` | | Nuclear SMR | {cite}`asuegaTechnoeconomicAnalysisAdvanced2023` | | Offshore Wind | {cite}`hammondWindfarmOperationsMaintenance2022` and {cite}`nunemakerORBITOffshoreRenewables2020` | From 228809269f8b50804d7041e87005c515002a5273 Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 7 Jul 2026 22:24:59 -0600 Subject: [PATCH 63/71] Update README.md --- inputs/employment/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/inputs/employment/README.md b/inputs/employment/README.md index a337a934..3c0dbf0c 100644 --- a/inputs/employment/README.md +++ b/inputs/employment/README.md @@ -12,24 +12,24 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Coal-CCS RT | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | | Coal-CCS GF | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | | DPV | [JEDI Photovoltaics Model (PV05.20.21)](https://www.nlr.gov/analysis/jedi/pv) | -| Geothermal-Hydrothermal | WIRED {cite}`hansonGeothermalElectricityTechnology2013` | -| Geothermal-EGS | WIRED {cite}`hansonGeothermalElectricityTechnology2013` | +| Geothermal-Hydrothermal | WIRED Geothermal Model (CPG.2025.09.30) based on [NLR's SAM-GETEM](https://sam.nlr.gov/geothermal.html) | +| Geothermal-EGS | WIRED Geothermal Model (CPG.2025.09.30) based on [NLR's SAM-GETEM](https://sam.nlr.gov/geothermal.html) | | Hydropower | [JEDI Conventional Hydro Model (CH12.23.16)](https://www.nlr.gov/analysis/jedi/conventional-hydro) | | Land-based Wind | [JEDI Onshore Wind Model (W2000)](https://www.nlr.gov/analysis/jedi/wind) | | NG-CC | WIRED Natural Gas Model (NG.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Oakes et al. (2023)](https://www.osti.gov/biblio/1973266), and [Schmitt and Homsy (2023)](https://www.netl.doe.gov/projects/files/CostandPerformanceofRetrofittingNGCCUnitsforCarbonCaptureRevision3_031723.pdf) | | NG-CC-CCS RT | WIRED Natural Gas Model (NG.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Oakes et al. (2023)](https://www.osti.gov/biblio/1973266), and [Schmitt and Homsy (2023)](https://www.netl.doe.gov/projects/files/CostandPerformanceofRetrofittingNGCCUnitsforCarbonCaptureRevision3_031723.pdf)| | NG-CC-CCS GF | WIRED Natural Gas Model (NG.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Oakes et al. (2023)](https://www.osti.gov/biblio/1973266), and [Schmitt and Homsy (2023)](https://www.netl.doe.gov/projects/files/CostandPerformanceofRetrofittingNGCCUnitsforCarbonCaptureRevision3_031723.pdf)| | NG-CT | WIRED Natural Gas Model (NG.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Oakes et al. (2023)](https://www.osti.gov/biblio/1973266), and [Schmitt and Homsy (2023)](https://www.netl.doe.gov/projects/files/CostandPerformanceofRetrofittingNGCCUnitsforCarbonCaptureRevision3_031723.pdf)| -| Nuclear Conventional | {cite}`abou-jaoudeLiteratureReviewAdvanced2023` | -| Nuclear SMR | {cite}`asuegaTechnoeconomicAnalysisAdvanced2023` | -| Offshore Wind | {cite}`hammondWindfarmOperationsMaintenance2022` and {cite}`nunemakerORBITOffshoreRenewables2020` | -| Transmission-500kW AC | WIRED Transmission Line Model (TL.12.23.16) based on JEDI Transmission Line Model[^1] | -| Transmission-230kW AC | WIRED Transmission Line Model (TL.12.23.16) based on JEDI Transmission Line Model[^1] | +| Nuclear Conventional | [Abou-Jaoude et al. (2023)](https://gain.inl.gov/content/uploads/4/2024/11/INL-RPT-23-72972-Literature-Review-of-Adv-Reactor-Cost-Estimates.pdf) | +| Nuclear SMR | [Asuega et al. (2023)](https://www.sciencedirect.com/science/article/pii/S0306261923000338) | +| Offshore Wind | [Hammond and Cooperman (2022](https://www.osti.gov/servlets/purl/1894867/) and [Nunemaker et al. (2020)](https://www.osti.gov/servlets/purl/1660132/) | +| Transmission-500kW AC | WIRED Transmission Line Model (TL.12.23.16) based on [JEDI Transmission Line Model](https://www.nlr.gov/analysis/jedi/transmission-line) | +| Transmission-230kW AC | WIRED Transmission Line Model (TL.12.23.16) based on [JEDI Transmission Line Model](https://www.nlr.gov/analysis/jedi/transmission-line) | | UPV | [JEDI Photovoltaics Model (PV05.20.21)](https://www.nlr.gov/analysis/jedi/pv) | -- `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- Mayfield et al. (2023) {cite}`mayfieldLaborPathwaysAchieve2023`, Rutovitz et al. (2024) {cite}`rutovitzUpdatedEmploymentFactors2025` and Ram et al. (2020) {cite}`ramJobCreationGlobal2020`. +- `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- [Mayfield et al. (2023)](10.1016/j.enpol.2023.113516), [Rutovitz et al. (2024)](10.1016/j.rser.2025.115339), and [Ram et al. (2020)](10.1016/j.techfore.2019.06.008). -- `employment_factor_inter_transmission.csv`: Employment factor data for transmission line construction, taken from the four data source mentioned above (JEDI/WIRED models), Mayfield et al. (2023), Rutovitz et al. (2024) and Ram et al. (2020). +- `employment_factor_inter_transmission.csv`: Employment factor data for transmission line construction, taken from the four data source mentioned above - [JEDI/WIRED models](https://www.nlr.gov/analysis/jedi/transmission-line), [Mayfield et al. (2023)](10.1016/j.enpol.2023.113516), [Rutovitz et al. (2024)](10.1016/j.rser.2025.115339) and [Ram et al. (2020)](10.1016/j.techfore.2019.06.008). ## Employment factor unit - Power plants: From 12e89b4722e64a0858291e4fa414e91e000b82fa Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 7 Jul 2026 22:27:55 -0600 Subject: [PATCH 64/71] fix citation links --- inputs/employment/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inputs/employment/README.md b/inputs/employment/README.md index 3c0dbf0c..8dd20d50 100644 --- a/inputs/employment/README.md +++ b/inputs/employment/README.md @@ -5,7 +5,7 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Technology | Source | |-------------------------|---------------------------------------------------------------------| -| Biopower | [JEDI Biofuels Model (B12.23.16)](nlr.gov/analysis/jedi/biofuels) | +| Biopower | [JEDI Biofuels Model (B12.23.16)](https://nlr.gov/analysis/jedi/biofuels) | | Battery | WIRED Battery Storage Model (BESS.2025.09.30) based on [Ramasamy et al. (2022)](https://research-hub.nlr.gov/en/publications/us-solar-photovoltaic-system-and-energy-storage-cost-benchmarks-w/). | | Coal-IGCC | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | | Coal-PC | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | @@ -27,9 +27,9 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Transmission-230kW AC | WIRED Transmission Line Model (TL.12.23.16) based on [JEDI Transmission Line Model](https://www.nlr.gov/analysis/jedi/transmission-line) | | UPV | [JEDI Photovoltaics Model (PV05.20.21)](https://www.nlr.gov/analysis/jedi/pv) | -- `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- [Mayfield et al. (2023)](10.1016/j.enpol.2023.113516), [Rutovitz et al. (2024)](10.1016/j.rser.2025.115339), and [Ram et al. (2020)](10.1016/j.techfore.2019.06.008). +- `employment_factor_plant_mayfield.csv`, `employment_factor_plant_rutovitz.csv`, and `employment_factor_plant_ram.csv`: Employment factor data for power plants of different technologies, taken from literature -- [Mayfield et al. (2023)](https://10.1016/j.enpol.2023.113516), [Rutovitz et al. (2024)](https://10.1016/j.rser.2025.115339), and [Ram et al. (2020)](https://10.1016/j.techfore.2019.06.008). -- `employment_factor_inter_transmission.csv`: Employment factor data for transmission line construction, taken from the four data source mentioned above - [JEDI/WIRED models](https://www.nlr.gov/analysis/jedi/transmission-line), [Mayfield et al. (2023)](10.1016/j.enpol.2023.113516), [Rutovitz et al. (2024)](10.1016/j.rser.2025.115339) and [Ram et al. (2020)](10.1016/j.techfore.2019.06.008). +- `employment_factor_inter_transmission.csv`: Employment factor data for transmission line construction, taken from the four data source mentioned above - [JEDI/WIRED models](https://www.nlr.gov/analysis/jedi/transmission-line), [Mayfield et al. (2023)](https://10.1016/j.enpol.2023.113516), [Rutovitz et al. (2024)](https://10.1016/j.rser.2025.115339) and [Ram et al. (2020)](https://10.1016/j.techfore.2019.06.008). ## Employment factor unit - Power plants: From 4ebc6935127c191d37b6b7c89b260df38955a15d Mon Sep 17 00:00:00 2001 From: An Pham Date: Tue, 7 Jul 2026 22:34:01 -0600 Subject: [PATCH 65/71] fix citation links --- inputs/employment/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inputs/employment/README.md b/inputs/employment/README.md index 8dd20d50..fa2d63b9 100644 --- a/inputs/employment/README.md +++ b/inputs/employment/README.md @@ -5,8 +5,8 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | Technology | Source | |-------------------------|---------------------------------------------------------------------| -| Biopower | [JEDI Biofuels Model (B12.23.16)](https://nlr.gov/analysis/jedi/biofuels) | -| Battery | WIRED Battery Storage Model (BESS.2025.09.30) based on [Ramasamy et al. (2022)](https://research-hub.nlr.gov/en/publications/us-solar-photovoltaic-system-and-energy-storage-cost-benchmarks-w/). | +| Biopower | [JEDI Biofuels Model (B12.23.16)](https://www.nlr.gov/analysis/jedi/biofuels) | +| Battery | WIRED Battery Storage Model (BESS.2025.09.30) based on [Ramasamy et al. (2022)](https://docs.nlr.gov/docs/fy22osti/83586.pdf). | | Coal-IGCC | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | | Coal-PC | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | | Coal-CCS RT | WIRED Coal Model (COAL.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Turner et al. (2023)](https://www.osti.gov/servlets/purl/1968040/), and [Buchheit et al. (2023)](https://www.osti.gov/biblio/1968037) . | @@ -22,7 +22,7 @@ Sources for employment data of individual technologies in JEDI/WIRED are shown i | NG-CT | WIRED Natural Gas Model (NG.2025.09.30) based on NETL's studies - [Schmitt et al. (2022)](https://www.osti.gov/servlets/purl/1893822/), [Oakes et al. (2023)](https://www.osti.gov/biblio/1973266), and [Schmitt and Homsy (2023)](https://www.netl.doe.gov/projects/files/CostandPerformanceofRetrofittingNGCCUnitsforCarbonCaptureRevision3_031723.pdf)| | Nuclear Conventional | [Abou-Jaoude et al. (2023)](https://gain.inl.gov/content/uploads/4/2024/11/INL-RPT-23-72972-Literature-Review-of-Adv-Reactor-Cost-Estimates.pdf) | | Nuclear SMR | [Asuega et al. (2023)](https://www.sciencedirect.com/science/article/pii/S0306261923000338) | -| Offshore Wind | [Hammond and Cooperman (2022](https://www.osti.gov/servlets/purl/1894867/) and [Nunemaker et al. (2020)](https://www.osti.gov/servlets/purl/1660132/) | +| Offshore Wind | [Hammond and Cooperman (2022)](https://www.osti.gov/servlets/purl/1894867/) and [Nunemaker et al. (2020)](https://www.osti.gov/servlets/purl/1660132/) | | Transmission-500kW AC | WIRED Transmission Line Model (TL.12.23.16) based on [JEDI Transmission Line Model](https://www.nlr.gov/analysis/jedi/transmission-line) | | Transmission-230kW AC | WIRED Transmission Line Model (TL.12.23.16) based on [JEDI Transmission Line Model](https://www.nlr.gov/analysis/jedi/transmission-line) | | UPV | [JEDI Photovoltaics Model (PV05.20.21)](https://www.nlr.gov/analysis/jedi/pv) | From 376989c72b08b2c1b439e8a917cda283fbda6b5f Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 9 Jul 2026 15:04:35 -0600 Subject: [PATCH 66/71] update transmission FOM employment Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/setup/d_mga.gms | 54 +++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index 7ae51bcc..7f9547d0 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -123,30 +123,36 @@ eq_MGA_Objective$Sw_MGA.. * annual term used in report.gms * Transmission line construction employment - + sum{(r,rr,tscbin,t) - $[tmodel(t) - $routes_inv(r,rr,"AC",t) - $tsc_binwidth(r,rr,tscbin)], - trans_cost_cap_fin_mult(t) -* [$] * [.] * [job-years/$] = [job-years] - * ((TRAN_CAPEX_BINS(r,rr,tscbin,t)) - * pvf_capital(t) -* TRAN_CAPEX_BINS is only defined for r < rr so is not divided by 2 - * employment_factor_inter_transmission("construction"))} - - + sum{trtype - $[routes_inv(r,rr,trtype,t) - $(not aclike(trtype))], - trans_cost_cap_fin_mult(t) -* [$/MW] * [MW] * [job-years/$] = [job-years] - * transmission_cost_nonac(r,rr,trtype) - * INVTRAN(r,rr,trtype,t) -* INVTRAN is defined in both directions so needs to be divided by 2 - * employment_factor_inter_transmission("construction") / 2 } - -* Transmission line FO&M employment is assumed to be -* transmission line construction x trans_fom_frac - * (1 + trans_fom_frac) + + pvf_capital(t) + * trans_cost_cap_fin_mult(t) + * employment_factor_inter_transmission("construction") + * ( +* AC: TRAN_CAPEX_BINS is only defined for r < rr so is not divided by 2 + sum{(r,rr,tscbin,t) + $[tmodel(t) + $routes_inv(r,rr,"AC",t) + $tsc_binwidth(r,rr,tscbin)], +* [job-years/$] * [$] = [job-years] + TRAN_CAPEX_BINS(r,rr,tscbin,t) + } +* DC: INVTRAN is defined in both directions so needs to be divided by 2 + + sum{trtype + $[routes_inv(r,rr,trtype,t) + $(not aclike(trtype))], +* [job-years/$] * [$/MW] * [MW] = [job-years] + transmission_cost_nonac(r,rr,trtype) + * INVTRAN(r,rr,trtype,t) / 2 + } + ) +* Transmission fixed O&M is assumed to have the same employment factor [job-years/$] +* as transmission construction + + pvf_onm(t) + * employment_factor_inter_transmission("construction") +* AC and DC together; divide by 2 since defined in both directions + * sum{(r,rr,trtype)$routes(r,rr,trtype,t), +* [years] * [job-years/$] * [$/MW-year] * [MW] = [job-years] + transmission_line_fom(r,rr,trtype) * CAPTRAN_ENERGY(r,rr,trtype,t) / 2 + } ; From 65ef0d0fb000ccbfd608b639a2ca6db00978b7fb Mon Sep 17 00:00:00 2001 From: An Pham Date: Thu, 9 Jul 2026 15:10:52 -0600 Subject: [PATCH 67/71] Update reeds/core/terminus/report.gms Co-authored-by: Patrick Brown <25125211+patrickbrown4@users.noreply.github.com> --- reeds/core/terminus/report.gms | 58 +++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 66e28ad7..6494e50e 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -2090,33 +2090,41 @@ employment_generator(i,"construction",r,t) = sum{v, INV.l(i,v,r,t)$valinv(i,v,r, * Employment from transmission (job-years) * Transmission construction job-years -parameter employment_transmission_construction(r,rr,t) "Transmission construction job-years by line and solveyear" ; -employment_transmission_construction(r,rr,t) = -* AC lines -(sum{tscbin - $[routes_inv(r,rr,"AC",t) - $tsc_binwidth(r,rr,tscbin)], - trans_cost_cap_fin_mult(t) - * ((TRAN_CAPEX_BINS.l(r,rr,tscbin,t) - sum{tt$tprev(t,tt), TRAN_CAPEX_BINS.l(r,rr,tscbin,tt)}) - * employment_factor_inter_transmission("construction")) } -* non AC lines -+ sum{trtype - $[routes_inv(r,rr,trtype,t) - $(not aclike(trtype))], - trans_cost_cap_fin_mult(t) - * transmission_cost_nonac(r,rr,trtype) - * INVTRAN.l(r,rr,trtype,t) - * employment_factor_inter_transmission("construction") / 2 }) -* Transmission fom employment = transmission line construction x trans_fom_frac - * (1 + trans_fom_frac) -; - -* Transmission construction job-years by region and solveyear -employment_transmission("construction",r,t) = sum{rr,(employment_transmission_construction(r,rr,t)) / 2} ; +parameter employment_transmission_interface(jtype,r,rr,t) "Transmission job-years by interface" ; +employment_transmission_interface("construction",r,rr,t) = + employment_factor_inter_transmission("construction") + * trans_cost_cap_fin_mult(t) + * ( +* AC: TRAN_CAPEX_BINS is only defined for r < rr so is not divided by 2 + sum{tscbin + $[routes_inv(r,rr,"AC",t) + $tsc_binwidth(r,rr,tscbin)], + TRAN_CAPEX_BINS.l(r,rr,tscbin,t) - sum{tt$tprev(t,tt), TRAN_CAPEX_BINS.l(r,rr,tscbin,tt)} + } +* DC: INVTRAN is defined in both directions so needs to be divided by 2 + + sum{trtype + $[routes_inv(r,rr,trtype,t) + $(not aclike(trtype))], + * transmission_cost_nonac(r,rr,trtype) + * INVTRAN.l(r,rr,trtype,t) / 2 + } + ) +; +* AC and DC together; divide by 2 since defined in both directions +employment_transmission_interface("fom",r,rr,t) = + employment_factor_inter_transmission("construction") + * sum{(r,rr,trtype)$routes(r,rr,trtype,t), + transmission_line_fom(r,rr,trtype) * CAPTRAN_ENERGY(r,rr,trtype,t) / 2 + } +; +* Assign to regions evenly across each interface +employment_transmission(jtype,r,t) = sum{rr, employment_transmission_interface(jtype,r,rr,t) / 2 } ; * Total employment (generator + transmission) by region and solveyear -employment_tot(r,t) = sum{(i,jtype), employment_generator(i,jtype,r,t) } - + sum{jtype, employment_transmission(jtype,r,t) } ; +employment_tot(r,t) = + sum{(i,jtype), employment_generator(i,jtype,r,t) } + + sum{jtype, employment_transmission(jtype,r,t) } +; *======================================== * Calculate powfrac From ecf5b233ed7d500978a60a2776e0e1232b6706c7 Mon Sep 17 00:00:00 2001 From: An Pham Date: Fri, 10 Jul 2026 10:22:27 -0600 Subject: [PATCH 68/71] clean up --- reeds/core/setup/d_mga.gms | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reeds/core/setup/d_mga.gms b/reeds/core/setup/d_mga.gms index 7f9547d0..5f6e9bb9 100644 --- a/reeds/core/setup/d_mga.gms +++ b/reeds/core/setup/d_mga.gms @@ -137,7 +137,8 @@ eq_MGA_Objective$Sw_MGA.. } * DC: INVTRAN is defined in both directions so needs to be divided by 2 + sum{trtype - $[routes_inv(r,rr,trtype,t) + $[tmodel(t) + $routes_inv(r,rr,trtype,t) $(not aclike(trtype))], * [job-years/$] * [$/MW] * [MW] = [job-years] transmission_cost_nonac(r,rr,trtype) @@ -149,7 +150,7 @@ eq_MGA_Objective$Sw_MGA.. + pvf_onm(t) * employment_factor_inter_transmission("construction") * AC and DC together; divide by 2 since defined in both directions - * sum{(r,rr,trtype)$routes(r,rr,trtype,t), + * sum{(r,rr,trtype)$[tmodel(t)$routes(r,rr,trtype,t)], * [years] * [job-years/$] * [$/MW-year] * [MW] = [job-years] transmission_line_fom(r,rr,trtype) * CAPTRAN_ENERGY(r,rr,trtype,t) / 2 } From 62174c2f70ec8e60bab63055daeb5e6fb6bd316d Mon Sep 17 00:00:00 2001 From: An Pham Date: Fri, 10 Jul 2026 12:33:54 -0600 Subject: [PATCH 69/71] Update report.gms --- reeds/core/terminus/report.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 6494e50e..791eac10 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -2105,7 +2105,7 @@ employment_transmission_interface("construction",r,rr,t) = + sum{trtype $[routes_inv(r,rr,trtype,t) $(not aclike(trtype))], - * transmission_cost_nonac(r,rr,trtype) + transmission_cost_nonac(r,rr,trtype) * INVTRAN.l(r,rr,trtype,t) / 2 } ) From 5b10793c4f8597035ebb14a62757c162d68b9234 Mon Sep 17 00:00:00 2001 From: An Pham Date: Fri, 10 Jul 2026 13:18:57 -0600 Subject: [PATCH 70/71] Update report.gms --- reeds/core/terminus/report.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 791eac10..42bfc998 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -2113,7 +2113,7 @@ employment_transmission_interface("construction",r,rr,t) = * AC and DC together; divide by 2 since defined in both directions employment_transmission_interface("fom",r,rr,t) = employment_factor_inter_transmission("construction") - * sum{(r,rr,trtype)$routes(r,rr,trtype,t), + * sum{trtype$routes(r,rr,trtype,t), transmission_line_fom(r,rr,trtype) * CAPTRAN_ENERGY(r,rr,trtype,t) / 2 } ; From 3b78b93a6f24c802ae523c1abd3ae12c0f5f69d0 Mon Sep 17 00:00:00 2001 From: An Pham Date: Fri, 10 Jul 2026 14:17:59 -0600 Subject: [PATCH 71/71] fix minor issues --- reeds/core/terminus/report.gms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reeds/core/terminus/report.gms b/reeds/core/terminus/report.gms index 42bfc998..f0ab9342 100644 --- a/reeds/core/terminus/report.gms +++ b/reeds/core/terminus/report.gms @@ -2114,7 +2114,7 @@ employment_transmission_interface("construction",r,rr,t) = employment_transmission_interface("fom",r,rr,t) = employment_factor_inter_transmission("construction") * sum{trtype$routes(r,rr,trtype,t), - transmission_line_fom(r,rr,trtype) * CAPTRAN_ENERGY(r,rr,trtype,t) / 2 + transmission_line_fom(r,rr,trtype) * CAPTRAN_ENERGY.l(r,rr,trtype,t) / 2 } ; * Assign to regions evenly across each interface