diff --git a/CHANGELOG.md b/CHANGELOG.md
index 27ac1fffb4..9934db1e08 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Include comprehensive list of all settings flags (that are currently in GenX) in the docs (#721)
- Allow `load_vre_stor_variability!` to load only wind or solar resources as
part of the VRE_STOR module (#728)
+- Fix typo in HydrogenMinimumProduction setting key (#746)
### Added
- Add objective scaler for addressing problem ill-conditioning (#667)
diff --git a/Project.toml b/Project.toml
index 6031e27b88..3a446fe8b0 100644
--- a/Project.toml
+++ b/Project.toml
@@ -1,7 +1,7 @@
name = "GenX"
uuid = "5d317b1e-30ec-4ed6-a8ce-8d2d88d7cfac"
authors = ["Bonaldo, Luca", "Chakrabarti, Sambuddha", "Cheng, Fangwei", "Ding, Yifu", "Jenkins, Jesse D.", "Luo, Qian", "Macdonald, Ruaridh", "Mallapragada, Dharik", "Manocha, Aneesha", "Mantegna, Gabe ", "Morris, Jack", "Patankar, Neha", "Pecci, Filippo", "Schwartz, Aaron", "Schwartz, Jacob", "Schivley, Greg", "Sepulveda, Nestor", "Xu, Qingyu", "Zhou, Justin"]
-version = "0.4.0-dev.17"
+version = "0.4.0-dev.18"
[deps]
CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
diff --git a/docs/src/User_Guide/model_configuration.md b/docs/src/User_Guide/model_configuration.md
index b1857bec2c..dca1707581 100644
--- a/docs/src/User_Guide/model_configuration.md
+++ b/docs/src/User_Guide/model_configuration.md
@@ -78,7 +78,7 @@ The following tables summarize the model settings parameters and their default/p
|MaxCapReq | Maximum system-wide technology capacity limit constraints.|
|| 1 = if one or more maximum technology capacity constraints are specified|
|| 0 = otherwise|
-|HydrogenMimimumProduction | Hydrogen production requirements from electrolyzers.|
+|HydrogenMinimumProduction | Hydrogen production requirements from electrolyzers.|
|1 = Constraint is active.|
||0 = Constraint is not active.|
diff --git a/docs/src/User_Guide/model_input.md b/docs/src/User_Guide/model_input.md
index 9b31558655..962adcdacd 100644
--- a/docs/src/User_Guide/model_input.md
+++ b/docs/src/User_Guide/model_input.md
@@ -524,7 +524,7 @@ This policy is applied when if `CapacityReserveMargin > 0` in the settings file.
|Resource| Resource name corresponding to a resource in one of the resource data files described above.|
|Derating\_Factor\_*| Fraction of the resource capacity eligible for contributing to the capacity reserve margin constraint (e.g. derate factor).|
-This policy is applied when if `HydrogenMimimumProduction = 1` in the settings file. \* corresponds to the ith row of the file `Hydrogen_demand.csv`.
+This policy is applied when if `HydrogenMinimumProduction = 1` in the settings file. \* corresponds to the ith row of the file `Hydrogen_demand.csv`.
##### Table 16: Hydrogen demand policy parameters in Resource\_hydrogen\_demand.csv
---
diff --git a/example_systems/2_three_zones_w_electrolyzer/README.md b/example_systems/2_three_zones_w_electrolyzer/README.md
index 56b54460ce..1708d0dbef 100644
--- a/example_systems/2_three_zones_w_electrolyzer/README.md
+++ b/example_systems/2_three_zones_w_electrolyzer/README.md
@@ -16,7 +16,7 @@ julia> cd("example_systems/2_three_zones_w_electrolyzer/")
$ cd example_systems/2_three_zones_w_electrolyzer/
```
-Next, ensure that your settings in `settings/GenX_settings.yml` are correct. The default settings use the solver `HiGHS`, time domain reduced input data (`TimeDomainReduction: 1`), regional requirements for hydrogen production (`HydrogenMimimumProduction: 1`), and minimum capacity requirement policy (`MinCapReq: 1`) as specified in the `policies/Minimum_capacity_requirement.csv` file. Other optional policies include a capacity reserve margin, an energy share requirement (such as renewable portfolio standard (RPS) or clean electricity standard (CES) policies), a CO2 emissions cap, and a maximum capacity requirement policy (see the documentation for more details).
+Next, ensure that your settings in `settings/GenX_settings.yml` are correct. The default settings use the solver `HiGHS`, time domain reduced input data (`TimeDomainReduction: 1`), regional requirements for hydrogen production (`HydrogenMinimumProduction: 1`), and minimum capacity requirement policy (`MinCapReq: 1`) as specified in the `policies/Minimum_capacity_requirement.csv` file. Other optional policies include a capacity reserve margin, an energy share requirement (such as renewable portfolio standard (RPS) or clean electricity standard (CES) policies), a CO2 emissions cap, and a maximum capacity requirement policy (see the documentation for more details).
Once the settings are confirmed, run the model with the `Run.jl` script in the example directory:
diff --git a/example_systems/2_three_zones_w_electrolyzer/settings/genx_settings.yml b/example_systems/2_three_zones_w_electrolyzer/settings/genx_settings.yml
index 0cb34b3526..e1de130807 100644
--- a/example_systems/2_three_zones_w_electrolyzer/settings/genx_settings.yml
+++ b/example_systems/2_three_zones_w_electrolyzer/settings/genx_settings.yml
@@ -5,4 +5,4 @@ HydrogenHourlyMatching: 1 # Hydrogen electrolyzer hourly supply matching require
ParameterScale: 1 # Turn on parameter scaling wherein demand, capacity and power variables are defined in GW rather than MW. 0 = not active; 1 = active systemwide
TimeDomainReduction: 1 # 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)
WriteShadowPrices: 1 # Write shadow prices of LP or relaxed MILP; 0 = not active; 1 = active
-HydrogenMimimumProduction: 1 # Hydrogen production requirement; 0 = not active; 1 = active, meet regional level H2 production requirements
\ No newline at end of file
+HydrogenMinimumProduction: 1 # Hydrogen production requirement; 0 = not active; 1 = active, meet regional level H2 production requirements
\ No newline at end of file
diff --git a/example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/README.md b/example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/README.md
index 279c1b21b0..b92fb3dca8 100644
--- a/example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/README.md
+++ b/example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/README.md
@@ -16,7 +16,7 @@ julia> cd("example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/"
$ cd example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/
```
-Next, ensure that your settings in `settings/genx_settings.yml` are correct. The linear clustering unit commitment method (settings["UCommit"] = 2) is used. The default settings use the solver `HiGHS`, time domain reduced input data (`TimeDomainReduction: 0`), regional requirements for hydrogen production (`HydrogenMimimumProduction: 1`), minimum and maximum capacity requirement policies (`MinCapReq: 1`, `MaxCapReq: 1`), a capacity reserve margin, an energy share requirement (such as renewable portfolio standard (RPS) or clean electricity standard (CES) policies), and a CO2 emissions cap (see the documentation for more details). Each policy is specified in the corresponding file inside the `policies` folder. A mass-based carbon cap of 50 gCO2 per kWh is specified in the `policies/CO2_cap.csv` input file.
+Next, ensure that your settings in `settings/genx_settings.yml` are correct. The linear clustering unit commitment method (settings["UCommit"] = 2) is used. The default settings use the solver `HiGHS`, time domain reduced input data (`TimeDomainReduction: 0`), regional requirements for hydrogen production (`HydrogenMinimumProduction: 1`), minimum and maximum capacity requirement policies (`MinCapReq: 1`, `MaxCapReq: 1`), a capacity reserve margin, an energy share requirement (such as renewable portfolio standard (RPS) or clean electricity standard (CES) policies), and a CO2 emissions cap (see the documentation for more details). Each policy is specified in the corresponding file inside the `policies` folder. A mass-based carbon cap of 50 gCO2 per kWh is specified in the `policies/CO2_cap.csv` input file.
Once the settings are confirmed, run the model with the `Run.jl` script in the example directory:
diff --git a/example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/settings/genx_settings.yml b/example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/settings/genx_settings.yml
index e34fdc5deb..c53bd4b62b 100644
--- a/example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/settings/genx_settings.yml
+++ b/example_systems/8_three_zones_w_colocated_VRE_storage_electrolyzers/settings/genx_settings.yml
@@ -5,4 +5,4 @@ HydrogenHourlyMatching: 0 # Hydrogen electrolyzer hourly supply matching require
ParameterScale: 0 # Turn on parameter scaling wherein demand, capacity and power variables are defined in GW rather than MW. 0 = not active; 1 = active systemwide
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)
WriteShadowPrices: 1 # Write shadow prices of LP or relaxed MILP; 0 = not active; 1 = active
-HydrogenMimimumProduction: 1 # Hydrogen production requirement; 0 = not active; 1 = active, meet regional level H2 production requirements
\ No newline at end of file
+HydrogenMinimumProduction: 1 # Hydrogen production requirement; 0 = not active; 1 = active, meet regional level H2 production requirements
\ No newline at end of file
diff --git a/src/configure_settings/configure_settings.jl b/src/configure_settings/configure_settings.jl
index 96d54e899e..61d9a1683f 100644
--- a/src/configure_settings/configure_settings.jl
+++ b/src/configure_settings/configure_settings.jl
@@ -24,7 +24,7 @@ function default_settings()
"MultiStage" => 0,
"MethodofMorris" => 0,
"IncludeLossesInESR" => 0,
- "HydrogenMimimumProduction" => 0,
+ "HydrogenMinimumProduction" => 0,
"EnableJuMPStringNames" => false,
"HydrogenHourlyMatching" => 0,
"DC_OPF" => 0,
diff --git a/src/load_inputs/load_energy_share_requirement.jl b/src/load_inputs/load_energy_share_requirement.jl
index 02b96fe7e7..e3205196b7 100644
--- a/src/load_inputs/load_energy_share_requirement.jl
+++ b/src/load_inputs/load_energy_share_requirement.jl
@@ -1,7 +1,7 @@
@doc raw"""
load_energy_share_requirement!(setup::Dict, path::AbstractString, inputs::Dict)
-Read input parameters related to mimimum energy share requirement constraints
+Read input parameters related to minimum energy share requirement constraints
(e.g. renewable portfolio standard or clean electricity standard policies)
"""
function load_energy_share_requirement!(setup::Dict, path::AbstractString, inputs::Dict)
diff --git a/src/load_inputs/load_inputs.jl b/src/load_inputs/load_inputs.jl
index 894eb6db21..aa1ee28a0e 100644
--- a/src/load_inputs/load_inputs.jl
+++ b/src/load_inputs/load_inputs.jl
@@ -71,7 +71,7 @@ function load_inputs(setup::Dict, path::AbstractString)
end
# Read in hydrogen damand data
- if setup["HydrogenMimimumProduction"] == 1
+ if setup["HydrogenMinimumProduction"] == 1
load_hydrogen_demand!(setup, policies_path, inputs)
end
diff --git a/src/load_inputs/load_minimum_capacity_requirement.jl b/src/load_inputs/load_minimum_capacity_requirement.jl
index d30f2d6425..e0561b126d 100644
--- a/src/load_inputs/load_minimum_capacity_requirement.jl
+++ b/src/load_inputs/load_minimum_capacity_requirement.jl
@@ -1,7 +1,7 @@
@doc raw"""
load_minimum_capacity_requirement!(path::AbstractString, inputs::Dict, setup::Dict)
-Read input parameters related to mimimum capacity requirement constraints (e.g. technology specific deployment mandates)
+Read input parameters related to minimum capacity requirement constraints (e.g. technology specific deployment mandates)
"""
function load_minimum_capacity_requirement!(path::AbstractString, inputs::Dict, setup::Dict)
filename = "Minimum_capacity_requirement.csv"
diff --git a/src/load_inputs/load_resources_data.jl b/src/load_inputs/load_resources_data.jl
index c383558e18..cdcac0a781 100644
--- a/src/load_inputs/load_resources_data.jl
+++ b/src/load_inputs/load_resources_data.jl
@@ -43,7 +43,7 @@ function _get_policyfile_info()
min_cap = (filenames = min_cap_filenames, setup_param = "MinCapReq"),
max_cap = (filenames = max_cap_filenames, setup_param = "MaxCapReq"),
h2_demand = (
- filenames = h2_demand_filenames, setup_param = "HydrogenMimimumProduction"))
+ filenames = h2_demand_filenames, setup_param = "HydrogenMinimumProduction"))
return policyfile_info
end
diff --git a/src/model/generate_model.jl b/src/model/generate_model.jl
index e3f96484e3..08d530f10e 100644
--- a/src/model/generate_model.jl
+++ b/src/model/generate_model.jl
@@ -110,7 +110,7 @@ function generate_model(setup::Dict, inputs::Dict, OPTIMIZER::MOI.OptimizerWithA
create_empty_expression!(EP, :eMaxCapRes, inputs["NumberOfMaxCapReqs"])
end
- if setup["HydrogenMimimumProduction"] > 0
+ if setup["HydrogenMinimumProduction"] > 0
create_empty_expression!(EP, :eH2DemandRes, inputs["NumberOfH2DemandReqs"])
end
@@ -229,7 +229,7 @@ function generate_model(setup::Dict, inputs::Dict, OPTIMIZER::MOI.OptimizerWithA
end
# Hydrogen demand limits
- if setup["HydrogenMimimumProduction"] > 0
+ if setup["HydrogenMinimumProduction"] > 0
hydrogen_demand!(EP, inputs, setup)
end
diff --git a/src/model/resources/hydrogen/electrolyzer.jl b/src/model/resources/hydrogen/electrolyzer.jl
index d31c3716ca..3259b23047 100644
--- a/src/model/resources/hydrogen/electrolyzer.jl
+++ b/src/model/resources/hydrogen/electrolyzer.jl
@@ -106,7 +106,7 @@ function electrolyzer!(EP::Model, inputs::Dict, setup::Dict)
for t in 1:T)
end)
- if setup["HydrogenMimimumProduction"] == 1
+ if setup["HydrogenMinimumProduction"] == 1
@expression(EP, eH2ProductionRes[h2demand = 1:inputs["NumberOfH2DemandReqs"]],
sum(EP[:eH2Production][y]
for y in ids_with_policy(gen, h2_demand, tag = h2demand)))
diff --git a/src/write_outputs/write_charge.jl b/src/write_outputs/write_charge.jl
index 20602d3979..ef605f1483 100644
--- a/src/write_outputs/write_charge.jl
+++ b/src/write_outputs/write_charge.jl
@@ -28,7 +28,7 @@ function write_charge(path::AbstractString, inputs::Dict, setup::Dict, EP::Model
if !isempty(FLEX)
charge[FLEX, :] = value.(EP[:vCHARGE_FLEX][FLEX, :]) * scale_factor
end
- if (setup["HydrogenMimimumProduction"] > 0) & (!isempty(ELECTROLYZER))
+ if (setup["HydrogenMinimumProduction"] > 0) & (!isempty(ELECTROLYZER))
charge[ELECTROLYZER, :] = value.(EP[:vUSE][ELECTROLYZER, :]) * scale_factor
end
if !isempty(VS_STOR)
diff --git a/src/write_outputs/write_outputs.jl b/src/write_outputs/write_outputs.jl
index 0ad929d24d..d89741c124 100644
--- a/src/write_outputs/write_outputs.jl
+++ b/src/write_outputs/write_outputs.jl
@@ -431,7 +431,7 @@ function write_outputs(EP::Model, path::AbstractString, setup::Dict, inputs::Dic
println(elapsed_time_max_cap_req)
end
- if setup["HydrogenMimimumProduction"] == 1 && has_duals(EP)
+ if setup["HydrogenMinimumProduction"] == 1 && has_duals(EP)
if output_settings_d["WriteHydrogenPrices"]
elapsed_time_hydrogen_prices = @elapsed write_hydrogen_prices(path,
inputs,
diff --git a/test/test_electrolyzer.jl b/test/test_electrolyzer.jl
index 5b60769746..2d70923f30 100644
--- a/test/test_electrolyzer.jl
+++ b/test/test_electrolyzer.jl
@@ -13,7 +13,7 @@ genx_setup = Dict("Trans_Loss_Segments" => 1,
"StorageLosses" => 1,
"HydrogenHourlyMatching" => 1,
"ParameterScale" => 1,
- "HydrogenMimimumProduction" => 1
+ "HydrogenMinimumProduction" => 1
)
# Run the case and get the objective value and tolerance