From 82fc2d26d07ff80152fa9e0e81a57b956327e296 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Wed, 21 Jan 2026 15:53:13 -0800 Subject: [PATCH 01/42] replace resource model naming conventions and first third of converter models --- .../adding_a_new_technology.md | 16 ++-- ...turbine_models_library_preprocessing.ipynb | 14 ++-- docs/resource/goes_solar_v4_api.md | 16 ++-- docs/resource/himawari_v3_api.md | 14 ++-- .../meteosat_prime_meridian_v4_api.md | 10 +-- docs/resource/solar_index.md | 28 +++---- docs/resource/wind_index.md | 4 +- docs/technology_models/atb_costs_pv.md | 18 ++--- docs/technology_models/atb_costs_wind.md | 8 +- docs/technology_models/pvwattsv8_solar_pv.md | 4 +- .../technology_models/windpower_wind_plant.md | 4 +- .../wombat_electrolyzer_om.md | 6 +- docs/user_guide/cost_years.md | 20 ++--- .../how_to_set_up_an_analysis.ipynb | 4 +- docs/user_guide/model_overview.md | 76 +++++++++---------- docs/user_guide/postprocessing_results.md | 2 +- .../01_onshore_steel_mn/plant_config.yaml | 4 +- examples/01_onshore_steel_mn/tech_config.yaml | 12 +-- examples/02_texas_ammonia/plant_config.yaml | 4 +- examples/02_texas_ammonia/tech_config.yaml | 12 +-- .../co2_hydrogenation/plant_config_co2h.yaml | 4 +- .../co2_hydrogenation/tech_config_co2h.yaml | 12 +-- .../plant_config_co2h.yaml | 2 +- .../plot_co2h_methanol.py | 6 +- .../tech_config_co2h.yaml | 8 +- examples/05_wind_h2_opt/plant_config.yaml | 2 +- examples/05_wind_h2_opt/tech_config.yaml | 8 +- examples/06_custom_tech/plant_config.yaml | 2 +- examples/06_custom_tech/tech_config.yaml | 4 +- .../07_run_of_river_plant/plant_config.yaml | 6 +- .../07_run_of_river_plant/tech_config.yaml | 4 +- .../08_wind_electrolyzer/plant_config.yaml | 2 +- .../08_wind_electrolyzer/tech_config.yaml | 8 +- .../direct_ocean_capture/plant_config.yaml | 2 +- .../direct_ocean_capture/tech_config.yaml | 4 +- .../plant_config.yaml | 2 +- .../tech_config.yaml | 4 +- .../plant_config_financials.yaml | 2 +- .../tech_config_financials.yaml | 4 +- examples/10_electrolyzer_om/plant_config.yaml | 2 +- examples/10_electrolyzer_om/tech_config.yaml | 8 +- examples/12_ammonia_synloop/plant_config.yaml | 4 +- examples/12_ammonia_synloop/tech_config.yaml | 12 +-- .../hydrogen_dispatch.ipynb | 8 +- .../inputs/plant_config.yaml | 2 +- .../inputs/tech_config.yaml | 8 +- .../plant_config.yaml | 4 +- .../tech_config.yaml | 12 +-- examples/16_natural_gas/plant_config.yaml | 2 +- examples/16_natural_gas/tech_config.yaml | 4 +- .../17_splitter_wind_doc_h2/plant_config.yaml | 2 +- .../17_splitter_wind_doc_h2/tech_config.yaml | 8 +- .../plant_config.yaml | 2 +- .../tech_config.yaml | 4 +- .../tech_config_error_for_testing.yaml | 4 +- examples/19_simple_dispatch/plant_config.yaml | 2 +- examples/19_simple_dispatch/tech_config.yaml | 4 +- .../plant_config.yaml | 2 +- .../tech_config.yaml | 8 +- examples/22_site_doe/plant_config.yaml | 2 +- examples/22_site_doe/tech_config.yaml | 4 +- .../flexible_demand_tech_config.yaml | 8 +- .../23_solar_wind_ng_demand/plant_config.yaml | 4 +- .../23_solar_wind_ng_demand/tech_config.yaml | 8 +- .../24_solar_battery_grid/plant_config.yaml | 2 +- .../24_solar_battery_grid/tech_config.yaml | 4 +- examples/25_sizing_modes/tech_config.yaml | 4 +- examples/26_floris/plant_config.yaml | 2 +- examples/26_floris/tech_config.yaml | 4 +- .../test_custom_electrolyzer_cost_model.py | 2 +- .../converters/wind/test/test_floris_wind.py | 4 +- .../wind/tools/test/test_resource_tools.py | 2 +- h2integrate/core/h2integrate_model.py | 7 +- h2integrate/core/supported_models.py | 54 ++++++------- h2integrate/core/test/test_framework.py | 7 +- .../resource/solar/test/test_nrel_goes_api.py | 2 +- .../solar/test/test_nrel_himawari_api.py | 6 +- .../test_nrel_meteosat_prime_meridian_api.py | 4 +- .../solar/test/test_pvwatts_integration.py | 6 +- .../wind/test/test_nrel_developer_wtk_api.py | 2 +- .../wind/test/test_openmeteo_wind_api.py | 4 +- 81 files changed, 306 insertions(+), 300 deletions(-) diff --git a/docs/developer_guide/adding_a_new_technology.md b/docs/developer_guide/adding_a_new_technology.md index a30c4d6f0..254df8f11 100644 --- a/docs/developer_guide/adding_a_new_technology.md +++ b/docs/developer_guide/adding_a_new_technology.md @@ -165,14 +165,14 @@ Here's what the updated `supported_models.py` file looks like with our new solar from h2integrate.converters.solar.solar_pysam import PYSAMSolarPlantPerformanceComponent supported_models = { - "pysam_solar_plant_performance" : PYSAMSolarPlantPerformanceComponent, - - "run_of_river_hydro_performance": RunOfRiverHydroPerformanceModel, - "run_of_river_hydro_cost": RunOfRiverHydroCostModel, - "eco_pem_electrolyzer_performance": ECOElectrolyzerPerformanceModel, - "singlitico_electrolyzer_cost": SingliticoCostModel, - "basic_electrolyzer_cost": BasicElectrolyzerCostModel, - "custom_electrolyzer_cost": CustomElectrolyzerCostModel, + "PYSAMSolarPlantPerformanceModel" : PYSAMSolarPlantPerformanceComponent, + + "RunOfRiverHydroPerformanceModel": RunOfRiverHydroPerformanceModel, + "RunOfRiverHydroCostModel": RunOfRiverHydroCostModel, + "ECOElectrolyzerPerformanceModel": ECOElectrolyzerPerformanceModel, + "SingliticoCostModel": SingliticoCostModel, + "BasicElectrolyzerCostModel": BasicElectrolyzerCostModel, + "CustomElectrolyzerCostModel": CustomElectrolyzerCostModel, ... } diff --git a/docs/misc_resources/turbine_models_library_preprocessing.ipynb b/docs/misc_resources/turbine_models_library_preprocessing.ipynb index b8819ee7f..859476c07 100644 --- a/docs/misc_resources/turbine_models_library_preprocessing.ipynb +++ b/docs/misc_resources/turbine_models_library_preprocessing.ipynb @@ -10,7 +10,7 @@ "\n", "The full list of turbine models available in the turbine-models library can be found [here](https://github.com/NREL/turbine-models/blob/main/turbine_models/supported_turbines.py)\n", "\n", - "H2Integrate has preprocessing tools that leverage the functionality available in the turbine-models library. The function `export_turbine_to_pysam_format()` will save turbine model specifications formatted for the PySAM Windpower model. The PySAM Windpower model is wrapped in H2I and can be utilized with the \"pysam_wind_plant_performance\" model. Example usage of the `export_turbine_to_pysam_format()` function is demonstrated in the following section using Example 8.\n", + "H2Integrate has preprocessing tools that leverage the functionality available in the turbine-models library. The function `export_turbine_to_pysam_format()` will save turbine model specifications formatted for the PySAM Windpower model. The PySAM Windpower model is wrapped in H2I and can be utilized with the \"PYSAMWindPlantPerformanceModel\" model. Example usage of the `export_turbine_to_pysam_format()` function is demonstrated in the following section using Example 8.\n", "\n", "\n", "## Turbine Model Pre-Processing with PySAM Windpower Model\n", @@ -87,15 +87,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This example uses the \"pysam_wind_plant_performance\" performance model for the wind plant. Currently, the performance model is using an 8.3MW wind turbine with a rotor diameter of 196 meters and a hub-height of 130 meters. This information is defined in the `tech_config` file:\n", + "This example uses the \"PYSAMWindPlantPerformanceModel\" performance model for the wind plant. Currently, the performance model is using an 8.3MW wind turbine with a rotor diameter of 196 meters and a hub-height of 130 meters. This information is defined in the `tech_config` file:\n", "\n", "```yaml\n", "technologies:\n", " wind:\n", " performance_model:\n", - " model: \"pysam_wind_plant_performance\"\n", + " model: \"PYSAMWindPlantPerformanceModel\"\n", " cost_model:\n", - " model: \"atb_wind_cost\"\n", + " model: \"ATBWindPlantCostModel\"\n", " model_inputs:\n", " performance_parameters:\n", " num_turbines: 100\n", @@ -662,7 +662,7 @@ ], "source": [ "# Create dictionary of updated inputs for the new turbine formatted for\n", - "# the \"pysam_wind_plant_performance\" model\n", + "# the \"PYSAMWindPlantPerformanceModel\" model\n", "updated_parameters = {\n", " \"turbine_rating_kw\": np.max(pysam_options[\"Turbine\"].get(\"wind_turbine_powercurve_powerout\")),\n", " \"rotor_diameter\": pysam_options[\"Turbine\"].pop(\"wind_turbine_rotor_diameter\"),\n", @@ -796,7 +796,7 @@ "source": [ "## Turbine Model Pre-Processing with FLORIS\n", "\n", - "Example 26 (`26_floris`) currently uses an 660 kW turbine. This example uses the \"floris_wind_plant_performance\" performance model for the wind plant. Currently, the performance model is using an 660 kW wind turbine with a rotor diameter of 47.0 meters and a hub-height of 65 meters. In the following sections we will demonstrate how to:\n", + "Example 26 (`26_floris`) currently uses an 660 kW turbine. This example uses the \"FlorisWindPlantPerformanceModel\" performance model for the wind plant. Currently, the performance model is using an 660 kW wind turbine with a rotor diameter of 47.0 meters and a hub-height of 65 meters. In the following sections we will demonstrate how to:\n", "\n", "1. Save turbine model specifications for the Vestas 1.65 MW turbine in the FLORIS format using `export_turbine_to_floris_format()`\n", "2. Load the turbine model specifications for the Vestas 1.65 MW turbine and update performance parameters for the wind technology in the `tech_config` dictionary for the Vestas 1.65 MW turbine.\n", @@ -1075,7 +1075,7 @@ "floris_options = load_yaml(turbine_model_fpath)\n", "\n", "# Create dictionary of updated inputs for the new turbine formatted for\n", - "# the \"floris_wind_plant_performance\" model\n", + "# the \"FlorisWindPlantPerformanceModel\" model\n", "updated_parameters = {\n", " \"hub_height\": -1, # -1 indicates to use the hub-height in the floris_turbine_config\n", " \"floris_turbine_config\": floris_options,\n", diff --git a/docs/resource/goes_solar_v4_api.md b/docs/resource/goes_solar_v4_api.md index 2b808c465..6cf8a711d 100644 --- a/docs/resource/goes_solar_v4_api.md +++ b/docs/resource/goes_solar_v4_api.md @@ -2,20 +2,20 @@ # Solar Resource: GOES PSM v4 There are four datasets that use the [NSRDB GOES PSM v4 API](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-GOES-full-disc-v4-0-0-download/) calls: -- "goes_aggregated_solar_v4_api" -- "goes_conus_solar_v4_api" -- "goes_fulldisc_solar_v4_api" -- "goes_tmy_solar_v4_api" +- "GOESAggregatedSolarAPI" +- "GOESConusSolarAPI" +- "GOESFullDiscSolarAPI" +- "GOESTMYSolarAPI" - supports solar resource data for typical meteorological year (TMY), typical global horizontal irradiance year (TGY), and typical direct normal irradiance year (TDY) These datasets allow for resource data to be downloaded for **locations** within the continental United States. | Model | Temporal resolution | Spatial resolution | Years covered | Regions | Website | | :--------- | :---------------: | :---------------: | :---------------: | :---------------: | :---------------: | -| `goes_aggregated_solar_v4_api` | 30, 60 min | 4 km | 1998-2024 | North America, South America | [GOES Aggregated](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-GOES-aggregated-v4-0-0-download/) | -| `goes_conus_solar_v4_api` | 5, 15, 30, 60 min | 2 km | 2018-2024 | Continental United States | [GOES Conus](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-GOES-conus-v4-0-0-download/) | -| `goes_fulldisc_solar_v4_api` | 10, 30, 60 min | 2 km | 2018-2024 | North America, South America | [GOES Full disc](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-GOES-full-disc-v4-0-0-download/) | -| `goes_tmy_solar_v4_api` | 60 min | 4 km | 2022-2024, for tmy, tdy and tgy | North America, South America | [GOES TMY](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-GOES-tmy-v4-0-0-download/) | +| `GOESAggregatedSolarAPI` | 30, 60 min | 4 km | 1998-2024 | North America, South America | [GOES Aggregated](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-GOES-aggregated-v4-0-0-download/) | +| `GOESConusSolarAPI` | 5, 15, 30, 60 min | 2 km | 2018-2024 | Continental United States | [GOES Conus](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-GOES-conus-v4-0-0-download/) | +| `GOESFullDiscSolarAPI` | 10, 30, 60 min | 2 km | 2018-2024 | North America, South America | [GOES Full disc](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-GOES-full-disc-v4-0-0-download/) | +| `GOESTMYSolarAPI` | 60 min | 4 km | 2022-2024, for tmy, tdy and tgy | North America, South America | [GOES TMY](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-GOES-tmy-v4-0-0-download/) | ```{note} diff --git a/docs/resource/himawari_v3_api.md b/docs/resource/himawari_v3_api.md index 4a7d8b220..7fd335948 100644 --- a/docs/resource/himawari_v3_api.md +++ b/docs/resource/himawari_v3_api.md @@ -2,22 +2,22 @@ # Solar Resource: Himawari PSM v3 There are three datasets that use the [NSRDB Himawari PSM v3 API](https://developer.nrel.gov/docs/solar/nsrdb/himawari7-download/) calls: -- "himawari7_solar_v3_api" -- "himawari8_solar_v3_api" -- "himawari_tmy_solar_v3_api" +- "Himawari7SolarAPI" +- "Himawari8SolarAPI" +- "HimawariTMYSolarAPI" - supports solar resource data for typical meteorological year (TMY), typical global horizontal irradiance year (TGY), and typical direct normal irradiance year (TDY) These datasets allow for resource data to be downloaded for **locations** within Asia, Australia, and the Pacific. | Model | Temporal resolution | Spatial resolution | Years covered | Regions | Website | | :--------- | :---------------: | :---------------: | :---------------: | :---------------: | :---------------: | -| `himawari7_solar_v3_api` | 30, 60 min | 4 km | 2011-2015 | Asia, Australia & Pacific | [Himawari 2011-15](https://developer.nrel.gov/docs/solar/nsrdb/himawari7-download/) | -| `himawari8_solar_v3_api` | 10, 30, 60 min | 2 km | 2016-2020 | Asia, Australia & Pacific | [Himawari 2016-2020](https://developer.nrel.gov/docs/solar/nsrdb/himawari-download/) | -| `himawari_tmy_solar_v3_api` | 60 min | 4 km | 2020, for tmy, tdy and tgy | Asia, Australia & Pacific | [Himawari TMY](https://developer.nrel.gov/docs/solar/nsrdb/himawari-tmy-download/) | +| `Himawari7SolarAPI` | 30, 60 min | 4 km | 2011-2015 | Asia, Australia & Pacific | [Himawari 2011-15](https://developer.nrel.gov/docs/solar/nsrdb/himawari7-download/) | +| `Himawari8SolarAPI` | 10, 30, 60 min | 2 km | 2016-2020 | Asia, Australia & Pacific | [Himawari 2016-2020](https://developer.nrel.gov/docs/solar/nsrdb/himawari-download/) | +| `HimawariTMYSolarAPI` | 60 min | 4 km | 2020, for tmy, tdy and tgy | Asia, Australia & Pacific | [Himawari TMY](https://developer.nrel.gov/docs/solar/nsrdb/himawari-tmy-download/) | ```{note} -For the himawari_tmy_solar_v3_api model, the resource_year should be specified as a string formatted as `tdy-2020` or `tgy-2020` or `tmy-2020`. +For the `HimawariTMYSolarAPI` model, the resource_year should be specified as a string formatted as `tdy-2020` or `tgy-2020` or `tmy-2020`. ``` diff --git a/docs/resource/meteosat_prime_meridian_v4_api.md b/docs/resource/meteosat_prime_meridian_v4_api.md index 3fea606d7..d1e2baf95 100644 --- a/docs/resource/meteosat_prime_meridian_v4_api.md +++ b/docs/resource/meteosat_prime_meridian_v4_api.md @@ -2,20 +2,20 @@ # Solar Resource: Meteosat Prime Meridian PSM v4 There are two datasets that use the [NSRDB Meteosat Prime Meridian PSM v4 API](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-msg-v1-0-0-download/) calls: -- "meteosat_solar_v4_api" -- "meteosat_tmy_solar_v4_api" +- "MeteosatPrimeMeridianSolarAPI" +- "MeteosatPrimeMeridianTMYSolarAPI" - supports solar resource data for typical meteorological year (TMY), typical global horizontal irradiance year (TGY), and typical direct normal irradiance year (TDY) These datasets allow for resource data to be downloaded for **locations** within Africa and Europe. | Model | Temporal resolution | Spatial resolution | Years covered | Regions | Website | | :--------- | :---------------: | :---------------: | :---------------: | :---------------: | :---------------: | -| `meteosat_solar_v4_api` | 15, 30, 60 min | 4 km | 2005-2022 | Africa and Europe | [Meteosat Prime Meridian](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-msg-v1-0-0-download/) | -| `meteosat_tmy_solar_v4_api` | 60 min | 4 km | 2022 or 2014, for tmy, tdy and tgy | Africa and Europe | [Meteosat Prime Meridian TMY](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-msg-v1-0-0-tmy-download/), [Meteosat Prime Meridian TGY](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-msg-v1-0-0-tgy-download/), and [Meteosat Prime Meridian TDY](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-msg-v1-0-0-tdy-download/) | +| `MeteosatPrimeMeridianSolarAPI` | 15, 30, 60 min | 4 km | 2005-2022 | Africa and Europe | [Meteosat Prime Meridian](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-msg-v1-0-0-download/) | +| `MeteosatPrimeMeridianTMYSolarAPI` | 60 min | 4 km | 2022 or 2014, for tmy, tdy and tgy | Africa and Europe | [Meteosat Prime Meridian TMY](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-msg-v1-0-0-tmy-download/), [Meteosat Prime Meridian TGY](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-msg-v1-0-0-tgy-download/), and [Meteosat Prime Meridian TDY](https://developer.nrel.gov/docs/solar/nsrdb/nsrdb-msg-v1-0-0-tdy-download/) | ```{note} -For the `meteosat_tmy_solar_v4_api` model, the `resource_year` should be specified as a string formatted as `tdy-yyyy` or `tgy-yyy` or `tmy-yyyy` where yyyy is the year is either 2014 or 2022. +For the `MeteosatPrimeMeridianTMYSolarAPI` model, the `resource_year` should be specified as a string formatted as `tdy-yyyy` or `tgy-yyy` or `tmy-yyyy` where yyyy is the year is either 2014 or 2022. ``` diff --git a/docs/resource/solar_index.md b/docs/resource/solar_index.md index 05056cfa5..71bfb4008 100644 --- a/docs/resource/solar_index.md +++ b/docs/resource/solar_index.md @@ -2,17 +2,17 @@ # Solar Resource: Model Overview - [GOES PSM v4 API](solar_resource:goes_v4_api): these models require an API key from the [NREL developer network](https://developer.nrel.gov/signup/), the available models are: - - "goes_aggregated_solar_v4_api" - - "goes_conus_solar_v4_api" - - "goes_fulldisc_solar_v4_api" - - "goes_tmy_solar_v4_api" + - "GOESAggregatedSolarAPI" + - "GOESConusSolarAPI" + - "GOESFullDiscSolarAPI" + - "GOESTMYSolarAPI" - [Himawari PSM v4 API](solar_resource:himawari_v3_api): these models require an API key from the [NREL developer network](https://developer.nrel.gov/signup/), the available models are: - - "himawari7_solar_v3_api" - - "himawari8_solar_v3_api" - - "himawari_tmy_solar_v3_api" + - "Himawari7SolarAPI" + - "Himawari8SolarAPI" + - "HimawariTMYSolarAPI" - [Meteosat Prime Meridian PSM v4 API](solar_resource:msg_v4_api): these models require an API key from the [NREL developer network](https://developer.nrel.gov/signup/), the available models are: - - "meteosat_solar_v4_api" - - "meteosat_tmy_solar_v4_api" + - "MeteosatPrimeMeridianSolarAPI" + - "MeteosatPrimeMeridianTMYSolarAPI" ```{note} @@ -24,10 +24,12 @@ Please refer to the [`Setting Environment Variables`](environment_variables:sett Solar resource models may output solar resource data, site information, information about the data source, and time information. This information is outputted as a dictionary. The following sections detail the naming convention for the dictionary keys, standardized units, and descriptions of all the output data that may be output from a solar resource model. -- [Solar Resource Data](#primary-data-solar-resource-timeseries) -- [Site Information](#additional-data-site-information) -- [Data Source Information](#additional-data-data-source) -- [Time Profile Information](#additional-data-time-profile) +- [Solar Resource: Model Overview](#solar-resource-model-overview) +- [Solar Resource: Output Data](#solar-resource-output-data) + - [Primary Data: Solar Resource Timeseries](#primary-data-solar-resource-timeseries) + - [Additional Data: Site Information](#additional-data-site-information) + - [Additional Data: Data source](#additional-data-data-source) + - [Additional Data: Time profile](#additional-data-time-profile) ```{note} diff --git a/docs/resource/wind_index.md b/docs/resource/wind_index.md index 9bb325b63..08b1922b4 100644 --- a/docs/resource/wind_index.md +++ b/docs/resource/wind_index.md @@ -1,8 +1,8 @@ (wind_resource:models)= # Wind Resource: Model Overview -- [**"wind_toolkit_v2_api"**](wind_resource:wtk_v2_api): this requires an API key for the NREL developer network -- [**"openmeteo_wind_api"**](wind_resource:openmeteo_archive) +- [**"WTKNRELDeveloperAPIWindResource"**](wind_resource:wtk_v2_api): this requires an API key for the NREL developer network +- [**"OpenMeteoHistoricalWindResource"**](wind_resource:openmeteo_archive) ```{note} diff --git a/docs/technology_models/atb_costs_pv.md b/docs/technology_models/atb_costs_pv.md index 10c12b04a..23415f748 100644 --- a/docs/technology_models/atb_costs_pv.md +++ b/docs/technology_models/atb_costs_pv.md @@ -8,23 +8,23 @@ The Annual Technology Baseline (ATB) is updated annually. While we do our best t As mentioned on the [Utility-Scale PV ATB page](https://atb.nrel.gov/electricity/2024/utility-scale_pv), the costs for utility-scale PV have been published in `$/kW-AC` since 2020. The costs for [Commercial PV](https://atb.nrel.gov/electricity/2024/commercial_pv) and [Residential PV](https://atb.nrel.gov/electricity/2024/residential_pv) are published in `$/kW-DC`. The only difference between the two cost models in H2I are whether costs are input in `$/kW-AC` or `$/kW-DC`. -- The `"atb_utility_pv_cost"` model has costs input in `$/kW-AC` to match the ATB and the outputted capacity in kW-AC from the PV performance model. Example usage of this cost model in the `tech_config.yaml` file is shown [in the first section below](#utility-scale-pv-cost-model). -- The `"atb_comm_res_pv_cost"` model has costs input in `$/kW-DC` and the PV capacity is input in kW-DC from the **shared input parameter** of the PV performance model. Example usage of this cost model in the `tech_config.yaml` file is shown [in the second section below](#commercial-and-residential-pv-cost-model). +- The `"ATBUtilityPVCostModel"` model has costs input in `$/kW-AC` to match the ATB and the outputted capacity in kW-AC from the PV performance model. Example usage of this cost model in the `tech_config.yaml` file is shown [in the first section below](#utility-scale-pv-cost-model). +- The `"ATBResComPVCostModel"` model has costs input in `$/kW-DC` and the PV capacity is input in kW-DC from the **shared input parameter** of the PV performance model. Example usage of this cost model in the `tech_config.yaml` file is shown [in the second section below](#commercial-and-residential-pv-cost-model). (utility-scale-pv-cost-model)= ## Utility-Scale PV Cost Model The inputs for `cost_parameters` are `capex_per_kWac` and `opex_per_kWac_per_year`. From the ATB workbook, a value for `capex_per_kWac` can be found on the `Solar - Utility PV` sheet under the "Overnight Capital Cost" section or the "CAPEX" section. The values in the "CAPEX" section include overnight capital costs, construction finance factor, and grid connection costs. A value for `opex_per_kWac_per_year` can be found on the `Solar - Utility PV` sheet under the "Fixed Operation and Maintenance Expenses" section. -Here is an example of how to use the `atb_utility_pv_cost` model in the `tech_config.yaml` file: +Here is an example of how to use the `ATBUtilityPVCostModel` model in the `tech_config.yaml` file: ```yaml technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_utility_pv_cost" + model: "ATBUtilityPVCostModel" model_inputs: performance_parameters: pv_capacity_kWdc: 100000 @@ -41,18 +41,18 @@ technologies: The inputs for `cost_parameters` are `capex_per_kWdc` and `opex_per_kWdc_per_year`. From the ATB workbook, a value for `capex_per_kWdc` can be found on the `Solar - PV Dist. Comm` or `Solar - PV Dist. Res` sheet under the "Overnight Capital Cost" section or the "CAPEX" section. The values in the "CAPEX" section include overnight capital costs, construction finance factor, and grid connection costs. A value for `opex_per_kWdc_per_year` can be found on the `Solar - PV Dist. Comm` or `Solar - PV Dist. Res` sheet under the "Fixed Operation and Maintenance Expenses" section. ```{note} -Since the commercial and residential PV values in the ATB are in kW-DC the parameter `pv_capacity_kWdc` should be included in the `shared_parameters` when using the `pysam_solar_plant_performance` and `atb_comm_res_pv_cost` models. +Since the commercial and residential PV values in the ATB are in kW-DC the parameter `pv_capacity_kWdc` should be included in the `shared_parameters` when using the `PYSAMSolarPlantPerformanceModel` and `ATBResComPVCostModel` models. ``` -Here is an example of how to use the `atb_comm_res_pv_cost` model in the `tech_config.yaml` file: +Here is an example of how to use the `ATBResComPVCostModel` model in the `tech_config.yaml` file: ```yaml technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_comm_res_pv_cost" + model: "ATBResComPVCostModel" model_inputs: shared_parameters: pv_capacity_kWdc: 200 diff --git a/docs/technology_models/atb_costs_wind.md b/docs/technology_models/atb_costs_wind.md index 0db674fbf..e3e628b4e 100644 --- a/docs/technology_models/atb_costs_wind.md +++ b/docs/technology_models/atb_costs_wind.md @@ -1,6 +1,6 @@ # Wind Cost Model based on ATB-Formatted Cost Data -NREL's [Annual Technology Baseline (ATB)](https://atb.nrel.gov) is commonly referenced for technology costs such as overnight capital cost, fixed operations and maintenance costs, and capital expenditures. The `atb_wind_cost` cost model available in H2I that is intended to be easily used with cost values pulled from [NREL's ATB Excel workbook](https://atb.nrel.gov/electricity/2024/data). +NREL's [Annual Technology Baseline (ATB)](https://atb.nrel.gov) is commonly referenced for technology costs such as overnight capital cost, fixed operations and maintenance costs, and capital expenditures. The `ATBWindPlantCostModel` cost model available in H2I that is intended to be easily used with cost values pulled from [NREL's ATB Excel workbook](https://atb.nrel.gov/electricity/2024/data). ```{note} The Annual Technology Baseline (ATB) is updated annually. While we do our best to update our documentation regularly, be sure that you're using the most recent version of the ATB in case our links are pointing to an older version. @@ -18,15 +18,15 @@ Example usage of this cost model in the `tech_config.yaml` file is shown [in the The inputs for `cost_parameters` are `capex_per_kW` and `opex_per_kW_per_year`. From the ATB workbook, a value for `capex_per_kW` can be found on any of the wind-specific tabs in the Excel Workbook under the "Overnight Capital Cost" section or the "CAPEX" section. The values in the "CAPEX" section include overnight capital costs, construction finance factor, and grid connection costs. A value for `opex_per_kW_per_year` can be found on any of the wind-specific tabs in the Excel Workbook under the "Fixed Operation and Maintenance Expenses" section. -Here is an example of how to use the `atb_wind_cost` model in the `tech_config.yaml` file: +Here is an example of how to use the `ATBWindPlantCostModel` model in the `tech_config.yaml` file: ```yaml technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: shared_parameters: num_turbines: 20 diff --git a/docs/technology_models/pvwattsv8_solar_pv.md b/docs/technology_models/pvwattsv8_solar_pv.md index 78d3a958d..23428ac89 100644 --- a/docs/technology_models/pvwattsv8_solar_pv.md +++ b/docs/technology_models/pvwattsv8_solar_pv.md @@ -3,12 +3,12 @@ This model uses the [Pvwattsv8 module](https://nrel-pysam.readthedocs.io/en/main/modules/Pvwattsv8.html) available in PySAM to simulate the performance of a solar-PV system. -To use this model, specify `"pysam_solar_plant_performance"` as the performance model. An example of how this may look in the `tech_config` file is shown below and details on the performance parameter inputs can be found [here](#performance-parameters). +To use this model, specify `"PYSAMSolarPlantPerformanceModel"` as the performance model. An example of how this may look in the `tech_config` file is shown below and details on the performance parameter inputs can be found [here](#performance-parameters). ```yaml technologies: pv: - performance_model: "pysam_solar_plant_performance" + performance_model: "PYSAMSolarPlantPerformanceModel" model_inputs: performance_parameters: pv_capacity_kWdc: 1000.0 diff --git a/docs/technology_models/windpower_wind_plant.md b/docs/technology_models/windpower_wind_plant.md index 41d47228d..f24ab2438 100644 --- a/docs/technology_models/windpower_wind_plant.md +++ b/docs/technology_models/windpower_wind_plant.md @@ -2,12 +2,12 @@ This model uses the [Windpower module](https://nrel-pysam.readthedocs.io/en/main/modules/Windpower.html) available in PySAM to simulate the performance of a wind power plant. -To use this model, specify `"pysam_wind_plant_performance"` as the performance model. An example of how this may look in the `tech_config` file is shown below and details on the performance parameter inputs can be found [here](#performance-parameters). +To use this model, specify `"PYSAMWindPlantPerformanceModel"` as the performance model. An example of how this may look in the `tech_config` file is shown below and details on the performance parameter inputs can be found [here](#performance-parameters). ```yaml technologies: wind: - performance_model: "pysam_wind_plant_performance" + performance_model: "PYSAMWindPlantPerformanceModel" model_inputs: performance_parameters: num_turbines: 10 diff --git a/docs/technology_models/wombat_electrolyzer_om.md b/docs/technology_models/wombat_electrolyzer_om.md index 329169fa4..57f71ebcf 100644 --- a/docs/technology_models/wombat_electrolyzer_om.md +++ b/docs/technology_models/wombat_electrolyzer_om.md @@ -35,7 +35,7 @@ The `electrolyzer.yml` configuration file may include sections such as `turbines ## Example: Using the WOMBAT Electrolyzer Model -To use the WOMBAT electrolyzer model in H2Integrate, configure your `tech_config.yaml` to use `wombat` for both the performance and cost models. +To use the WOMBAT electrolyzer model in H2Integrate, configure your `tech_config.yaml` to use `WOMBATElectrolyzerModel` for both the performance and cost models. An example is shown below: ### tech_config.yaml (excerpt) @@ -44,9 +44,9 @@ An example is shown below: technologies: electrolyzer: performance_model: - model: "wombat" + model: "WOMBATElectrolyzerModel" cost_model: - model: "wombat" + model: "WOMBATElectrolyzerModel" model_inputs: shared_parameters: location: "onshore" diff --git a/docs/user_guide/cost_years.md b/docs/user_guide/cost_years.md index 715d13c9e..f6b3101ba 100644 --- a/docs/user_guide/cost_years.md +++ b/docs/user_guide/cost_years.md @@ -11,9 +11,9 @@ For [cost models based on user-provided costs](#cost-models-with-user-input-cost ### Summary of cost models that are based around a cost year | Cost Model | Cost Year | | :---------------------- | :---------------: | -| `basic_electrolyzer_cost`| 2016 | +| `BasicElectrolyzerCostModel`| 2016 | | `pem_electrolyzer_cost`| 2021 | -| `singlitico_electrolyzer_cost`| 2021 | +| `SingliticoCostModel`| 2021 | | `h2_storage` with `'mch'` storage type | 2024 | | `h2_storage` for geologic storage or buried pipe | 2018 | | `simple_ammonia_cost` | 2022 | @@ -31,25 +31,25 @@ For [cost models based on user-provided costs](#cost-models-with-user-input-cost | Cost Model | | :---------------------- | | `wind_plant_cost` | -| `atb_utility_pv_cost` | -| `atb_comm_res_pv_cost` | -| `simple_ASU_cost` | +| `ATBUtilityPVCostModel` | +| `ATBResComPVCostModel` | +| `SimpleASUCostModel` | | `hopp` | -| `run_of_river_hydro_cost` | +| `RunOfRiverHydroCostModel` | | `smr_methanol_plant_cost` | | `stimulated_geoh2_cost` | | `natural_geoh2_cost` | -| `wombat` | -| `custom_electrolyzer_cost` | +| `WOMBATElectrolyzerModel` | +| `CustomElectrolyzerCostModel` | ### Example tech_config input for user-input cost year ```yaml technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_utility_pv_cost" + model: "ATBUtilityPVCostModel" model_inputs: performance_parameters: pv_capacity_kWdc: 100000 diff --git a/docs/user_guide/how_to_set_up_an_analysis.ipynb b/docs/user_guide/how_to_set_up_an_analysis.ipynb index 4a7687e79..37c7ece79 100644 --- a/docs/user_guide/how_to_set_up_an_analysis.ipynb +++ b/docs/user_guide/how_to_set_up_an_analysis.ipynb @@ -78,7 +78,7 @@ "technologies:\n", " electrolyzer:\n", " performance_model:\n", - " model: eco_pem_electrolyzer_performance\n", + " model: ECOElectrolyzerPerformanceModel\n", " cost_model:\n", " model: eco_pem_electrolyzer_cost\n", " model_inputs:\n", @@ -107,7 +107,7 @@ " replacement_cost_percent: 0.15 # percent of capex - H2A default case\n", "```\n", "\n", - "Here, we have defined a electrolyzer model that uses the built-in `eco_pem_electrolyzer_performance` and `eco_pem_electrolyzer_cost` models.\n", + "Here, we have defined a electrolyzer model that uses the built-in `ECOElectrolyzerPerformanceModel` and `eco_pem_electrolyzer_cost` models.\n", "The `performance_model` and `cost_model` keys define the models used for the performance and cost calculations, respectively.\n", "The `model_inputs` key contains the inputs for the models, which are organized into sections for shared parameters, performance parameters, cost parameters, and financial parameters.\n", "Here, we do not define the `financial_model` key, so the default financial model from ProFAST is used.\n", diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 80eada037..0cacc7f5c 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -14,18 +14,18 @@ Currently, H2I recognizes four types of models: | Resource name | Resource Type | | :---------------- | :---------------: | -| `river_resource` | river resource | -| `wind_toolkit_v2_api` | wind resource | -| `openmeteo_wind_api` | wind resource | -| `goes_aggregated_solar_v4_api` | solar resource | -| `goes_conus_solar_v4_api` | solar resource | -| `goes_fulldisc_solar_v4_api` | solar resource | -| `goes_tmy_solar_v4_api` | solar resource | -| `meteosat_solar_v4_api` | solar resource | -| `meteosat_tmy_solar_v4_api` | solar resource | -| `himawari7_solar_v3_api` | solar resource | -| `himawari8_solar_v3_api` | solar resource | -| `himawari_tmy_solar_v3_api` | solar resource | +| `RiverResource` | river resource | +| `WTKNRELDeveloperAPIWindResource` | wind resource | +| `OpenMeteoHistoricalWindResource` | wind resource | +| `GOESAggregatedSolarAPI` | solar resource | +| `GOESConusSolarAPI` | solar resource | +| `GOESFullDiscSolarAPI` | solar resource | +| `GOESTMYSolarAPI` | solar resource | +| `MeteosatPrimeMeridianSolarAPI` | solar resource | +| `MeteosatPrimeMeridianTMYSolarAPI` | solar resource | +| `Himawari7SolarAPI` | solar resource | +| `Himawari8SolarAPI` | solar resource | +| `HimawariTMYSolarAPI` | solar resource | (converters)= @@ -111,53 +111,53 @@ Below summarizes the available performance, cost, and financial models for each ## Resource models - `river`: - resource models: - + `river_resource` + + `RiverResource` - `wind_resource`: - resource models: - + `wind_toolkit_v2_api` - + `openmeteo_wind_api` + + `WTKNRELDeveloperAPIWindResource` + + `OpenMeteoHistoricalWindResource` - `solar_resource`: - resource models: - + `goes_aggregated_solar_v4_api` - + `goes_conus_solar_v4_api` - + `goes_fulldisc_solar_v4_api` - + `goes_tmy_solar_v4_api` - + `meteosat_solar_v4_api` - + `meteosat_tmy_solar_v4_api` - + `himawari7_solar_v3_api` - + `himawari8_solar_v3_api` - + `himawari_tmy_solar_v3_api` + + `GOESAggregatedSolarAPI` + + `GOESConusSolarAPI` + + `GOESFullDiscSolarAPI` + + `GOESTMYSolarAPI` + + `MeteosatPrimeMeridianSolarAPI` + + `MeteosatPrimeMeridianTMYSolarAPI` + + `Himawari7SolarAPI` + + `Himawari8SolarAPI` + + `HimawariTMYSolarAPI` (converter-models)= ## Converter models - `wind`: wind turbine - performance models: - + `'pysam_wind_plant_performance'` - + `'floris_wind_plant_performance'` + + `'PYSAMWindPlantPerformanceModel'` + + `'FlorisWindPlantPerformanceModel'` - cost models: - + `'atb_wind_cost'` + + `'ATBWindPlantCostModel'` - `solar`: solar-PV panels - performance models: - + `'pysam_solar_plant_performance'` + + `'PYSAMSolarPlantPerformanceModel'` - cost models: - + `'atb_utility_pv_cost'` - + `'atb_comm_res_pv_cost'` + + `'ATBUtilityPVCostModel'` + + `'ATBResComPVCostModel'` - `river`: hydropower - performance models: - + `'run_of_river_hydro_performance'` + + `'RunOfRiverHydroPerformanceModel'` - cost models: - + `'run_of_river_hydro_cost'` + + `'RunOfRiverHydroCostModel'` - `hopp`: hybrid plant - combined performance and cost model: + `'hopp'` - `electrolyzer`: hydrogen electrolysis - combined performance and cost: - + `'wombat'` + + `'WOMBATElectrolyzerModel'` - performance models: - + `'eco_pem_electrolyzer_performance'` + + `'ECOElectrolyzerPerformanceModel'` - cost models: - + `'singlitico_electrolyzer_cost'` - + `'basic_electrolyzer_cost'` + + `'SingliticoCostModel'` + + `'BasicElectrolyzerCostModel'` - `geoh2_well_subsurface`: geologic hydrogen well subsurface - performance models: + `'simple_natural_geoh2_performance'` @@ -202,9 +202,9 @@ Below summarizes the available performance, cost, and financial models for each + `'methanol_plant_financial'` - `air_separator`: nitrogen separation from air - performance models: - + `'simple_ASU_performance'` + + `'SimpleASUPerformanceModel'` - cost models: - + `'simple_ASU_cost'` + + `'SimpleASUCostModel'` - `desal`: water desalination - performance models: + `'reverse_osmosis_desalination_performance'` diff --git a/docs/user_guide/postprocessing_results.md b/docs/user_guide/postprocessing_results.md index 5c1e47578..7efd35f06 100644 --- a/docs/user_guide/postprocessing_results.md +++ b/docs/user_guide/postprocessing_results.md @@ -29,7 +29,7 @@ plant hopp_to_electrolyzer_cable electricity_out |85694382.72934064| kW hopp_to_electrolyzer_cable.electricity_out electrolyzer - eco_pem_electrolyzer_performance + ECOElectrolyzerPerformanceModel hydrogen_out |1100221.2561732| kg/h electrolyzer.hydrogen_out time_until_replacement [47705.10433122] h electrolyzer.time_until_replacement total_hydrogen_produced [89334697.48304178] kg/year electrolyzer.total_hydrogen_produced diff --git a/examples/01_onshore_steel_mn/plant_config.yaml b/examples/01_onshore_steel_mn/plant_config.yaml index 83563c3b9..12811b79f 100644 --- a/examples/01_onshore_steel_mn/plant_config.yaml +++ b/examples/01_onshore_steel_mn/plant_config.yaml @@ -6,12 +6,12 @@ site: longitude: -92.5366 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2013 solar_resource: - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2013 resource_filename: "47.5_-93.0_psmv3_60_2013.csv" diff --git a/examples/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index 58017fca9..9d675318f 100644 --- a/examples/01_onshore_steel_mn/tech_config.yaml +++ b/examples/01_onshore_steel_mn/tech_config.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces steel" technologies: wind: performance_model: - model: "floris_wind_plant_performance" + model: "FlorisWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 216 #number of turbines in the farm @@ -34,9 +34,9 @@ technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_comm_res_pv_cost" + model: "ATBResComPVCostModel" model_inputs: shared_parameters: pv_capacity_kWdc: 1500000 #1500 MWdc @@ -108,9 +108,9 @@ technologies: electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/02_texas_ammonia/plant_config.yaml b/examples/02_texas_ammonia/plant_config.yaml index da3fba250..570880753 100644 --- a/examples/02_texas_ammonia/plant_config.yaml +++ b/examples/02_texas_ammonia/plant_config.yaml @@ -6,12 +6,12 @@ site: longitude: -100.18 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2013 solar_resource: - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2013 # array of arrays containing left-to-right technology diff --git a/examples/02_texas_ammonia/tech_config.yaml b/examples/02_texas_ammonia/tech_config.yaml index 60a838b80..e982da6d8 100644 --- a/examples/02_texas_ammonia/tech_config.yaml +++ b/examples/02_texas_ammonia/tech_config.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces ammonia" technologies: wind: performance_model: - model: "floris_wind_plant_performance" + model: "FlorisWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 148 #number of turbines in the farm @@ -34,9 +34,9 @@ technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_comm_res_pv_cost" + model: "ATBResComPVCostModel" model_inputs: shared_parameters: pv_capacity_kWdc: 400000 #400 MWdc @@ -105,9 +105,9 @@ technologies: commodity_storage_units: "kW" electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml index bf976a49e..d5984da9b 100644 --- a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml @@ -6,11 +6,11 @@ site: longitude: -100.18 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2013 solar_resource: - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2013 # array of arrays containing left-to-right technology diff --git a/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml index d601279b1..50e34b978 100644 --- a/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces methanol" technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 29 @@ -30,9 +30,9 @@ technologies: cost_year: 2019 solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_comm_res_pv_cost" + model: "ATBResComPVCostModel" model_inputs: shared_parameters: pv_capacity_kWdc: 350000 #350 MWdc @@ -54,9 +54,9 @@ technologies: commodity_units: "kW" electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml index f0cfdffd9..9a3465c19 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml @@ -6,7 +6,7 @@ site: longitude: -94.6 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2013 diff --git a/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py b/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py index f6960d6f5..4a76bd6a6 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py +++ b/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py @@ -16,12 +16,10 @@ def plot_methanol(model): T = plt.title("Electrolyzer") T.set_position([-0.2, 1.1]) elyzer_elec_in = ( - model.plant.electrolyzer.eco_pem_electrolyzer_performance.get_val("electricity_in") / 1000 + model.plant.electrolyzer.ECOElectrolyzerPerformanceModel.get_val("electricity_in") / 1000 ) elyzer_h2_out = ( - model.plant.electrolyzer.eco_pem_electrolyzer_performance.get_val("hydrogen_out") - / 1000 - * 24 + model.plant.electrolyzer.ECOElectrolyzerPerformanceModel.get_val("hydrogen_out") / 1000 * 24 ) plt.plot(times, elyzer_elec_in, label="Electricity Available [MW]", color=[0.5, 0.5, 1]) plt.plot( diff --git a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml index 37185a5c0..e73d2b8e7 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces methanol" technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 24 @@ -54,9 +54,9 @@ technologies: fraction_to_priority_tech: 0.243998425816608 electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/05_wind_h2_opt/plant_config.yaml b/examples/05_wind_h2_opt/plant_config.yaml index 8242aaa3a..96e98f562 100644 --- a/examples/05_wind_h2_opt/plant_config.yaml +++ b/examples/05_wind_h2_opt/plant_config.yaml @@ -7,7 +7,7 @@ site: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 diff --git a/examples/05_wind_h2_opt/tech_config.yaml b/examples/05_wind_h2_opt/tech_config.yaml index 3ec4aee0f..1aedb2ec9 100644 --- a/examples/05_wind_h2_opt/tech_config.yaml +++ b/examples/05_wind_h2_opt/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant has wind feeding into an electrolyzer with optimization technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 50 @@ -31,9 +31,9 @@ technologies: cost_year: 2019 electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/06_custom_tech/plant_config.yaml b/examples/06_custom_tech/plant_config.yaml index eba73ba0f..0f99bf057 100644 --- a/examples/06_custom_tech/plant_config.yaml +++ b/examples/06_custom_tech/plant_config.yaml @@ -7,7 +7,7 @@ site: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 diff --git a/examples/06_custom_tech/tech_config.yaml b/examples/06_custom_tech/tech_config.yaml index 52a8cd06f..d9d6d4d4d 100644 --- a/examples/06_custom_tech/tech_config.yaml +++ b/examples/06_custom_tech/tech_config.yaml @@ -4,9 +4,9 @@ description: This plant has wind feeding into an electrolyzer with optimization technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 4 diff --git a/examples/07_run_of_river_plant/plant_config.yaml b/examples/07_run_of_river_plant/plant_config.yaml index 200524f70..0c4e578e0 100644 --- a/examples/07_run_of_river_plant/plant_config.yaml +++ b/examples/07_run_of_river_plant/plant_config.yaml @@ -6,8 +6,8 @@ site: longitude: -98.27 resources: - river_resource: - resource_model: "river_resource" + RiverResource: + resource_model: "RiverResource" resource_parameters: filename: "river_data.csv" @@ -24,7 +24,7 @@ technology_interconnections: [ # array of arrays containing left-to-right resource interconnections; resource_to_tech_connections: [ # connect the river resource to the run-of-river hydro technology - ['river_resource', 'river', 'discharge'], + ['RiverResource', 'river', 'discharge'], ] plant: diff --git a/examples/07_run_of_river_plant/tech_config.yaml b/examples/07_run_of_river_plant/tech_config.yaml index 546507180..3a4aad0ea 100644 --- a/examples/07_run_of_river_plant/tech_config.yaml +++ b/examples/07_run_of_river_plant/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant produces electricity from river hydro" technologies: river: performance_model: - model: "run_of_river_hydro_performance" + model: "RunOfRiverHydroPerformanceModel" cost_model: - model: "run_of_river_hydro_cost" + model: "RunOfRiverHydroCostModel" model_inputs: shared_parameters: plant_capacity_mw: 10.0 diff --git a/examples/08_wind_electrolyzer/plant_config.yaml b/examples/08_wind_electrolyzer/plant_config.yaml index 1a95b6d03..11aa5cb46 100644 --- a/examples/08_wind_electrolyzer/plant_config.yaml +++ b/examples/08_wind_electrolyzer/plant_config.yaml @@ -7,7 +7,7 @@ site: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 diff --git a/examples/08_wind_electrolyzer/tech_config.yaml b/examples/08_wind_electrolyzer/tech_config.yaml index 5c3f0813c..df892de4f 100644 --- a/examples/08_wind_electrolyzer/tech_config.yaml +++ b/examples/08_wind_electrolyzer/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant has wind feeding into an electrolyzer without optimizat technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 100 @@ -31,9 +31,9 @@ technologies: cost_year: 2019 electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/09_co2/direct_ocean_capture/plant_config.yaml b/examples/09_co2/direct_ocean_capture/plant_config.yaml index e88de1fbd..f9ca662a4 100644 --- a/examples/09_co2/direct_ocean_capture/plant_config.yaml +++ b/examples/09_co2/direct_ocean_capture/plant_config.yaml @@ -6,7 +6,7 @@ site: longitude: -124.81 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2010 diff --git a/examples/09_co2/direct_ocean_capture/tech_config.yaml b/examples/09_co2/direct_ocean_capture/tech_config.yaml index 28db428f6..ab285ee01 100644 --- a/examples/09_co2/direct_ocean_capture/tech_config.yaml +++ b/examples/09_co2/direct_ocean_capture/tech_config.yaml @@ -21,9 +21,9 @@ technologies: commodity_storage_units: "kW" wind: performance_model: - model: "floris_wind_plant_performance" + model: "FlorisWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 22 #number of turbines in the farm diff --git a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml index 1b9fcfa47..0b91f6a94 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml @@ -7,7 +7,7 @@ site: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2010 diff --git a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml index e98836827..042fb8fa0 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant has offshore wind and battery connected to a ocean alka technologies: wind: performance_model: - model: "floris_wind_plant_performance" + model: "FlorisWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" dispatch_rule_set: model: "pyomo_dispatch_generic_converter" model_inputs: diff --git a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml index 6a6452ddf..eab01dad3 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml @@ -6,7 +6,7 @@ site: longitude: -122.774111 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2013 diff --git a/examples/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml b/examples/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml index 81dd80988..c44072200 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml @@ -4,9 +4,9 @@ description: "This plant has wind connected to a ocean alkalinity enhancement de technologies: wind: performance_model: - model: "floris_wind_plant_performance" + model: "FlorisWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 3 #number of turbines in the farm diff --git a/examples/10_electrolyzer_om/plant_config.yaml b/examples/10_electrolyzer_om/plant_config.yaml index 45d1739a0..f55a3cce6 100644 --- a/examples/10_electrolyzer_om/plant_config.yaml +++ b/examples/10_electrolyzer_om/plant_config.yaml @@ -7,7 +7,7 @@ site: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 diff --git a/examples/10_electrolyzer_om/tech_config.yaml b/examples/10_electrolyzer_om/tech_config.yaml index 5c70f048d..411a61562 100644 --- a/examples/10_electrolyzer_om/tech_config.yaml +++ b/examples/10_electrolyzer_om/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant has wind feeding into an electrolyzer with optimization technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 2 @@ -31,9 +31,9 @@ technologies: cost_year: 2019 electrolyzer: performance_model: - model: "wombat" + model: "WOMBATElectrolyzerModel" cost_model: - model: "wombat" + model: "WOMBATElectrolyzerModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/12_ammonia_synloop/plant_config.yaml b/examples/12_ammonia_synloop/plant_config.yaml index af910c56b..3b778bbbf 100644 --- a/examples/12_ammonia_synloop/plant_config.yaml +++ b/examples/12_ammonia_synloop/plant_config.yaml @@ -6,12 +6,12 @@ site: longitude: -100.18 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2013 solar_resource: - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2013 diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index d239f1e65..cb1a3c64c 100644 --- a/examples/12_ammonia_synloop/tech_config.yaml +++ b/examples/12_ammonia_synloop/tech_config.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces ammonia" technologies: wind: performance_model: - model: "floris_wind_plant_performance" + model: "FlorisWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 148 #number of turbines in the farm @@ -34,9 +34,9 @@ technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_comm_res_pv_cost" + model: "ATBResComPVCostModel" model_inputs: shared_parameters: pv_capacity_kWdc: 400000 #400 MWdc @@ -105,9 +105,9 @@ technologies: commodity_storage_units: "kW" electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/14_wind_hydrogen_dispatch/hydrogen_dispatch.ipynb b/examples/14_wind_hydrogen_dispatch/hydrogen_dispatch.ipynb index dab8bbd9e..b898acd26 100644 --- a/examples/14_wind_hydrogen_dispatch/hydrogen_dispatch.ipynb +++ b/examples/14_wind_hydrogen_dispatch/hydrogen_dispatch.ipynb @@ -93,10 +93,10 @@ " wind_to_electrolyzer_cable\n", " electricity_in |40580346.11525534| kW wind_to_electrolyzer_cable.electricity_in 356785.74303116 \n", " electrolyzer\n", - " eco_pem_electrolyzer_performance\n", + " ECOElectrolyzerPerformanceModel\n", " electricity_in |40580346.11525534| kW electrolyzer.electricity_in 356785.74303116 \n", " n_clusters [18.] unitless electrolyzer.n_clusters 18.0 \n", - " singlitico_electrolyzer_cost\n", + " SingliticoCostModel\n", " total_hydrogen_produced [58145418.05837836] kg/year electrolyzer.total_hydrogen_produced \n", " electricity_in |40393548.72275606| kW electrolyzer.electricity_in \n", " electrolyzer_size_mw [720.] MW electrolyzer.electrolyzer_size_mw \n", @@ -196,14 +196,14 @@ " wind_to_electrolyzer_cable\n", " electricity_out |40580346.11525534| kW wind_to_electrolyzer_cable.electricity_out 356785.74303116 \n", " electrolyzer\n", - " eco_pem_electrolyzer_performance\n", + " ECOElectrolyzerPerformanceModel\n", " hydrogen_out |795675.02916366| kg/h electrolyzer.hydrogen_out 7038.41603938 \n", " time_until_replacement [32941.63777869] h electrolyzer.time_until_replacement 32941.63777869 \n", " total_hydrogen_produced [58458963.85099926] kg/year electrolyzer.total_hydrogen_produced 58458963.85099926 \n", " efficiency [0.77744828] None electrolyzer.efficiency 0.77744828 \n", " rated_h2_production_kg_pr_hr [14118.38052473] kg/h electrolyzer.rated_h2_production_kg_pr_hr 14118.38052473 \n", " electrolyzer_size_mw [720.] MW electrolyzer.electrolyzer_size_mw 720.0 \n", - " singlitico_electrolyzer_cost\n", + " SingliticoCostModel\n", " CapEx [6.75464089e+08] USD electrolyzer.CapEx 675464089.1739205 \n", " OpEx [16541049.81608545] USD/year electrolyzer.OpEx 16541049.81608545 \n", " VarOpEx |0.0| USD/year electrolyzer.VarOpEx 0.0 \n", diff --git a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml index 34bb80242..ce4be62f2 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml @@ -8,7 +8,7 @@ site: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 diff --git a/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml index 0399f13bd..d5a684ea2 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces hydrogen" technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 100 @@ -31,9 +31,9 @@ technologies: cost_year: 2019 electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/15_wind_solar_electrolyzer/plant_config.yaml b/examples/15_wind_solar_electrolyzer/plant_config.yaml index eacb0fb2d..101b0ee87 100644 --- a/examples/15_wind_solar_electrolyzer/plant_config.yaml +++ b/examples/15_wind_solar_electrolyzer/plant_config.yaml @@ -7,14 +7,14 @@ site: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: latitude: 35.2018863 longitude: -101.945027 resource_year: 2012 solar_resource: - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2013 resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" diff --git a/examples/15_wind_solar_electrolyzer/tech_config.yaml b/examples/15_wind_solar_electrolyzer/tech_config.yaml index d49b5d39e..b84c0cfab 100644 --- a/examples/15_wind_solar_electrolyzer/tech_config.yaml +++ b/examples/15_wind_solar_electrolyzer/tech_config.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces hydrogen" technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 100 @@ -31,9 +31,9 @@ technologies: cost_year: 2019 solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_utility_pv_cost" + model: "ATBUtilityPVCostModel" model_inputs: performance_parameters: pv_capacity_kWdc: 100000 #100 MW @@ -66,9 +66,9 @@ technologies: commodity_units: "kW" electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/16_natural_gas/plant_config.yaml b/examples/16_natural_gas/plant_config.yaml index efeca8c24..95f19eeaa 100644 --- a/examples/16_natural_gas/plant_config.yaml +++ b/examples/16_natural_gas/plant_config.yaml @@ -8,7 +8,7 @@ site: resources: solar_resource: - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2013 resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" diff --git a/examples/16_natural_gas/tech_config.yaml b/examples/16_natural_gas/tech_config.yaml index d14a761ca..ce0ec6683 100644 --- a/examples/16_natural_gas/tech_config.yaml +++ b/examples/16_natural_gas/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant produces electricity from natural gas using a combined technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_utility_pv_cost" + model: "ATBUtilityPVCostModel" model_inputs: performance_parameters: pv_capacity_kWdc: 200000 #200 MWdc diff --git a/examples/17_splitter_wind_doc_h2/plant_config.yaml b/examples/17_splitter_wind_doc_h2/plant_config.yaml index 1467f96bd..9d507ef18 100644 --- a/examples/17_splitter_wind_doc_h2/plant_config.yaml +++ b/examples/17_splitter_wind_doc_h2/plant_config.yaml @@ -6,7 +6,7 @@ site: longitude: -124.81 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2010 diff --git a/examples/17_splitter_wind_doc_h2/tech_config.yaml b/examples/17_splitter_wind_doc_h2/tech_config.yaml index 202058873..ea1b1fd14 100644 --- a/examples/17_splitter_wind_doc_h2/tech_config.yaml +++ b/examples/17_splitter_wind_doc_h2/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant has offshore wind and wave energy connected to a power technologies: wind: performance_model: - model: "floris_wind_plant_performance" + model: "FlorisWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 8 #number of turbines in the farm @@ -73,9 +73,9 @@ technologies: electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml index b7c2897f9..f172dcabe 100644 --- a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml @@ -7,7 +7,7 @@ site: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml index 894100722..39930d622 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces hydrogen" technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" dispatch_rule_set: model: "pyomo_dispatch_generic_converter" model_inputs: diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml index 22d2d88b7..4239093d0 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces hydrogen" technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" dispatch_rule_set: model: "pyomo_dispatch_generic_converter" resource: diff --git a/examples/19_simple_dispatch/plant_config.yaml b/examples/19_simple_dispatch/plant_config.yaml index 3e0750376..c420c1e0d 100644 --- a/examples/19_simple_dispatch/plant_config.yaml +++ b/examples/19_simple_dispatch/plant_config.yaml @@ -7,7 +7,7 @@ site: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 diff --git a/examples/19_simple_dispatch/tech_config.yaml b/examples/19_simple_dispatch/tech_config.yaml index 264660ca8..88e7d84c8 100644 --- a/examples/19_simple_dispatch/tech_config.yaml +++ b/examples/19_simple_dispatch/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant has wind feeding into an electrolyzer with optimization technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 2 diff --git a/examples/20_solar_electrolyzer_doe/plant_config.yaml b/examples/20_solar_electrolyzer_doe/plant_config.yaml index a4dfb69f9..dde6df8bd 100644 --- a/examples/20_solar_electrolyzer_doe/plant_config.yaml +++ b/examples/20_solar_electrolyzer_doe/plant_config.yaml @@ -8,7 +8,7 @@ site: resources: solar_resource: - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2012 resource_filename: "34.22_-102.75_2012_goes_aggregated_v4_60min_utc_tz.csv" diff --git a/examples/20_solar_electrolyzer_doe/tech_config.yaml b/examples/20_solar_electrolyzer_doe/tech_config.yaml index 04b841133..4a29bcdd6 100644 --- a/examples/20_solar_electrolyzer_doe/tech_config.yaml +++ b/examples/20_solar_electrolyzer_doe/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant produces hydrogen using water electrolysis powered by a technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_utility_pv_cost" + model: "ATBUtilityPVCostModel" model_inputs: performance_parameters: pv_capacity_kWdc: 400000 @@ -31,9 +31,9 @@ technologies: cost_year: 2022 electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "custom_electrolyzer_cost" + model: "CustomElectrolyzerCostModel" model_inputs: performance_parameters: size_mode: "normal" diff --git a/examples/22_site_doe/plant_config.yaml b/examples/22_site_doe/plant_config.yaml index d7e1fd0c5..deb2550ad 100644 --- a/examples/22_site_doe/plant_config.yaml +++ b/examples/22_site_doe/plant_config.yaml @@ -8,7 +8,7 @@ site: resources: solar_resource: - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2012 use_fixed_resource_location: False #set to False since sweeping sites diff --git a/examples/22_site_doe/tech_config.yaml b/examples/22_site_doe/tech_config.yaml index fe88833af..a8b72f678 100644 --- a/examples/22_site_doe/tech_config.yaml +++ b/examples/22_site_doe/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant produces electricity from a solar-PV system" technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_utility_pv_cost" + model: "ATBUtilityPVCostModel" model_inputs: performance_parameters: pv_capacity_kWdc: 400000 diff --git a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml index 5741a9b11..3a6ef73a1 100644 --- a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml @@ -4,9 +4,9 @@ description: This plant produces electricity with wind, solar, and a natural gas technologies: wind: performance_model: - model: pysam_wind_plant_performance + model: PYSAMWindPlantPerformanceModel cost_model: - model: atb_wind_cost + model: ATBWindPlantCostModel model_inputs: performance_parameters: num_turbines: 20 @@ -35,9 +35,9 @@ technologies: solar: performance_model: - model: pysam_solar_plant_performance + model: PYSAMSolarPlantPerformanceModel cost_model: - model: atb_utility_pv_cost + model: ATBUtilityPVCostModel model_inputs: performance_parameters: pv_capacity_kWdc: 100000 #100 MWdc diff --git a/examples/23_solar_wind_ng_demand/plant_config.yaml b/examples/23_solar_wind_ng_demand/plant_config.yaml index 6cbe30bb7..711f3954c 100644 --- a/examples/23_solar_wind_ng_demand/plant_config.yaml +++ b/examples/23_solar_wind_ng_demand/plant_config.yaml @@ -20,11 +20,11 @@ site: resources: wind_resource: - resource_model: wind_toolkit_v2_api + resource_model: WTKNRELDeveloperAPIWindResource resource_parameters: resource_year: 2013 solar_resource: - resource_model: goes_aggregated_solar_v4_api + resource_model: GOESAggregatedSolarAPI resource_parameters: resource_year: 2013 resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" diff --git a/examples/23_solar_wind_ng_demand/tech_config.yaml b/examples/23_solar_wind_ng_demand/tech_config.yaml index c57633c00..725474ea8 100644 --- a/examples/23_solar_wind_ng_demand/tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/tech_config.yaml @@ -4,9 +4,9 @@ description: This plant produces electricity with wind, solar, and a natural gas technologies: wind: performance_model: - model: pysam_wind_plant_performance + model: PYSAMWindPlantPerformanceModel cost_model: - model: atb_wind_cost + model: ATBWindPlantCostModel model_inputs: performance_parameters: num_turbines: 20 @@ -35,9 +35,9 @@ technologies: solar: performance_model: - model: pysam_solar_plant_performance + model: PYSAMSolarPlantPerformanceModel cost_model: - model: atb_utility_pv_cost + model: ATBUtilityPVCostModel model_inputs: performance_parameters: pv_capacity_kWdc: 100000 #100 MWdc diff --git a/examples/24_solar_battery_grid/plant_config.yaml b/examples/24_solar_battery_grid/plant_config.yaml index 169c3670e..5bb6703b9 100644 --- a/examples/24_solar_battery_grid/plant_config.yaml +++ b/examples/24_solar_battery_grid/plant_config.yaml @@ -8,7 +8,7 @@ site: resources: solar_resource: - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2013 resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" diff --git a/examples/24_solar_battery_grid/tech_config.yaml b/examples/24_solar_battery_grid/tech_config.yaml index 48dc0bc50..d59090829 100644 --- a/examples/24_solar_battery_grid/tech_config.yaml +++ b/examples/24_solar_battery_grid/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant produces electricity from natural gas using a combined technologies: solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_utility_pv_cost" + model: "ATBUtilityPVCostModel" model_inputs: performance_parameters: pv_capacity_kWdc: 200000 #200 MWdc diff --git a/examples/25_sizing_modes/tech_config.yaml b/examples/25_sizing_modes/tech_config.yaml index 9914dc7ea..e76e079fb 100644 --- a/examples/25_sizing_modes/tech_config.yaml +++ b/examples/25_sizing_modes/tech_config.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces ammonia" technologies: electrolyzer: performance_model: - model: "eco_pem_electrolyzer_performance" + model: "ECOElectrolyzerPerformanceModel" cost_model: - model: "singlitico_electrolyzer_cost" + model: "SingliticoCostModel" model_inputs: shared_parameters: location: "onshore" diff --git a/examples/26_floris/plant_config.yaml b/examples/26_floris/plant_config.yaml index a12072147..0181e7422 100644 --- a/examples/26_floris/plant_config.yaml +++ b/examples/26_floris/plant_config.yaml @@ -7,7 +7,7 @@ site: resources: wind_resource: - resource_model: "openmeteo_wind_api" + resource_model: "OpenMeteoHistoricalWindResource" resource_parameters: resource_year: 2023 diff --git a/examples/26_floris/tech_config.yaml b/examples/26_floris/tech_config.yaml index 833bf636d..411b5cb43 100644 --- a/examples/26_floris/tech_config.yaml +++ b/examples/26_floris/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant runs a wind farm using FLORIS" technologies: wind: performance_model: - model: "floris_wind_plant_performance" + model: "FlorisWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 100 #number of turbines in the farm diff --git a/h2integrate/converters/hydrogen/test/test_custom_electrolyzer_cost_model.py b/h2integrate/converters/hydrogen/test/test_custom_electrolyzer_cost_model.py index 368e465e4..ffbad3ed0 100644 --- a/h2integrate/converters/hydrogen/test/test_custom_electrolyzer_cost_model.py +++ b/h2integrate/converters/hydrogen/test/test_custom_electrolyzer_cost_model.py @@ -1,7 +1,7 @@ import pytest import openmdao.api as om -from h2integrate.converters.hydrogen.custom_electrolyzer_cost_model import ( +from h2integrate.converters.hydrogen.CustomElectrolyzerCostModel_model import ( CustomElectrolyzerCostModel, ) diff --git a/h2integrate/converters/wind/test/test_floris_wind.py b/h2integrate/converters/wind/test/test_floris_wind.py index 4a0e0d0d5..31ce2e48d 100644 --- a/h2integrate/converters/wind/test/test_floris_wind.py +++ b/h2integrate/converters/wind/test/test_floris_wind.py @@ -45,7 +45,7 @@ def plant_config_openmeteo(): "longitude": -95.19757, "resource": { "wind_resource": { - "resource_model": "openmeteo_wind_api", + "resource_model": "OpenMeteoHistoricalWindResource", "resource_parameters": { "resource_year": 2023, }, @@ -68,7 +68,7 @@ def plant_config_wtk(): "longitude": -101.945027, "resource": { "wind_resource": { - "resource_model": "wind_toolkit_v2_api", + "resource_model": "WTKNRELDeveloperAPIWindResource", "resource_parameters": { "resource_year": 2012, }, diff --git a/h2integrate/converters/wind/tools/test/test_resource_tools.py b/h2integrate/converters/wind/tools/test/test_resource_tools.py index 50a7c2dd0..92afe2c24 100644 --- a/h2integrate/converters/wind/tools/test/test_resource_tools.py +++ b/h2integrate/converters/wind/tools/test/test_resource_tools.py @@ -20,7 +20,7 @@ def wind_resource_data(): "longitude": -102.75, "resources": { "wind_resource": { - "resource_model": "wind_toolkit_v2_api", + "resource_model": "WTKNRELDeveloperAPIWindResource", "resource_parameters": { "latitude": 35.2018863, "longitude": -101.945027, diff --git a/h2integrate/core/h2integrate_model.py b/h2integrate/core/h2integrate_model.py index 930e6ba48..a0b66aa55 100644 --- a/h2integrate/core/h2integrate_model.py +++ b/h2integrate/core/h2integrate_model.py @@ -383,7 +383,12 @@ def create_technology_models(self): self.cost_models = [] self.finance_models = [] - combined_performance_and_cost_models = ["hopp", "h2_storage", "wombat", "iron"] + combined_performance_and_cost_models = [ + "hopp", + "h2_storage", + "WOMBATElectrolyzerModel", + "iron", + ] if any(tech == "site" for tech in self.technology_config["technologies"]): msg = ( diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 44d5c0190..8a498f710 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -152,34 +152,34 @@ supported_models = { # Resources - "river_resource": RiverResource, - "wind_toolkit_v2_api": WTKNRELDeveloperAPIWindResource, - "openmeteo_wind_api": OpenMeteoHistoricalWindResource, - "goes_aggregated_solar_v4_api": GOESAggregatedSolarAPI, - "goes_conus_solar_v4_api": GOESConusSolarAPI, - "goes_fulldisc_solar_v4_api": GOESFullDiscSolarAPI, - "goes_tmy_solar_v4_api": GOESTMYSolarAPI, - "meteosat_solar_v4_api": MeteosatPrimeMeridianSolarAPI, - "meteosat_tmy_solar_v4_api": MeteosatPrimeMeridianTMYSolarAPI, - "himawari7_solar_v3_api": Himawari7SolarAPI, - "himawari8_solar_v3_api": Himawari8SolarAPI, - "himawari_tmy_solar_v3_api": HimawariTMYSolarAPI, + "RiverResource": RiverResource, + "WTKNRELDeveloperAPIWindResource": WTKNRELDeveloperAPIWindResource, + "OpenMeteoHistoricalWindResource": OpenMeteoHistoricalWindResource, + "GOESAggregatedSolarAPI": GOESAggregatedSolarAPI, + "GOESConusSolarAPI": GOESConusSolarAPI, + "GOESFullDiscSolarAPI": GOESFullDiscSolarAPI, + "GOESTMYSolarAPI": GOESTMYSolarAPI, + "MeteosatPrimeMeridianSolarAPI": MeteosatPrimeMeridianSolarAPI, + "MeteosatPrimeMeridianTMYSolarAPI": MeteosatPrimeMeridianTMYSolarAPI, + "Himawari7SolarAPI": Himawari7SolarAPI, + "Himawari8SolarAPI": Himawari8SolarAPI, + "HimawariTMYSolarAPI": HimawariTMYSolarAPI, # Converters - "atb_wind_cost": ATBWindPlantCostModel, - "pysam_wind_plant_performance": PYSAMWindPlantPerformanceModel, - "floris_wind_plant_performance": FlorisWindPlantPerformanceModel, - "pysam_solar_plant_performance": PYSAMSolarPlantPerformanceModel, - "atb_utility_pv_cost": ATBUtilityPVCostModel, - "atb_comm_res_pv_cost": ATBResComPVCostModel, - "run_of_river_hydro_performance": RunOfRiverHydroPerformanceModel, - "run_of_river_hydro_cost": RunOfRiverHydroCostModel, - "eco_pem_electrolyzer_performance": ECOElectrolyzerPerformanceModel, - "singlitico_electrolyzer_cost": SingliticoCostModel, - "basic_electrolyzer_cost": BasicElectrolyzerCostModel, - "custom_electrolyzer_cost": CustomElectrolyzerCostModel, - "wombat": WOMBATElectrolyzerModel, - "simple_ASU_cost": SimpleASUCostModel, - "simple_ASU_performance": SimpleASUPerformanceModel, + "ATBWindPlantCostModel": ATBWindPlantCostModel, + "PYSAMWindPlantPerformanceModel": PYSAMWindPlantPerformanceModel, + "FlorisWindPlantPerformanceModel": FlorisWindPlantPerformanceModel, + "PYSAMSolarPlantPerformanceModel": PYSAMSolarPlantPerformanceModel, + "ATBUtilityPVCostModel": ATBUtilityPVCostModel, + "ATBResComPVCostModel": ATBResComPVCostModel, + "RunOfRiverHydroPerformanceModel": RunOfRiverHydroPerformanceModel, + "RunOfRiverHydroCostModel": RunOfRiverHydroCostModel, + "ECOElectrolyzerPerformanceModel": ECOElectrolyzerPerformanceModel, + "SingliticoCostModel": SingliticoCostModel, + "BasicElectrolyzerCostModel": BasicElectrolyzerCostModel, + "CustomElectrolyzerCostModel": CustomElectrolyzerCostModel, + "WOMBATElectrolyzerModel": WOMBATElectrolyzerModel, + "SimpleASUCostModel": SimpleASUCostModel, + "SimpleASUPerformanceModel": SimpleASUPerformanceModel, "hopp": HOPPComponent, "iron": IronComponent, "iron_mine_performance": IronMinePerformanceComponent, diff --git a/h2integrate/core/test/test_framework.py b/h2integrate/core/test/test_framework.py index 13a676eb2..5c5c06f39 100644 --- a/h2integrate/core/test/test_framework.py +++ b/h2integrate/core/test/test_framework.py @@ -32,7 +32,7 @@ def test_custom_model_name_clash(subtests): tech_config_data = load_tech_yaml(temp_tech_config) tech_config_data["technologies"]["electrolyzer"]["cost_model"] = { - "model": "basic_electrolyzer_cost", + "model": "BasicElectrolyzerCostModel", "model_location": "dummy_path", # path doesn't matter; just that `model_location` exists } @@ -54,8 +54,9 @@ def test_custom_model_name_clash(subtests): with subtests.test("custom model name should not match built-in model names"): # Assert that a ValueError is raised with the expected message when running the model error_msg = ( - r"Custom model_class_name or model_location specified for 'basic_electrolyzer_cost', " - r"but 'basic_electrolyzer_cost' is a built-in H2Integrate model\. " + r"Custom model_class_name or model_location specified for '" + r"BasicElectrolyzerCostModel', but 'BasicElectrolyzerCostModel' is a built-in " + r"H2Integrate model\. " r"Using built-in model instead is not allowed\. " r"If you want to use a custom model, please rename it in your configuration\." ) diff --git a/h2integrate/resource/solar/test/test_nrel_goes_api.py b/h2integrate/resource/solar/test/test_nrel_goes_api.py index 60d342bc7..0cc0e3a75 100644 --- a/h2integrate/resource/solar/test/test_nrel_goes_api.py +++ b/h2integrate/resource/solar/test/test_nrel_goes_api.py @@ -33,7 +33,7 @@ def site_config(): "longitude": -102.75, "resources": { "solar_resource": { - "resource_model": "goes_aggregated_solar_v4_api", + "resource_model": "GOESAggregatedSolarAPI", "resource_parameters": { "latitude": 34.22, "longitude": -102.75, diff --git a/h2integrate/resource/solar/test/test_nrel_himawari_api.py b/h2integrate/resource/solar/test/test_nrel_himawari_api.py index d221cb8ed..5d0ff597e 100644 --- a/h2integrate/resource/solar/test/test_nrel_himawari_api.py +++ b/h2integrate/resource/solar/test/test_nrel_himawari_api.py @@ -32,7 +32,7 @@ def himawari7_site_config_tmy(): "longitude": 152.67935, "resources": { "solar_resource": { - "resource_model": "himawari_tmy_solar_v3_api", + "resource_model": "HimawariTMYSolarAPI", "resource_parameters": { "resource_year": "tmy-2020", }, @@ -50,7 +50,7 @@ def himawari7_site_config(): "longitude": 152.67935, "resources": { "solar_resource": { - "resource_model": "himawari7_solar_v3_api", + "resource_model": "Himawari7SolarAPI", "resource_parameters": { "resource_year": 2013, }, @@ -68,7 +68,7 @@ def himawari8_site_config(): "longitude": 101.656312, "resources": { "solar_resource": { - "resource_model": "himawari8_solar_v3_api", + "resource_model": "Himawari8SolarAPI", "resource_parameters": { "resource_year": 2020, }, diff --git a/h2integrate/resource/solar/test/test_nrel_meteosat_prime_meridian_api.py b/h2integrate/resource/solar/test/test_nrel_meteosat_prime_meridian_api.py index bcd8893d2..6e3382cc8 100644 --- a/h2integrate/resource/solar/test/test_nrel_meteosat_prime_meridian_api.py +++ b/h2integrate/resource/solar/test/test_nrel_meteosat_prime_meridian_api.py @@ -32,7 +32,7 @@ def meteosat_prime_meridian_site(): "longitude": 12.4368, "resources": { "solar_resource": { - "resource_model": "meteosat_solar_v4_api", + "resource_model": "MeteosatPrimeMeridianSolarAPI", "resource_parameters": { "resource_year": 2008, }, @@ -51,7 +51,7 @@ def tmy_site(): "longitude": 152.67935, "resources": { "solar_resource": { - "resource_model": "meteosat_tmy_solar_v4_api", + "resource_model": "MeteosatPrimeMeridianTMYSolarAPI", "resource_parameters": { "resource_year": "tmy-2022", "resource_filename": tmy_file, diff --git a/h2integrate/resource/solar/test/test_pvwatts_integration.py b/h2integrate/resource/solar/test/test_pvwatts_integration.py index dffcfeea6..5d2a4927c 100644 --- a/h2integrate/resource/solar/test/test_pvwatts_integration.py +++ b/h2integrate/resource/solar/test/test_pvwatts_integration.py @@ -130,7 +130,7 @@ def himawari7_site_config_tmy(): "longitude": 152.67935, "resources": { "solar_resource": { - "resource_model": "himawari_tmy_solar_v3_api", + "resource_model": "HimawariTMYSolarAPI", "resource_parameters": { "resource_year": "tmy-2020", }, @@ -148,7 +148,7 @@ def himawari7_site_config(): "longitude": 152.67935, "resources": { "solar_resource": { - "resource_model": "himawari7_solar_v3_api", + "resource_model": "Himawari7SolarAPI", "resource_parameters": { "resource_year": 2013, }, @@ -166,7 +166,7 @@ def himawari8_site_config(): "longitude": 101.656312, "resources": { "solar_resource": { - "resource_model": "himawari8_solar_v3_api", + "resource_model": "Himawari8SolarAPI", "resource_parameters": { "resource_year": 2020, }, diff --git a/h2integrate/resource/wind/test/test_nrel_developer_wtk_api.py b/h2integrate/resource/wind/test/test_nrel_developer_wtk_api.py index a4be5b60d..30b2f640a 100644 --- a/h2integrate/resource/wind/test/test_nrel_developer_wtk_api.py +++ b/h2integrate/resource/wind/test/test_nrel_developer_wtk_api.py @@ -43,7 +43,7 @@ def site_config(): "longitude": -102.75, "resources": { "wind_resource": { - "resource_model": "wind_toolkit_v2_api", + "resource_model": "WTKNRELDeveloperAPIWindResource", "resource_parameters": { "latitude": 35.2018863, "longitude": -101.945027, diff --git a/h2integrate/resource/wind/test/test_openmeteo_wind_api.py b/h2integrate/resource/wind/test/test_openmeteo_wind_api.py index 5f8432801..061c7d59d 100644 --- a/h2integrate/resource/wind/test/test_openmeteo_wind_api.py +++ b/h2integrate/resource/wind/test/test_openmeteo_wind_api.py @@ -42,7 +42,7 @@ def site_config_download_from_web(): "longitude": -95.19757, "resources": { "wind_resource": { - "resource_model": "openmeteo_wind_api", + "resource_model": "OpenMeteoHistoricalWindResource", "resource_parameters": { "resource_year": 2023, "resource_filename": "open-meteo-44.04N95.20W438m.csv", @@ -60,7 +60,7 @@ def site_config_download_from_h2i(): "longitude": -95.19757, "resources": { "wind_resource": { - "resource_model": "openmeteo_wind_api", + "resource_model": "OpenMeteoHistoricalWindResource", "resource_parameters": { "resource_year": 2023, }, From 334cccf985c6ec4f85ed87273fa43512c4308c39 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:07:28 -0800 Subject: [PATCH 02/42] fix broken import --- .../hydrogen/test/test_custom_electrolyzer_cost_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/h2integrate/converters/hydrogen/test/test_custom_electrolyzer_cost_model.py b/h2integrate/converters/hydrogen/test/test_custom_electrolyzer_cost_model.py index ffbad3ed0..368e465e4 100644 --- a/h2integrate/converters/hydrogen/test/test_custom_electrolyzer_cost_model.py +++ b/h2integrate/converters/hydrogen/test/test_custom_electrolyzer_cost_model.py @@ -1,7 +1,7 @@ import pytest import openmdao.api as om -from h2integrate.converters.hydrogen.CustomElectrolyzerCostModel_model import ( +from h2integrate.converters.hydrogen.custom_electrolyzer_cost_model import ( CustomElectrolyzerCostModel, ) From 8e3b99ad5149bb3f9eea6da2a781f485141e63e6 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:18:24 -0800 Subject: [PATCH 03/42] replce hopp shorthand with class name --- .../adding_a_new_technology.md | 2 +- docs/user_guide/cost_years.md | 2 +- docs/user_guide/model_overview.md | 23 ++++++++++++------- docs/user_guide/postprocessing_results.md | 14 +++++------ .../direct_ocean_capture/tech_config.yaml | 4 ++-- .../11_hybrid_energy_plant/tech_config.yaml | 2 +- .../run_csv_doe.ipynb | 4 ++-- examples/25_sizing_modes/run_size_modes.ipynb | 4 ++-- examples/25_sizing_modes/tech_config.yaml | 4 ++-- h2integrate/core/h2integrate_model.py | 2 +- h2integrate/core/supported_models.py | 4 ++-- 11 files changed, 36 insertions(+), 29 deletions(-) diff --git a/docs/developer_guide/adding_a_new_technology.md b/docs/developer_guide/adding_a_new_technology.md index 254df8f11..81d0f24b1 100644 --- a/docs/developer_guide/adding_a_new_technology.md +++ b/docs/developer_guide/adding_a_new_technology.md @@ -228,7 +228,7 @@ If you're adding a technology where this makes sense, you can follow the same st For now, modify a single the `create_technology_models.py` file to include your new technology as such: ```python -combined_performance_and_cost_model_technologies = ['hopp', 'h2_storage', ''] +combined_performance_and_cost_model_technologies = ['HOPPComponent', 'h2_storage', ''] # Create a technology group for each technology for tech_name, individual_tech_config in self.technology_config['technologies'].items(): diff --git a/docs/user_guide/cost_years.md b/docs/user_guide/cost_years.md index f6b3101ba..4fee789d9 100644 --- a/docs/user_guide/cost_years.md +++ b/docs/user_guide/cost_years.md @@ -34,7 +34,7 @@ For [cost models based on user-provided costs](#cost-models-with-user-input-cost | `ATBUtilityPVCostModel` | | `ATBResComPVCostModel` | | `SimpleASUCostModel` | -| `hopp` | +| `HOPPComponent` | | `RunOfRiverHydroCostModel` | | `smr_methanol_plant_cost` | | `stimulated_geoh2_cost` | diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 0cacc7f5c..9ca3861b0 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -41,7 +41,7 @@ The inputs, outputs, and corresponding technology that are currently available i | `wind` | electricity | wind resource | | `solar` | electricity | solar resource | | `river` | electricity | river resource | -| `hopp` | electricity | N/A | +| `HOPPComponent` | electricity | N/A | | `electrolyzer` | hydrogen | electricity | | `geoh2` | hydrogen | rock type | | `steel` | steel | hydrogen | @@ -100,12 +100,19 @@ Connection: `[source_tech, dest_tech, transport_commodity, transport_technology] # Technology Models Overview Below summarizes the available performance, cost, and financial models for each model type. The list of supported models is also available in [supported_models.py](../../h2integrate/core/supported_models.py) -- [Resource](#resource-models) -- [Converters](#converter-models) -- [Transport](#transport-models) -- [Storage](#storage-models) -- [Basic Operations](#basic-operations) -- [Control](#control-models) +- [Model Overview](#model-overview) + - [Resource](#resource) + - [Converters](#converters) + - [Transport](#transport) + - [Storage](#storage) + - [Control](#control) +- [Technology Models Overview](#technology-models-overview) + - [Resource models](#resource-models) + - [Converter models](#converter-models) + - [Transport Models](#transport-models) + - [Storage Models](#storage-models) + - [Basic Operations](#basic-operations) + - [Control Models](#control-models) (resource-models)= ## Resource models @@ -149,7 +156,7 @@ Below summarizes the available performance, cost, and financial models for each + `'RunOfRiverHydroCostModel'` - `hopp`: hybrid plant - combined performance and cost model: - + `'hopp'` + + `'HOPPComponent'` - `electrolyzer`: hydrogen electrolysis - combined performance and cost: + `'WOMBATElectrolyzerModel'` diff --git a/docs/user_guide/postprocessing_results.md b/docs/user_guide/postprocessing_results.md index 7efd35f06..d5818ed36 100644 --- a/docs/user_guide/postprocessing_results.md +++ b/docs/user_guide/postprocessing_results.md @@ -19,11 +19,11 @@ Here is a snippet of the output from a simulation: varname val units prom_name ------------------------------------ ------------------- -------- ----------------------------------------------- plant - hopp - hopp - electricity_out |85694382.72934064| kW hopp.electricity_out - CapEx [4.00631628e+09] USD hopp.CapEx - OpEx [70417369.71000001] USD/year hopp.OpEx + HOPPComponent + HOPPComponent + electricity_out |85694382.72934064| kW HOPPComponent.electricity_out + CapEx [4.00631628e+09] USD HOPPComponent.CapEx + OpEx [70417369.71000001] USD/year HOPPComponent.OpEx hopp_to_steel_cable electricity_out |85694382.72934064| kW hopp_to_steel_cable.electricity_out hopp_to_electrolyzer_cable @@ -122,7 +122,7 @@ When providing a list of variable names, the function uses the default units for # Get a subset of timeseries data using a list of variable names output_vars = [ "electrolyzer.hydrogen_out", - "hopp.electricity_out", + "HOPPComponent.electricity_out", "ammonia.ammonia_out", "h2_storage.hydrogen_out", ] @@ -158,7 +158,7 @@ When providing a dictionary with variable names as keys and dictionaries as valu # Specify variables with alternative names and/or units vars_with_options = { "electrolyzer.hydrogen_out": {"alternative_name": "Electrolyzer Hydrogen Output"}, - "hopp.electricity_out": {"units": "kW", "alternative_name": "Plant Electricity Output"}, + "HOPPComponent.electricity_out": {"units": "kW", "alternative_name": "Plant Electricity Output"}, "ammonia.ammonia_out": {"alternative_name": None}, # Uses default variable name "h2_storage.hydrogen_out": {"alternative_name": "H2 Storage Hydrogen Output"}, } diff --git a/examples/09_co2/direct_ocean_capture/tech_config.yaml b/examples/09_co2/direct_ocean_capture/tech_config.yaml index ab285ee01..8b427c78c 100644 --- a/examples/09_co2/direct_ocean_capture/tech_config.yaml +++ b/examples/09_co2/direct_ocean_capture/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant has offshore wind and wave energy connected to a direct technologies: hopp: performance_model: - model: "hopp" + model: "HOPPComponent" cost_model: - model: "hopp" + model: "HOPPComponent" dispatch_rule_set: model: "pyomo_dispatch_generic_converter" model_inputs: diff --git a/examples/11_hybrid_energy_plant/tech_config.yaml b/examples/11_hybrid_energy_plant/tech_config.yaml index bcd8ceadb..c5e30d1a7 100644 --- a/examples/11_hybrid_energy_plant/tech_config.yaml +++ b/examples/11_hybrid_energy_plant/tech_config.yaml @@ -4,7 +4,7 @@ description: "This plant is a simple passthrough wind+solar+battery hybrid energ technologies: hopp: performance_model: - model: hopp + model: HOPPComponent model_inputs: shared_parameters: cost_year: 2024 diff --git a/examples/20_solar_electrolyzer_doe/run_csv_doe.ipynb b/examples/20_solar_electrolyzer_doe/run_csv_doe.ipynb index 38de1576f..84903fdc7 100644 --- a/examples/20_solar_electrolyzer_doe/run_csv_doe.ipynb +++ b/examples/20_solar_electrolyzer_doe/run_csv_doe.ipynb @@ -361,7 +361,7 @@ ], "metadata": { "kernelspec": { - "display_name": "h2i-fork", + "display_name": "h2integrate", "language": "python", "name": "python3" }, @@ -375,7 +375,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.13" + "version": "3.13.3" }, "orig_nbformat": 4 }, diff --git a/examples/25_sizing_modes/run_size_modes.ipynb b/examples/25_sizing_modes/run_size_modes.ipynb index 94897ed44..ccbdbfc82 100644 --- a/examples/25_sizing_modes/run_size_modes.ipynb +++ b/examples/25_sizing_modes/run_size_modes.ipynb @@ -713,7 +713,7 @@ ], "metadata": { "kernelspec": { - "display_name": "hopp", + "display_name": "h2integrate", "language": "python", "name": "python3" }, @@ -727,7 +727,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.13" + "version": "3.13.3" } }, "nbformat": 4, diff --git a/examples/25_sizing_modes/tech_config.yaml b/examples/25_sizing_modes/tech_config.yaml index e76e079fb..ae0910766 100644 --- a/examples/25_sizing_modes/tech_config.yaml +++ b/examples/25_sizing_modes/tech_config.yaml @@ -27,9 +27,9 @@ technologies: replacement_cost_percent: 0.15 # percent of capex - H2A default case hopp: performance_model: - model: "hopp" + model: "HOPPComponent" cost_model: - model: "hopp" + model: "HOPPComponent" model_inputs: shared_parameters: cost_year: 2019 diff --git a/h2integrate/core/h2integrate_model.py b/h2integrate/core/h2integrate_model.py index a0b66aa55..f7d053cea 100644 --- a/h2integrate/core/h2integrate_model.py +++ b/h2integrate/core/h2integrate_model.py @@ -384,7 +384,7 @@ def create_technology_models(self): self.finance_models = [] combined_performance_and_cost_models = [ - "hopp", + "HOPPComponent", "h2_storage", "WOMBATElectrolyzerModel", "iron", diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 8a498f710..2046c0011 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -180,7 +180,7 @@ "WOMBATElectrolyzerModel": WOMBATElectrolyzerModel, "SimpleASUCostModel": SimpleASUCostModel, "SimpleASUPerformanceModel": SimpleASUPerformanceModel, - "hopp": HOPPComponent, + "HOPPComponent": HOPPComponent, "iron": IronComponent, "iron_mine_performance": IronMinePerformanceComponent, "iron_mine_cost": IronMineCostComponent, @@ -284,7 +284,7 @@ def is_electricity_producer(tech_name: str) -> bool: "solar", "pv", "river", - "hopp", + "HOPPComponent", "natural_gas_plant", "grid_buy", ] From 37a3dc1e4aa9a5c6ab6b6d5d1c2a38cfaa31d599 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:58:03 -0800 Subject: [PATCH 04/42] iron -> IronComponent --- h2integrate/core/h2integrate_model.py | 2 +- h2integrate/core/supported_models.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/h2integrate/core/h2integrate_model.py b/h2integrate/core/h2integrate_model.py index f7d053cea..665d1773d 100644 --- a/h2integrate/core/h2integrate_model.py +++ b/h2integrate/core/h2integrate_model.py @@ -387,7 +387,7 @@ def create_technology_models(self): "HOPPComponent", "h2_storage", "WOMBATElectrolyzerModel", - "iron", + "IronComponent", ] if any(tech == "site" for tech in self.technology_config["technologies"]): diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 2046c0011..97e1680a3 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -181,7 +181,7 @@ "SimpleASUCostModel": SimpleASUCostModel, "SimpleASUPerformanceModel": SimpleASUPerformanceModel, "HOPPComponent": HOPPComponent, - "iron": IronComponent, + "IronComponent": IronComponent, "iron_mine_performance": IronMinePerformanceComponent, "iron_mine_cost": IronMineCostComponent, "iron_plant_performance": IronPlantPerformanceComponent, From 1f65e6491f35e4b01103b6acb8baeda0a32d0965 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:03:04 -0800 Subject: [PATCH 05/42] update iron mine models --- examples/21_iron_mn_to_il/tech_config_old.yaml | 4 ++-- h2integrate/core/supported_models.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/21_iron_mn_to_il/tech_config_old.yaml b/examples/21_iron_mn_to_il/tech_config_old.yaml index afe79faf9..d379b22e3 100644 --- a/examples/21_iron_mn_to_il/tech_config_old.yaml +++ b/examples/21_iron_mn_to_il/tech_config_old.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces iron" technologies: iron_mine: performance_model: - model: "iron_mine_performance" + model: "IronMinePerformanceComponent" cost_model: - model: "iron_mine_cost" + model: "IronMineCostComponent" model_inputs: shared_parameters: mine: "Northshore" diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 97e1680a3..62e2c23b4 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -182,8 +182,8 @@ "SimpleASUPerformanceModel": SimpleASUPerformanceModel, "HOPPComponent": HOPPComponent, "IronComponent": IronComponent, - "iron_mine_performance": IronMinePerformanceComponent, - "iron_mine_cost": IronMineCostComponent, + "IronMinePerformanceComponent": IronMinePerformanceComponent, + "IronMineCostComponent": IronMineCostComponent, "iron_plant_performance": IronPlantPerformanceComponent, "iron_plant_cost": IronPlantCostComponent, "iron_mine_performance_martin": MartinIronMinePerformanceComponent, # standalone model From 3d7f21c42d72dbda1df504ab1a69cb643da57bb3 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:04:51 -0800 Subject: [PATCH 06/42] update iron plant --- examples/21_iron_mn_to_il/tech_config_old.yaml | 4 ++-- h2integrate/core/supported_models.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/21_iron_mn_to_il/tech_config_old.yaml b/examples/21_iron_mn_to_il/tech_config_old.yaml index d379b22e3..11ef9acd2 100644 --- a/examples/21_iron_mn_to_il/tech_config_old.yaml +++ b/examples/21_iron_mn_to_il/tech_config_old.yaml @@ -43,9 +43,9 @@ technologies: cost_year: 2022 iron_plant: performance_model: - model: "iron_plant_performance" + model: "IronPlantPerformanceComponent" cost_model: - model: "iron_plant_cost" + model: "IronPlantCostComponent" model_inputs: shared_parameters: winning_type: "ng" diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 62e2c23b4..89b73902f 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -184,8 +184,8 @@ "IronComponent": IronComponent, "IronMinePerformanceComponent": IronMinePerformanceComponent, "IronMineCostComponent": IronMineCostComponent, - "iron_plant_performance": IronPlantPerformanceComponent, - "iron_plant_cost": IronPlantCostComponent, + "IronPlantPerformanceComponent": IronPlantPerformanceComponent, + "IronPlantCostComponent": IronPlantCostComponent, "iron_mine_performance_martin": MartinIronMinePerformanceComponent, # standalone model "iron_mine_cost_martin": MartinIronMineCostComponent, # standalone model "ng_dri_performance_rosner": NaturalGasIronReductionPlantPerformanceComponent, From 90d0fc85401c793dd2ab0cac952ae594857703b1 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:05:56 -0800 Subject: [PATCH 07/42] update martin iron model --- docs/user_guide/model_overview.md | 4 ++-- examples/21_iron_mn_to_il/tech_config.yaml | 4 ++-- h2integrate/core/supported_models.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 9ca3861b0..c5be559b4 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -229,9 +229,9 @@ Below summarizes the available performance, cost, and financial models for each + `'grid_cost'` - `iron_ore`: iron ore mining and refining - performance models: - + `'iron_mine_performance_martin'` + + `'MartinIronMinePerformanceComponent'` - cost models: - + `'iron_mine_cost_martin'` + + `'MartinIronMineCostComponent'` - `iron_dri`: iron ore direct reduction - performance models: + `'ng_dri_performance_rosner'` diff --git a/examples/21_iron_mn_to_il/tech_config.yaml b/examples/21_iron_mn_to_il/tech_config.yaml index eca484274..7f23e9df8 100644 --- a/examples/21_iron_mn_to_il/tech_config.yaml +++ b/examples/21_iron_mn_to_il/tech_config.yaml @@ -38,9 +38,9 @@ technologies: iron_mine: performance_model: - model: "iron_mine_performance_martin" + model: "MartinIronMinePerformanceComponent" cost_model: - model: "iron_mine_cost_martin" + model: "MartinIronMineCostComponent" model_inputs: shared_parameters: mine: "Northshore" diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 89b73902f..4f1613992 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -186,8 +186,8 @@ "IronMineCostComponent": IronMineCostComponent, "IronPlantPerformanceComponent": IronPlantPerformanceComponent, "IronPlantCostComponent": IronPlantCostComponent, - "iron_mine_performance_martin": MartinIronMinePerformanceComponent, # standalone model - "iron_mine_cost_martin": MartinIronMineCostComponent, # standalone model + "MartinIronMinePerformanceComponent": MartinIronMinePerformanceComponent, # standalone model + "MartinIronMineCostComponent": MartinIronMineCostComponent, # standalone model "ng_dri_performance_rosner": NaturalGasIronReductionPlantPerformanceComponent, "ng_dri_cost_rosner": NaturalGasIronReductionPlantCostComponent, # standalone model "h2_dri_performance_rosner": HydrogenIronReductionPlantPerformanceComponent, From 94bfe455f35d2e967e34e824b93165c1dd4738c5 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:18:08 -0800 Subject: [PATCH 08/42] replace rosner models --- docs/user_guide/model_overview.md | 8 ++++---- examples/21_iron_mn_to_il/tech_config.yaml | 4 ++-- h2integrate/core/supported_models.py | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index c5be559b4..993f094d9 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -234,11 +234,11 @@ Below summarizes the available performance, cost, and financial models for each + `'MartinIronMineCostComponent'` - `iron_dri`: iron ore direct reduction - performance models: - + `'ng_dri_performance_rosner'` - + `'h2_dri_performance_rosner'` + + `'NaturalGasIronReductionPlantPerformanceComponent'` + + `'HydrogenIronReductionPlantPerformanceComponent'` - cost models: - + `'ng_dri_cost_rosner'` - + `'h2_dri_cost_rosner'` + + `'NaturalGasIronReductionPlantCostComponent'` + + `'HydrogenIronReductionPlantCostComponent'` (transport-models)= ## Transport Models diff --git a/examples/21_iron_mn_to_il/tech_config.yaml b/examples/21_iron_mn_to_il/tech_config.yaml index 7f23e9df8..081e71cdf 100644 --- a/examples/21_iron_mn_to_il/tech_config.yaml +++ b/examples/21_iron_mn_to_il/tech_config.yaml @@ -130,9 +130,9 @@ technologies: iron_plant: performance_model: - model: "ng_dri_performance_rosner" + model: "NaturalGasIronReductionPlantPerformanceComponent" cost_model: - model: "ng_dri_cost_rosner" + model: "NaturalGasIronReductionPlantCostComponent" model_inputs: shared_parameters: pig_iron_production_rate_tonnes_per_hr: 161.8829908675799 #equivalent to 1418095 t/yr diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 4f1613992..26aefcce9 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -188,10 +188,10 @@ "IronPlantCostComponent": IronPlantCostComponent, "MartinIronMinePerformanceComponent": MartinIronMinePerformanceComponent, # standalone model "MartinIronMineCostComponent": MartinIronMineCostComponent, # standalone model - "ng_dri_performance_rosner": NaturalGasIronReductionPlantPerformanceComponent, - "ng_dri_cost_rosner": NaturalGasIronReductionPlantCostComponent, # standalone model - "h2_dri_performance_rosner": HydrogenIronReductionPlantPerformanceComponent, - "h2_dri_cost_rosner": HydrogenIronReductionPlantCostComponent, # standalone model + "NaturalGasIronReductionPlantPerformanceComponent": NaturalGasIronReductionPlantPerformanceComponent, # noqa: E501 + "NaturalGasIronReductionPlantCostComponent": NaturalGasIronReductionPlantCostComponent, # standalone model # noqa: E501 + "HydrogenIronReductionPlantPerformanceComponent": HydrogenIronReductionPlantPerformanceComponent, # noqa: E501 + "HydrogenIronReductionPlantCostComponent": HydrogenIronReductionPlantCostComponent, # standalone model # noqa: E501 "ng_eaf_performance_rosner": NaturalGasEAFPlantPerformanceComponent, "ng_eaf_cost_rosner": NaturalGasEAFPlantCostComponent, # standalone model "h2_eaf_performance_rosner": HydrogenEAFPlantPerformanceComponent, From 613dada671a7f0d965bdcd9d181d5d84276f18e0 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:19:51 -0800 Subject: [PATCH 09/42] convert ng/h2 EAF models --- docs/user_guide/model_overview.md | 8 ++++---- examples/21_iron_mn_to_il/tech_config.yaml | 4 ++-- h2integrate/core/supported_models.py | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 993f094d9..43e02e525 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -174,13 +174,13 @@ Below summarizes the available performance, cost, and financial models for each - `steel`: steel production - performance models: + `'steel_performance'` - + `'ng_eaf_performance_rosner'` - + `'h2_eaf_performance_rosner'` + + `'NaturalGasEAFPlantPerformanceComponent'` + + `'HydrogenEAFPlantPerformanceComponent'` - combined cost and financial models: + `'steel_cost'` - cost models: - + `'ng_eaf_cost_rosner'` - + `'h2_eaf_cost_rosner'` + + `'NaturalGasEAFPlantCostComponent'` + + `'HydrogenEAFPlantCostComponent'` - `ammonia`: ammonia synthesis - performance models: + `'simple_ammonia_performance'` diff --git a/examples/21_iron_mn_to_il/tech_config.yaml b/examples/21_iron_mn_to_il/tech_config.yaml index 081e71cdf..99cf77267 100644 --- a/examples/21_iron_mn_to_il/tech_config.yaml +++ b/examples/21_iron_mn_to_il/tech_config.yaml @@ -195,9 +195,9 @@ technologies: steel_plant: performance_model: - model: "ng_eaf_performance_rosner" + model: "NaturalGasEAFPlantPerformanceComponent" cost_model: - model: "ng_eaf_cost_rosner" + model: "NaturalGasEAFPlantCostComponent" model_inputs: shared_parameters: steel_production_rate_tonnes_per_hr: 135.8187214611872 #equivalent to 1189772 t/yr diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 26aefcce9..4ec8c133c 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -192,10 +192,10 @@ "NaturalGasIronReductionPlantCostComponent": NaturalGasIronReductionPlantCostComponent, # standalone model # noqa: E501 "HydrogenIronReductionPlantPerformanceComponent": HydrogenIronReductionPlantPerformanceComponent, # noqa: E501 "HydrogenIronReductionPlantCostComponent": HydrogenIronReductionPlantCostComponent, # standalone model # noqa: E501 - "ng_eaf_performance_rosner": NaturalGasEAFPlantPerformanceComponent, - "ng_eaf_cost_rosner": NaturalGasEAFPlantCostComponent, # standalone model - "h2_eaf_performance_rosner": HydrogenEAFPlantPerformanceComponent, - "h2_eaf_cost_rosner": HydrogenEAFPlantCostComponent, # standalone model + "NaturalGasEAFPlantPerformanceComponent": NaturalGasEAFPlantPerformanceComponent, + "NaturalGasEAFPlantCostComponent": NaturalGasEAFPlantCostComponent, # standalone model + "HydrogenEAFPlantPerformanceComponent": HydrogenEAFPlantPerformanceComponent, + "HydrogenEAFPlantCostComponent": HydrogenEAFPlantCostComponent, # standalone model "reverse_osmosis_desalination_performance": ReverseOsmosisPerformanceModel, "reverse_osmosis_desalination_cost": ReverseOsmosisCostModel, "simple_ammonia_performance": SimpleAmmoniaPerformanceModel, From 3698d67bc257aa6320709810eee026783bf1465e Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:20:25 -0800 Subject: [PATCH 10/42] convert reverse osmosis desal --- docs/user_guide/cost_years.md | 2 +- docs/user_guide/model_overview.md | 4 ++-- h2integrate/core/supported_models.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/user_guide/cost_years.md b/docs/user_guide/cost_years.md index 4fee789d9..1ae4056fc 100644 --- a/docs/user_guide/cost_years.md +++ b/docs/user_guide/cost_years.md @@ -21,7 +21,7 @@ For [cost models based on user-provided costs](#cost-models-with-user-input-cost | `ocean_alkalinity_enhancement_cost` | 2024 | | `ocean_alkalinity_enhancement_cost_financial` | 2024 | | `steel_cost` | 2022 | -| `reverse_osmosis_desalination_cost` | 2013 | +| `ReverseOsmosisCostModel` | 2013 | | `synloop_ammonia_cost` | N/A (adjusts costs to `target_dollar_year` within cost model) | (cost-models-with-user-input-cost-year)= diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 43e02e525..fcb64b36f 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -214,9 +214,9 @@ Below summarizes the available performance, cost, and financial models for each + `'SimpleASUCostModel'` - `desal`: water desalination - performance models: - + `'reverse_osmosis_desalination_performance'` + + `'ReverseOsmosisPerformanceModel'` - cost models: - + `'reverse_osmosis_desalination_cost'` + + `'ReverseOsmosisCostModel'` - `natural_gas`: natural gas combined cycle and combustion turbine - performance models: + `'natural_gas_performance'` diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 4ec8c133c..b3c4f1f63 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -196,8 +196,8 @@ "NaturalGasEAFPlantCostComponent": NaturalGasEAFPlantCostComponent, # standalone model "HydrogenEAFPlantPerformanceComponent": HydrogenEAFPlantPerformanceComponent, "HydrogenEAFPlantCostComponent": HydrogenEAFPlantCostComponent, # standalone model - "reverse_osmosis_desalination_performance": ReverseOsmosisPerformanceModel, - "reverse_osmosis_desalination_cost": ReverseOsmosisCostModel, + "ReverseOsmosisPerformanceModel": ReverseOsmosisPerformanceModel, + "ReverseOsmosisCostModel": ReverseOsmosisCostModel, "simple_ammonia_performance": SimpleAmmoniaPerformanceModel, "simple_ammonia_cost": SimpleAmmoniaCostModel, "synloop_ammonia_performance": AmmoniaSynLoopPerformanceModel, From 96b0341530236304bf9a454b1d21ec0782560753 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:24:11 -0800 Subject: [PATCH 11/42] convert ammonia syn loop models --- docs/user_guide/cost_years.md | 2 +- docs/user_guide/model_overview.md | 4 ++-- examples/12_ammonia_synloop/tech_config.yaml | 4 ++-- examples/25_sizing_modes/tech_config.yaml | 4 ++-- h2integrate/core/supported_models.py | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/user_guide/cost_years.md b/docs/user_guide/cost_years.md index 1ae4056fc..05115e177 100644 --- a/docs/user_guide/cost_years.md +++ b/docs/user_guide/cost_years.md @@ -22,7 +22,7 @@ For [cost models based on user-provided costs](#cost-models-with-user-input-cost | `ocean_alkalinity_enhancement_cost_financial` | 2024 | | `steel_cost` | 2022 | | `ReverseOsmosisCostModel` | 2013 | -| `synloop_ammonia_cost` | N/A (adjusts costs to `target_dollar_year` within cost model) | +| `AmmoniaSynLoopCostModel` | N/A (adjusts costs to `target_dollar_year` within cost model) | (cost-models-with-user-input-cost-year)= ## Cost models with user input cost year diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index fcb64b36f..1d5b13926 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -184,10 +184,10 @@ Below summarizes the available performance, cost, and financial models for each - `ammonia`: ammonia synthesis - performance models: + `'simple_ammonia_performance'` - + `'synloop_ammonia_performance'` + + `'AmmoniaSynLoopPerformanceModel'` - cost models: + `'simple_ammonia_cost'` - + `'synloop_ammonia_cost'` + + `'AmmoniaSynLoopCostModel'` - `doc`: direct ocean capture - performance models: + `'direct_ocean_capture_performance'` diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index cb1a3c64c..bba54e217 100644 --- a/examples/12_ammonia_synloop/tech_config.yaml +++ b/examples/12_ammonia_synloop/tech_config.yaml @@ -145,9 +145,9 @@ technologies: ammonia: performance_model: - model: "synloop_ammonia_performance" + model: "AmmoniaSynLoopPerformanceModel" cost_model: - model: "synloop_ammonia_cost" + model: "AmmoniaSynLoopCostModel" model_inputs: # See converters/ammonia/Ammonia cost breakdown-ANL source.xlsx shared_parameters: production_capacity: 52777.6 diff --git a/examples/25_sizing_modes/tech_config.yaml b/examples/25_sizing_modes/tech_config.yaml index ae0910766..336d9c68b 100644 --- a/examples/25_sizing_modes/tech_config.yaml +++ b/examples/25_sizing_modes/tech_config.yaml @@ -40,9 +40,9 @@ technologies: electrolyzer_rating: 640. # MW ammonia: performance_model: - model: "synloop_ammonia_performance" + model: "AmmoniaSynLoopPerformanceModel" cost_model: - model: "synloop_ammonia_cost" + model: "AmmoniaSynLoopCostModel" model_inputs: # See converters/ammonia/Ammonia cost breakdown-ANL source.xlsx shared_parameters: production_capacity: 52777.6 diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index b3c4f1f63..eda08ddc2 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -200,8 +200,8 @@ "ReverseOsmosisCostModel": ReverseOsmosisCostModel, "simple_ammonia_performance": SimpleAmmoniaPerformanceModel, "simple_ammonia_cost": SimpleAmmoniaCostModel, - "synloop_ammonia_performance": AmmoniaSynLoopPerformanceModel, - "synloop_ammonia_cost": AmmoniaSynLoopCostModel, + "AmmoniaSynLoopPerformanceModel": AmmoniaSynLoopPerformanceModel, + "AmmoniaSynLoopCostModel": AmmoniaSynLoopCostModel, "steel_performance": SteelPerformanceModel, "steel_cost": SteelCostAndFinancialModel, "smr_methanol_plant_performance": SMRMethanolPlantPerformanceModel, From 6c79c85ba376b86a65e120081b091db1d41bd8a5 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:25:00 -0800 Subject: [PATCH 12/42] convert steel converter models --- docs/user_guide/cost_years.md | 2 +- docs/user_guide/model_overview.md | 4 ++-- docs/user_guide/postprocessing_results.md | 4 ++-- examples/01_onshore_steel_mn/tech_config.yaml | 6 +++--- h2integrate/core/supported_models.py | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/user_guide/cost_years.md b/docs/user_guide/cost_years.md index 05115e177..3ebf63f6c 100644 --- a/docs/user_guide/cost_years.md +++ b/docs/user_guide/cost_years.md @@ -20,7 +20,7 @@ For [cost models based on user-provided costs](#cost-models-with-user-input-cost | `direct_ocean_capture_cost` | 2023 | | `ocean_alkalinity_enhancement_cost` | 2024 | | `ocean_alkalinity_enhancement_cost_financial` | 2024 | -| `steel_cost` | 2022 | +| `SteelCostAndFinancialModel` | 2022 | | `ReverseOsmosisCostModel` | 2013 | | `AmmoniaSynLoopCostModel` | N/A (adjusts costs to `target_dollar_year` within cost model) | diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 1d5b13926..56a3d35a3 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -173,11 +173,11 @@ Below summarizes the available performance, cost, and financial models for each + `'mathur_modified_geoh2_cost'` - `steel`: steel production - performance models: - + `'steel_performance'` + + `'SteelPerformanceModel'` + `'NaturalGasEAFPlantPerformanceComponent'` + `'HydrogenEAFPlantPerformanceComponent'` - combined cost and financial models: - + `'steel_cost'` + + `'SteelCostAndFinancialModel'` - cost models: + `'NaturalGasEAFPlantCostComponent'` + `'HydrogenEAFPlantCostComponent'` diff --git a/docs/user_guide/postprocessing_results.md b/docs/user_guide/postprocessing_results.md index d5818ed36..1a3efe176 100644 --- a/docs/user_guide/postprocessing_results.md +++ b/docs/user_guide/postprocessing_results.md @@ -45,9 +45,9 @@ plant ProFastComp_1 LCOE [0.09795931] USD/(kW*h) finance_subgroup_default.LCOE steel - steel_performance + SteelPerformanceModel steel |9615.91147134| t/year steel.steel - steel_cost + SteelCostAndFinancialModel CapEx [5.78060014e+08] USD steel.CapEx OpEx [1.0129052e+08] USD/year steel.OpEx LCOS [1213.87728644] USD/t steel.LCOS diff --git a/examples/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index 9d675318f..81f8b0602 100644 --- a/examples/01_onshore_steel_mn/tech_config.yaml +++ b/examples/01_onshore_steel_mn/tech_config.yaml @@ -148,11 +148,11 @@ technologies: steel: performance_model: - model: "steel_performance" + model: "SteelPerformanceModel" cost_model: - model: "steel_cost" + model: "SteelCostAndFinancialModel" finance_model: - model: "steel_cost" + model: "SteelCostAndFinancialModel" model_inputs: shared_parameters: capacity_factor: 0.9 diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index eda08ddc2..d02575747 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -202,8 +202,8 @@ "simple_ammonia_cost": SimpleAmmoniaCostModel, "AmmoniaSynLoopPerformanceModel": AmmoniaSynLoopPerformanceModel, "AmmoniaSynLoopCostModel": AmmoniaSynLoopCostModel, - "steel_performance": SteelPerformanceModel, - "steel_cost": SteelCostAndFinancialModel, + "SteelPerformanceModel": SteelPerformanceModel, + "SteelCostAndFinancialModel": SteelCostAndFinancialModel, "smr_methanol_plant_performance": SMRMethanolPlantPerformanceModel, "smr_methanol_plant_cost": SMRMethanolPlantCostModel, "smr_methanol_plant_financial": SMRMethanolPlantFinanceModel, From 767e53182923c83945eb66abf206a0bf4026c0ea Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:25:45 -0800 Subject: [PATCH 13/42] update smr methonal models --- docs/user_guide/cost_years.md | 2 +- docs/user_guide/model_overview.md | 4 ++-- examples/03_methanol/smr/tech_config_smr.yaml | 6 +++--- h2integrate/core/supported_models.py | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/user_guide/cost_years.md b/docs/user_guide/cost_years.md index 3ebf63f6c..685020a3d 100644 --- a/docs/user_guide/cost_years.md +++ b/docs/user_guide/cost_years.md @@ -36,7 +36,7 @@ For [cost models based on user-provided costs](#cost-models-with-user-input-cost | `SimpleASUCostModel` | | `HOPPComponent` | | `RunOfRiverHydroCostModel` | -| `smr_methanol_plant_cost` | +| `SMRMethanolPlantCostModel` | | `stimulated_geoh2_cost` | | `natural_geoh2_cost` | | `WOMBATElectrolyzerModel` | diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 56a3d35a3..c60e249ee 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -202,9 +202,9 @@ Below summarizes the available performance, cost, and financial models for each + `'ocean_alkalinity_enhancement_cost_financial'` - `methanol`: methanol synthesis - performance models: - + `'smr_methanol_plant_performance'` + + `'SMRMethanolPlantPerformanceModel'` - cost models: - + `'smr_methanol_plant_cost'` + + `'SMRMethanolPlantCostModel'` - financial models: + `'methanol_plant_financial'` - `air_separator`: nitrogen separation from air diff --git a/examples/03_methanol/smr/tech_config_smr.yaml b/examples/03_methanol/smr/tech_config_smr.yaml index ff52dd360..ff5a3d8a8 100644 --- a/examples/03_methanol/smr/tech_config_smr.yaml +++ b/examples/03_methanol/smr/tech_config_smr.yaml @@ -4,11 +4,11 @@ description: "This hybrid plant produces methanol" technologies: methanol: performance_model: - model: "smr_methanol_plant_performance" + model: "SMRMethanolPlantPerformanceModel" cost_model: - model: "smr_methanol_plant_cost" + model: "SMRMethanolPlantCostModel" finance_model: - model: "smr_methanol_plant_financial" + model: "SMRMethanolPlantFinanceModel" model_inputs: shared_parameters: plant_capacity_kgpy: 127893196.8 diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index d02575747..d82e039ba 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -204,9 +204,9 @@ "AmmoniaSynLoopCostModel": AmmoniaSynLoopCostModel, "SteelPerformanceModel": SteelPerformanceModel, "SteelCostAndFinancialModel": SteelCostAndFinancialModel, - "smr_methanol_plant_performance": SMRMethanolPlantPerformanceModel, - "smr_methanol_plant_cost": SMRMethanolPlantCostModel, - "smr_methanol_plant_financial": SMRMethanolPlantFinanceModel, + "SMRMethanolPlantPerformanceModel": SMRMethanolPlantPerformanceModel, + "SMRMethanolPlantCostModel": SMRMethanolPlantCostModel, + "SMRMethanolPlantFinanceModel": SMRMethanolPlantFinanceModel, "co2h_methanol_plant_performance": CO2HMethanolPlantPerformanceModel, "co2h_methanol_plant_cost": CO2HMethanolPlantCostModel, "co2h_methanol_plant_financial": CO2HMethanolPlantFinanceModel, From 04b92340c0d18214b45b8d6c7c09c00f11e769b6 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:28:56 -0800 Subject: [PATCH 14/42] update co2 methanol converters --- .../03_methanol/co2_hydrogenation/tech_config_co2h.yaml | 6 +++--- .../03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py | 6 +++--- .../03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml | 4 ++-- h2integrate/core/supported_models.py | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml index 50e34b978..66f3765d7 100644 --- a/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml @@ -75,11 +75,11 @@ technologies: replacement_cost_percent: 0.15 # percent of capex - H2A default case methanol: performance_model: - model: "co2h_methanol_plant_performance" + model: "CO2HMethanolPlantPerformanceModel" cost_model: - model: "co2h_methanol_plant_cost" + model: "CO2HMethanolPlantCostModel" finance_model: - model: "co2h_methanol_plant_financial" + model: "CO2HMethanolPlantFinanceModel" model_inputs: shared_parameters: plant_capacity_kgpy: 127893196.8 diff --git a/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py b/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py index 4a76bd6a6..b889541c9 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py +++ b/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py @@ -101,9 +101,9 @@ def plot_methanol(model): plt.subplot(3, 2, 5) T = plt.title("Methanol") T.set_position([-0.2, 1.1]) - meoh_h2_in = model.plant.methanol.co2h_methanol_plant_performance.get_val("hydrogen_in") - meoh_co2_in = model.plant.methanol.co2h_methanol_plant_performance.get_val("co2_in") - meoh_meoh_out = model.plant.methanol.co2h_methanol_plant_performance.get_val("methanol_out") + meoh_h2_in = model.plant.methanol.CO2HMethanolPlantPerformanceModel.get_val("hydrogen_in") + meoh_co2_in = model.plant.methanol.CO2HMethanolPlantPerformanceModel.get_val("co2_in") + meoh_meoh_out = model.plant.methanol.CO2HMethanolPlantPerformanceModel.get_val("methanol_out") plt.plot(times, meoh_h2_in, label="Hydrogen In [kg/hr]", color=[0, 0.5, 0]) plt.plot(times, meoh_co2_in, label="CO$_2$ In [kg/hr]", color=[0, 0.25, 0.5]) plt.plot(times, meoh_meoh_out, label="Methanol Out [kg/hr]", color=[1, 0, 0.5]) diff --git a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml index e73d2b8e7..ca321df55 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml @@ -154,9 +154,9 @@ technologies: opex_fraction: .000001 # percent of capex methanol: performance_model: - model: "co2h_methanol_plant_performance" + model: "CO2HMethanolPlantPerformanceModel" cost_model: - model: "co2h_methanol_plant_cost" + model: "CO2HMethanolPlantCostModel" model_inputs: shared_parameters: plant_capacity_kgpy: 94731053.0605257 diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index d82e039ba..eb30fda1d 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -207,9 +207,9 @@ "SMRMethanolPlantPerformanceModel": SMRMethanolPlantPerformanceModel, "SMRMethanolPlantCostModel": SMRMethanolPlantCostModel, "SMRMethanolPlantFinanceModel": SMRMethanolPlantFinanceModel, - "co2h_methanol_plant_performance": CO2HMethanolPlantPerformanceModel, - "co2h_methanol_plant_cost": CO2HMethanolPlantCostModel, - "co2h_methanol_plant_financial": CO2HMethanolPlantFinanceModel, + "CO2HMethanolPlantPerformanceModel": CO2HMethanolPlantPerformanceModel, + "CO2HMethanolPlantCostModel": CO2HMethanolPlantCostModel, + "CO2HMethanolPlantFinanceModel": CO2HMethanolPlantFinanceModel, "direct_ocean_capture_performance": DOCPerformanceModel, "direct_ocean_capture_cost": DOCCostModel, "ocean_alkalinity_enhancement_performance": OAEPerformanceModel, From 25ca4748f999be26d50936492ba4808879340cc7 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:29:55 -0800 Subject: [PATCH 15/42] update direct ocean capture converters --- docs/user_guide/cost_years.md | 2 +- docs/user_guide/model_overview.md | 4 ++-- .../03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py | 4 ++-- .../03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml | 4 ++-- examples/09_co2/direct_ocean_capture/tech_config.yaml | 4 ++-- examples/17_splitter_wind_doc_h2/tech_config.yaml | 4 ++-- h2integrate/core/supported_models.py | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/user_guide/cost_years.md b/docs/user_guide/cost_years.md index 685020a3d..2602dc519 100644 --- a/docs/user_guide/cost_years.md +++ b/docs/user_guide/cost_years.md @@ -17,7 +17,7 @@ For [cost models based on user-provided costs](#cost-models-with-user-input-cost | `h2_storage` with `'mch'` storage type | 2024 | | `h2_storage` for geologic storage or buried pipe | 2018 | | `simple_ammonia_cost` | 2022 | -| `direct_ocean_capture_cost` | 2023 | +| `DOCCostModel` | 2023 | | `ocean_alkalinity_enhancement_cost` | 2024 | | `ocean_alkalinity_enhancement_cost_financial` | 2024 | | `SteelCostAndFinancialModel` | 2022 | diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index c60e249ee..7221683e5 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -190,9 +190,9 @@ Below summarizes the available performance, cost, and financial models for each + `'AmmoniaSynLoopCostModel'` - `doc`: direct ocean capture - performance models: - + `'direct_ocean_capture_performance'` + + `'DOCPerformanceModel'` - cost models: - + `'direct_ocean_capture_cost'` + + `'DOCCostModel'` - `oae`: ocean alkalinity enhancement - performance models: + `'ocean_alkalinity_enhancement_performance'` diff --git a/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py b/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py index b889541c9..2f96c3e72 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py +++ b/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py @@ -44,8 +44,8 @@ def plot_methanol(model): plt.subplot(3, 2, 2) T = plt.title("Direct\nOcean\nCapture") T.set_position([-0.2, 1.1]) - doc_elec_in = model.plant.doc.direct_ocean_capture_performance.get_val("electricity_in") / 1e6 - doc_co2_out = model.plant.doc.direct_ocean_capture_performance.get_val("co2_out") / 1000 + doc_elec_in = model.plant.doc.DOCPerformanceModel.get_val("electricity_in") / 1e6 + doc_co2_out = model.plant.doc.DOCPerformanceModel.get_val("co2_out") / 1000 plt.plot(times, doc_elec_in, label="Electricity Available [MW]", color=[0.5, 0.5, 1]) plt.plot( [times[0], times[-1]], diff --git a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml index ca321df55..bfc9f00ef 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml @@ -102,9 +102,9 @@ technologies: opex_fraction: .000001 # percent of capex doc: performance_model: - model: "direct_ocean_capture_performance" + model: "DOCPerformanceModel" cost_model: - model: "direct_ocean_capture_cost" + model: "DOCCostModel" model_inputs: shared_parameters: power_single_ed_w: 2858628.25565643 # W diff --git a/examples/09_co2/direct_ocean_capture/tech_config.yaml b/examples/09_co2/direct_ocean_capture/tech_config.yaml index 8b427c78c..a7a90ebd6 100644 --- a/examples/09_co2/direct_ocean_capture/tech_config.yaml +++ b/examples/09_co2/direct_ocean_capture/tech_config.yaml @@ -98,9 +98,9 @@ technologies: commodity_storage_units: "kW" doc: performance_model: - model: "direct_ocean_capture_performance" + model: "DOCPerformanceModel" cost_model: - model: "direct_ocean_capture_cost" + model: "DOCCostModel" model_inputs: shared_parameters: power_single_ed_w: 24000000. # W diff --git a/examples/17_splitter_wind_doc_h2/tech_config.yaml b/examples/17_splitter_wind_doc_h2/tech_config.yaml index ea1b1fd14..9a8a6155a 100644 --- a/examples/17_splitter_wind_doc_h2/tech_config.yaml +++ b/examples/17_splitter_wind_doc_h2/tech_config.yaml @@ -44,9 +44,9 @@ technologies: doc: performance_model: - model: "direct_ocean_capture_performance" + model: "DOCPerformanceModel" cost_model: - model: "direct_ocean_capture_cost" + model: "DOCCostModel" model_inputs: shared_parameters: power_single_ed_w: 240000. # W diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index eb30fda1d..c11949c7b 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -210,8 +210,8 @@ "CO2HMethanolPlantPerformanceModel": CO2HMethanolPlantPerformanceModel, "CO2HMethanolPlantCostModel": CO2HMethanolPlantCostModel, "CO2HMethanolPlantFinanceModel": CO2HMethanolPlantFinanceModel, - "direct_ocean_capture_performance": DOCPerformanceModel, - "direct_ocean_capture_cost": DOCCostModel, + "DOCPerformanceModel": DOCPerformanceModel, + "DOCCostModel": DOCCostModel, "ocean_alkalinity_enhancement_performance": OAEPerformanceModel, "ocean_alkalinity_enhancement_cost": OAECostModel, "ocean_alkalinity_enhancement_cost_financial": OAECostAndFinancialModel, From caa59ba1da5c5c8512e9eed495b1cd4ca5f5fb31 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:31:33 -0800 Subject: [PATCH 16/42] update OAE converters --- docs/user_guide/cost_years.md | 4 ++-- docs/user_guide/model_overview.md | 6 +++--- .../09_co2/ocean_alkalinity_enhancement/tech_config.yaml | 4 ++-- .../tech_config_financials.yaml | 4 ++-- h2integrate/core/supported_models.py | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/user_guide/cost_years.md b/docs/user_guide/cost_years.md index 2602dc519..713258981 100644 --- a/docs/user_guide/cost_years.md +++ b/docs/user_guide/cost_years.md @@ -18,8 +18,8 @@ For [cost models based on user-provided costs](#cost-models-with-user-input-cost | `h2_storage` for geologic storage or buried pipe | 2018 | | `simple_ammonia_cost` | 2022 | | `DOCCostModel` | 2023 | -| `ocean_alkalinity_enhancement_cost` | 2024 | -| `ocean_alkalinity_enhancement_cost_financial` | 2024 | +| `OAECostModel` | 2024 | +| `OAECostAndFinancialModel` | 2024 | | `SteelCostAndFinancialModel` | 2022 | | `ReverseOsmosisCostModel` | 2013 | | `AmmoniaSynLoopCostModel` | N/A (adjusts costs to `target_dollar_year` within cost model) | diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 7221683e5..a4f6e30a5 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -195,11 +195,11 @@ Below summarizes the available performance, cost, and financial models for each + `'DOCCostModel'` - `oae`: ocean alkalinity enhancement - performance models: - + `'ocean_alkalinity_enhancement_performance'` + + `'OAEPerformanceModel'` - cost models: - + `'ocean_alkalinity_enhancement_cost'` + + `'OAECostModel'` - financial models: - + `'ocean_alkalinity_enhancement_cost_financial'` + + `'OAECostAndFinancialModel'` - `methanol`: methanol synthesis - performance models: + `'SMRMethanolPlantPerformanceModel'` diff --git a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml index 042fb8fa0..4b78b3730 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml @@ -75,9 +75,9 @@ technologies: commodity_storage_units: "kW" oae: performance_model: - model: "ocean_alkalinity_enhancement_performance" + model: "OAEPerformanceModel" cost_model: - model: "ocean_alkalinity_enhancement_cost" + model: "OAECostModel" model_inputs: performance_parameters: number_ed_min: 1 diff --git a/examples/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml b/examples/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml index c44072200..b73350cf4 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml @@ -33,9 +33,9 @@ technologies: cost_year: 2022 oae: performance_model: - model: "ocean_alkalinity_enhancement_performance" + model: "OAEPerformanceModel" finance_model: - model: "ocean_alkalinity_enhancement_cost_financial" + model: "OAECostAndFinancialModel" model_inputs: performance_parameters: number_ed_min: 1 diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index c11949c7b..f477fcac8 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -212,9 +212,9 @@ "CO2HMethanolPlantFinanceModel": CO2HMethanolPlantFinanceModel, "DOCPerformanceModel": DOCPerformanceModel, "DOCCostModel": DOCCostModel, - "ocean_alkalinity_enhancement_performance": OAEPerformanceModel, - "ocean_alkalinity_enhancement_cost": OAECostModel, - "ocean_alkalinity_enhancement_cost_financial": OAECostAndFinancialModel, + "OAEPerformanceModel": OAEPerformanceModel, + "OAECostModel": OAECostModel, + "OAECostAndFinancialModel": OAECostAndFinancialModel, "simple_natural_geoh2_performance": NaturalGeoH2PerformanceModel, "templeton_serpentinization_geoh2_performance": StimulatedGeoH2PerformanceModel, "mathur_modified_geoh2_cost": GeoH2SubsurfaceCostModel, From 3b363f9842b39c732505ca638514c0e99bed0b54 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:33:00 -0800 Subject: [PATCH 17/42] update geoh2 models --- docs/technology_models/geologic_hydrogen.md | 12 ++++++------ docs/user_guide/model_overview.md | 6 +++--- examples/04_geo_h2/tech_config_natural.yaml | 8 ++++---- examples/04_geo_h2/tech_config_stimulated.yaml | 4 ++-- h2integrate/core/supported_models.py | 10 +++++----- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/technology_models/geologic_hydrogen.md b/docs/technology_models/geologic_hydrogen.md index c9f8ddd2d..1a2af85cd 100644 --- a/docs/technology_models/geologic_hydrogen.md +++ b/docs/technology_models/geologic_hydrogen.md @@ -8,13 +8,13 @@ The hydrogen surface processing models account for the above-surface processing There are two performance models available to model the hydrogen well subsurface: one for natural geologic hydrogen and one for stimulated geologic hydrogen. -- [`"simple_natural_geoh2_performance"`](#simple-natural-geoh2-performance): A basic natural geologic hydrogen model for calculating the wellhead gas flow over the well lifetime (`plant_life`) and the specific hydrogen flow from the accumulated gas. +- [`"NaturalGeoH2PerformanceModel"`](#simple-natural-geoh2-performance): A basic natural geologic hydrogen model for calculating the wellhead gas flow over the well lifetime (`plant_life`) and the specific hydrogen flow from the accumulated gas. -- [`"templeton_serpentinization_geoh2_performance"`](#templeton-serpentinization-geoh2-performance): A stimulated geologic hydrogen model that estimates the hydrogen production from artificially stimulating geologic formations through a process called serpentinization. +- [`"StimulatedGeoH2PerformanceModel"`](#templeton-serpentinization-geoh2-performance): A stimulated geologic hydrogen model that estimates the hydrogen production from artificially stimulating geologic formations through a process called serpentinization. There is one cost model available to model the hydrogen well subsurface, which applies to both natural and stimulated geologic hydrogen. -- [`"mathur_modified_geoh2_cost"`](#mathur-modified-geoh2-cost): A subsurface cost model that calculates the capital and operating for subsurface well systems in geologic hydrogen production. +- [`"GeoH2SubsurfaceCostModel"`](#mathur-modified-geoh2-cost): A subsurface cost model that calculates the capital and operating for subsurface well systems in geologic hydrogen production. (simple-natural-geoh2-performance)= ### Simple Natural GeoH2 Performance @@ -31,7 +31,7 @@ The modeling approach in this performance model is informed by: - [Mathur et al. (Stanford)](https://doi.org/10.31223/X5599G) - [Templeton et al. (UC Boulder)](https://doi.org/10.3389/fgeoc.2024.1366268) -(mathur_modified_geoh2_cost)= +(GeoH2SubsurfaceCostModel)= ### Mathur Modified GeoH2 Cost The modeling approach in this cost model is based on: @@ -43,9 +43,9 @@ The modeling approach in this cost model is based on: There is one performance model and one cost model available to model the hydrogen surface processing, and only for natural geologic hydrogen. There are currently no surface processing models implemented for stimulated geologic hydrogen. -- [`"aspen_geoh2_performance"`](#aspen-geoh2-surface-performance): A series of empirical relations between wellhead flow/concentration and processing plant performance, based on the [ASPEN](https://www.aspentech.com/en/products/engineering/aspen-plus) process models. +- [`"AspenGeoH2SurfacePerformanceModel"`](#aspen-geoh2-surface-performance): A series of empirical relations between wellhead flow/concentration and processing plant performance, based on the [ASPEN](https://www.aspentech.com/en/products/engineering/aspen-plus) process models. -- [`"aspen_geoh2_cost"`](#aspen-geoh2-surface-cost): A series of empirical relations between wellhead flow/concentration and processing plant cost, based on the [ASPEN](https://www.aspentech.com/en/products/engineering/aspen-plus) process models. +- [`"AspenGeoH2SurfaceCostModel"`](#aspen-geoh2-surface-cost): A series of empirical relations between wellhead flow/concentration and processing plant cost, based on the [ASPEN](https://www.aspentech.com/en/products/engineering/aspen-plus) process models. (aspen-geoh2-surface-performance)= ### Aspen GeoH2 Performance diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index a4f6e30a5..d82d7c27a 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -167,10 +167,10 @@ Below summarizes the available performance, cost, and financial models for each + `'BasicElectrolyzerCostModel'` - `geoh2_well_subsurface`: geologic hydrogen well subsurface - performance models: - + `'simple_natural_geoh2_performance'` - + `'templeton_serpentinization_geoh2_performance'` + + `'NaturalGeoH2PerformanceModel'` + + `'StimulatedGeoH2PerformanceModel'` - cost models: - + `'mathur_modified_geoh2_cost'` + + `'GeoH2SubsurfaceCostModel'` - `steel`: steel production - performance models: + `'SteelPerformanceModel'` diff --git a/examples/04_geo_h2/tech_config_natural.yaml b/examples/04_geo_h2/tech_config_natural.yaml index d23814653..524d31414 100644 --- a/examples/04_geo_h2/tech_config_natural.yaml +++ b/examples/04_geo_h2/tech_config_natural.yaml @@ -4,9 +4,9 @@ description: This hybrid plant produces geologic hydrogen technologies: geoh2_well_subsurface: performance_model: - model: simple_natural_geoh2_performance + model: NaturalGeoH2PerformanceModel cost_model: - model: mathur_modified_geoh2_cost + model: GeoH2SubsurfaceCostModel model_inputs: shared_parameters: borehole_depth: 300 @@ -35,9 +35,9 @@ technologies: as_spent_ratio: 1.1 geoh2_well_surface: performance_model: - model: aspen_geoh2_performance + model: AspenGeoH2SurfacePerformanceModel cost_model: - model: aspen_geoh2_cost + model: AspenGeoH2SurfaceCostModel model_inputs: shared_parameters: refit_coeffs: false diff --git a/examples/04_geo_h2/tech_config_stimulated.yaml b/examples/04_geo_h2/tech_config_stimulated.yaml index c2d2a169f..2de091dd2 100644 --- a/examples/04_geo_h2/tech_config_stimulated.yaml +++ b/examples/04_geo_h2/tech_config_stimulated.yaml @@ -4,9 +4,9 @@ description: This hybrid plant produces geologic hydrogen technologies: geoh2_well_subsurface: performance_model: - model: templeton_serpentinization_geoh2_performance + model: StimulatedGeoH2PerformanceModel cost_model: - model: mathur_modified_geoh2_cost + model: GeoH2SubsurfaceCostModel model_inputs: shared_parameters: borehole_depth: 4000 diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index f477fcac8..71116f5fa 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -215,11 +215,11 @@ "OAEPerformanceModel": OAEPerformanceModel, "OAECostModel": OAECostModel, "OAECostAndFinancialModel": OAECostAndFinancialModel, - "simple_natural_geoh2_performance": NaturalGeoH2PerformanceModel, - "templeton_serpentinization_geoh2_performance": StimulatedGeoH2PerformanceModel, - "mathur_modified_geoh2_cost": GeoH2SubsurfaceCostModel, - "aspen_geoh2_performance": AspenGeoH2SurfacePerformanceModel, - "aspen_geoh2_cost": AspenGeoH2SurfaceCostModel, + "NaturalGeoH2PerformanceModel": NaturalGeoH2PerformanceModel, + "StimulatedGeoH2PerformanceModel": StimulatedGeoH2PerformanceModel, + "GeoH2SubsurfaceCostModel": GeoH2SubsurfaceCostModel, + "AspenGeoH2SurfacePerformanceModel": AspenGeoH2SurfacePerformanceModel, + "AspenGeoH2SurfaceCostModel": AspenGeoH2SurfaceCostModel, "natural_gas_performance": NaturalGasPerformanceModel, "natural_gas_cost": NaturalGasCostModel, # Transport From 9faf73300ba76a0ca31c81e635a6e8d1bf14894e Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:33:40 -0800 Subject: [PATCH 18/42] update ng converters --- docs/technology_models/natural_gas.md | 2 +- docs/user_guide/model_overview.md | 4 ++-- examples/16_natural_gas/tech_config.yaml | 4 ++-- .../23_solar_wind_ng_demand/flexible_demand_tech_config.yaml | 4 ++-- examples/23_solar_wind_ng_demand/tech_config.yaml | 4 ++-- h2integrate/core/supported_models.py | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/technology_models/natural_gas.md b/docs/technology_models/natural_gas.md index 92d59866d..55ac13321 100644 --- a/docs/technology_models/natural_gas.md +++ b/docs/technology_models/natural_gas.md @@ -2,7 +2,7 @@ The natural gas power plant model simulates electricity generation from natural gas combustion, suitable for both natural gas combustion turbines (NGCT) and natural gas combined cycle (NGCC) plants. The model calculates electricity output based on natural gas input and plant heat rate, along with comprehensive cost modeling that includes capital expenses, operating expenses, and fuel costs. -To use this model, specify `"natural_gas_performance"` as the performance model and `"natural_gas_cost"` as the cost model. +To use this model, specify `"NaturalGasPerformanceModel"` as the performance model and `"NaturalGasCostModel"` as the cost model. ## Performance Parameters diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index d82d7c27a..2ce890182 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -219,9 +219,9 @@ Below summarizes the available performance, cost, and financial models for each + `'ReverseOsmosisCostModel'` - `natural_gas`: natural gas combined cycle and combustion turbine - performance models: - + `'natural_gas_performance'` + + `'NaturalGasPerformanceModel'` - cost_models: - + `'natural_gas_cost'` + + `'NaturalGasCostModel'` - `grid`: electricity grid connection - performance models: + `'grid_performance'` diff --git a/examples/16_natural_gas/tech_config.yaml b/examples/16_natural_gas/tech_config.yaml index ce0ec6683..5e3b7b701 100644 --- a/examples/16_natural_gas/tech_config.yaml +++ b/examples/16_natural_gas/tech_config.yaml @@ -74,9 +74,9 @@ technologies: start_up_cost: 100000. natural_gas_plant: performance_model: - model: "natural_gas_performance" + model: "NaturalGasPerformanceModel" cost_model: - model: "natural_gas_cost" + model: "NaturalGasCostModel" model_inputs: shared_parameters: heat_rate_mmbtu_per_mwh: 7.5 # MMBtu/MWh - typical for NGCC diff --git a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml index 3a6ef73a1..1a5b60d02 100644 --- a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml @@ -81,9 +81,9 @@ technologies: natural_gas_plant: performance_model: - model: natural_gas_performance + model: NaturalGasPerformanceModel cost_model: - model: natural_gas_cost + model: NaturalGasCostModel model_inputs: shared_parameters: heat_rate_mmbtu_per_mwh: 7.5 # MMBtu/MWh - typical for NGCC diff --git a/examples/23_solar_wind_ng_demand/tech_config.yaml b/examples/23_solar_wind_ng_demand/tech_config.yaml index 725474ea8..2aef046e3 100644 --- a/examples/23_solar_wind_ng_demand/tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/tech_config.yaml @@ -81,9 +81,9 @@ technologies: natural_gas_plant: performance_model: - model: natural_gas_performance + model: NaturalGasPerformanceModel cost_model: - model: natural_gas_cost + model: NaturalGasCostModel model_inputs: shared_parameters: heat_rate_mmbtu_per_mwh: 7.5 # MMBtu/MWh - typical for NGCC diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 71116f5fa..9c9e9fbed 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -220,8 +220,8 @@ "GeoH2SubsurfaceCostModel": GeoH2SubsurfaceCostModel, "AspenGeoH2SurfacePerformanceModel": AspenGeoH2SurfacePerformanceModel, "AspenGeoH2SurfaceCostModel": AspenGeoH2SurfaceCostModel, - "natural_gas_performance": NaturalGasPerformanceModel, - "natural_gas_cost": NaturalGasCostModel, + "NaturalGasPerformanceModel": NaturalGasPerformanceModel, + "NaturalGasCostModel": NaturalGasCostModel, # Transport "cable": CablePerformanceModel, "pipe": PipePerformanceModel, From 522a2e30638c77b7f7000a763b7fa32a4a2a6148 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 14:48:30 -0800 Subject: [PATCH 19/42] cable -> CablePerformanceModel --- docs/technology_models/feedstocks.md | 2 +- docs/user_guide/connecting_technologies.md | 20 +++++++++---------- docs/user_guide/model_overview.md | 8 ++++---- .../01_onshore_steel_mn/plant_config.yaml | 10 +++++----- examples/02_texas_ammonia/plant_config.yaml | 8 ++++---- .../co2_hydrogenation/plant_config_co2h.yaml | 6 +++--- .../plant_config_co2h.yaml | 6 +++--- examples/05_wind_h2_opt/plant_config.yaml | 2 +- examples/06_custom_tech/plant_config.yaml | 2 +- .../08_wind_electrolyzer/plant_config.yaml | 2 +- .../direct_ocean_capture/plant_config.yaml | 8 ++++---- .../plant_config.yaml | 4 ++-- .../plant_config_financials.yaml | 2 +- examples/10_electrolyzer_om/plant_config.yaml | 2 +- examples/12_ammonia_synloop/plant_config.yaml | 8 ++++---- .../inputs/plant_config.yaml | 2 +- .../plant_config.yaml | 6 +++--- examples/16_natural_gas/plant_config.yaml | 2 +- .../17_splitter_wind_doc_h2/plant_config.yaml | 6 +++--- .../plant_config.yaml | 2 +- examples/19_simple_dispatch/plant_config.yaml | 2 +- .../plant_config.yaml | 2 +- examples/21_iron_mn_to_il/plant_config.yaml | 6 +++--- .../23_solar_wind_ng_demand/plant_config.yaml | 4 ++-- examples/24_solar_battery_grid/README.md | 2 +- .../24_solar_battery_grid/plant_config.yaml | 2 +- examples/25_sizing_modes/plant_config.yaml | 2 +- .../hydrogen/test/test_size_modes.py | 2 +- h2integrate/core/supported_models.py | 2 +- 29 files changed, 66 insertions(+), 66 deletions(-) diff --git a/docs/technology_models/feedstocks.md b/docs/technology_models/feedstocks.md index 2ed818f72..928997371 100644 --- a/docs/technology_models/feedstocks.md +++ b/docs/technology_models/feedstocks.md @@ -34,7 +34,7 @@ Where: - `name_of_feedstock_source`: Name of your feedstock source - `consuming_technology`: Technology that uses the feedstock - `feedstock_type`: Type identifier (e.g., "natural_gas", "water", "electricity") -- `connection_type`: Name for the connection (e.g., "pipe", "cable") +- `connection_type`: Name for the connection (e.g., "pipe", "CablePerformanceModel") ## Configuration diff --git a/docs/user_guide/connecting_technologies.md b/docs/user_guide/connecting_technologies.md index 0b72689f1..8371e656b 100644 --- a/docs/user_guide/connecting_technologies.md +++ b/docs/user_guide/connecting_technologies.md @@ -31,7 +31,7 @@ There are two connection formats: - **source_tech**: Name of the technology providing the output - **destination_tech**: Name of the technology receiving the input - **variable_name**: The type of variable being transported (e.g., "electricity", "hydrogen", "ammonia") -- **transport_type**: The transport component to use (e.g., "cable", "pipeline") +- **transport_type**: The transport component to use (e.g., "CablePerformanceModel", "pipeline") #### 3-element connections (direct connections) ##### Same shared parameter name @@ -71,9 +71,9 @@ H2Integrate processes these connections in the `connect_technologies()` method o For a simple splitter configuration: ```yaml technology_interconnections: [ - ["wind_farm", "electricity_splitter", "electricity", "cable"], - ["electricity_splitter", "electrolyzer", "electricity", "cable"], - ["electricity_splitter", "doc", "electricity", "cable"], + ["wind_farm", "electricity_splitter", "electricity", "CablePerformanceModel"], + ["electricity_splitter", "electrolyzer", "electricity", "CablePerformanceModel"], + ["electricity_splitter", "doc", "electricity", "CablePerformanceModel"], ] ``` @@ -123,9 +123,9 @@ The relationship is straightforward: `_out = _in1 ```yaml technology_interconnections: [ - ["wind_farm", "combiner", "electricity", "cable"], - ["solar_farm", "combiner", "electricity", "cable"], - ["combiner", "electrolyzer", "electricity", "cable"], + ["wind_farm", "combiner", "electricity", "CablePerformanceModel"], + ["solar_farm", "combiner", "electricity", "CablePerformanceModel"], + ["combiner", "electrolyzer", "electricity", "CablePerformanceModel"], ] ``` @@ -203,9 +203,9 @@ The `prescribed_electricity_to_priority_tech` parameter can be provided as eithe ```yaml technology_interconnections: [ - ["offshore_wind", "electricity_splitter", "electricity", "cable"], - ["electricity_splitter", "doc", "electricity", "cable"], # first output - ["electricity_splitter", "electrolyzer", "electricity", "cable"], # second output + ["offshore_wind", "electricity_splitter", "electricity", "CablePerformanceModel"], + ["electricity_splitter", "doc", "electricity", "CablePerformanceModel"], # first output + ["electricity_splitter", "electrolyzer", "electricity", "CablePerformanceModel"], # second output ] ``` diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 2ce890182..2e76f234b 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -41,7 +41,7 @@ The inputs, outputs, and corresponding technology that are currently available i | `wind` | electricity | wind resource | | `solar` | electricity | solar resource | | `river` | electricity | river resource | -| `HOPPComponent` | electricity | N/A | +| `hopp` | electricity | N/A | | `electrolyzer` | hydrogen | electricity | | `geoh2` | hydrogen | rock type | | `steel` | steel | hydrogen | @@ -68,7 +68,7 @@ When the Primary Commodity is electricity, those converters are considered elect | Technology | Transport Commodity | | :---------------- | :---------------: | -| `cable` | electricity | +| `CablePerformanceModel` | electricity | | `pipe` | most mass-based commodities | | `combiner` | Any | | `splitter` | Any| @@ -242,9 +242,9 @@ Below summarizes the available performance, cost, and financial models for each (transport-models)= ## Transport Models -- `cable` +- `CablePerformanceModel` - performance models: - + `'cable'`: specific to `electricity` commodity + + `'CablePerformanceModel'`: specific to `electricity` commodity - `pipe`: - performance models: + `'pipe'`: currently compatible with the commodities "hydrogen", "co2", "methanol", "ammonia", "nitrogen", "natural_gas", "pig_iron", "reformer_catalyst", "water", "carbon", "iron_ore", and "lime" diff --git a/examples/01_onshore_steel_mn/plant_config.yaml b/examples/01_onshore_steel_mn/plant_config.yaml index 12811b79f..77a50f69a 100644 --- a/examples/01_onshore_steel_mn/plant_config.yaml +++ b/examples/01_onshore_steel_mn/plant_config.yaml @@ -20,13 +20,13 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind","combiner","electricity","cable"], - ["solar","combiner","electricity","cable"], - ["combiner","battery","electricity", "cable"], - ["battery", "electrolyzer", "electricity", "cable"], + ["wind","combiner","electricity","CablePerformanceModel"], + ["solar","combiner","electricity","CablePerformanceModel"], + ["combiner","battery","electricity", "CablePerformanceModel"], + ["battery", "electrolyzer", "electricity", "CablePerformanceModel"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ["finance_subgroup_hydrogen", "steel", ["LCOH_delivered", "LCOH"]], - ["combiner", "steel", "electricity", "cable"], + ["combiner", "steel", "electricity", "CablePerformanceModel"], # etc ] tech_to_dispatch_connections: [ diff --git a/examples/02_texas_ammonia/plant_config.yaml b/examples/02_texas_ammonia/plant_config.yaml index 570880753..42e68d67d 100644 --- a/examples/02_texas_ammonia/plant_config.yaml +++ b/examples/02_texas_ammonia/plant_config.yaml @@ -19,10 +19,10 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind","combiner","electricity","cable"], - ["solar","combiner","electricity","cable"], - ["combiner","battery","electricity", "cable"], - ["battery", "electrolyzer", "electricity", "cable"], + ["wind","combiner","electricity","CablePerformanceModel"], + ["solar","combiner","electricity","CablePerformanceModel"], + ["combiner","battery","electricity", "CablePerformanceModel"], + ["battery", "electrolyzer", "electricity", "CablePerformanceModel"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ["h2_storage", "ammonia", "hydrogen", "pipe"], ["finance_subgroup_hydrogen", "ammonia", "LCOH"], diff --git a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml index d5984da9b..b80bc6d72 100644 --- a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml @@ -18,9 +18,9 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "combiner", "electricity", "cable"], #source_tech, dest_tech, transport_item, transport_type = connection - ["solar", "combiner", "electricity", "cable"], - ["combiner", "electrolyzer", "electricity", "cable"], + ["wind", "combiner", "electricity", "CablePerformanceModel"], #source_tech, dest_tech, transport_item, transport_type = connection + ["solar", "combiner", "electricity", "CablePerformanceModel"], + ["combiner", "electrolyzer", "electricity", "CablePerformanceModel"], ["electrolyzer", "methanol", "hydrogen", "pipe"], ["finance_subgroup_electricity", "methanol", "LCOE"], ["finance_subgroup_hydrogen", "methanol", "LCOH"], diff --git a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml index 9a3465c19..48898f19a 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml @@ -12,9 +12,9 @@ site: # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electricity_splitter", "electricity", "cable"], - ["electricity_splitter", "doc", "electricity", "cable"], - ["electricity_splitter", "electrolyzer", "electricity", "cable"], + ["wind", "electricity_splitter", "electricity", "CablePerformanceModel"], + ["electricity_splitter", "doc", "electricity", "CablePerformanceModel"], + ["electricity_splitter", "electrolyzer", "electricity", "CablePerformanceModel"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ["h2_storage", "methanol", "hydrogen", "pipe"], ["doc", "co2_storage", "co2", "pipe"], diff --git a/examples/05_wind_h2_opt/plant_config.yaml b/examples/05_wind_h2_opt/plant_config.yaml index 96e98f562..5837e5637 100644 --- a/examples/05_wind_h2_opt/plant_config.yaml +++ b/examples/05_wind_h2_opt/plant_config.yaml @@ -19,7 +19,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electrolyzer", "electricity", "cable"], + ["wind", "electrolyzer", "electricity", "CablePerformanceModel"], # etc ] resource_to_tech_connections: [ diff --git a/examples/06_custom_tech/plant_config.yaml b/examples/06_custom_tech/plant_config.yaml index 0f99bf057..d9923d926 100644 --- a/examples/06_custom_tech/plant_config.yaml +++ b/examples/06_custom_tech/plant_config.yaml @@ -19,7 +19,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "paper_mill", "electricity", "cable"], + ["wind", "paper_mill", "electricity", "CablePerformanceModel"], # etc ] resource_to_tech_connections: [ diff --git a/examples/08_wind_electrolyzer/plant_config.yaml b/examples/08_wind_electrolyzer/plant_config.yaml index 11aa5cb46..202708809 100644 --- a/examples/08_wind_electrolyzer/plant_config.yaml +++ b/examples/08_wind_electrolyzer/plant_config.yaml @@ -18,7 +18,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electrolyzer", "electricity", "cable"], + ["wind", "electrolyzer", "electricity", "CablePerformanceModel"], # etc ] diff --git a/examples/09_co2/direct_ocean_capture/plant_config.yaml b/examples/09_co2/direct_ocean_capture/plant_config.yaml index f9ca662a4..c8e199aba 100644 --- a/examples/09_co2/direct_ocean_capture/plant_config.yaml +++ b/examples/09_co2/direct_ocean_capture/plant_config.yaml @@ -16,10 +16,10 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["hopp", "combiner", "electricity", "cable"], - ["wind", "combiner", "electricity", "cable"], - ["combiner", "battery", "electricity", "cable"], - ["battery", "doc", "electricity", "cable"], + ["hopp", "combiner", "electricity", "CablePerformanceModel"], + ["wind", "combiner", "electricity", "CablePerformanceModel"], + ["combiner", "battery", "electricity", "CablePerformanceModel"], + ["battery", "doc", "electricity", "CablePerformanceModel"], # etc ] tech_to_dispatch_connections: [ diff --git a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml index 0b91f6a94..2ff3e1c7b 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml @@ -17,8 +17,8 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind","battery","electricity", "cable"], - ["battery", "oae", "electricity", "cable"], + ["wind","battery","electricity", "CablePerformanceModel"], + ["battery", "oae", "electricity", "CablePerformanceModel"], # etc ] tech_to_dispatch_connections: [ diff --git a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml index eab01dad3..f0402e6a8 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml @@ -18,7 +18,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "oae", "electricity", "cable"], + ["wind", "oae", "electricity", "CablePerformanceModel"], ["finance_subgroup_electricity", "oae", "LCOE"] # etc ] diff --git a/examples/10_electrolyzer_om/plant_config.yaml b/examples/10_electrolyzer_om/plant_config.yaml index f55a3cce6..73687c704 100644 --- a/examples/10_electrolyzer_om/plant_config.yaml +++ b/examples/10_electrolyzer_om/plant_config.yaml @@ -18,7 +18,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electrolyzer", "electricity", "cable"], + ["wind", "electrolyzer", "electricity", "CablePerformanceModel"], # etc ] diff --git a/examples/12_ammonia_synloop/plant_config.yaml b/examples/12_ammonia_synloop/plant_config.yaml index 3b778bbbf..df8a60cec 100644 --- a/examples/12_ammonia_synloop/plant_config.yaml +++ b/examples/12_ammonia_synloop/plant_config.yaml @@ -20,10 +20,10 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind","combiner","electricity","cable"], - ["solar","combiner","electricity","cable"], - ["combiner","battery","electricity", "cable"], - ["battery", "electrolyzer", "electricity", "cable"], + ["wind","combiner","electricity","CablePerformanceModel"], + ["solar","combiner","electricity","CablePerformanceModel"], + ["combiner","battery","electricity", "CablePerformanceModel"], + ["battery", "electrolyzer", "electricity", "CablePerformanceModel"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ["h2_storage", "ammonia", "hydrogen", "pipe"], # etc diff --git a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml index ce4be62f2..209f0a71b 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml @@ -17,7 +17,7 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electrolyzer", "electricity", "cable"], + ["wind", "electrolyzer", "electricity", "CablePerformanceModel"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ] diff --git a/examples/15_wind_solar_electrolyzer/plant_config.yaml b/examples/15_wind_solar_electrolyzer/plant_config.yaml index 101b0ee87..cc9efcee5 100644 --- a/examples/15_wind_solar_electrolyzer/plant_config.yaml +++ b/examples/15_wind_solar_electrolyzer/plant_config.yaml @@ -24,9 +24,9 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "combiner", "electricity", "cable"], #source_tech, dest_tech, transport_item, transport_type = connection - ["solar", "combiner", "electricity", "cable"], - ["combiner", "electrolyzer", "electricity", "cable"], + ["wind", "combiner", "electricity", "CablePerformanceModel"], #source_tech, dest_tech, transport_item, transport_type = connection + ["solar", "combiner", "electricity", "CablePerformanceModel"], + ["combiner", "electrolyzer", "electricity", "CablePerformanceModel"], ] resource_to_tech_connections: [ diff --git a/examples/16_natural_gas/plant_config.yaml b/examples/16_natural_gas/plant_config.yaml index 95f19eeaa..5a02dde8f 100644 --- a/examples/16_natural_gas/plant_config.yaml +++ b/examples/16_natural_gas/plant_config.yaml @@ -22,7 +22,7 @@ site: # and not connected to additional technologies. # hence the empty array. technology_interconnections: [ - ["solar", "battery", "electricity", "cable"], #connect solar to battery + ["solar", "battery", "electricity", "CablePerformanceModel"], #connect solar to battery ["ng_feedstock", "natural_gas_plant", "natural_gas", "pipe"], #connect NG feedstock to NG plant ["battery", "natural_gas_plant", ["electricity_unmet_demand","electricity_demand"]], #connect electricity demand to NG feedstock ] diff --git a/examples/17_splitter_wind_doc_h2/plant_config.yaml b/examples/17_splitter_wind_doc_h2/plant_config.yaml index 9d507ef18..eafaa2bad 100644 --- a/examples/17_splitter_wind_doc_h2/plant_config.yaml +++ b/examples/17_splitter_wind_doc_h2/plant_config.yaml @@ -20,9 +20,9 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electricity_splitter", "electricity", "cable"], - ["electricity_splitter", "doc", "electricity", "cable"], - ["electricity_splitter", "electrolyzer", "electricity", "cable"], + ["wind", "electricity_splitter", "electricity", "CablePerformanceModel"], + ["electricity_splitter", "doc", "electricity", "CablePerformanceModel"], + ["electricity_splitter", "electrolyzer", "electricity", "CablePerformanceModel"], ] resource_to_tech_connections: [ diff --git a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml index f172dcabe..c0dd92b9f 100644 --- a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml @@ -19,7 +19,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "battery", "electricity", "cable"], + ["wind", "battery", "electricity", "CablePerformanceModel"], ] # array of arrays containing left-to-right technology, technology doing the dispatching diff --git a/examples/19_simple_dispatch/plant_config.yaml b/examples/19_simple_dispatch/plant_config.yaml index c420c1e0d..f63465ab4 100644 --- a/examples/19_simple_dispatch/plant_config.yaml +++ b/examples/19_simple_dispatch/plant_config.yaml @@ -19,7 +19,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "battery", "electricity", "cable"], + ["wind", "battery", "electricity", "CablePerformanceModel"], # etc ] diff --git a/examples/20_solar_electrolyzer_doe/plant_config.yaml b/examples/20_solar_electrolyzer_doe/plant_config.yaml index dde6df8bd..d8c7159e2 100644 --- a/examples/20_solar_electrolyzer_doe/plant_config.yaml +++ b/examples/20_solar_electrolyzer_doe/plant_config.yaml @@ -15,7 +15,7 @@ site: # array of arrays containing left-to-right technology technology_interconnections: [ - ["solar", "electrolyzer", "electricity", "cable"], #connect solar power to electrolyzer + ["solar", "electrolyzer", "electricity", "CablePerformanceModel"], #connect solar power to electrolyzer ] resource_to_tech_connections: [ diff --git a/examples/21_iron_mn_to_il/plant_config.yaml b/examples/21_iron_mn_to_il/plant_config.yaml index de855c4b2..8838addf4 100644 --- a/examples/21_iron_mn_to_il/plant_config.yaml +++ b/examples/21_iron_mn_to_il/plant_config.yaml @@ -23,16 +23,16 @@ site: # this will naturally grow as we mature the interconnected tech technology_interconnections: [ # connect feedstocks to iron mine - ["grid_feedstock","iron_mine","electricity","cable"], + ["grid_feedstock","iron_mine","electricity","CablePerformanceModel"], ["mine_feedstock","iron_mine","crude_ore","pipe"], # connect feedstocks to iron plant ["iron_mine","iron_plant","iron_ore","iron_transport"], - ["dri_grid_feedstock","iron_plant","electricity","cable"], + ["dri_grid_feedstock","iron_plant","electricity","CablePerformanceModel"], ["catalyst_feedstock","iron_plant","reformer_catalyst","pipe"], ["water_feedstock","iron_plant","water","pipe"], ["natural_gas_feedstock","iron_plant","natural_gas","pipe"], # connect feedstocks to steel plant - ["eaf_grid_feedstock","steel_plant","electricity","cable"], + ["eaf_grid_feedstock","steel_plant","electricity","CablePerformanceModel"], ["eaf_water_feedstock","steel_plant","water","pipe"], ["eaf_natural_gas_feedstock","steel_plant","natural_gas","pipe"], ["iron_plant","steel_plant","pig_iron","pipe"], diff --git a/examples/23_solar_wind_ng_demand/plant_config.yaml b/examples/23_solar_wind_ng_demand/plant_config.yaml index 711f3954c..c402e232d 100644 --- a/examples/23_solar_wind_ng_demand/plant_config.yaml +++ b/examples/23_solar_wind_ng_demand/plant_config.yaml @@ -36,8 +36,8 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "combiner", "electricity", "cable"], #source_tech, dest_tech, transport_item, transport_type = connection - ["solar", "combiner", "electricity", "cable"], + ["wind", "combiner", "electricity", "CablePerformanceModel"], #source_tech, dest_tech, transport_item, transport_type = connection + ["solar", "combiner", "electricity", "CablePerformanceModel"], ["ng_feedstock", "natural_gas_plant", "natural_gas", "pipe"], #connect NG feedstock to NG plant ["combiner", "electrical_load_demand", ["electricity_out", "electricity_in"]], # subtract wind and solar from demand ["electrical_load_demand", "natural_gas_plant", ["electricity_unmet_demand", "electricity_demand"]], #give remaining load demand to natural gas plant diff --git a/examples/24_solar_battery_grid/README.md b/examples/24_solar_battery_grid/README.md index 2cdf79ef6..1ed6e9e52 100644 --- a/examples/24_solar_battery_grid/README.md +++ b/examples/24_solar_battery_grid/README.md @@ -79,7 +79,7 @@ Solar → Battery → [Grid Buy (purchases) | Grid Sell (sales)] ```yaml technology_interconnections: [ - ["solar", "battery", "electricity", "cable"], + ["solar", "battery", "electricity", "CablePerformanceModel"], ["battery", "grid_buy", ["electricity_unmet_demand", "electricity_demand"]], ["battery", "grid_sell", ["electricity_unused_commodity", "electricity_in"]] ] diff --git a/examples/24_solar_battery_grid/plant_config.yaml b/examples/24_solar_battery_grid/plant_config.yaml index 5bb6703b9..5569c2282 100644 --- a/examples/24_solar_battery_grid/plant_config.yaml +++ b/examples/24_solar_battery_grid/plant_config.yaml @@ -23,7 +23,7 @@ site: # - grid_buy: purchases electricity to meet unmet demand (upstream) # - grid_sell: sells excess electricity back to grid (downstream) technology_interconnections: [ - ["solar", "battery", "electricity", "cable"], # connect solar to battery + ["solar", "battery", "electricity", "CablePerformanceModel"], # connect solar to battery ["battery", "grid_buy", ["electricity_unmet_demand", "electricity_demand"]], # connect battery demand to grid buying ["battery", "grid_sell", ["electricity_unused_commodity", "electricity_in"]] # connect battery surplus to grid selling ] diff --git a/examples/25_sizing_modes/plant_config.yaml b/examples/25_sizing_modes/plant_config.yaml index 49f72d1f8..aebe4e262 100644 --- a/examples/25_sizing_modes/plant_config.yaml +++ b/examples/25_sizing_modes/plant_config.yaml @@ -22,7 +22,7 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["hopp","electrolyzer","electricity","cable"], + ["hopp","electrolyzer","electricity","CablePerformanceModel"], ["electrolyzer", "ammonia", "hydrogen", "pipe"], ] diff --git a/h2integrate/converters/hydrogen/test/test_size_modes.py b/h2integrate/converters/hydrogen/test/test_size_modes.py index c663947c6..39a210f40 100644 --- a/h2integrate/converters/hydrogen/test/test_size_modes.py +++ b/h2integrate/converters/hydrogen/test/test_size_modes.py @@ -62,7 +62,7 @@ def test_resize_by_max_commodity(subtests): ] = 1.0 input_config["technology_config"] = tech_config plant_config["technology_interconnections"] = [ - ["hopp", "electrolyzer", "electricity", "cable"], + ["hopp", "electrolyzer", "electricity", "CablePerformanceModel"], ["electrolyzer", "ammonia", "hydrogen", "pipe"], ["ammonia", "electrolyzer", "max_hydrogen_capacity"], ] diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 9c9e9fbed..92f03e490 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -223,7 +223,7 @@ "NaturalGasPerformanceModel": NaturalGasPerformanceModel, "NaturalGasCostModel": NaturalGasCostModel, # Transport - "cable": CablePerformanceModel, + "CablePerformanceModel": CablePerformanceModel, "pipe": PipePerformanceModel, "combiner_performance": GenericCombinerPerformanceModel, "splitter_performance": GenericSplitterPerformanceModel, From dba6fa0f845645c229027c9bb10166e92bde4654 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:01:04 -0800 Subject: [PATCH 20/42] Revert "cable -> CablePerformanceModel" This reverts commit 522a2e30638c77b7f7000a763b7fa32a4a2a6148. --- docs/technology_models/feedstocks.md | 2 +- docs/user_guide/connecting_technologies.md | 20 +++++++++---------- docs/user_guide/model_overview.md | 8 ++++---- .../01_onshore_steel_mn/plant_config.yaml | 10 +++++----- examples/02_texas_ammonia/plant_config.yaml | 8 ++++---- .../co2_hydrogenation/plant_config_co2h.yaml | 6 +++--- .../plant_config_co2h.yaml | 6 +++--- examples/05_wind_h2_opt/plant_config.yaml | 2 +- examples/06_custom_tech/plant_config.yaml | 2 +- .../08_wind_electrolyzer/plant_config.yaml | 2 +- .../direct_ocean_capture/plant_config.yaml | 8 ++++---- .../plant_config.yaml | 4 ++-- .../plant_config_financials.yaml | 2 +- examples/10_electrolyzer_om/plant_config.yaml | 2 +- examples/12_ammonia_synloop/plant_config.yaml | 8 ++++---- .../inputs/plant_config.yaml | 2 +- .../plant_config.yaml | 6 +++--- examples/16_natural_gas/plant_config.yaml | 2 +- .../17_splitter_wind_doc_h2/plant_config.yaml | 6 +++--- .../plant_config.yaml | 2 +- examples/19_simple_dispatch/plant_config.yaml | 2 +- .../plant_config.yaml | 2 +- examples/21_iron_mn_to_il/plant_config.yaml | 6 +++--- .../23_solar_wind_ng_demand/plant_config.yaml | 4 ++-- examples/24_solar_battery_grid/README.md | 2 +- .../24_solar_battery_grid/plant_config.yaml | 2 +- examples/25_sizing_modes/plant_config.yaml | 2 +- .../hydrogen/test/test_size_modes.py | 2 +- h2integrate/core/supported_models.py | 2 +- 29 files changed, 66 insertions(+), 66 deletions(-) diff --git a/docs/technology_models/feedstocks.md b/docs/technology_models/feedstocks.md index 928997371..2ed818f72 100644 --- a/docs/technology_models/feedstocks.md +++ b/docs/technology_models/feedstocks.md @@ -34,7 +34,7 @@ Where: - `name_of_feedstock_source`: Name of your feedstock source - `consuming_technology`: Technology that uses the feedstock - `feedstock_type`: Type identifier (e.g., "natural_gas", "water", "electricity") -- `connection_type`: Name for the connection (e.g., "pipe", "CablePerformanceModel") +- `connection_type`: Name for the connection (e.g., "pipe", "cable") ## Configuration diff --git a/docs/user_guide/connecting_technologies.md b/docs/user_guide/connecting_technologies.md index 8371e656b..0b72689f1 100644 --- a/docs/user_guide/connecting_technologies.md +++ b/docs/user_guide/connecting_technologies.md @@ -31,7 +31,7 @@ There are two connection formats: - **source_tech**: Name of the technology providing the output - **destination_tech**: Name of the technology receiving the input - **variable_name**: The type of variable being transported (e.g., "electricity", "hydrogen", "ammonia") -- **transport_type**: The transport component to use (e.g., "CablePerformanceModel", "pipeline") +- **transport_type**: The transport component to use (e.g., "cable", "pipeline") #### 3-element connections (direct connections) ##### Same shared parameter name @@ -71,9 +71,9 @@ H2Integrate processes these connections in the `connect_technologies()` method o For a simple splitter configuration: ```yaml technology_interconnections: [ - ["wind_farm", "electricity_splitter", "electricity", "CablePerformanceModel"], - ["electricity_splitter", "electrolyzer", "electricity", "CablePerformanceModel"], - ["electricity_splitter", "doc", "electricity", "CablePerformanceModel"], + ["wind_farm", "electricity_splitter", "electricity", "cable"], + ["electricity_splitter", "electrolyzer", "electricity", "cable"], + ["electricity_splitter", "doc", "electricity", "cable"], ] ``` @@ -123,9 +123,9 @@ The relationship is straightforward: `_out = _in1 ```yaml technology_interconnections: [ - ["wind_farm", "combiner", "electricity", "CablePerformanceModel"], - ["solar_farm", "combiner", "electricity", "CablePerformanceModel"], - ["combiner", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind_farm", "combiner", "electricity", "cable"], + ["solar_farm", "combiner", "electricity", "cable"], + ["combiner", "electrolyzer", "electricity", "cable"], ] ``` @@ -203,9 +203,9 @@ The `prescribed_electricity_to_priority_tech` parameter can be provided as eithe ```yaml technology_interconnections: [ - ["offshore_wind", "electricity_splitter", "electricity", "CablePerformanceModel"], - ["electricity_splitter", "doc", "electricity", "CablePerformanceModel"], # first output - ["electricity_splitter", "electrolyzer", "electricity", "CablePerformanceModel"], # second output + ["offshore_wind", "electricity_splitter", "electricity", "cable"], + ["electricity_splitter", "doc", "electricity", "cable"], # first output + ["electricity_splitter", "electrolyzer", "electricity", "cable"], # second output ] ``` diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 2e76f234b..2ce890182 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -41,7 +41,7 @@ The inputs, outputs, and corresponding technology that are currently available i | `wind` | electricity | wind resource | | `solar` | electricity | solar resource | | `river` | electricity | river resource | -| `hopp` | electricity | N/A | +| `HOPPComponent` | electricity | N/A | | `electrolyzer` | hydrogen | electricity | | `geoh2` | hydrogen | rock type | | `steel` | steel | hydrogen | @@ -68,7 +68,7 @@ When the Primary Commodity is electricity, those converters are considered elect | Technology | Transport Commodity | | :---------------- | :---------------: | -| `CablePerformanceModel` | electricity | +| `cable` | electricity | | `pipe` | most mass-based commodities | | `combiner` | Any | | `splitter` | Any| @@ -242,9 +242,9 @@ Below summarizes the available performance, cost, and financial models for each (transport-models)= ## Transport Models -- `CablePerformanceModel` +- `cable` - performance models: - + `'CablePerformanceModel'`: specific to `electricity` commodity + + `'cable'`: specific to `electricity` commodity - `pipe`: - performance models: + `'pipe'`: currently compatible with the commodities "hydrogen", "co2", "methanol", "ammonia", "nitrogen", "natural_gas", "pig_iron", "reformer_catalyst", "water", "carbon", "iron_ore", and "lime" diff --git a/examples/01_onshore_steel_mn/plant_config.yaml b/examples/01_onshore_steel_mn/plant_config.yaml index 77a50f69a..12811b79f 100644 --- a/examples/01_onshore_steel_mn/plant_config.yaml +++ b/examples/01_onshore_steel_mn/plant_config.yaml @@ -20,13 +20,13 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind","combiner","electricity","CablePerformanceModel"], - ["solar","combiner","electricity","CablePerformanceModel"], - ["combiner","battery","electricity", "CablePerformanceModel"], - ["battery", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind","combiner","electricity","cable"], + ["solar","combiner","electricity","cable"], + ["combiner","battery","electricity", "cable"], + ["battery", "electrolyzer", "electricity", "cable"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ["finance_subgroup_hydrogen", "steel", ["LCOH_delivered", "LCOH"]], - ["combiner", "steel", "electricity", "CablePerformanceModel"], + ["combiner", "steel", "electricity", "cable"], # etc ] tech_to_dispatch_connections: [ diff --git a/examples/02_texas_ammonia/plant_config.yaml b/examples/02_texas_ammonia/plant_config.yaml index 42e68d67d..570880753 100644 --- a/examples/02_texas_ammonia/plant_config.yaml +++ b/examples/02_texas_ammonia/plant_config.yaml @@ -19,10 +19,10 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind","combiner","electricity","CablePerformanceModel"], - ["solar","combiner","electricity","CablePerformanceModel"], - ["combiner","battery","electricity", "CablePerformanceModel"], - ["battery", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind","combiner","electricity","cable"], + ["solar","combiner","electricity","cable"], + ["combiner","battery","electricity", "cable"], + ["battery", "electrolyzer", "electricity", "cable"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ["h2_storage", "ammonia", "hydrogen", "pipe"], ["finance_subgroup_hydrogen", "ammonia", "LCOH"], diff --git a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml index b80bc6d72..d5984da9b 100644 --- a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml @@ -18,9 +18,9 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "combiner", "electricity", "CablePerformanceModel"], #source_tech, dest_tech, transport_item, transport_type = connection - ["solar", "combiner", "electricity", "CablePerformanceModel"], - ["combiner", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind", "combiner", "electricity", "cable"], #source_tech, dest_tech, transport_item, transport_type = connection + ["solar", "combiner", "electricity", "cable"], + ["combiner", "electrolyzer", "electricity", "cable"], ["electrolyzer", "methanol", "hydrogen", "pipe"], ["finance_subgroup_electricity", "methanol", "LCOE"], ["finance_subgroup_hydrogen", "methanol", "LCOH"], diff --git a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml index 48898f19a..9a3465c19 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml @@ -12,9 +12,9 @@ site: # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electricity_splitter", "electricity", "CablePerformanceModel"], - ["electricity_splitter", "doc", "electricity", "CablePerformanceModel"], - ["electricity_splitter", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind", "electricity_splitter", "electricity", "cable"], + ["electricity_splitter", "doc", "electricity", "cable"], + ["electricity_splitter", "electrolyzer", "electricity", "cable"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ["h2_storage", "methanol", "hydrogen", "pipe"], ["doc", "co2_storage", "co2", "pipe"], diff --git a/examples/05_wind_h2_opt/plant_config.yaml b/examples/05_wind_h2_opt/plant_config.yaml index 5837e5637..96e98f562 100644 --- a/examples/05_wind_h2_opt/plant_config.yaml +++ b/examples/05_wind_h2_opt/plant_config.yaml @@ -19,7 +19,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind", "electrolyzer", "electricity", "cable"], # etc ] resource_to_tech_connections: [ diff --git a/examples/06_custom_tech/plant_config.yaml b/examples/06_custom_tech/plant_config.yaml index d9923d926..0f99bf057 100644 --- a/examples/06_custom_tech/plant_config.yaml +++ b/examples/06_custom_tech/plant_config.yaml @@ -19,7 +19,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "paper_mill", "electricity", "CablePerformanceModel"], + ["wind", "paper_mill", "electricity", "cable"], # etc ] resource_to_tech_connections: [ diff --git a/examples/08_wind_electrolyzer/plant_config.yaml b/examples/08_wind_electrolyzer/plant_config.yaml index 202708809..11aa5cb46 100644 --- a/examples/08_wind_electrolyzer/plant_config.yaml +++ b/examples/08_wind_electrolyzer/plant_config.yaml @@ -18,7 +18,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind", "electrolyzer", "electricity", "cable"], # etc ] diff --git a/examples/09_co2/direct_ocean_capture/plant_config.yaml b/examples/09_co2/direct_ocean_capture/plant_config.yaml index c8e199aba..f9ca662a4 100644 --- a/examples/09_co2/direct_ocean_capture/plant_config.yaml +++ b/examples/09_co2/direct_ocean_capture/plant_config.yaml @@ -16,10 +16,10 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["hopp", "combiner", "electricity", "CablePerformanceModel"], - ["wind", "combiner", "electricity", "CablePerformanceModel"], - ["combiner", "battery", "electricity", "CablePerformanceModel"], - ["battery", "doc", "electricity", "CablePerformanceModel"], + ["hopp", "combiner", "electricity", "cable"], + ["wind", "combiner", "electricity", "cable"], + ["combiner", "battery", "electricity", "cable"], + ["battery", "doc", "electricity", "cable"], # etc ] tech_to_dispatch_connections: [ diff --git a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml index 2ff3e1c7b..0b91f6a94 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml @@ -17,8 +17,8 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind","battery","electricity", "CablePerformanceModel"], - ["battery", "oae", "electricity", "CablePerformanceModel"], + ["wind","battery","electricity", "cable"], + ["battery", "oae", "electricity", "cable"], # etc ] tech_to_dispatch_connections: [ diff --git a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml index f0402e6a8..eab01dad3 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml @@ -18,7 +18,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "oae", "electricity", "CablePerformanceModel"], + ["wind", "oae", "electricity", "cable"], ["finance_subgroup_electricity", "oae", "LCOE"] # etc ] diff --git a/examples/10_electrolyzer_om/plant_config.yaml b/examples/10_electrolyzer_om/plant_config.yaml index 73687c704..f55a3cce6 100644 --- a/examples/10_electrolyzer_om/plant_config.yaml +++ b/examples/10_electrolyzer_om/plant_config.yaml @@ -18,7 +18,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind", "electrolyzer", "electricity", "cable"], # etc ] diff --git a/examples/12_ammonia_synloop/plant_config.yaml b/examples/12_ammonia_synloop/plant_config.yaml index df8a60cec..3b778bbbf 100644 --- a/examples/12_ammonia_synloop/plant_config.yaml +++ b/examples/12_ammonia_synloop/plant_config.yaml @@ -20,10 +20,10 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind","combiner","electricity","CablePerformanceModel"], - ["solar","combiner","electricity","CablePerformanceModel"], - ["combiner","battery","electricity", "CablePerformanceModel"], - ["battery", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind","combiner","electricity","cable"], + ["solar","combiner","electricity","cable"], + ["combiner","battery","electricity", "cable"], + ["battery", "electrolyzer", "electricity", "cable"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ["h2_storage", "ammonia", "hydrogen", "pipe"], # etc diff --git a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml index 209f0a71b..ce4be62f2 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml @@ -17,7 +17,7 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind", "electrolyzer", "electricity", "cable"], ["electrolyzer", "h2_storage", "hydrogen", "pipe"], ] diff --git a/examples/15_wind_solar_electrolyzer/plant_config.yaml b/examples/15_wind_solar_electrolyzer/plant_config.yaml index cc9efcee5..101b0ee87 100644 --- a/examples/15_wind_solar_electrolyzer/plant_config.yaml +++ b/examples/15_wind_solar_electrolyzer/plant_config.yaml @@ -24,9 +24,9 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "combiner", "electricity", "CablePerformanceModel"], #source_tech, dest_tech, transport_item, transport_type = connection - ["solar", "combiner", "electricity", "CablePerformanceModel"], - ["combiner", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind", "combiner", "electricity", "cable"], #source_tech, dest_tech, transport_item, transport_type = connection + ["solar", "combiner", "electricity", "cable"], + ["combiner", "electrolyzer", "electricity", "cable"], ] resource_to_tech_connections: [ diff --git a/examples/16_natural_gas/plant_config.yaml b/examples/16_natural_gas/plant_config.yaml index 5a02dde8f..95f19eeaa 100644 --- a/examples/16_natural_gas/plant_config.yaml +++ b/examples/16_natural_gas/plant_config.yaml @@ -22,7 +22,7 @@ site: # and not connected to additional technologies. # hence the empty array. technology_interconnections: [ - ["solar", "battery", "electricity", "CablePerformanceModel"], #connect solar to battery + ["solar", "battery", "electricity", "cable"], #connect solar to battery ["ng_feedstock", "natural_gas_plant", "natural_gas", "pipe"], #connect NG feedstock to NG plant ["battery", "natural_gas_plant", ["electricity_unmet_demand","electricity_demand"]], #connect electricity demand to NG feedstock ] diff --git a/examples/17_splitter_wind_doc_h2/plant_config.yaml b/examples/17_splitter_wind_doc_h2/plant_config.yaml index eafaa2bad..9d507ef18 100644 --- a/examples/17_splitter_wind_doc_h2/plant_config.yaml +++ b/examples/17_splitter_wind_doc_h2/plant_config.yaml @@ -20,9 +20,9 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "electricity_splitter", "electricity", "CablePerformanceModel"], - ["electricity_splitter", "doc", "electricity", "CablePerformanceModel"], - ["electricity_splitter", "electrolyzer", "electricity", "CablePerformanceModel"], + ["wind", "electricity_splitter", "electricity", "cable"], + ["electricity_splitter", "doc", "electricity", "cable"], + ["electricity_splitter", "electrolyzer", "electricity", "cable"], ] resource_to_tech_connections: [ diff --git a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml index c0dd92b9f..f172dcabe 100644 --- a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml @@ -19,7 +19,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "battery", "electricity", "CablePerformanceModel"], + ["wind", "battery", "electricity", "cable"], ] # array of arrays containing left-to-right technology, technology doing the dispatching diff --git a/examples/19_simple_dispatch/plant_config.yaml b/examples/19_simple_dispatch/plant_config.yaml index f63465ab4..c420c1e0d 100644 --- a/examples/19_simple_dispatch/plant_config.yaml +++ b/examples/19_simple_dispatch/plant_config.yaml @@ -19,7 +19,7 @@ plant: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "battery", "electricity", "CablePerformanceModel"], + ["wind", "battery", "electricity", "cable"], # etc ] diff --git a/examples/20_solar_electrolyzer_doe/plant_config.yaml b/examples/20_solar_electrolyzer_doe/plant_config.yaml index d8c7159e2..dde6df8bd 100644 --- a/examples/20_solar_electrolyzer_doe/plant_config.yaml +++ b/examples/20_solar_electrolyzer_doe/plant_config.yaml @@ -15,7 +15,7 @@ site: # array of arrays containing left-to-right technology technology_interconnections: [ - ["solar", "electrolyzer", "electricity", "CablePerformanceModel"], #connect solar power to electrolyzer + ["solar", "electrolyzer", "electricity", "cable"], #connect solar power to electrolyzer ] resource_to_tech_connections: [ diff --git a/examples/21_iron_mn_to_il/plant_config.yaml b/examples/21_iron_mn_to_il/plant_config.yaml index 8838addf4..de855c4b2 100644 --- a/examples/21_iron_mn_to_il/plant_config.yaml +++ b/examples/21_iron_mn_to_il/plant_config.yaml @@ -23,16 +23,16 @@ site: # this will naturally grow as we mature the interconnected tech technology_interconnections: [ # connect feedstocks to iron mine - ["grid_feedstock","iron_mine","electricity","CablePerformanceModel"], + ["grid_feedstock","iron_mine","electricity","cable"], ["mine_feedstock","iron_mine","crude_ore","pipe"], # connect feedstocks to iron plant ["iron_mine","iron_plant","iron_ore","iron_transport"], - ["dri_grid_feedstock","iron_plant","electricity","CablePerformanceModel"], + ["dri_grid_feedstock","iron_plant","electricity","cable"], ["catalyst_feedstock","iron_plant","reformer_catalyst","pipe"], ["water_feedstock","iron_plant","water","pipe"], ["natural_gas_feedstock","iron_plant","natural_gas","pipe"], # connect feedstocks to steel plant - ["eaf_grid_feedstock","steel_plant","electricity","CablePerformanceModel"], + ["eaf_grid_feedstock","steel_plant","electricity","cable"], ["eaf_water_feedstock","steel_plant","water","pipe"], ["eaf_natural_gas_feedstock","steel_plant","natural_gas","pipe"], ["iron_plant","steel_plant","pig_iron","pipe"], diff --git a/examples/23_solar_wind_ng_demand/plant_config.yaml b/examples/23_solar_wind_ng_demand/plant_config.yaml index c402e232d..711f3954c 100644 --- a/examples/23_solar_wind_ng_demand/plant_config.yaml +++ b/examples/23_solar_wind_ng_demand/plant_config.yaml @@ -36,8 +36,8 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["wind", "combiner", "electricity", "CablePerformanceModel"], #source_tech, dest_tech, transport_item, transport_type = connection - ["solar", "combiner", "electricity", "CablePerformanceModel"], + ["wind", "combiner", "electricity", "cable"], #source_tech, dest_tech, transport_item, transport_type = connection + ["solar", "combiner", "electricity", "cable"], ["ng_feedstock", "natural_gas_plant", "natural_gas", "pipe"], #connect NG feedstock to NG plant ["combiner", "electrical_load_demand", ["electricity_out", "electricity_in"]], # subtract wind and solar from demand ["electrical_load_demand", "natural_gas_plant", ["electricity_unmet_demand", "electricity_demand"]], #give remaining load demand to natural gas plant diff --git a/examples/24_solar_battery_grid/README.md b/examples/24_solar_battery_grid/README.md index 1ed6e9e52..2cdf79ef6 100644 --- a/examples/24_solar_battery_grid/README.md +++ b/examples/24_solar_battery_grid/README.md @@ -79,7 +79,7 @@ Solar → Battery → [Grid Buy (purchases) | Grid Sell (sales)] ```yaml technology_interconnections: [ - ["solar", "battery", "electricity", "CablePerformanceModel"], + ["solar", "battery", "electricity", "cable"], ["battery", "grid_buy", ["electricity_unmet_demand", "electricity_demand"]], ["battery", "grid_sell", ["electricity_unused_commodity", "electricity_in"]] ] diff --git a/examples/24_solar_battery_grid/plant_config.yaml b/examples/24_solar_battery_grid/plant_config.yaml index 5569c2282..5bb6703b9 100644 --- a/examples/24_solar_battery_grid/plant_config.yaml +++ b/examples/24_solar_battery_grid/plant_config.yaml @@ -23,7 +23,7 @@ site: # - grid_buy: purchases electricity to meet unmet demand (upstream) # - grid_sell: sells excess electricity back to grid (downstream) technology_interconnections: [ - ["solar", "battery", "electricity", "CablePerformanceModel"], # connect solar to battery + ["solar", "battery", "electricity", "cable"], # connect solar to battery ["battery", "grid_buy", ["electricity_unmet_demand", "electricity_demand"]], # connect battery demand to grid buying ["battery", "grid_sell", ["electricity_unused_commodity", "electricity_in"]] # connect battery surplus to grid selling ] diff --git a/examples/25_sizing_modes/plant_config.yaml b/examples/25_sizing_modes/plant_config.yaml index aebe4e262..49f72d1f8 100644 --- a/examples/25_sizing_modes/plant_config.yaml +++ b/examples/25_sizing_modes/plant_config.yaml @@ -22,7 +22,7 @@ site: # with the reverse definition. # this will naturally grow as we mature the interconnected tech technology_interconnections: [ - ["hopp","electrolyzer","electricity","CablePerformanceModel"], + ["hopp","electrolyzer","electricity","cable"], ["electrolyzer", "ammonia", "hydrogen", "pipe"], ] diff --git a/h2integrate/converters/hydrogen/test/test_size_modes.py b/h2integrate/converters/hydrogen/test/test_size_modes.py index 39a210f40..c663947c6 100644 --- a/h2integrate/converters/hydrogen/test/test_size_modes.py +++ b/h2integrate/converters/hydrogen/test/test_size_modes.py @@ -62,7 +62,7 @@ def test_resize_by_max_commodity(subtests): ] = 1.0 input_config["technology_config"] = tech_config plant_config["technology_interconnections"] = [ - ["hopp", "electrolyzer", "electricity", "CablePerformanceModel"], + ["hopp", "electrolyzer", "electricity", "cable"], ["electrolyzer", "ammonia", "hydrogen", "pipe"], ["ammonia", "electrolyzer", "max_hydrogen_capacity"], ] diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 92f03e490..9c9e9fbed 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -223,7 +223,7 @@ "NaturalGasPerformanceModel": NaturalGasPerformanceModel, "NaturalGasCostModel": NaturalGasCostModel, # Transport - "CablePerformanceModel": CablePerformanceModel, + "cable": CablePerformanceModel, "pipe": PipePerformanceModel, "combiner_performance": GenericCombinerPerformanceModel, "splitter_performance": GenericSplitterPerformanceModel, From 9a20bd952decb72f674b45d6f4ab3466f0282e63 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:10:42 -0800 Subject: [PATCH 21/42] replace summers --- h2integrate/core/h2integrate_model.py | 2 +- h2integrate/core/supported_models.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/h2integrate/core/h2integrate_model.py b/h2integrate/core/h2integrate_model.py index 665d1773d..41dffce17 100644 --- a/h2integrate/core/h2integrate_model.py +++ b/h2integrate/core/h2integrate_model.py @@ -713,7 +713,7 @@ def create_finance_model(self): # to sum the commodity production profile from the commodity stream if commodity_stream is not None: # get the generic summer model - commodity_summer_model = self.supported_models.get("summer") + commodity_summer_model = self.supported_models.get("GenericSummerPerformanceModel") if "combiner" in commodity_stream or "splitter" in commodity_stream: # combiners and splitters have the same tech config as the production summer, # so just use their config if the commodity stream is a combiner or splitter diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 9c9e9fbed..32f69db20 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -230,7 +230,7 @@ "iron_transport_performance": IronTransportPerformanceComponent, "iron_transport_cost": IronTransportCostComponent, # Simple Summers - "summer": GenericSummerPerformanceModel, + "GenericSummerPerformanceModel": GenericSummerPerformanceModel, # Storage "pysam_battery": PySAMBatteryPerformanceModel, "storage_auto_sizing": StorageAutoSizingModel, From 2b5c0fb91fabf5d54988b44d2c60195e491700b7 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:16:55 -0800 Subject: [PATCH 22/42] update pysam battery storage model --- docs/technology_models/pysam_battery.md | 2 +- docs/user_guide/model_overview.md | 2 +- examples/01_onshore_steel_mn/tech_config.yaml | 2 +- examples/02_texas_ammonia/tech_config.yaml | 2 +- examples/09_co2/direct_ocean_capture/tech_config.yaml | 2 +- examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml | 2 +- examples/12_ammonia_synloop/tech_config.yaml | 2 +- examples/18_pyomo_heuristic_dispatch/tech_config.yaml | 2 +- .../tech_config_error_for_testing.yaml | 2 +- h2integrate/control/test/test_pyomo_controllers.py | 2 +- h2integrate/core/supported_models.py | 2 +- .../storage/battery/test_battery/inputs/tech_config.yaml | 4 ++-- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/technology_models/pysam_battery.md b/docs/technology_models/pysam_battery.md index 7548a5a11..0811f8fd9 100644 --- a/docs/technology_models/pysam_battery.md +++ b/docs/technology_models/pysam_battery.md @@ -5,4 +5,4 @@ an OpenMDAO component. For full documentation see the [PySAM battery model docum The PySAM battery model simulates the response of the battery to control commands. However, the control commands may not be strictly followed. Specifically, the SOC bounds have been seen to be exceeded by nearly 4% SOC for the upper bound and close to 1% SOC on the lower bound. -To use the pysam battery model, specify `"pysam_battery"` as the performance model. The PySAM battery wrapper is designed to be used with the [pyomo control framework](pyomo-control). If the [open-loop control framework](open-loop-control) is used with the pysam battery, the pysam battery will not respect the commands and the battery output will be ignored by the controller. +To use the pysam battery model, specify `"PySAMBatteryPerformanceModel"` as the performance model. The PySAM battery wrapper is designed to be used with the [pyomo control framework](pyomo-control). If the [open-loop control framework](open-loop-control) is used with the pysam battery, the pysam battery will not respect the commands and the battery output will be ignored by the controller. diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 2ce890182..a22cc0b00 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -273,7 +273,7 @@ Below summarizes the available performance, cost, and financial models for each + `'generic_storage_cost'` - `battery`: battery storage - performance models: - + `'pysam_battery'` + + `'PySAMBatteryPerformanceModel'` - cost models: + `'atb_battery_cost'` diff --git a/examples/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index 81f8b0602..0dadec158 100644 --- a/examples/01_onshore_steel_mn/tech_config.yaml +++ b/examples/01_onshore_steel_mn/tech_config.yaml @@ -76,7 +76,7 @@ technologies: control_strategy: model: "heuristic_load_following_controller" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: model: "atb_battery_cost" model_inputs: diff --git a/examples/02_texas_ammonia/tech_config.yaml b/examples/02_texas_ammonia/tech_config.yaml index e982da6d8..ea58d9df6 100644 --- a/examples/02_texas_ammonia/tech_config.yaml +++ b/examples/02_texas_ammonia/tech_config.yaml @@ -74,7 +74,7 @@ technologies: control_strategy: model: "heuristic_load_following_controller" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: model: "atb_battery_cost" model_inputs: diff --git a/examples/09_co2/direct_ocean_capture/tech_config.yaml b/examples/09_co2/direct_ocean_capture/tech_config.yaml index a7a90ebd6..927758006 100644 --- a/examples/09_co2/direct_ocean_capture/tech_config.yaml +++ b/examples/09_co2/direct_ocean_capture/tech_config.yaml @@ -67,7 +67,7 @@ technologies: control_strategy: model: "heuristic_load_following_controller" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: model: "atb_battery_cost" model_inputs: diff --git a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml index 4b78b3730..87c620dd7 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml @@ -44,7 +44,7 @@ technologies: control_strategy: model: "heuristic_load_following_controller" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: model: "atb_battery_cost" model_inputs: diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index bba54e217..e11669a9f 100644 --- a/examples/12_ammonia_synloop/tech_config.yaml +++ b/examples/12_ammonia_synloop/tech_config.yaml @@ -74,7 +74,7 @@ technologies: control_strategy: model: "heuristic_load_following_controller" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: model: "atb_battery_cost" model_inputs: diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml index 39930d622..815f3e363 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml @@ -40,7 +40,7 @@ technologies: control_strategy: model: "heuristic_load_following_controller" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: model: "atb_battery_cost" model_inputs: diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml index 4239093d0..b73d2ca03 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml @@ -43,7 +43,7 @@ technologies: control_strategy: model: "heuristic_load_following_controller" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: model: "atb_battery_cost" model_inputs: diff --git a/h2integrate/control/test/test_pyomo_controllers.py b/h2integrate/control/test/test_pyomo_controllers.py index 995c8f416..de26dba2c 100644 --- a/h2integrate/control/test/test_pyomo_controllers.py +++ b/h2integrate/control/test/test_pyomo_controllers.py @@ -36,7 +36,7 @@ "battery": { "dispatch_rule_set": {"model": "pyomo_dispatch_generic_storage"}, "control_strategy": {"model": "heuristic_load_following_controller"}, - "performance_model": {"model": "pysam_battery"}, + "performance_model": {"model": "PySAMBatteryPerformanceModel"}, "model_inputs": { "shared_parameters": { "max_charge_rate": 50000, diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 32f69db20..08cfdf89a 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -232,7 +232,7 @@ # Simple Summers "GenericSummerPerformanceModel": GenericSummerPerformanceModel, # Storage - "pysam_battery": PySAMBatteryPerformanceModel, + "PySAMBatteryPerformanceModel": PySAMBatteryPerformanceModel, "storage_auto_sizing": StorageAutoSizingModel, "lined_rock_cavern_h2_storage_cost": LinedRockCavernStorageCostModel, "salt_cavern_h2_storage_cost": SaltCavernStorageCostModel, diff --git a/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml b/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml index 39114df9d..54fc578a1 100644 --- a/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml +++ b/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml @@ -6,9 +6,9 @@ technologies: dispatch_rule_set: model: "pyomo_dispatch_generic_storage" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" model_inputs: shared_parameters: max_charge_rate: 50000 From 4c24a1e0ba36d9c78cde53007ce410e41ed5c086 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:18:09 -0800 Subject: [PATCH 23/42] update storage auto sizing --- docs/user_guide/model_overview.md | 2 +- examples/01_onshore_steel_mn/tech_config.yaml | 2 +- examples/02_texas_ammonia/tech_config.yaml | 2 +- examples/12_ammonia_synloop/tech_config.yaml | 2 +- h2integrate/control/test/inputs/tech_config.yaml | 2 +- h2integrate/core/supported_models.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index a22cc0b00..d182a156d 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -268,7 +268,7 @@ Below summarizes the available performance, cost, and financial models for each - `generic_storage`: any resource storage - performance models: + `'simple_generic_storage'` - + `'storage_auto_sizing'` + + `'StorageAutoSizingModel'` - cost models: + `'generic_storage_cost'` - `battery`: battery storage diff --git a/examples/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index 0dadec158..5326ff4ff 100644 --- a/examples/01_onshore_steel_mn/tech_config.yaml +++ b/examples/01_onshore_steel_mn/tech_config.yaml @@ -130,7 +130,7 @@ technologies: h2_storage: performance_model: - model: "storage_auto_sizing" + model: "StorageAutoSizingModel" control_strategy: model: "pass_through_controller" cost_model: diff --git a/examples/02_texas_ammonia/tech_config.yaml b/examples/02_texas_ammonia/tech_config.yaml index ea58d9df6..3265cfc0b 100644 --- a/examples/02_texas_ammonia/tech_config.yaml +++ b/examples/02_texas_ammonia/tech_config.yaml @@ -128,7 +128,7 @@ technologies: h2_storage: performance_model: - model: "storage_auto_sizing" + model: "StorageAutoSizingModel" control_strategy: model: "pass_through_controller" cost_model: diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index e11669a9f..f121df56e 100644 --- a/examples/12_ammonia_synloop/tech_config.yaml +++ b/examples/12_ammonia_synloop/tech_config.yaml @@ -128,7 +128,7 @@ technologies: h2_storage: performance_model: - model: "storage_auto_sizing" + model: "StorageAutoSizingModel" control_strategy: model: "pass_through_controller" cost_model: diff --git a/h2integrate/control/test/inputs/tech_config.yaml b/h2integrate/control/test/inputs/tech_config.yaml index 6d4864704..8a85f8d89 100644 --- a/h2integrate/control/test/inputs/tech_config.yaml +++ b/h2integrate/control/test/inputs/tech_config.yaml @@ -6,7 +6,7 @@ technologies: control_strategy: model: "pass_through_controller" performance_model: - model: "storage_auto_sizing" + model: "StorageAutoSizingModel" cost_model: model: "lined_rock_cavern_h2_storage_cost" model_inputs: diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 08cfdf89a..b0f16c8fc 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -233,7 +233,7 @@ "GenericSummerPerformanceModel": GenericSummerPerformanceModel, # Storage "PySAMBatteryPerformanceModel": PySAMBatteryPerformanceModel, - "storage_auto_sizing": StorageAutoSizingModel, + "StorageAutoSizingModel": StorageAutoSizingModel, "lined_rock_cavern_h2_storage_cost": LinedRockCavernStorageCostModel, "salt_cavern_h2_storage_cost": SaltCavernStorageCostModel, "mch_tol_h2_storage_cost": MCHTOLStorageCostModel, From 0589de15d45b02d3f11293166c41c7d3ef3fe96c Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:19:08 -0800 Subject: [PATCH 24/42] update cavern storage --- docs/user_guide/model_overview.md | 4 ++-- examples/01_onshore_steel_mn/tech_config.yaml | 2 +- examples/02_texas_ammonia/tech_config.yaml | 2 +- examples/12_ammonia_synloop/tech_config.yaml | 2 +- examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml | 2 +- h2integrate/control/test/inputs/tech_config.yaml | 2 +- h2integrate/core/supported_models.py | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index d182a156d..9caf07b14 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -261,8 +261,8 @@ Below summarizes the available performance, cost, and financial models for each - performance models: + `'hydrogen_tank_performance'` - cost models: - + `'lined_rock_cavern_h2_storage_cost'` - + `'salt_cavern_h2_storage_cost'` + + `'LinedRockCavernStorageCostModel'` + + `'SaltCavernStorageCostModel'` + `'mch_tol_h2_storage_cost'` + `'buried_pipe_h2_storage_cost'` - `generic_storage`: any resource storage diff --git a/examples/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index 5326ff4ff..e0b5e825a 100644 --- a/examples/01_onshore_steel_mn/tech_config.yaml +++ b/examples/01_onshore_steel_mn/tech_config.yaml @@ -134,7 +134,7 @@ technologies: control_strategy: model: "pass_through_controller" cost_model: - model: "lined_rock_cavern_h2_storage_cost" + model: "LinedRockCavernStorageCostModel" model_inputs: shared_parameters: commodity_name: "hydrogen" diff --git a/examples/02_texas_ammonia/tech_config.yaml b/examples/02_texas_ammonia/tech_config.yaml index 3265cfc0b..094127236 100644 --- a/examples/02_texas_ammonia/tech_config.yaml +++ b/examples/02_texas_ammonia/tech_config.yaml @@ -132,7 +132,7 @@ technologies: control_strategy: model: "pass_through_controller" cost_model: - model: "salt_cavern_h2_storage_cost" + model: "SaltCavernStorageCostModel" model_inputs: shared_parameters: commodity_name: "hydrogen" diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index f121df56e..f64cc62be 100644 --- a/examples/12_ammonia_synloop/tech_config.yaml +++ b/examples/12_ammonia_synloop/tech_config.yaml @@ -132,7 +132,7 @@ technologies: control_strategy: model: "pass_through_controller" cost_model: - model: "salt_cavern_h2_storage_cost" + model: "SaltCavernStorageCostModel" model_inputs: shared_parameters: commodity_name: "hydrogen" diff --git a/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml index d5a684ea2..b43d03267 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml @@ -55,7 +55,7 @@ technologies: performance_model: model: "simple_generic_storage" cost_model: - model: "lined_rock_cavern_h2_storage_cost" + model: "LinedRockCavernStorageCostModel" control_strategy: model: "demand_open_loop_storage_controller" model_inputs: diff --git a/h2integrate/control/test/inputs/tech_config.yaml b/h2integrate/control/test/inputs/tech_config.yaml index 8a85f8d89..a263acb91 100644 --- a/h2integrate/control/test/inputs/tech_config.yaml +++ b/h2integrate/control/test/inputs/tech_config.yaml @@ -8,7 +8,7 @@ technologies: performance_model: model: "StorageAutoSizingModel" cost_model: - model: "lined_rock_cavern_h2_storage_cost" + model: "LinedRockCavernStorageCostModel" model_inputs: shared_parameters: commodity_name: "hydrogen" diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index b0f16c8fc..05095b1e8 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -234,8 +234,8 @@ # Storage "PySAMBatteryPerformanceModel": PySAMBatteryPerformanceModel, "StorageAutoSizingModel": StorageAutoSizingModel, - "lined_rock_cavern_h2_storage_cost": LinedRockCavernStorageCostModel, - "salt_cavern_h2_storage_cost": SaltCavernStorageCostModel, + "LinedRockCavernStorageCostModel": LinedRockCavernStorageCostModel, + "SaltCavernStorageCostModel": SaltCavernStorageCostModel, "mch_tol_h2_storage_cost": MCHTOLStorageCostModel, "buried_pipe_h2_storage_cost": PipeStorageCostModel, "atb_battery_cost": ATBBatteryCostModel, From 83ced4f24ab03d78f11ff75c7507522326344f2b Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:21:16 -0800 Subject: [PATCH 25/42] update mchtol and pipe storage --- docs/user_guide/model_overview.md | 4 ++-- h2integrate/core/supported_models.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 9caf07b14..2c9a5c4c6 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -263,8 +263,8 @@ Below summarizes the available performance, cost, and financial models for each - cost models: + `'LinedRockCavernStorageCostModel'` + `'SaltCavernStorageCostModel'` - + `'mch_tol_h2_storage_cost'` - + `'buried_pipe_h2_storage_cost'` + + `'MCHTOLStorageCostModel'` + + `'PipeStorageCostModel'` - `generic_storage`: any resource storage - performance models: + `'simple_generic_storage'` diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 05095b1e8..6f12060e4 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -236,8 +236,8 @@ "StorageAutoSizingModel": StorageAutoSizingModel, "LinedRockCavernStorageCostModel": LinedRockCavernStorageCostModel, "SaltCavernStorageCostModel": SaltCavernStorageCostModel, - "mch_tol_h2_storage_cost": MCHTOLStorageCostModel, - "buried_pipe_h2_storage_cost": PipeStorageCostModel, + "MCHTOLStorageCostModel": MCHTOLStorageCostModel, + "PipeStorageCostModel": PipeStorageCostModel, "atb_battery_cost": ATBBatteryCostModel, "generic_storage_cost": GenericStorageCostModel, "simple_generic_storage": SimpleGenericStorage, From a9a86ac59ecba9edf3dfd0482ede50a7345ab9fe Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:22:20 -0800 Subject: [PATCH 26/42] update atb battery --- docs/user_guide/model_overview.md | 2 +- examples/01_onshore_steel_mn/tech_config.yaml | 2 +- examples/02_texas_ammonia/tech_config.yaml | 2 +- examples/09_co2/direct_ocean_capture/tech_config.yaml | 2 +- .../09_co2/ocean_alkalinity_enhancement/tech_config.yaml | 2 +- examples/12_ammonia_synloop/tech_config.yaml | 2 +- examples/16_natural_gas/tech_config.yaml | 2 +- examples/18_pyomo_heuristic_dispatch/tech_config.yaml | 2 +- .../tech_config_error_for_testing.yaml | 2 +- examples/19_simple_dispatch/tech_config.yaml | 2 +- examples/24_solar_battery_grid/tech_config.yaml | 2 +- h2integrate/core/supported_models.py | 2 +- h2integrate/storage/battery/test/test_battery_cost.py | 6 +++--- 13 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 2c9a5c4c6..c7ba154fc 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -275,7 +275,7 @@ Below summarizes the available performance, cost, and financial models for each - performance models: + `'PySAMBatteryPerformanceModel'` - cost models: - + `'atb_battery_cost'` + + `'ATBBatteryCostModel'` (basic-operations)= ## Basic Operations diff --git a/examples/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index e0b5e825a..aba965305 100644 --- a/examples/01_onshore_steel_mn/tech_config.yaml +++ b/examples/01_onshore_steel_mn/tech_config.yaml @@ -78,7 +78,7 @@ technologies: performance_model: model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/examples/02_texas_ammonia/tech_config.yaml b/examples/02_texas_ammonia/tech_config.yaml index 094127236..8e2c19379 100644 --- a/examples/02_texas_ammonia/tech_config.yaml +++ b/examples/02_texas_ammonia/tech_config.yaml @@ -76,7 +76,7 @@ technologies: performance_model: model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/examples/09_co2/direct_ocean_capture/tech_config.yaml b/examples/09_co2/direct_ocean_capture/tech_config.yaml index 927758006..3baec2d7b 100644 --- a/examples/09_co2/direct_ocean_capture/tech_config.yaml +++ b/examples/09_co2/direct_ocean_capture/tech_config.yaml @@ -69,7 +69,7 @@ technologies: performance_model: model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml index 87c620dd7..5bc3e149f 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml @@ -46,7 +46,7 @@ technologies: performance_model: model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index f64cc62be..e63fec907 100644 --- a/examples/12_ammonia_synloop/tech_config.yaml +++ b/examples/12_ammonia_synloop/tech_config.yaml @@ -76,7 +76,7 @@ technologies: performance_model: model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/examples/16_natural_gas/tech_config.yaml b/examples/16_natural_gas/tech_config.yaml index 5e3b7b701..a0f824b56 100644 --- a/examples/16_natural_gas/tech_config.yaml +++ b/examples/16_natural_gas/tech_config.yaml @@ -34,7 +34,7 @@ technologies: performance_model: model: "simple_generic_storage" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" control_strategy: model: "demand_open_loop_storage_controller" model_inputs: diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml index 815f3e363..daee3998d 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml @@ -42,7 +42,7 @@ technologies: performance_model: model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml index b73d2ca03..e42eac75e 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml @@ -45,7 +45,7 @@ technologies: performance_model: model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: max_charge_rate: 100000 diff --git a/examples/19_simple_dispatch/tech_config.yaml b/examples/19_simple_dispatch/tech_config.yaml index 88e7d84c8..030f34970 100644 --- a/examples/19_simple_dispatch/tech_config.yaml +++ b/examples/19_simple_dispatch/tech_config.yaml @@ -33,7 +33,7 @@ technologies: performance_model: model: "simple_generic_storage" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" control_strategy: model: "demand_open_loop_storage_controller" model_inputs: diff --git a/examples/24_solar_battery_grid/tech_config.yaml b/examples/24_solar_battery_grid/tech_config.yaml index d59090829..b5bf7dff8 100644 --- a/examples/24_solar_battery_grid/tech_config.yaml +++ b/examples/24_solar_battery_grid/tech_config.yaml @@ -34,7 +34,7 @@ technologies: performance_model: model: "simple_generic_storage" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" control_strategy: model: "demand_open_loop_storage_controller" model_inputs: diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 6f12060e4..12f4e1e16 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -238,7 +238,7 @@ "SaltCavernStorageCostModel": SaltCavernStorageCostModel, "MCHTOLStorageCostModel": MCHTOLStorageCostModel, "PipeStorageCostModel": PipeStorageCostModel, - "atb_battery_cost": ATBBatteryCostModel, + "ATBBatteryCostModel": ATBBatteryCostModel, "generic_storage_cost": GenericStorageCostModel, "simple_generic_storage": SimpleGenericStorage, # Control diff --git a/h2integrate/storage/battery/test/test_battery_cost.py b/h2integrate/storage/battery/test/test_battery_cost.py index 2fdd8fa84..c9f5704d9 100644 --- a/h2integrate/storage/battery/test/test_battery_cost.py +++ b/h2integrate/storage/battery/test/test_battery_cost.py @@ -2,7 +2,7 @@ import openmdao.api as om from pytest import fixture -from h2integrate.storage.battery.atb_battery_cost import ATBBatteryCostModel +from h2integrate.storage.battery.ATBBatteryCostModel import ATBBatteryCostModel from h2integrate.control.control_strategies.storage.demand_openloop_controller import ( DemandOpenLoopStorageController, ) @@ -30,7 +30,7 @@ def electricity_profile_kW(): def battery_tech_config_kW(): battery_inputs = { "performance_model": {"model": "simple_generic_storage"}, - "cost_model": {"model": "atb_battery_cost"}, + "cost_model": {"model": "ATBBatteryCostModel"}, "control_strategy": {"model": "demand_open_loop_storage_controller"}, "model_inputs": { "shared_parameters": { @@ -63,7 +63,7 @@ def battery_tech_config_kW(): def battery_tech_config_MW(): battery_inputs = { "performance_model": {"model": "simple_generic_storage"}, - "cost_model": {"model": "atb_battery_cost"}, + "cost_model": {"model": "ATBBatteryCostModel"}, "control_strategy": {"model": "demand_open_loop_storage_controller"}, "model_inputs": { "shared_parameters": { From c79a6279d18f4e8e0dea32423fe0c9c339410362 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:26:23 -0800 Subject: [PATCH 27/42] update generic storage models --- docs/user_guide/model_overview.md | 4 ++-- .../co2_hydrogenation_doc/tech_config_co2h.yaml | 8 ++++---- .../14_wind_hydrogen_dispatch/inputs/tech_config.yaml | 2 +- examples/16_natural_gas/tech_config.yaml | 2 +- examples/19_simple_dispatch/tech_config.yaml | 2 +- examples/24_solar_battery_grid/tech_config.yaml | 2 +- h2integrate/control/test/test_openloop_controllers.py | 6 +++--- h2integrate/core/supported_models.py | 4 ++-- h2integrate/storage/battery/test/test_battery_cost.py | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index c7ba154fc..a98c00312 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -267,10 +267,10 @@ Below summarizes the available performance, cost, and financial models for each + `'PipeStorageCostModel'` - `generic_storage`: any resource storage - performance models: - + `'simple_generic_storage'` + + `'SimpleGenericStorage'` + `'StorageAutoSizingModel'` - cost models: - + `'generic_storage_cost'` + + `'GenericStorageCostModel'` - `battery`: battery storage - performance models: + `'PySAMBatteryPerformanceModel'` diff --git a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml index bfc9f00ef..02f409c9f 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml @@ -75,9 +75,9 @@ technologies: replacement_cost_percent: 0.15 # percent of capex - H2A default case h2_storage: performance_model: - model: "simple_generic_storage" + model: "SimpleGenericStorage" cost_model: - model: "generic_storage_cost" + model: "GenericStorageCostModel" control_strategy: model: "demand_open_loop_storage_controller" model_inputs: @@ -128,9 +128,9 @@ technologies: infrastructure_type: "desal" co2_storage: performance_model: - model: "simple_generic_storage" + model: "SimpleGenericStorage" cost_model: - model: "generic_storage_cost" + model: "GenericStorageCostModel" control_strategy: model: "demand_open_loop_storage_controller" model_inputs: diff --git a/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml index b43d03267..a694fe3c8 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml @@ -53,7 +53,7 @@ technologies: replacement_cost_percent: 0.15 # percent of capex - H2A default case h2_storage: performance_model: - model: "simple_generic_storage" + model: "SimpleGenericStorage" cost_model: model: "LinedRockCavernStorageCostModel" control_strategy: diff --git a/examples/16_natural_gas/tech_config.yaml b/examples/16_natural_gas/tech_config.yaml index a0f824b56..c5e1ccb69 100644 --- a/examples/16_natural_gas/tech_config.yaml +++ b/examples/16_natural_gas/tech_config.yaml @@ -32,7 +32,7 @@ technologies: cost_year: 2024 battery: performance_model: - model: "simple_generic_storage" + model: "SimpleGenericStorage" cost_model: model: "ATBBatteryCostModel" control_strategy: diff --git a/examples/19_simple_dispatch/tech_config.yaml b/examples/19_simple_dispatch/tech_config.yaml index 030f34970..b9831da16 100644 --- a/examples/19_simple_dispatch/tech_config.yaml +++ b/examples/19_simple_dispatch/tech_config.yaml @@ -31,7 +31,7 @@ technologies: cost_year: 2019 battery: performance_model: - model: "simple_generic_storage" + model: "SimpleGenericStorage" cost_model: model: "ATBBatteryCostModel" control_strategy: diff --git a/examples/24_solar_battery_grid/tech_config.yaml b/examples/24_solar_battery_grid/tech_config.yaml index b5bf7dff8..414b8c5b1 100644 --- a/examples/24_solar_battery_grid/tech_config.yaml +++ b/examples/24_solar_battery_grid/tech_config.yaml @@ -32,7 +32,7 @@ technologies: cost_year: 2024 battery: performance_model: - model: "simple_generic_storage" + model: "SimpleGenericStorage" cost_model: model: "ATBBatteryCostModel" control_strategy: diff --git a/h2integrate/control/test/test_openloop_controllers.py b/h2integrate/control/test/test_openloop_controllers.py index 8c06259e1..4cf1052ad 100644 --- a/h2integrate/control/test/test_openloop_controllers.py +++ b/h2integrate/control/test/test_openloop_controllers.py @@ -259,7 +259,7 @@ def set_up_and_run_problem(config): def test_generic_storage_demand_controller(subtests): # Test is the same as the demand controller test test_demand_controller for the "h2_storage" - # performance model but with the "simple_generic_storage" performance model + # performance model but with the "SimpleGenericStorage" performance model # Get the directory of the current script current_dir = Path(__file__).parent @@ -273,7 +273,7 @@ def test_generic_storage_demand_controller(subtests): tech_config["technologies"]["h2_storage"] = { "performance_model": { - "model": "simple_generic_storage", + "model": "SimpleGenericStorage", }, "control_strategy": { "model": "demand_open_loop_storage_controller", @@ -345,7 +345,7 @@ def test_generic_storage_demand_controller(subtests): def test_demand_converter_controller(subtests): # Test is the same as the demand controller test test_demand_controller for the "h2_storage" - # performance model but with the "simple_generic_storage" performance model + # performance model but with the "SimpleGenericStorage" performance model # Get the directory of the current script current_dir = Path(__file__).parent diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 12f4e1e16..d24967759 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -239,8 +239,8 @@ "MCHTOLStorageCostModel": MCHTOLStorageCostModel, "PipeStorageCostModel": PipeStorageCostModel, "ATBBatteryCostModel": ATBBatteryCostModel, - "generic_storage_cost": GenericStorageCostModel, - "simple_generic_storage": SimpleGenericStorage, + "GenericStorageCostModel": GenericStorageCostModel, + "SimpleGenericStorage": SimpleGenericStorage, # Control "pass_through_controller": PassThroughOpenLoopController, "demand_open_loop_storage_controller": DemandOpenLoopStorageController, diff --git a/h2integrate/storage/battery/test/test_battery_cost.py b/h2integrate/storage/battery/test/test_battery_cost.py index c9f5704d9..ae791d95e 100644 --- a/h2integrate/storage/battery/test/test_battery_cost.py +++ b/h2integrate/storage/battery/test/test_battery_cost.py @@ -29,7 +29,7 @@ def electricity_profile_kW(): @fixture def battery_tech_config_kW(): battery_inputs = { - "performance_model": {"model": "simple_generic_storage"}, + "performance_model": {"model": "SimpleGenericStorage"}, "cost_model": {"model": "ATBBatteryCostModel"}, "control_strategy": {"model": "demand_open_loop_storage_controller"}, "model_inputs": { @@ -62,7 +62,7 @@ def battery_tech_config_kW(): @fixture def battery_tech_config_MW(): battery_inputs = { - "performance_model": {"model": "simple_generic_storage"}, + "performance_model": {"model": "SimpleGenericStorage"}, "cost_model": {"model": "ATBBatteryCostModel"}, "control_strategy": {"model": "demand_open_loop_storage_controller"}, "model_inputs": { From 8825d88ba68f38aebf1fd7678b8b8175db9c32c9 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:29:39 -0800 Subject: [PATCH 28/42] fix import --- h2integrate/storage/battery/test/test_battery_cost.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/h2integrate/storage/battery/test/test_battery_cost.py b/h2integrate/storage/battery/test/test_battery_cost.py index ae791d95e..356f83b10 100644 --- a/h2integrate/storage/battery/test/test_battery_cost.py +++ b/h2integrate/storage/battery/test/test_battery_cost.py @@ -2,7 +2,7 @@ import openmdao.api as om from pytest import fixture -from h2integrate.storage.battery.ATBBatteryCostModel import ATBBatteryCostModel +from h2integrate.storage.battery.atb_battery_cost import ATBBatteryCostModel from h2integrate.control.control_strategies.storage.demand_openloop_controller import ( DemandOpenLoopStorageController, ) From 67810938998e06b7da603750c8612964239717bf Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:40:41 -0800 Subject: [PATCH 29/42] update controller model references --- docs/control/control_overview.md | 10 ++++---- docs/control/open-loop_controllers.md | 18 +++++++------- docs/control/pyomo_controllers.md | 4 ++-- docs/user_guide/model_overview.md | 20 ++++++++-------- examples/01_onshore_steel_mn/tech_config.yaml | 4 ++-- examples/02_texas_ammonia/tech_config.yaml | 4 ++-- .../tech_config_co2h.yaml | 4 ++-- .../direct_ocean_capture/tech_config.yaml | 2 +- .../tech_config.yaml | 2 +- examples/12_ammonia_synloop/tech_config.yaml | 4 ++-- .../hydrogen_dispatch.ipynb | 8 +++---- .../inputs/tech_config.yaml | 2 +- examples/16_natural_gas/tech_config.yaml | 2 +- .../tech_config.yaml | 2 +- .../tech_config_error_for_testing.yaml | 2 +- examples/19_simple_dispatch/tech_config.yaml | 2 +- .../flexible_demand_tech_config.yaml | 2 +- .../23_solar_wind_ng_demand/tech_config.yaml | 2 +- .../24_solar_battery_grid/tech_config.yaml | 2 +- .../control_strategies/pyomo_controllers.py | 2 +- .../control/test/inputs/tech_config.yaml | 2 +- .../control/test/test_openloop_controllers.py | 24 +++++++++---------- .../control/test/test_pyomo_controllers.py | 2 +- h2integrate/core/supported_models.py | 10 ++++---- .../storage/battery/test/test_battery_cost.py | 4 ++-- 25 files changed, 70 insertions(+), 70 deletions(-) diff --git a/docs/control/control_overview.md b/docs/control/control_overview.md index 9af1d1c83..7d9da9550 100644 --- a/docs/control/control_overview.md +++ b/docs/control/control_overview.md @@ -7,10 +7,10 @@ There are two different systematic approaches, or frameworks, in H2Integrate for The first approach, [open-loop control](#open-loop-control), assumes no feedback of any kind to the controller. The open-loop framework does not require a detailed technology performance model and can essentially act as the performance model. The open-loop framework establishes a control component that runs the control and passes out information about `_unmet_demand`, `unused_`, `_out`, and `total__unmet_demand`. Supported controllers: -- [`pass_through_controller`](#pass-through-controller) -- [`demand_open_loop_storage_controller`](#demand-open-loop-storage-controller) -- [`demand_open_loop_converter_controller`](#demand-open-loop-converter-controller) -- [`flexible_demand_open_loop_converter_controller`](#flexible-demand-open-loop-converter-controller) +- [`PassThroughOpenLoopController`](#pass-through-controller) +- [`DemandOpenLoopStorageController`](#demand-open-loop-storage-controller) +- [`DemandOpenLoopConverterController`](#demand-open-loop-converter-controller) +- [`FlexibleDemandOpenLoopConverterController`](#flexible-demand-open-loop-converter-controller) (pyomo-control-framework)= @@ -20,4 +20,4 @@ The second systematic control approach, [pyomo control](#pyomo-control), allows In the pyomo control framework in H2Integrate, each technology can have control rules associated with them that are in turn passed to the pyomo control component, which is owned by the storage technology. The pyomo control component combines the technology rules into a single pyomo model, which is then passed to the storage technology performance model inside a callable dispatch function. The dispatch function also accepts a simulation method from the performance model and iterates between the pyomo model for dispatch commands and the performance simulation function to simulated performance with the specified commands. The dispatch function runs in specified time windows for dispatch and performance until the whole simulation time has been run. Supported controllers: -- [`heuristic_load_following_controller`](#heuristic-load-following-controller) +- [`HeuristicLoadFollowingController`](#heuristic-load-following-controller) diff --git a/docs/control/open-loop_controllers.md b/docs/control/open-loop_controllers.md index dbf1fb110..f8f6743b0 100644 --- a/docs/control/open-loop_controllers.md +++ b/docs/control/open-loop_controllers.md @@ -8,22 +8,22 @@ The open-loop storage controllers can be attached as the control strategy in the (pass-through-controller)= ### Pass-Through Controller -The `pass_through_controller` simply directly passes the input commodity flow to the output without any modifications. It is useful for testing, as a placeholder for more complex controllers, and for maintaining consistency between controlled and uncontrolled frameworks as this 'controller' does not alter the system output in any way. +The `PassThroughOpenLoopController` simply directly passes the input commodity flow to the output without any modifications. It is useful for testing, as a placeholder for more complex controllers, and for maintaining consistency between controlled and uncontrolled frameworks as this 'controller' does not alter the system output in any way. -For examples of how to use the `pass_through_controller` open-loop control framework, see the following: +For examples of how to use the `PassThroughOpenLoopController` open-loop control framework, see the following: - `examples/01_onshore_steel_mn` - `examples/02_texas_ammonia` - `examples/12_ammonia_synloop` (demand-open-loop-storage-controller)= ### Demand Open-Loop Storage Controller -The `demand_open_loop_storage_controller` uses simple logic to dispatch the storage technology when demand is higher than commodity generation and charges the storage technology when the commodity generation exceeds demand, both cases depending on the storage technology's state of charge. For the `demand_open_loop_storage_controller`, the storage state of charge is an estimate in the control logic and is not informed in any way by the storage technology performance model. +The `DemandOpenLoopStorageController` uses simple logic to dispatch the storage technology when demand is higher than commodity generation and charges the storage technology when the commodity generation exceeds demand, both cases depending on the storage technology's state of charge. For the `DemandOpenLoopStorageController`, the storage state of charge is an estimate in the control logic and is not informed in any way by the storage technology performance model. An example of an N2 diagram for a system using the open-loop control framework for hydrogen storage and dispatch is shown below ([click here for an interactive version](./figures/open-loop-n2.html)). Note that the hydrogen out going into the finance model is coming from the control component. ![](./figures/open-loop-n2.png) -For examples of how to use the `demand_open_loop_storage_controller` open-loop control framework, see the following: +For examples of how to use the `DemandOpenLoopStorageController` open-loop control framework, see the following: - `examples/14_wind_hydrogen_dispatch/` - `examples/19_simple_dispatch/` @@ -37,7 +37,7 @@ This page documents two core controller types: (demand-open-loop-converter-controller)= ### Demand Open-Loop Converter Controller -The `demand_open_loop_converter_controller` allocates commodity input to meet a defined demand profile. It does not contain energy storage logic, only **instantaneous** matching of supply and demand. +The `DemandOpenLoopConverterController` allocates commodity input to meet a defined demand profile. It does not contain energy storage logic, only **instantaneous** matching of supply and demand. The controller computes each value per timestep: - Unmet demand (non-zero when supply < demand, otherwise 0.) @@ -57,19 +57,19 @@ The controller is defined within the `tech_config` and requires these inputs. ```yaml control_strategy: - model: demand_open_loop_converter_controller + model: DemandOpenLoopConverterController model_inputs: control_parameters: commodity_name: hydrogen commodity_units: kg/h demand_profile: [10, 10, 12, 15, 14] ``` -For an example of how to use the `demand_open_loop_converter_controller` open-loop control framework, see the following: +For an example of how to use the `DemandOpenLoopConverterController` open-loop control framework, see the following: - `examples/23_solar_wind_ng_demand` (flexible-demand-open-loop-converter-controller)= ### Flexible Demand Open-Loop Converter Controller -The `flexible_demand_open_loop_converter_controller` extends the fixed-demand controller by allowing the actual demand to flex up or down within defined bounds. This is useful for demand-side management scenarios where: +The `FlexibleDemandOpenLoopConverterController` extends the fixed-demand controller by allowing the actual demand to flex up or down within defined bounds. This is useful for demand-side management scenarios where: - Processes can defer demand (e.g., flexible industrial loads) - The system requires demand elasticity without dynamic optimization @@ -81,7 +81,7 @@ The controller computes: Everything remains open-loop no storage, no intertemporal coupling. -For an example of how to use the `flexible_demand_open_loop_converter_controller` open-loop control framework, see the following: +For an example of how to use the `FlexibleDemandOpenLoopConverterController` open-loop control framework, see the following: - `examples/23_solar_wind_ng_demand` The flexible demand component takes an input commodity production profile, the maximum demand profile, and various constraints (listed below), and creates a "flexible demand profile" that follows the original input commodity production profile while satisfying varying constraint. diff --git a/docs/control/pyomo_controllers.md b/docs/control/pyomo_controllers.md index e0766b5d2..361278d1d 100644 --- a/docs/control/pyomo_controllers.md +++ b/docs/control/pyomo_controllers.md @@ -10,7 +10,7 @@ An example of an N2 diagram for a system using the pyomo control framework for h (heuristic-load-following-controller)= ## Heuristic Load Following Controller -The pyomo control framework currently supports only a simple heuristic method, `heuristic_load_following_controller`, but we plan to extend the framework to be able to run a full dispatch optimization using a pyomo solver. When using the pyomo framework, a `dispatch_rule_set` for each technology connected to the storage technology must also be specified. These will typically be `pyomo_dispatch_generic_converter` for generating technologies, and `pyomo_dispatch_generic_storage` for storage technologies. More complex rule sets may be developed as needed. +The pyomo control framework currently supports only a simple heuristic method, `HeuristicLoadFollowingController`, but we plan to extend the framework to be able to run a full dispatch optimization using a pyomo solver. When using the pyomo framework, a `dispatch_rule_set` for each technology connected to the storage technology must also be specified. These will typically be `pyomo_dispatch_generic_converter` for generating technologies, and `pyomo_dispatch_generic_storage` for storage technologies. More complex rule sets may be developed as needed. -For an example of how to use the pyomo control framework with the `heuristic_load_following_controller`, see +For an example of how to use the pyomo control framework with the `HeuristicLoadFollowingController`, see - `examples/18_pyomo_heuristic_wind_battery_dispatch` diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index a98c00312..99a2d2dfc 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -91,11 +91,11 @@ Connection: `[source_tech, dest_tech, transport_commodity, transport_technology] | Controller | Control Method | | :----------------------------- | :---------------: | -| `pass_through_controller` | open-loop control. directly passes the input resource flow to the output without any modifications | -| `demand_open_loop_storage_controller` | open-loop control. manages resource flow based on demand and storage constraints | -| `demand_open_loop_converter_controller` | open-loop control. manages resource flow based on demand constraints | -| `flexible_demand_open_loop_converter_controller` | open-loop control. manages resource flow based on demand and flexibility constraints | -| `heuristic_load_following_controller` | open-loop control that works on a time window basis to set dispatch commands. Uses pyomo | +| `PassThroughOpenLoopController` | open-loop control. directly passes the input resource flow to the output without any modifications | +| `DemandOpenLoopStorageController` | open-loop control. manages resource flow based on demand and storage constraints | +| `DemandOpenLoopConverterController` | open-loop control. manages resource flow based on demand constraints | +| `FlexibleDemandOpenLoopConverterController` | open-loop control. manages resource flow based on demand and flexibility constraints | +| `HeuristicLoadFollowingController` | open-loop control that works on a time window basis to set dispatch commands. Uses pyomo | # Technology Models Overview @@ -285,10 +285,10 @@ Below summarizes the available performance, cost, and financial models for each (control-models)= ## Control Models -- `'pass_through_controller'` +- `'PassThroughOpenLoopController'` - Storage Controllers: - - `'demand_open_loop_storage_controller'` - - `'heuristic_load_following_controller'` + - `'DemandOpenLoopStorageController'` + - `'HeuristicLoadFollowingController'` - Converter Controllers: - - `'demand_open_loop_converter_controller` - - `'flexible_demand_open_loop_converter_controller'` + - `'DemandOpenLoopConverterController` + - `'FlexibleDemandOpenLoopConverterController'` diff --git a/examples/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index aba965305..98bd52350 100644 --- a/examples/01_onshore_steel_mn/tech_config.yaml +++ b/examples/01_onshore_steel_mn/tech_config.yaml @@ -74,7 +74,7 @@ technologies: dispatch_rule_set: model: "pyomo_dispatch_generic_storage" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: model: "PySAMBatteryPerformanceModel" cost_model: @@ -132,7 +132,7 @@ technologies: performance_model: model: "StorageAutoSizingModel" control_strategy: - model: "pass_through_controller" + model: "PassThroughOpenLoopController" cost_model: model: "LinedRockCavernStorageCostModel" model_inputs: diff --git a/examples/02_texas_ammonia/tech_config.yaml b/examples/02_texas_ammonia/tech_config.yaml index 8e2c19379..5586b61bc 100644 --- a/examples/02_texas_ammonia/tech_config.yaml +++ b/examples/02_texas_ammonia/tech_config.yaml @@ -72,7 +72,7 @@ technologies: dispatch_rule_set: model: "pyomo_dispatch_generic_storage" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: model: "PySAMBatteryPerformanceModel" cost_model: @@ -130,7 +130,7 @@ technologies: performance_model: model: "StorageAutoSizingModel" control_strategy: - model: "pass_through_controller" + model: "PassThroughOpenLoopController" cost_model: model: "SaltCavernStorageCostModel" model_inputs: diff --git a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml index 02f409c9f..336f1db53 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml @@ -79,7 +79,7 @@ technologies: cost_model: model: "GenericStorageCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "hydrogen" @@ -132,7 +132,7 @@ technologies: cost_model: model: "GenericStorageCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "co2" diff --git a/examples/09_co2/direct_ocean_capture/tech_config.yaml b/examples/09_co2/direct_ocean_capture/tech_config.yaml index 3baec2d7b..15e90fe75 100644 --- a/examples/09_co2/direct_ocean_capture/tech_config.yaml +++ b/examples/09_co2/direct_ocean_capture/tech_config.yaml @@ -65,7 +65,7 @@ technologies: dispatch_rule_set: model: "pyomo_dispatch_generic_storage" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: model: "PySAMBatteryPerformanceModel" cost_model: diff --git a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml index 5bc3e149f..954f84350 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml @@ -42,7 +42,7 @@ technologies: dispatch_rule_set: model: "pyomo_dispatch_generic_storage" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: model: "PySAMBatteryPerformanceModel" cost_model: diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index e63fec907..840738536 100644 --- a/examples/12_ammonia_synloop/tech_config.yaml +++ b/examples/12_ammonia_synloop/tech_config.yaml @@ -72,7 +72,7 @@ technologies: dispatch_rule_set: model: "pyomo_dispatch_generic_storage" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: model: "PySAMBatteryPerformanceModel" cost_model: @@ -130,7 +130,7 @@ technologies: performance_model: model: "StorageAutoSizingModel" control_strategy: - model: "pass_through_controller" + model: "PassThroughOpenLoopController" cost_model: model: "SaltCavernStorageCostModel" model_inputs: diff --git a/examples/14_wind_hydrogen_dispatch/hydrogen_dispatch.ipynb b/examples/14_wind_hydrogen_dispatch/hydrogen_dispatch.ipynb index b898acd26..621937872 100644 --- a/examples/14_wind_hydrogen_dispatch/hydrogen_dispatch.ipynb +++ b/examples/14_wind_hydrogen_dispatch/hydrogen_dispatch.ipynb @@ -19,7 +19,7 @@ "technologies:\n", " h2_storage:\n", " control_strategy:\n", - " method: \"demand_open_loop_storage_controller\"\n", + " method: \"DemandOpenLoopStorageController\"\n", " control_parameters:\n", " commodity_units: \"kg/h\"\n", " max_capacity: 60000.0 # kg\n", @@ -107,7 +107,7 @@ " hydrogen_in |791848.83895374| kg/h h2_storage.hydrogen_in \n", " rated_h2_production_kg_pr_hr [0.] kg/h h2_storage.rated_h2_production_kg_pr_hr \n", " efficiency [0.77728804] None h2_storage.efficiency \n", - " demand_open_loop_storage_controller\n", + " DemandOpenLoopStorageController\n", " hydrogen_in |791848.83895374| kg/h h2_storage.hydrogen_in \n", " hydrogen_demand |467974.3582719| kg/h**2 h2_storage.hydrogen_demand \n", " finance_subgroup_default\n", @@ -134,7 +134,7 @@ " electrolyzer_to_h2_storage_pipe\n", " hydrogen_in |221.02084143| kg/s electrolyzer_to_h2_storage_pipe.hydrogen_in 1.95511557 \n", " h2_storage\n", - " demand_open_loop_storage_controller\n", + " DemandOpenLoopStorageController\n", " hydrogen_in |795675.02916366| kg/h h2_storage.hydrogen_in 7038.41603938 \n", " hydrogen_demand_profile |467974.3582719| kg/h h2_storage.hydrogen_demand_profile 5000.0 \n", " h2_storage\n", @@ -232,7 +232,7 @@ " electrolyzer_to_h2_storage_pipe\n", " hydrogen_out |221.02084143| kg/s electrolyzer_to_h2_storage_pipe.hydrogen_out 1.95511557 \n", " h2_storage\n", - " demand_open_loop_storage_controller\n", + " DemandOpenLoopStorageController\n", " hydrogen_out |440363.12307143| kg/h h2_storage.hydrogen_out 4507.31530924 \n", " hydrogen_soc |74.44964199| unitless h2_storage.hydrogen_soc 0.71454542 \n", " hydrogen_unused_commodity |381367.37795319| kg/h h2_storage.hydrogen_unused_commodity 2531.22977391 \n", diff --git a/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml index a694fe3c8..28f0cfe81 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml @@ -57,7 +57,7 @@ technologies: cost_model: model: "LinedRockCavernStorageCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "hydrogen" diff --git a/examples/16_natural_gas/tech_config.yaml b/examples/16_natural_gas/tech_config.yaml index c5e1ccb69..0afbf55cb 100644 --- a/examples/16_natural_gas/tech_config.yaml +++ b/examples/16_natural_gas/tech_config.yaml @@ -36,7 +36,7 @@ technologies: cost_model: model: "ATBBatteryCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml index daee3998d..db722fd11 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml @@ -38,7 +38,7 @@ technologies: dispatch_rule_set: model: "pyomo_dispatch_generic_storage" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: model: "PySAMBatteryPerformanceModel" cost_model: diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml index e42eac75e..654b47e13 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml @@ -41,7 +41,7 @@ technologies: dispatch_rule_set: model: "pyomo_dispatch_generic_storage" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: model: "PySAMBatteryPerformanceModel" cost_model: diff --git a/examples/19_simple_dispatch/tech_config.yaml b/examples/19_simple_dispatch/tech_config.yaml index b9831da16..c015ab638 100644 --- a/examples/19_simple_dispatch/tech_config.yaml +++ b/examples/19_simple_dispatch/tech_config.yaml @@ -35,7 +35,7 @@ technologies: cost_model: model: "ATBBatteryCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml index 1a5b60d02..0bd2a9645 100644 --- a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml @@ -96,7 +96,7 @@ technologies: electrical_load_demand: control_strategy: - model: flexible_demand_open_loop_converter_controller + model: FlexibleDemandOpenLoopConverterController model_inputs: control_parameters: commodity_name: electricity diff --git a/examples/23_solar_wind_ng_demand/tech_config.yaml b/examples/23_solar_wind_ng_demand/tech_config.yaml index 2aef046e3..fb7c400bb 100644 --- a/examples/23_solar_wind_ng_demand/tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/tech_config.yaml @@ -96,7 +96,7 @@ technologies: electrical_load_demand: control_strategy: - model: demand_open_loop_converter_controller + model: DemandOpenLoopConverterController model_inputs: control_parameters: commodity_name: electricity diff --git a/examples/24_solar_battery_grid/tech_config.yaml b/examples/24_solar_battery_grid/tech_config.yaml index 414b8c5b1..13638dd82 100644 --- a/examples/24_solar_battery_grid/tech_config.yaml +++ b/examples/24_solar_battery_grid/tech_config.yaml @@ -36,7 +36,7 @@ technologies: cost_model: model: "ATBBatteryCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/h2integrate/control/control_strategies/pyomo_controllers.py b/h2integrate/control/control_strategies/pyomo_controllers.py index d89869a1f..62ada9ee1 100644 --- a/h2integrate/control/control_strategies/pyomo_controllers.py +++ b/h2integrate/control/control_strategies/pyomo_controllers.py @@ -247,7 +247,7 @@ def pyomo_dispatch_solver( ] demand_in = inputs[f"{commodity_name}_demand"][t : t + self.config.n_control_window] - if "heuristic" in control_strategy: + if control_strategy == "HeuristicLoadFollowingController": # determine dispatch commands for the current control window # using the heuristic method self.set_fixed_dispatch( diff --git a/h2integrate/control/test/inputs/tech_config.yaml b/h2integrate/control/test/inputs/tech_config.yaml index a263acb91..2ca027670 100644 --- a/h2integrate/control/test/inputs/tech_config.yaml +++ b/h2integrate/control/test/inputs/tech_config.yaml @@ -4,7 +4,7 @@ description: "This hybrid plant produces hydrogen" technologies: h2_storage: control_strategy: - model: "pass_through_controller" + model: "PassThroughOpenLoopController" performance_model: model: "StorageAutoSizingModel" cost_model: diff --git a/h2integrate/control/test/test_openloop_controllers.py b/h2integrate/control/test/test_openloop_controllers.py index 4cf1052ad..bd0f0b224 100644 --- a/h2integrate/control/test/test_openloop_controllers.py +++ b/h2integrate/control/test/test_openloop_controllers.py @@ -59,7 +59,7 @@ def test_pass_through_controller(subtests): ) prob.model.add_subsystem( - "pass_through_controller", + "PassThroughOpenLoopController", PassThroughOpenLoopController( plant_config={}, tech_config=tech_config["technologies"]["h2_storage"] ), @@ -107,7 +107,7 @@ def test_storage_demand_controller(subtests): plant_config = {"plant": {"simulation": {"n_timesteps": 10}}} tech_config["technologies"]["h2_storage"]["control_strategy"]["model"] = ( - "demand_open_loop_storage_controller" + "DemandOpenLoopStorageController" ) tech_config["technologies"]["h2_storage"]["model_inputs"]["control_parameters"] = { @@ -135,7 +135,7 @@ def test_storage_demand_controller(subtests): ) prob.model.add_subsystem( - "demand_open_loop_storage_controller", + "DemandOpenLoopStorageController", DemandOpenLoopStorageController( plant_config=plant_config, tech_config=tech_config["technologies"]["h2_storage"] ), @@ -182,7 +182,7 @@ def test_storage_demand_controller_round_trip_efficiency(subtests): plant_config = {"plant": {"simulation": {"n_timesteps": 10}}} tech_config["technologies"]["h2_storage"]["control_strategy"]["model"] = ( - "demand_open_loop_storage_controller" + "DemandOpenLoopStorageController" ) tech_config["technologies"]["h2_storage"]["model_inputs"]["control_parameters"] = { "max_capacity": 10.0, # kg @@ -276,7 +276,7 @@ def test_generic_storage_demand_controller(subtests): "model": "SimpleGenericStorage", }, "control_strategy": { - "model": "demand_open_loop_storage_controller", + "model": "DemandOpenLoopStorageController", }, "model_inputs": { "shared_parameters": { @@ -310,7 +310,7 @@ def test_generic_storage_demand_controller(subtests): ) prob.model.add_subsystem( - "demand_open_loop_storage_controller", + "DemandOpenLoopStorageController", DemandOpenLoopStorageController( plant_config=plant_config, tech_config=tech_config["technologies"]["h2_storage"] ), @@ -359,7 +359,7 @@ def test_demand_converter_controller(subtests): tech_config["technologies"]["load"] = { "control_strategy": { - "model": "demand_open_loop_converter_controller", + "model": "DemandOpenLoopConverterController", }, "model_inputs": { "control_parameters": { @@ -382,7 +382,7 @@ def test_demand_converter_controller(subtests): ) prob.model.add_subsystem( - "demand_open_loop_storage_controller", + "DemandOpenLoopStorageController", DemandOpenLoopConverterController( plant_config=plant_config, tech_config=tech_config["technologies"]["load"] ), @@ -430,7 +430,7 @@ def test_flexible_demand_converter_controller(subtests, variable_h2_production_p min_demand_kg = 2.5 tech_config["technologies"]["load"] = { "control_strategy": { - "model": "flexible_demand_open_loop_converter_controller", + "model": "FlexibleDemandOpenLoopConverterController", }, "model_inputs": { "control_parameters": { @@ -463,7 +463,7 @@ def test_flexible_demand_converter_controller(subtests, variable_h2_production_p ) prob.model.add_subsystem( - "demand_open_loop_storage_controller", + "DemandOpenLoopStorageController", FlexibleDemandOpenLoopConverterController( plant_config=plant_config, tech_config=tech_config["technologies"]["load"] ), @@ -540,7 +540,7 @@ def test_flexible_demand_converter_controller_min_utilization( min_demand_kg = 2.5 tech_config["technologies"]["load"] = { "control_strategy": { - "model": "flexible_demand_open_loop_converter_controller", + "model": "FlexibleDemandOpenLoopConverterController", }, "model_inputs": { "control_parameters": { @@ -573,7 +573,7 @@ def test_flexible_demand_converter_controller_min_utilization( ) prob.model.add_subsystem( - "demand_open_loop_storage_controller", + "DemandOpenLoopStorageController", FlexibleDemandOpenLoopConverterController( plant_config=plant_config, tech_config=tech_config["technologies"]["load"] ), diff --git a/h2integrate/control/test/test_pyomo_controllers.py b/h2integrate/control/test/test_pyomo_controllers.py index de26dba2c..3907e9c92 100644 --- a/h2integrate/control/test/test_pyomo_controllers.py +++ b/h2integrate/control/test/test_pyomo_controllers.py @@ -35,7 +35,7 @@ "technologies": { "battery": { "dispatch_rule_set": {"model": "pyomo_dispatch_generic_storage"}, - "control_strategy": {"model": "heuristic_load_following_controller"}, + "control_strategy": {"model": "HeuristicLoadFollowingController"}, "performance_model": {"model": "PySAMBatteryPerformanceModel"}, "model_inputs": { "shared_parameters": { diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index d24967759..c2961b8f9 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -242,11 +242,11 @@ "GenericStorageCostModel": GenericStorageCostModel, "SimpleGenericStorage": SimpleGenericStorage, # Control - "pass_through_controller": PassThroughOpenLoopController, - "demand_open_loop_storage_controller": DemandOpenLoopStorageController, - "heuristic_load_following_controller": HeuristicLoadFollowingController, - "demand_open_loop_converter_controller": DemandOpenLoopConverterController, - "flexible_demand_open_loop_converter_controller": FlexibleDemandOpenLoopConverterController, + "PassThroughOpenLoopController": PassThroughOpenLoopController, + "DemandOpenLoopStorageController": DemandOpenLoopStorageController, + "HeuristicLoadFollowingController": HeuristicLoadFollowingController, + "DemandOpenLoopConverterController": DemandOpenLoopConverterController, + "FlexibleDemandOpenLoopConverterController": FlexibleDemandOpenLoopConverterController, # Dispatch "pyomo_dispatch_generic_converter": PyomoDispatchGenericConverter, "pyomo_dispatch_generic_storage": PyomoRuleStorageBaseclass, diff --git a/h2integrate/storage/battery/test/test_battery_cost.py b/h2integrate/storage/battery/test/test_battery_cost.py index 356f83b10..541c79d4f 100644 --- a/h2integrate/storage/battery/test/test_battery_cost.py +++ b/h2integrate/storage/battery/test/test_battery_cost.py @@ -31,7 +31,7 @@ def battery_tech_config_kW(): battery_inputs = { "performance_model": {"model": "SimpleGenericStorage"}, "cost_model": {"model": "ATBBatteryCostModel"}, - "control_strategy": {"model": "demand_open_loop_storage_controller"}, + "control_strategy": {"model": "DemandOpenLoopStorageController"}, "model_inputs": { "shared_parameters": { "commodity_name": "electricity", @@ -64,7 +64,7 @@ def battery_tech_config_MW(): battery_inputs = { "performance_model": {"model": "SimpleGenericStorage"}, "cost_model": {"model": "ATBBatteryCostModel"}, - "control_strategy": {"model": "demand_open_loop_storage_controller"}, + "control_strategy": {"model": "DemandOpenLoopStorageController"}, "model_inputs": { "shared_parameters": { "commodity_name": "electricity", From 9725983fcc3ed781a234724274ac15ca938ba5b0 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 15:41:32 -0800 Subject: [PATCH 30/42] convert dispatch model names --- docs/control/pyomo_controllers.md | 2 +- examples/01_onshore_steel_mn/tech_config.yaml | 4 ++-- examples/02_texas_ammonia/tech_config.yaml | 4 ++-- examples/09_co2/direct_ocean_capture/tech_config.yaml | 6 +++--- .../09_co2/ocean_alkalinity_enhancement/tech_config.yaml | 4 ++-- examples/12_ammonia_synloop/tech_config.yaml | 4 ++-- examples/18_pyomo_heuristic_dispatch/tech_config.yaml | 4 ++-- .../tech_config_error_for_testing.yaml | 4 ++-- h2integrate/control/test/test_pyomo_controllers.py | 4 ++-- h2integrate/core/supported_models.py | 4 ++-- .../storage/battery/test_battery/inputs/tech_config.yaml | 2 +- 11 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/control/pyomo_controllers.md b/docs/control/pyomo_controllers.md index 361278d1d..18de1d99d 100644 --- a/docs/control/pyomo_controllers.md +++ b/docs/control/pyomo_controllers.md @@ -10,7 +10,7 @@ An example of an N2 diagram for a system using the pyomo control framework for h (heuristic-load-following-controller)= ## Heuristic Load Following Controller -The pyomo control framework currently supports only a simple heuristic method, `HeuristicLoadFollowingController`, but we plan to extend the framework to be able to run a full dispatch optimization using a pyomo solver. When using the pyomo framework, a `dispatch_rule_set` for each technology connected to the storage technology must also be specified. These will typically be `pyomo_dispatch_generic_converter` for generating technologies, and `pyomo_dispatch_generic_storage` for storage technologies. More complex rule sets may be developed as needed. +The pyomo control framework currently supports only a simple heuristic method, `HeuristicLoadFollowingController`, but we plan to extend the framework to be able to run a full dispatch optimization using a pyomo solver. When using the pyomo framework, a `dispatch_rule_set` for each technology connected to the storage technology must also be specified. These will typically be `PyomoDispatchGenericConverter` for generating technologies, and `PyomoRuleStorageBaseclass` for storage technologies. More complex rule sets may be developed as needed. For an example of how to use the pyomo control framework with the `HeuristicLoadFollowingController`, see - `examples/18_pyomo_heuristic_wind_battery_dispatch` diff --git a/examples/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index 98bd52350..bc30bf129 100644 --- a/examples/01_onshore_steel_mn/tech_config.yaml +++ b/examples/01_onshore_steel_mn/tech_config.yaml @@ -61,7 +61,7 @@ technologies: performance_model: model: "combiner_performance" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: commodity: "electricity" @@ -72,7 +72,7 @@ technologies: battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: model: "HeuristicLoadFollowingController" performance_model: diff --git a/examples/02_texas_ammonia/tech_config.yaml b/examples/02_texas_ammonia/tech_config.yaml index 5586b61bc..6c314820e 100644 --- a/examples/02_texas_ammonia/tech_config.yaml +++ b/examples/02_texas_ammonia/tech_config.yaml @@ -60,7 +60,7 @@ technologies: performance_model: model: "combiner_performance" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: commodity: "electricity" @@ -70,7 +70,7 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: model: "HeuristicLoadFollowingController" performance_model: diff --git a/examples/09_co2/direct_ocean_capture/tech_config.yaml b/examples/09_co2/direct_ocean_capture/tech_config.yaml index 15e90fe75..9ed4949c8 100644 --- a/examples/09_co2/direct_ocean_capture/tech_config.yaml +++ b/examples/09_co2/direct_ocean_capture/tech_config.yaml @@ -8,7 +8,7 @@ technologies: cost_model: model: "HOPPComponent" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: shared_parameters: cost_year: 2022 @@ -53,7 +53,7 @@ technologies: performance_model: model: "combiner_performance" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: commodity: "electricity" @@ -63,7 +63,7 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: model: "HeuristicLoadFollowingController" performance_model: diff --git a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml index 954f84350..7670f0f98 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml @@ -8,7 +8,7 @@ technologies: cost_model: model: "ATBWindPlantCostModel" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: num_turbines: 22 #number of turbines in the farm @@ -40,7 +40,7 @@ technologies: battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: model: "HeuristicLoadFollowingController" performance_model: diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index 840738536..0ff5c2971 100644 --- a/examples/12_ammonia_synloop/tech_config.yaml +++ b/examples/12_ammonia_synloop/tech_config.yaml @@ -60,7 +60,7 @@ technologies: performance_model: model: "combiner_performance" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: commodity: "electricity" @@ -70,7 +70,7 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: model: "HeuristicLoadFollowingController" performance_model: diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml index db722fd11..70f5029ae 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml @@ -8,7 +8,7 @@ technologies: cost_model: model: "ATBWindPlantCostModel" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: num_turbines: 100 @@ -36,7 +36,7 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: model: "HeuristicLoadFollowingController" performance_model: diff --git a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml index 654b47e13..634bd1e7a 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config_error_for_testing.yaml @@ -8,7 +8,7 @@ technologies: cost_model: model: "ATBWindPlantCostModel" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" resource: type: "pysam_wind" wind_speed: 9. @@ -39,7 +39,7 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: model: "HeuristicLoadFollowingController" performance_model: diff --git a/h2integrate/control/test/test_pyomo_controllers.py b/h2integrate/control/test/test_pyomo_controllers.py index 3907e9c92..bb8a774a7 100644 --- a/h2integrate/control/test/test_pyomo_controllers.py +++ b/h2integrate/control/test/test_pyomo_controllers.py @@ -34,7 +34,7 @@ "description": "...", "technologies": { "battery": { - "dispatch_rule_set": {"model": "pyomo_dispatch_generic_storage"}, + "dispatch_rule_set": {"model": "PyomoRuleStorageBaseclass"}, "control_strategy": {"model": "HeuristicLoadFollowingController"}, "performance_model": {"model": "PySAMBatteryPerformanceModel"}, "model_inputs": { @@ -84,7 +84,7 @@ def test_heuristic_load_following_battery_dispatch(subtests): prob = om.Problem() prob.model.add_subsystem( - "pyomo_dispatch_generic_storage", + "PyomoRuleStorageBaseclass", PyomoRuleStorageBaseclass( plant_config=plant_config, tech_config=tech_config["technologies"]["battery"] ), diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index c2961b8f9..a18a6c9dc 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -248,8 +248,8 @@ "DemandOpenLoopConverterController": DemandOpenLoopConverterController, "FlexibleDemandOpenLoopConverterController": FlexibleDemandOpenLoopConverterController, # Dispatch - "pyomo_dispatch_generic_converter": PyomoDispatchGenericConverter, - "pyomo_dispatch_generic_storage": PyomoRuleStorageBaseclass, + "PyomoDispatchGenericConverter": PyomoDispatchGenericConverter, + "PyomoRuleStorageBaseclass": PyomoRuleStorageBaseclass, # Feedstock "feedstock_performance": FeedstockPerformanceModel, "feedstock_cost": FeedstockCostModel, diff --git a/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml b/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml index 54fc578a1..5778097d0 100644 --- a/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml +++ b/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml @@ -4,7 +4,7 @@ description: "This hybrid plant stores and discharges electricity" technologies: battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" performance_model: model: "PySAMBatteryPerformanceModel" cost_model: From 23f3336a435e26b15aff77506bd1e0708425ab44 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 16:31:00 -0800 Subject: [PATCH 31/42] convert grid model names --- docs/technology_models/grid.md | 6 +++--- docs/user_guide/model_overview.md | 4 ++-- examples/24_solar_battery_grid/tech_config.yaml | 8 ++++---- h2integrate/core/supported_models.py | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/technology_models/grid.md b/docs/technology_models/grid.md index 16dff45fd..befb8e3f8 100644 --- a/docs/technology_models/grid.md +++ b/docs/technology_models/grid.md @@ -1,13 +1,13 @@ # Grid Performance and Cost Models -This page documents the unified `grid_performance` and `grid_cost` models, which together represent a flexible, configurable grid interconnection point within an H2I simulation. +This page documents the unified `GridPerformanceModel` and `GridCostModel` models, which together represent a flexible, configurable grid interconnection point within an H2I simulation. These components support both power flows and cost accounting for buying and selling electricity through a constrained interconnection. This is a single model that can be configured to either sell electricity to the grid, buy electricity from the grid, or both. See `example/24_solar_battery_grid` to see how to set up both buying and selling grid components. ## Grid Performance -`grid_performance` represents a grid interconnection point that can buy or sell electricity subject to a maximum throughput rating (interconnection_size). +`GridPerformanceModel` represents a grid interconnection point that can buy or sell electricity subject to a maximum throughput rating (interconnection_size). It supports: - Buying electricity from the grid to meet downstream demand. @@ -35,7 +35,7 @@ Multiple grid instances may be used within the same plant to represent different | `electricity_excess` | array[n_timesteps] | kW | Electricity that could not be sold due to limits. | ## Grid Cost -`grid_cost` computes all costs and revenues associated with the grid interconnection, including: +`GridCostModel` computes all costs and revenues associated with the grid interconnection, including: - Capital cost based on interconnection rating. - Fixed annual O&M. - Variable cost of electricity purchased. diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 99a2d2dfc..8c4ff04f1 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -224,9 +224,9 @@ Below summarizes the available performance, cost, and financial models for each + `'NaturalGasCostModel'` - `grid`: electricity grid connection - performance models: - + `'grid_performance'` + + `'GridPerformanceModel'` - cost models: - + `'grid_cost'` + + `'GridCostModel'` - `iron_ore`: iron ore mining and refining - performance models: + `'MartinIronMinePerformanceComponent'` diff --git a/examples/24_solar_battery_grid/tech_config.yaml b/examples/24_solar_battery_grid/tech_config.yaml index 13638dd82..d815a109e 100644 --- a/examples/24_solar_battery_grid/tech_config.yaml +++ b/examples/24_solar_battery_grid/tech_config.yaml @@ -58,9 +58,9 @@ technologies: opex_fraction: 0.05 # percent of capex grid_buy: performance_model: - model: "grid_performance" + model: "GridPerformanceModel" cost_model: - model: "grid_cost" + model: "GridCostModel" model_inputs: shared_parameters: interconnection_size: 1.e6 # kW @@ -72,9 +72,9 @@ technologies: fixed_interconnection_cost: 0.0 # $ one-time fixed cost grid_sell: performance_model: - model: "grid_performance" + model: "GridPerformanceModel" cost_model: - model: "grid_cost" + model: "GridCostModel" model_inputs: shared_parameters: interconnection_size: 1.e6 # kW diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index a18a6c9dc..7fe655344 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -254,8 +254,8 @@ "feedstock_performance": FeedstockPerformanceModel, "feedstock_cost": FeedstockCostModel, # Grid - "grid_performance": GridPerformanceModel, - "grid_cost": GridCostModel, + "GridPerformanceModel": GridPerformanceModel, + "GridCostModel": GridCostModel, # Finance "ProFastComp": ProFastLCO, "ProFastNPV": ProFastNPV, From f3b0312e122081cd701df8e05b7bab25a89160d9 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Thu, 22 Jan 2026 16:37:43 -0800 Subject: [PATCH 32/42] replace ProFastComp naming --- docs/finance_models/ProFastBase.md | 6 +++--- docs/finance_models/ProFastComp.md | 10 +++++----- docs/finance_models/finance_index.md | 2 +- docs/user_guide/how_to_set_up_an_analysis.ipynb | 2 +- docs/user_guide/specifying_finance_parameters.md | 10 +++++----- examples/01_onshore_steel_mn/plant_config.yaml | 2 +- examples/02_texas_ammonia/plant_config.yaml | 2 +- .../co2_hydrogenation/plant_config_co2h.yaml | 2 +- .../co2_hydrogenation_doc/plant_config_co2h.yaml | 2 +- examples/03_methanol/smr/plant_config_smr.yaml | 2 +- examples/04_geo_h2/plant_config_natural.yaml | 2 +- examples/04_geo_h2/plant_config_stimulated.yaml | 2 +- examples/05_wind_h2_opt/plant_config.yaml | 2 +- examples/07_run_of_river_plant/plant_config.yaml | 2 +- examples/08_wind_electrolyzer/plant_config.yaml | 2 +- .../09_co2/direct_ocean_capture/plant_config.yaml | 2 +- .../ocean_alkalinity_enhancement/plant_config.yaml | 2 +- .../plant_config_financials.yaml | 2 +- examples/10_electrolyzer_om/plant_config.yaml | 4 ++-- examples/11_hybrid_energy_plant/plant_config.yaml | 2 +- examples/12_ammonia_synloop/plant_config.yaml | 2 +- .../inputs/plant_config.yaml | 2 +- .../15_wind_solar_electrolyzer/plant_config.yaml | 2 +- examples/16_natural_gas/plant_config.yaml | 2 +- examples/17_splitter_wind_doc_h2/plant_config.yaml | 2 +- .../18_pyomo_heuristic_dispatch/plant_config.yaml | 2 +- examples/19_simple_dispatch/plant_config.yaml | 2 +- examples/20_solar_electrolyzer_doe/plant_config.yaml | 4 ++-- examples/21_iron_mn_to_il/plant_config.yaml | 2 +- examples/21_iron_mn_to_il/plant_config_old.yaml | 2 +- examples/22_site_doe/plant_config.yaml | 4 ++-- examples/23_solar_wind_ng_demand/plant_config.yaml | 2 +- examples/24_solar_battery_grid/plant_config.yaml | 2 +- examples/25_sizing_modes/plant_config.yaml | 2 +- examples/26_floris/plant_config.yaml | 2 +- h2integrate/core/h2integrate_model.py | 2 +- h2integrate/core/supported_models.py | 2 +- h2integrate/finances/profast_base.py | 2 +- h2integrate/finances/profast_lco.py | 2 +- h2integrate/finances/test/test_finances.py | 12 ++++++------ 40 files changed, 58 insertions(+), 58 deletions(-) diff --git a/docs/finance_models/ProFastBase.md b/docs/finance_models/ProFastBase.md index 42fa8563f..baa212e77 100644 --- a/docs/finance_models/ProFastBase.md +++ b/docs/finance_models/ProFastBase.md @@ -3,7 +3,7 @@ The Production Financial Analysis Scenario Tool or (ProFAST)[https://www.nrel.gov/hydrogen/profast-access] is a financial modeling tool developed at the NREL based on General Accepted Accounting Principles (GAAP) methodology. The model provides a quick and convenient way to conduct in-depth financial analysis for production system and services. Currently there are two ProFAST models that can be used: -- [``ProFastComp``](profastcomp:profastcompmodel): A price-taker model that calculates levelized cost of commodity (or breakeven price) using [ProFAST](https://github.com/NREL/ProFAST). +- [``ProFastLCO``](profastcomp:profastcompmodel): A price-taker model that calculates levelized cost of commodity (or breakeven price) using [ProFAST](https://github.com/NREL/ProFAST). - [``ProFastNPV``](profastnpv:profastnpvmodel): A price-setter model that calculates the net present value of a commodity using [ProFAST](https://github.com/NREL/ProFAST). (profast:overview)= @@ -22,7 +22,7 @@ Below is an example inputting financial parameters directly in the `finance_para ```yaml finance_parameters: - finance_model: "ProFastComp" #finance model + finance_model: "ProFastLCO" #finance model model_inputs: #inputs for finance_model params: #Financing parameters analysis_start_year: 2032 #year that financial analysis starts @@ -77,7 +77,7 @@ Below is an example of the `finance_parameters` section of `plant_config` if usi ```yaml finance_parameters: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: !include "profast_params.yaml" #Finance information capital_items: #default parameters for capital items unless specified in tech_config diff --git a/docs/finance_models/ProFastComp.md b/docs/finance_models/ProFastComp.md index 1c78d035c..6403505d3 100644 --- a/docs/finance_models/ProFastComp.md +++ b/docs/finance_models/ProFastComp.md @@ -1,14 +1,14 @@ (profastcomp:profastcompmodel)= # ProFastComp -The `ProFastComp` finance model calculates levelized cost of a commodity using [ProFAST](https://github.com/NREL/ProFAST). +The `ProFastLCO` finance model calculates levelized cost of a commodity using [ProFAST](https://github.com/NREL/ProFAST). -The inputs, outputs, and naming convention for the `ProFastComp` model are outlined in this doc page. +The inputs, outputs, and naming convention for the `ProFastLCO` model are outlined in this doc page. (profastcomp:overview)= ## Finance parameters overview -The main inputs for `ProFastComp` model include: +The main inputs for `ProFastLCO` model include: - required: financial parameters (`params` section). These can be input in the `ProFastBase` format or the `ProFAST` format. These two formats are described in the following sections: - [ProFastBase format](profast:direct_opt) - [ProFAST format](profast:pf_params_opt) @@ -17,7 +17,7 @@ The main inputs for `ProFastComp` model include: ```yaml finance_parameters: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: #inputs for the finance_model save_profast_results: True #optional, will save ProFAST results to .yaml file in the folder specified in the driver_config (`driver_config["general"]["folder_output"]`) save_profast_config: True #optional, will save ProFAST the profast config to .yaml file in the folder specified in the driver_config (`driver_config["general"]["folder_output"]`) @@ -40,7 +40,7 @@ If you are setting `save_profast_results` to `True` and are using multiple finan (profastcomp:outputs)= ## Output values and naming convention -``ProFastComp`` outputs the following data following the naming convention detailed below: +``ProFastLCO`` outputs the following data following the naming convention detailed below: - `LCO`: levelized cost of commodity in USD/commodity unit, e.g. `LCOH_produced` for hydrogen produced. - `wacc_`: weighted average cost of capital as a fraction. - `crf_`: capital recovery factor as a fraction. diff --git a/docs/finance_models/finance_index.md b/docs/finance_models/finance_index.md index 076936646..ab9f2c018 100644 --- a/docs/finance_models/finance_index.md +++ b/docs/finance_models/finance_index.md @@ -18,7 +18,7 @@ The `commodity_type` and `description` are used in the finance model naming conv (finance:supportedmodels)= ## Currently supported general finance models -- [``ProFastComp``](profastcomp:profastcompmodel): calculates levelized cost of commodity using [ProFAST](https://github.com/NREL/ProFAST). +- [``ProFastLCO``](profastcomp:profastcompmodel): calculates levelized cost of commodity using [ProFAST](https://github.com/NREL/ProFAST). - [``ProFastNPV``](profastnpv:profastnpvmodel): calculates the net present value of a commodity using [ProFAST](https://github.com/NREL/ProFAST). - [``NumpyFinancialNPV``](numpyfinancialnpvfinance:numpyfinancialnpvmodel): calculates the net present value of a commodity using the [NumPy Financial npv](https://numpy.org/numpy-financial/latest/npv.html#numpy_financial.npv) method. diff --git a/docs/user_guide/how_to_set_up_an_analysis.ipynb b/docs/user_guide/how_to_set_up_an_analysis.ipynb index 37c7ece79..c9d783782 100644 --- a/docs/user_guide/how_to_set_up_an_analysis.ipynb +++ b/docs/user_guide/how_to_set_up_an_analysis.ipynb @@ -164,7 +164,7 @@ " \n", "\n", "finance_parameters:\n", - " finance_model: \"ProFastComp\"\n", + " finance_model: \"ProFastLCO\"\n", " model_inputs:\n", " params:\n", " analysis_start_year: 2032\n", diff --git a/docs/user_guide/specifying_finance_parameters.md b/docs/user_guide/specifying_finance_parameters.md index 5ee95c798..7ae08217d 100644 --- a/docs/user_guide/specifying_finance_parameters.md +++ b/docs/user_guide/specifying_finance_parameters.md @@ -21,7 +21,7 @@ Within this framework, there are two distinct layers, **finance groups** and **f #### Finance groups A finance group contains the attributes needed to run one finance model: - `finance_model`: - The name of the financial model to use (e.g., `ProFastComp`). Must correspond to one of the available models in `self.supported_models`. + The name of the financial model to use (e.g., `ProFastLCO`). Must correspond to one of the available models in `self.supported_models`. - `model_inputs`: A dictionary of parameters passed into the chosen finance model. These provide customization of assumptions such as discount rate, debt fraction, or cost escalation. - `commodity` (conditionally required): @@ -65,7 +65,7 @@ General format: finance_parameters: finance_groups: commodity: "hydrogen" - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: discount_rate: 0.08 ``` @@ -89,8 +89,8 @@ General format: ```yaml finance_parameters: finance_groups: - finance_model: "ProFastComp" - model_inputs: #dictionary of inputs for ProFastComp + finance_model: "ProFastLCO" + model_inputs: #dictionary of inputs for ProFastLCO finance_subgroups: subgroup_a: commodity: "hydrogen" #required @@ -125,7 +125,7 @@ General format: finance_parameters: finance_groups: group_a: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: {discount_rate: 0.08} group_b: finance_model: "NPVFinancial" diff --git a/examples/01_onshore_steel_mn/plant_config.yaml b/examples/01_onshore_steel_mn/plant_config.yaml index 12811b79f..5d98e31bf 100644 --- a/examples/01_onshore_steel_mn/plant_config.yaml +++ b/examples/01_onshore_steel_mn/plant_config.yaml @@ -47,7 +47,7 @@ plant: finance_parameters: finance_groups: profast_model: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/02_texas_ammonia/plant_config.yaml b/examples/02_texas_ammonia/plant_config.yaml index 570880753..93ba07c62 100644 --- a/examples/02_texas_ammonia/plant_config.yaml +++ b/examples/02_texas_ammonia/plant_config.yaml @@ -42,7 +42,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: save_profast_config: True save_profast_results: False diff --git a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml index d5984da9b..f07d8946d 100644 --- a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml @@ -37,7 +37,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml index 9a3465c19..20a5b8321 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml @@ -35,7 +35,7 @@ plant: finance_parameters: finance_groups: commodity: "methanol" - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/03_methanol/smr/plant_config_smr.yaml b/examples/03_methanol/smr/plant_config_smr.yaml index a840aeead..c0839bd00 100644 --- a/examples/03_methanol/smr/plant_config_smr.yaml +++ b/examples/03_methanol/smr/plant_config_smr.yaml @@ -19,7 +19,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" commodity: "methanol" model_inputs: params: diff --git a/examples/04_geo_h2/plant_config_natural.yaml b/examples/04_geo_h2/plant_config_natural.yaml index 59e871484..ac33a014d 100644 --- a/examples/04_geo_h2/plant_config_natural.yaml +++ b/examples/04_geo_h2/plant_config_natural.yaml @@ -15,7 +15,7 @@ technology_interconnections: [ finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/04_geo_h2/plant_config_stimulated.yaml b/examples/04_geo_h2/plant_config_stimulated.yaml index c9217a293..9386f9c8d 100644 --- a/examples/04_geo_h2/plant_config_stimulated.yaml +++ b/examples/04_geo_h2/plant_config_stimulated.yaml @@ -11,7 +11,7 @@ plant: finance_parameters: finance_groups: commodity: "hydrogen" - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/05_wind_h2_opt/plant_config.yaml b/examples/05_wind_h2_opt/plant_config.yaml index 96e98f562..78c87f190 100644 --- a/examples/05_wind_h2_opt/plant_config.yaml +++ b/examples/05_wind_h2_opt/plant_config.yaml @@ -28,7 +28,7 @@ resource_to_tech_connections: [ ] finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/07_run_of_river_plant/plant_config.yaml b/examples/07_run_of_river_plant/plant_config.yaml index 0c4e578e0..1c47f5443 100644 --- a/examples/07_run_of_river_plant/plant_config.yaml +++ b/examples/07_run_of_river_plant/plant_config.yaml @@ -33,7 +33,7 @@ plant: finance_parameters: finance_groups: commodity: "electricity" - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/08_wind_electrolyzer/plant_config.yaml b/examples/08_wind_electrolyzer/plant_config.yaml index 11aa5cb46..69ca3e7de 100644 --- a/examples/08_wind_electrolyzer/plant_config.yaml +++ b/examples/08_wind_electrolyzer/plant_config.yaml @@ -36,7 +36,7 @@ finance_parameters: model_inputs: discount_rate: 0.09 profast_model: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/09_co2/direct_ocean_capture/plant_config.yaml b/examples/09_co2/direct_ocean_capture/plant_config.yaml index f9ca662a4..ae7584986 100644 --- a/examples/09_co2/direct_ocean_capture/plant_config.yaml +++ b/examples/09_co2/direct_ocean_capture/plant_config.yaml @@ -35,7 +35,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml index 0b91f6a94..5aa76ae6f 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml @@ -35,7 +35,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml index eab01dad3..aef37b470 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml @@ -30,7 +30,7 @@ resource_to_tech_connections: [ finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/10_electrolyzer_om/plant_config.yaml b/examples/10_electrolyzer_om/plant_config.yaml index f55a3cce6..78aaa8286 100644 --- a/examples/10_electrolyzer_om/plant_config.yaml +++ b/examples/10_electrolyzer_om/plant_config.yaml @@ -30,7 +30,7 @@ resource_to_tech_connections: [ finance_parameters: finance_groups: lcoe_financials: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 @@ -52,7 +52,7 @@ finance_parameters: depr_period: 5 # 5 years - for clean energy facilities as specified by the IRS MACRS schedule https://www.irs.gov/publications/p946#en_US_2020_publink1000107507 refurb: [0.] lcoh_financials: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/11_hybrid_energy_plant/plant_config.yaml b/examples/11_hybrid_energy_plant/plant_config.yaml index 3e5860f11..d75508594 100644 --- a/examples/11_hybrid_energy_plant/plant_config.yaml +++ b/examples/11_hybrid_energy_plant/plant_config.yaml @@ -11,7 +11,7 @@ plant: finance_parameters: finance_groups: commodity: "electricity" - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/12_ammonia_synloop/plant_config.yaml b/examples/12_ammonia_synloop/plant_config.yaml index 3b778bbbf..cf97da116 100644 --- a/examples/12_ammonia_synloop/plant_config.yaml +++ b/examples/12_ammonia_synloop/plant_config.yaml @@ -42,7 +42,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml index ce4be62f2..04cd519fe 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml @@ -31,7 +31,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2030 diff --git a/examples/15_wind_solar_electrolyzer/plant_config.yaml b/examples/15_wind_solar_electrolyzer/plant_config.yaml index 101b0ee87..c120b397e 100644 --- a/examples/15_wind_solar_electrolyzer/plant_config.yaml +++ b/examples/15_wind_solar_electrolyzer/plant_config.yaml @@ -42,7 +42,7 @@ plant: dt: 3600 finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/16_natural_gas/plant_config.yaml b/examples/16_natural_gas/plant_config.yaml index 95f19eeaa..35f7f2f28 100644 --- a/examples/16_natural_gas/plant_config.yaml +++ b/examples/16_natural_gas/plant_config.yaml @@ -41,7 +41,7 @@ finance_parameters: finance_groups: profast_model: commodity: "electricity" - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/17_splitter_wind_doc_h2/plant_config.yaml b/examples/17_splitter_wind_doc_h2/plant_config.yaml index 9d507ef18..97fd4e92f 100644 --- a/examples/17_splitter_wind_doc_h2/plant_config.yaml +++ b/examples/17_splitter_wind_doc_h2/plant_config.yaml @@ -31,7 +31,7 @@ resource_to_tech_connections: [ ] finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml index f172dcabe..1a58116a3 100644 --- a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml @@ -38,7 +38,7 @@ resource_to_tech_connections: [ finance_parameters: finance_groups: commodity: "electricity" - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/19_simple_dispatch/plant_config.yaml b/examples/19_simple_dispatch/plant_config.yaml index c420c1e0d..1f136ef0e 100644 --- a/examples/19_simple_dispatch/plant_config.yaml +++ b/examples/19_simple_dispatch/plant_config.yaml @@ -31,7 +31,7 @@ resource_to_tech_connections: [ finance_parameters: finance_groups: profast: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: save_profast_results: True params: diff --git a/examples/20_solar_electrolyzer_doe/plant_config.yaml b/examples/20_solar_electrolyzer_doe/plant_config.yaml index dde6df8bd..31f379920 100644 --- a/examples/20_solar_electrolyzer_doe/plant_config.yaml +++ b/examples/20_solar_electrolyzer_doe/plant_config.yaml @@ -33,7 +33,7 @@ plant: finance_parameters: finance_groups: optimistic: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 @@ -55,7 +55,7 @@ finance_parameters: depr_period: 5 # 5 years refurb: [0.] conservative: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/21_iron_mn_to_il/plant_config.yaml b/examples/21_iron_mn_to_il/plant_config.yaml index de855c4b2..e23fd2edd 100644 --- a/examples/21_iron_mn_to_il/plant_config.yaml +++ b/examples/21_iron_mn_to_il/plant_config.yaml @@ -46,7 +46,7 @@ plant: timezone: 0 finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/21_iron_mn_to_il/plant_config_old.yaml b/examples/21_iron_mn_to_il/plant_config_old.yaml index 86a345298..682fc4bea 100644 --- a/examples/21_iron_mn_to_il/plant_config_old.yaml +++ b/examples/21_iron_mn_to_il/plant_config_old.yaml @@ -31,7 +31,7 @@ plant: plant_life: 30 finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/22_site_doe/plant_config.yaml b/examples/22_site_doe/plant_config.yaml index deb2550ad..d24819b87 100644 --- a/examples/22_site_doe/plant_config.yaml +++ b/examples/22_site_doe/plant_config.yaml @@ -28,7 +28,7 @@ plant: finance_parameters: finance_groups: optimistic: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 @@ -50,7 +50,7 @@ finance_parameters: depr_period: 5 # 5 years refurb: [0.] conservative: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/23_solar_wind_ng_demand/plant_config.yaml b/examples/23_solar_wind_ng_demand/plant_config.yaml index 711f3954c..a3b79824d 100644 --- a/examples/23_solar_wind_ng_demand/plant_config.yaml +++ b/examples/23_solar_wind_ng_demand/plant_config.yaml @@ -58,7 +58,7 @@ plant: finance_parameters: finance_groups: profast_lco: - finance_model: ProFastComp + finance_model: ProFastLCO model_inputs: params: analysis_start_year: 2032 diff --git a/examples/24_solar_battery_grid/plant_config.yaml b/examples/24_solar_battery_grid/plant_config.yaml index 5bb6703b9..8d04f8c82 100644 --- a/examples/24_solar_battery_grid/plant_config.yaml +++ b/examples/24_solar_battery_grid/plant_config.yaml @@ -42,7 +42,7 @@ finance_parameters: finance_groups: profast_model: commodity: "electricity" - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/25_sizing_modes/plant_config.yaml b/examples/25_sizing_modes/plant_config.yaml index 49f72d1f8..618d6f7f7 100644 --- a/examples/25_sizing_modes/plant_config.yaml +++ b/examples/25_sizing_modes/plant_config.yaml @@ -36,7 +36,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/26_floris/plant_config.yaml b/examples/26_floris/plant_config.yaml index 0181e7422..e8e85fe33 100644 --- a/examples/26_floris/plant_config.yaml +++ b/examples/26_floris/plant_config.yaml @@ -23,7 +23,7 @@ plant: dt: 3600 finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/h2integrate/core/h2integrate_model.py b/h2integrate/core/h2integrate_model.py index 41dffce17..17b95b011 100644 --- a/h2integrate/core/h2integrate_model.py +++ b/h2integrate/core/h2integrate_model.py @@ -584,7 +584,7 @@ def create_finance_model(self): >>> self.plant_config["finance_parameters"]["finance_group"] = { ... "commodity": "hydrogen", - ... "finance_model": "ProFastComp", + ... "finance_model": "ProFastLCO", ... "model_inputs": {"discount_rate": 0.08}, ... } >>> self.create_finance_model() diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 7fe655344..9df97d8a3 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -257,7 +257,7 @@ "GridPerformanceModel": GridPerformanceModel, "GridCostModel": GridCostModel, # Finance - "ProFastComp": ProFastLCO, + "ProFastLCO": ProFastLCO, "ProFastNPV": ProFastNPV, "NumpyFinancialNPV": NumpyFinancialNPV, } diff --git a/h2integrate/finances/profast_base.py b/h2integrate/finances/profast_base.py index 31643ea76..59db9ccca 100644 --- a/h2integrate/finances/profast_base.py +++ b/h2integrate/finances/profast_base.py @@ -87,7 +87,7 @@ def check_parameter_inputs(finance_params, plant_config): f"{d}: both `{d}` and `{d.replace('_','')}` map to {d}" for d in duplicated_entries ) - msg = f"Duplicate entries found in ProFastComp params. Duplicated entries are: {err_info}" + msg = f"Duplicate entries found in ProFastLCO params. Duplicated entries are: {err_info}" raise ValueError(msg) # Check for conflicts between nickname/realname pairs diff --git a/h2integrate/finances/profast_lco.py b/h2integrate/finances/profast_lco.py index 01739ba6a..a21ce5618 100644 --- a/h2integrate/finances/profast_lco.py +++ b/h2integrate/finances/profast_lco.py @@ -140,7 +140,7 @@ def compute(self, inputs, outputs, discrete_inputs, discrete_outputs): if save_results or save_config: output_dir = self.options["driver_config"]["general"]["folder_output"] fdesc = self.options["plant_config"]["finance_parameters"]["model_inputs"].get( - "profast_output_description", "ProFastComp" + "profast_output_description", "ProFastLCO" ) fbasename = f"{fdesc}_{self.output_txt}" diff --git a/h2integrate/finances/test/test_finances.py b/h2integrate/finances/test/test_finances.py index a15017710..89631ce89 100644 --- a/h2integrate/finances/test/test_finances.py +++ b/h2integrate/finances/test/test_finances.py @@ -17,7 +17,7 @@ class TestProFastComp(unittest.TestCase): def setUp(self): self.plant_config = { "finance_parameters": { - "finance_model": "ProFastComp", + "finance_model": "ProFastLCO", "model_inputs": { "params": { "analysis_start_year": 2022, @@ -112,7 +112,7 @@ def test_modified_lcoe_calc(self): finance_inputs = plant_config["finance_parameters"]["finance_groups"].pop("profast_model") plant_config_filtered = {k: v for k, v in plant_config.items() if k != "finance_parameters"} plant_config_filtered.update({"finance_parameters": finance_inputs}) - # Run ProFastComp with loaded configs + # Run ProFastLCO with loaded configs prob = om.Problem() comp = ProFastLCO( plant_config=plant_config_filtered, @@ -247,7 +247,7 @@ def test_profast_config_provided(): } plant_config = { "finance_parameters": { - "finance_model": "ProFastComp", + "finance_model": "ProFastLCO", "model_inputs": { "params": pf_params, "capital_items": { @@ -341,7 +341,7 @@ def test_parameter_validation_clashing_values(): plant_config = { "finance_parameters": { - "finance_model": "ProFastComp", + "finance_model": "ProFastLCO", "model_inputs": { "params": pf_params, "capital_items": { @@ -432,7 +432,7 @@ def test_parameter_validation_duplicate_parameters(): plant_config = { "finance_parameters": { - "finance_model": "ProFastComp", + "finance_model": "ProFastLCO", "model_inputs": { "params": pf_params, "capital_items": { @@ -475,5 +475,5 @@ def test_parameter_validation_duplicate_parameters(): prob.model.add_subsystem("comp", comp, promotes=["*"]) # Should raise ValueError during setup due to clashing values - with pytest.raises(ValueError, match="Duplicate entries found in ProFastComp params"): + with pytest.raises(ValueError, match="Duplicate entries found in ProFastLCO params"): prob.setup() From 31526d31aee2e2999d97de1fbd75a26b081625db Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Fri, 23 Jan 2026 08:53:58 -0800 Subject: [PATCH 33/42] fix misapplied hopp name change --- h2integrate/core/supported_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 9df97d8a3..c58fa70fa 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -284,7 +284,7 @@ def is_electricity_producer(tech_name: str) -> bool: "solar", "pv", "river", - "HOPPComponent", + "hopp", "natural_gas_plant", "grid_buy", ] From 9b9e943388b2d5ff251c12dfd789da07dec4371a Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Fri, 23 Jan 2026 09:18:19 -0800 Subject: [PATCH 34/42] convert combiner, splitter and transport performance model names --- docs/user_guide/connecting_technologies.md | 4 ++-- docs/user_guide/model_overview.md | 4 ++-- examples/01_onshore_steel_mn/tech_config.yaml | 2 +- examples/02_texas_ammonia/tech_config.yaml | 2 +- .../03_methanol/co2_hydrogenation/tech_config_co2h.yaml | 2 +- .../03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml | 2 +- examples/09_co2/direct_ocean_capture/tech_config.yaml | 2 +- examples/12_ammonia_synloop/tech_config.yaml | 2 +- examples/15_wind_solar_electrolyzer/tech_config.yaml | 2 +- examples/17_splitter_wind_doc_h2/tech_config.yaml | 2 +- examples/21_iron_mn_to_il/tech_config.yaml | 2 +- examples/21_iron_mn_to_il/tech_config_old.yaml | 2 +- .../flexible_demand_tech_config.yaml | 2 +- examples/23_solar_wind_ng_demand/tech_config.yaml | 2 +- h2integrate/core/supported_models.py | 6 +++--- 15 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/user_guide/connecting_technologies.md b/docs/user_guide/connecting_technologies.md index 0b72689f1..808899667 100644 --- a/docs/user_guide/connecting_technologies.md +++ b/docs/user_guide/connecting_technologies.md @@ -100,7 +100,7 @@ Add the combiner to your `tech_config.yaml`: technologies: combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" model_inputs: performance_parameters: commodity: "electricity" @@ -143,7 +143,7 @@ Add the splitter to your `tech_config.yaml`: technologies: electricity_splitter: performance_model: - model: "splitter_performance" + model: "GenericSplitterPerformanceModel" config: commodity: "electricity" commodity_units: "kW" diff --git a/docs/user_guide/model_overview.md b/docs/user_guide/model_overview.md index 8c4ff04f1..e82e2cefa 100644 --- a/docs/user_guide/model_overview.md +++ b/docs/user_guide/model_overview.md @@ -250,10 +250,10 @@ Below summarizes the available performance, cost, and financial models for each + `'pipe'`: currently compatible with the commodities "hydrogen", "co2", "methanol", "ammonia", "nitrogen", "natural_gas", "pig_iron", "reformer_catalyst", "water", "carbon", "iron_ore", and "lime" - `combiner`: - performance models: - + `'combiner_performance'`: can be used for any commodity + + `'GenericCombinerPerformanceModel'`: can be used for any commodity - `splitter`: - performance models: - + `'splitter_performance'`: can be used for any commodity + + `'GenericSplitterPerformanceModel'`: can be used for any commodity (storage-models)= ## Storage Models diff --git a/examples/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index bc30bf129..22811d68a 100644 --- a/examples/01_onshore_steel_mn/tech_config.yaml +++ b/examples/01_onshore_steel_mn/tech_config.yaml @@ -59,7 +59,7 @@ technologies: combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" dispatch_rule_set: model: "PyomoDispatchGenericConverter" model_inputs: diff --git a/examples/02_texas_ammonia/tech_config.yaml b/examples/02_texas_ammonia/tech_config.yaml index 6c314820e..cc7c63e4c 100644 --- a/examples/02_texas_ammonia/tech_config.yaml +++ b/examples/02_texas_ammonia/tech_config.yaml @@ -58,7 +58,7 @@ technologies: cost_year: 2019 combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" dispatch_rule_set: model: "PyomoDispatchGenericConverter" model_inputs: diff --git a/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml index 66f3765d7..a96beb5d5 100644 --- a/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml @@ -47,7 +47,7 @@ technologies: cost_year: 2019 combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" model_inputs: performance_parameters: commodity: "electricity" diff --git a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml index 336f1db53..2a0996c1b 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/tech_config_co2h.yaml @@ -45,7 +45,7 @@ technologies: cost_year: 2019 electricity_splitter: performance_model: - model: "splitter_performance" + model: "GenericSplitterPerformanceModel" model_inputs: performance_parameters: commodity: "electricity" diff --git a/examples/09_co2/direct_ocean_capture/tech_config.yaml b/examples/09_co2/direct_ocean_capture/tech_config.yaml index 9ed4949c8..dad6870c1 100644 --- a/examples/09_co2/direct_ocean_capture/tech_config.yaml +++ b/examples/09_co2/direct_ocean_capture/tech_config.yaml @@ -51,7 +51,7 @@ technologies: combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" dispatch_rule_set: model: "PyomoDispatchGenericConverter" model_inputs: diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index 0ff5c2971..ea41e075a 100644 --- a/examples/12_ammonia_synloop/tech_config.yaml +++ b/examples/12_ammonia_synloop/tech_config.yaml @@ -58,7 +58,7 @@ technologies: cost_year: 2019 combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" dispatch_rule_set: model: "PyomoDispatchGenericConverter" model_inputs: diff --git a/examples/15_wind_solar_electrolyzer/tech_config.yaml b/examples/15_wind_solar_electrolyzer/tech_config.yaml index b84c0cfab..0652f8f26 100644 --- a/examples/15_wind_solar_electrolyzer/tech_config.yaml +++ b/examples/15_wind_solar_electrolyzer/tech_config.yaml @@ -59,7 +59,7 @@ technologies: cost_year: 2024 combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" model_inputs: performance_parameters: commodity: "electricity" diff --git a/examples/17_splitter_wind_doc_h2/tech_config.yaml b/examples/17_splitter_wind_doc_h2/tech_config.yaml index 9a8a6155a..620154706 100644 --- a/examples/17_splitter_wind_doc_h2/tech_config.yaml +++ b/examples/17_splitter_wind_doc_h2/tech_config.yaml @@ -34,7 +34,7 @@ technologies: electricity_splitter: performance_model: - model: "splitter_performance" + model: "GenericSplitterPerformanceModel" model_inputs: performance_parameters: split_mode: "fraction" diff --git a/examples/21_iron_mn_to_il/tech_config.yaml b/examples/21_iron_mn_to_il/tech_config.yaml index 99cf77267..7f30c6b08 100644 --- a/examples/21_iron_mn_to_il/tech_config.yaml +++ b/examples/21_iron_mn_to_il/tech_config.yaml @@ -49,7 +49,7 @@ technologies: iron_transport: performance_model: - model: "iron_transport_performance" + model: "IronTransportPerformanceComponent" cost_model: model: "iron_transport_cost" model_inputs: diff --git a/examples/21_iron_mn_to_il/tech_config_old.yaml b/examples/21_iron_mn_to_il/tech_config_old.yaml index 11ef9acd2..81fea7a3a 100644 --- a/examples/21_iron_mn_to_il/tech_config_old.yaml +++ b/examples/21_iron_mn_to_il/tech_config_old.yaml @@ -31,7 +31,7 @@ technologies: debt interest rate: 0.050049 iron_transport: performance_model: - model: "iron_transport_performance" + model: "IronTransportPerformanceComponent" cost_model: model: "iron_transport_cost" model_inputs: diff --git a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml index 0bd2a9645..aa5db79f9 100644 --- a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml @@ -111,7 +111,7 @@ technologies: combiner: performance_model: - model: combiner_performance + model: GenericCombinerPerformanceModel model_inputs: performance_parameters: commodity: electricity diff --git a/examples/23_solar_wind_ng_demand/tech_config.yaml b/examples/23_solar_wind_ng_demand/tech_config.yaml index fb7c400bb..c08fd3b61 100644 --- a/examples/23_solar_wind_ng_demand/tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/tech_config.yaml @@ -105,7 +105,7 @@ technologies: combiner: performance_model: - model: combiner_performance + model: GenericCombinerPerformanceModel model_inputs: performance_parameters: commodity: electricity diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index c58fa70fa..086213515 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -225,9 +225,9 @@ # Transport "cable": CablePerformanceModel, "pipe": PipePerformanceModel, - "combiner_performance": GenericCombinerPerformanceModel, - "splitter_performance": GenericSplitterPerformanceModel, - "iron_transport_performance": IronTransportPerformanceComponent, + "GenericCombinerPerformanceModel": GenericCombinerPerformanceModel, + "GenericSplitterPerformanceModel": GenericSplitterPerformanceModel, + "IronTransportPerformanceComponent": IronTransportPerformanceComponent, "iron_transport_cost": IronTransportCostComponent, # Simple Summers "GenericSummerPerformanceModel": GenericSummerPerformanceModel, From 5dbc647b5e77e10689179c1a659f5dcd5e427d7f Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Fri, 23 Jan 2026 09:23:05 -0800 Subject: [PATCH 35/42] update iron transport cost component model naming --- examples/21_iron_mn_to_il/tech_config.yaml | 2 +- examples/21_iron_mn_to_il/tech_config_old.yaml | 2 +- h2integrate/core/supported_models.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/21_iron_mn_to_il/tech_config.yaml b/examples/21_iron_mn_to_il/tech_config.yaml index 7f30c6b08..36e1e6ded 100644 --- a/examples/21_iron_mn_to_il/tech_config.yaml +++ b/examples/21_iron_mn_to_il/tech_config.yaml @@ -51,7 +51,7 @@ technologies: performance_model: model: "IronTransportPerformanceComponent" cost_model: - model: "iron_transport_cost" + model: "IronTransportCostComponent" model_inputs: performance_parameters: find_closest_ship_site: False diff --git a/examples/21_iron_mn_to_il/tech_config_old.yaml b/examples/21_iron_mn_to_il/tech_config_old.yaml index 81fea7a3a..d2fb545d6 100644 --- a/examples/21_iron_mn_to_il/tech_config_old.yaml +++ b/examples/21_iron_mn_to_il/tech_config_old.yaml @@ -33,7 +33,7 @@ technologies: performance_model: model: "IronTransportPerformanceComponent" cost_model: - model: "iron_transport_cost" + model: "IronTransportCostComponent" model_inputs: performance_parameters: find_closest_ship_site: False diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 086213515..4f2ed250e 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -228,7 +228,7 @@ "GenericCombinerPerformanceModel": GenericCombinerPerformanceModel, "GenericSplitterPerformanceModel": GenericSplitterPerformanceModel, "IronTransportPerformanceComponent": IronTransportPerformanceComponent, - "iron_transport_cost": IronTransportCostComponent, + "IronTransportCostComponent": IronTransportCostComponent, # Simple Summers "GenericSummerPerformanceModel": GenericSummerPerformanceModel, # Storage From 8744b0ebfcfd334e8fb58474f7763cf77153e791 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Fri, 23 Jan 2026 09:45:00 -0800 Subject: [PATCH 36/42] replce feedstock naming, and update feedstock model check --- docs/technology_models/feedstocks.md | 8 ++--- examples/16_natural_gas/tech_config.yaml | 4 +-- examples/21_iron_mn_to_il/tech_config.yaml | 36 +++++++++---------- .../flexible_demand_tech_config.yaml | 4 +-- .../23_solar_wind_ng_demand/tech_config.yaml | 4 +-- h2integrate/core/h2integrate_model.py | 8 ++--- h2integrate/core/supported_models.py | 4 +-- 7 files changed, 34 insertions(+), 34 deletions(-) diff --git a/docs/technology_models/feedstocks.md b/docs/technology_models/feedstocks.md index 2ed818f72..0b6a40584 100644 --- a/docs/technology_models/feedstocks.md +++ b/docs/technology_models/feedstocks.md @@ -10,12 +10,12 @@ Please see the example `16_natural_gas` in the `examples` directory for a comple Each feedstock type requires two model components: -1. **Performance Model** (`feedstock_performance`): +1. **Performance Model** (`FeedstockPerformanceModel`): - Generates the feedstock supply profile - Outputs `{feedstock_type}_out` variable - Located at the beginning of the technology chain -2. **Cost Model** (`feedstock_cost`): +2. **Cost Model** (`FeedstockCostModel`): - Calculates consumption costs based on actual usage - Takes `{feedstock_type}_consumed` as input - Located after all consuming technologies in the chain @@ -43,9 +43,9 @@ To use the feedstock performance and cost models, add an entry to your `tech_con ```yaml ng_feedstock: performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "natural_gas" diff --git a/examples/16_natural_gas/tech_config.yaml b/examples/16_natural_gas/tech_config.yaml index 0afbf55cb..d1dc5e313 100644 --- a/examples/16_natural_gas/tech_config.yaml +++ b/examples/16_natural_gas/tech_config.yaml @@ -58,9 +58,9 @@ technologies: opex_fraction: 0.05 # percent of capex ng_feedstock: performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "natural_gas" diff --git a/examples/21_iron_mn_to_il/tech_config.yaml b/examples/21_iron_mn_to_il/tech_config.yaml index 36e1e6ded..1265eaf36 100644 --- a/examples/21_iron_mn_to_il/tech_config.yaml +++ b/examples/21_iron_mn_to_il/tech_config.yaml @@ -4,9 +4,9 @@ description: "This hybrid plant produces iron" technologies: grid_feedstock: #electricity feedstock for iron ore performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "electricity" @@ -21,9 +21,9 @@ technologies: mine_feedstock: #iron ore feedstock performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "crude_ore" @@ -62,9 +62,9 @@ technologies: natural_gas_feedstock: performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "natural_gas" @@ -79,9 +79,9 @@ technologies: water_feedstock: #for iron reduction performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "water" @@ -96,9 +96,9 @@ technologies: catalyst_feedstock: #for NG iron reduction performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "reformer_catalyst" @@ -113,9 +113,9 @@ technologies: dri_grid_feedstock: #electricity feedstock for iron dri performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "electricity" @@ -144,9 +144,9 @@ technologies: eaf_grid_feedstock: #electricity feedstock for EAF performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "electricity" @@ -161,9 +161,9 @@ technologies: eaf_water_feedstock: #for EAF performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "water" @@ -178,9 +178,9 @@ technologies: eaf_natural_gas_feedstock: performance_model: - model: "feedstock_performance" + model: "FeedstockPerformanceModel" cost_model: - model: "feedstock_cost" + model: "FeedstockCostModel" model_inputs: shared_parameters: feedstock_type: "natural_gas" diff --git a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml index aa5db79f9..fba5c6511 100644 --- a/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/flexible_demand_tech_config.yaml @@ -64,9 +64,9 @@ technologies: ng_feedstock: performance_model: - model: feedstock_performance + model: FeedstockPerformanceModel cost_model: - model: feedstock_cost + model: FeedstockCostModel model_inputs: shared_parameters: feedstock_type: natural_gas diff --git a/examples/23_solar_wind_ng_demand/tech_config.yaml b/examples/23_solar_wind_ng_demand/tech_config.yaml index c08fd3b61..3bafb8e92 100644 --- a/examples/23_solar_wind_ng_demand/tech_config.yaml +++ b/examples/23_solar_wind_ng_demand/tech_config.yaml @@ -64,9 +64,9 @@ technologies: ng_feedstock: performance_model: - model: feedstock_performance + model: FeedstockPerformanceModel cost_model: - model: feedstock_cost + model: FeedstockCostModel model_inputs: shared_parameters: feedstock_type: natural_gas diff --git a/h2integrate/core/h2integrate_model.py b/h2integrate/core/h2integrate_model.py index 17b95b011..46fc0a0a5 100644 --- a/h2integrate/core/h2integrate_model.py +++ b/h2integrate/core/h2integrate_model.py @@ -412,7 +412,7 @@ def create_technology_models(self): f"the top-level name of the tech group ({tech_name})" ) - if perf_model is not None and "feedstock" in perf_model: + if perf_model == "FeedstockPerformanceModel": comp = self.supported_models[perf_model]( driver_config=self.driver_config, plant_config=self.plant_config, @@ -501,7 +501,7 @@ def create_technology_models(self): for tech_name, individual_tech_config in self.technology_config["technologies"].items(): cost_model = individual_tech_config.get("cost_model", {}).get("model") - if cost_model is not None and "feedstock" in cost_model: + if cost_model == "FeedstockCostModel": comp = self.supported_models[cost_model]( driver_config=self.driver_config, plant_config=self.plant_config, @@ -878,13 +878,13 @@ def connect_technologies(self): # If the source is a feedstock, make sure to connect the amount of # feedstock consumed from the technology back to the feedstock cost model - if cost_model_name is not None and "feedstock" in cost_model_name: + if cost_model_name == "FeedstockCostModel": self.plant.connect( f"{dest_tech}.{transport_item}_consumed", f"{source_tech}.{transport_item}_consumed", ) - if perf_model_name is not None and "feedstock" in perf_model_name: + if perf_model_name == "FeedstockPerformanceModel": source_tech = f"{source_tech}_source" # Create the transport object diff --git a/h2integrate/core/supported_models.py b/h2integrate/core/supported_models.py index 4f2ed250e..81b761245 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -251,8 +251,8 @@ "PyomoDispatchGenericConverter": PyomoDispatchGenericConverter, "PyomoRuleStorageBaseclass": PyomoRuleStorageBaseclass, # Feedstock - "feedstock_performance": FeedstockPerformanceModel, - "feedstock_cost": FeedstockCostModel, + "FeedstockPerformanceModel": FeedstockPerformanceModel, + "FeedstockCostModel": FeedstockCostModel, # Grid "GridPerformanceModel": GridPerformanceModel, "GridCostModel": GridCostModel, From 62a013fefe44f4742bbe313c9012bc125201f9be Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Fri, 23 Jan 2026 10:43:48 -0800 Subject: [PATCH 37/42] reinstate subsystem naming conventions --- h2integrate/control/test/test_openloop_controllers.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/h2integrate/control/test/test_openloop_controllers.py b/h2integrate/control/test/test_openloop_controllers.py index bd0f0b224..68f154bd1 100644 --- a/h2integrate/control/test/test_openloop_controllers.py +++ b/h2integrate/control/test/test_openloop_controllers.py @@ -59,7 +59,7 @@ def test_pass_through_controller(subtests): ) prob.model.add_subsystem( - "PassThroughOpenLoopController", + "pass_through_controller", PassThroughOpenLoopController( plant_config={}, tech_config=tech_config["technologies"]["h2_storage"] ), @@ -135,7 +135,7 @@ def test_storage_demand_controller(subtests): ) prob.model.add_subsystem( - "DemandOpenLoopStorageController", + "demand_open_loop_storage_controller", DemandOpenLoopStorageController( plant_config=plant_config, tech_config=tech_config["technologies"]["h2_storage"] ), @@ -310,7 +310,7 @@ def test_generic_storage_demand_controller(subtests): ) prob.model.add_subsystem( - "DemandOpenLoopStorageController", + "demand_open_loop_storage_controller", DemandOpenLoopStorageController( plant_config=plant_config, tech_config=tech_config["technologies"]["h2_storage"] ), @@ -382,7 +382,7 @@ def test_demand_converter_controller(subtests): ) prob.model.add_subsystem( - "DemandOpenLoopStorageController", + "demand_open_loop_storage_controller", DemandOpenLoopConverterController( plant_config=plant_config, tech_config=tech_config["technologies"]["load"] ), @@ -463,7 +463,7 @@ def test_flexible_demand_converter_controller(subtests, variable_h2_production_p ) prob.model.add_subsystem( - "DemandOpenLoopStorageController", + "flexible_demand_open_loop_converter_controller", FlexibleDemandOpenLoopConverterController( plant_config=plant_config, tech_config=tech_config["technologies"]["load"] ), From 421fc01676a6d427606ee6506c5a11c8d227e662 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Fri, 23 Jan 2026 10:49:40 -0800 Subject: [PATCH 38/42] update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f77d93272..7a6c7c78e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ - Added postprocessing function to save timeseries - Minor reorg for profast tools - Removed hydrogen tank cost and performance models that were unused +- Updates all models in `supported_models` to map between a string version of the class name and + the class itself. As such, all examples and documentation have been updated to properly instruct + users to the change in model configuration naming conventions. ## 0.5.1 [December 18, 2025] From 046e88ce9049f585b90288c890cb30f2857aad22 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Mon, 26 Jan 2026 09:01:37 -0800 Subject: [PATCH 39/42] update gitignore for more examples outputs --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 9096bc44e..9446c6fc3 100644 --- a/.gitignore +++ b/.gitignore @@ -124,12 +124,17 @@ tests/h2integrate/test_hydrogen/data/* tests/h2integrate/test_hydrogen/output.txt *speed_dir_data.csv examples/h2integrate/*/data +examples/**/*data/ examples/h2integrate/*/figures +examples/*/*_output_dir/ +examples/*/*.sqlite tests/h2integrate/reports/ tests/h2integrate/test_hydrogen/output/ **/run_*_out/ +**/*_run/ *_out/ **/test_*_out/ +**/wind_electrolyzer/* output* snopt_history.txt From f7684fe5a890b3ae03ac72dbd4d99e7610dabb2c Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Mon, 26 Jan 2026 13:05:19 -0800 Subject: [PATCH 40/42] fix bad merge conflict resolutions for mult-site examples --- .../01_onshore_steel_mn/plant_config.yaml | 27 ++++++------ examples/02_texas_ammonia/plant_config.yaml | 25 ++++++----- .../co2_hydrogenation/plant_config_co2h.yaml | 25 ++++++----- .../plant_config_co2h.yaml | 17 +++---- examples/05_wind_h2_opt/plant_config.yaml | 10 ++--- examples/06_custom_tech/plant_config.yaml | 10 ++--- .../07_run_of_river_plant/plant_config.yaml | 12 ++--- .../08_wind_electrolyzer/plant_config.yaml | 10 ++--- .../direct_ocean_capture/plant_config.yaml | 17 +++---- .../plant_config.yaml | 10 ++--- .../plant_config_financials.yaml | 17 +++---- examples/10_electrolyzer_om/plant_config.yaml | 10 ++--- examples/12_ammonia_synloop/plant_config.yaml | 25 ++++++----- .../inputs/plant_config.yaml | 17 +++---- .../plant_config.yaml | 36 ++++++++------- examples/16_natural_gas/plant_config.yaml | 14 +++--- .../17_splitter_wind_doc_h2/plant_config.yaml | 17 +++---- .../plant_config.yaml | 10 ++--- examples/19_simple_dispatch/plant_config.yaml | 10 ++--- .../plant_config.yaml | 12 ++--- examples/22_site_doe/plant_config.yaml | 12 ++--- .../23_solar_wind_ng_demand/plant_config.yaml | 44 +++++++++---------- .../24_solar_battery_grid/plant_config.yaml | 14 +++--- examples/27_site_doe_diff/plant_config.yaml | 4 +- 24 files changed, 208 insertions(+), 197 deletions(-) diff --git a/examples/01_onshore_steel_mn/plant_config.yaml b/examples/01_onshore_steel_mn/plant_config.yaml index 1fbacbed3..8b3a33fcb 100644 --- a/examples/01_onshore_steel_mn/plant_config.yaml +++ b/examples/01_onshore_steel_mn/plant_config.yaml @@ -1,20 +1,21 @@ name: "plant_config" description: "This plant is located in MN, USA..." -site: - latitude: 47.5233 - longitude: -92.5366 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2013 +sites: + site: + latitude: 47.5233 + longitude: -92.5366 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2013 - solar_resource: - resource_model: "GOESAggregatedSolarAPI" - resource_parameters: - resource_year: 2013 - resource_filename: "47.5_-93.0_psmv3_60_2013.csv" + solar_resource: + resource_model: "GOESAggregatedSolarAPI" + resource_parameters: + resource_year: 2013 + resource_filename: "47.5_-93.0_psmv3_60_2013.csv" # array of arrays containing left-to-right technology # interconnections; can support bidirectional connections # with the reverse definition. diff --git a/examples/02_texas_ammonia/plant_config.yaml b/examples/02_texas_ammonia/plant_config.yaml index de3269717..c453fa943 100644 --- a/examples/02_texas_ammonia/plant_config.yaml +++ b/examples/02_texas_ammonia/plant_config.yaml @@ -1,19 +1,20 @@ name: "plant_config" description: "This plant is located in MN, USA..." -site: - latitude: 32.31714 - longitude: -100.18 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2013 +sites: + site: + latitude: 32.31714 + longitude: -100.18 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2013 - solar_resource: - resource_model: "GOESAggregatedSolarAPI" - resource_parameters: - resource_year: 2013 + solar_resource: + resource_model: "GOESAggregatedSolarAPI" + resource_parameters: + resource_year: 2013 # array of arrays containing left-to-right technology # interconnections; can support bidirectional connections # with the reverse definition. diff --git a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml index 140f5b7cb..9c8b6d4b1 100644 --- a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml @@ -1,18 +1,19 @@ name: "plant_config" description: "This plant is located west of the Wolf Hollow II NGCC power plant in Texas" -site: - latitude: 32.31714 - longitude: -100.18 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2013 - solar_resource: - resource_model: "GOESAggregatedSolarAPI" - resource_parameters: - resource_year: 2013 +sites: + site: + latitude: 32.31714 + longitude: -100.18 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2013 + solar_resource: + resource_model: "GOESAggregatedSolarAPI" + resource_parameters: + resource_year: 2013 # array of arrays containing left-to-right technology # interconnections; can support bidirectional connections # with the reverse definition. diff --git a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml index 138a56a9c..290163998 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml @@ -1,14 +1,15 @@ name: "plant_config" description: "This plant is located of the coast of Galveston in Texas" -site: - latitude: 29.2 - longitude: -94.6 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2013 +sites: + site: + latitude: 29.2 + longitude: -94.6 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2013 # this will naturally grow as we mature the interconnected tech technology_interconnections: [ diff --git a/examples/05_wind_h2_opt/plant_config.yaml b/examples/05_wind_h2_opt/plant_config.yaml index 4ed46fa3c..dbb6d0026 100644 --- a/examples/05_wind_h2_opt/plant_config.yaml +++ b/examples/05_wind_h2_opt/plant_config.yaml @@ -6,11 +6,11 @@ sites: latitude: 35.2018863 longitude: -101.945027 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2012 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2012 plant: diff --git a/examples/06_custom_tech/plant_config.yaml b/examples/06_custom_tech/plant_config.yaml index 6297fe265..b418602a9 100644 --- a/examples/06_custom_tech/plant_config.yaml +++ b/examples/06_custom_tech/plant_config.yaml @@ -6,11 +6,11 @@ sites: latitude: 35.2018863 longitude: -101.945027 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2012 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2012 plant: plant_life: 30 diff --git a/examples/07_run_of_river_plant/plant_config.yaml b/examples/07_run_of_river_plant/plant_config.yaml index fd10a193e..8cbf4bef4 100644 --- a/examples/07_run_of_river_plant/plant_config.yaml +++ b/examples/07_run_of_river_plant/plant_config.yaml @@ -6,11 +6,11 @@ sites: latitude: 32.34 longitude: -98.27 - resources: - RiverResource: - resource_model: "RiverResource" - resource_parameters: - filename: "river_data.csv" + resources: + river_resource: + resource_model: "RiverResource" + resource_parameters: + filename: "river_data.csv" # array of arrays containing left-to-right technology # interconnections; can support bidirectional connections @@ -25,7 +25,7 @@ technology_interconnections: [ # array of arrays containing left-to-right resource interconnections; resource_to_tech_connections: [ # connect the river resource to the run-of-river hydro technology - ['site.RiverResource', 'river', 'discharge'], + ['site.river_resource', 'river', 'discharge'], ] plant: diff --git a/examples/08_wind_electrolyzer/plant_config.yaml b/examples/08_wind_electrolyzer/plant_config.yaml index 9ddf5d33a..9dc648e27 100644 --- a/examples/08_wind_electrolyzer/plant_config.yaml +++ b/examples/08_wind_electrolyzer/plant_config.yaml @@ -6,11 +6,11 @@ sites: latitude: 35.2018863 longitude: -101.945027 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2012 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2012 plant: plant_life: 30 diff --git a/examples/09_co2/direct_ocean_capture/plant_config.yaml b/examples/09_co2/direct_ocean_capture/plant_config.yaml index 3e903a8ea..4c11b9a91 100644 --- a/examples/09_co2/direct_ocean_capture/plant_config.yaml +++ b/examples/09_co2/direct_ocean_capture/plant_config.yaml @@ -1,14 +1,15 @@ name: "plant_config" description: "This plant is located in OR, USA" -site: - latitude: 43.807 - longitude: -124.81 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2010 +sites: + site: + latitude: 43.807 + longitude: -124.81 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2010 # array of arrays containing left-to-right technology diff --git a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml index 33ca79eb5..9a669ed19 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml @@ -6,11 +6,11 @@ sites: latitude: 43.807 longitude: -124.81 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2010 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2010 # array of arrays containing left-to-right technology diff --git a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml index 2020cfa72..1ed70bf92 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml @@ -1,14 +1,15 @@ name: "plant_config" description: "This plant is located in Puget Sound WA, USA" -site: - latitude: 48.153889 - longitude: -122.774111 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2013 +sites: + site: + latitude: 48.153889 + longitude: -122.774111 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2013 plant: plant_life: 20 diff --git a/examples/10_electrolyzer_om/plant_config.yaml b/examples/10_electrolyzer_om/plant_config.yaml index 6a8280b54..d7cbbdefa 100644 --- a/examples/10_electrolyzer_om/plant_config.yaml +++ b/examples/10_electrolyzer_om/plant_config.yaml @@ -6,11 +6,11 @@ sites: latitude: 35.2018863 longitude: -101.945027 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2012 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2012 plant: plant_life: 30 diff --git a/examples/12_ammonia_synloop/plant_config.yaml b/examples/12_ammonia_synloop/plant_config.yaml index 1e9d3808c..3b668c8fc 100644 --- a/examples/12_ammonia_synloop/plant_config.yaml +++ b/examples/12_ammonia_synloop/plant_config.yaml @@ -1,19 +1,20 @@ name: "plant_config" description: "This plant is located in MN, USA..." -site: - latitude: 32.31714 - longitude: -100.18 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2013 +sites: + site: + latitude: 32.31714 + longitude: -100.18 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2013 - solar_resource: - resource_model: "GOESAggregatedSolarAPI" - resource_parameters: - resource_year: 2013 + solar_resource: + resource_model: "GOESAggregatedSolarAPI" + resource_parameters: + resource_year: 2013 # array of arrays containing left-to-right technology # interconnections; can support bidirectional connections diff --git a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml index c8bbd652d..8dfff6c99 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml @@ -1,16 +1,17 @@ name: "plant_config" description: "This plant is located in Amarillo TX, USA..." -site: - latitude: 35.2018863 - longitude: -101.945027 +sites: + site: + latitude: 35.2018863 + longitude: -101.945027 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2012 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2012 # array of arrays containing left-to-right technology # interconnections; can support bidirectional connections diff --git a/examples/15_wind_solar_electrolyzer/plant_config.yaml b/examples/15_wind_solar_electrolyzer/plant_config.yaml index f184fafd0..8dda56ee8 100644 --- a/examples/15_wind_solar_electrolyzer/plant_config.yaml +++ b/examples/15_wind_solar_electrolyzer/plant_config.yaml @@ -1,24 +1,26 @@ name: "plant_config" description: "This plant is located in MN, USA..." -site: - latitude: 30.6617 - longitude: -101.7096 +sites: + solar_site: + latitude: 30.6617 + longitude: -101.7096 + resources: + solar_resource: + resource_model: "GOESAggregatedSolarAPI" + resource_parameters: + resource_year: 2013 + resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" + resource_filename: "30.6617_-101.7096_psmv3_60_2013.csv" + wind_site: + latitude: 35.2018863 + longitude: -101.945027 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2012 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - latitude: 35.2018863 - longitude: -101.945027 - resource_year: 2012 - - solar_resource: - resource_model: "GOESAggregatedSolarAPI" - resource_parameters: - resource_year: 2013 - resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" - resource_filename: "30.6617_-101.7096_psmv3_60_2013.csv" # array of arrays containing left-to-right technology # interconnections; can support bidirectional connections # with the reverse definition. diff --git a/examples/16_natural_gas/plant_config.yaml b/examples/16_natural_gas/plant_config.yaml index e10a84df0..9ed837c7a 100644 --- a/examples/16_natural_gas/plant_config.yaml +++ b/examples/16_natural_gas/plant_config.yaml @@ -6,13 +6,13 @@ sites: latitude: 32.34 longitude: -98.27 - resources: - solar_resource: - resource_model: "GOESAggregatedSolarAPI" - resource_parameters: - resource_year: 2013 - resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" - resource_filename: "30.6617_-101.7096_psmv3_60_2013.csv" + resources: + solar_resource: + resource_model: "GOESAggregatedSolarAPI" + resource_parameters: + resource_year: 2013 + resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" + resource_filename: "30.6617_-101.7096_psmv3_60_2013.csv" # array of arrays containing left-to-right technology diff --git a/examples/17_splitter_wind_doc_h2/plant_config.yaml b/examples/17_splitter_wind_doc_h2/plant_config.yaml index d1b22d0c6..e8b95d3ce 100644 --- a/examples/17_splitter_wind_doc_h2/plant_config.yaml +++ b/examples/17_splitter_wind_doc_h2/plant_config.yaml @@ -1,14 +1,15 @@ name: "plant_config" description: "This plant is located in OR, USA" -site: - latitude: 43.807 - longitude: -124.81 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2010 +sites: + site: + latitude: 43.807 + longitude: -124.81 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2010 plant: plant_life: 30 diff --git a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml index bc19c6ece..85d95b551 100644 --- a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml @@ -6,11 +6,11 @@ sites: latitude: 35.2018863 longitude: -101.945027 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2012 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2012 plant: plant_life: 30 diff --git a/examples/19_simple_dispatch/plant_config.yaml b/examples/19_simple_dispatch/plant_config.yaml index d3fcc5839..b4f0390bd 100644 --- a/examples/19_simple_dispatch/plant_config.yaml +++ b/examples/19_simple_dispatch/plant_config.yaml @@ -6,11 +6,11 @@ sites: latitude: 35.2018863 longitude: -101.945027 - resources: - wind_resource: - resource_model: "WTKNRELDeveloperAPIWindResource" - resource_parameters: - resource_year: 2012 + resources: + wind_resource: + resource_model: "WTKNRELDeveloperAPIWindResource" + resource_parameters: + resource_year: 2012 plant: plant_life: 30 diff --git a/examples/20_solar_electrolyzer_doe/plant_config.yaml b/examples/20_solar_electrolyzer_doe/plant_config.yaml index 805537948..5958dcc9a 100644 --- a/examples/20_solar_electrolyzer_doe/plant_config.yaml +++ b/examples/20_solar_electrolyzer_doe/plant_config.yaml @@ -6,12 +6,12 @@ sites: latitude: 34.22 longitude: -102.75 - resources: - solar_resource: - resource_model: "GOESAggregatedSolarAPI" - resource_parameters: - resource_year: 2012 - resource_filename: "34.22_-102.75_2012_goes_aggregated_v4_60min_utc_tz.csv" + resources: + solar_resource: + resource_model: "GOESAggregatedSolarAPI" + resource_parameters: + resource_year: 2012 + resource_filename: "34.22_-102.75_2012_goes_aggregated_v4_60min_utc_tz.csv" # array of arrays containing left-to-right technology technology_interconnections: [ diff --git a/examples/22_site_doe/plant_config.yaml b/examples/22_site_doe/plant_config.yaml index b2c8cfee2..f691660ef 100644 --- a/examples/22_site_doe/plant_config.yaml +++ b/examples/22_site_doe/plant_config.yaml @@ -6,12 +6,12 @@ sites: latitude: 34.22 longitude: -102.75 - resources: - solar_resource: - resource_model: "GOESAggregatedSolarAPI" - resource_parameters: - resource_year: 2012 - use_fixed_resource_location: False #set to False since sweeping sites + resources: + solar_resource: + resource_model: "GOESAggregatedSolarAPI" + resource_parameters: + resource_year: 2012 + use_fixed_resource_location: False #set to False since sweeping sites resource_to_tech_connections: [ # connect the solar resource to the solar technology diff --git a/examples/23_solar_wind_ng_demand/plant_config.yaml b/examples/23_solar_wind_ng_demand/plant_config.yaml index 2f7ef0a80..70a590349 100644 --- a/examples/23_solar_wind_ng_demand/plant_config.yaml +++ b/examples/23_solar_wind_ng_demand/plant_config.yaml @@ -7,29 +7,29 @@ sites: longitude: -101.7096 year: 2013 - # array of polygons defining boundaries with x/y coords - boundaries: [ - { - x: [0.0, 1000.0, 1000.0, 0.0], - y: [0.0, 0.0, 100.0, 1000.0], - }, - { - x: [2000.0, 2500.0, 2000.0], - y: [2000.0, 2000.0, 2500.0], - } - ] + # array of polygons defining boundaries with x/y coords + boundaries: [ + { + x: [0.0, 1000.0, 1000.0, 0.0], + y: [0.0, 0.0, 100.0, 1000.0], + }, + { + x: [2000.0, 2500.0, 2000.0], + y: [2000.0, 2000.0, 2500.0], + } + ] - resources: - wind_resource: - resource_model: WTKNRELDeveloperAPIWindResource - resource_parameters: - resource_year: 2013 - solar_resource: - resource_model: GOESAggregatedSolarAPI - resource_parameters: - resource_year: 2013 - resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" - resource_filename: "30.6617_-101.7096_psmv3_60_2013.csv" + resources: + wind_resource: + resource_model: WTKNRELDeveloperAPIWindResource + resource_parameters: + resource_year: 2013 + solar_resource: + resource_model: GOESAggregatedSolarAPI + resource_parameters: + resource_year: 2013 + resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" + resource_filename: "30.6617_-101.7096_psmv3_60_2013.csv" # array of arrays containing left-to-right technology diff --git a/examples/24_solar_battery_grid/plant_config.yaml b/examples/24_solar_battery_grid/plant_config.yaml index cde4c5c6a..a78405ab1 100644 --- a/examples/24_solar_battery_grid/plant_config.yaml +++ b/examples/24_solar_battery_grid/plant_config.yaml @@ -6,13 +6,13 @@ sites: latitude: 32.34 longitude: -98.27 - resources: - solar_resource: - resource_model: "GOESAggregatedSolarAPI" - resource_parameters: - resource_year: 2013 - resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" - resource_filename: "30.6617_-101.7096_psmv3_60_2013.csv" + resources: + solar_resource: + resource_model: "GOESAggregatedSolarAPI" + resource_parameters: + resource_year: 2013 + resource_dir: "../11_hybrid_energy_plant/tech_inputs/weather/solar" + resource_filename: "30.6617_-101.7096_psmv3_60_2013.csv" # array of arrays containing left-to-right technology diff --git a/examples/27_site_doe_diff/plant_config.yaml b/examples/27_site_doe_diff/plant_config.yaml index f99cf6258..3c44233aa 100644 --- a/examples/27_site_doe_diff/plant_config.yaml +++ b/examples/27_site_doe_diff/plant_config.yaml @@ -7,7 +7,7 @@ sites: longitude: -101.945027 resources: wind_resource: #name of the resource model for the wind_site - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 use_fixed_resource_location: False #set to False so the resource data is updated when the site location changes in the design sweep @@ -16,7 +16,7 @@ sites: longitude: -102.75 resources: solar_resource: #name of the resource model for the solar_site - resource_model: "goes_aggregated_solar_v4_api" + resource_model: "GOESAggregatedSolarAPI" resource_parameters: resource_year: 2012 use_fixed_resource_location: False #set to False so the resource data is updated when the site location changes in the design sweep From 0df95a8267da46541b2983671cf2be99377cc8fe Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Mon, 26 Jan 2026 13:13:45 -0800 Subject: [PATCH 41/42] fix new examples --- examples/26_floris/tech_config.yaml | 6 +++--- examples/27_site_doe_diff/plant_config.yaml | 2 +- examples/27_site_doe_diff/tech_config.yaml | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/26_floris/tech_config.yaml b/examples/26_floris/tech_config.yaml index 788f9ce2b..14d309164 100644 --- a/examples/26_floris/tech_config.yaml +++ b/examples/26_floris/tech_config.yaml @@ -33,9 +33,9 @@ technologies: cost_year: 2022 utility_wind_plant: performance_model: - model: pysam_wind_plant_performance + model: PYSAMWindPlantPerformanceModel cost_model: - model: atb_wind_cost + model: ATBWindPlantCostModel model_inputs: performance_parameters: num_turbines: 20 @@ -63,7 +63,7 @@ technologies: cost_year: 2022 combiner: performance_model: - model: combiner_performance + model: GenericCombinerPerformanceModel model_inputs: performance_parameters: commodity: electricity diff --git a/examples/27_site_doe_diff/plant_config.yaml b/examples/27_site_doe_diff/plant_config.yaml index 3c44233aa..fd626df98 100644 --- a/examples/27_site_doe_diff/plant_config.yaml +++ b/examples/27_site_doe_diff/plant_config.yaml @@ -43,7 +43,7 @@ plant: finance_parameters: finance_groups: optimistic: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/27_site_doe_diff/tech_config.yaml b/examples/27_site_doe_diff/tech_config.yaml index 0b1ffc0bc..a0ada11f2 100644 --- a/examples/27_site_doe_diff/tech_config.yaml +++ b/examples/27_site_doe_diff/tech_config.yaml @@ -4,9 +4,9 @@ description: "This plant produces electricity from a solar-PV system" technologies: wind: performance_model: - model: "pysam_wind_plant_performance" + model: "PYSAMWindPlantPerformanceModel" cost_model: - model: "atb_wind_cost" + model: "ATBWindPlantCostModel" model_inputs: performance_parameters: num_turbines: 100 @@ -31,9 +31,9 @@ technologies: cost_year: 2019 solar: performance_model: - model: "pysam_solar_plant_performance" + model: "PYSAMSolarPlantPerformanceModel" cost_model: - model: "atb_utility_pv_cost" + model: "ATBUtilityPVCostModel" model_inputs: performance_parameters: pv_capacity_kWdc: 400000 @@ -58,7 +58,7 @@ technologies: cost_year: 2022 combiner: performance_model: - model: "combiner_performance" + model: GenericCombinerPerformanceModel model_inputs: performance_parameters: commodity: "electricity" From 51e2b1ee0466a37257ea5658e59da9f0c9f10c91 Mon Sep 17 00:00:00 2001 From: "Hammond, Rob" <13874373+RHammond2@users.noreply.github.com> Date: Tue, 27 Jan 2026 09:58:48 -0800 Subject: [PATCH 42/42] update new iron example and remove duplicate key --- examples/28_iron_map/plant_config.yaml | 2 +- examples/28_iron_map/tech_config.yaml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/28_iron_map/plant_config.yaml b/examples/28_iron_map/plant_config.yaml index 7217f3109..660a9ecb3 100644 --- a/examples/28_iron_map/plant_config.yaml +++ b/examples/28_iron_map/plant_config.yaml @@ -28,7 +28,7 @@ plant: plant_life: 30 finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/28_iron_map/tech_config.yaml b/examples/28_iron_map/tech_config.yaml index 6ef2e85e5..ab784d379 100644 --- a/examples/28_iron_map/tech_config.yaml +++ b/examples/28_iron_map/tech_config.yaml @@ -4,7 +4,7 @@ description: "This hybrid plant produces iron" technologies: iron: performance_model: - model: "iron" + model: IronComponent model_inputs: cost_parameters: # h2_kgpy: 68583942.6460997 #1000000 #68583942.6460997 @@ -14,7 +14,6 @@ technologies: iron_ore_product_selection: "drg_taconite_pellets" #"drg_taconite_pellets" or "std_taconite_pellets" reduced_iron_product_selection: "h2_dri" #"h2_dri" or "ng_dri" structural_iron_product_selection: "eaf_steel" #"eaf_steel" or "none" - structural_iron_product_selection: "none" #"eaf_steel" or "none" cost_year: 2020 reduced_iron_site_latitude: 41.717 reduced_iron_site_longitude: -88.398