Recent Releases of H2Integrate

H2Integrate - v0.9

New Features

  • Creates the EIANaturalGasFeedstockConfig and EIANaturalGasFeedstockCostModel to load EIA natural gas prices from file or to retrieve them from the EIA API. The model is able to retrieve the US or any of the 50 states' annual or monthly values, which will be converted into an hourly timeseries. PR 719
  • Add electric arc furnace performance and cost models based on the Carnegie Mellon University DecarbSTEEL v5 excel model PR 686
    • Adds scrap-only performance model
    • Adds DRI + scrap performance model
    • Adds EAF cost model applicable to both performance models
  • Introduce general system-level controls framework. PR 751
  • Add PeakLoadManagementHeuristicOpenLoopStorageController as a storage control strategy. PR 641
  • Added a thermal-nuclear (light-water reactor) model and a high-temperature steam electrolysis model. PR 807

Updates

Modeling

  • Change commodity in DRI and EAF model from pig iron to sponge iron based on likely carbon content PR 670
  • Added electricity and water consumption profiles as outputs to the ECOElectrolyzerPerformanceModel PR 690
  • Add per-year pricing support for Grid and Feedstock cost models, allowing price arrays of length plant_life in addition to scalar and per-timestep arrays. PR 700
  • Added ability to have a custom/user-specified resource model PR 698
  • Add {commodity}_set_point as an input to hydrogen fuel cell model PR 709
  • Rename n_control_window to n_control_window_hours for unit clarity PR 712
  • Creates a series of preprocessing tools for basic state name and abbreviation handling, and for reverse geocoding coordinates to state data. PR 719
  • Creates a series of preprocessing tools for downloading EIA natural gas prices to monthly and hourly timeseries that could be extended to other EIA API data in the future. PR 719
  • Added ability to use timeseries for finance calculations PR 725
  • Added multivariable purge gas stream output to AmmoniaSynLoopPerformanceModel PR 760
  • Add constant pricing mode for Grid cost models, allowing an explicit scalar price configuration alongside per_timestep and per_year modes. PR 764
  • Added dynamic operating constraints (turndown, ramping, warm/cold start delays) to AmmoniaSynLoopPerformanceModel and split AmmoniaSynLoopCostModel into its own module. PR 770
  • Added an optional inflation_rate input to NumpyFinancialNPVFinanceConfig that is combined with real_discount_rate via the Fisher equation to form the effective rate passed to numpy_financial.npv, allowing users to supply either a nominal discount rate (with inflation_rate=0, the default) or a real discount rate together with an explicit inflation rate. Matches how ProFAST combines its real discount rate and general_inflation inputs. PR 788
  • Renamed the discount_rate input to real_discount_rate in NumpyFinancialNPVFinanceConfig to clarify that it is combined with inflation_rate via the Fisher equation. The ProFAST models keep their existing discount_rate name. Updated the numpy NPV model, tests, docs, and the example 19 config accordingly. PR TBD
  • Connect each cost-aware system-level controller's {tech}_buy_price input directly to the technology's own buy-price input via OpenMDAO 3.44 input-to-input connections, so a single prob.set_val() on (for example) grid.electricity_buy_price now propagates to the SLC. PR 791
  • Added system-level-controller unit tests that confirm the cost_per_tech: feedstock mode correctly sums VarOpEx from all upstream feedstocks for a multi-feedstock dispatchable, including a fuel-cell-style hydrogen-plus-oxygen scenario and a case with feedstocks at different graph depths. PR 793
  • Updated ammonia synloop test values and loosened test value tolerances due to unnecessary sensitivities from dynamic behavior PR 795
  • Removed hard-coded logic of price units in finance models to be flexible to any type of commodity. Created helper functions _compute_price_units and _compute_rate_units in h2integrate.finances.tools and integrated usage of these functions into all finance models (numpy_financial_npv, profast_npv, profast_lco) accordingly. PR 786
  • Added capability to specify demand technology for system-level control, and renamed the framework-derived system-level control classification dict from slc_config to slc_topology to distinguish it from the user-authored control_parameters block. PR 784
  • Added capability to specify demand technology for system-level control, and renamed the framework-derived system-level control classification dict from slc_config to slc_topology to distinguish it from the user-authored control_parameters block. PR 784
  • Updated commodity_sell_price input to ProFastNPV to be per year of the plant life. Also updated BasicProFASTParameterConfig.as_dict() so explicitly input escalation values are not overwritten to the general inflation rate PR 799
  • Added calc_azimuth_angle() to PYSAMSolarPlantPerformanceModel to provide default azimuth angle based on whether the site is in the northern or southern hemisphere PR 806
  • Renamed OpenLoopStorageControlBase to OpenLoopControlBase and OpenLoopStorageControlBaseConfig to OpenLoopControlBaseConfig and moved them out of the control storage sub-directory. PR 828

