Expected User Knowledge#

This section details the recommend user knowledge to use H2Integrate for different purposes. Depending on your background, you may need to learn more about certain topics to use H2Integrate effectively. The breadth and depth of that knowledge will depend on if you just want to use H2Integrate to run a few example cases, or if you want to develop new models or contribute to the H2Integrate codebase.

Required programming skills#

The goal of H2Integrate is to make hybrid energy system design accessible to most users while providing a flexible and powerful platform for advanced users. The main interface to H2Integrate is through the configuration files, which are written in user-readable YAML. A good amount of hybrid energy system studies can be done using the pre-built examples packaged within H2Integrate or by modifying their config input files.

For users who want to develop new models or contribute to the H2Integrate codebase, a strong understanding of Python is required. This includes knowledge of object-oriented programming, data structures, and algorithms. Users should also be familiar with the Google style for docstrings and the use of type hints for function arguments and return values.

Familiarity with dependencies#

H2Integrate itself is a framework that relies on a number of other tools and libraries to function. Users should be familiar with the following tools and libraries to use H2Integrate effectively:

  • HOPP: Used for simulating technologies that produce electricity for other components in H2Integrate

  • PySAM: Provides access to the System Advisor Model (SAM) for performance and financial modeling; underlying tool used for modeling certain generation technologies

  • OpenMDAO: A framework for multidisciplinary optimization, analysis, and design; used for data-passing, model organization, and optimization

  • Pyomo: A Python-based, open-source optimization modeling language; only useful to understand if you are modifying the dispatch algorithms

  • Pandas: A data manipulation and analysis library used for handling and analyzing data structures; useful for post-processing results