diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e4ff8b392..ef375455f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 piecewise-linear approximation of heat rate curves. Adds a CO2 module that determines the CO2 emissions based on fuel consumption, CO2 capture fraction, and whether the feedstock is biomass. +- Enable thermal power plants to burn multiple fuels (#586) - Feature electrolysis basic (#525) Adds hydrogen electrolyzer model which enables the addition of hydrogen electrolyzer demands along with optional clean supply constraints. @@ -81,7 +82,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The matrix-style input of the grid for Network.csv is deprecated in favor a column-style input. Instead of columns z1, z2, ... with entries -1, 0, 1, use two columns: Start_Zone, End_Zone (#591). - ## [0.3.6] - 2023-08-01 ### Fixed diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/CO2_cap.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/CO2_cap.csv new file mode 100644 index 0000000000..1b5869ce2e --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/CO2_cap.csv @@ -0,0 +1,2 @@ +,Network_zones,CO_2_Cap_Zone_1,CO_2_Max_tons_MWh_1,CO_2_Max_Mtons_1 +NE,z1,1,0.05,0.018 diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Capacity_reserve_margin.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Capacity_reserve_margin.csv new file mode 100644 index 0000000000..1cda938c80 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Capacity_reserve_margin.csv @@ -0,0 +1,2 @@ +,Network_zones,CapRes_1 +NE,z1,0.156 diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Demand_data.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Demand_data.csv new file mode 100644 index 0000000000..25a46794b6 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Demand_data.csv @@ -0,0 +1,25 @@ +Voll,Demand_Segment,Cost_of_Demand_Curtailment_per_MW,Max_Demand_Curtailment,Rep_Periods,Timesteps_per_Rep_Period,Sub_Weights,Time_Index,Demand_MW_z1 +50000,1,1,1,1,24,8760,1,11162 +,,,,,,,2,10556 +,,,,,,,3,10105 +,,,,,,,4,9878 +,,,,,,,5,9843 +,,,,,,,6,10017 +,,,,,,,7,10390 +,,,,,,,8,10727 +,,,,,,,9,11298 +,,,,,,,10,11859 +,,,,,,,11,12196 +,,,,,,,12,12321 +,,,,,,,13,12381 +,,,,,,,14,12270 +,,,,,,,15,12149 +,,,,,,,16,12219 +,,,,,,,17,13410 +,,,,,,,18,14539 +,,,,,,,19,14454 +,,,,,,,20,14012 +,,,,,,,21,13494 +,,,,,,,22,12772 +,,,,,,,23,11877 +,,,,,,,24,10874 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Energy_share_requirement.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Energy_share_requirement.csv new file mode 100644 index 0000000000..50c97b4b39 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Energy_share_requirement.csv @@ -0,0 +1,2 @@ +,Network_zones,ESR_1,ESR_2 +NE,z1,0.259,0.348 diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Fuels_data.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Fuels_data.csv new file mode 100644 index 0000000000..19d083b398 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Fuels_data.csv @@ -0,0 +1,26 @@ +Time_Index,NG,None,H2 +0,0.05306,0,0 +1,5.28,0,5 +2,5.28,0,5 +3,5.28,0,5 +4,5.28,0,5 +5,5.28,0,5 +6,5.28,0,5 +7,5.28,0,5 +8,5.28,0,5 +9,5.28,0,5 +10,5.28,0,5 +11,5.28,0,5 +12,5.28,0,5 +13,5.28,0,5 +14,5.28,0,5 +15,5.28,0,5 +16,5.28,0,5 +17,5.28,0,5 +18,5.28,0,5 +19,5.28,0,5 +20,5.28,0,5 +21,5.28,0,5 +22,5.28,0,5 +23,5.28,0,5 +24,5.28,0,5 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Generators_variability.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Generators_variability.csv new file mode 100644 index 0000000000..4e5561db1e --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Generators_variability.csv @@ -0,0 +1,25 @@ +Time_Index,natural_gas_combined_cycle,solar_pv,onshore_wind,battery +1,1,0,0.889717042,1 +2,1,0,0.877715468,1 +3,1,0,0.903424203,1 +4,1,0,0.895153165,1 +5,1,0,0.757258117,1 +6,1,0,0.630928695,1 +7,1,0,0.557177782,1 +8,1,0,0.6072492,1 +9,1,0.1779,0.423417866,1 +10,1,0.429,0.007470775,1 +11,1,0.5748,0.002535942,1 +12,1,0.6484,0.002153709,1 +13,1,0.6208,0.00445132,1 +14,1,0.596,0.007711587,1 +15,1,0.5013,0.100848213,1 +16,1,0.3311,0.201802149,1 +17,1,0.0642,0.141933054,1 +18,1,0,0.567022562,1 +19,1,0,0.946024895,1 +20,1,0,0.923394203,1 +21,1,0,0.953386247,1 +22,1,0,0.929205418,1 +23,1,0,0.849528909,1 +24,1,0,0.665570974,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Maximum_capacity_requirement.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Maximum_capacity_requirement.csv new file mode 100644 index 0000000000..ddf55ebace --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Maximum_capacity_requirement.csv @@ -0,0 +1,4 @@ +MaxCapReqConstraint,ConstraintDescription,Max_MW +1,PV,50000 +2,Wind,100000 +3,Batteries,60000 diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Minimum_capacity_requirement.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Minimum_capacity_requirement.csv new file mode 100644 index 0000000000..8593a5abcc --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Minimum_capacity_requirement.csv @@ -0,0 +1,4 @@ +MinCapReqConstraint,ConstraintDescription,Min_MW +1,PV,5000 +2,Wind,10000 +3,Batteries,6000 diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/README.md b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/README.md new file mode 100644 index 0000000000..7b35c38cf1 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/README.md @@ -0,0 +1,15 @@ +# Small New England: One Zone with resources that can use multiple fuels + +**SmallNewEngland** is set of a simplified versions of the more detailed example system RealSystemExample. It is condensed for easy comprehension and quick testing of different components of the GenX. **SmallNewEngland/OneZone_MultiFules** is one of our most basic models, a 24-hour example with hourly resolution containing only one zone representing New England. The model includes only natural gas (cofiring with H2), solar PV, wind, and lithium-ion battery storage with no initial capacity. + +To run the model, first navigate to the example directory at `GenX/Example_Systems/SmallNewEngland/OneZone_MultiFuels`: + +`cd("Example_Systems/SmallNewEngland/OneZone_MultiFuels")` + +Next, ensure that your settings in `GenX_settings.yml` are correct. The default settings use the solver HiGHS (`Solver: HiGHS`). Other optional policies include minimum capacity requirements, a capacity reserve margin, and more. + +Once the settings are confirmed, run the model with the `Run.jl` script in the example directory: + +`include("Run.jl")` + +Once the model has completed, results will write to the `Results` directory. diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Reserves.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Reserves.csv new file mode 100644 index 0000000000..b495df0dea --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Reserves.csv @@ -0,0 +1,2 @@ +Reg_Req_Percent_Demand,Reg_Req_Percent_VRE,Rsv_Req_Percent_Demand,Rsv_Req_Percent_VRE,Unmet_Rsv_Penalty_Dollar_per_MW,Dynamic_Contingency,Static_Contingency_MW +0.01,0.0032,0.033,0.0795,1000,0,0 diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_capacity_reserve_margin.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..95ac6b3a9d --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,5 @@ +Resource,Derating_Factor_1 +natural_gas_combined_cycle,0.93 +solar_pv,0.8 +onshore_wind,0.8 +battery,0.95 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_energy_share_requirement.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..c675731d0e --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,3 @@ +Resource,ESR_1,ESR_2 +solar_pv,1,1 +onshore_wind,1,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_maximum_capacity_requirement.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_maximum_capacity_requirement.csv new file mode 100644 index 0000000000..7c3a97fa91 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_maximum_capacity_requirement.csv @@ -0,0 +1,4 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +solar_pv,1,0,0 +onshore_wind,0,1,0 +battery,0,0,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_minimum_capacity_requirement.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..7c3a97fa91 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,4 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +solar_pv,1,0,0 +onshore_wind,0,1,0 +battery,0,0,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/storage.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/storage.csv new file mode 100644 index 0000000000..06ea25d673 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Min_Cap_MW,Min_Cap_MWh,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,region,cluster,existing_cap_mw,existing_cap_mwh +battery,1,1,1,0,0,19584,22494,4895,5622,0.15,0.15,0,0.92,0.92,1,10,NE,0,0,0 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/thermal.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/thermal.csv new file mode 100644 index 0000000000..a1ee48ecf3 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,MULTI_FUELS,New_Build,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,MGA,Resource_Type,region,cluster,Num_Fuels,Fuel1,Heat_Rate1_MMBTU_per_MWh,Fuel1_Min_Cofire_Level,Fuel1_Max_Cofire_Level,Fuel1_Min_Cofire_Level_Start,Fuel1_Max_Cofire_Level_Start,Fuel2,Heat_Rate2_MMBTU_per_MWh,Fuel2_Min_Cofire_Level,Fuel2_Max_Cofire_Level,Fuel2_Min_Cofire_Level_Start,Fuel2_Max_Cofire_Level_Start,Existing_cap_mw +natural_gas_combined_cycle,1,1,1,1,0,0,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0.25,0.5,1,natural_gas_fired_combined_cycle,NE,1,2,NG,7.43,0.5,1,0,1,H2,7.43,0.5,1,0.05,1,0 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/vre.csv b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/vre.csv new file mode 100644 index 0000000000..e89acf33d1 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Resources/vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,MGA,Resource_Type,region,cluster,existing_cap_mw +solar_pv,1,1,1,0,0,0,0,85300,18760,0,9.13,1,solar_photovoltaic,NE,1,0 +onshore_wind,1,1,1,0,0,0,0,97200,43205,0.1,9.12,1,onshore_wind_turbine,NE,1,0 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Run.jl b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Run.jl new file mode 100644 index 0000000000..b44ca23ec1 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Run.jl @@ -0,0 +1,3 @@ +using GenX + +run_genx_case!(dirname(@__FILE__)) diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/cplex_settings.yml b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/cplex_settings.yml new file mode 100644 index 0000000000..8d37873eef --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/cplex_settings.yml @@ -0,0 +1,10 @@ +# CPLEX Solver Parameters +Feasib_Tol: 1.0e-05 # Constraint (primal) feasibility tolerances. +Optimal_Tol: 1e-5 # Dual feasibility tolerances. +Pre_Solve: 1 # Controls presolve level. +TimeLimit: 110000 # Limits total time solver. +MIPGap: 1e-3 # Relative (p.u. of optimal) mixed integer optimality tolerance for MIP problems (ignored otherwise). +Method: 2 # Algorithm used to solve continuous models (including MIP root relaxation). +BarConvTol: 1.0e-08 # Barrier convergence tolerance (determines when barrier terminates). +NumericFocus: 0 # Numerical precision emphasis. +SolutionType: 2 # Solution type for LP or QP. diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/genx_settings.yml b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/genx_settings.yml new file mode 100644 index 0000000000..c4f7e8fbfc --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/genx_settings.yml @@ -0,0 +1,20 @@ +OverwriteResults: 0 # Overwrite existing results in output folder or create a new one; 0 = create new folder; 1 = overwrite existing results +PrintModel: 0 # Write the model formulation as an output; 0 = active; 1 = not active +NetworkExpansion: 0 # Transmission network expansionl; 0 = not active; 1 = active systemwide +Trans_Loss_Segments: 1 # Number of segments used in piecewise linear approximation of transmission losses; 1 = linear, >2 = piecewise quadratic +Reserves: 0 # Regulation (primary) and operating (secondary) reserves; 0 = not active, 1 = active systemwide +EnergyShareRequirement: 1 # Minimum qualifying renewables penetration; 0 = not active; 1 = active systemwide +CapacityReserveMargin: 1 # Number of capacity reserve margin constraints; 0 = not active; 1 = active systemwide +CO2Cap: 0 # CO2 emissions cap; 0 = not active (no CO2 emission limit); 1 = mass-based emission limit constraint; 2 = demand + rate-based emission limit constraint; 3 = generation + rate-based emission limit constraint +StorageLosses: 1 # Energy Share Requirement and CO2 constraints account for energy lost; 0 = not active (DO NOT account for energy lost); 1 = active systemwide (DO account for energy lost) +MinCapReq: 1 # Activate minimum technology carveout constraints; 0 = not active; 1 = active +MaxCapReq: 1 # Activate maximum technology carveout constraints; 0 = not active; 1 = active +ParameterScale: 1 # Turn on parameter scaling wherein load, capacity and power variables are defined in GW rather than MW. 0 = not active; 1 = active systemwide +WriteShadowPrices: 1 # Write shadow prices of LP or relaxed MILP; 0 = not active; 1 = active +UCommit: 2 # Unit committment of thermal power plants; 0 = not active; 1 = active using integer clestering; 2 = active using linearized clustering +TimeDomainReductionFolder: "TDR_Results" # Directory name where results from time domain reduction will be saved. If results already exist here, these will be used without running time domain reduction script again. +TimeDomainReduction: 0 # Time domain reduce (i.e. cluster) inputs based on Demand_data.csv, Generators_variability.csv, and Fuels_data.csv; 0 = not active (use input data as provided); 0 = active (cluster input data, or use data that has already been clustered) +ModelingToGenerateAlternatives: 0 # Modeling to generate alternatives; 0 = not active; 1 = active. Note: produces a single solution as output +ModelingtoGenerateAlternativeSlack: 0.1 # Slack value as a fraction of least-cost objective in budget constraint used for evaluating alternative model solutions; positive float value +ModelingToGenerateAlternativeIterations: 3 # Number of MGA iterations with maximization and minimization objective +MethodofMorris: 0 #Flag for turning on the Method of Morris analysis diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/gurobi_settings.yml b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/gurobi_settings.yml new file mode 100644 index 0000000000..0aa53a56d3 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/gurobi_settings.yml @@ -0,0 +1,15 @@ +# Gurobi Solver Parameters +# Common solver settings +Feasib_Tol: 1.0e-05 # Constraint (primal) feasibility tolerances. +Optimal_Tol: 1e-5 # Dual feasibility tolerances. +TimeLimit: 110000 # Limits total time solver. +Pre_Solve: 1 # Controls presolve level. +Method: 2 # Algorithm used to solve continuous models (including MIP root relaxation). + +#Gurobi-specific solver settings +MIPGap: 1e-3 # Relative (p.u. of optimal) mixed integer optimality tolerance for MIP problems (ignored otherwise). +BarConvTol: 1.0e-08 # Barrier convergence tolerance (determines when barrier terminates). +NumericFocus: 0 # Numerical precision emphasis. +Crossover: 0 # Barrier crossver strategy. +PreDual: 0 # Decides whether presolve should pass the primal or dual linear programming problem to the LP optimization algorithm. +AggFill: 10 # Allowed fill during presolve aggregation. diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/highs_settings.yml b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/highs_settings.yml new file mode 100644 index 0000000000..e244a0b4cf --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiFuels/Settings/highs_settings.yml @@ -0,0 +1,13 @@ +# HiGHS Solver Parameters +# Common solver settings +Feasib_Tol: 1.0e-05 # Primal feasibility tolerance # [type: double, advanced: false, range: [1e-10, inf], default: 1e-07] +Optimal_Tol: 1.0e-05 # Dual feasibility tolerance # [type: double, advanced: false, range: [1e-10, inf], default: 1e-07] +TimeLimit: 1.0e23 # Time limit # [type: double, advanced: false, range: [0, inf], default: inf] +Pre_Solve: choose # Presolve option: "off", "choose" or "on" # [type: string, advanced: false, default: "choose"] +Method: choose #HiGHS-specific solver settings # Solver option: "simplex", "choose" or "ipm" # [type: string, advanced: false, default: "choose"] + +#highs-specific solver settings + +# run the crossover routine for ipx +# [type: string, advanced: "on", range: {"off", "on"}, default: "off"] +run_crossover: "on" diff --git a/docs/src/data_documentation.md b/docs/src/data_documentation.md index 8a0fc33271..77b5ff5051 100644 --- a/docs/src/data_documentation.md +++ b/docs/src/data_documentation.md @@ -934,6 +934,32 @@ This file contains the time-series of capacity factors / availability of the win • Second column onwards: Resources are listed from the second column onward with headers matching each resource name in the `Vre_stor.csv` files in any order. The availability for each resource at each time step is defined as a fraction of installed capacity and should be between 0 and 1. Note that for this reason, resource names specified in all the resource `.csv` files must be unique. +#### 2.2.12 Settings-specific columns in the Generators\_data.csv to use multi fuels + +This file contains additional setting and performance parameters for specifically thermal resources that use multiple fuels. +These variables must be explicitly listed in the `Generators_data.csv`. + +###### Table 17: Settings-specific columns in the Generators\_data.csv file to use multi fuels +|**Column Name** | **Description**| +| :------------ | :-----------| +|**Technology type flags**| +|MULTI_FUELS | {0, 1}, Flag to indicate membership in set of thermal resources that can burn multiple fuels at the same time (e.g., natural gas combined cycle cofiring with hydrogen, coal power plant cofiring with natural gas.| +||MULTI_FUELS = 0: Not part of set (default) | +||MULTI_FUELS = 1: Resources that can use fuel blending. | +|**Technical performance parameters**| +|Num\_Fuels |Number of fuels that a multi-fuel generator (MULTI_FUELS = 1) can use at the same time. The length of ['Fuel1', 'Fuel2', ...] should be equal to 'Num\_Fuels'. Each fuel will requires its corresponding heat rate, min cofire level, and max cofire level. | +|Fuel1 |Frist fuel needed for a mulit-fuel generator (MULTI_FUELS = 1). The names should match with the ones in the `Fuels_data.csv`. | +|Fuel2 |Second fuel needed for a mulit-fuel generator (MULTI_FUELS = 1). The names should match with the ones in the `Fuels_data.csv`. | +|Heat1\_Rate\_MMBTU\_per\_MWh |Heat rate of a multi-fuel generator (MULTI_FUELS = 1) for Fuel1. | +|Heat2\_Rate\_MMBTU\_per\_MWh |Heat rate of a multi-fuel generator (MULTI_FUELS = 1) for Fuel2. | +|Fuel1\_Min\_Cofire\_Level |The minimum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | +|Fuel1\_Min\_Cofire_Level\_Start |The minimum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | +|Fuel1\_Max\_Cofire\_Level |The maximum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | +|Fuel1\_Max\_Cofire_Level\_Start |The maximum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | +|Fuel2\_Min\_Cofire\_Level |The minimum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | +|Fuel2\_Min\_Cofire_Level\_Start |The minimum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | +|Fuel2\_Max\_Cofire\_Level |The maximum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | +|Fuel2\_Max\_Cofire_Level\_Start |The maximum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | ## 3 Outputs diff --git a/src/load_inputs/load_resources_data.jl b/src/load_inputs/load_resources_data.jl index e8dd30229e..05b9bc94f9 100644 --- a/src/load_inputs/load_resources_data.jl +++ b/src/load_inputs/load_resources_data.jl @@ -946,6 +946,17 @@ function add_resources_to_input_data!(inputs::Dict, setup::Dict, case_path::Abst # For now, the only resources eligible for UC are themal resources inputs["COMMIT"] = inputs["THERM_COMMIT"] + # Set of CCS resources (optional set): + inputs["CCS"] = ids_with_positive(gen, co2_capture_fraction) + + # Single-fuel resources + inputs["SINGLE_FUEL"] = ids_with_singlefuel(gen) + # Multi-fuel resources + inputs["MULTI_FUELS"] = ids_with_multifuels(gen) + if !isempty(inputs["MULTI_FUELS"]) # If there are any resources using multi fuels, read relevant data + load_multi_fuels_data!(inputs, gen, setup, case_path) + end + buildable = is_buildable(gen) retirable = is_retirable(gen) @@ -1060,7 +1071,11 @@ function add_resources_to_input_data!(inputs::Dict, setup::Dict, case_path::Abst # Fuel inputs["HAS_FUEL"] = ids_with_fuel(gen) - + if !isempty(inputs["MULTI_FUELS"]) + inputs["HAS_FUEL"] = union(inputs["HAS_FUEL"], inputs["MULTI_FUELS"]) + sort!(inputs["HAS_FUEL"]) + end + inputs["RESOURCES"] = gen return nothing end @@ -1131,3 +1146,42 @@ function load_resources_data!(inputs::Dict, setup::Dict, case_path::AbstractStri return nothing end end + +@doc raw""" + load_multi_fuels_data!(inputs::Dict, setup::Dict, path::AbstractString) + +Function for reading input parameters related to multi fuels +""" +function load_multi_fuels_data!(inputs::Dict, gen::Vector{<:AbstractResource}, setup::Dict, path::AbstractString) + + inputs["NUM_FUELS"] = num_fuels.(gen) # Number of fuels that this resource can use + max_fuels = maximum(inputs["NUM_FUELS"]) + inputs["FUEL_COLS"] = [ Symbol(string("Fuel",f)) for f in 1:max_fuels ] + fuel_types = [fuel_cols.(gen, tag=f) for f in 1:max_fuels] + heat_rates = [heat_rate_cols.(gen, tag=f) for f in 1:max_fuels] + max_cofire = [max_cofire_cols.(gen, tag=f) for f in 1:max_fuels] + min_cofire = [min_cofire_cols.(gen, tag=f) for f in 1:max_fuels] + max_cofire_start = [max_cofire_start_cols.(gen, tag=f) for f in 1:max_fuels] + min_cofire_start = [min_cofire_start_cols.(gen, tag=f) for f in 1:max_fuels] + inputs["HEAT_RATES"] = heat_rates + inputs["MAX_COFIRE"] = max_cofire + inputs["MIN_COFIRE"] = min_cofire + inputs["MAX_COFIRE_START"] = max_cofire_start + inputs["MIN_COFIRE_START"] = min_cofire_start + inputs["FUEL_TYPES"] = fuel_types + inputs["MAX_NUM_FUELS"] = max_fuels + inputs["MAX_NUM_FUELS"] = max_fuels + + # check whether non-zero heat rates are used for resources that only use a single fuel + for f in 1:max_fuels + for hr in heat_rates[f][inputs["SINGLE_FUEL"]] + if hr > 0 + error("Heat rates for multi fuels must be zero when only one fuel is used") + end + end + end + # do not allow the multi-fuel option when piece-wise heat rates are used + if haskey(inputs, "THERM_COMMIT_PWFU") && !isempty(inputs["THERM_COMMIT_PWFU"]) + error("Multi-fuel option is not available when piece-wise heat rates are used. Please remove multi fuels to avoid this error.") + end +end \ No newline at end of file diff --git a/src/model/core/co2.jl b/src/model/core/co2.jl index a037a83568..0b4f861bba 100644 --- a/src/model/core/co2.jl +++ b/src/model/core/co2.jl @@ -58,38 +58,63 @@ function co2!(EP::Model, inputs::Dict) G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones + MULTI_FUELS = inputs["MULTI_FUELS"] + SINGLE_FUEL = inputs["SINGLE_FUEL"] + CCS = inputs["CCS"] + fuel_CO2 = inputs["fuel_CO2"] # CO2 content of fuel (t CO2/MMBTU or ktCO2/Billion BTU) + omega = inputs["omega"] + if !isempty(MULTI_FUELS) + max_fuels = inputs["MAX_NUM_FUELS"] + end ### Expressions ### - # CO2 emissions from power plants in "Thermal.csv" - # If all the CO2 capture fractions from Thermal.csv are zeros, the CO2 emissions from thermal generators are determined by fuel consumption times CO2 content per MMBTU - if all(co2_capture_fraction.(gen) .==0) + # CO2 emissions from power plants in "Generators_data.csv" + # If all the CO2 capture fractions from Generators_data are zeros, the CO2 emissions from thermal generators are determined by fuel consumption times CO2 content per MMBTU + + if isempty(CCS) @expression(EP, eEmissionsByPlant[y=1:G, t=1:T], - ((1-biomass(gen[y])) *(EP[:vFuel][y, t] + EP[:eStartFuel][y, t]) * fuel_CO2[fuel(gen[y])])) + if y in SINGLE_FUEL + ((1-biomass(gen[y])) *(EP[:vFuel][y, t] + EP[:vStartFuel][y, t]) * fuel_CO2[fuel(gen[y])]) + else + sum(((1-biomass(gen[y])) *(EP[:vMulFuels][y, i, t] + EP[:vMulStartFuels][y, i, t]) * fuel_CO2[fuel_cols(gen[y], tag=i)]) for i = 1:max_fuels) + end) else @info "Using the CO2 module to determine the CO2 emissions of CCS-equipped plants" # CO2_Capture_Fraction refers to the CO2 capture rate of CCS equiped power plants at a steady state # CO2_Capture_Fraction_Startup refers to the CO2 capture rate of CCS equiped power plants during startup events + @expression(EP, eEmissionsByPlant[y=1:G, t=1:T], - (1-biomass(gen[y]) - co2_capture_fraction(gen[y])) * EP[:vFuel][y, t] * fuel_CO2[fuel(gen[y])]+ - (1-biomass(gen[y]) - co2_capture_fraction_startup(gen[y])) * EP[:eStartFuel][y, t] * fuel_CO2[fuel(gen[y])]) - - # CO2 captured from power plants in "Thermal.csv" - @expression(EP, eEmissionsCaptureByPlant[y=1:G, t=1:T], - co2_capture_fraction(gen[y]) * EP[:vFuel][y, t] * fuel_CO2[fuel(gen[y])]+ - co2_capture_fraction_startup(gen[y]) * EP[:eStartFuel][y, t] * fuel_CO2[fuel(gen[y])]) - - @expression(EP, eEmissionsCaptureByPlantYear[y=1:G], - sum(inputs["omega"][t] * eEmissionsCaptureByPlant[y, t] + if y in SINGLE_FUEL + (1-biomass(gen[y]) - co2_capture_fraction(gen[y])) * EP[:vFuel][y, t] * fuel_CO2[fuel(gen[y])]+ + (1-biomass(gen[y]) - co2_capture_fraction_startup(gen[y])) * EP[:eStartFuel][y, t] * fuel_CO2[fuel(gen[y])] + else + sum((1-biomass(gen[y]) - co2_capture_fraction(gen[y])) * EP[:vMulFuels][y, i, t] * fuel_CO2[fuel_cols(gen[y], tag=i)] for i = 1:max_fuels)+ + sum((1-biomass(gen[y]) - co2_capture_fraction_startup(gen[y])) * EP[:vMulStartFuels][y, i, t] * fuel_CO2[fuel_cols(gen[y], tag=i)] for i = 1:max_fuels) + end) + + # CO2 captured from power plants in "Generators_data.csv" + @expression(EP, eEmissionsCaptureByPlant[y in CCS, t=1:T], + if y in SINGLE_FUEL + co2_capture_fraction(gen[y]) * EP[:vFuel][y, t] * fuel_CO2[fuel(gen[y])]+ + co2_capture_fraction_startup(gen[y]) * EP[:eStartFuel][y, t] * fuel_CO2[fuel(gen[y])] + else + sum(co2_capture_fraction(gen[y]) * EP[:vMulFuels][y, i, t] * fuel_CO2[fuel_cols(gen[y], tag=i)] for i = 1:max_fuels)+ + sum(co2_capture_fraction_startup(gen[y]) * EP[:vMulStartFuels][y, i, t] * fuel_CO2[fuel_cols(gen[y], tag=i)] for i = 1:max_fuels) + end) + + @expression(EP, eEmissionsCaptureByPlantYear[y in CCS], + sum(omega[t] * eEmissionsCaptureByPlant[y, t] for t in 1:T)) # add CO2 sequestration cost to objective function # when scale factor is on tCO2/MWh = > kt CO2/GWh - @expression(EP, ePlantCCO2Sequestration[y=1:G], - sum(inputs["omega"][t] * eEmissionsCaptureByPlant[y, t] * + @expression(EP, ePlantCCO2Sequestration[y in CCS], + sum(omega[t] * eEmissionsCaptureByPlant[y, t] * ccs_disposal_cost_per_metric_ton(gen[y]) for t in 1:T)) @expression(EP, eZonalCCO2Sequestration[z=1:Z], - sum(ePlantCCO2Sequestration[y] for y in resources_in_zone_by_rid(gen,z))) + sum(ePlantCCO2Sequestration[y] + for y in intersect(resources_in_zone_by_rid(gen,z), CCS))) @expression(EP, eTotaleCCO2Sequestration, sum(eZonalCCO2Sequestration[z] for z in 1:Z)) diff --git a/src/model/core/fuel.jl b/src/model/core/fuel.jl index 268e6a85e5..5299451bf8 100644 --- a/src/model/core/fuel.jl +++ b/src/model/core/fuel.jl @@ -50,23 +50,76 @@ to be zero such that the fuel consumption is zero when thermal units are offline In order to run piecewise fuel consumption module, the unit commitment must be turned on (UC = 1 or 2), and users should provide PWFU_Slope_* and PWFU_Intercept_* for at least one segment. -""" +To enable resources to use multiple fuels during both startup and normal operational processes, three additional variables were added: +fuel $i$ consumption by plant $y$ at time $t$ ($vMulFuel_{y,i,t}$); startup fuel consumption for single-fuel plants ($vStartFuel_{y,t}$); and startup fuel consumption for multi-fuel plants ($vMulStartFuel_{y,i,t}$). By making startup fuel consumption variables, the model can choose the startup fuel to meet the constraints. + +For plants using multiple fuels: + +During startup, heat input from multiple startup fuels are equal to startup fuel requirements in plant $y$ at time $t$: $StartFuelMMBTUperMW$ times $Capsize$. +```math +\begin{aligned} +\sum_{i \in \mathcal{I} } vMulStartFuels_{y, i, t}= CapSize_{y} \times StartFuelMMBTUperMW_{y} \times vSTART_{y,t} +\end{aligned} +``` +During normal operation, the sum of fuel consumptions from multiple fuels dividing by the correspnding heat rates, respectively, is equal to $vPower$ in plant $y$ at time $t$. +```math +\begin{aligned} +\sum_{i \in \mathcal{I} } \frac{vMulFuels_{y, i, t}} {HeatRate_{i,y} } = vPower_{y,t} +\end{aligned} +``` +There are also constraints on how much heat input each fuel can provide, which are specified by $MinCofire$ and $MaxCofire$. +```math +\begin{aligned} +vMulFuels_{y, i, t} >= vPower_{y,t} \times MinCofire_{i} +\end{aligned} +\begin{aligned} +vMulFuels_{y, i, t} <= vPower_{y,t} \times MaxCofire_{i} +\end{aligned} + +""" function fuel!(EP::Model, inputs::Dict, setup::Dict) println("Fuel Module") gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones - G = inputs["G"] - HAS_FUEL = inputs["HAS_FUEL"] + G = inputs["G"] THERM_COMMIT = inputs["THERM_COMMIT"] + HAS_FUEL = inputs["HAS_FUEL"] + MULTI_FUELS = inputs["MULTI_FUELS"] + SINGLE_FUEL = inputs["SINGLE_FUEL"] + fuels = inputs["fuels"] - NUM_FUEL = length(fuels) + fuel_costs = inputs["fuel_costs"] + omega = inputs["omega"] - # create variable for fuel consumption for output - @variable(EP, vFuel[y in 1:G, t = 1:T] >= 0) + NUM_FUEL = length(fuels) + # create variable for fuel consumption for output + # for resources that only use a single fuel + @variable(EP, vFuel[y in SINGLE_FUEL, t = 1:T] >= 0) + @variable(EP, vStartFuel[y in SINGLE_FUEL, t = 1:T] >= 0) + + # for resources that use multi fuels + # vMulFuels[y, f, t]: y - resource ID; f - fuel ID; t: time + if !isempty(MULTI_FUELS) + max_fuels = inputs["MAX_NUM_FUELS"] + heat_rates = inputs["HEAT_RATES"] + min_cofire = inputs["MIN_COFIRE"] + max_cofire = inputs["MAX_COFIRE"] + min_cofire_start =inputs["MIN_COFIRE_START"] + max_cofire_start =inputs["MAX_COFIRE_START"] + + COFIRE_MAX = [findall(g -> max_cofire_cols(g, tag=i) < 1, gen[MULTI_FUELS]) for i in 1:max_fuels] + COFIRE_MAX_START = [findall(g -> max_cofire_start_cols(g, tag=i) < 1, gen[MULTI_FUELS]) for i in 1:max_fuels] + COFIRE_MIN = [findall(g -> min_cofire_cols(g, tag=i) > 0, gen[MULTI_FUELS]) for i in 1:max_fuels] + COFIRE_MIN_START = [findall(g -> min_cofire_start_cols(g, tag=i) > 0, gen[MULTI_FUELS]) for i in 1:max_fuels] + + @variable(EP, vMulFuels[y in MULTI_FUELS, i = 1:max_fuels, t = 1:T] >= 0) + @variable(EP, vMulStartFuels[y in MULTI_FUELS, i = 1:max_fuels, t = 1:T] >= 0) + end + ### Expressions #### # Fuel consumed on start-up (MMBTU or kMMBTU (scaled)) # if unit commitment is modelled @@ -77,26 +130,84 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict) else 0 end) + + # time-series fuel consumption by plant + @expression(EP, ePlantFuel_generation[y in 1:G, t = 1:T], + if y in SINGLE_FUEL # for single fuel plants + EP[:vFuel][y, t] + else # for multi fuel plants + sum(EP[:vMulFuels][y, i, t] for i in 1:max_fuels) + end) + @expression(EP, ePlantFuel_start[y in 1:G, t = 1:T], + if y in SINGLE_FUEL # for single fuel plants + EP[:vStartFuel][y, t] + else # for multi fuel plants + sum(EP[:vMulStartFuels][y, i, t] for i in 1:max_fuels) + end) + # for multi-fuel resources + # annual fuel consumption by plant and fuel type + if !isempty(MULTI_FUELS) + @expression(EP, ePlantFuelConsumptionYear_multi_generation[y in MULTI_FUELS, i in 1:max_fuels], + sum(omega[t] * EP[:vMulFuels][y, i, t] for t in 1:T)) + @expression(EP, ePlantFuelConsumptionYear_multi_start[y in MULTI_FUELS, i in 1:max_fuels], + sum(omega[t] * EP[:vMulStartFuels][y, i, t] for t in 1:T)) + @expression(EP, ePlantFuelConsumptionYear_multi[y in MULTI_FUELS, i in 1:max_fuels], + EP[:ePlantFuelConsumptionYear_multi_generation][y, i] + EP[:ePlantFuelConsumptionYear_multi_start][y, i]) + end # fuel_cost is in $/MMBTU (M$/billion BTU if scaled) # vFuel and eStartFuel is MMBTU (or billion BTU if scaled) # eCFuel_start or eCFuel_out is $ or Million$ + # Start up fuel cost + # for multi-fuel resources + if !isempty(MULTI_FUELS) + # time-series fuel consumption costs by plant and fuel type during startup + @expression(EP, eCFuelOut_multi_start[y in MULTI_FUELS , i in 1:max_fuels, t = 1:T], + fuel_costs[fuel_cols(gen[y], tag=i)][t] * EP[:vMulStartFuels][y, i, t] + ) + # annual plant level fuel cost by fuel type during generation + @expression(EP, ePlantCFuelOut_multi_start[y in MULTI_FUELS, i in 1:max_fuels], + sum(omega[t] * EP[:eCFuelOut_multi_start][y, i, t] for t in 1:T)) + + end + @expression(EP, eCFuelStart[y = 1:G, t = 1:T], - (inputs["fuel_costs"][fuel(gen[y])][t] * EP[:eStartFuel][y, t])) + if y in SINGLE_FUEL + (fuel_costs[fuel(gen[y])][t] * EP[:vStartFuel][y, t]) + else + sum(EP[:eCFuelOut_multi_start][y, i, t] for i in 1:max_fuels) + end) + # plant level start-up fuel cost for output @expression(EP, ePlantCFuelStart[y = 1:G], - sum(inputs["omega"][t] * EP[:eCFuelStart][y, t] for t in 1:T)) + sum(omega[t] * EP[:eCFuelStart][y, t] for t in 1:T)) # zonal level total fuel cost for output @expression(EP, eZonalCFuelStart[z = 1:Z], sum(EP[:ePlantCFuelStart][y] for y in resources_in_zone_by_rid(gen,z))) # Fuel cost for power generation + # for multi-fuel resources + if !isempty(MULTI_FUELS) + # time-series fuel consumption costs by plant and fuel type during generation + @expression(EP, eCFuelOut_multi[y in MULTI_FUELS , i in 1:max_fuels, t = 1:T], + fuel_costs[fuel_cols(gen[y], tag=i)][t] * EP[:vMulFuels][y,i,t] + ) + # annual plant level fuel cost by fuel type during generation + @expression(EP, ePlantCFuelOut_multi[y in MULTI_FUELS, i in 1:max_fuels], + sum(omega[t] * EP[:eCFuelOut_multi][y, i, t] for t in 1:T)) + + end + @expression(EP, eCFuelOut[y = 1:G, t = 1:T], - (inputs["fuel_costs"][fuel(gen[y])][t] * EP[:vFuel][y, t])) + if y in SINGLE_FUEL + (fuel_costs[fuel(gen[y])][t] * EP[:vFuel][y, t]) + else + sum(EP[:eCFuelOut_multi][y, i, t] for i in 1:max_fuels) + end) # plant level start-up fuel cost for output @expression(EP, ePlantCFuelOut[y = 1:G], - sum(inputs["omega"][t] * EP[:eCFuelOut][y, t] for t in 1:T)) + sum(omega[t] * EP[:eCFuelOut][y, t] for t in 1:T)) # zonal level total fuel cost for output @expression(EP, eZonalCFuelOut[z = 1:Z], sum(EP[:ePlantCFuelOut][y] for y in resources_in_zone_by_rid(gen,z))) @@ -110,19 +221,43 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict) add_to_expression!(EP[:eObj], EP[:eTotalCFuelOut] + EP[:eTotalCFuelStart]) #fuel consumption (MMBTU or Billion BTU) - @expression(EP, eFuelConsumption[f in 1:NUM_FUEL, t in 1:T], + # for multi-fuel resources + if !isempty(MULTI_FUELS) + @expression(EP, eFuelConsumption_multi[f in 1:NUM_FUEL, t in 1:T], + sum((EP[:vMulFuels][y, i, t] + EP[:vMulStartFuels][y, i, t]) #i: fuel id + for i in 1:max_fuels, + y in intersect(resource_id.(gen[fuel_cols.(gen, tag=i) .== string(fuels[f])]), MULTI_FUELS)) + ) + end + + @expression(EP, eFuelConsumption_single[f in 1:NUM_FUEL, t in 1:T], sum(EP[:vFuel][y, t] + EP[:eStartFuel][y,t] - for y in resources_with_fuel(gen, fuels[f]))) - + for y in intersect(resources_with_fuel(gen, fuels[f]), SINGLE_FUEL))) + + @expression(EP, eFuelConsumption[f in 1:NUM_FUEL, t in 1:T], + if !isempty(MULTI_FUELS) + eFuelConsumption_multi[f, t] + eFuelConsumption_single[f,t] + else + eFuelConsumption_single[f,t] + end) + @expression(EP, eFuelConsumptionYear[f in 1:NUM_FUEL], - sum(inputs["omega"][t] * EP[:eFuelConsumption][f, t] for t in 1:T)) + sum(omega[t] * EP[:eFuelConsumption][f, t] for t in 1:T)) ### Constraint ### ### only apply constraint to generators with fuel type other than None - @constraint(EP, FuelCalculation[y in setdiff(HAS_FUEL, THERM_COMMIT), t = 1:T], + + @constraint(EP, cFuelCalculation_single[y in intersect(SINGLE_FUEL, setdiff(HAS_FUEL, THERM_COMMIT)), t = 1:T], EP[:vFuel][y, t] - EP[:vP][y, t] * heat_rate_mmbtu_per_mwh(gen[y]) == 0) + if !isempty(MULTI_FUELS) + @constraint(EP, cFuelCalculation_multi[y in intersect(MULTI_FUELS, setdiff(HAS_FUEL, THERM_COMMIT)), t = 1:T], + sum(EP[:vMulFuels][y, i, t]/heat_rates[i][y] for i in 1:max_fuels) - EP[:vP][y, t] == 0 + ) + end + + if !isempty(THERM_COMMIT) # Only apply piecewise fuel consumption to thermal generators in THERM_COMMIT_PWFU set THERM_COMMIT_PWFU = inputs["THERM_COMMIT_PWFU"] @@ -139,9 +274,49 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict) EP[:vFuel][y, t] >= (EP[:vP][y, t] * segment_slope(y, seg) + EP[:vCOMMIT][y, t] * segment_intercept(y, seg))) end + # constraint for fuel consumption at a constant heat rate - @constraint(EP, FuelCalculationCommit[y in setdiff(THERM_COMMIT,THERM_COMMIT_PWFU), t = 1:T], + @constraint(EP, FuelCalculationCommit_single[y in intersect(setdiff(THERM_COMMIT,THERM_COMMIT_PWFU), SINGLE_FUEL), t = 1:T], EP[:vFuel][y, t] - EP[:vP][y, t] * heat_rate_mmbtu_per_mwh(gen[y]) == 0) + if !isempty(MULTI_FUELS) + @constraint(EP, FuelCalculationCommit_multi[y in intersect(setdiff(THERM_COMMIT,THERM_COMMIT_PWFU), MULTI_FUELS), t = 1:T], + sum(EP[:vMulFuels][y, i, t]/heat_rates[i][y] for i in 1:max_fuels) - EP[:vP][y, t] .== 0 + ) + end + end + + # constraints on start up fuel use + @constraint(EP, cStartFuel_single[y in intersect(THERM_COMMIT, SINGLE_FUEL), t = 1:T], + EP[:vStartFuel][y, t] - (cap_size(gen[y]) * EP[:vSTART][y, t] * start_fuel_mmbtu_per_mw(gen[y])) .== 0 + ) + if !isempty(MULTI_FUELS) + @constraint(EP, cStartFuel_multi[y in intersect(THERM_COMMIT, MULTI_FUELS), t = 1:T], + sum(EP[:vMulStartFuels][y, i, t] for i in 1:max_fuels) - (cap_size(gen[y]) * EP[:vSTART][y, t] * start_fuel_mmbtu_per_mw(gen[y])) .== 0 + ) + end + + # constraints on co-fire ratio of different fuels used by one generator + # for example, + # fuel2/heat rate >= min_cofire_level * total power + # fuel2/heat rate <= max_cofire_level * total power without retrofit + if !isempty(MULTI_FUELS) + for i in 1:max_fuels + # during power generation + # cofire constraints without the name due to the loop + @constraint(EP, [y in intersect(MULTI_FUELS, COFIRE_MIN[i]), t = 1:T], + EP[:vMulFuels][y, i, t] >= min_cofire[i][y] * EP[:ePlantFuel_generation][y,t] + ) + @constraint(EP, [y in intersect(MULTI_FUELS, COFIRE_MAX[i]), t = 1:T], + EP[:vMulFuels][y, i, t] <= max_cofire[i][y] * EP[:ePlantFuel_generation][y,t] + ) + # startup + @constraint(EP, [y in intersect(MULTI_FUELS, COFIRE_MIN_START[i]), t = 1:T], + EP[:vMulStartFuels][y, i, t] >= min_cofire_start[i][y] * EP[:ePlantFuel_start][y,t] + ) + @constraint(EP, [y in intersect(MULTI_FUELS, COFIRE_MAX_START[i]), t = 1:T], + EP[:vMulStartFuels][y, i, t] <= max_cofire_start[i][y] * EP[:ePlantFuel_start][y,t] + ) + end end return EP diff --git a/src/model/policies/co2_cap.jl b/src/model/policies/co2_cap.jl index 252cb3a7f3..8aa89aecb0 100644 --- a/src/model/policies/co2_cap.jl +++ b/src/model/policies/co2_cap.jl @@ -114,6 +114,7 @@ function co2_cap!(EP::Model, inputs::Dict, setup::Dict) vCO2Cap_slack[cap] <= sum(inputs["dfMaxCO2Rate"][z,cap] * inputs["omega"][t] * EP[:eGenerationByZone][z,t] for t=1:T, z=findall(x->x==1, inputs["dfCO2CapZones"][:,cap])) ) - end + + end end diff --git a/src/model/resources/resources.jl b/src/model/resources/resources.jl index d38db7e27c..7d4f06a5d2 100644 --- a/src/model/resources/resources.jl +++ b/src/model/resources/resources.jl @@ -569,6 +569,14 @@ co2_capture_fraction(r::AbstractResource) = get(r, :co2_capture_fraction, defaul co2_capture_fraction_startup(r::AbstractResource) = get(r, :co2_capture_fraction_startup, default_zero) ccs_disposal_cost_per_metric_ton(r::AbstractResource) = get(r, :ccs_disposal_cost_per_metric_ton, default_zero) biomass(r::AbstractResource) = get(r, :biomass, default_zero) +multi_fuels(r::AbstractResource) = get(r, :multi_fuels, default_zero) +fuel_cols(r::AbstractResource; tag::Int64) = get(r, Symbol(string("fuel",tag)), "None") +num_fuels(r::AbstractResource) = get(r, :num_fuels, default_zero) +heat_rate_cols(r::AbstractResource; tag::Int64) = get(r, Symbol(string("heat_rate",tag, "_mmbtu_per_mwh")), default_zero) +max_cofire_cols(r::AbstractResource; tag::Int64) = get(r, Symbol(string("fuel",tag, "_max_cofire_level")), 1) +min_cofire_cols(r::AbstractResource; tag::Int64) = get(r, Symbol(string("fuel",tag, "_min_cofire_level")), default_zero) +max_cofire_start_cols(r::AbstractResource; tag::Int64) = get(r, Symbol(string("fuel",tag, "_max_cofire_level_start")), 1) +min_cofire_start_cols(r::AbstractResource; tag::Int64) = get(r, Symbol(string("fuel",tag, "_min_cofire_level_start")), default_zero) # Reservoir hydro and storage const default_percent = 1.0 @@ -615,6 +623,9 @@ ids_with_mga(rs::Vector{T}) where T <: AbstractResource = findall(r -> mga(r) == ids_with_fuel(rs::Vector{T}) where T <: AbstractResource = findall(r -> fuel(r) != "None", rs) +ids_with_singlefuel(rs::Vector{T}) where T <: AbstractResource = findall(r -> multi_fuels(r) == 0, rs) +ids_with_multifuels(rs::Vector{T}) where T <: AbstractResource = findall(r -> multi_fuels(r) == 1, rs) + is_buildable(rs::Vector{T}) where T <: AbstractResource = findall(r -> get(r, :new_build, default_zero) == 1, rs) is_retirable(rs::Vector{T}) where T <: AbstractResource = findall(r -> get(r, :can_retire, default_zero) == 1, rs) diff --git a/src/write_outputs/energy_share_requirement/write_esr_revenue.jl b/src/write_outputs/energy_share_requirement/write_esr_revenue.jl index 271f25a167..c212caccf8 100644 --- a/src/write_outputs/energy_share_requirement/write_esr_revenue.jl +++ b/src/write_outputs/energy_share_requirement/write_esr_revenue.jl @@ -66,5 +66,4 @@ function write_esr_revenue(path::AbstractString, inputs::Dict, setup::Dict, dfPo dfESRRev.Total = sum(eachcol(dfESRRev[:, 6:nESR + 5])) CSV.write(joinpath(path, "ESR_Revenue.csv"), dfESRRev) return dfESRRev -end - +end \ No newline at end of file diff --git a/src/write_outputs/write_co2.jl b/src/write_outputs/write_co2.jl index b06c9d8802..6fa2edf574 100644 --- a/src/write_outputs/write_co2.jl +++ b/src/write_outputs/write_co2.jl @@ -37,14 +37,15 @@ end function write_co2_capture_plant(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) gen = inputs["RESOURCES"] G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) + CCS = inputs["CCS"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones - dfCapturedEmissions_plant = DataFrame(Resource=inputs["RESOURCE_NAMES"], Zone=zone_id.(gen), AnnualSum=zeros(G)) - if any(co2_capture_fraction.(gen) .!= 0) + dfCapturedEmissions_plant = DataFrame(Resource=inputs["RESOURCE_NAMES"][CCS], Zone=zone_id.(gen[CCS]), AnnualSum=zeros(length(CCS))) + if !isempty(CCS) # Captured CO2 emissions by plant - emissions_captured_plant = zeros(G, T) - emissions_captured_plant = (value.(EP[:eEmissionsCaptureByPlant])) + emissions_captured_plant = zeros(length(CCS), T) + emissions_captured_plant = (value.(EP[:eEmissionsCaptureByPlant]).data) if setup["ParameterScale"] == 1 emissions_captured_plant *= ModelScalingFactor end diff --git a/src/write_outputs/write_costs.jl b/src/write_outputs/write_costs.jl index 2814655359..87676246e5 100644 --- a/src/write_outputs/write_costs.jl +++ b/src/write_outputs/write_costs.jl @@ -108,6 +108,7 @@ function write_costs(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) FLEX_ZONE = intersect(inputs["FLEX"], Y_ZONE) COMMIT_ZONE = intersect(inputs["COMMIT"], Y_ZONE) ELECTROLYZERS_ZONE = intersect(inputs["ELECTROLYZER"], Y_ZONE) + CCS_ZONE = intersect(inputs["CCS"], Y_ZONE) eCFix = sum(value.(EP[:eCFix][Y_ZONE])) tempCFix += eCFix @@ -218,8 +219,9 @@ function write_costs(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) tempCNSE = sum(value.(EP[:eCNSE][:,:,z])) tempCTotal += tempCNSE - if any(co2_capture_fraction.(gen) .!=0) - tempCCO2 = sum(value.(EP[:ePlantCCO2Sequestration][Y_ZONE,:])) + # if any(dfGen.CO2_Capture_Fraction .!=0) + if !isempty(CCS_ZONE) + tempCCO2 = sum(value.(EP[:ePlantCCO2Sequestration][CCS_ZONE])) tempCTotal += tempCCO2 end diff --git a/src/write_outputs/write_fuel_consumption.jl b/src/write_outputs/write_fuel_consumption.jl index 08da77ce2c..427e318a4c 100644 --- a/src/write_outputs/write_fuel_consumption.jl +++ b/src/write_outputs/write_fuel_consumption.jl @@ -14,17 +14,49 @@ function write_fuel_consumption_plant(path::AbstractString,inputs::Dict, setup:: gen = inputs["RESOURCES"] HAS_FUEL = inputs["HAS_FUEL"] + MULTI_FUELS = inputs["MULTI_FUELS"] + # Fuel consumption cost by each resource, including start up fuel dfPlantFuel = DataFrame(Resource = inputs["RESOURCE_NAMES"][HAS_FUEL], Fuel = fuel.(gen[HAS_FUEL]), Zone = zone_id.(gen[HAS_FUEL]), - AnnualSum = zeros(length(HAS_FUEL))) + AnnualSumCosts = zeros(length(HAS_FUEL))) tempannualsum = value.(EP[:ePlantCFuelOut][HAS_FUEL]) + value.(EP[:ePlantCFuelStart][HAS_FUEL]) + if !isempty(MULTI_FUELS) + fuel_cols_num = inputs["FUEL_COLS"] # TODO: rename it + max_fuels = inputs["MAX_NUM_FUELS"] + dfPlantFuel.Multi_Fuels = multi_fuels.(gen[HAS_FUEL]) + for i = 1:max_fuels + tempannualsum_fuel_heat_multi_generation = zeros(length(HAS_FUEL)) + tempannualsum_fuel_heat_multi_start = zeros(length(HAS_FUEL)) + tempannualsum_fuel_heat_multi_total = zeros(length(HAS_FUEL)) + tempannualsum_fuel_cost_multi = zeros(length(HAS_FUEL)) + for g in MULTI_FUELS + tempannualsum_fuel_heat_multi_generation[findfirst(x->x==g, HAS_FUEL)] = value.(EP[:ePlantFuelConsumptionYear_multi_generation][g,i]) + tempannualsum_fuel_heat_multi_start[findfirst(x->x==g, HAS_FUEL)] = value.(EP[:ePlantFuelConsumptionYear_multi_start][g,i]) + tempannualsum_fuel_heat_multi_total[findfirst(x->x==g, HAS_FUEL)] = value.(EP[:ePlantFuelConsumptionYear_multi][g,i]) + tempannualsum_fuel_cost_multi[findfirst(x->x==g, HAS_FUEL)] = value.(EP[:ePlantCFuelOut_multi][g,i]) + value.(EP[:ePlantCFuelOut_multi_start][g,i]) + end + if setup["ParameterScale"] == 1 + tempannualsum_fuel_heat_multi_generation *= ModelScalingFactor + tempannualsum_fuel_heat_multi_start *= ModelScalingFactor + tempannualsum_fuel_heat_multi_total *= ModelScalingFactor + tempannualsum_fuel_cost_multi *= ModelScalingFactor^2 + end + + dfPlantFuel[!, fuel_cols_num[i]] = fuel_cols.(gen[HAS_FUEL], tag=i) + dfPlantFuel[!, Symbol(string(fuel_cols_num[i],"_AnnualSum_Fuel_HeatInput_Generation_MMBtu"))] = tempannualsum_fuel_heat_multi_generation + dfPlantFuel[!, Symbol(string(fuel_cols_num[i],"_AnnualSum_Fuel_HeatInput_Start_MMBtu"))] = tempannualsum_fuel_heat_multi_start + dfPlantFuel[!, Symbol(string(fuel_cols_num[i],"_AnnualSum_Fuel_HeatInput_Total_MMBtu"))] = tempannualsum_fuel_heat_multi_total + dfPlantFuel[!, Symbol(string(fuel_cols_num[i],"_AnnualSum_Fuel_Cost"))] = tempannualsum_fuel_cost_multi + end + end + if setup["ParameterScale"] == 1 tempannualsum *= ModelScalingFactor^2 # end - dfPlantFuel.AnnualSum .+= tempannualsum + dfPlantFuel.AnnualSumCosts .+= tempannualsum CSV.write(joinpath(path, "Fuel_cost_plant.csv"), dfPlantFuel) end @@ -32,9 +64,10 @@ end function write_fuel_consumption_ts(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) T = inputs["T"] # Number of time steps (hours) HAS_FUEL = inputs["HAS_FUEL"] + # Fuel consumption by each resource per time step, unit is MMBTU dfPlantFuel_TS = DataFrame(Resource = inputs["RESOURCE_NAMES"][HAS_FUEL]) - tempts = value.(EP[:vFuel] + EP[:eStartFuel])[HAS_FUEL,:] + tempts = value.(EP[:ePlantFuel_generation] + EP[:ePlantFuel_start])[HAS_FUEL,:] if setup["ParameterScale"] == 1 tempts *= ModelScalingFactor # kMMBTU to MMBTU end diff --git a/src/write_outputs/write_net_revenue.jl b/src/write_outputs/write_net_revenue.jl index f895a8e624..b1d4dd23de 100644 --- a/src/write_outputs/write_net_revenue.jl +++ b/src/write_outputs/write_net_revenue.jl @@ -21,6 +21,7 @@ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP:: end VRE_STOR = inputs["VRE_STOR"] + CCS = inputs["CCS"] if !isempty(VRE_STOR) gen_VRE_STOR = gen.VreStorage VRE_STOR_LENGTH = size(inputs["VRE_STOR"])[1] @@ -130,6 +131,16 @@ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP:: dfNetRevenue.Charge_cost = dfChargingcost[1:G,:AnnualSum] # Unit is confirmed to be US$ end + # Add CO2 releated sequestration cost or credit (e.g. 45 Q) to the dataframe + dfNetRevenue.CO2SequestrationCost = zeros(nrow(dfNetRevenue)) + if any(co2_capture_fraction.(gen) .!= 0) + dfNetRevenue.CO2SequestrationCost = zeros(G) + dfNetRevenue[CCS, :CO2SequestrationCost] = value.(EP[:ePlantCCO2Sequestration]).data + end + if setup["ParameterScale"] == 1 + dfNetRevenue.CO2SequestrationCost *= ModelScalingFactor^2 # converting Million US$ to US$ + end + # Add energy and subsidy revenue to the dataframe dfNetRevenue.EnergyRevenue = zeros(nrow(dfNetRevenue)) dfNetRevenue.SubsidyRevenue = zeros(nrow(dfNetRevenue)) @@ -196,17 +207,18 @@ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP:: .+ dfNetRevenue.OperatingRegulationRevenue dfNetRevenue.Cost = (dfNetRevenue.Inv_cost_MW - .+ dfNetRevenue.Inv_cost_MWh - .+ dfNetRevenue.Inv_cost_charge_MW - .+ dfNetRevenue.Fixed_OM_cost_MW - .+ dfNetRevenue.Fixed_OM_cost_MWh - .+ dfNetRevenue.Fixed_OM_cost_charge_MW - .+ dfNetRevenue.Var_OM_cost_out - .+ dfNetRevenue.Var_OM_cost_in - .+ dfNetRevenue.Fuel_cost - .+ dfNetRevenue.Charge_cost - .+ dfNetRevenue.EmissionsCost - .+ dfNetRevenue.StartCost) + .+ dfNetRevenue.Inv_cost_MWh + .+ dfNetRevenue.Inv_cost_charge_MW + .+ dfNetRevenue.Fixed_OM_cost_MW + .+ dfNetRevenue.Fixed_OM_cost_MWh + .+ dfNetRevenue.Fixed_OM_cost_charge_MW + .+ dfNetRevenue.Var_OM_cost_out + .+ dfNetRevenue.Var_OM_cost_in + .+ dfNetRevenue.Fuel_cost + .+ dfNetRevenue.Charge_cost + .+ dfNetRevenue.EmissionsCost + .+ dfNetRevenue.StartCost + .+ dfNetRevenue.CO2SequestrationCost) dfNetRevenue.Profit = dfNetRevenue.Revenue .- dfNetRevenue.Cost CSV.write(joinpath(path, "NetRevenue.csv"), dfNetRevenue) diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Thermal.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Thermal.csv index 2a06d41360..c3b20ab40a 100644 --- a/test/LoadResourceData/test_gen_non_colocated/Resources/Thermal.csv +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Thermal.csv @@ -1,30 +1,30 @@ -Resource,Zone,Model,MGA,Resource_Type,Min_Power,Ramp_Up_Percentage,Ramp_Dn_Percentage,Existing_Cap_MW,Cap_Size,Min_Cap_MW,Max_Cap_MW,New_Build,Can_Retire,Fuel,Inv_Cost_Per_MWyr,Fixed_Om_Cost_Per_MWyr,Var_Om_Cost_Per_MWh,Up_Time,Down_Time,Start_Cost_Per_MW,Start_Fuel_Mmbtu_Per_MW,Heat_Rate_Mmbtu_Per_MWh,Reg_Cost,Rsv_Cost,Reg_Max,Rsv_Max,Region,Cluster,PWFU_Fuel_Usage_Zero_Load_MMBTU_per_h,PWFU_Heat_Rate_MMBTU_per_MWh_1,PWFU_Heat_Rate_MMBTU_per_MWh_2,PWFU_Load_Point_MW_1,PWFU_Load_Point_MW_2,CO2_Capture_Fraction,CO2_Capture_Fraction_Startup,CCS_Disposal_Cost_per_Metric_Ton,Biomass -NENGREST_biomass_1,1,1,1,biomass,0.45,1,1,106.062,3.21,0,0,0,0,None,0,122976,5.08,0,0,0,0,14.58,0,0,0.083333333,0.166666667,NENGREST,1,0,0,0,0,0,0,0,0,0 -NENGREST_natural_gas_fired_combined_cycle_1,1,1,1,natural_gas_fired_combined_cycle,0.468,0.64,0.64,7077.3,471.82,0,0,0,1,NENGREST_NG,0,10287,3.55,6,6,91,2,7.43,0,0,0.053333333,0.106666667,NENGREST,1,400,6,7.2,160,250,0.9,0.6,20,0 -NENGREST_natural_gas_fired_combined_cycle_2,1,1,1,natural_gas_fired_combined_cycle,0.507,0.64,0.64,2684.803,244.07,0,0,0,1,NENGREST_NG,0,16291,4.5,6,6,91,2,8.29,0,0,0.053333333,0.106666667,NENGREST,2,0,0,0,0,0,0,0,0,0 -NENGREST_natural_gas_fired_combustion_turbine_1,1,1,1,natural_gas_fired_combustion_turbine,0.456,3.78,3.78,302.701,43.24,0,0,0,1,NENGREST_NG,0,12080,4.6,1,1,118,3.5,10.13,0,0,0.315,0.63,NENGREST,1,0,0,0,0,0,0,0,0,0 -NENGREST_natural_gas_fired_combustion_turbine_2,1,1,1,natural_gas_fired_combustion_turbine,0.488,3.78,3.78,62.704,7.84,0,0,0,1,NENGREST_NG,0,13991,4.6,1,1,118,3.5,4.74,0,0,0.315,0.63,NENGREST,2,0,0,0,0,0,0,0,0,0 -NENGREST_natural_gas_steam_turbine_1,1,1,1,natural_gas_steam_turbine,0,0,0,0.6,0.6,0,0,0,1,NENGREST_NG,0,50678,1.04,0,0,86,13.7,0,0,0,0,0,NENGREST,1,0,0,0,0,0,0,0,0,0 -NENGREST_nuclear_1,1,1,1,nuclear,0.5,0.25,0.25,1242,1242,0,0,0,1,new_england_uranium,0,271818,2.32,24,24,245,0,10.46,0,0,0.020833333,0.041666667,NENGREST,1,0,0,0,0,0,0,0,0,0 -NENG_CT_biomass_1,2,1,1,biomass,0.348,1,1,27.248,3.41,0,0,0,0,Biomass,0,122976,5.37,0,0,0,0,15.33,0,0,0.083333333,0.166666667,NENG_CT,1,0,0,0,0,0,0.9,0.6,20,1 -NENG_CT_natural_gas_fired_combined_cycle_1,2,1,1,natural_gas_fired_combined_cycle,0.338,0.64,0.64,3488.704,436.09,0,0,0,1,NENG_CT_NG,0,9698,3.57,6,6,91,2,7.12,0,0,0.053333333,0.106666667,NENG_CT,1,0,0,0,0,0,0,0,0,0 -NENG_CT_natural_gas_fired_combined_cycle_2,2,1,1,natural_gas_fired_combined_cycle,0.466,0.64,0.64,35.2,17.6,0,0,0,1,NENG_CT_NG,0,16291,4.5,6,6,91,2,10.77,0,0,0.053333333,0.106666667,NENG_CT,2,0,0,0,0,0,0,0,0,0 -NENG_CT_natural_gas_fired_combustion_turbine_1,2,1,1,natural_gas_fired_combustion_turbine,0.124,3.78,3.78,434,54.25,0,0,0,1,NENG_CT_NG,0,10609,4.6,1,1,118,3.5,11.06,0,0,0.315,0.63,NENG_CT,1,0,0,0,0,0,0,0,0,0 -NENG_CT_natural_gas_fired_combustion_turbine_2,2,1,1,natural_gas_fired_combustion_turbine,0.476,3.78,3.78,124.9,24.98,0,0,0,1,NENG_CT_NG,0,13991,4.6,1,1,118,3.5,8.35,0,0,0.315,0.63,NENG_CT,2,0,0,0,0,0,0,0,0,0 -NENG_CT_nuclear_1,2,1,1,nuclear,0.5,0.25,0.25,2162.9,1081.45,0,0,0,1,new_england_uranium,0,190920,2.32,24,24,245,0,10.46,0,0,0.020833333,0.041666667,NENG_CT,1,0,0,0,0,0,0,0,0,0 -NENG_ME_biomass_1,3,1,1,biomass,0.404,1,1,24.95,2.5,0,0,0,0,None,0,122976,4.85,0,0,0,0,13.84,0,0,0.083333333,0.166666667,NENG_ME,1,0,0,0,0,0,0,0,0,0 -NENG_ME_natural_gas_fired_combined_cycle_1,3,1,1,natural_gas_fired_combined_cycle,0.474,0.64,0.64,274.5,137.25,0,0,0,1,NENG_ME_NG,0,16291,4.5,6,6,91,2,12.62,0,0,0.053333333,0.106666667,NENG_ME,1,0,0,0,0,0,0,0,0,0 -NENG_ME_natural_gas_fired_combined_cycle_2,3,1,1,natural_gas_fired_combined_cycle,0.386,0.64,0.64,1114.1,557.05,0,0,0,1,NENG_ME_NG,0,9668,3.57,6,6,91,2,7.65,0,0,0.053333333,0.106666667,NENG_ME,2,0,0,0,0,0,0,0,0,0 -NENG_ME_natural_gas_fired_combustion_turbine_1,3,1,1,natural_gas_fired_combustion_turbine,0.697,3.78,3.78,163.5,54.5,0,0,0,1,NENG_ME_NG,0,11540,4.6,1,1,118,3.5,4.75,0,0,0.315,0.63,NENG_ME,1,0,0,0,0,0,0,0,0,0 -NENGREST_naturalgas_ccccsavgcf_mid_0,1,1,1,naturalgas_ccccsavgcf_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENGREST_NG_ccs90,229388,27483,5.82,6,6,103,0,7.52,0,0,0.053333333,0.106666667,NENGREST,0,0,0,0,0,0,0,0,0,0 -NENGREST_naturalgas_ccavgcf_mid_0,1,1,1,naturalgas_ccavgcf_mid,0.2,0.64,0.64,0,500,0,-1,1,1,NENGREST_NG,110025,12441,1.61,6,6,103,2,6.27,0,0,0.053333333,0.106666667,NENGREST,0,0,0,0,0,0,0,0,0,0 -NENGREST_naturalgas_ctavgcf_mid_0,1,1,1,naturalgas_ctavgcf_mid,0.3,3.78,3.78,0,100,0,-1,1,1,NENGREST_NG,81998,6960,4.49,1,1,134,3.5,9.9,0,0,0.315,0.63,NENGREST,0,0,0,0,0,0,0,0,0,0 -NENGREST_naturalgas_ccs100_mid_0,1,1,1,naturalgas_ccs100_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENGREST_NG_ccs100,239841,37153,6.26,6,6,103,0,7.89,0,0,0.053333333,0.106666667,NENGREST,0,0,0,0,0,0,0,0,0,0 -NENG_CT_naturalgas_ccccsavgcf_mid_0,2,1,1,naturalgas_ccccsavgcf_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_CT_NG_ccs90,229388,27483,5.82,6,6,103,0,7.52,0,0,0.053333333,0.106666667,NENG_CT,0,0,0,0,0,0,0,0,0,0 -NENG_CT_naturalgas_ccavgcf_mid_0,2,1,1,naturalgas_ccavgcf_mid,0.2,0.64,0.64,0,500,0,-1,1,1,NENG_CT_NG,110025,12441,1.61,6,6,103,2,6.27,0,0,0.053333333,0.106666667,NENG_CT,0,0,0,0,0,0,0,0,0,0 -NENG_CT_naturalgas_ctavgcf_mid_0,2,1,1,naturalgas_ctavgcf_mid,0.3,3.78,3.78,0,100,0,-1,1,1,NENG_CT_NG,81998,6960,4.49,1,1,134,3.5,9.9,0,0,0.315,0.63,NENG_CT,0,0,0,0,0,0,0,0,0,0 -NENG_CT_naturalgas_ccs100_mid_0,2,1,1,naturalgas_ccs100_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_CT_NG_ccs100,239841,37153,6.26,6,6,103,0,7.89,0,0,0.053333333,0.106666667,NENG_CT,0,0,0,0,0,0,0,0,0,0 -NENG_ME_naturalgas_ccccsavgcf_mid_0,3,1,1,naturalgas_ccccsavgcf_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_ME_NG_ccs90,229388,27483,5.82,6,6,103,0,7.52,0,0,0.053333333,0.106666667,NENG_ME,0,0,0,0,0,0,0,0,0,0 -NENG_ME_naturalgas_ccavgcf_mid_0,3,1,1,naturalgas_ccavgcf_mid,0.2,0.64,0.64,0,500,0,-1,1,1,NENG_ME_NG,110025,12441,1.61,6,6,103,2,6.27,0,0,0.053333333,0.106666667,NENG_ME,0,0,0,0,0,0,0,0,0,0 -NENG_ME_naturalgas_ctavgcf_mid_0,3,1,1,naturalgas_ctavgcf_mid,0.3,3.78,3.78,0,100,0,-1,1,1,NENG_ME_NG,81998,6960,4.49,1,1,134,3.5,9.9,0,0,0.315,0.63,NENG_ME,0,0,0,0,0,0,0,0,0,0 -NENG_ME_naturalgas_ccs100_mid_0,3,1,1,naturalgas_ccs100_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_ME_NG_ccs100,239841,37153,6.26,6,6,103,0,7.89,0,0,0.053333333,0.106666667,NENG_ME,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file +Resource,Zone,Model,MGA,Resource_Type,Min_Power,Ramp_Up_Percentage,Ramp_Dn_Percentage,Existing_Cap_MW,Cap_Size,Min_Cap_MW,Max_Cap_MW,New_Build,Can_Retire,Fuel,Inv_Cost_Per_MWyr,Fixed_Om_Cost_Per_MWyr,Var_Om_Cost_Per_MWh,Up_Time,Down_Time,Start_Cost_Per_MW,Start_Fuel_Mmbtu_Per_MW,Heat_Rate_Mmbtu_Per_MWh,Reg_Cost,Rsv_Cost,Reg_Max,Rsv_Max,Region,Cluster,CO2_Capture_Fraction,CO2_Capture_Fraction_Startup,CCS_Disposal_Cost_per_Metric_Ton,Biomass,MULTI_FUELS,Num_Fuels,Fuel1,Heat_Rate1_MMBTU_per_MWh,Fuel1_Min_Cofire_Level,Fuel1_Min_Cofire_Level_Start,Fuel1_Max_Cofire_Level,Fuel1_Max_Cofire_Level_Start,Fuel2,Heat_Rate2_MMBTU_per_MWh,Fuel2_Min_Cofire_Level,Fuel2_Max_Cofire_Level,Fuel2_Min_Cofire_Level_Start,Fuel2_Max_Cofire_Level_Start +NENGREST_biomass_1,1,1,1,biomass,0.45,1,1,106.062,3.21,0,0,0,0,None,0,122976,5.08,0,0,0,0,14.58,0,0,0.083333333,0.166666667,NENGREST,1,0,0,-39,0,1,2,mountain_naturalgas,6.36,0,0,0.12,1,hydrogen,6.36,0,0.12,0,0.12 +NENGREST_natural_gas_fired_combined_cycle_1,1,1,1,natural_gas_fired_combined_cycle,0.468,0.64,0.64,7077.3,471.82,0,0,0,1,NENGREST_NG,0,10287,3.55,6,6,91,2,7.43,0,0,0.053333333,0.106666667,NENGREST,1,0,0,-39,0,1,2,mountain_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENGREST_natural_gas_fired_combined_cycle_2,1,1,1,natural_gas_fired_combined_cycle,0.507,0.64,0.64,2684.803,244.07,0,0,0,1,NENGREST_NG,0,16291,4.5,6,6,91,2,8.29,0,0,0.053333333,0.106666667,NENGREST,2,0.9,0.9,-28.936,0,1,2,pacific_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENGREST_natural_gas_fired_combustion_turbine_1,1,1,1,natural_gas_fired_combustion_turbine,0.456,3.78,3.78,302.701,43.24,0,0,0,1,NENGREST_NG,0,12080,4.6,1,1,118,3.5,10.13,0,0,0.315,0.63,NENGREST,1,0,0,-39,0,1,2,pacific_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENGREST_natural_gas_fired_combustion_turbine_2,1,1,1,natural_gas_fired_combustion_turbine,0.488,3.78,3.78,62.704,7.84,0,0,0,1,NENGREST_NG,0,13991,4.6,1,1,118,3.5,4.74,0,0,0.315,0.63,NENGREST,2,0,0,-39,0,1,2,pacific_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENGREST_natural_gas_steam_turbine_1,1,1,1,natural_gas_steam_turbine,0,0,0,0.6,0.6,0,0,0,1,NENGREST_NG,0,50678,1.04,0,0,86,13.7,0,0,0,0,0,NENGREST,1,0.9,0.9,-20.634,0,1,2,pacific_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENGREST_nuclear_1,1,1,1,nuclear,0.5,0.25,0.25,1242,1242,0,0,0,1,new_england_uranium,0,271818,2.32,24,24,245,0,10.46,0,0,0.020833333,0.041666667,NENGREST,1,0,0,-39,0,1,2,pacific_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT_biomass_1,2,1,1,biomass,0.348,1,1,27.248,3.41,0,0,0,0,Biomass,0,122976,5.37,0,0,0,0,15.33,0,0,0.083333333,0.166666667,NENG_CT,1,0,0,-39,1,1,2,pacific_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_CT_natural_gas_fired_combined_cycle_1,2,1,1,natural_gas_fired_combined_cycle,0.338,0.64,0.64,3488.704,436.09,0,0,0,1,NENG_CT_NG,0,9698,3.57,6,6,91,2,7.12,0,0,0.053333333,0.106666667,NENG_CT,1,0.9,0.9,-26.5,0,1,2,south_atlantic_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENG_CT_natural_gas_fired_combined_cycle_2,2,1,1,natural_gas_fired_combined_cycle,0.466,0.64,0.64,35.2,17.6,0,0,0,1,NENG_CT_NG,0,16291,4.5,6,6,91,2,10.77,0,0,0.053333333,0.106666667,NENG_CT,2,0,0,-39,0,1,2,south_atlantic_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT_natural_gas_fired_combustion_turbine_1,2,1,1,natural_gas_fired_combustion_turbine,0.124,3.78,3.78,434,54.25,0,0,0,1,NENG_CT_NG,0,10609,4.6,1,1,118,3.5,11.06,0,0,0.315,0.63,NENG_CT,1,0,0,-39,0,1,2,south_atlantic_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_CT_natural_gas_fired_combustion_turbine_2,2,1,1,natural_gas_fired_combustion_turbine,0.476,3.78,3.78,124.9,24.98,0,0,0,1,NENG_CT_NG,0,13991,4.6,1,1,118,3.5,8.35,0,0,0.315,0.63,NENG_CT,2,0,0,-39,0,1,2,new_england_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT_nuclear_1,2,1,1,nuclear,0.5,0.25,0.25,2162.9,1081.45,0,0,0,1,new_england_uranium,0,190920,2.32,24,24,245,0,10.46,0,0,0.020833333,0.041666667,NENG_CT,1,0,0,-39,0,1,2,new_england_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_ME_biomass_1,3,1,1,biomass,0.404,1,1,24.95,2.5,0,0,0,0,None,0,122976,4.85,0,0,0,0,13.84,0,0,0.083333333,0.166666667,NENG_ME,1,0.9,0.9,-24.632,0,1,2,east_north_central_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENG_ME_natural_gas_fired_combined_cycle_1,3,1,1,natural_gas_fired_combined_cycle,0.474,0.64,0.64,274.5,137.25,0,0,0,1,NENG_ME_NG,0,16291,4.5,6,6,91,2,12.62,0,0,0.053333333,0.106666667,NENG_ME,1,0,0,-39,0,0,1,east_north_central_coal,0,0,0,1,1,hydrogen,0,0,1,0,1 +NENG_ME_natural_gas_fired_combined_cycle_2,3,1,1,natural_gas_fired_combined_cycle,0.386,0.64,0.64,1114.1,557.05,0,0,0,1,NENG_ME_NG,0,9668,3.57,6,6,91,2,7.65,0,0,0.053333333,0.106666667,NENG_ME,2,0,0,-39,0,0,1,pacific_coal,0,0,0,1,1,hydrogen,0,0,1,0,1 +NENG_ME_natural_gas_fired_combustion_turbine_1,3,1,1,natural_gas_fired_combustion_turbine,0.697,3.78,3.78,163.5,54.5,0,0,0,1,NENG_ME_NG,0,11540,4.6,1,1,118,3.5,4.75,0,0,0.315,0.63,NENG_ME,1,0.9,0.9,-24.632,0,1,2,east_north_central_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENGREST_naturalgas_ccccsavgcf_mid_0,1,1,1,naturalgas_ccccsavgcf_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENGREST_NG_ccs90,229388,27483,5.82,6,6,103,0,7.52,0,0,0.053333333,0.106666667,NENGREST,0,0,0,-39,0,1,2,east_north_central_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENGREST_naturalgas_ccavgcf_mid_0,1,1,1,naturalgas_ccavgcf_mid,0.2,0.64,0.64,0,500,0,-1,1,1,NENGREST_NG,110025,12441,1.61,6,6,103,2,6.27,0,0,0.053333333,0.106666667,NENGREST,0,0,0,-39,0,1,2,east_north_central_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENGREST_naturalgas_ctavgcf_mid_0,1,1,1,naturalgas_ctavgcf_mid,0.3,3.78,3.78,0,100,0,-1,1,1,NENGREST_NG,81998,6960,4.49,1,1,134,3.5,9.9,0,0,0.315,0.63,NENGREST,0,0.9,0.9,-26.989,0,1,2,west_south_central_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENGREST_naturalgas_ccs100_mid_0,1,1,1,naturalgas_ccs100_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENGREST_NG_ccs100,239841,37153,6.26,6,6,103,0,7.89,0,0,0.053333333,0.106666667,NENGREST,0,0,0,-39,0,1,2,west_south_central_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT_naturalgas_ccccsavgcf_mid_0,2,1,1,naturalgas_ccccsavgcf_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_CT_NG_ccs90,229388,27483,5.82,6,6,103,0,7.52,0,0,0.053333333,0.106666667,NENG_CT,0,0,0,-39,0,1,2,west_south_central_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_CT_naturalgas_ccavgcf_mid_0,2,1,1,naturalgas_ccavgcf_mid,0.2,0.64,0.64,0,500,0,-1,1,1,NENG_CT_NG,110025,12441,1.61,6,6,103,2,6.27,0,0,0.053333333,0.106666667,NENG_CT,0,0.9,0.9,-24.632,0,1,2,east_north_central_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENG_CT_naturalgas_ctavgcf_mid_0,2,1,1,naturalgas_ctavgcf_mid,0.3,3.78,3.78,0,100,0,-1,1,1,NENG_CT_NG,81998,6960,4.49,1,1,134,3.5,9.9,0,0,0.315,0.63,NENG_CT,0,0,0,-39,0,1,2,east_north_central_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT_naturalgas_ccs100_mid_0,2,1,1,naturalgas_ccs100_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_CT_NG_ccs100,239841,37153,6.26,6,6,103,0,7.89,0,0,0.053333333,0.106666667,NENG_CT,0,0,0,-39,0,1,2,east_north_central_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_ME_naturalgas_ccccsavgcf_mid_0,3,1,1,naturalgas_ccccsavgcf_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_ME_NG_ccs90,229388,27483,5.82,6,6,103,0,7.52,0,0,0.053333333,0.106666667,NENG_ME,0,0.9,0.9,-18.389,0,1,2,pacific_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENG_ME_naturalgas_ccavgcf_mid_0,3,1,1,naturalgas_ccavgcf_mid,0.2,0.64,0.64,0,500,0,-1,1,1,NENG_ME_NG,110025,12441,1.61,6,6,103,2,6.27,0,0,0.053333333,0.106666667,NENG_ME,0,0,0,-39,0,1,2,pacific_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_ME_naturalgas_ctavgcf_mid_0,3,1,1,naturalgas_ctavgcf_mid,0.3,3.78,3.78,0,100,0,-1,1,1,NENG_ME_NG,81998,6960,4.49,1,1,134,3.5,9.9,0,0,0.315,0.63,NENG_ME,0,0,0,-39,0,1,2,pacific_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_ME_naturalgas_ccs100_mid_0,3,1,1,naturalgas_ccs100_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_ME_NG_ccs100,239841,37153,6.26,6,6,103,0,7.89,0,0,0.053333333,0.106666667,NENG_ME,0,0,0,-39,0,1,2,middle_atlantic_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/generators_data.csv b/test/LoadResourceData/test_gen_non_colocated/generators_data.csv index 898ec34679..3d5f210cb5 100644 --- a/test/LoadResourceData/test_gen_non_colocated/generators_data.csv +++ b/test/LoadResourceData/test_gen_non_colocated/generators_data.csv @@ -1,63 +1,63 @@ -region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,STOR,HYDRO,FLEX,MUST_RUN,VRE,ELECTROLYZER,Num_VRE_Bins,LDS,CapRes_1,ESR_1,ESR_2,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag_1,MinCapTag_2,MinCapTag_3,Hydrogen_MWh_Per_Tonne,Electrolyzer_Min_kt,Hydrogen_Price_Per_Tonne,Qualified_Hydrogen_Supply,PWFU_Fuel_Usage_Zero_Load_MMBTU_per_h,PWFU_Heat_Rate_MMBTU_per_MWh_1,PWFU_Heat_Rate_MMBTU_per_MWh_2,PWFU_Load_Point_MW_1,PWFU_Load_Point_MW_2,CO2_Capture_Fraction,CO2_Capture_Fraction_Startup,CCS_Disposal_Cost_per_Metric_Ton,Biomass,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW -NENGREST,1,NENGREST_conventional_hydroelectric_1,conventional_hydroelectric,1,2,1,0,0,1,0,0,0,0,0,1,0.8,0,1,662.983,0,0,0,0,11.24,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.117,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 -NENG_CT,1,NENG_CT_conventional_hydroelectric_1,conventional_hydroelectric,1,15,2,0,0,1,0,0,0,0,0,1,0.8,0,1,67.7,0,0,0,0,13.54,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 -NENG_ME,1,NENG_ME_conventional_hydroelectric_1,conventional_hydroelectric,1,26,3,0,0,1,0,0,0,0,0,1,0.8,0,1,327.81,0,0,0,0,7.8,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 -NENGREST,1,NENGREST_biomass_1,biomass,1,1,1,1,0,0,0,0,0,0,0,0,0.93,1,1,106.062,0,0,0,0,3.21,0,0,0,-1,-1,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,4,1,1,0,0,0,0,0,0,0,0,0.93,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,-1,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,400,6,7.2,160,250,0.9,0.6,20,0,0.0195,20,20,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,5,1,1,0,0,0,0,0,0,0,0,0.93,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,-1,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,6,1,1,0,0,0,0,0,0,0,0,0.93,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,-1,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,7,1,1,0,0,0,0,0,0,0,0,0.93,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,-1,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 -NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas_steam_turbine,1,8,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,-1,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0 -NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,0,0,0,0,0,0,0,0,0.93,0,1,1242,0,0,0,1,1242,0,0,0,-1,-1,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 -NENG_CT,1,NENG_CT_biomass_1,biomass,1,14,2,1,0,0,0,0,0,0,0,0,0.93,1,1,27.248,0,0,0,0,3.41,0,0,0,-1,-1,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,Biomass,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.6,20,1,0.0021,20,20,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,17,2,1,0,0,0,0,0,0,0,0,0.93,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,-1,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,18,2,1,0,0,0,0,0,0,0,0,0.93,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,-1,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,19,2,1,0,0,0,0,0,0,0,0,0.93,0,0,434,0,0,0,1,54.25,0,0,0,-1,-1,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,20,2,1,0,0,0,0,0,0,0,0,0.93,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,-1,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 -NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,0,0,0,0,0,0,0,0,0.93,0,1,2162.9,0,0,0,1,1081.45,0,0,0,-1,-1,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 -NENG_ME,1,NENG_ME_biomass_1,biomass,1,25,3,1,0,0,0,0,0,0,0,0,0.93,1,1,24.95,0,0,0,0,2.5,0,0,0,-1,-1,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,27,3,1,0,0,0,0,0,0,0,0,0.93,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,-1,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 -NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,28,3,1,0,0,0,0,0,0,0,0,0.93,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,-1,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,29,3,1,0,0,0,0,0,0,0,0,0.93,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,-1,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,33,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,34,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,-1,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0 -NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,35,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,-1,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,37,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,41,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,42,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,-1,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,43,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,-1,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,45,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,49,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,50,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,-1,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,51,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,-1,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,53,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 -NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind_turbine,1,10,1,0,0,0,0,0,1,0,1,0,0.8,1,1,30,0,0,0,1,30,0,0,0,-1,-1,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0 -NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind_turbine,1,11,1,0,0,0,0,0,1,0,1,0,0.8,1,1,145.8,0,0,0,1,9.75,0,0,0,-1,-1,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0 -NENGREST,1,NENGREST_solar_photovoltaic_1,solar_photovoltaic,1,13,1,0,0,0,0,0,1,0,1,0,0.8,1,1,821.4,0,0,0,1,2.6,0,0,0,-1,-1,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 -NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind_turbine,1,22,2,0,0,0,0,0,1,0,1,0,0.8,1,1,6.5,0,0,0,1,5,0,0,0,-1,-1,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 -NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar_photovoltaic,1,24,2,0,0,0,0,0,1,0,1,0,0.8,1,1,374.6,0,0,0,1,5.67,0,0,0,-1,-1,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 -NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind_turbine,1,30,3,0,0,0,0,0,1,0,1,0,0.8,1,1,1190.9,0,0,0,1,48.5,0,0,0,-1,-1,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 -NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar_photovoltaic,1,32,3,0,0,0,0,0,1,0,1,0,0.8,1,1,11.8,0,0,0,1,1.5,0,0,0,-1,-1,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 -NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,landbasedwind_ltrg1_mid_130,1,38,1,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,4888.236,0,-1,-1,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 -NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,39,1,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,20835.569,0,-1,-1,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 -NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,40,1,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,9848.442,0,-1,-1,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 -NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,46,2,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,1982.895,0,-1,-1,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0 -NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,47,2,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,17063.264,0,-1,-1,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 -NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,48,2,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,477.5,0,-1,-1,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0 -NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,54,3,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,20430.499,0,-1,-1,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 -NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,utilitypv_losangeles_mid_100_0_2,1,55,3,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,21535.709,0,-1,-1,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 -NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,0,0,0,0,0,0.95,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 -NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,1,0,0,0,0,0,0,0,0.95,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 -NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 -NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,1,0,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 -NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,1,0,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 -NENGREST,1,NENGREST_hydrogen_storage_1,hydrogen_storage,0,59,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,39761,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 -NENG_CT,1,NENG_CT_hydrogen_storage_1,hydrogen_storage,0,60,2,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,49333,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0 -NENG_ME,1,NENG_ME_hydrogen_storage_1,hydrogen_storage,0,61,3,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,38489,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 -NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,1,56,1,0,0,0,1,0,0,0,0,0,0.95,0,0,165.52,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0 -NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,1,57,2,0,0,0,1,0,0,0,0,0,0.95,0,0,47.27,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 -NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,1,58,3,0,0,0,1,0,0,0,0,0,0.95,0,0,22.56,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 -NENGREST,1,NENGREST_small_hydroelectric_1,small_hydroelectric,1,12,1,0,0,0,0,1,0,0,0,0,0,1,1,186.355,0,0,0,0,0.79,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.117,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 -NENG_CT,1,NENG_CT_small_hydroelectric_1,small_hydroelectric,1,23,2,0,0,0,0,1,0,0,0,0,0,1,1,18.711,0,0,0,0,0.57,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 -NENG_ME,1,NENG_ME_small_hydroelectric_1,small_hydroelectric,1,31,3,0,0,0,0,1,0,0,0,0,0,1,1,195.266,0,0,0,0,1.1,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 -NENG_ME,0,NENG_ME_electrolyzer,hydrogen_electrolyzer,0,62,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,-1,-1,0,-1,-1,-1,125000,15000,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,55,1000,1000,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 \ No newline at end of file +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,STOR,HYDRO,FLEX,MUST_RUN,VRE,ELECTROLYZER,Num_VRE_Bins,LDS,CapRes_1,ESR_1,ESR_2,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag_1,MinCapTag_2,MinCapTag_3,Hydrogen_MWh_Per_Tonne,Electrolyzer_Min_kt,Hydrogen_Price_Per_Tonne,Qualified_Hydrogen_Supply,PWFU_Fuel_Usage_Zero_Load_MMBTU_per_h,PWFU_Heat_Rate_MMBTU_per_MWh_1,PWFU_Heat_Rate_MMBTU_per_MWh_2,PWFU_Load_Point_MW_1,PWFU_Load_Point_MW_2,CO2_Capture_Fraction,CO2_Capture_Fraction_Startup,CCS_Disposal_Cost_per_Metric_Ton,Biomass,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,MULTI_FUELS,Num_Fuels,Fuel1,Heat_Rate1_MMBTU_per_MWh,Fuel1_Min_Cofire_Level,Fuel1_Min_Cofire_Level_Start,Fuel1_Max_Cofire_Level,Fuel1_Max_Cofire_Level_Start,Fuel2,Heat_Rate2_MMBTU_per_MWh,Fuel2_Min_Cofire_Level,Fuel2_Max_Cofire_Level,Fuel2_Min_Cofire_Level_Start,Fuel2_Max_Cofire_Level_Start +NENGREST,1,NENGREST_conventional_hydroelectric_1,conventional_hydroelectric,1,2,1,0,0,1,0,0,0,0,0,1,0.8,0,1,662.983,0,0,0,0,11.24,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.117,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_conventional_hydroelectric_1,conventional_hydroelectric,1,15,2,0,0,1,0,0,0,0,0,1,0.8,0,1,67.7,0,0,0,0,13.54,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,1,NENG_ME_conventional_hydroelectric_1,conventional_hydroelectric,1,26,3,0,0,1,0,0,0,0,0,1,0.8,0,1,327.81,0,0,0,0,7.8,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_biomass_1,biomass,1,1,1,1,0,0,0,0,0,0,0,0,0.93,1,1,106.062,0,0,0,0,3.21,0,0,0,-1,-1,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.027,20,20,0,0,0,1,2,mountain_naturalgas,6.36,0,0,0.12,1,hydrogen,6.36,0,0.12,0,0.12 +NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,4,1,1,0,0,0,0,0,0,0,0,0.93,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,-1,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,400,6,7.2,160,250,0,0,-39,0,0.0195,20,20,0,0,0,1,2,mountain_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,5,1,1,0,0,0,0,0,0,0,0,0.93,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,-1,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.9,-28.936,0,0.0166,20,20,0,0,0,1,2,pacific_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,6,1,1,0,0,0,0,0,0,0,0,0.93,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,-1,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0137,20,20,0,0,0,1,2,pacific_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,7,1,1,0,0,0,0,0,0,0,0,0.93,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,-1,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0108,20,20,0,0,0,1,2,pacific_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas_steam_turbine,1,8,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,-1,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.9,-20.634,0,0.0079,20,20,0,0,0,1,2,pacific_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,0,0,0,0,0,0,0,0,0.93,0,1,1242,0,0,0,1,1242,0,0,0,-1,-1,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.005,20,20,0,0,0,1,2,pacific_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT,1,NENG_CT_biomass_1,biomass,1,14,2,1,0,0,0,0,0,0,0,0,0.93,1,1,27.248,0,0,0,0,3.41,0,0,0,-1,-1,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,Biomass,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,1,0.0021,20,20,0,0,0,1,2,pacific_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,17,2,1,0,0,0,0,0,0,0,0,0.93,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,-1,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.9,-26.5,0,0.039,20,20,0,0,0,1,2,south_atlantic_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,18,2,1,0,0,0,0,0,0,0,0,0.93,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,-1,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.017,20,20,0,0,0,1,2,south_atlantic_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,19,2,1,0,0,0,0,0,0,0,0,0.93,0,0,434,0,0,0,1,54.25,0,0,0,-1,-1,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.024,20,20,0,0,0,1,2,south_atlantic_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,20,2,1,0,0,0,0,0,0,0,0,0.93,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,-1,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.027,20,20,0,0,0,1,2,new_england_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,0,0,0,0,0,0,0,0,0.93,0,1,2162.9,0,0,0,1,1081.45,0,0,0,-1,-1,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0195,20,20,0,0,0,1,2,new_england_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_ME,1,NENG_ME_biomass_1,biomass,1,25,3,1,0,0,0,0,0,0,0,0,0.93,1,1,24.95,0,0,0,0,2.5,0,0,0,-1,-1,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.9,-24.632,0,0.0166,20,20,0,0,0,1,2,east_north_central_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,27,3,1,0,0,0,0,0,0,0,0,0.93,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,-1,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0137,20,20,0,0,0,0,1,east_north_central_coal,0,0,0,1,1,hydrogen,0,0,1,0,1 +NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,28,3,1,0,0,0,0,0,0,0,0,0.93,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,-1,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0108,20,20,0,0,0,0,1,pacific_coal,0,0,0,1,1,hydrogen,0,0,1,0,1 +NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,29,3,1,0,0,0,0,0,0,0,0,0.93,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,-1,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.9,-24.632,0,0.0079,20,20,0,0,0,1,2,east_north_central_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,33,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.005,20,20,0,0,0,1,2,east_north_central_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,34,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,-1,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0021,20,20,0,0,0,1,2,east_north_central_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,35,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,-1,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.9,-26.989,0,0.039,20,20,0,0,0,1,2,west_south_central_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,37,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.017,20,20,0,0,0,1,2,west_south_central_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,41,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.024,20,20,0,0,0,1,2,west_south_central_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,42,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,-1,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.9,-24.632,0,0.027,20,20,0,0,0,1,2,east_north_central_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,43,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,-1,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0195,20,20,0,0,0,1,2,east_north_central_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,45,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0166,20,20,0,0,0,1,2,east_north_central_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,49,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.9,-18.389,0,0.0137,20,20,0,0,0,1,2,pacific_naturalgas,7.16,0,0,1,1,hydrogen,7.16,0,0.12,0,0.12 +NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,50,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,-1,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0108,20,20,0,0,0,1,2,pacific_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,51,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,-1,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.0079,20,20,0,0,0,1,2,pacific_naturalgas,9.72,0,0,1,1,hydrogen,9.72,0,0.12,0,0.12 +NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,53,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-39,0,0.005,20,20,0,0,0,1,2,middle_atlantic_naturalgas,6.36,0,0,1,1,hydrogen,6.36,0,0.12,0,0.12 +NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind_turbine,1,10,1,0,0,0,0,0,1,0,1,0,0.8,1,1,30,0,0,0,1,30,0,0,0,-1,-1,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind_turbine,1,11,1,0,0,0,0,0,1,0,1,0,0.8,1,1,145.8,0,0,0,1,9.75,0,0,0,-1,-1,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_solar_photovoltaic_1,solar_photovoltaic,1,13,1,0,0,0,0,0,1,0,1,0,0.8,1,1,821.4,0,0,0,1,2.6,0,0,0,-1,-1,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind_turbine,1,22,2,0,0,0,0,0,1,0,1,0,0.8,1,1,6.5,0,0,0,1,5,0,0,0,-1,-1,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar_photovoltaic,1,24,2,0,0,0,0,0,1,0,1,0,0.8,1,1,374.6,0,0,0,1,5.67,0,0,0,-1,-1,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind_turbine,1,30,3,0,0,0,0,0,1,0,1,0,0.8,1,1,1190.9,0,0,0,1,48.5,0,0,0,-1,-1,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar_photovoltaic,1,32,3,0,0,0,0,0,1,0,1,0,0.8,1,1,11.8,0,0,0,1,1.5,0,0,0,-1,-1,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,landbasedwind_ltrg1_mid_130,1,38,1,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,4888.236,0,-1,-1,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,39,1,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,20835.569,0,-1,-1,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,40,1,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,9848.442,0,-1,-1,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,46,2,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,1982.895,0,-1,-1,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,47,2,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,17063.264,0,-1,-1,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,48,2,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,477.5,0,-1,-1,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,54,3,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,20430.499,0,-1,-1,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,utilitypv_losangeles_mid_100_0_2,1,55,3,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,21535.709,0,-1,-1,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,0,0,0,0,0,0.95,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,1,0,0,0,0,0,0,0,0.95,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,1,0,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,1,0,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_hydrogen_storage_1,hydrogen_storage,0,59,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,39761,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_hydrogen_storage_1,hydrogen_storage,0,60,2,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,49333,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,1,NENG_ME_hydrogen_storage_1,hydrogen_storage,0,61,3,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,38489,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,1,56,1,0,0,0,1,0,0,0,0,0,0.95,0,0,165.52,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,1,57,2,0,0,0,1,0,0,0,0,0,0.95,0,0,47.27,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,1,58,3,0,0,0,1,0,0,0,0,0,0.95,0,0,22.56,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENGREST,1,NENGREST_small_hydroelectric_1,small_hydroelectric,1,12,1,0,0,0,0,1,0,0,0,0,0,1,1,186.355,0,0,0,0,0.79,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.117,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_CT,1,NENG_CT_small_hydroelectric_1,small_hydroelectric,1,23,2,0,0,0,0,1,0,0,0,0,0,1,1,18.711,0,0,0,0,0.57,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,1,NENG_ME_small_hydroelectric_1,small_hydroelectric,1,31,3,0,0,0,0,1,0,0,0,0,0,1,1,195.266,0,0,0,0,1.1,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 +NENG_ME,0,NENG_ME_electrolyzer,hydrogen_electrolyzer,0,62,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,-1,-1,0,-1,-1,-1,125000,15000,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,55,1000,1000,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0,0,1,None,0,0,0,1,1,None,0,0,1,0,1 \ No newline at end of file diff --git a/test/MultiFuels/CO2_cap.csv b/test/MultiFuels/CO2_cap.csv new file mode 100644 index 0000000000..1b5869ce2e --- /dev/null +++ b/test/MultiFuels/CO2_cap.csv @@ -0,0 +1,2 @@ +,Network_zones,CO_2_Cap_Zone_1,CO_2_Max_tons_MWh_1,CO_2_Max_Mtons_1 +NE,z1,1,0.05,0.018 diff --git a/test/MultiFuels/Capacity_reserve_margin.csv b/test/MultiFuels/Capacity_reserve_margin.csv new file mode 100644 index 0000000000..1cda938c80 --- /dev/null +++ b/test/MultiFuels/Capacity_reserve_margin.csv @@ -0,0 +1,2 @@ +,Network_zones,CapRes_1 +NE,z1,0.156 diff --git a/test/MultiFuels/Demand_data.csv b/test/MultiFuels/Demand_data.csv new file mode 100644 index 0000000000..25a46794b6 --- /dev/null +++ b/test/MultiFuels/Demand_data.csv @@ -0,0 +1,25 @@ +Voll,Demand_Segment,Cost_of_Demand_Curtailment_per_MW,Max_Demand_Curtailment,Rep_Periods,Timesteps_per_Rep_Period,Sub_Weights,Time_Index,Demand_MW_z1 +50000,1,1,1,1,24,8760,1,11162 +,,,,,,,2,10556 +,,,,,,,3,10105 +,,,,,,,4,9878 +,,,,,,,5,9843 +,,,,,,,6,10017 +,,,,,,,7,10390 +,,,,,,,8,10727 +,,,,,,,9,11298 +,,,,,,,10,11859 +,,,,,,,11,12196 +,,,,,,,12,12321 +,,,,,,,13,12381 +,,,,,,,14,12270 +,,,,,,,15,12149 +,,,,,,,16,12219 +,,,,,,,17,13410 +,,,,,,,18,14539 +,,,,,,,19,14454 +,,,,,,,20,14012 +,,,,,,,21,13494 +,,,,,,,22,12772 +,,,,,,,23,11877 +,,,,,,,24,10874 \ No newline at end of file diff --git a/test/MultiFuels/Energy_share_requirement.csv b/test/MultiFuels/Energy_share_requirement.csv new file mode 100644 index 0000000000..50c97b4b39 --- /dev/null +++ b/test/MultiFuels/Energy_share_requirement.csv @@ -0,0 +1,2 @@ +,Network_zones,ESR_1,ESR_2 +NE,z1,0.259,0.348 diff --git a/test/MultiFuels/Fuels_data.csv b/test/MultiFuels/Fuels_data.csv new file mode 100644 index 0000000000..c3ed423cea --- /dev/null +++ b/test/MultiFuels/Fuels_data.csv @@ -0,0 +1,26 @@ +Time_Index,NG,None,H2 +0,0.05306,0,0 +1,5.28,0,16 +2,5.28,0,16 +3,5.28,0,16 +4,5.28,0,16 +5,5.28,0,16 +6,5.28,0,16 +7,5.28,0,16 +8,5.28,0,16 +9,5.28,0,16 +10,5.28,0,16 +11,5.28,0,16 +12,5.28,0,16 +13,5.28,0,16 +14,5.28,0,16 +15,5.28,0,16 +16,5.28,0,16 +17,5.28,0,16 +18,5.28,0,16 +19,5.28,0,16 +20,5.28,0,16 +21,5.28,0,16 +22,5.28,0,16 +23,5.28,0,16 +24,5.28,0,16 \ No newline at end of file diff --git a/test/MultiFuels/Generators_variability.csv b/test/MultiFuels/Generators_variability.csv new file mode 100644 index 0000000000..4e5561db1e --- /dev/null +++ b/test/MultiFuels/Generators_variability.csv @@ -0,0 +1,25 @@ +Time_Index,natural_gas_combined_cycle,solar_pv,onshore_wind,battery +1,1,0,0.889717042,1 +2,1,0,0.877715468,1 +3,1,0,0.903424203,1 +4,1,0,0.895153165,1 +5,1,0,0.757258117,1 +6,1,0,0.630928695,1 +7,1,0,0.557177782,1 +8,1,0,0.6072492,1 +9,1,0.1779,0.423417866,1 +10,1,0.429,0.007470775,1 +11,1,0.5748,0.002535942,1 +12,1,0.6484,0.002153709,1 +13,1,0.6208,0.00445132,1 +14,1,0.596,0.007711587,1 +15,1,0.5013,0.100848213,1 +16,1,0.3311,0.201802149,1 +17,1,0.0642,0.141933054,1 +18,1,0,0.567022562,1 +19,1,0,0.946024895,1 +20,1,0,0.923394203,1 +21,1,0,0.953386247,1 +22,1,0,0.929205418,1 +23,1,0,0.849528909,1 +24,1,0,0.665570974,1 \ No newline at end of file diff --git a/test/MultiFuels/Maximum_capacity_requirement.csv b/test/MultiFuels/Maximum_capacity_requirement.csv new file mode 100644 index 0000000000..ddf55ebace --- /dev/null +++ b/test/MultiFuels/Maximum_capacity_requirement.csv @@ -0,0 +1,4 @@ +MaxCapReqConstraint,ConstraintDescription,Max_MW +1,PV,50000 +2,Wind,100000 +3,Batteries,60000 diff --git a/test/MultiFuels/Minimum_capacity_requirement.csv b/test/MultiFuels/Minimum_capacity_requirement.csv new file mode 100644 index 0000000000..8593a5abcc --- /dev/null +++ b/test/MultiFuels/Minimum_capacity_requirement.csv @@ -0,0 +1,4 @@ +MinCapReqConstraint,ConstraintDescription,Min_MW +1,PV,5000 +2,Wind,10000 +3,Batteries,6000 diff --git a/test/MultiFuels/Resources/Resource_capacity_reserve_margin.csv b/test/MultiFuels/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..95ac6b3a9d --- /dev/null +++ b/test/MultiFuels/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,5 @@ +Resource,Derating_Factor_1 +natural_gas_combined_cycle,0.93 +solar_pv,0.8 +onshore_wind,0.8 +battery,0.95 \ No newline at end of file diff --git a/test/MultiFuels/Resources/Resource_energy_share_requirement.csv b/test/MultiFuels/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..c675731d0e --- /dev/null +++ b/test/MultiFuels/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,3 @@ +Resource,ESR_1,ESR_2 +solar_pv,1,1 +onshore_wind,1,1 \ No newline at end of file diff --git a/test/MultiFuels/Resources/Resource_maximum_capacity_requirement.csv b/test/MultiFuels/Resources/Resource_maximum_capacity_requirement.csv new file mode 100644 index 0000000000..7c3a97fa91 --- /dev/null +++ b/test/MultiFuels/Resources/Resource_maximum_capacity_requirement.csv @@ -0,0 +1,4 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +solar_pv,1,0,0 +onshore_wind,0,1,0 +battery,0,0,1 \ No newline at end of file diff --git a/test/MultiFuels/Resources/Resource_minimum_capacity_requirement.csv b/test/MultiFuels/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..7c3a97fa91 --- /dev/null +++ b/test/MultiFuels/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,4 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +solar_pv,1,0,0 +onshore_wind,0,1,0 +battery,0,0,1 \ No newline at end of file diff --git a/test/MultiFuels/Resources/Storage.csv b/test/MultiFuels/Resources/Storage.csv new file mode 100644 index 0000000000..06ea25d673 --- /dev/null +++ b/test/MultiFuels/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Min_Cap_MW,Min_Cap_MWh,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,region,cluster,existing_cap_mw,existing_cap_mwh +battery,1,1,1,0,0,19584,22494,4895,5622,0.15,0.15,0,0.92,0.92,1,10,NE,0,0,0 \ No newline at end of file diff --git a/test/MultiFuels/Resources/Thermal.csv b/test/MultiFuels/Resources/Thermal.csv new file mode 100644 index 0000000000..909a368630 --- /dev/null +++ b/test/MultiFuels/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,MULTI_FUELS,New_Build,Existing_cap_mw,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Reg_Max,Rsv_Max,MGA,Resource_Type,region,cluster,Num_Fuels,Fuel1,Heat_Rate1_MMBTU_per_MWh,Fuel1_Min_Cofire_Level,Fuel1_Max_Cofire_Level,Fuel1_Min_Cofire_Level_Start,Fuel1_Max_Cofire_Level_Start,Fuel2,Heat_Rate2_MMBTU_per_MWh,Fuel2_Min_Cofire_Level,Fuel2_Max_Cofire_Level,Fuel2_Min_Cofire_Level_Start,Fuel2_Max_Cofire_Level_Start +natural_gas_combined_cycle,1,1,1,1,0,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0.468,0.25,0.5,1,natural_gas_fired_combined_cycle,NE,1,2,NG,7.43,0,1,0,1,H2,7.43,0.05,1,0.05,1 \ No newline at end of file diff --git a/test/MultiFuels/Resources/Vre.csv b/test/MultiFuels/Resources/Vre.csv new file mode 100644 index 0000000000..72495af515 --- /dev/null +++ b/test/MultiFuels/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,existing_cap_mw,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,MGA,Resource_Type,region,cluster +solar_pv,1,1,1,0,0,0,85300,18760,0,9.13,1,solar_photovoltaic,NE,1 +onshore_wind,1,1,1,0,0,0,97200,43205,0.1,9.12,1,onshore_wind_turbine,NE,1 \ No newline at end of file diff --git a/test/MultiFuels/highs_settings.yml b/test/MultiFuels/highs_settings.yml new file mode 100644 index 0000000000..b9a24bf9a9 --- /dev/null +++ b/test/MultiFuels/highs_settings.yml @@ -0,0 +1,11 @@ +# HiGHS Solver Parameters +# Common solver settings +Feasib_Tol: 1.0e-05 # Primal feasibility tolerance # [type: double, advanced: false, range: [1e-10, inf], default: 1e-07] +TimeLimit: 1.0e23 # Time limit # [type: double, advanced: false, range: [0, inf], default: inf] +Pre_Solve: on # Presolve option: "off", "choose" or "on" # [type: string, advanced: false, default: "choose"] +Method: ipm #HiGHS-specific solver settings # Solver option: "simplex", "choose" or "ipm" # [type: string, advanced: false, default: "choose"] +ipm_optimality_tolerance: 1e-04 + +# run the crossover routine for ipx +# [type: string, advanced: "on", range: {"off", "on"}, default: "off"] +run_crossover: "on" diff --git a/test/runtests.jl b/test/runtests.jl index 33c5b5969e..94099304ea 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -45,7 +45,11 @@ end include("test_multistage.jl") end + @testset "Multi Fuels" begin + include("test_multifuels.jl") + end + @testset "Compute Conflicts" begin include("test_compute_conflicts.jl") end -end \ No newline at end of file +end diff --git a/test/test_load_resource_data.jl b/test/test_load_resource_data.jl index e84a0cf900..891913bc37 100644 --- a/test/test_load_resource_data.jl +++ b/test/test_load_resource_data.jl @@ -90,7 +90,27 @@ function test_load_scaled_resources_data(gen, dfGen) @test GenX.co2_capture_fraction_startup.(gen) == dfGen.co2_capture_fraction_startup @test GenX.ccs_disposal_cost_per_metric_ton.(gen) == dfGen.ccs_disposal_cost_per_metric_ton @test GenX.biomass.(gen) == dfGen.biomass - + ## multi-fuel flags + @test GenX.ids_with_fuel(gen) == dfGen[(dfGen[!,:fuel] .!= "None"),:r_id] + @test GenX.ids_with_positive(gen, GenX.co2_capture_fraction) == dfGen[dfGen.co2_capture_fraction .>0,:r_id] + @test GenX.ids_with_singlefuel(gen) == dfGen[dfGen.multi_fuels.!=1,:r_id] + @test GenX.ids_with_multifuels(gen) == dfGen[dfGen.multi_fuels.==1,:r_id] + if !isempty(GenX.ids_with_multifuels(gen)) + MULTI_FUELS = GenX.ids_with_multifuels(gen) + max_fuels = maximum(GenX.num_fuels.(gen)) + for i in 1:max_fuels + @test findall(g -> GenX.max_cofire_cols(g, tag=i) < 1, gen[MULTI_FUELS]) == dfGen[dfGen[!, Symbol(string("fuel",i, "_max_cofire_level"))].< 1, :][!, :r_id] + @test findall(g -> GenX.max_cofire_start_cols(g, tag=i) < 1, gen[MULTI_FUELS]) == dfGen[dfGen[!, Symbol(string("fuel",i, "_max_cofire_level_start"))].< 1, :][!, :r_id] + @test findall(g -> GenX.min_cofire_cols(g, tag=i) > 0, gen[MULTI_FUELS]) == dfGen[dfGen[!, Symbol(string("fuel",i, "_min_cofire_level"))].> 0, :][!, :r_id] + @test findall(g -> GenX.min_cofire_start_cols(g, tag=i) > 0, gen[MULTI_FUELS]) == dfGen[dfGen[!, Symbol(string("fuel",i, "_min_cofire_level_start"))].> 0, :][!, :r_id] + @test GenX.fuel_cols.(gen, tag=i) == dfGen[!,Symbol(string("fuel",i))] + @test GenX.heat_rate_cols.(gen, tag=i) == dfGen[!,Symbol(string("heat_rate",i, "_mmbtu_per_mwh"))] + @test GenX.max_cofire_cols.(gen, tag=i) == dfGen[!,Symbol(string("fuel",i, "_max_cofire_level"))] + @test GenX.min_cofire_cols.(gen, tag=i) == dfGen[!,Symbol(string("fuel",i, "_min_cofire_level"))] + @test GenX.max_cofire_start_cols.(gen, tag=i) == dfGen[!,Symbol(string("fuel",i, "_max_cofire_level_start"))] + @test GenX.min_cofire_start_cols.(gen, tag=i) == dfGen[!,Symbol(string("fuel",i, "_min_cofire_level_start"))] + end + end @test GenX.ids_with_mga(gen) == dfGen[dfGen.mga .== 1, :r_id] @test GenX.region.(gen) == dfGen.region @@ -116,6 +136,7 @@ function test_add_modules_to_resources(gen, dfGen) end function test_inputs_keys(inputs, inputs_true) + @test inputs["G"] == inputs_true["G"] @test inputs["HYDRO_RES"] == inputs_true["HYDRO_RES"] @@ -145,13 +166,14 @@ function test_inputs_keys(inputs, inputs_true) @test Set(inputs["NEW_CAP"]) == inputs_true["NEW_CAP"] @test Set(inputs["NEW_CAP_ENERGY"]) == inputs_true["NEW_CAP_ENERGY"] @test Set(inputs["NEW_CAP_CHARGE"]) == inputs_true["NEW_CAP_CHARGE"] - @test string.(inputs["slope_cols"]) == lowercase.(string.(inputs_true["slope_cols"])) - @test string.(inputs["intercept_cols"]) == lowercase.(string.(inputs_true["intercept_cols"])) - @test inputs["PWFU_data"] == rename!(inputs_true["PWFU_data"], lowercase.(names(inputs_true["PWFU_data"]))) - @test inputs["PWFU_Num_Segments"] == inputs_true["PWFU_Num_Segments"] - @test inputs["THERM_COMMIT_PWFU"] == inputs_true["THERM_COMMIT_PWFU"] - @test inputs["HAS_FUEL"] == inputs_true["HAS_FUEL"] + if isempty(inputs["MULTI_FUELS"]) + @test string.(inputs["slope_cols"]) == lowercase.(string.(inputs_true["slope_cols"])) + @test string.(inputs["intercept_cols"]) == lowercase.(string.(inputs_true["intercept_cols"])) + @test inputs["PWFU_data"] == rename!(inputs_true["PWFU_data"], lowercase.(names(inputs_true["PWFU_data"]))) + @test inputs["PWFU_Num_Segments"] == inputs_true["PWFU_Num_Segments"] + @test inputs["THERM_COMMIT_PWFU"] == inputs_true["THERM_COMMIT_PWFU"] + end @test inputs["R_ZONES"] == inputs_true["R_ZONES"] @test inputs["RESOURCE_ZONES"] == inputs_true["RESOURCE_ZONES"] diff --git a/test/test_multifuels.jl b/test/test_multifuels.jl new file mode 100644 index 0000000000..cb6f9b089f --- /dev/null +++ b/test/test_multifuels.jl @@ -0,0 +1,40 @@ +module TestMultiFuels + +using Test + +include(joinpath(@__DIR__, "utilities.jl")) + +obj_true = 5494.7919354 +test_path = "MultiFuels" + +# Define test inputs +genx_setup = Dict( + "Trans_Loss_Segments" => 1, + "EnergyShareRequirement" => 1, + "CapacityReserveMargin" => 1, + "CO2Cap" => 0, + "StorageLosses" => 1, + "MinCapReq" => 1, + "MaxCapReq" => 1, + "ParameterScale" => 1, + "WriteShadowPrices" => 1, + "UCommit" => 2, +) + +# Run the case and get the objective value and tolerance +EP, _, _ = redirect_stdout(devnull) do + run_genx_case_testing(test_path, genx_setup) +end +obj_test = objective_value(EP) +optimal_tol_rel = get_attribute(EP, "ipm_optimality_tolerance") +optimal_tol = optimal_tol_rel * obj_test # Convert to absolute tolerance + +# Test the objective value +test_result = @test obj_test ≈ obj_true atol = optimal_tol + +# Round objective value and tolerance. Write to test log. +obj_test = round_from_tol!(obj_test, optimal_tol) +optimal_tol = round_from_tol!(optimal_tol, optimal_tol) +write_testlog(test_path, obj_test, optimal_tol, test_result) + +end # module TestMultiFuels \ No newline at end of file