HELICS Versions Save

Hierarchical Engine for Large-scale Infrastructure Co-Simulation (HELICS)

v3.5.2

1 month ago

Patch release with fixes for certain compiler builds, a fix to the test core leading to some sporadic test failures, and fixing a discrepancy in the handing of config files with the helics_apps.

Fixed

  • Fixed an issue with the test core leading to sporadic failures in the test suite with the connector
  • Fixed compile issues on some versions of clang
  • Fixed some warnings on certain builds using sanitizers
  • Fixed a discrepancy in the handing of config files with the helics_apps library
  • Fixed several clang tidy issues and code cleanup

Added

  • Added an --error_on_unmatched flag to the broker for it to error if there are any unmatched requested connectors
  • Support for a broker section in config files and subcommand in the command line parsing

Full Changelog: https://github.com/GMLC-TDC/HELICS/compare/v3.5.1...v3.5.2

v3.5.1

2 months ago

Patch release including beta version of reentrant federates and support for "potential_interfaces" section in config files and automatic handling of potential interface generation in the federate class for operation with the connector app.

Fixed

  • Fixed an issue related to disconnection of federates with endpoints while still executing, that could potentially have resulted in an infinite loop
  • Fixed an issue with aliases potentially causing a seg fault or memory condition, now aliases have reciprocity so order in the given alias call doesn't matter

Changed

  • Updated 3rd party libraries including cli11, fmt, spdlog, and asio

Added

  • Automatic handling of potential interface sequence from Federate class
  • Support for potential_interface templates
  • Support for reentrant federates: federates with the same name that can come and go, and support for reconnecting interfaces to the reentrant federate
  • Support for a "helics" section in the configuration json files

v3.5.0

3 months ago

Major release including connector app capability, a refresh of the of the dataBuffer interface, and other bug fixes

Fixed

  • Fixed some issues regarding config files in the apps, where the config file was not being handled consistently
  • Fixed a few more sporadically failing testing cases and a rare bug in the use of wait_for_current_time flag when entering executing mode
  • Fixed a memory growth issue related to find operations in the C interface
  • Resolved some issues with the threadSanitizer and other sporadic failures in the test cases

Changed

  • Test with Boost 1.84 and CMake 3.28
  • Large refactor of the dataBufferAPI, this is now considered stable, all dataBuffer related methods now start with helicsDataBuffer for consistency with other API methods and the XXXToBytes methods are changed to FillFromXXXX to be more consistent with other API's
  • Update 3rd party libraries
  • Update copyright to 2024
  • Autobuild ZMQ now set to 4.3.5

Added

  • Added Connector app to enable automated connections of the federates via a set of matching rules, and allow optional interface generation via a query/command
  • Added helics::systemInfo() to the C++ shared library
  • Added ability to generate translators from config files
  • Added API's to get and send dataBuffers from publications/inputs/endpoints

Deprecated

  • Nearly all methods that use Subscription in the name have been deprecated in favor of an equivalent version for Input to reduce confusion of use of subscription objects (which are just Input objects); these are all 1:1 mappings
    • getSubscription(string target) -> getInputByTarget(string target)
    • getSubscription(int index) -> getInput(int index)
    • helicsSubscriptionGetTarget(inp) -> helicsInputGetTarget(inp)
    • helicsFederateGetSubscription(fed, string target)->helicsFederateGetInputByTarget(fed,string target)

v3.4.0

1 year ago

Major release including full dynamic federation capability and wildcard based matching for interface connections.

Fixed

  • Updated some out of date docker images to build automatically and fix some issues preventing the use of -flto option
  • Fixed a few more sporadically failing testing cases and a rare bug in the use of wait_for_current_time flag when entering executing mode

Changed

  • Test with Boost 1.81 and CMake 3.25
  • Update the units library
  • Update Spdlog library
  • Update to release 2.3 of CLI11
  • Split the application API tests in a set of 4 smaller tests to reduce test runtime and ease maintenance.
  • Update copyright to 2023

