From cd2a3512ce5771f206b46b5d40b0e139b9dc5943 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Mon, 19 Aug 2024 13:58:16 -0400 Subject: [PATCH 1/5] Fix typo in HydrogenMinimumProduction key --- docs/src/User_Guide/model_configuration.md | 2 +- docs/src/User_Guide/model_input.md | 2 +- example_systems/2_three_zones_w_electrolyzer/README.md | 2 +- .../2_three_zones_w_electrolyzer/settings/genx_settings.yml | 2 +- .../README.md | 2 +- .../settings/genx_settings.yml | 2 +- src/configure_settings/configure_settings.jl | 2 +- src/load_inputs/load_inputs.jl | 2 +- src/load_inputs/load_resources_data.jl | 2 +- src/model/generate_model.jl | 4 ++-- src/model/resources/hydrogen/electrolyzer.jl | 2 +- src/write_outputs/write_charge.jl | 2 +- src/write_outputs/write_outputs.jl | 2 +- test/test_electrolyzer.jl | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) 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_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_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 From 10d21deb742aa38b1de41e9267e09ab216dfbdd1 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Mon, 19 Aug 2024 14:11:50 -0400 Subject: [PATCH 2/5] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27ac1fffb4..27555a2491 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 ### Added - Add objective scaler for addressing problem ill-conditioning (#667) From 6a10fc9723a860e8f6645443c9ebabfa48628e44 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Mon, 19 Aug 2024 14:12:56 -0400 Subject: [PATCH 3/5] Update develop version to 0.4.0-dev.18 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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" From 8b4ec285c8b78323e0bf3458f0aaadfb76cbe995 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Mon, 19 Aug 2024 14:26:28 -0400 Subject: [PATCH 4/5] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27555a2491..9934db1e08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +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 +- Fix typo in HydrogenMinimumProduction setting key (#746) ### Added - Add objective scaler for addressing problem ill-conditioning (#667) From 2ddb9567168f4d14b9e306d4118a9441043854a5 Mon Sep 17 00:00:00 2001 From: Jacob Schwartz Date: Mon, 19 Aug 2024 14:40:57 -0400 Subject: [PATCH 5/5] Caught two more of the same typo --- src/load_inputs/load_energy_share_requirement.jl | 2 +- src/load_inputs/load_minimum_capacity_requirement.jl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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_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"