Skip to content

Commit

Permalink
Update the example case for multi-fuels
Browse files Browse the repository at this point in the history
1. Replace the threeZone_multiFules example case with a more simplified example case, which only has 24 hours and one zone.
2. Edit README.MD for the example case
  • Loading branch information
qluo0320github committed Nov 28, 2023
1 parent 7c80cc7 commit 80d51a2
Show file tree
Hide file tree
Showing 31 changed files with 132 additions and 26,353 deletions.
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
,Network_zones,CapRes_1
NE,z1,0.156
25 changes: 25 additions & 0 deletions Example_Systems/SmallNewEngland/OneZone_MultiFuels/Demand_data.csv
Original file line number Diff line number Diff line change
@@ -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,24,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
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
,Network_zones,ESR_1,ESR_2
NE,z1,0.259,0.348
26 changes: 26 additions & 0 deletions Example_Systems/SmallNewEngland/OneZone_MultiFuels/Fuels_data.csv
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,MULTI_FUELS,New_Build,Can_Retire,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,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,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MaxCapTag_1,MaxCapTag_2,MaxCapTag_3,MinCapTag_1,MinCapTag_2,MinCapTag_3,MGA,Resource_Type,CapRes_1,ESR_1,ESR_2,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,0,0,0,0,0,0,0,1,1,0,0,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,NE,1,2,NG,7.43,0,1,0,1,H2,7.43,0.05,1,0.05,1
solar_pv,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,solar_photovoltaic,0.8,1,1,NE,1,1,None,0,0,0,0,0,None,0,0,0,0,1
onshore_wind,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,onshore_wind_turbine,0.8,1,1,NE,1,1,None,0,0,0,0,1,None,0,0,0,0,1
battery,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,0,0,1,0,0,1,0,battery_mid,0.95,0,0,NE,0,1,None,0,0,0,0,0,None,0,0,0,0,1
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
MaxCapReqConstraint,ConstraintDescription,Max_MW
1,PV,50000
2,Wind,100000
3,Batteries,60000
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
MinCapReqConstraint,ConstraintDescription,Min_MW
1,PV,5000
2,Wind,10000
3,Batteries,6000
15 changes: 15 additions & 0 deletions Example_Systems/SmallNewEngland/OneZone_MultiFuels/README.md
Original file line number Diff line number Diff line change
@@ -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")`

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.
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -1,23 +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: 1 # Transmission network expansionl; 0 = not active; 1 = active systemwide
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: 0 # Minimum qualifying renewables penetration; 0 = not active; 1 = active systemwide
CapacityReserveMargin: 0 # Number of capacity reserve margin constraints; 0 = not active; 1 = active systemwide
CO2Cap: 2 # CO2 emissions cap; 0 = not active (no CO2 emission limit); 1 = mass-based emission limit constraint; 2 = load + rate-based emission limit constraint; 3 = generation + rate-based emission limit constraint
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: 0 # Activate maximum technology carveout constraints; 0 = not active; 1 = active
Solver: HiGHS # Available solvers: Gurobi, CPLEX, CLP, SCIP
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
OperationWrapping: 1 # Sets temporal resolution of the model; 0 = single period to represent the full year, with first-last time step linked; 1 = multiple representative periods
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: 1 # Time domain reduce (i.e. cluster) inputs based on Load_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)
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
MultiStage: 0 # Multi-stage modeling; 0 if single-stage; 1 if multi-stage.
MethodofMorris: 0 #Flag for turning on the Method of Morris analysis
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ 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: 4 # Algorithm used to solve continuous models (including MIP root relaxation).
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: -1 # Barrier crossver strategy.
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.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ Feasib_Tol: 1.0e-05 # Primal feasibility tolerance # [type: double, advan
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: ipm #HiGHS-specific solver settings # Solver option: "simplex", "choose" or "ipm" # [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"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ Threshold: 0.05
# The number of times to repeat each kmeans/kmedoids clustering at the same setting.
nReps: 100

# - LoadWeight
# Default 1, this is an optional multiplier on load columns in order to prioritize
# better fits for load profiles over resource capacity factor profiles.
LoadWeight: 1
# - DemandWeight
# Default 1, this is an optional multiplier on demand columns in order to prioritize
# better fits for demand profiles over resource capacity factor profiles.
DemandWeight: 1

# - WeightTotal
# Default 8760, the sum to which the relative weights of representative periods will be scaled.
Expand All @@ -82,8 +82,8 @@ ClusterFuelPrices: 1

# - UseExtremePeriods
# Either 'yes' or 'no', this designates whether or not to include
# outliers (by performance or load/resource extreme) as their own representative periods.
# This setting automatically includes the periods with maximum load, minimum solar cf and
# outliers (by performance or demand/resource extreme) as their own representative periods.
# This setting automatically includes the periods with maximum demand, minimum solar cf and
# minimum wind cf as extreme periods.
UseExtremePeriods: 1

Expand All @@ -94,17 +94,17 @@ UseExtremePeriods: 1
# stage separately
MultiStageConcatenate: 0

# STILL IN DEVELOPMENT - Currently just uses integral max load, integral min PV and wind.
# STILL IN DEVELOPMENT - Currently just uses integral max demand, integral min PV and wind.
# - ExtremePeriods
# Use this to define which periods to be included among the final representative periods
# as "Extreme Periods".
# Select by profile type: load ("Load"), solar PV capacity factors ("PV"), and wind capacity factors ("Wind").
# Select by profile type: demand ("Demand"), solar PV capacity factors ("PV"), and wind capacity factors ("Wind").
# Select whether to examine these profiles by zone ("Zone") or across the whole system ("System").
# Select whether to look for absolute max/min at the timestep level ("Absolute")
# or max/min sum across the period ("Integral").
# Select whether you want the maximum ("Max") or minimum ("Min") (of the prior type) for each profile type.
ExtremePeriods:
Load:
Demand:
Zone:
Absolute:
Max: 0
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Loading

0 comments on commit 80d51a2

Please sign in to comment.