Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
6fdd843
added dictionary utilities
elenya-grant Apr 2, 2026
40d7474
bugfix in setup() and added start of a test
elenya-grant Apr 3, 2026
6df2151
added fix to calling check_inputs
elenya-grant Apr 3, 2026
55f77a2
fixed check_inputs
elenya-grant Apr 3, 2026
2de0b2c
added another check in check_inputs
elenya-grant Apr 3, 2026
52d838a
updated error messages in check_inputs and fixed example 1
elenya-grant Apr 3, 2026
d878c66
Added tests
elenya-grant Apr 3, 2026
9ef925a
added another subtest to test_check_inputs
elenya-grant Apr 3, 2026
6cb3950
fixed tech configs for examples
elenya-grant Apr 3, 2026
6cca0a8
added some inline comments
elenya-grant Apr 6, 2026
fc6ba58
Merge remote-tracking branch 'h2i_upstream/develop' into check/shared…
elenya-grant Apr 6, 2026
72b21be
Merge branch 'develop' into check/shared_inputs
johnjasa Apr 6, 2026
6ea0ada
check for requisite models and return if none
RHammond2 Apr 6, 2026
99560ce
perform check from note and collapse checking logic
RHammond2 Apr 6, 2026
ecf8f1d
collapse user input regeneration to reduce number of loops
RHammond2 Apr 6, 2026
e946c53
remove nested looping approach
RHammond2 Apr 6, 2026
136323e
move assert to proper context manager level
RHammond2 Apr 6, 2026
010da09
add indent level back
RHammond2 Apr 7, 2026
7b14313
fix min combinations logic for passing tests
RHammond2 Apr 7, 2026
58a6a22
flatten improperly shared parameterization checking logic
RHammond2 Apr 7, 2026
b72fa8d
update test to include multiple categories for improperly shared
RHammond2 Apr 7, 2026
95676a4
fix typo
RHammond2 Apr 7, 2026
329b523
update docstring
RHammond2 Apr 7, 2026
7b342fe
added handling for combined cost and performance models
elenya-grant Apr 7, 2026
73f8d51
Merge remote-tracking branch 'h2i_upstream/develop' into check/shared…
elenya-grant Apr 7, 2026
99cfd59
Added tech config fpath to the error messages for parameter checking
johnjasa Apr 8, 2026
c345464
Merge branch 'develop' into check/shared_inputs
johnjasa Apr 8, 2026
56754d1
changlog
kbrunik Apr 9, 2026
eb44e5e
changed strict to True for six converter models
elenya-grant Apr 9, 2026
b9eff53
reverted strict setting for electrolyzer
elenya-grant Apr 9, 2026
a77d4a1
Merge branch 'develop' into check/shared_inputs
johnjasa Apr 10, 2026
7e56e50
Merge branch 'develop' into check/shared_inputs
johnjasa Apr 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
- Added oxygen production metrics and as outputs to `ECOElectrolyzerPerformanceModel` [PR 642](https://github.com/NatLabRockies/H2Integrate/pull/642)
- Bugfix to allow for one resource to be connected to multiple technologies [PR 655](https://github.com/NatLabRockies/H2Integrate/pull/655)
- Removed the last of the logic that was based on technology names rather than model classes [PR 654](https://github.com/NatLabRockies/H2Integrate/pull/654)
- Add input checking for extraneous or mis-categorized input parameters for technologies that have a defined control strategy or dispatch rule set [PR 647](https://github.com/NatLabRockies/H2Integrate/pull/647)
- Bumps the `coin-or-cbc` dependency to at least 2.10.12 to enable easy Windows compatibility. [PR 590](https://github.com/NatLabRockies/H2Integrate/pull/590)
- Uses the optional installation parameter `extras` to combine all analysis extras, and remove them
from the `develop` options. [PR 590](https://github.com/NatLabRockies/H2Integrate/pull/590)
Expand Down
13 changes: 5 additions & 8 deletions examples/01_onshore_steel_mn/tech_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,7 @@ technologies:
dispatch_rule_set:
model: PyomoDispatchGenericConverter
model_inputs:
performance_parameters:
commodity: electricity
commodity_rate_units: kW
dispatch_rule_parameters:
shared_parameters:
commodity: electricity
commodity_rate_units: kW
battery:
Expand All @@ -81,20 +78,20 @@ technologies:
commodity_rate_units: kW
max_charge_rate: 375740.4 # kW
max_capacity: 375745.2 # kWh
n_control_window: 24
init_soc_fraction: 0.9
max_soc_fraction: 1.0
min_soc_fraction: 0.2
system_commodity_interface_limit: 1e12
performance_parameters:
system_model_source: pysam
chemistry: LFPGraphite
demand_profile: 720000 # 720 MW
cost_parameters:
cost_year: 2019
energy_capex: 310 # $/kWh from 2024 ATB year 2025
power_capex: 311 # $/kW from 2024 ATB year 2025
opex_fraction: 0.024999840573439444
control_parameters:
system_commodity_interface_limit: 1e12
n_control_window: 24
electrolyzer:
performance_model:
model: ECOElectrolyzerPerformanceModel
Expand Down Expand Up @@ -128,12 +125,12 @@ technologies:
commodity: hydrogen
commodity_rate_units: kg/h
set_demand_as_avg_commodity_in: true
commodity_amount_units: kg
performance_parameters:
min_soc_fraction: 0.0
max_soc_fraction: 1.0
charge_efficiency: 1.0
discharge_efficiency: 1.0
commodity_amount_units: kg
cost_parameters:
# since the storage is being auto-sized by the performance model,
# we set the sizing mode to 'auto' rather than defining the capacities
Expand Down
13 changes: 5 additions & 8 deletions examples/02_texas_ammonia/tech_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,7 @@ technologies:
dispatch_rule_set:
model: PyomoDispatchGenericConverter
model_inputs:
performance_parameters:
commodity: electricity
commodity_rate_units: kW
dispatch_rule_parameters:
shared_parameters:
commodity: electricity
commodity_rate_units: kW
battery:
Expand All @@ -81,20 +78,20 @@ technologies:
commodity_rate_units: kW
max_charge_rate: 96.0 # kW
max_capacity: 96.0 # kWh
n_control_window: 24
init_soc_fraction: 0.9
max_soc_fraction: 1.0
min_soc_fraction: 0.2
system_commodity_interface_limit: 1e12
performance_parameters:
system_model_source: pysam
chemistry: LFPGraphite
demand_profile: 640000 # 640 MW
cost_parameters:
cost_year: 2019
energy_capex: 310 # $/kWh from 2024 ATB year 2025
power_capex: 311 # $/kW from 2024 ATB year 2025
opex_fraction: 0.025
control_parameters:
system_commodity_interface_limit: 1e12
n_control_window: 24
electrolyzer:
performance_model:
model: ECOElectrolyzerPerformanceModel
Expand Down Expand Up @@ -127,13 +124,13 @@ technologies:
shared_parameters:
commodity: hydrogen
commodity_rate_units: kg/h
commodity_amount_units: kg
set_demand_as_avg_commodity_in: true
performance_parameters:
min_soc_fraction: 0.0
max_soc_fraction: 1.0
charge_efficiency: 1.0
discharge_efficiency: 1.0
commodity_amount_units: kg
cost_parameters:
# since the storage is being auto-sized by the performance model,
# we set the sizing mode to 'auto' rather than defining the capacities
Expand Down
14 changes: 5 additions & 9 deletions examples/09_co2/direct_ocean_capture/tech_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@ technologies:
dispatch_rule_set:
model: PyomoDispatchGenericConverter
model_inputs:
shared_parameters:
cost_year: 2022
performance_parameters:
cache_dir: cache
enable_caching: true
hopp_config: !include tech_inputs/hopp_config.yaml
cost_year: 2022
dispatch_rule_parameters:
commodity: electricity
commodity_rate_units: kW
Expand Down Expand Up @@ -53,10 +52,7 @@ technologies:
dispatch_rule_set:
model: PyomoDispatchGenericConverter
model_inputs:
performance_parameters:
commodity: electricity
commodity_rate_units: kW
dispatch_rule_parameters:
shared_parameters:
commodity: electricity
commodity_rate_units: kW
battery:
Expand All @@ -74,20 +70,20 @@ technologies:
commodity_rate_units: kW
max_charge_rate: 50000 # kW
max_capacity: 200000 # kWh
n_control_window: 24
init_soc_fraction: 0.9
max_soc_fraction: 1.0
min_soc_fraction: 0.2
system_commodity_interface_limit: 1e12
performance_parameters:
system_model_source: pysam
chemistry: LFPGraphite
demand_profile: 340000 # 340 MW
cost_parameters:
cost_year: 2022
energy_capex: 246 # $/kWh from 2024 ATB year 2025
power_capex: 317 # $/kW from 2024 ATB year 2025
opex_fraction: 0.02536510376633359
control_parameters:
n_control_window: 24
system_commodity_interface_limit: 1e12
doc:
performance_model:
model: DOCPerformanceModel
Expand Down
7 changes: 3 additions & 4 deletions examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,21 +50,20 @@ technologies:
commodity_rate_units: kW
max_charge_rate: 50000 # kW
max_capacity: 200000 # kWh
n_control_window: 24
init_soc_fraction: 0.9
max_soc_fraction: 1.0
min_soc_fraction: 0.2
system_commodity_interface_limit: 1e12
performance_parameters:
system_model_source: pysam
chemistry: LFPGraphite
demand_profile: 330000 # 330 MW
cost_parameters:
cost_year: 2022
commodity_units: kW
energy_capex: 246 # $/kWh from 2024 ATB year 2025
power_capex: 317 # $/kW from 2024 ATB year 2025
opex_fraction: 0.02536510376633359
control_parameters:
n_control_window: 24
system_commodity_interface_limit: 1e12
oae:
performance_model:
model: OAEPerformanceModel
Expand Down
13 changes: 5 additions & 8 deletions examples/12_ammonia_synloop/tech_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,7 @@ technologies:
dispatch_rule_set:
model: PyomoDispatchGenericConverter
model_inputs:
performance_parameters:
commodity: electricity
commodity_rate_units: kW
dispatch_rule_parameters:
shared_parameters:
commodity: electricity
commodity_rate_units: kW
battery:
Expand All @@ -81,20 +78,20 @@ technologies:
commodity_rate_units: kW
max_charge_rate: 96.0 # kW
max_capacity: 96.0 # kWh
n_control_window: 24
init_soc_fraction: 0.9
max_soc_fraction: 1.0
min_soc_fraction: 0.2
system_commodity_interface_limit: 1e12
performance_parameters:
system_model_source: pysam
chemistry: LFPGraphite
demand_profile: 640000 # 640 MW
cost_parameters:
cost_year: 2019
energy_capex: 310 # $/kWh from 2024 ATB year 2025
power_capex: 311 # $/kW from 2024 ATB year 2025
opex_fraction: 0.025
control_parameters:
n_control_window: 24
system_commodity_interface_limit: 1e12
electrolyzer:
performance_model:
model: ECOElectrolyzerPerformanceModel
Expand Down Expand Up @@ -127,13 +124,13 @@ technologies:
shared_parameters:
commodity: hydrogen
commodity_rate_units: kg/h
commodity_amount_units: kg
set_demand_as_avg_commodity_in: true
performance_parameters:
min_soc_fraction: 0.0
max_soc_fraction: 1.0
charge_efficiency: 1.0
discharge_efficiency: 1.0
commodity_amount_units: kg
cost_parameters:
# since the storage is being auto-sized by the performance model,
# we set the sizing mode to 'auto' rather than defining the capacities
Expand Down
6 changes: 3 additions & 3 deletions examples/18_pyomo_heuristic_dispatch/tech_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,17 +48,17 @@ technologies:
commodity_rate_units: kW
max_charge_rate: 100000
max_capacity: 500000
n_control_window: 24
init_soc_fraction: 0.5
max_soc_fraction: 0.9
min_soc_fraction: 0.1
system_commodity_interface_limit: 1e12
performance_parameters:
system_model_source: pysam
chemistry: LFPGraphite
demand_profile: 50000 # 50 MW
cost_parameters:
cost_year: 2022
energy_capex: 310 # $/kWh from 2024 ATB year 2025
power_capex: 311 # $/kW from 2024 ATB year 2025
opex_fraction: 0.25 # 0.25% of capex per year from 2024 ATB
control_parameters:
n_control_window: 24
system_commodity_interface_limit: 1e12
10 changes: 4 additions & 6 deletions examples/30_pyomo_optimized_dispatch/tech_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,13 @@ technologies:
model: ATBBatteryCostModel
model_inputs:
shared_parameters:
commodity: electricity
max_charge_rate: 100000
max_capacity: 400000
init_soc_fraction: 0.5 # Initial SOC for the storage
max_soc_fraction: 0.9 # Maximum SOC allowable for the storage technology
min_soc_fraction: 0.1 # Minimum SOC allowable for the storage technology
system_commodity_interface_limit: 1e12
charge_efficiency: 0.95 # Charge efficiency of the storage technology
discharge_efficiency: 0.95 # Discharge efficiency of the storage technology
commodity_rate_units: kW
# rated_demand: 100000 # in kW
performance_parameters:
system_model_source: pysam
chemistry: LFPGraphite
demand_profile: 100000 # 100 MW
cost_parameters:
Expand All @@ -64,9 +58,13 @@ technologies:
power_capex: 311 # $/kW from 2024 ATB year 2025
opex_fraction: 0.25 # 0.25% of capex per year from 2024 ATB
control_parameters:
commodity: electricity
charge_efficiency: 0.95 # Charge efficiency of the storage technology
discharge_efficiency: 0.95 # Discharge efficiency of the storage technology
cost_per_charge: 0.03 # in $/kW, cost to charge the storage (note that charging is incentivized)
cost_per_discharge: 0.05 # in $/kW, cost to discharge the storage
commodity_met_value: 0.1 # in $/kW, penalty for not meeting the desired load demand
cost_per_production: 0.0 # in $/kW, cost to use the incoming produced commodity (i.e. electricity from wind)
time_weighting_factor: 0.995 # This parameter discounts each subsequent time step incrementally in the future in the horizon window by this amount
n_control_window: 24 # in timesteps (currently hours), The length of time that the control is applied to in the rolling window optimization
system_commodity_interface_limit: 1e12
2 changes: 1 addition & 1 deletion h2integrate/converters/hopp/hopp_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def initialize(self):
def setup(self):
self.config = HOPPComponentModelConfig.from_dict(
merge_shared_inputs(self.options["tech_config"]["model_inputs"], "performance"),
strict=False,
strict=True,
additional_cls_name=self.__class__.__name__,
)

Expand Down
2 changes: 1 addition & 1 deletion h2integrate/converters/iron/iron_dri_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ def setup(self):

self.config = IronReductionCostBaseConfig.from_dict(
config_dict,
strict=False,
strict=True,
additional_cls_name=self.__class__.__name__,
)

Expand Down
2 changes: 1 addition & 1 deletion h2integrate/converters/iron/iron_transport.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def initialize(self):
def setup(self):
self.config = IronTransportPerformanceConfig.from_dict(
merge_shared_inputs(self.options["tech_config"]["model_inputs"], "performance"),
strict=False,
strict=True,
additional_cls_name=self.__class__.__name__,
)
self.add_output("land_transport_distance", val=0.0, units="km")
Expand Down
2 changes: 1 addition & 1 deletion h2integrate/converters/solar/solar_pysam.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ def setup(self):

self.design_config = PYSAMSolarPlantPerformanceModelDesignConfig.from_dict(
merge_shared_inputs(self.options["tech_config"]["model_inputs"], "performance"),
strict=False,
strict=True,
additional_cls_name=self.__class__.__name__,
)
self.add_input(
Expand Down
2 changes: 1 addition & 1 deletion h2integrate/converters/steel/steel_eaf_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ def setup(self):

self.config = ElectricArcFurnaceCostBaseConfig.from_dict(
config_dict,
strict=False,
strict=True,
additional_cls_name=self.__class__.__name__,
)

Expand Down
Loading
Loading