- Update energy conversion ratio in H2 SMR model PR 606
- Update iron models and examples PR 601
- Remove outdated iron files
- Consolidate iron examples into a single main folder
- Add documentation for Rosner iron DRI and steel EAF models
- Breaks out pyomo controller simulation code from base class to individual controllers. PR 587
- Add tests for non-one valued charge, discharge, and round-trip efficiencies for the open-loop demand controller PR 610
- Updated the
StorageAutoSizingModelandPassThroughOpenLoopControllerso thatcommodity_set_pointis used as the storage dispatch command PR 608 - Updated the
SimpleGenericStorageandDemandOpenLoopStorageControllerso thatcommodity_set_pointis used as the storage dispatch command PR 612 - Add PySAM marine models PR 607
- Add tidal resource model
- Add pysam tidal performance model
- Add pysam marine hydrokinetic cost model
- Updated the
StoragePerformanceModelandPySAMBatteryPerformanceModelto be compatible with the open-loop storage control strategies PR 613- Removed
SimpleGenericStorageand replaced usage withStoragePerformanceModel - Renamed
PassThroughOpenLoopControllertoSimpleStorageOpenLoopController - Bugfix in pyomo control rules so that units such as
kg/hcan be used - Bugfix in tests of pyomo control strategies with
StoragePerformanceModelso that the pathname attribute is correct - Added
demand_profileas an input toStoragePerformanceModelandPySAMBatteryPerformanceModel - Renamed
xx_charge_fractiontoxx_soc_fraction
- Removed
- Bugfix in
StoragePerformanceModelandPySAMBatteryPerformanceModelfor setting control inputs to account for cases with multiple storage technologies with different control strategy types PR 615 - Bugfix input energy to OAE financial model PR 617
- Remove
MarineCarbonCapturebase classes
- Remove
- Added the notion of multivariable commodity streams, which allow users to connect multiple variables between technologies with a single connection specification. PR 480
- Added base class (
StorageOpenLoopControlBase) and base configuration class (StorageOpenLoopControlBaseConfig) for open-loop storage control strategies and updated the existing open-loop storage control strategies to inherit these PR 619 - Added a generic cost model for converters PR 622
- Updated the
StorageAutoSizingModelmodel to be compatible with Pyomo control strategies PR 621 - Removed a few usages of
shape_by_conndue to issues with OpenMDAO v3.43.0 release on some computers PR 632 - Made generating an XDSM diagram from connections in a model optional and added documentation on model visualization. PR 629
- PySAM battery now takes in charge rate and storage capacity as inputs PR 557
- Removed unnecessary
tech_namedesignations for some control techs in yamls PR 559 - Added a generic storage model that is compatible with the Pyomo controllers PR 571
- Add hydrogen steam methane reforming (SMR) performance and cost converter PR 594
- Introduced a keyword arg to
post_processto allow users to choose if results are printed to the console. PR 597 - Renamed
min_charge_percent,max_charge_percent, andinit_charge_percenttomin_charge_fraction,max_charge_fraction, andinit_charge_fractionacross all configuration classes, YAML configs, tests, and examples. These values are fractions between 0 and 1, so the previous "percent" naming was misleading. PR 581 - Reorganized utilities, split them out to appropriate modules PR 586
- Updates the PR Changelog requirement to include complete descriptions of updates and a link to the associated PR. PR 572
- Added a test and docs for sql to csv. PR 582
- Switch to using NLR instead of NREL throughout, especially for API key usage for resource acquisition. PR 583
- Fixed docs/example drift in design of experiments case. PR 584
- Fixed a bug within the H2 storage cost models that used max rate instead of average for H2 flows PR 588
- Fixed a bug in the discrete variable instantiation within the iron processing stack that caused a failure with OpenMDAO v3.43 PR 595
- Fixed a bug in model setup where transporters were added to the system at the end of the system instead after their source PR 591
- Fixed a bug in example 1 (steel) where a cable was included between the combiner to steel, but steel uses an internal grid connection PR 591
- Fixed a bug in charge and discharge efficiency handling in
StoragePerformanceModelPR 600
- Simple nuclear plant performance and cost model PR 538
- Refactored iron electrowinning model with performance and cost models based on recent literature from Humbert and Stinn PR 432
- Load following optimization dispatch PR 407
- Linearized hydrogen fuel cell model PR 525
- Arps decline rate now incorporated into the natural geologic hydrogen model PR 454
- Simple dispatch calculations now included in
StorageAutoSizingModelPR 493
- Removed all uses of
prob["<variable>"]in favor ofprob.get_val("<variable>", units="<units>")to ensure units are properly handled and to prepare for the possibility of multiple variables with the same name but different units in the future. PR 539 - Update finance models to use annual capacity factor and rated production rather than annual production. PR 552
- Update
NaturalGeoH2PerformanceModeloutputs yearly metrics. PR 552 - Add figures and more description about how technologies and systems are modeled and connected in H2INtegrate. PR 554
- Generalize electrolyzer replacement schedule logic within the framework. PR 555
- Insert model names for technologies with control strategies to simplify Pyomo workflows. PR 558
- Refactored pyomo code by splitting apart classes into separate files and removing unused properties PR 549
- Use the PyPI listed mcm package in place of installing from GitHub. PR 533
- Adds a duplicate key checker to the YAML
Loaderthat raises an error when a duplicate key is found, and points to the file and line number that caused the error. The YAMLLoadermodification maintains compliance with the existing JSON validation protocols. PR 534 - Test infrastructure updates: PR 531
- Introduces enforced test marking for
unit,regression, andintegrationtests so that all tests must be marked via@pytest.mark.<test-type>. - Partial testing suite refactor to parameterize many of the common fixtures and test routines.
unitteststyle tests are refactored to bepyteststyle tests for test consistency.
- Introduces enforced test marking for
- Adds a pre-commit hook for
yamlfixto auto-format YAML files andyamlfix'd all YAML files for consistent formatting PR 551
- Added standalone iron DRI and steel EAF performance and cost models PR 409
- Add geologic hydrogen surface processing converter PR 405
- Added Ard as an optional combined performance and cost model PR 481
- Added ability to plot multi-layer geospatial point heat map and simple straight line transport routes with GeoPandas and Contextily PR 413
- Added
PerformanceModelBaseClassand standardized outputs of converter performance models PR 463 - Updates all models in
supported_modelsto 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. The naming convention is also enforced by a newly added test to ensure adherence. PR 468 - Adds
additional_cls_namekwarg toBaseConfig.from_dict()to allow for configuration errors buried in parent or child classes to provide which model had the offending misconfiguration for simpler user debugging. PR 479 - Added capability to have transport models that require user input parameters PR 408
- Add baseclass for caching functionality PR 422
- Minor reorg for profast tools PR 450
- Added postprocessing function to save timeseries PR 440
- Removed hydrogen tank cost and performance models that were unused PR 457
- Allow design variables to be specified with None type units PR 514
- Updates models for NumPy version 2.4.0 PR 422
- Update test values for WOMBAT update to 0.13.0 PR 425
- Converted the documentation Jupyter notebooks to markdown files to simplify output diffs PR 464
- Updated the contributing documentation to clarify what developers should expect for including executable content in the documentation. PR 464
- Converted the example notebooks to documentation examples, and maintain a basic working example
in the examples folder PR 464:
examples/14_wind_hydrogen_dispatch/hydrogren_dispatch.ipynb->docs/control/controller_demonstrations.mdexamples/20_solar_electrolyzer_doe/run_csv_doe.ipynbcontent added todocs/user_guide/design_of_experiments_in_h2i.mdexamples/25_sizing_modes/run_size_modes.ipynb->docs/user_guide/run_size_modes.md
.gitignoreis updated to be more inclusive of example output data.- Documentation builds will now fail if a demonstration errors during execution that is not marked as an allowed error, ensuring previously silent errors get caught. PR 464
pyproject.tomlis tidied up after moving past Python 3.9 and early H2I limitations. PR 471- Cleans up unnecessary ignore rules in the ruff settings.
- Removes duplicate dependency listings, and alphabetizes for legibility with NLR packages listed at the bottom.
- Remove unused dependencies.
- Fixes typos for skipped folders.
- Fixes missing dependencies for
gismodifier used in new iron mapping tests. - Remove
pytest-subtestsas it's incorporated into pytest as of v9, and is an archived project.
- Fixed tagged version number for release
- Added PySAM Windpower performance model to simulate wind PR 306
- Added
simple_grid_layout.pyfor wind plant layout modeling, can model square or rectangular layouts PR 306 - Added ability to visualize the wind plant layout for PySAM Windpower model using
post_process(show_plots=True)PR 306 - Added Wind Annual Technology Baseline cost model
atb_wind_cost.pyPR 306 - Added resource models to make solar resource API calls to the NREL Developer GOES dataset PR 279
- Added solar resource models for Meteosat Prime Meridian and Himawari datasets available through NSRDB PR 377
- Added wind resource model for API calls to Open-Meteo archive PR 332
- Added PySAM battery model as a storage technology performance model PR 211
- Added framework to run heuristic load following dispatch for storage technologies PR 211
- Added storage auto-sizing performance model based on storage sizing calculations that existed in the coupled hydrogen storage performance and cost model PR 324
- Added grid converter performance and cost model which can be used to buy, sell, or buy and sell electricity to/from the grid PR 340
- Add feature for natural gas plant converter to take electricity demand as an input and added system capacity as an input PR 334
- Added standalone iron mine performance and cost model PR 364
- Add open-loop load demand controllers:
DemandOpenLoopConverterControllerandFlexibleDemandOpenLoopConverterControllerPR 328
- Updated inputs for the
ATBBatteryCostModelandDemandOpenLoopControllerso storage capacity and charge rate can be design variables PR 290 - Split out cost models from coupled hydrogen storage performance and cost model PR 324
- Created
ProFastBase, a base class for theProFastLCOandProFastNPVmodels PR 310 - Added
ProFastNPV, a finance model using ProFAST to calculate NPV of the commodity PR 310 - Moved
compute()fromProFastBasetoProFastLCOPR 310 - Added
NumpyFinancialNPV, a finance model that uses NumPy Financial npv to calculate the npv from the cash flows PR 310 - Added capability for user-defined finance models in the H2Integrate framework PR 247
- Enabled dynamic plant component sizing modes through the resizeable model class
ResizeablePerformanceModelBaseClassPR 198 - Move geologic hydrogen models into specific geoh2 subsurface converters PR 367
- Updated generic combiner to accept any number of inflow streams instead of just 2 PR 406
- Allow multiple instances of the same electricity producing technologies using prefix-based matching PR 397
- Allow multiple instances of custom models in the same hybrid system PR 397
- Removed a large portion of the old GreenHEART code that was no longer being used PR 384
- Moved high-level tests to the appropriate directory and removed defunct tests PR 412
- Added
tools/run_cases.pywith tools to run differenttech_configcases from a spreadsheet, with new docs page to describe: docs/user_guide/how_to_run_several_cases_in_sequence.md PR 242 - Updated setting up recorder in
PoseOptimizationPR 291 - Added
create_om_reportsoption to driver config to enable/disable OpenMDAO reports (N2 diagrams, etc.) PR 308 - Added design of experiment functionality PR 314
- Added "csvgen" as generator type for design of experiments PR 314
- Added
load_yaml()function and flexibility to input a config dictionary to H2IntegrateModel rather than a filepath PR 313 - Removed
boundariesfrom the necessary keys inplant_configvalidation PR 361 - Added ability for latitude and longitude to be design variables in design sweep PR 336
- Added an optimized offshore methanol production case to examples/03_methanol/co2_hydrogenation_doc PR 137
- Improved the readability of the postprocessing printout PR 361
- Improved readability of the postprocessing printout by simplifying numerical representation, especially for years PR 378
- Fixed stoichiometry mistake in ammonia synloop PR 363
This release introduces significant new technology models and framework capabilities for system design and optimization, alongside major refactoring and user experience improvements.
- Added capability for user-defined technologies in the H2Integrate framework, allowing for custom models to be integrated into the system PR 128.
- Added a check for if a custom model's name clashes with an existing model name in the H2Integrate framework, raising an error if it does PR 128.
- Added geologic hydrogen (GeoH2) converter and examples PR 135.
- Added methanol production base class PR 137.
- Added steam methane reforming methanol production technology PR 137.
- Added CO2 hydrogenation methanol production technology PR 137.
- Added run of river hydro plant model, an example, and a documentation page PR 145.
- Added marine carbon capture base class PR 165.
- Added direct ocean capture technology PR 165.
- Added ammonia synloop, partially addressing Issue 169 PR 177.
- Added simple air separation unit (ASU) converter to model nitrogen production PR 179.
- Added rule-based storage system control capability (e.g., for battery, H2, CO2) PR 195.
- Added ocean alkalinity enhancement technology model PR 212.
- Added
natural_gas_performanceandnatural_gas_costmodels, allowing for natural gas power plant modeling PR 221. - Added wind resource model, API baseclasses, updated examples, and documentation PR 245.
- Added generic storage model, useful for battery, hydrogen, CO2, or other resource storage PR 248.
- Removed the
to_organizedirectory PR 138. - Updated the naming scheme throughout the framework so resources produced always have
_outand resources consumed always have_inin their names PR 148. - Added ability to export ProFAST object to yaml file in
ProFastCompPR 207. - Refactored
ProFastCompand put in a new file (h2integrate/core/profast_financial.py). Added flexibility to allow users to specify different financial models PR 218. - Revamped the feedstocks technology group to allow for more precise modeling of feedstock supply chains, including capacity constraints and feedstock amount consumed PR 221.
- Made
pipeandcablesubstance-agnostic rather than hard-coded forhydrogenandelectricityPR 241. - Updated option to pass variables in technology interconnections to allow for different variable names from source to destination in the format
[source_tech, dest_tech, (source_tech_variable, dest_tech_variable)]PR 236. - Split out the electrolyzer cost models
basicandsingliticofor clarity PR 147. - Refactored the ammonia production model to use the new H2Integrate framework natively and removed the prior performance and cost functions PR 163.
- Added a new ammonia production model which has nitrogen, hydrogen, and electricity inputs and ammonia output, with performance and cost functions PR 163.
- Added WOMBAT electrolyzer O&M model PR 168.
- Changed electrolyzer capacity to be specified as
n_clustersrather thanratingin electrolyzer performance model config PR 194. - Changed electrolyzer capacity to be an input to the electrolyzer cost models rather than pulled from the cost model config PR 194.
- Added cost model base class and removed
plant_config['finance_parameters']['discount_years']['tech']. Cost year is now an optional input (tech_config[tech]['model_inputs']['cost_parameters']['cost_year']) and a discrete output PR 199. - Added two ATB-compatible solar-PV cost models PR 193.
- Update PySAM solar performance model to allow for more user-configurability PR 187.
- Added
"custom_electrolyzer_cost"model, an electrolyzer cost model that allows for user-defined CapEx and OpEx values PR 227. - Added variable O&M to
CostModelBaseClassand integrated into finance-related models PR 235. - Improved
h2integrate/transporters/power_combiner.pyand enabled usage of multiple electricity producing technologies PR 232.
- Updated finance parameter organization naming in
plant_configPR 218. - Changed finance handling to use
finance_subgroupsandfinance_groupsdefined in theplant_configrather than previousfinancial_groupsin thetech_configandtechnologies_to_include_in_metricsinplant_configPR 240. - Allow users to specify the technologies to include in the metrics calculations in the plant configuration file PR 240.
- Added option for user to provide ProFAST parameters in finance parameters PR 240.
- Changed
plant_configatb_yearentry tofinancial_analysis_start_yearPR 190. - Added
simulationsection underplant_config['plant']that has information such as number of timesteps in the simulation, time step interval in seconds, simulation start time, and time zone PR 219. - Moved
overwrite_fin_valuesto HOPP PR 164. - Enable optimization with HOPP technology ratings using
recreate_hopp_config_for_optimizationPR 164. - Made caching in the HOPP wrapper optional PR 164.
- Added more available constraints from the HOPP wrapper useful for design optimizations PR 164.
- Added an example of a user-defined technology in the
examplesdirectory, demonstrating an extremely simple paper mill model PR 128. - Added example for running with HOPP as the only technology in the H2Integrate system PR 164.
- Added an optimization example with a wind plant and electrolyzer to showcase how to define design variables, constraints, and objective functions PR 126.
- Expanded docs to include a new section on modifying config dicts after model instantiation PR 151.
- Added
*_out/to.gitignoreto avoid clutter PR 191. - Bump min Python version and removed unnecessary packages from
pyproject.tomlPR 150. - Bugfix: only run
pyxdsmwhen there are connections in the system PR 201.
- Introduced a fully new underlying framework for H2Integrate which uses OpenMDAO, allowing for more flexibility and extensibility in the future
- Expanded introductory documentation
- Added TOL/MCH hydrogen storage cost model
- Fixed iron data save issue PR 122
- Added optional inputs to electrolyzer model, including curve coefficients and water usage rate.
- Bug-fix in electrolyzer outputs (H2_Results) if some stacks are never turned on.
- Allow users to save the H2IntegrateOutput class as a yaml file and read that yaml to an instance of the output class
- Include new plotting capabilities: (1) hydrogen storage, production, and dispatch; (2) electricity and hydrogen dispatch
- Remove reference_plants from examples. Reference plants can now be found in the ReferenceHybridSystemDesigns repository.
- Use sentence capitalization for plot labels and legends
- Use "metric ton" instead of "tonne" or "metric tonne" in all internal naming and plots
- Fix bug in hydrogen dispatch plotting by storing time series of hydrogen demand by hour
- Update the PEM efficiency to 51.0 kWh/kg from 54.6 kWh/kg
- Bumped PySAM version to 6+ and HOPP to 3.2.0
- Removed defunct conda build and upload scripts
- Return full solution dictionary from ProFAST, allowing access to CRF and WACC
- Renamed code from GreenHEART to H2Integrate
- Added iron processing framework and capabilities PR 90
- Added Martin and Rosner iron ore models, performance and cost for each PR 90
- Added Rosner direct reduction iron (DRI) model, performance and cost PR 90
- Added Martin transport module for performance and cost of iron PR 90
- Added generalized Stinn cost model for electrolysis of arbitrary materials PR 90
- Adds
CoolProptopyproject.toml - Changes units of
lcoe_realinHOPPComponentfrom "MWh" to "kWh" - Adds
pre-commit,ruff, andisortchecks, and CI workflow to ensure these steps aren't skipped. - Updates steel cost year to, 2022
- Updates ammonia cost year to, 2022
- Requires HOPP 3.1.1 or higher
- Updates tests to be compatible with HOPP 3.1.1 with ProFAST integration
- Removes support for python 3.9
- Add steel feedstock transport costs (lime, carbon, and iron ore pellets)
- Allow individual debt rate, equity rate, and debt/equity ratio/split for each subsystem
- Add initial docs focused on new H2Integrate development
- New documentation CI pipeline to publish documentation at nrel.github.io/H2Integrate/ and test that the documentation site will build on each pull request.
- Placeholder documentation content has been removed from the site build
- Replaces the git ProFAST installation with a PyPI installation.
- Removed dependence on external electrolyzer repo
- Updated CI to use conda environments with reproducible environment artifacts
- Rename logger from "wisdem/weis" to "h2integrate"
- Remove unsupported optimization algorithms
- Minor updates to examples for NAWEA workshop.
- Adds
environment.ymlfor easy environment creation and H2Integrate installation.
- Hotfix for examples
- Project has been separated from HOPP and moved into H2Integrate, removing all HOPP infrastructure.