Infrastructure

  • Renamed {commodity}_demand inputs to {commodity}_set_point on all converter performance components to align with storage baseclass naming and distinguish converter operating targets from demand components. PR 691
  • Minor cleanup to pose_optimization PR 695
  • feedstocks.py has moved from h2integrate/core/ to h2_integrate/feedstocks PR 719
  • Added basic check of 4-length connections in technology_interconnections PR 720
  • Adds H2IntegrateModel, load_yaml, write_yaml, and write_readable_yaml as package-level imports PR 728.
  • Reduced import time for h2integrate_model.py by deferring imports of heavy dependencies until they are needed PR 762
  • Renamed design_of_experiments to parameter_sweep throughout the codebase to avoid confusion with "Department of Energy" (DOE) in the energy domain. The core code supports both the new parameter_sweep and legacy design_of_experiments YAML keys for backward compatibility. Updated all driver configs, examples, tests, and documentation. Added generator type descriptions to the parameter sweep docs page and updated the run-cases docs to recommend parameter sweeps over manual for-loops. PR 768
  • Added imports for individual models to the appropriate __init__.py files to allow for direct imports of models from the package level and to ensure all models are properly imported and used in supported_models.py PR 769
  • Speed up the slowest tests in the suite by swapping the Floris wind model for PYSAMWindPlantPerformanceModel in examples 01 (01_onshore_steel_mn) and 02 (02_texas_ammonia), updating the affected test_steel_example/test_simple_ammonia_example expected values, fixing a pre-existing cases.sql cache-path bug and module-scoping the fixtures in h2integrate/postprocess/test/test_sql_timeseries_to_csv.py so the example only runs once for all four tests. PR 782
  • Exposed n_timesteps, dt, plant_life, and fraction_of_year_simulated as attributes on CostModelBaseClass (matching PerformanceModelBaseClass) and updated all cost and performance model subclasses across h2integrate/ to use these attributes instead of reading them from plant_config, removing redundant boilerplate from individual components. PR 783
  • Rewrote the "Adding a new technology" developer guide. Also replaced the hand-maintained model overview page with an auto-generated section (docs/generate_model_overview.py) that classifies every registered class in supported_models and appends the first sentence of each class's docstring. Migrated .readthedocs.yaml to invoke docs/build_book.sh via build.commands so hosted and local builds stay in sync. PR 787
  • Moves h2integrate/resource/utilities/file_tools.py::check_resource_dir to a general function h2integrate/core/utilities/file_utils.py::check_data_dir with a wrapped version for resource data (check_resource_dir) and feedstock data (check_feedstock_data). PR 791
  • Removed the is_electricity_producer helper from h2integrate.core.commodity_stream_definitions and the electricity-specific auto-detection branch in H2IntegrateModel, making finance-subgroup commodity_stream resolution fully commodity-agnostic; updated example plant_config.yaml files that previously relied on the auto-detection to set commodity_stream explicitly. PR 786
  • Ensure OpenMDAO data is cleaned up during testing PR 797.
  • Reduced Sphinx documentation build warnings from roughly 880 to under 20. PR 800
    • Set napoleon_use_ivar and added napoleon_custom_sections so custom Google-style sections (Inputs, Outputs, Promoted Inputs, Promoted Outputs, Subsystems, Discrete Inputs, Discrete Outputs, Options, Behavior, Side Effects) render cleanly.
    • Suppressed the etoc.toctree category emitted by autosummary :recursive: stubs.
    • Cleared stale _autosummary/ files at the start of every docs build.
    • Removed duplicated Methods: docstring sections that collided with autodoc method discovery.
    • Added :no-index: to hand-authored autoclass directives that duplicated autosummary entries.
    • Cleaned up docstring formatting bugs across roughly twenty source files (bullet and definition list separations, starred attribute markers, unbalanced backticks, and stray substitution references).
    • Fixed several MyST cross-reference targets (missing labels, ambiguous doc vs ref targets, incorrect autosummary path, duplicate labels, broken image path, and a broken literalinclude path).
    • Added a custom docs/_templates/autosummary/module.rst template that filters pytest conftest.py submodules from generated stubs, eliminating the "failed to import conftest" warnings that appeared on the Read the Docs build.
    • Renamed the GeoH2SubsurfaceCostModel MyST label in docs/technology_models/geologic_hydrogen.md to mathur-modified-geoh2-cost to remove an ambiguous cross-reference with the autosummary entry for the Python class of the same name.
  • Updates h2integrate/core/file_utils.py::check_data_dir to allow for the creation of nested directories, not just the final subdirectory for smoother initialization of a feedstock directory PR 801.
  • Adds feedstock_dir to the EIA natural gas retrieval to align the downloading or loading of the feedstock data with the resource data methodology PR 801.
  • Add support for slice notation in technology connections to allow users to connect between variables of different shapes. PR 774
  • Updated edge attribute commodity of in H2Integrate.create_technology_graph to use lists instead of strings to account for systems with multiple commodities connected between two technologies PR 823

