Recent Releases of H2Integrate
H2Integrate - v0.9
New Features
- Creates the
EIANaturalGasFeedstockConfigandEIANaturalGasFeedstockCostModelto 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
PeakLoadManagementHeuristicOpenLoopStorageControlleras 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
ECOElectrolyzerPerformanceModelPR 690 - Add per-year pricing support for Grid and Feedstock cost models, allowing price arrays of length
plant_lifein addition to scalar and per-timestep arrays. PR 700 - Added ability to have a custom/user-specified resource model PR 698
- Add
{commodity}_set_pointas an input to hydrogen fuel cell model PR 709 - Rename
n_control_windowton_control_window_hoursfor 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
AmmoniaSynLoopPerformanceModelPR 760 - Add
constantpricing mode for Grid cost models, allowing an explicit scalar price configuration alongsideper_timestepandper_yearmodes. PR 764 - Added dynamic operating constraints (turndown, ramping, warm/cold start delays) to
AmmoniaSynLoopPerformanceModeland splitAmmoniaSynLoopCostModelinto its own module. PR 770 - Added an optional
inflation_rateinput toNumpyFinancialNPVFinanceConfigthat is combined withreal_discount_ratevia the Fisher equation to form the effective rate passed tonumpy_financial.npv, allowing users to supply either a nominal discount rate (withinflation_rate=0, the default) or a real discount rate together with an explicit inflation rate. Matches how ProFAST combines its real discount rate andgeneral_inflationinputs. PR 788 - Renamed the
discount_rateinput toreal_discount_rateinNumpyFinancialNPVFinanceConfigto clarify that it is combined withinflation_ratevia the Fisher equation. The ProFAST models keep their existingdiscount_ratename. 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_priceinput directly to the technology's own buy-price input via OpenMDAO 3.44 input-to-input connections, so a singleprob.set_val()on (for example)grid.electricity_buy_pricenow propagates to the SLC. PR 791 - Added system-level-controller unit tests that confirm the
cost_per_tech: feedstockmode correctly sumsVarOpExfrom 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_unitsand_compute_rate_unitsinh2integrate.finances.toolsand 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_configtoslc_topologyto distinguish it from the user-authoredcontrol_parametersblock. PR 784 - Added capability to specify demand technology for system-level control, and renamed the framework-derived system-level control classification dict from
slc_configtoslc_topologyto distinguish it from the user-authoredcontrol_parametersblock. PR 784 - Updated
commodity_sell_priceinput toProFastNPVto be per year of the plant life. Also updatedBasicProFASTParameterConfig.as_dict()so explicitly input escalation values are not overwritten to the general inflation rate PR 799 - Added
calc_azimuth_angle()toPYSAMSolarPlantPerformanceModelto provide default azimuth angle based on whether the site is in the northern or southern hemisphere PR 806 - Renamed
OpenLoopStorageControlBasetoOpenLoopControlBaseandOpenLoopStorageControlBaseConfigtoOpenLoopControlBaseConfigand moved them out of the control storage sub-directory. PR 828
Infrastructure
- Renamed
{commodity}_demandinputs to{commodity}_set_pointon all converter performance components to align with storage baseclass naming and distinguish converter operating targets from demand components. PR 691 - Minor cleanup to
pose_optimizationPR 695 feedstocks.pyhas moved fromh2integrate/core/toh2_integrate/feedstocksPR 719- Added basic check of 4-length connections in
technology_interconnectionsPR 720 - Adds
H2IntegrateModel,load_yaml,write_yaml, andwrite_readable_yamlas package-level imports PR 728. - Reduced import time for
h2integrate_model.pyby deferring imports of heavy dependencies until they are needed PR 762 - Renamed
design_of_experimentstoparameter_sweepthroughout the codebase to avoid confusion with "Department of Energy" (DOE) in the energy domain. The core code supports both the newparameter_sweepand legacydesign_of_experimentsYAML 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__.pyfiles to allow for direct imports of models from the package level and to ensure all models are properly imported and used insupported_models.pyPR 769 - Speed up the slowest tests in the suite by swapping the Floris wind model for
PYSAMWindPlantPerformanceModelin examples 01 (01_onshore_steel_mn) and 02 (02_texas_ammonia), updating the affectedtest_steel_example/test_simple_ammonia_exampleexpected values, fixing a pre-existingcases.sqlcache-path bug and module-scoping the fixtures inh2integrate/postprocess/test/test_sql_timeseries_to_csv.pyso the example only runs once for all four tests. PR 782 - Exposed
n_timesteps,dt,plant_life, andfraction_of_year_simulatedas attributes onCostModelBaseClass(matchingPerformanceModelBaseClass) and updated all cost and performance model subclasses acrossh2integrate/to use these attributes instead of reading them fromplant_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 insupported_modelsand appends the first sentence of each class's docstring. Migrated.readthedocs.yamlto invokedocs/build_book.shviabuild.commandsso hosted and local builds stay in sync. PR 787 - Moves
h2integrate/resource/utilities/file_tools.py::check_resource_dirto a general functionh2integrate/core/utilities/file_utils.py::check_data_dirwith a wrapped version for resource data (check_resource_dir) and feedstock data (check_feedstock_data). PR 791 - Removed the
is_electricity_producerhelper fromh2integrate.core.commodity_stream_definitionsand the electricity-specific auto-detection branch inH2IntegrateModel, making finance-subgroupcommodity_streamresolution fully commodity-agnostic; updated exampleplant_config.yamlfiles that previously relied on the auto-detection to setcommodity_streamexplicitly. 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_ivarand addednapoleon_custom_sectionsso custom Google-style sections (Inputs, Outputs, Promoted Inputs, Promoted Outputs, Subsystems, Discrete Inputs, Discrete Outputs, Options, Behavior, Side Effects) render cleanly. - Suppressed the
etoc.toctreecategory 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.rsttemplate that filters pytestconftest.pysubmodules from generated stubs, eliminating the "failed to import conftest" warnings that appeared on the Read the Docs build. - Renamed the
GeoH2SubsurfaceCostModelMyST label indocs/technology_models/geologic_hydrogen.mdtomathur-modified-geoh2-costto remove an ambiguous cross-reference with the autosummary entry for the Python class of the same name.
- Set
- Updates
h2integrate/core/file_utils.py::check_data_dirto allow for the creation of nested directories, not just the final subdirectory for smoother initialization of a feedstock directory PR 801. - Adds
feedstock_dirto 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
commodityof inH2Integrate.create_technology_graphto 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_inputsaroundStoragePerformanceModelPR 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
- Remove old iron models by @kbrunik in https://github.com/NatLabRockies/H2Integrate/pull/601
- update SMR energy conversion ratio and tests by @kbrunik in https://github.com/NatLabRockies/H2Integrate/pull/606
- Break out Pyomo controller simulation code by @genevievestarke in https://github.com/NatLabRockies/H2Integrate/pull/587
- Bugfix in Charge/Discharge efficiency handling in
StoragePerformanceModelby @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/600 - Tests for non-one battery efficiencies by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/610
- Sync Storage Autosizing Model and Pass-Through controller to Align with Pyomo Controllers by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/608
- Sync Demand Open Loop Controller and Simple Generic Storage to Align with Pyomo Controllers by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/612
- PySAM Marine Models by @kbrunik in https://github.com/NatLabRockies/H2Integrate/pull/607
- Sync PySAM Battery and Generic Storage Pyomo Performance models with open-loop controllers by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/613
- Ard doc/msg adjustments by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/618
- CO2 Model Fixes by @kbrunik in https://github.com/NatLabRockies/H2Integrate/pull/617
- Bugfix: Update storage models so can use different control types per storage type by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/615
- Baseclass for Openloop Storage Control Strategies by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/619
- Enable use of Pyomo Controllers in the Storage Autosizing Model by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/621
- Generic cost model for converters by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/622
- Introducing multivariable commodity streams by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/480
- Removed some shape_by_conn calls due to OM issues by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/632
- Move xdsm call in H2IntegrateModel to its own method by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/629
- Handling Leap Years in OpenMeteo Resource Data by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/633
- Baseclass for Storage Performance Models by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/624
- Modified the calc tilt angle function for pysam solar by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/646
- Oxygen output from PEM electrolyzer by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/642
- Removed remaining naming dependencies by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/654
- Bugfix: Connecting resource to multiple techs by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/655
- Update urls for NLR pages and github repositories by @genevievestarke in https://github.com/NatLabRockies/H2Integrate/pull/658
- Enhancement/windows ci by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/590
- Temporarily disable Windows CI and break up unit/regression/integration tests for speed by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/668
- Check for extraneous or mis-categorized input parameters by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/647
- Update Naming Convention in Open-Loop Converter Control Strategies by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/631
- modified state check for setup and run by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/669
- Add interactive class hierarchy visualization to docs by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/643
- Standardize Feedstock Outputs (follow-on to 463) by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/523
- Framework to allow for variable dt by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/653
- patch: Variable dt by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/671
- Remove system-level outputs from storage and replace with demand component (follow-on to 631) by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/666
- Updating the readme and intro doc page ahead of v0.8 release by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/677
- Move storage controllers into
storagefolder incontrol_strategiesby @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/678 - Making changes per Gen's suggestion by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/681
- Develop -> Main for v0.8 release by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/682
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
- Patch: Bump WOMBAT Minimum Version for Pandas Compatibility Fix by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/663
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
- Require a PR link in the CHANGELOG by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/572
- Update to PySAM Battery so size is changed in compute() by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/557
- Minor cleanup of yamls after tech_name change by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/559
- Renamed percent to fraction for storage by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/581
- Reorganizing utilities by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/586
- Generic Storage Model that's Compatible with Pyomo Controllers by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/571
- Moving NREL to NLR API keys and naming throughout by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/583
- Fix incorrect system sizing for Papadias hydrogen storage cost models by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/588
- Fixing examples drift by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/584
- Adding test and doc changes by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/582
- Update openmdao version constraint in pyproject.toml by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/592
- Fixing OM 3.43 related bug by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/595
- Steam Methane Reforming Hydrogen Converter by @kbrunik in https://github.com/NatLabRockies/H2Integrate/pull/594
- reorder system when transporters are used by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/591
- Bugfix and Renaming in SMR model by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/596
- Minor: added option to print results in
post_process()method by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/597 - Release v0.7.1 by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/603
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
- Release v0.7 by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/562
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
- Backmerge main into develop by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/419
- Remove unnecessary init files by @kbrunik in https://github.com/NatLabRockies/H2Integrate/pull/420
- Ex14 and prefix matching patch by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/421
- NumPy Version Update by @kbrunik in https://github.com/NatLabRockies/H2Integrate/pull/422
- WOMBAT Version Update by @kbrunik in https://github.com/NatLabRockies/H2Integrate/pull/425
- Rename capacity input and output of PV model to not include units by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/427
- Iron: Standalone Iron Reduction and EAF Models by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/409
- Bug fix: units in H2 storage cost models by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/429
- Iron: Updated Ore Transport Model by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/408
- GeoH2: Surface Processing by @jmartin4u in https://github.com/NatLabRockies/H2Integrate/pull/405
- Preprocessing Tool for Turbine Model Files by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/379
- Baseclass for Caching Functionality by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/424
- WANT FEEDBACK: Move base config classes in utilities.py to model_baseclasses.py by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/431
- Added FLORIS wind plant model by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/372
- Remove duplicate files by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/446
- Replace HOPP with FLORIS Wrapper in Example 17 and Example 9 by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/448
- Added start time, end time, and dt to resource data outputs by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/438
- Minor refactor to profast tools org by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/450
- Start example 05 feasible by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/452
- Typo fix in solar doc page by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/455
- Removing defunct tank class by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/457
- Add missing doc figure by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/458
- Replace HOPP Examples that use PVWatts and PySAM Windpower with H2I Wrappers by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/449
- Replace battery in HOPP with battery in H2I (5 examples) by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/451
- Replace HOPP with H2I models in 5 examples by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/461
- Add csv post process for time series variables by @genevievestarke in https://github.com/NatLabRockies/H2Integrate/pull/440
- Minor: Updated postprocess test to set the demand profile if running example 2 by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/466
- OpenMETEO Historical Solar Resource Model by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/459
- Enable multiple site functionality by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/434
- Updating docs with pre-commit info by @genevievestarke in https://github.com/NatLabRockies/H2Integrate/pull/472
- Enhancement: Update
pyproject.tomlby @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/471 - Recreate iron mapping functionality by @dakotaramos in https://github.com/NatLabRockies/H2Integrate/pull/413
- Docs: Convert notebooks to scripts and executable markdown by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/464
- Load resource data from a folder without subdirectories of the resource type by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/462
- Fix: MIssing dependencies for local test runners by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/478
- Fix: Update pytest version pinning for archival of
pytest-subtestsby @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/483 - Simplify debugging of configuration errors during setup by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/479
- Make verification of openmeteo resource download a configurable parameter by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/482
- Standardize performance model outputs by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/463
- Enhancement: Convert
supported_modelsto enforce actual class names by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/468 - added
libraryfolder to .gitignore file by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/495 - Fix/floris by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/499
- Ard integration for wind farm combined performance and cost model by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/312
- Expose more generic storage inputs to OpenMDAO for easier parameter sweeps by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/503
- Minor fixes and added cost inputs to custom electrolyzer cost model by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/511
- allow None type unit specification in driver config and switch design… by @jaredthomas68 in https://github.com/NatLabRockies/H2Integrate/pull/514
- Make Ard an optional dependency by @elenya-grant in https://github.com/NatLabRockies/H2Integrate/pull/515
- Maintenance: Update CI Workflows by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/500
- Update changelog ahead of release by @johnjasa in https://github.com/NatLabRockies/H2Integrate/pull/516
- Release v0.6 by @RHammond2 in https://github.com/NatLabRockies/H2Integrate/pull/517
New Contributors
- @genevievestarke made their first contribution in https://github.com/NatLabRockies/H2Integrate/pull/440
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.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
Improvements and Refactoring
- 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
Configuration and Optimization
- 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
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_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.
Improvements and Refactoring
- 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.
Configuration and Optimization
- 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.
Documentation, Examples, and Miscellaneous
- 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.
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
- Save output by @jaredthomas68 in https://github.com/NREL/H2Integrate/pull/81
- Figure label naming by @jaredthomas68 in https://github.com/NREL/H2Integrate/pull/85
- Expanding GreenHEART docs to include how to add a new tech by @johnjasa in https://github.com/NREL/H2Integrate/pull/89
- Remove reference plants from examples by @kbrunik in https://github.com/NREL/H2Integrate/pull/87
- Plots by @jaredthomas68 in https://github.com/NREL/H2Integrate/pull/84
- Plots update h2 dispatch by @jaredthomas68 in https://github.com/NREL/H2Integrate/pull/95
- LCOH Update and Custom Electrolyzer Costs by @elenya-grant in https://github.com/NREL/H2Integrate/pull/79
- Update PEM efficiency to 51.0 kWh/kg from 54.6 kWh/kg by @bayc in https://github.com/NREL/H2Integrate/pull/102
- Updates for HOPP v3.2.0, update PySAM version to 6.0+ by @johnjasa in https://github.com/NREL/H2Integrate/pull/104
- CRF/WACC/ProFAST Solution by @jaredthomas68 in https://github.com/NREL/H2Integrate/pull/105
- Rename legacy GreenHEART to H2Integrate by @bayc in https://github.com/NREL/H2Integrate/pull/106
- Pinned orbit version to v1.1 by @johnjasa in https://github.com/NREL/H2Integrate/pull/108
- Adding iron capabilities to GreenHEART by @johnjasa in https://github.com/NREL/H2Integrate/pull/90
- v0.2 H2Integrate Release by @RHammond2 in https://github.com/NREL/H2Integrate/pull/113
- v0.2 Release Take 2 by @RHammond2 in https://github.com/NREL/H2Integrate/pull/114
New Contributors
- @elenya-grant made their first contribution in https://github.com/NREL/H2Integrate/pull/79
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
CoolProptopyproject.toml - Changed units of
lcoe_realinHOPPComponentfrom "MWh" to "kWh" - Added
pre-commit,ruff, andisortchecks, 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
- Enhancement: Log CI build environment settings by @RHammond2 in https://github.com/NREL/GreenHEART/pull/34
- Remove electrolyzer component by @jaredthomas68 in https://github.com/NREL/GreenHEART/pull/33
- Patch: Update ProFAST requirement to PyPI listing by @RHammond2 in https://github.com/NREL/GreenHEART/pull/36
- remove unsupported optimization approaches and leftover wisdem refere… by @jaredthomas68 in https://github.com/NREL/GreenHEART/pull/37
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