Skip to content

Develop -> Main for v0.8 release#682

Merged
johnjasa merged 41 commits intomainfrom
develop
Apr 15, 2026
Merged

Develop -> Main for v0.8 release#682
johnjasa merged 41 commits intomainfrom
develop

Conversation

@johnjasa
Copy link
Copy Markdown
Collaborator

Develop -> Main for v0.8 release

  • Updated README and docs intro page with expanded H2I description, reorganized sections, and streamlined installation instructions PR 677
  • 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 StorageAutoSizingModel and PassThroughOpenLoopController so that commodity_set_point is used as the storage dispatch command PR 608
  • Updated the SimpleGenericStorage and DemandOpenLoopStorageController so that commodity_set_point is 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 StoragePerformanceModel and PySAMBatteryPerformanceModel to be compatible with the open-loop storage control strategies PR 613
    • Removed SimpleGenericStorage and replaced usage with StoragePerformanceModel
    • Renamed PassThroughOpenLoopController to SimpleStorageOpenLoopController
    • Bugfix in pyomo control rules so that units such as kg/h can be used
    • Bugfix in tests of pyomo control strategies with StoragePerformanceModel so that the pathname attribute is correct
    • Added demand_profile as an input to StoragePerformanceModel and PySAMBatteryPerformanceModel
    • Renamed xx_charge_fraction to xx_soc_fraction
  • Bugfix in StoragePerformanceModel and PySAMBatteryPerformanceModel for 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 MarineCarbonCapture base classes
  • 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 StorageAutoSizingModel model to be compatible with Pyomo control strategies PR 621
  • Removed a few usages of shape_by_conn due 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
  • Added a storage performance baseclass model StoragePerformanceBase and updated the other storage performance models to inherit it PR 624
  • Added an automated script to crawl through the codebase and generate a visualization of the class hierarchy in H2Integrate. PR 643
  • Modified the calc tilt angle function for pysam solar to support latitudes in the southern hemisphere PR 646
  • Added oxygen production metrics and as outputs to ECOElectrolyzerPerformanceModel PR 642
  • Bugfix to allow for one resource to be connected to multiple technologies PR 655
  • Removed the last of the logic that was based on technology names rather than model classes PR 654
  • Add input checking for extraneous or mis-categorized input parameters for technologies that have a defined control strategy or dispatch rule set PR 647
  • Bumps the coin-or-cbc dependency to at least 2.10.12 to enable easy Windows compatibility. PR 590
  • Uses the optional installation parameter extras to combine all analysis extras, and remove them
    from the develop options. PR 590
  • Tests reliant on the gis optional dependencies are no longer run when the extra dependencies are not installed
    similar to the ard tests. PR 590
  • Updates the testing infrastructure to use function-scoped fixtures unless there is a specific need for sharing
    data between functions in a module. PR 590
  • Adds H2IntegrateModel.state as an IntEnum to handle setup and run status checks.
    PR 590
  • Added standardized outputs to feedstock model PR 523
  • Reclassified open-loop converter control strategies as demand components and updated output naming convention to align with output naming convention in storage performance models PR 631.
    • The FlexibleDemandOpenLoopConverterController has been renamed to FlexibleDemandComponent
    • The DemandOpenLoopConverterController has been renamed to GenericDemandComponent
  • Modified CI setup so Windows is temporarily disabled and also so unit, regression, and integration tests are run in separate jobs to speed up testing and provide more information on test failures. PR 668
  • Added infrastructure for running models with non-hourly time steps via a class attribute _time_step_bounds and sets new time step bounds of 5-minutes to 1-hour for the grid components. PR 653 and PR 671
  • Remove demand-related outputs from storage performance models and replace usage with demand components PR 666

kbrunik and others added 30 commits March 14, 2026 14:28
* removed temporary iron and steel models

* supported models

* update example 28 with updated models

* remove outdated files

* consolidate iron examples

* fix all the stuff I broke

* update docs and changelog

* update example name and add model names to docs

* update changelog

---------

Co-authored-by: elenya-grant <116225007+elenya-grant@users.noreply.github.com>
* update SMR energy conversion ratio and tests

* update changelog

* docs

* minor updates to inline comments

* update usage based on hydrogen production

---------