Fixes

  • Bug fix so multi-level output path won't throw an error; updated test for EIA API handling. PR 820
  • Bugfix for round-trip efficiency handling when calling check_inputs around StoragePerformanceModel PR 684
  • Bugfix. Include nuclear in electricity producing tech list and improve error message for zero-length electricity producing techs in model when electricity is specified as the commodity. PR 685
  • Update N2 diagram for demand openloop control from static and outdated to dynamic and interactive PR 714
  • Update N2 diagram for Pyomo heuristic control from static image to dynamic and interactive embedded diagram PR 726
  • Fixes a series of small bugs in the EIA natural gas feedstock modeling, and adds a test for the file-based usage PR 777.
  • Corrected water rate units in pipe feedstock from galUS to galUS/h PR 813
  • Corrected timestamps in OpenMeteo resource downloads when resource data is downloaded in local time PR #814
  • Fixed docs build warnings by correcting inline-literal docstring markup etc, also enabled warning-as-error in the shared docs build script to minimize number of future warnings. PR 821

Energy Systems - Energy System Modeling Frameworks - Python
Published by johnjasa 24 days ago

H2Integrate - v0.8

What's Changed

Full Changelog: https://github.com/NatLabRockies/H2Integrate/compare/v0.7.2...v0.8

Energy Systems - Energy System Modeling Frameworks - Python
Published by johnjasa 5 months ago

H2Integrate - v0.7.2

What's Changed

Full Changelog: https://github.com/NatLabRockies/H2Integrate/compare/v0.7.1...v0.7.2

Energy Systems - Energy System Modeling Frameworks - Python
Published by RHammond2 5 months ago

H2Integrate - v0.7.1

What's Changed

Full Changelog: https://github.com/NatLabRockies/H2Integrate/compare/v0.7...v0.7.1

Energy Systems - Energy System Modeling Frameworks - Python
Published by RHammond2 6 months ago

H2Integrate - v0.7

What's Changed

Full Changelog: https://github.com/NatLabRockies/H2Integrate/compare/v0.6...v0.7

Energy Systems - Energy System Modeling Frameworks - Python
Published by RHammond2 6 months ago

H2Integrate - v0.6

What's Changed

New Contributors

Full Changelog: https://github.com/NatLabRockies/H2Integrate/compare/v0.5.1...v0.6

Energy Systems - Energy System Modeling Frameworks - Python
Published by RHammond2 7 months ago

H2Integrate - v0.5.1

Updating version number correctly from prior release

Energy Systems - Energy System Modeling Frameworks - Python
Published by johnjasa 9 months ago

H2Integrate - v0.5.0

This release greatly expands the modeling capabilities of H2I by building upon the dispatch framework, introducing grid connections, adding additional supported resources, expanding the financial calculations, and many other improvements.

New Features and Technology Models

  • Added PySAM Windpower performance model to simulate wind PR 306
  • Added simple_grid_layout.py for 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.py PR 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: DemandOpenLoopConverterController and FlexibleDemandOpenLoopConverterController PR 328

Improvements and Refactoring

  • Updated inputs for the ATBBatteryCostModel and DemandOpenLoopController so 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 the ProFastLCO and ProFastNPV models PR 310
  • Added ProFastNPV, a finance model using ProFAST to calculate NPV of the commodity PR 310
  • Moved compute() from ProFastBase to ProFastLCO PR 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 ResizeablePerformanceModelBaseClass PR 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