Added

  • Added the capability to link interfaces through a regex expression. "REGEX: <regex>" this format of string can be used in any place interface names can be used. This will not work on targets linked after initialization mode at present though this is expected to be relaxed in the future. Also if both sides are specified as strings at least one of them must be an actual name.
  • Added fully dynamic federation capability. Federates may be added dynamically if --dynamic flag is set on the root broker. Dynamic publications and endpoints are enabled by default but can be disabled.
  • Added automated workflow for generating release task checklist on version release
  • Added dependabot configuration for updating github-actions workflow dependencies
  • Added documentation on using encrypted communication in HELICS
  • Added support for using environment variables for enabling encryption instead of command line arguments for federates

Deprecated

  • Nearly all methods that use Subscription in the name have been deprecated in favor of an equivalent version for Input to reduce confusion of use of subscription objects (which are just Input objects); these are all 1:1 mappings
    • getSubscription(string target) -> getInputByTarget(string target)
    • getSubscription(int index) -> getInput(int index)
    • helicsSubscriptionGetTarget(inp) -> helicsInputGetTarget(inp)
    • helicsFederateGetSubscription(fed, string target)->helicsFederateGetInputByTarget(fed,string target)

v3.3.2

1 year ago

Patch release to fix some testing issues and add some network probing capabilities and remote terminal connections.

Fixed

  • Fixed a few sporadically failing CI tests

Changed

  • Update containers library
  • Update the units library
  • Split the application API tests in a set of 4 smaller tests to reduce test runtime and ease maintenance.

Added

  • Added a remote terminal capability to link with a remote Broker server running a rest API.
  • Added ARM based Circle CI test.
  • Added a probe app for testing some networking situations and connections.
  • Added tests for the tcp federate under various conditions.

v3.3.1

1 year ago

Patch release to fix some issues with using HELICS as a subproject, and fix a few bugs related to time barriers, and a few other timing issues.

Fixed

  • Fixed an issue where broker based time barriers were not propagating to new federates.
  • Fix the code coverage build system.
  • Fixed a potential race condition with callback federates if the callback operations are modified during cosimulation.
  • Fixed timing synchronization issue with global time coordinator.

Changed

  • Cleaned up usage of HELICS in external subprojects and adding some cleanup features, also cleanup the CMake usage to divide some operations into included files to simplify the main CMakeLists.txt
  • Changed the default behavior for profiler output files to create a new file instead of appending. Use --profiler_append=<file> to maintain the old behavior.

Added

  • Added single thread federate support which includes a federate optimized for use in a single thread.(Corresponding single thread core will come in next release).
  • Added support for initialization iteration to allow federates to specify ready and then return to the created mode to do additional initialization potentially with information from other federates.
  • Added flag to disable remote termination commands.
  • Added C API function calls for alias operations.
  • Added read only property HELICS_PROPERTY_INT_ITERATION_COUNT to get the current iteration count for a federate.

Removed

  • Removed an unused and unexposed method in the Core API to retrieve the current iteration count, use HELICS_PROPERTY_INT_ITERATION_COUNT with getProperty to retrieve the same data.

v3.3.0

1 year ago

Minimum build requirements updated to CMake 3.11, Visual Studio 2019, XCode 11.0, GCC 8.1, Clang 7.0. The major new features include a callback federate, and aliases to allow interfaces to have multiple string names, and an asynchronous time coordinator. The release also includes several bug fixes related to timing and iteration, and updates to third party libraries.

Fixed

  • Fixed an issue with using very large iteration counts
  • Fixed some potential memory leaks in the test set
  • Fixed an issue created by the long name tests with the release generation
  • Fixed an issue with mismatching key names for publishers
  • Removed additional use of std::async in the tests which was causing sporadic failures in the test execution
  • Fixed an issue that could occur when switching between NO_ITERATIONS and ITERATE_IF_NEEDED resulting in deadlock
  • Fixed an issue that resulted in a timeout disconnect potentially not working properly
  • Fixed the command interface API in the C++98 interface
  • Fixed issue with potential out of order messages when using interruptions, MAX_TIME, and endpoint communications