Co-authored-by: Rob Hammond <13874373+RHammond2@users.noreply.github.com>
Co-authored-by: elenya-grant <116225007+elenya-grant@users.noreply.github.com>
Co-authored-by: John Jasa <john.jasa@nrel.gov>
Co-authored-by: genevievestarke <103534902+genevievestarke@users.noreply.github.com>
Co-authored-by: Jared Thomas <jaredthomas68@gmail.com>
Co-authored-by: bayc <christopher.j.bay@gmail.com>
Co-authored-by: John Jasa <johnjasa11@gmail.com>
Co-authored-by: Jared Thomas <jaredthomas68@users.noreply.github.com>
Co-authored-by: Jonathan Martin <94018654+jmartin4u@users.noreply.github.com>
Co-authored-by: jmartin4 <jonathan.martin@nrel.gov>
Co-authored-by: Jonathan Martin <94018654+jmartin4nrel@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Chris Bay <12664940+bayc@users.noreply.github.com>
* Breakout simulation code

* Remove duplicate code

* Fix testing

* Update doc strings and docs

* added docstring for heuristic controller config

* fixed issue that I made with the HeuristicLoadFollowingControllerConfig

* Update docs/control/pyomo_controllers.md

Co-authored-by: Jared Thomas <jaredthomas68@users.noreply.github.com>

* Make initialize_parameters() functions the same for both controllers

* Apply suggestion from @jaredthomas68

Co-authored-by: Jared Thomas <jaredthomas68@users.noreply.github.com>

* Fix doc string format

* Update h2integrate/control/control_strategies/heuristic_pyomo_controller.py

Co-authored-by: Jared Thomas <jaredthomas68@users.noreply.github.com>

* Update h2integrate/control/control_strategies/heuristic_pyomo_controller.py

Co-authored-by: Jared Thomas <jaredthomas68@users.noreply.github.com>