Configuration and Optimization

  • Added tools/run_cases.py with tools to run different tech_config cases 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 PoseOptimization PR 291
  • Added create_om_reports option 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 boundaries from the necessary keys in plant_config validation PR 361
  • Added ability for latitude and longitude to be design variables in design sweep PR 336

Documentation, Examples, and Miscellaneous

  • 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

Energy Systems - Energy System Modeling Frameworks - Python
Published by johnjasa 9 months ago

H2Integrate - v0.4.0

This release introduces significant new technology models and framework capabilities for system design and optimization, alongside major refactoring and user experience improvements.

New Features and Technology Models

  • 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_performance and natural_gas_cost models, 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.

Improvements and Refactoring

  • Removed the to_organize directory PR 138.
  • Updated the naming scheme throughout the framework so resources produced always have _out and resources consumed always have _in in their names PR 148.
  • Added ability to export ProFAST object to yaml file in ProFastComp PR 207.
  • Refactored ProFastComp and 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 pipe and cable substance-agnostic rather than hard-coded for hydrogen and electricity PR 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 basic and singlitico for 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_clusters rather than rating in 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 CostModelBaseClass and integrated into finance-related models PR 235.
  • Improved h2integrate/transporters/power_combiner.py and enabled usage of multiple electricity producing technologies PR 232.

Configuration and Optimization

  • Updated finance parameter organization naming in plant_config PR 218.
  • Changed finance handling to use finance_subgroups and finance_groups defined in the plant_config rather than previous financial_groups in the tech_config and technologies_to_include_in_metrics in plant_config PR 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_config atb_year entry to financial_analysis_start_year PR 190.
  • Added simulation section under plant_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_values to HOPP PR 164.
  • Enable optimization with HOPP technology ratings using recreate_hopp_config_for_optimization PR 164.
  • Made caching in the HOPP wrapper optional PR 164.
  • Added more available constraints from the HOPP wrapper useful for design optimizations PR 164.

Documentation, Examples, and Miscellaneous

  • Added an example of a user-defined technology in the examples directory, 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 .gitignore to avoid clutter PR 191.
  • Bump min Python version and removed unnecessary packages from pyproject.toml PR 150.
  • Bugfix: only run pyxdsm when there are connections in the system PR 201.

Energy Systems - Energy System Modeling Frameworks - Python
Published by johnjasa 11 months ago

H2Integrate - v0.3.0

What's changed

This release features a large-scale framework overhaul as we increase H2Integrate's modularity and capabilities.
We introduce a new core framework that uses OpenMDAO to handle the data-passing, model debugging, and optimization capabilities used in H2Integrate.
This release is missing some features previously available in H2Integrate; please use v0.2.0 for the prior framework with additional features.
Future efforts and releases will expand the capabilities of H2Integrate.

Energy Systems - Energy System Modeling Frameworks - Python
Published by johnjasa over 1 year ago

H2Integrate - v0.2 Release

What's Changed

New Contributors

Full Changelog: https://github.com/NREL/H2Integrate/compare/v0.1.4...v0.2

Energy Systems - Energy System Modeling Frameworks - Python
Published by RHammond2 over 1 year ago

H2Integrate - v0.1.4

What's Changed

  • Added CoolProp to pyproject.toml
  • Changed units of lcoe_real in HOPPComponent from "MWh" to "kWh"
  • Added pre-commit, ruff, and isort checks, and CI workflow to ensure these steps aren't
    skipped.
  • Updates steel and ammonia cost years to 2022
  • Requires HOPP 3.1.1 or higher and removed 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 GreenHEART development
  • New documentation CI pipeline to publish documentation here
    that the documentation site will build on each pull request

Full Changelog: https://github.com/NREL/GreenHEART/compare/v0.1.3...v0.1.4

Energy Systems - Energy System Modeling Frameworks - Python
Published by johnjasa over 1 year ago

H2Integrate - v0.1.3

What's Changed

Full Changelog: https://github.com/NREL/GreenHEART/compare/v0.1.1...v0.1.3

Energy Systems - Energy System Modeling Frameworks - Python
Published by RHammond2 almost 2 years ago

H2Integrate - v0.1.1

Small changes and improvements to examples ahead of the NAWEA workshop.

Energy Systems - Energy System Modeling Frameworks - Python
Published by johnjasa almost 2 years ago

H2Integrate - v0.1 Release

First public release with GreenHEART as its own package.

Energy Systems - Energy System Modeling Frameworks - Python
Published by RHammond2 almost 2 years ago