Changed

  • Additional use of std::string_view in internal callbacks and network operations
  • cleaned up use of internal flags and separated them by category
  • Updated the docker images used in CI tests for no_zmq and octave tests
  • Updated Utilities, Units, ASIO, fmtlib, gtest to latest versions
  • Refactored endpoint management code for consistency with other interfaces
  • The HELICS_DATA_TYPE_CHAR is now a member of the enumeration vs a standalone definition there is no change in operation but the numerical value is now different
  • The change detection on inputs/publication now can work individually for each interface
  • The default webserver ports, now uses 43542(Http) and 43543(Websocket). This is to not conflict by default if both are used and to accommodate other servics that might be running on the same system.
  • The REST API now returns a structure on successful broker creation
  • The helics_broker executable now has the same command line arguments for the webserver as the broker_server

Added

  • Custom Translator functionality in the C API
  • Added an asynchronous time coordinator which could be used for testing, or if all federates are driven by real time mode, or if internal synchronization is not required.
  • Added alias operations to allow interfaces to have multiple names
  • Added CORS access control options to the web server
  • Added a HELICS_STATE_UNKNOWN as a potential return value used when the federate does not exist
  • A time gate to the publications and input to restrict publications to a certain period
  • Added encryption related options to vcpkg
  • Tested support for Boost 1.80 and CMake 3.24
  • Added a command interface to set/clear time barriers
  • Added a Query to retrieve current time barriers
  • Added an index group property to manipulate the internal id which could have an impact on some unusual cases of ordering and remove a potential source of randomness in the final results of a co-simulation
  • Added a callback Federate capability which allows a large number of callback based federates to execute on a single core without direct user calls
  • Added some additional callbacks for federates
  • Added flags on the webserver to allow much easier configuration to external network interfaces
  • Added read only property HELICS_PROPERTY_INT_ITERATION_COUNT to get the current iteration count for a federate

Removed

  • ghc::filesystem, since all minimum compilers have support for std::filesystem available.
  • Removed Travis CI related configuration and documentation
  • Removed an unused and unexposed method in the Core API to retrieve the current iteration count, use HELICS_PROPERTY_INT_ITERATION_COUNT with getProperty to retrieve the same data.

v3.2.1

1 year ago

The Matlab interface to HELICS has been moved to matHELICS, the C++ interface now uses std::string_view in nearly all places, the translator C API and the dataBuffer API to the C interface were fleshed out a bit more and will be finalized in the 3.3 release. Subsequent releases will change the minimum compiler requirements to build HELICS to Visual Studio 2019, GCC 8.0, Clang 7, Xcode 11.0, and CMake 3.11.

Fixed

  • A bug related to iterations and the wait_for_current_time flag in which a deadlock may occur if the flag were set and another federate was requesting iterations at time zero.
  • A bug which could cause a deadlock if a very large number of iterations occurred
  • A naming bug in the creation of globalInput objects through the C API.
  • Fixed some potential race conditions in the Webserver
  • Fixed some race conditions and potential segmentation faults when running the C shared library tests
  • Fix some tests that were failing when executed without ZMQ support.
  • Fix the symbol visibility on Linux systems to reduce the number of visible symbols in the C shared library
  • Fix an issue with very long file names when used for configuration
  • Fix a race condition and deadlock potential in the log buffer tests.
  • Fix a Typo in HELICS_DEPRECATED use.

