This file describes the contributors to the HELICS library and the software used as part of this project If you would like to contribute to the HELICS project see CONTRIBUTING
- Jeff Daily (Now AMD)
- Andy Fisher
- Jason Fuller
- Shwetha Niddodi
- Trevor Hardy
- Monish Mukherjee
- Jacob Hansen
- Marc Eberlein
- Shrirang Abhyankar
- Corrine Roth
- Allison Campbell
- Emily Barret
- Ryan Mast
- Steve Smith
- Philip Top
- Denis Nadeau (Now LANL)
- Ben Salazar
- Brian Kelley
- Hoa Ngo (Now SVB)
- Ai Enkoji
- Nan Duan
- Nathan Yee (Now Accenture)
Asio is used for TCP and UDP communication, as well as resolving IP addresses. The Asio library is included as a submodule. Asio is licensed under the Boost Software License.
The header only bindings for the ZeroMQ library are used to interact with the ZeroMQ library. The header files are modified to include some string operations and are included in the HELICS source. cppzmq is licensed under the MIT license.
JsonCpp is used for parsing json files. It is included as a submodule JsonCpp is licensed under public domain or MIT in case public domain is not recognized LICENSE.
CLI11 is a command line parser used throughout HELICS. Several modification used and tested in HELICS have been merged upstream. The project was created by Henry Schreiner. CLI11 is available under a 3-Clause BSD license.
toml11 is a C++11 header-only TOML parser/encoder depending only on the C++ standard library. Compatible with the latest version of TOML v1.0.0. toml11 is licensed under the MIT license. HELICS includes it through a submodule of a library fork until the changes can be merged upstream.
GridDyn supports HELICS in experimental versions, and several components of GridDyn code were used in the development of HELICS, given they have several of the same authors.
Several components of libGuarded are being used in the core and application libraries to better encapsulate the locks for threading. The library was modified to allow use of std::mutex and std::timed_mutex support for the shared_guarded class, and also modified to use handles. It is now included through the gmlc/concurrency. libGuarded is licensed under BSD 2 clause.
fmt is used for string formatting and in the spdlog library as well. Current FMT version is 8.0+ The library is included as a submodule. fmt is licensed under BSD 2 clause license.
Several containers developed for HELICS and other applications were branched into a separate repository as a header only library. It is included in HELICS as a submodule and is released under a BSD-3 clause license.
Several concurrency related structures and containers were developed for HELICS and other applications and were branched into a separate repository as a header only library and also includes the modified libGuarded. It is included in HELICS as a submodule and is released under a BSD-3 clause license.
Several generic operations and utilities from HELICS and GridDyn are encapsulated in a separate repository, mostly dealing with String Operations but including a few other features as well. It is included in HELICS as a submodule and is released under a BSD-3 clause license.
A library that provides runtime unit values, instead of individual unit types, for the purposes of working with units of measurement at run time possibly from user input. It is included in HELICS as a submodule and is released under a BSD-3 clause license.
Very fast, header-only/compiled, C++ logging library. The spdlog library is used for logging. It is included in HELICS as a submodule and is released under a MIT license.
While not used directly, much of the inspiration for HELICS comes from three separate projects at the different National Labs. These include FNCS at PNNL, FSKIT at LLNL(unreleased), and IGMS(unreleased) at NREL. The lessons learned from these three co-simulation platforms was fed directly into the design of HELICS, and the hope that the combination and partnership is better than any one lab could have accomplished on their own.
A networking library with helper functions around Asio and other network interface and address operations used within HELICS and other related tools. It is included in HELICS as a submodule and is released under a BSD-3 clause license.
Several CMake scripts came from other sources and were either used or modified for use in HELICS.
- Lars Bilke CodeCoverage.cmake
- NATIONAL HEART, LUNG, AND BLOOD INSTITUTE FindOctave.cmake
- clang-format, clang-tidy scripts were created using tips from Emmanuel Fleury
- Viktor Kirilov, useful CMake macros ucm particularly for the set_runtime macro to use static runtime libraries
- scripts for cloning get repositories are included from tschuchortdev/cmake_git_clone used with MIT License
- Some scripts for including google test were borrowed and modified heavily from an old version of CLI11
A list of optional component that are not included in HELICS but are optionally used by the library
Boost is used in a few places in the code. The IPC core uses the Boost.Interprocess library. Some of the header-only Boost algorithms and other libraries are also used throughout the code. Some of the string parsing can optionally use boost spirit. The webserver that is part of the broker_server uses Boost::Beast from Boost 1.70 or higher. Boost is licensed under the Boost Software License. Boost can be removed entirely from the source code with the use of a cmake flag.
ZeroMQ is one of many backends that can be used by HELICS for message passing (ZMQ core networking). The automatic download currently uses version 4.3.5. No ZMQ library code is included in the HELICS source. HELICS installers include ZeroMQ binary libraries. ZeroMQ is licensed under MPL
Previous versions(prior to 4.3.5) were under LGPL with a modification to allow for linking and in various forms and distribution of the binary under different terms if the library was not modified. Clarification on static linking being okay can be found in this github issue. No modification of the ZMQ library or any of the ZeroMQ source files is included in the HELICS source code. Currently the Windows installers and shared library builds static link ZeroMQ. When building from source it is an optional component and can be excluded by setting HELICS_ENABLE_ZMQ_CORE
to OFF
HELICS tests are written to use the Google Test and mock frameworks. Google Test is included in the source tarball but is downloaded as an optional component. Google Test is released with a BSD-3 clause license.
Some timing benchmarks with HELICS are written to use the Google Benchmark library. Benchmarks is an optional component and is not included in the main source tarball and must be downloaded separately. Google Benchmark is released with an Apache 2.0 license.