Skip to content

Hercules v2.1 release#241

Merged
genevievestarke merged 26 commits intomainfrom
develop
Mar 30, 2026
Merged

Hercules v2.1 release#241
genevievestarke merged 26 commits intomainfrom
develop

Conversation

@genevievestarke
Copy link
Copy Markdown
Collaborator

@genevievestarke genevievestarke commented Mar 30, 2026

This new version of Hercules brings a number of new capabilities and functionality! The new capabilities include the following:

  • A thermal component base class to represent natural gas and coal electricity production components.
  • An open-cycle gas turbine component and a hard coal steam turbine component.
  • An updated naming and component structure that enables multiple components of the same type in a simulation.
  • The release of Hercules as a package on PyPI.
  • A power playback component that allows the user to work with SCADA data for any component with a power history.
  • A new multi-unit thermal plant component that allows the simulation of a thermal plant on a unit-level. For example, this enables the simulation of a plant with two open-cycle natural gas turbines where each natural gas unit can be defined and controlled independently.

Other updates in this release include updating the documentation, specifically for adding new components and installing Hercules, and updated utilities for pre-processing incoming data.

What's Changed

Full Changelog: v2...v2.1

paulf81 and others added 26 commits January 16, 2026 10:15
* Update ULRs for lab name change (#199)

* Fix Hycon link in README.md

---------

Co-authored-by: misi9170 <39596329+misi9170@users.noreply.github.com>
* fix git ignore file

* Add examples docs pages

* Consolidate readmes into docs

* add pointer to online documentation

* Small updates to example readmes

* clarify doc

---------

Co-authored-by: Genevieve Starke <genevieve.starke@nrel.gov>
* Add combustion turbine model

* add to hybrid plant

* add to utilities

* add first test

* add new example

* add test dicts

* address comment

* standardize to min_stable_load_fraction

* address comment

* clean up state_num error checks

* clean up step function

* add else case

* linting

* fix long line

* fix long line

* fix comment

* adjust timing

* Add tests for Ct

* add combustion turbine docs

* Add 07 example

* remove combustion turbine model

* add thermal component base

* add tests

* update h_dict

* linting

* add ocgt

* route ocgt

* rename example

* linting

* update example 7

* update utilities

* bugfix

* add shell post-process test

* update docs

* Add 07 doc

* Update hercules/hybrid_plant.py

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

* harmonize comments

* clarify comment

* Fix comment

* add warm start state and hard code start state time definitions

* refactor from heat_rate to efficiency

* add tests

* update test defaults

* linting

* start shutdown behavior within on state

* Fix test

* docstring fix

* add limit to run up ramp

* remove redundant line

* Update tests/thermal_component_base_test.py

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

* clearer controller name

* Update tests/thermal_component_base_test.py

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

* Update examples/07_ocgt/hercules_input.yaml

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

* Refactor states to an enum

* Remove .value

* Change initial condition behavior

* rename fuel values

* Refactor to rate

* specify effiency in HHV and provide defaults

* rename example 7

* linting

* remove get initial conditions

* add get initial conditions to base class

* remove state names property

* Make component_name and types to be class attributes

* rename calc functions

* Update with minor notes on specific turbine

* Fix ruff formatting

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Genevieve Starke <genevieve.starke@nrel.gov>
* Update python minimum to 3.10

* Test 3.12 and 13

* add 3.14

* test change

* revert

* limit python versions
* Update installation instructions

* Specify python version for uv env
* add hercules type

* add hercules type

* add hercules type

* add hercules type

* add hercules type

* add hercules type

* add hercules test

* approximate tests

* update names

* rename test file
* always save wd_mean

* update docs
* add example 00b input

* add runscript

* add output plot

* Add readme

* Add output of scada_input.ftr

* check for scada_input.ftr

* linting

* Update hercules/utilities_examples.py

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

* Update examples/inputs/00_generate_wind_history_small.py

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

* Update examples/00b_wind_farm_scada_power/README.md

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

* take out control option

* Correct the example

* Add example doc

* Update docs

* linting

* lint/format

* remove setpoint tests

* fix doc

* test change

* revert

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Genevieve Starke <genevieve.starke@nrel.gov>
* Update electrolyzer as a dependency

* Update git CI workflow
* Update component base

* update test

* update tests

* update name/type

* name type pattern

* redo around name/type/cat

* remove unsused functions

* linting

* remove defaults

* Add names to tests

* fix docstring

* linting

* Update docs

* Add component types module

* import component types rather then redefining

* check component registry against componet types

* remove hard-coding

* update category test

* update component categories

* update docs

* update hybrid plant

* Consolidate componet registry

* fix circular import

* update docs

* spelling

* fix out-dated docstring

* check categories

* fix test

* change snippet to link

* Revert battery models

* Make necessary changes to battery classes

* add comment

* Revert (again)

* Add back changes to battery_simple

* add back changes to LI battery

* remove gen column

* typo fix

* reorg docs page

* reorg

* Add details

* update docs

---------

Co-authored-by: paulf81 <paul.fleming@nrel.gov>
Co-authored-by: misi9170 <michael.sinner@nrel.gov>
* Update requirements and add exceptions to move past errors

* Remove lines that caused errors as they dont seem to change behavior
* Add initial coal plant model

* Update docs and example

* Add tests

* Update controller to scale with total simulation time

* Update hercules runscript doc strings

* Example number update

* Update documentation
* initial power playback class

* register power playback

* add tests

* update test

* Add a power playback example

* linting

* add docs

* fix errors

* Address comments

* Update docs

* Add note

---------

Co-authored-by: paulf81 <paul.fleming@nrel.gov>
Co-authored-by: Genevieve Starke <genevieve.starke@nrel.gov>
Co-authored-by: paulf81 <paul.fleming@nrel.gov>
Co-authored-by: paulf81 <paul.fleming@nrel.gov>
Co-authored-by: Genevieve Starke <genevieve.starke@nrel.gov>
* test for nan in power

* test for ws nans

* Add tests

* Add checks

* Add nan test to PowerPlayback model

* Fix wind tests and add power playback nan test

* Fix ruff formatting

---------

Co-authored-by: paulf81 <paul.fleming@nrel.gov>
Co-authored-by: Genevieve Starke <genevieve.starke@nrel.gov>
* Added feature to specify thermal plant time in shutdown before simulation start. This enables users to simulate a cold, warm, or hot start from the start of the simulation

* Typo corrections

* Clean up, remove unnecessary files

* Update docs with new functionality

* Update docs

* Add test for new input

---------

Co-authored-by: Frederik <jfrederi>
Co-authored-by: Genevieve Starke <genevieve.starke@nrel.gov>
* Update constants, instructions for nrel-pysam 7

* Update toml

* First pass run through for multiunit thermal plant

* Add logging for individual units within thermal plant

* More formatting

* Add steam turbine module

* Improvement on loading units into thermal plant

* Bug fix for when there are multiple of the same units in a plant

* Track number of starts

* Make array of units flexible, hacky

* Revert "Merge branch 'pysam_7' into feature/mm-thermal"

This reverts commit 71f3c90, reversing
changes made to bb51e82.

* Track starts in h_dict for outputs

* Formatting

* Clean up dostrings

* Add note that initial conditions are correctly set on h_dict

* Docs page for thermal plant

* Check that units are all thermal

* Add tests for ThermalPlant

* Remove SteamTurbine from this branch

* Remove steam turbine example

* Clean up example

* Add example doc

* Minor cleanup

* Clean up comment

* X axis label

* Update Example 09 folder and documentation

* Update thermal plant docs page

* Final updates for PR

* Remove unused import

* Add new file

* Update utilities

---------

Co-authored-by: dzalkind <dzalkind@nrel.gov>
Co-authored-by: Frederik <jfrederi>
Co-authored-by: Genevieve Starke <genevieve.starke@nrel.gov>
@genevievestarke genevievestarke merged commit 78191ab into main Mar 30, 2026
7 checks passed
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.

4 participants