Changed

  • Docker images were updated to be based on Ubuntu 22.04.
  • All string interfaces in the C++ interface were altered to use std::string_view instead of const std::string & this corresponds with updates in some third party libraries to better take advantage of the capabilities of std::string_view. The exception to this is strings which reference file names or file contents. These have been left as std::string to match up with iostreams and other file interfaces.
  • Updated the Google test version in use.
  • Change the symbol visibility for mac systems to be explicitly limited to the HELICS related operations.
  • Changed the signal abort code to match standard SIGINT codes
  • Some enumerations used inside the CoreLibrary were updated to better match the Style Guide
  • Updated the Circle-CI build tests to use more recent compilers and tweak the tests to be more appropriate to test being executed.
  • Update the Units, frozen, asio, filesystem, and spdlog libraries to recent releases.
  • Updated support CMake 3.23, Boost 1.79, and Visual Studio 2022.

Added

  • Numerous functions in the C data API to support all HELICS supported types
  • helicsFederateProtect method to all federates to be recovered by name if all references to the C HelicsFederate object was freed.
  • Added a callback method for translators in the C API.
  • Added a "--force" option for ZMQ brokers to allow a broker to override an existing broker for the network connection and terminate the existing broker to be replaced by a new one.
  • Added additional documentation and examples for using iterations

Removed

  • The HELICS_BUILD_MATLAB_INTERFACE has been removed and all HELICS support for Matlab in the future will be through the matHELICS repository.

v2.8.1

1 year ago

Final release in the 2.X series of HELICS. This release updates dependencies and a few minor fixes, no further bug fixes are expected.

Changed

  • Upgraded Units library to 0.6.0
  • update fmtlib, spdlog, asio to latest releases
  • update CLI11 to latest release
  • update boost support to 1.79
  • update CMake supported versions to 3.23

v3.2.0

2 years ago

Major new features include beta release for Translators, global time coordinator and Data API and the addition of Support for encrypted communication through the TCP and TCP SS core types. Numerous bug fixes were included related to timing in unusual edge cases.

Fixed

  • Fix some undefined behavior warnings with duplicate named federates.
  • Fix a discrepancy in the way subscriptions were processed for config files to better match how they are handled for inputs.
  • Fix some accidentally disabled test cases testing different network configurations.
  • Fix missing dependency generation when subscribing to publications from Endpoints.
  • Fixed a few sporadic failures in the test cases.
  • Fixed some issues with iterations particularly in initialization mode.
  • Fixed a series of edge cases in timing in unusual communication patterns and configurations mostly related to filters, and more complex iteration schemes.
  • Fixed an issue related to missing source code on the release source archive.

Changed

  • Docker images were updated to be based on Ubuntu 21.10.
  • Update asio, json_cpp, and units to recent releases.
  • Errors in the networking layer are now propagated through the logging system in HELICS for better diagnostics of networking issues.
  • Benchmark tests are now built with Visual studio 2022.
  • Code coverage tests are now run nightly instead of on develop PR's.
  • Refactored how Apps were handling arguments to the federate to resolve some oddities in argument processing.
  • Update CLI11 to use release 2.2.
  • The callback for a filter to can return a message Object.

Added

  • Added support for openSSL based encryption on the tcp tcpss cores and some tests using that capability.
  • Added a callback option which triggers when a federate changes mode.
  • Added Translators as a beta API, this is not version locked and likely has a few bugs. The API is subject to minor revisions based on user feedback.
  • Added Data API to the C interface as a beta. API is subject to further revisions based on user feedback in upcoming releases until 3.3.
  • Added support for command operations through the REST API on the webserver.
  • Added swagger documentation for the REST API and queries.
  • Added a global time coordinator(in Beta) for handling some unusual cases.
  • Added additional callbacks in the application API for entry and exit from a timeRequest call.
  • Added support for using external FMT and SPDLOG libraries when linking HELICS.
  • Added additional documentation for complex networking environments

Deprecated

  • CI tests for visual studio 2017 were deprecated. HELICS still compiles fine on Visual studio 2017. But this is the last release that is specified for. Future releases will not be tested on Visual Studio 2017. HELICS 3.3 will actively change the minimum required to Visual Studio 2019 along with other related minimum compiler updates and requirements