HELICS
Hierarchical Engine for Large-scale Infrastructure Co-Simulation (HELICS)
Install / Use
/learn @GMLC-TDC/HELICSREADME
A multi-language, cross-platform library that enables different simulators to easily exchange data and stay synchronized in time. Scalable from two simulators on a laptop to 100,000+ running on supercomputers, the cloud, or a mix of these platforms.
Table of contents
- Table of contents
- Introduction
- Getting Started
- Documentation
- Tools with HELICS support
- Contributing
- Build Status
- Publications
- In the News
- History and Motivation
- Source Repo
- Release
Introduction
Welcome to the repository for the Hierarchical Engine for Large-scale Infrastructure Co-Simulation (HELICS). HELICS provides a general-purpose, modular, highly-scalable co-simulation framework that runs cross-platform and has bindings for multiple languages. It is a library that enables multiple existing simulation tools (and/or instances of the same tool), known as "federates", to exchange data during runtime and stay synchronized in time such that together they act as one large simulation, or "federation". This enables bringing together simulation tools from multiple domains to form a complex software simulation without having to change the individual tools.
It is important to note that HELICS cannot in and of itself simulate anything, rather it is a framework to make it easy to bring together other existing (or novel) simulation tools to tackle problems that can't readily be solved by a single tool alone. After all "simulations are better together," and HELICS is designed to help get you there easily and quickly. HELICS has also already worked out many of the more subtle aspects of synchronizing simulations so you don't have to.
Today the core uses of HELICS are in the energy domain, where there is extensive and growing support for a wide-range of electric power system, natural gas, communications and control-schemes, transportation, buildings, and related domain tools (Supported Tools). However, it is possible to use HELICS for co-simulation in any domain; the HELICS API and language bindings make it straightforward to connect any simulation tool that provides a scripting interface or access to source code.
Previous and existing use cases have stretched across a wide range of scales in time and spatial area, from transient dynamics to long-term planning studies, and from individual appliance behavior to nation-wide simulations.
Philosophy of HELICS
The design and development of HELICS is driven by a number of philosophical considerations that have a clear path to design decisions in the code and reflect the needs of the use cases that drive HELICS development.
- Make it as easy as possible for federates of all kinds to work together
- Federates cannot impose restrictions or requirements on other federates
- Federates should maintain control and autonomy
- The design should be layered and modular to be adaptable to a wide variety of circumstances
- Centralized control should be minimized
These design priorities directed much of the design of HELICS and supporting tools, including operation as a library vs a run time interface that requires simulations be loaded as modules into HELICS, the use of distributed timing and control, and giving federates fine grained control over the time management and operations that is independent of operations of other federates. These core philosophies support an underlying belief driving co-simulation that "Simulations are Better Together".
Getting Started
A User Guide is available with some tutorial examples. We suggest starting here if you are looking for more information on HELICS, whether it is for getting started, or learning about more advanced features, the new documentation should have something for everyone (Please let us know if it doesn't via
or by creating an issue on github).
The Orientation goes through a series of examples that step through the basic usage and concepts of HELICS.
You can also Try HELICS online without having to install any software.
Earlier we also created a series of roughly 10-minute mini-tutorial videos that discuss various design topics, concepts, and interfaces, including how to use the tool. They can be found on our YouTube channel. These videos do not reflect recent HELICS advances but do introduce some basic concepts.
Several examples of HELICS federates and projects are located in HELICS-Examples with corresponding documentation in the User Guide. This repo provides a number of examples using the different libraries and interfaces, including those used in the user guide.
The HELICS-Tutorial repository provides a series of tutorials using HELICS to build a co-simulation using domain-specific external modeling tools that is built around an electric power system use case with integrated transmission-distribution-market-communication quasi-steady-state-timeseries (QSTS) simulation.
The HELICS-Use-Cases repository includes examples for a growing range of research use cases for inspiration.
A Tutorial was prepared for the IEEE PES General meeting in Atlanta. The example materials are available on Binder.
The HELICS team holds office hours every-other Thursday; bring your questions and get help from the development team.
Language Bindings
HELICS provides a rich set of APIs for other languages including Python, C, Java, Octave, Julia, Matlab, and Simulink. nim and C# APIs are available on an experimental basis, and with an active open-source community, the set of supported languages continues to grow. See Language bindings for additional details.
Documentation
Our ReadTheDocs site provides a set of documentation including a set of introductory examples, a developers guide, complete Doxygen generated API documentation, API references for the supported languages. A few more questions and answers are available on the Wiki.
Documentation downloads
Additionally, our initial design requirements document can be found here, which describes a number of our early design considerations and some directions that might be possible in the future.
CHANGELOG
A history of changes to HELICS
ROADMAP
A snapshot of some current plans for what is to come.
Installation
A guide to installing HELICS on different platforms
Quick links
- configuration option reference
- [Queries](docs/user-guide/advanced_topics/q
