diff --git a/.gitignore b/.gitignore index 2bd02cedf..5f62f0fa5 100644 --- a/.gitignore +++ b/.gitignore @@ -124,15 +124,20 @@ 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 examples/*/*_new.* examples/*/*[0-9].* *wind_electrolyzer/ tests/h2integrate/reports/ tests/h2integrate/test_hydrogen/output/ **/run_*_out/ +**/*_run/ *_out/ **/test_*_out/ +**/wind_electrolyzer/* docs/misc_resources/wind_electrolyzer/ docs/_autosummary diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d57dae78..1c8ea5f06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,10 @@ - Remove unused dependencies. - Fixes typos for skipped folders. - Fixes missing dependencies for `gis` modifier used in new iron mapping tests. - - Remove `pytest-subtests` as it's incorporated into pytest as of v9, and is an archived project. +- 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. +- Remove `pytest-subtests` as it's incorporated into pytest as of v9, and is an archived project. ## 0.5.1 [December 18, 2025] 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..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, `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 `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 `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/developer_guide/adding_a_new_technology.md b/docs/developer_guide/adding_a_new_technology.md index a30c4d6f0..81d0f24b1 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, + "PYSAMSolarPlantPerformanceModel" : 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, + "RunOfRiverHydroPerformanceModel": RunOfRiverHydroPerformanceModel, + "RunOfRiverHydroCostModel": RunOfRiverHydroCostModel, + "ECOElectrolyzerPerformanceModel": ECOElectrolyzerPerformanceModel, + "SingliticoCostModel": SingliticoCostModel, + "BasicElectrolyzerCostModel": BasicElectrolyzerCostModel, + "CustomElectrolyzerCostModel": CustomElectrolyzerCostModel, ... } @@ -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/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/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 9122dca50..71bfb4008 100644 --- a/docs/resource/solar_index.md +++ b/docs/resource/solar_index.md @@ -2,19 +2,18 @@ # 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" -- [OpenMeteo Historical Weather API](solar_resource:openmeteo_historical): this model does not require an NREL API key, the available model is: - - "openmeteo_solar_api" + - "MeteosatPrimeMeridianSolarAPI" + - "MeteosatPrimeMeridianTMYSolarAPI" + ```{note} Please refer to the [`Setting Environment Variables`](environment_variables:setting-environment-variables) doc page for information on setting up an NREL API key if you haven't yet. @@ -25,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/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/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/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/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/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/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/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/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/cost_years.md b/docs/user_guide/cost_years.md index 715d13c9e..713258981 100644 --- a/docs/user_guide/cost_years.md +++ b/docs/user_guide/cost_years.md @@ -11,18 +11,18 @@ 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 | -| `direct_ocean_capture_cost` | 2023 | -| `ocean_alkalinity_enhancement_cost` | 2024 | -| `ocean_alkalinity_enhancement_cost_financial` | 2024 | -| `steel_cost` | 2022 | -| `reverse_osmosis_desalination_cost` | 2013 | -| `synloop_ammonia_cost` | N/A (adjusts costs to `target_dollar_year` within cost model) | +| `DOCCostModel` | 2023 | +| `OAECostModel` | 2024 | +| `OAECostAndFinancialModel` | 2024 | +| `SteelCostAndFinancialModel` | 2022 | +| `ReverseOsmosisCostModel` | 2013 | +| `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 @@ -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` | -| `hopp` | -| `run_of_river_hydro_cost` | -| `smr_methanol_plant_cost` | +| `ATBUtilityPVCostModel` | +| `ATBResComPVCostModel` | +| `SimpleASUCostModel` | +| `HOPPComponent` | +| `RunOfRiverHydroCostModel` | +| `SMRMethanolPlantCostModel` | | `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/model_overview.md b/docs/user_guide/model_overview.md index 80eada037..e82e2cefa 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)= @@ -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 | @@ -91,147 +91,154 @@ 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 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 - `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'` + + `'HOPPComponent'` - `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'` - + `'templeton_serpentinization_geoh2_performance'` + + `'NaturalGeoH2PerformanceModel'` + + `'StimulatedGeoH2PerformanceModel'` - cost models: - + `'mathur_modified_geoh2_cost'` + + `'GeoH2SubsurfaceCostModel'` - `steel`: steel production - performance models: - + `'steel_performance'` - + `'ng_eaf_performance_rosner'` - + `'h2_eaf_performance_rosner'` + + `'SteelPerformanceModel'` + + `'NaturalGasEAFPlantPerformanceComponent'` + + `'HydrogenEAFPlantPerformanceComponent'` - combined cost and financial models: - + `'steel_cost'` + + `'SteelCostAndFinancialModel'` - cost models: - + `'ng_eaf_cost_rosner'` - + `'h2_eaf_cost_rosner'` + + `'NaturalGasEAFPlantCostComponent'` + + `'HydrogenEAFPlantCostComponent'` - `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'` + + `'DOCPerformanceModel'` - cost models: - + `'direct_ocean_capture_cost'` + + `'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: - + `'smr_methanol_plant_performance'` + + `'SMRMethanolPlantPerformanceModel'` - cost models: - + `'smr_methanol_plant_cost'` + + `'SMRMethanolPlantCostModel'` - financial models: + `'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'` + + `'ReverseOsmosisPerformanceModel'` - cost models: - + `'reverse_osmosis_desalination_cost'` + + `'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'` + + `'GridPerformanceModel'` - cost models: - + `'grid_cost'` + + `'GridCostModel'` - `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'` - + `'h2_dri_performance_rosner'` + + `'NaturalGasIronReductionPlantPerformanceComponent'` + + `'HydrogenIronReductionPlantPerformanceComponent'` - cost models: - + `'ng_dri_cost_rosner'` - + `'h2_dri_cost_rosner'` + + `'NaturalGasIronReductionPlantCostComponent'` + + `'HydrogenIronReductionPlantCostComponent'` (transport-models)= ## Transport Models @@ -243,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 @@ -254,21 +261,21 @@ 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'` - + `'mch_tol_h2_storage_cost'` - + `'buried_pipe_h2_storage_cost'` + + `'LinedRockCavernStorageCostModel'` + + `'SaltCavernStorageCostModel'` + + `'MCHTOLStorageCostModel'` + + `'PipeStorageCostModel'` - `generic_storage`: any resource storage - performance models: - + `'simple_generic_storage'` - + `'storage_auto_sizing'` + + `'SimpleGenericStorage'` + + `'StorageAutoSizingModel'` - cost models: - + `'generic_storage_cost'` + + `'GenericStorageCostModel'` - `battery`: battery storage - performance models: - + `'pysam_battery'` + + `'PySAMBatteryPerformanceModel'` - cost models: - + `'atb_battery_cost'` + + `'ATBBatteryCostModel'` (basic-operations)= ## Basic Operations @@ -278,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/docs/user_guide/postprocessing_results.md b/docs/user_guide/postprocessing_results.md index 5c1e47578..1a3efe176 100644 --- a/docs/user_guide/postprocessing_results.md +++ b/docs/user_guide/postprocessing_results.md @@ -19,17 +19,17 @@ 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 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 @@ -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 @@ -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/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 3d6921f3b..8b3a33fcb 100644 --- a/examples/01_onshore_steel_mn/plant_config.yaml +++ b/examples/01_onshore_steel_mn/plant_config.yaml @@ -7,12 +7,12 @@ sites: 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" @@ -48,7 +48,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/01_onshore_steel_mn/tech_config.yaml b/examples/01_onshore_steel_mn/tech_config.yaml index 58017fca9..22811d68a 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 @@ -59,9 +59,9 @@ technologies: combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: commodity: "electricity" @@ -72,13 +72,13 @@ technologies: battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" @@ -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" @@ -130,11 +130,11 @@ technologies: h2_storage: performance_model: - model: "storage_auto_sizing" + model: "StorageAutoSizingModel" control_strategy: - model: "pass_through_controller" + model: "PassThroughOpenLoopController" cost_model: - model: "lined_rock_cavern_h2_storage_cost" + model: "LinedRockCavernStorageCostModel" model_inputs: shared_parameters: commodity_name: "hydrogen" @@ -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/examples/02_texas_ammonia/plant_config.yaml b/examples/02_texas_ammonia/plant_config.yaml index 85c981031..c453fa943 100644 --- a/examples/02_texas_ammonia/plant_config.yaml +++ b/examples/02_texas_ammonia/plant_config.yaml @@ -7,12 +7,12 @@ sites: 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 @@ -43,7 +43,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/02_texas_ammonia/tech_config.yaml b/examples/02_texas_ammonia/tech_config.yaml index 60a838b80..cc7c63e4c 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 @@ -58,9 +58,9 @@ technologies: cost_year: 2019 combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: commodity: "electricity" @@ -70,13 +70,13 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" @@ -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" @@ -128,11 +128,11 @@ technologies: h2_storage: performance_model: - model: "storage_auto_sizing" + model: "StorageAutoSizingModel" control_strategy: - model: "pass_through_controller" + model: "PassThroughOpenLoopController" cost_model: - model: "salt_cavern_h2_storage_cost" + model: "SaltCavernStorageCostModel" model_inputs: shared_parameters: commodity_name: "hydrogen" diff --git a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml index c04269230..9c8b6d4b1 100644 --- a/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation/plant_config_co2h.yaml @@ -7,11 +7,11 @@ sites: 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 @@ -38,7 +38,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/tech_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation/tech_config_co2h.yaml index d601279b1..a96beb5d5 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 @@ -47,16 +47,16 @@ technologies: cost_year: 2019 combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" model_inputs: performance_parameters: commodity: "electricity" 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" @@ -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/plant_config_co2h.yaml b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml index 18818cbde..290163998 100644 --- a/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml +++ b/examples/03_methanol/co2_hydrogenation_doc/plant_config_co2h.yaml @@ -7,7 +7,7 @@ sites: longitude: -94.6 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2013 @@ -36,7 +36,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/co2_hydrogenation_doc/plot_co2h_methanol.py b/examples/03_methanol/co2_hydrogenation_doc/plot_co2h_methanol.py index f6960d6f5..2f96c3e72 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( @@ -46,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]], @@ -103,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 37185a5c0..2a0996c1b 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 @@ -45,7 +45,7 @@ technologies: cost_year: 2019 electricity_splitter: performance_model: - model: "splitter_performance" + model: "GenericSplitterPerformanceModel" model_inputs: performance_parameters: commodity: "electricity" @@ -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" @@ -75,11 +75,11 @@ 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: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "hydrogen" @@ -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 @@ -128,11 +128,11 @@ 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: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "co2" @@ -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/examples/03_methanol/smr/plant_config_smr.yaml b/examples/03_methanol/smr/plant_config_smr.yaml index e91d49e60..e293540b9 100644 --- a/examples/03_methanol/smr/plant_config_smr.yaml +++ b/examples/03_methanol/smr/plant_config_smr.yaml @@ -20,7 +20,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" commodity: "methanol" model_inputs: params: 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/examples/04_geo_h2/plant_config_natural.yaml b/examples/04_geo_h2/plant_config_natural.yaml index 1d9186e1f..c85ff6932 100644 --- a/examples/04_geo_h2/plant_config_natural.yaml +++ b/examples/04_geo_h2/plant_config_natural.yaml @@ -16,7 +16,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 30fdb8ffc..14c84abbf 100644 --- a/examples/04_geo_h2/plant_config_stimulated.yaml +++ b/examples/04_geo_h2/plant_config_stimulated.yaml @@ -12,7 +12,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/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/examples/05_wind_h2_opt/plant_config.yaml b/examples/05_wind_h2_opt/plant_config.yaml index 8fd8bbb65..dbb6d0026 100644 --- a/examples/05_wind_h2_opt/plant_config.yaml +++ b/examples/05_wind_h2_opt/plant_config.yaml @@ -8,7 +8,7 @@ sites: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 @@ -29,7 +29,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/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 b2c9c2aaf..b418602a9 100644 --- a/examples/06_custom_tech/plant_config.yaml +++ b/examples/06_custom_tech/plant_config.yaml @@ -8,7 +8,7 @@ sites: 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 ef8b775b8..8cbf4bef4 100644 --- a/examples/07_run_of_river_plant/plant_config.yaml +++ b/examples/07_run_of_river_plant/plant_config.yaml @@ -8,7 +8,7 @@ sites: resources: river_resource: - resource_model: "river_resource" + resource_model: "RiverResource" resource_parameters: filename: "river_data.csv" @@ -34,7 +34,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/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 39dd90b37..9dc648e27 100644 --- a/examples/08_wind_electrolyzer/plant_config.yaml +++ b/examples/08_wind_electrolyzer/plant_config.yaml @@ -8,7 +8,7 @@ sites: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 @@ -37,7 +37,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/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 6c9d794bf..4c11b9a91 100644 --- a/examples/09_co2/direct_ocean_capture/plant_config.yaml +++ b/examples/09_co2/direct_ocean_capture/plant_config.yaml @@ -7,7 +7,7 @@ sites: longitude: -124.81 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2010 @@ -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/09_co2/direct_ocean_capture/tech_config.yaml b/examples/09_co2/direct_ocean_capture/tech_config.yaml index 28db428f6..dad6870c1 100644 --- a/examples/09_co2/direct_ocean_capture/tech_config.yaml +++ b/examples/09_co2/direct_ocean_capture/tech_config.yaml @@ -4,11 +4,11 @@ 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: "PyomoDispatchGenericConverter" model_inputs: shared_parameters: cost_year: 2022 @@ -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 @@ -51,9 +51,9 @@ technologies: combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: commodity: "electricity" @@ -63,13 +63,13 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" @@ -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/09_co2/ocean_alkalinity_enhancement/plant_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml index 93b7467a1..9a669ed19 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/plant_config.yaml @@ -8,7 +8,7 @@ sites: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2010 @@ -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/09_co2/ocean_alkalinity_enhancement/tech_config.yaml b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml index e98836827..7670f0f98 100644 --- a/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml +++ b/examples/09_co2/ocean_alkalinity_enhancement/tech_config.yaml @@ -4,11 +4,11 @@ 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: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: num_turbines: 22 #number of turbines in the farm @@ -40,13 +40,13 @@ technologies: battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" @@ -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/plant_config_financials.yaml b/examples/09_co2/ocean_alkalinity_enhancement_financials/plant_config_financials.yaml index 8167820db..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 @@ -7,7 +7,7 @@ sites: longitude: -122.774111 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2013 @@ -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/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml b/examples/09_co2/ocean_alkalinity_enhancement_financials/tech_config_financials.yaml index 81dd80988..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 @@ -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 @@ -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/examples/10_electrolyzer_om/plant_config.yaml b/examples/10_electrolyzer_om/plant_config.yaml index eaa2fa14c..d7cbbdefa 100644 --- a/examples/10_electrolyzer_om/plant_config.yaml +++ b/examples/10_electrolyzer_om/plant_config.yaml @@ -8,7 +8,7 @@ sites: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 @@ -31,7 +31,7 @@ resource_to_tech_connections: [ finance_parameters: finance_groups: lcoe_financials: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 @@ -53,7 +53,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/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/11_hybrid_energy_plant/plant_config.yaml b/examples/11_hybrid_energy_plant/plant_config.yaml index 209b10a0f..4f3c43211 100644 --- a/examples/11_hybrid_energy_plant/plant_config.yaml +++ b/examples/11_hybrid_energy_plant/plant_config.yaml @@ -12,7 +12,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/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/12_ammonia_synloop/plant_config.yaml b/examples/12_ammonia_synloop/plant_config.yaml index aa4c7ed74..3b668c8fc 100644 --- a/examples/12_ammonia_synloop/plant_config.yaml +++ b/examples/12_ammonia_synloop/plant_config.yaml @@ -7,12 +7,12 @@ sites: 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 @@ -43,7 +43,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/12_ammonia_synloop/tech_config.yaml b/examples/12_ammonia_synloop/tech_config.yaml index d239f1e65..ea41e075a 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 @@ -58,9 +58,9 @@ technologies: cost_year: 2019 combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" dispatch_rule_set: - model: "pyomo_dispatch_generic_converter" + model: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: commodity: "electricity" @@ -70,13 +70,13 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" model_inputs: shared_parameters: commodity_name: "electricity" @@ -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" @@ -128,11 +128,11 @@ technologies: h2_storage: performance_model: - model: "storage_auto_sizing" + model: "StorageAutoSizingModel" control_strategy: - model: "pass_through_controller" + model: "PassThroughOpenLoopController" cost_model: - model: "salt_cavern_h2_storage_cost" + model: "SaltCavernStorageCostModel" model_inputs: shared_parameters: commodity_name: "hydrogen" @@ -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/14_wind_hydrogen_dispatch/inputs/plant_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml index 4a50e5393..8dfff6c99 100644 --- a/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml +++ b/examples/14_wind_hydrogen_dispatch/inputs/plant_config.yaml @@ -5,9 +5,11 @@ sites: site: latitude: 35.2018863 longitude: -101.945027 + + resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 @@ -30,7 +32,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2030 diff --git a/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml b/examples/14_wind_hydrogen_dispatch/inputs/tech_config.yaml index 0399f13bd..28f0cfe81 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" @@ -53,11 +53,11 @@ 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: "lined_rock_cavern_h2_storage_cost" + model: "LinedRockCavernStorageCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "hydrogen" diff --git a/examples/15_wind_solar_electrolyzer/plant_config.yaml b/examples/15_wind_solar_electrolyzer/plant_config.yaml index 547c12366..8dda56ee8 100644 --- a/examples/15_wind_solar_electrolyzer/plant_config.yaml +++ b/examples/15_wind_solar_electrolyzer/plant_config.yaml @@ -7,7 +7,7 @@ sites: longitude: -101.7096 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" @@ -17,9 +17,10 @@ sites: longitude: -101.945027 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 + # array of arrays containing left-to-right technology # interconnections; can support bidirectional connections # with the reverse definition. @@ -43,7 +44,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/15_wind_solar_electrolyzer/tech_config.yaml b/examples/15_wind_solar_electrolyzer/tech_config.yaml index d49b5d39e..0652f8f26 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 @@ -59,16 +59,16 @@ technologies: cost_year: 2024 combiner: performance_model: - model: "combiner_performance" + model: "GenericCombinerPerformanceModel" model_inputs: performance_parameters: commodity: "electricity" 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 bab30c790..9ed837c7a 100644 --- a/examples/16_natural_gas/plant_config.yaml +++ b/examples/16_natural_gas/plant_config.yaml @@ -8,7 +8,7 @@ sites: 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" @@ -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/16_natural_gas/tech_config.yaml b/examples/16_natural_gas/tech_config.yaml index d14a761ca..d1dc5e313 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 @@ -32,11 +32,11 @@ technologies: cost_year: 2024 battery: performance_model: - model: "simple_generic_storage" + model: "SimpleGenericStorage" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "electricity" @@ -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" @@ -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/17_splitter_wind_doc_h2/plant_config.yaml b/examples/17_splitter_wind_doc_h2/plant_config.yaml index 6b17dd3ca..e8b95d3ce 100644 --- a/examples/17_splitter_wind_doc_h2/plant_config.yaml +++ b/examples/17_splitter_wind_doc_h2/plant_config.yaml @@ -7,7 +7,7 @@ sites: longitude: -124.81 resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2010 @@ -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/17_splitter_wind_doc_h2/tech_config.yaml b/examples/17_splitter_wind_doc_h2/tech_config.yaml index 202058873..620154706 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 @@ -34,7 +34,7 @@ technologies: electricity_splitter: performance_model: - model: "splitter_performance" + model: "GenericSplitterPerformanceModel" model_inputs: performance_parameters: split_mode: "fraction" @@ -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 @@ -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 24bf4db59..85d95b551 100644 --- a/examples/18_pyomo_heuristic_dispatch/plant_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/plant_config.yaml @@ -8,7 +8,7 @@ sites: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 @@ -39,7 +39,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/18_pyomo_heuristic_dispatch/tech_config.yaml b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml index 894100722..70f5029ae 100644 --- a/examples/18_pyomo_heuristic_dispatch/tech_config.yaml +++ b/examples/18_pyomo_heuristic_dispatch/tech_config.yaml @@ -4,11 +4,11 @@ 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: "PyomoDispatchGenericConverter" model_inputs: performance_parameters: num_turbines: 100 @@ -36,13 +36,13 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: - model: "pysam_battery" + 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 22d2d88b7..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 @@ -4,11 +4,11 @@ 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: "PyomoDispatchGenericConverter" resource: type: "pysam_wind" wind_speed: 9. @@ -39,13 +39,13 @@ technologies: commodity_storage_units: "kW" battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" control_strategy: - model: "heuristic_load_following_controller" + model: "HeuristicLoadFollowingController" performance_model: - model: "pysam_battery" + 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/plant_config.yaml b/examples/19_simple_dispatch/plant_config.yaml index 11cc78992..b4f0390bd 100644 --- a/examples/19_simple_dispatch/plant_config.yaml +++ b/examples/19_simple_dispatch/plant_config.yaml @@ -8,7 +8,7 @@ sites: resources: wind_resource: - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 @@ -32,7 +32,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/19_simple_dispatch/tech_config.yaml b/examples/19_simple_dispatch/tech_config.yaml index 264660ca8..c015ab638 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 @@ -31,11 +31,11 @@ technologies: cost_year: 2019 battery: performance_model: - model: "simple_generic_storage" + model: "SimpleGenericStorage" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "electricity" diff --git a/examples/20_solar_electrolyzer_doe/plant_config.yaml b/examples/20_solar_electrolyzer_doe/plant_config.yaml index 4f9fc4aa3..5958dcc9a 100644 --- a/examples/20_solar_electrolyzer_doe/plant_config.yaml +++ b/examples/20_solar_electrolyzer_doe/plant_config.yaml @@ -8,7 +8,7 @@ sites: 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" @@ -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/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/21_iron_mn_to_il/plant_config.yaml b/examples/21_iron_mn_to_il/plant_config.yaml index 1ef70a6fa..affd90814 100644 --- a/examples/21_iron_mn_to_il/plant_config.yaml +++ b/examples/21_iron_mn_to_il/plant_config.yaml @@ -35,7 +35,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 e584c23a7..272c98bd2 100644 --- a/examples/21_iron_mn_to_il/plant_config_old.yaml +++ b/examples/21_iron_mn_to_il/plant_config_old.yaml @@ -20,7 +20,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/21_iron_mn_to_il/tech_config.yaml b/examples/21_iron_mn_to_il/tech_config.yaml index eca484274..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" @@ -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" @@ -49,9 +49,9 @@ technologies: iron_transport: performance_model: - model: "iron_transport_performance" + model: "IronTransportPerformanceComponent" cost_model: - model: "iron_transport_cost" + model: "IronTransportCostComponent" model_inputs: performance_parameters: find_closest_ship_site: False @@ -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" @@ -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 @@ -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" @@ -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/examples/21_iron_mn_to_il/tech_config_old.yaml b/examples/21_iron_mn_to_il/tech_config_old.yaml index afe79faf9..d2fb545d6 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" @@ -31,9 +31,9 @@ technologies: debt interest rate: 0.050049 iron_transport: performance_model: - model: "iron_transport_performance" + model: "IronTransportPerformanceComponent" cost_model: - model: "iron_transport_cost" + model: "IronTransportCostComponent" model_inputs: performance_parameters: find_closest_ship_site: False @@ -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/examples/22_site_doe/plant_config.yaml b/examples/22_site_doe/plant_config.yaml index f79ccf29a..f691660ef 100644 --- a/examples/22_site_doe/plant_config.yaml +++ b/examples/22_site_doe/plant_config.yaml @@ -8,7 +8,7 @@ sites: 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 @@ -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/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..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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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/plant_config.yaml b/examples/23_solar_wind_ng_demand/plant_config.yaml index d00883391..70a590349 100644 --- a/examples/23_solar_wind_ng_demand/plant_config.yaml +++ b/examples/23_solar_wind_ng_demand/plant_config.yaml @@ -7,13 +7,25 @@ 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], + } + ] + 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" @@ -47,7 +59,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/23_solar_wind_ng_demand/tech_config.yaml b/examples/23_solar_wind_ng_demand/tech_config.yaml index c57633c00..3bafb8e92 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 @@ -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 @@ -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 @@ -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 @@ -105,7 +105,7 @@ technologies: combiner: performance_model: - model: combiner_performance + model: GenericCombinerPerformanceModel model_inputs: performance_parameters: commodity: electricity diff --git a/examples/24_solar_battery_grid/plant_config.yaml b/examples/24_solar_battery_grid/plant_config.yaml index 7c32d3ec1..a78405ab1 100644 --- a/examples/24_solar_battery_grid/plant_config.yaml +++ b/examples/24_solar_battery_grid/plant_config.yaml @@ -8,7 +8,7 @@ sites: 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" @@ -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/24_solar_battery_grid/tech_config.yaml b/examples/24_solar_battery_grid/tech_config.yaml index 48dc0bc50..d815a109e 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 @@ -32,11 +32,11 @@ technologies: cost_year: 2024 battery: performance_model: - model: "simple_generic_storage" + model: "SimpleGenericStorage" cost_model: - model: "atb_battery_cost" + model: "ATBBatteryCostModel" control_strategy: - model: "demand_open_loop_storage_controller" + model: "DemandOpenLoopStorageController" model_inputs: shared_parameters: commodity_name: "electricity" @@ -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/examples/25_sizing_modes/plant_config.yaml b/examples/25_sizing_modes/plant_config.yaml index 5b3d1b0c9..348d5bf49 100644 --- a/examples/25_sizing_modes/plant_config.yaml +++ b/examples/25_sizing_modes/plant_config.yaml @@ -20,7 +20,7 @@ plant: finance_parameters: finance_groups: - finance_model: "ProFastComp" + finance_model: "ProFastLCO" model_inputs: params: analysis_start_year: 2032 diff --git a/examples/25_sizing_modes/tech_config.yaml b/examples/25_sizing_modes/tech_config.yaml index 9914dc7ea..336d9c68b 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" @@ -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 @@ -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/examples/26_floris/plant_config.yaml b/examples/26_floris/plant_config.yaml index 78cfdfb29..b35f26d16 100644 --- a/examples/26_floris/plant_config.yaml +++ b/examples/26_floris/plant_config.yaml @@ -7,7 +7,7 @@ sites: longitude: -95.19757 resources: wind_resource: #name of the resource model for this site - resource_model: "openmeteo_wind_api" + resource_model: "OpenMeteoHistoricalWindResource" resource_parameters: resource_year: 2023 utility_wind_site: #name of the site for the utility_wind_plant technology @@ -15,7 +15,7 @@ sites: longitude: -101.945027 resources: wind_resource: #name of the resource model for this site - resource_model: "wind_toolkit_v2_api" + resource_model: "WTKNRELDeveloperAPIWindResource" resource_parameters: resource_year: 2012 @@ -38,7 +38,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/26_floris/tech_config.yaml b/examples/26_floris/tech_config.yaml index 300351163..14d309164 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: distributed_wind_plant: 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 @@ -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 f99cf6258..fd626df98 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 @@ -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" 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 diff --git a/h2integrate/control/control_strategies/pyomo_controllers.py b/h2integrate/control/control_strategies/pyomo_controllers.py index 70f4063b5..cba5ba9b3 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 6d4864704..2ca027670 100644 --- a/h2integrate/control/test/inputs/tech_config.yaml +++ b/h2integrate/control/test/inputs/tech_config.yaml @@ -4,11 +4,11 @@ description: "This hybrid plant produces hydrogen" technologies: h2_storage: control_strategy: - model: "pass_through_controller" + model: "PassThroughOpenLoopController" performance_model: - model: "storage_auto_sizing" + model: "StorageAutoSizingModel" cost_model: - model: "lined_rock_cavern_h2_storage_cost" + model: "LinedRockCavernStorageCostModel" model_inputs: shared_parameters: commodity_name: "hydrogen" diff --git a/h2integrate/control/test/test_openloop_controllers.py b/h2integrate/control/test/test_openloop_controllers.py index 8c06259e1..68f154bd1 100644 --- a/h2integrate/control/test/test_openloop_controllers.py +++ b/h2integrate/control/test/test_openloop_controllers.py @@ -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"] = { @@ -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 @@ -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,10 +273,10 @@ 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", + "model": "DemandOpenLoopStorageController", }, "model_inputs": { "shared_parameters": { @@ -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 @@ -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": { @@ -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", + "flexible_demand_open_loop_converter_controller", 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 995c8f416..bb8a774a7 100644 --- a/h2integrate/control/test/test_pyomo_controllers.py +++ b/h2integrate/control/test/test_pyomo_controllers.py @@ -34,9 +34,9 @@ "description": "...", "technologies": { "battery": { - "dispatch_rule_set": {"model": "pyomo_dispatch_generic_storage"}, - "control_strategy": {"model": "heuristic_load_following_controller"}, - "performance_model": {"model": "pysam_battery"}, + "dispatch_rule_set": {"model": "PyomoRuleStorageBaseclass"}, + "control_strategy": {"model": "HeuristicLoadFollowingController"}, + "performance_model": {"model": "PySAMBatteryPerformanceModel"}, "model_inputs": { "shared_parameters": { "max_charge_rate": 50000, @@ -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/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 2cbeb9540..516f78eef 100644 --- a/h2integrate/core/h2integrate_model.py +++ b/h2integrate/core/h2integrate_model.py @@ -409,7 +409,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 = [ + "HOPPComponent", + "h2_storage", + "WOMBATElectrolyzerModel", + "IronComponent", + ] if any(tech == "site" for tech in self.technology_config["technologies"]): msg = ( @@ -433,7 +438,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, @@ -522,7 +527,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, @@ -605,7 +610,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() @@ -734,7 +739,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 @@ -899,13 +904,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 e030c2c45..81b761245 100644 --- a/h2integrate/core/supported_models.py +++ b/h2integrate/core/supported_models.py @@ -39,7 +39,6 @@ IronTransportPerformanceComponent, ) from h2integrate.converters.nitrogen.simple_ASU import SimpleASUCostModel, SimpleASUPerformanceModel -from h2integrate.resource.solar.openmeteo_solar import OpenMeteoHistoricalSolarResource from h2integrate.storage.simple_generic_storage import SimpleGenericStorage from h2integrate.converters.hydrogen.wombat_model import WOMBATElectrolyzerModel from h2integrate.converters.steel.steel_eaf_plant import ( @@ -153,113 +152,112 @@ 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, - "openmeteo_solar_api": OpenMeteoHistoricalSolarResource, + "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, - "hopp": HOPPComponent, - "iron": IronComponent, - "iron_mine_performance": IronMinePerformanceComponent, - "iron_mine_cost": IronMineCostComponent, - "iron_plant_performance": IronPlantPerformanceComponent, - "iron_plant_cost": IronPlantCostComponent, - "iron_mine_performance_martin": MartinIronMinePerformanceComponent, # standalone model - "iron_mine_cost_martin": 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 - "ng_eaf_performance_rosner": NaturalGasEAFPlantPerformanceComponent, - "ng_eaf_cost_rosner": NaturalGasEAFPlantCostComponent, # standalone model - "h2_eaf_performance_rosner": HydrogenEAFPlantPerformanceComponent, - "h2_eaf_cost_rosner": HydrogenEAFPlantCostComponent, # standalone model - "reverse_osmosis_desalination_performance": ReverseOsmosisPerformanceModel, - "reverse_osmosis_desalination_cost": ReverseOsmosisCostModel, + "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, + "HOPPComponent": HOPPComponent, + "IronComponent": IronComponent, + "IronMinePerformanceComponent": IronMinePerformanceComponent, + "IronMineCostComponent": IronMineCostComponent, + "IronPlantPerformanceComponent": IronPlantPerformanceComponent, + "IronPlantCostComponent": IronPlantCostComponent, + "MartinIronMinePerformanceComponent": MartinIronMinePerformanceComponent, # standalone model + "MartinIronMineCostComponent": MartinIronMineCostComponent, # standalone model + "NaturalGasIronReductionPlantPerformanceComponent": NaturalGasIronReductionPlantPerformanceComponent, # noqa: E501 + "NaturalGasIronReductionPlantCostComponent": NaturalGasIronReductionPlantCostComponent, # standalone model # noqa: E501 + "HydrogenIronReductionPlantPerformanceComponent": HydrogenIronReductionPlantPerformanceComponent, # noqa: E501 + "HydrogenIronReductionPlantCostComponent": HydrogenIronReductionPlantCostComponent, # standalone model # noqa: E501 + "NaturalGasEAFPlantPerformanceComponent": NaturalGasEAFPlantPerformanceComponent, + "NaturalGasEAFPlantCostComponent": NaturalGasEAFPlantCostComponent, # standalone model + "HydrogenEAFPlantPerformanceComponent": HydrogenEAFPlantPerformanceComponent, + "HydrogenEAFPlantCostComponent": HydrogenEAFPlantCostComponent, # standalone model + "ReverseOsmosisPerformanceModel": ReverseOsmosisPerformanceModel, + "ReverseOsmosisCostModel": ReverseOsmosisCostModel, "simple_ammonia_performance": SimpleAmmoniaPerformanceModel, "simple_ammonia_cost": SimpleAmmoniaCostModel, - "synloop_ammonia_performance": AmmoniaSynLoopPerformanceModel, - "synloop_ammonia_cost": AmmoniaSynLoopCostModel, - "steel_performance": SteelPerformanceModel, - "steel_cost": SteelCostAndFinancialModel, - "smr_methanol_plant_performance": SMRMethanolPlantPerformanceModel, - "smr_methanol_plant_cost": SMRMethanolPlantCostModel, - "smr_methanol_plant_financial": SMRMethanolPlantFinanceModel, - "co2h_methanol_plant_performance": CO2HMethanolPlantPerformanceModel, - "co2h_methanol_plant_cost": CO2HMethanolPlantCostModel, - "co2h_methanol_plant_financial": CO2HMethanolPlantFinanceModel, - "direct_ocean_capture_performance": DOCPerformanceModel, - "direct_ocean_capture_cost": DOCCostModel, - "ocean_alkalinity_enhancement_performance": OAEPerformanceModel, - "ocean_alkalinity_enhancement_cost": OAECostModel, - "ocean_alkalinity_enhancement_cost_financial": OAECostAndFinancialModel, - "simple_natural_geoh2_performance": NaturalGeoH2PerformanceModel, - "templeton_serpentinization_geoh2_performance": StimulatedGeoH2PerformanceModel, - "mathur_modified_geoh2_cost": GeoH2SubsurfaceCostModel, - "aspen_geoh2_performance": AspenGeoH2SurfacePerformanceModel, - "aspen_geoh2_cost": AspenGeoH2SurfaceCostModel, - "natural_gas_performance": NaturalGasPerformanceModel, - "natural_gas_cost": NaturalGasCostModel, + "AmmoniaSynLoopPerformanceModel": AmmoniaSynLoopPerformanceModel, + "AmmoniaSynLoopCostModel": AmmoniaSynLoopCostModel, + "SteelPerformanceModel": SteelPerformanceModel, + "SteelCostAndFinancialModel": SteelCostAndFinancialModel, + "SMRMethanolPlantPerformanceModel": SMRMethanolPlantPerformanceModel, + "SMRMethanolPlantCostModel": SMRMethanolPlantCostModel, + "SMRMethanolPlantFinanceModel": SMRMethanolPlantFinanceModel, + "CO2HMethanolPlantPerformanceModel": CO2HMethanolPlantPerformanceModel, + "CO2HMethanolPlantCostModel": CO2HMethanolPlantCostModel, + "CO2HMethanolPlantFinanceModel": CO2HMethanolPlantFinanceModel, + "DOCPerformanceModel": DOCPerformanceModel, + "DOCCostModel": DOCCostModel, + "OAEPerformanceModel": OAEPerformanceModel, + "OAECostModel": OAECostModel, + "OAECostAndFinancialModel": OAECostAndFinancialModel, + "NaturalGeoH2PerformanceModel": NaturalGeoH2PerformanceModel, + "StimulatedGeoH2PerformanceModel": StimulatedGeoH2PerformanceModel, + "GeoH2SubsurfaceCostModel": GeoH2SubsurfaceCostModel, + "AspenGeoH2SurfacePerformanceModel": AspenGeoH2SurfacePerformanceModel, + "AspenGeoH2SurfaceCostModel": AspenGeoH2SurfaceCostModel, + "NaturalGasPerformanceModel": NaturalGasPerformanceModel, + "NaturalGasCostModel": NaturalGasCostModel, # Transport "cable": CablePerformanceModel, "pipe": PipePerformanceModel, - "combiner_performance": GenericCombinerPerformanceModel, - "splitter_performance": GenericSplitterPerformanceModel, - "iron_transport_performance": IronTransportPerformanceComponent, - "iron_transport_cost": IronTransportCostComponent, + "GenericCombinerPerformanceModel": GenericCombinerPerformanceModel, + "GenericSplitterPerformanceModel": GenericSplitterPerformanceModel, + "IronTransportPerformanceComponent": IronTransportPerformanceComponent, + "IronTransportCostComponent": IronTransportCostComponent, # Simple Summers - "summer": GenericSummerPerformanceModel, + "GenericSummerPerformanceModel": GenericSummerPerformanceModel, # Storage - "pysam_battery": PySAMBatteryPerformanceModel, - "storage_auto_sizing": StorageAutoSizingModel, - "lined_rock_cavern_h2_storage_cost": LinedRockCavernStorageCostModel, - "salt_cavern_h2_storage_cost": SaltCavernStorageCostModel, - "mch_tol_h2_storage_cost": MCHTOLStorageCostModel, - "buried_pipe_h2_storage_cost": PipeStorageCostModel, - "atb_battery_cost": ATBBatteryCostModel, - "generic_storage_cost": GenericStorageCostModel, - "simple_generic_storage": SimpleGenericStorage, + "PySAMBatteryPerformanceModel": PySAMBatteryPerformanceModel, + "StorageAutoSizingModel": StorageAutoSizingModel, + "LinedRockCavernStorageCostModel": LinedRockCavernStorageCostModel, + "SaltCavernStorageCostModel": SaltCavernStorageCostModel, + "MCHTOLStorageCostModel": MCHTOLStorageCostModel, + "PipeStorageCostModel": PipeStorageCostModel, + "ATBBatteryCostModel": ATBBatteryCostModel, + "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, + "PyomoDispatchGenericConverter": PyomoDispatchGenericConverter, + "PyomoRuleStorageBaseclass": PyomoRuleStorageBaseclass, # Feedstock - "feedstock_performance": FeedstockPerformanceModel, - "feedstock_cost": FeedstockCostModel, + "FeedstockPerformanceModel": FeedstockPerformanceModel, + "FeedstockCostModel": FeedstockCostModel, # Grid - "grid_performance": GridPerformanceModel, - "grid_cost": GridCostModel, + "GridPerformanceModel": GridPerformanceModel, + "GridCostModel": GridCostModel, # Finance - "ProFastComp": ProFastLCO, + "ProFastLCO": ProFastLCO, "ProFastNPV": ProFastNPV, "NumpyFinancialNPV": NumpyFinancialNPV, } diff --git a/h2integrate/core/test/test_framework.py b/h2integrate/core/test/test_framework.py index a4cbab556..2c7d6d5f4 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/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 0eb674df8..cd4dac8e1 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() 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 210a0e350..7deb4f1ff 100644 --- a/h2integrate/resource/solar/test/test_pvwatts_integration.py +++ b/h2integrate/resource/solar/test/test_pvwatts_integration.py @@ -131,7 +131,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", }, @@ -149,7 +149,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, }, @@ -167,7 +167,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 0928e08e6..2ef02994d 100644 --- a/h2integrate/resource/wind/test/test_nrel_developer_wtk_api.py +++ b/h2integrate/resource/wind/test/test_nrel_developer_wtk_api.py @@ -44,7 +44,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 2e7f49840..b0d538760 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, }, diff --git a/h2integrate/storage/battery/test/test_battery_cost.py b/h2integrate/storage/battery/test/test_battery_cost.py index 2fdd8fa84..541c79d4f 100644 --- a/h2integrate/storage/battery/test/test_battery_cost.py +++ b/h2integrate/storage/battery/test/test_battery_cost.py @@ -29,9 +29,9 @@ def electricity_profile_kW(): @fixture def battery_tech_config_kW(): battery_inputs = { - "performance_model": {"model": "simple_generic_storage"}, - "cost_model": {"model": "atb_battery_cost"}, - "control_strategy": {"model": "demand_open_loop_storage_controller"}, + "performance_model": {"model": "SimpleGenericStorage"}, + "cost_model": {"model": "ATBBatteryCostModel"}, + "control_strategy": {"model": "DemandOpenLoopStorageController"}, "model_inputs": { "shared_parameters": { "commodity_name": "electricity", @@ -62,9 +62,9 @@ def battery_tech_config_kW(): @fixture def battery_tech_config_MW(): battery_inputs = { - "performance_model": {"model": "simple_generic_storage"}, - "cost_model": {"model": "atb_battery_cost"}, - "control_strategy": {"model": "demand_open_loop_storage_controller"}, + "performance_model": {"model": "SimpleGenericStorage"}, + "cost_model": {"model": "ATBBatteryCostModel"}, + "control_strategy": {"model": "DemandOpenLoopStorageController"}, "model_inputs": { "shared_parameters": { "commodity_name": "electricity", diff --git a/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml b/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml index 39114df9d..5778097d0 100644 --- a/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml +++ b/h2integrate/storage/battery/test_battery/inputs/tech_config.yaml @@ -4,11 +4,11 @@ description: "This hybrid plant stores and discharges electricity" technologies: battery: dispatch_rule_set: - model: "pyomo_dispatch_generic_storage" + model: "PyomoRuleStorageBaseclass" performance_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" cost_model: - model: "pysam_battery" + model: "PySAMBatteryPerformanceModel" model_inputs: shared_parameters: max_charge_rate: 50000