* Fix ruff formatting

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
Co-authored-by: elenya-grant <116225007+elenya-grant@users.noreply.github.com>
Co-authored-by: Jared Thomas <jaredthomas68@users.noreply.github.com>
Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
…Model` (#600)

* fixed how charge and discharge rates are applied in generic_storage_pyo model

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
* add unit tests for  openloop storage controller with non-one efficiencies

* rearrange usage of pytest.approx so the target comes second and uses approx

* update changelog:
…th Pyomo Controllers (#608)

* updated the storage autosizing and pass through controller for new control and performance model structure

* added subtest for integration with pass through controller

* updated to use commodity_set_point instead of input-demand

* made set_demand_as_avg_commodity_in a required input parameter

* moved passthrough controller to storage subfolder

* Added minor changes that got  missed in PR 600

---------

Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
…with Pyomo Controllers (#612)

* updated simple_generic_storage to simulate storage performance

* updated demand openloop controller so discharge setpoint is correct
* tidal resource model and performance model

* add performance values for testing

* test power curve scaling

* marine cost model

* tidal example

* integration test

* documentation

* update docs

* small changes

* update for failing tests

* fix equation rendering

* fix segmentation fault

* add test for using default pysam config

* address reviewer feedback

* fix wind pysam

* attempt to modify file path handling for resource data

* fix path stuff
…open-loop controllers (#613)

* refactored pysam battery and storage performance models to be compatible with updated open-loop controllers

* updated generic storage pyo to use pass through controller

* renamed PassThroughOpenLoopController to SimpleStorageOpenLoopController

* removed simple_generic_storage

* renamed xx_charge_fraction to xx_soc_fraction

---------

Co-authored-by: Genevieve Starke <genevieve.starke@nrel.gov>
* units and connecting variables

* fix doc page

* catch if annual_input_energy is 0

* remove base class

* fix oae test

* failing doc test

* fix value call

* final touchs
…storage type (#615)

* updated logic in pysam batery and generic storage to handle multiple storage types

* added tests and bugfix in heuristic with setting efficiencies

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
* added openloop control storage baseclass
* updated autosizing storage model to be compatible with pyomo controllers

* renamed fixures in heuristic controller tests

* aggregated heuristic controller tests into one file

* added simple test for storage autosizing and heuristic

* renamed fixtures in optimized controller tests

* aggregated optimized control tests into one file

* updated test for heuristic controller with autosizing

* updated so simple storage autosizing can run with optimal pyomo control
* added generic cost model

* added tests and updated model

* updated example 3 to use new converter model and added to supported models

* updated docstrings and input descriptions

* updated changelog

* added to model overview

* Clarified error message

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
* Working out first steps of multivariable streams

* Adding to multivariable streams work

* expanding multivariable stream definition

* Building out more of the gas combiner

* Improving example for multivariable streams

* Updating examples and merging

* Apply suggestions from code review

Co-authored-by: genevievestarke <103534902+genevievestarke@users.noreply.github.com>

* Many updates based on PR feedback

* Updated to mass fractions for multicommodity stream

* renamed a few multicommodity variable names

* Added helper functions for multivariable stream definitions

* Updated names throughout for multivariable streams

* Updated docs for multivariable streams

* Added commodity stream tests

* Addressing PR feedback

* Updates based on PR feedback

* Updates based on PR feedback

---------

Co-authored-by: genevievestarke <103534902+genevievestarke@users.noreply.github.com>
Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
* Removed some shape_by_conn calls due to OM issues

* Moved last calls of copy_shape

* Fixing test_pipe fail

---------

Co-authored-by: jmartin4 <jonathan.martin@nrel.gov>
* move xdsm creation in H2IModel to a method so user has to call it if desired instead of having it be automatic

* update changelog and docs and adjust create_xdsm logic to reflect that it is an optional call

* update docs

* update docs

* update docs for visualization

* change xdsm code cell to not execute on build

* switch pdf for png

* minor comments update in code example

* remove xdsm call

* Updated XDSM explanation link

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
* updated openmeteo resource models to handle leap day

* added resource files for leap year

* added tests for leap year resource data

* added integration w pvwatts test for leap year

* Methodized leap day handling for base class for future resource handling

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
* added draft storage model baseclass

* updated draft storage baseclass

* added docstring to run_storage method

* minor updates to comments in storage_model_baseclass

* updated storage performance model to inherit baseclass

* fixed storage performance model and storage baseclass

* updated storage autosizing model

* updated pysam battery to use baseclass and removed battery_baseclass

* removed commented out code and simplified some docstrings

* removed unnecessary docstrings

* updated changelog

* PR review: minor personal preferences

* updated inline comment

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
* added oxygen output from electrolyzer

* updated example 14 to calc LCOO

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
* Removed remaining naming dependencies

* Added to changelog and fixed CI issue

* PR feedback

* Fixed schema reqs
* bugfix and added test for connecting one resource model to multiple techs

* updated changelog

* Updated test to call setup to trigger connection error

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
* Update urls for NLR pages and github repositories

* Updated from WISDM to NLRWindSystems org for some repos

* Updated and removed more NREL references

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
* update installation instructions

* add windows to CI and use conda consistently for Python across OS

* merge develop and update changelog

* adopt 'extras' flag for analysis extras to correctly use optional CI

* update changelog

* reorder ci setup

* update order

* attempt python version restructure

* reinstate old python version

* update URL

* move runs-on back to below strategy

* add os to optional matrix

* reorganize the conditional for extras

* convert lists to yaml bullet lists

* skip gis-dependent tests when not installed

* update changelog

* use optional deps for all tests and add single runner for validating dependency-determined skipped tests

* reformatting

* reduce sql file access scope to functions to avoid windows errors

* downgrade temp_dir to a function scope to avoid windows access errors

* move temp examples fixture to be in main conftest, and enable repo-wide access

* add module scoped example directory copy

* apply module scoped example copy fixture to recorder tests and update

* update changelog

* update miniconda action usage

* use the example copy fixture to isolate sql access in tests for potential windows resolution

* reorganize changelog

* fix typo in parameter name

* update workflow

* remove max-parallel

* Revert "reorganize changelog"

This reverts commit 679a38d.

* add shell to all tests

* don't allow coverage upload to fail ci

* uncomment windows

* add garbage collection to help with sql file handling

* temporarily only run windows to reduce runner usage

* add sleep to see if small timeout resolves issue

* only run single test

* remove garbage collection

* fix typo

* remove manual folder removal in favor of pytest cleanup

* reinstate normal CI processes

* add file removal to avoid OpenMDAO silent failure

* temporarily only run single file on single windows runner

* fix typo

* fix typo

* move manual recorder_path deletion

* put ci back

* handle None case

* track model state using IntEnum

* add xfail for windows because of OpenMDAO improper SQL file handling for Windows

* add todo about removing manual removal

* restore accidentally deleted file

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
Co-authored-by: kbrunik <kbrunik@gmail.com>
* added dictionary utilities

* bugfix in setup() and added start of a test

* added fix to calling check_inputs

* fixed check_inputs

* added another check in check_inputs

* updated error messages in check_inputs and fixed example 1

* Added tests

* added another subtest to test_check_inputs

* fixed tech configs for examples

* added some inline comments

* check for requisite models and return if none

* perform check from note and collapse checking logic

* collapse user input regeneration to reduce number of loops

* remove nested looping approach

* move assert to proper context manager level

* add indent level back

* fix min combinations logic for passing tests

* flatten improperly shared parameterization checking logic

* update test to include multiple categories for improperly shared

* fix typo

* update docstring

* added handling for combined cost and performance models

* Added tech config fpath to the error messages for parameter checking

* changlog

* changed strict to True for six converter models

* reverted strict setting for electrolyzer

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
Co-authored-by: Hammond, Rob <13874373+RHammond2@users.noreply.github.com>
Co-authored-by: kbrunik <kbrunik@gmail.com>
elenya-grant and others added 11 commits April 11, 2026 00:47
)

* renamed outputs in converter openloop controllers

* updated tests and examples with updated naming

* added performance model outputs to the converter control strategies

* moved converter control strategies to demand folder

* removed commodity_set_point as output

* renamed demand component to be performance model instead of control strategy

* moved output calculations to shared method in baseclass
---------

Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
Co-authored-by: John Jasa <johnjasa11@gmail.com>
* Added class hierarchy diagram

* merging

* Updated the PR template

* Changed class hierarchy embedding

* moved class hierachy

* Breaking the sphinx narrow rule

* Combined colors based on feedback

* Updated colors based on Gen's feedback

* Shifted diagram location right

* Reformatting embedding the class viz structure

* Updated dev pyproject for viz tool

---------

Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
* added capacity and price as inputs to feedstock component

* updated feedstock mdoel to have standard outputs

* added commodity_amount_units to FeedstockCostConfig

* added standard output to feedstock cost model and connected commodity_out between performance and cost model

* renamed config inputs for feedstocks

* updated ex 23 which is untested and cleaned up feedstocks.py

* minor docstring updates and added comments

* added in notes of questions for reviewers to feedstocks.py

* updated MMBtu units to MMBtu/h

* fixed iron and steel tests

* made changes to feedstock

* fixed tests

* removed unused comment

* removed shape from price input

* added integration test for feedstock integrated with finance model

* updated feedstocks.md

* changed based on reviewer feedback

* added subtests to test_feedstocks

* small changes to feedstock doc

* docs

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
Co-authored-by: kbrunik <kbrunik@gmail.com>
Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
* add draft for variable timestep framework

* Changed error wording

* switch bounds to tuple

* minor test correction

* include time-series generation functions

* add tests for variable dt and update simulation length check for non-hourly dt

* update docs

* update changelog

* update docs and doc strings

* restore develop version of utilities.py

* update dt bounds error

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fixing tests

* Adding time step bounds to all models

* Adding time step bounds to the combiner/splitter/transporters

* Updates for tests

* Adding time step bounds to the custom paper mill performance model

* Added time step bounds to paper mill cost

---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
Co-authored-by: John Jasa <john.jasa@nrel.gov>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* update dt bounds error to require `_time_step_bounds`
* Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Add time step bounds to all tech models
* Apply time step bounds check to feedstocks, transporters, and combiners
---------

Co-authored-by: John Jasa <johnjasa11@gmail.com>
Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
Co-authored-by: John Jasa <john.jasa@nrel.gov>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…onent (follow-on to 631) (#666)

* removed system level calcs from storage and updated most tests

* updated examples with storage but dont use storage as a commodity_stream in finances

* updated examples with storage defined as a commodity_stream for a finance subgroup

* added time_step_bounds to demand components

* added test for example 23

* added example for different demand between storage and demand component

* added demo for the demand components using example 13

* made it so demand is only input to battery performance model if using feedback control

* added standard_capacity_factor as output from storage

* added doc page for storage performance models

---------

Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
Co-authored-by: John Jasa <johnjasa11@gmail.com>
Co-authored-by: kbrunik <kbrunik@gmail.com>
* Updating the readme

* Updated intro.md and changelog

* Minor readme updates

* Addressing Kaitlin's comments

* Added more lingo to readme

* Addressing PR suggestions

---------

Co-authored-by: kbrunik <102193481+kbrunik@users.noreply.github.com>
#678)

* moved controllers to storage folder

* renamed pyomo controllers to include storage in the control name

* moved control strategy tests

* moved tests to the right folder

* moved pyomo baseclass and controller_opt_problem_state to top-level control_strategies

* updated import statements

* renamed pyomo baseclass file

* updated import for pyomo storage baseclass

* made storage chapter in docs

* removed backslashes from eqn since they dont render properly on readthedocs
@johnjasa johnjasa merged commit c3d7840 into main Apr 15, 2026
23 checks passed
johnjasa added a commit that referenced this pull request Apr 16, 2026
Develop -> Main for v0.8 release (#682)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants