Skip to content

Releases: GMLC-TDC/HELICS

v2.7.0

30 Apr 01:58
688be69
Compare
Choose a tag to compare

This release includes a major change internally for filters. Testing and usage revealed some scenarios which could cause deadlock or acausal message arrival. These scenarios were not common so the release was delayed until a fix was in place. As of the 2.7.0 release all the identified issues related to the initial bug have been resolved. There remains some outstanding cases that fail rarely in the CI systems specifically related to rerouting filters that are separate from both the location they are rerouting from and to. The resolution of these is uncertain but will be available in a patch release when resolved. Additional changes include major changes to the CI builds due to changing support of Travis CI and other CI services.

NOTE There are some known issues with using remote rerouting filters in the timing, which can under some conditions allow messages to be delivered after the the time the message was supposed to be delivered. Though most issues have been resolved in this release there remain a few tests in the CI build which are subject to sporadic failures that have yet to be resolved. It is expected these will be resolved in a future release hopefully 2.7.1

Changed

  • Update spdlog, fmtlib, filesystem, asio, and units libraries to latest releases (#1798, #1802, #1803)
  • Default HELICS_USE_ZMQ_STATIC_LIB to ON if only the static library is found in the search path #1845
  • Primary CI systems are now on azure instead of travis #1819
  • Only a very limited CI test set is run on formatting PR's #1761

Fixed

  • Tests and fixes allowing multiple filters on the same endpoint #1852
  • Fixed some failing broker server tests related to input arguments #1825
  • Fixed an issue with barrier and maxTime requests #1788
  • Fixed a timing bug when using offset and some specific time requests immediately after the enterExecutingMode #1759
  • Several fixes and changes to CI systems related to changes in CI infrastructure #1754, #1790, #1828, #1744, #1739
  • Fixed deadlock caused when querying a disconnected HELICS object #1705
  • Fixed major timing bug with the use of filters #1717
  • Fixed issue when sending messages before execution time #1717

Added

  • Support for ZMQ 4.3.4 (this will become default in the next version) #1841
  • Added a global_flush query to sweep the internal action message queues #1832
  • A vcpkg manifest file for some vcpkg support #1835
  • Added an event triggered flag to better handle timing on federates that are primarily or exclusively triggered by events like filters #1804
  • Added ordered queries which allow queries to run on the normal vs priority pathways for queries that are desired to be synchronous with the other helics messages #1793
  • Added github workflow to compress images #1626
  • Additional and clearer warning messages when a message is sent to an unknown destination #1702

v3.0.0-alpha.2

09 Nov 01:53
378c901
Compare
Choose a tag to compare
v3.0.0-alpha.2 Pre-release
Pre-release

HELICS 3.0 is a major update to HELICS. The major features that have been added are the command interface and targeted Endpoints. Internally major changes include updating the minimum compiler to C++17, and updates to internal libraries. The binary serialization protocol was shifted from Cereal to a custom format that embeds the data type so is more suitable to HELICS data types. The initial release is an alpha release for some initial testing. The full change log will be filled out as the release progresses from alpha to beta to final release. The migrating 2 to 3 page includes some specific details on migrating from HELICS 2 to 3.

Changes expected for beta.1 which will be the next pre-release

  • matlab interface built and tested again (It is likely a new matlab API will be coming again)
  • more test cases for targetedEndpoints
  • docker image build working

This is an early alpha release it includes all the major new features and nearly complete API changes(baring bug reports) please use for testing and report any issues.

Changed

  • Data serialization moved to a custom protocol specific to HELICS.
  • Minimum build requirements to C++17
  • Many of the API functions now use string_view instead of const std::string &
  • Several API calls for messages have been updated for clarity and consistency.

Fixed

Added

  • Command interface
  • Targeted Endpoints

Removed

  • Message structure from C API
  • Deprecated functions from HELICS 2

v2.6.1

16 Oct 09:34
f6d43da
Compare
Choose a tag to compare

Several small bug fixes and minor enhancements to query operations

Changed

  • In helics_enum.h flags were separated into separate enums with the same symbols splitting up flags specific to federates, cores, and those applicable to all entities
  • CMAKE 3.18 was tested and verified and used as the baseline version when available.
  • Default libzmq was updated to 4.3.3

Fixed

  • A few flags were unable to be queried through getOptionFlag operations #1655
  • The index values for some flags were not able to be retrieved via getFlagIndex operations #1645
  • In some cases specifying a custom port of a number less than the default ports led to federates being unable to bind the appropriate port #1648
  • Duplicate target specification and warnings were improved #1639
  • Certain property strings did not generate the correct property index #1642
  • For large packets in the TCP core on particular operating systems partial buffers may be sent and this was not handled property in the tcp core #1600
  • Boost 1.74 deprecated some interfaces used in the webserver. The code was updated to support the latest release of boost. #1629
  • The requested_time field in the current_time query for federates was missing #1619
  • Some broker queries did not reset properly when changes in the federation occurred #1617
  • Handle cases of empty install prefix #1577

Added

  • The C api now has a query callback method for responding to federate specific queries. #1634
  • Some tutorials for the hello_world example on visual studio #1621
  • A helicsMessageClear method was added to the C API for clearing the data from a message object #1622
  • A global_state query to actively query the current state of all objects in a federation. #1614
  • A strict config checking flag to generate errors on potentially incorrect configuration files #1607

v3.0.0-alpha.1

25 Sep 00:35
c46ecbf
Compare
Choose a tag to compare
v3.0.0-alpha.1 Pre-release
Pre-release

HELICS 3.0 is a major update to HELICS. The major features that have been added are the command interface and targeted Endpoints. Internally major changes include updating the minimum compiler to C++17, and updates to internal libraries. The binary serialization protocol was shifted from Cereal to a custom format that embeds the data type so is more suitable to HELICS data types. The initial release is an alpha release for some initial testing. The full change log will be filled out as the release progresses from alpha to beta to final release. The migrating 2 to 3 page includes some specific details on migrating from HELICS 2 to 3.

Changes expected for alpha.2

  • travis-ci builds operational
  • more test cases for targetedEndpoints
  • octave build working
  • docker image build working

This is an early alpha release it includes all the major new features and nearly complete API changes(baring bug reports) please use for testing and report any issues.

Changed

  • Data serialization moved to a custom protocol specific to HELICS.
  • Minimum build requirements to C++17
  • Many of the API functions now use string_view instead of const std::string &

Fixed

Added

  • Command interface
  • Targeted Endpoints

Removed

  • Message structure from C API
  • Deprecated functions from HELICS 2

v2.6.0

20 Aug 18:14
7423839
Compare
Choose a tag to compare

Bug fixes and major logging update

Changed

  • The build flag function now returns correct debug or release flags depending on the build
  • The debug postfix d is no longer added to the interface libraries
  • Spdlog is now being used for logging inside HELICS and the old logger has been removed this results in fewer thread being generated by HELICS.
  • CMake will now error if the install directory is set to the build directory
  • Some argument names in the C API have been changed for consistency
  • Output a more descriptive error message for mismatched data sizes when converting types #1521
  • Some C++98 API functions were added and changed for consistency, specifically endpoint get type no returns a char * instead of std::string, and a getCurrentTime function was added to Federate
  • logging level properties from a federateInfo structure will be inherited by a core for the first registered federate

Fixed

  • String with negative numerical values were not acknowledging the negation Issue #1306
  • Config file parsing was not acknowledging "unit" string #1512
  • A performance issue with the tcpss and tcp cores in some cases has been resolved by setting the no_delay option
  • Inconsistency in type returned by endpoint getType in C++98 API #1523
  • a potential segmentation fault when calling some methods in the C shared library after calling helicsCloseLibrary

Added

  • Flags for dumplog and force_logging_flush were added to the C API
  • Added missing C++98 call to getCurrentTime
  • Added closeLibrary function to the C++98 API
  • Added a Python benchmark file
  • An option to install the benchmark executables has been added
  • Data logging output for both send and receive of messages
  • A GitHub Actions workflow to build packages for Linux with the benchmark executables

Removed

  • The previous logger including logger.h has been replaced with spdlog

v2.5.2

15 Jun 22:31
badf0ad
Compare
Choose a tag to compare

Bug fix release for some build issues and a fix to the wait_for_current_time flag

Fixed

  • Bug in the timing subsystem that was preventing the wait_for_current_time flag from functioning properly
  • Fixed some oddities in the java tests, that were doing confusing things and happened to work because of the bug in the timing subsystem
  • A build system issue that caused the automated generation of python packages to fail on the 2.5.1 release. This was caused by overriding the output build location in all cases, when it should have been limited if the python interface is getting built separately.
  • A few cppcheck issue from the new check (#1414)

Added

  • Add print_systeminfo flag to root helics_benchmark command (#1417)
  • Added cppcheck github action for PR's

v2.5.1

06 Jun 16:51
e45fb2f
Compare
Choose a tag to compare

Changed

  • All ZeroMQ related files are now located in the network library and under a single namespace
  • Use Python 3.8 instead of 3.6 for any release build installers that include a copy of the Python interface (pip or anaconda are the recommended ways to install the Python interface)
  • Update units library to include some typical natural gas units and conversions
  • Use a separate action for automated pr generation
  • Update the CLI11 library
  • The setOption/getOption functions now take an int32_t as a value instead of a boolean. This does not change the API since in the C library the helics_bool was already an int.
  • In the case of multiple sources, getInjectionType, and getInjectionUnits now will return a json string vector.
  • The CMake build generation now uses a central location for all build artifacts instead of individual directories.
  • Updated the ASIO library to 1-16
  • Minor updates to the clang-format to allow better alignment and comment reflow
  • Numerous code refactorings to simplify and clean up code
  • Move all ZMQ related items to the network library
  • Updated Python packages DLL load failed error to suggest installing the latest Visual C++ Runtime

Fixed

  • Sporadic failures in the Webserver and websocket tests
  • A bug in the translation of vectors to complex vectors
  • A bug in the copying of vectors into the C shared library
  • Numerous clang-tidy identified issues mostly for code readability
  • Some issues with the exists query not working in certain circumstances and for cores and brokers
  • The nonlings test would fail if the branch name had error in it. A check was put into eliminate this false negative test failure.
  • A few sporadic failure cases in the http and websocket tests
  • A build generation issue with disabling the ZMQ core
  • An error from the config interpreter where some flags were not getting correctly propagated to the Federate configuration.

Added

  • A helics::zmq target was added for linking with zeromq if using HELICS as a subproject
  • A HELICS_BENCHMARK_SHIFT_FACTOR CMake option was added to allow the benchmarks to scale depending on computational resources
  • "version" and "version_all" queries to get the local version string and the version strings of all the cores/brokers in the federation
  • A few missing operations to the C++98 interface for Message objects, add helicsMessageClone and helicsEndpointCreateMessage functions in the C interface. Add a test case for some of the C++98 message operations.
  • helicsQuerySetTarget and helicsQuerySetQueryString operations to modify an existing query in the C interface
  • A set of reduction operations for multi-input handling on inputs, options for setting input source priority and the number of expected connections
  • A Watts-Strogatz like benchmark
  • A few more parameters that can be handled in the Webserver and support for use of uuid instead of name
  • A few missing message operators to the C++98 API, such as data, append, setFlag, checkFlag, sendMessageZeroCopy
  • Made the Message class return a self Reference for the setters
  • A test to run the helics-broker executable as part of the CI tests
  • A bug in the helics_broker that no longer ran correct defaults
  • A "version_all" query, to retrieve the version of HELICS in use for all cores/brokers, and a "version" query to retrieve the version of a specific target.
  • A series of checks for markdown, spelling, shellcheck, python formatting, cpplint, end-of-line and automated generation of PR scripts for the formatting updates.
  • Some level of automated scaling for benchmarks for small systems
  • API functions for retrieving the build flags used to generate the library
  • Some additional message interpreters to aid in debugging
  • A test using the standalone helics_broker to run an example

v2.5.0

27 Apr 04:39
26e473d
Compare
Choose a tag to compare

Some library reorganization, additional static analysis(CppLint and clang-tidy), multiBroker, updates to the webserver including some new capabilities for creating and destroying brokers.

Note: the helics_broker has a bug when using the implicit default core type; as a temporary workaround either run it with the --coretype argument or use the helics_app broker subcommand.

Changed

  • Split the HELICS core library into a separate core and network library
  • Update FMT library to version 6.2.0
  • The core and broker Factories use a map instead of a fixed list which is a step toward allowing user defined cores
  • Updated CLI11 included code to customized version to allow configuration of cores and brokers through Json files
  • The ordering of the helics_error_types enum is in ascending order
  • Refactored the Matlab and Java swig interface builds to enable standalone builds

Fixed

  • Added CPPlint and fixed a number of issues that check identified.

Added

  • helicsEndpointSendMessageObjectZeroCopy to allow transferring messages with minimal copying.
  • helics<Interface>IsValid functions to the C API
  • helicscpp::cleanHelicsLibrary to the C++98 API.
  • A Comm factory to the Core to enable constructing Comm interfaces directly from the type.
  • The REST API in the webserver was updated to include ability to create and destroy brokers.
  • A websocket server similar to the REST API but will respond to JSON queries.
  • A test suite for the HTTP and websocket servers.
  • A Multibroker that can allow multiple communication types to interact together.
  • Support for HELICS_BUILD_CONFIGURATION cmake variable for building on unique platforms. The only supported one right now is "PI" for building on raspberry pi platforms.

Deprecated

  • in the C shared library helicsFederateGetMessage, helicsEndpointGetMessage, and helicsEndpointSendMessage are deprecated in favor of the object version These will be removed in HELICS 3.0
  • deprecated helicsEndpointClearMessage this function does nothing right now, all messages are on a federate level.
  • Deprecated error functions in the C++ Federate API in favor of localError and globalError.

v2.4.2

28 Mar 12:25
f05591c
Compare
Choose a tag to compare

Increased code coverage and additional bug fixes.

On March 31, 2020 support for installing HELICS using the Spack develop branch was added

Changed

  • Update toml11 library to 3.3.1 with some warning fixes for C++17
  • The query handling in the core library was cleaned up to be more extensible and uniform

Fixed

  • MacOS build with python 2.7 failure
  • Fixed some issues with the build/test process if the ENABLE_ZMQ_CORE=OFF
  • Fixed a potential issue with queries if they are triggered before the connection ack
  • An issue with host name resolution on some systems with restricted DNS lookup
  • Allow camelCase in file parameters from JSON
  • Fixed linking error with default OpenMPI Spack package
  • Fixed timing benchmark federate name

Added

  • A series of tests for MessageFederate.cpp to increase coverage on that file to 100%
  • Callbacks for custom filters in the C shared library
  • A series of tests for CoreApp, BrokerApp, and FederateInfo and a few fixes for them
  • A few additional tests of helics supports types and conversions
  • CoreApp has a connect() and reset() method and constructor from a Core shared pointer
  • BrokerApp has a connect() method and constructor from a Broker shared pointer
  • Added a data_flow_graph query which gets all the connections in a federation

v2.4.1

07 Mar 13:57
e80b64f
Compare
Choose a tag to compare

Increased code coverage and additional bug fixes. The error propagation in HELICS was improved such that local errors can be escalated to global errors, and a federate can define errors coming from the federate that are handled appropriately and can halt a co-simulation.

Note for macOS users there is a bug that will be fixed in the next release that prevents building the Python interface with SWIG -- this mostly impacts the small number of users on Python 2.7.

Changed

  • The helics webserver will build by default if the conditions are met
  • Update filesystem library to v1.3.0
  • The behavior of the Federate*Complete operations is slightly modified to be uniform and consistent, no API changes
  • Configuration of flags and targets for interfaces in JSON and TOML files can be done in multiple sections
  • The benchmark federates have been changed to use a common base benchmark federate class for more consistent behavior
  • Switched to including netif as a git submodule
  • the error Function in the C++ API is now the same as localError previously it was primary useful for logging and didn't do much, and will be deprecated in the next minor release.
  • Updated the GitHub actions (clang-format, swig interface updates, and release builds) to use actions/checkout@v2
  • Cleaned up the Windows installer (better component names/descriptions and groups, link to Gitter, and require installing Headers to install SWIG)
  • Updated the HELICS apps manpages with new options

Fixed

  • Issue with iterative requests that were not being honored if the federate was acting in isolation
  • A few pathways which would allow segmentation faults if a federate was disconnected and particular functions were called
  • ValueFederate addIndexedTargets, the function template would not work as was written and was unusable, it is now tested and operational.

Added

  • HELICS_DISABLE_WEBSERVER option to turn off building of the webserver. It will build by default if Boost is enabled and is version 1.70 or higher; otherwise it is disabled.
  • A series of tests for Federate.cpp to increase coverage on that file to 100%
  • A series of tests for ValueFederate.*pp to increase coverage on that file to 100%
  • Docker image for a helics builder which includes build tools and the helics installation
  • helics can be installed on MSYS2 using pacman.
  • Standalone benchmark federates for use in multinode benchmark runs
  • A FreeBSD 12.1 CI build using Cirrus CI
  • Sending an event from GitHub Actions release builds to trigger updating additional HELICS packages when a new release is made
  • localError, and GlobalError function calls the Federate API and in the C++ and sharedLibrary.
  • helics_terminate_on_error flag to escalate what would be a local error into a global one that will halt the co-simulation. This flag can be specified through the flag to federates or to brokers and cores through a command line option --terminate_on_error
  • addDependency function was added to the C++ Federate API and shared library API, it can add a direct dependency between federates manually.
  • A 32-bit Windows zip install archive for releases
  • "global_time", "current_time", and "state" queries for brokers and cores, and "current_time" query for federates.
  • Support for a 'helics-release-build' event trigger to the release build GitHub Actions workflow

Deprecated

Removed

  • HELICS_ENABLE_WEBSERVER option to enable the webserver. This option was added as experimental in 2.4.0
  • VS2015 Windows Server 2012 CI build is removed. Azure Pipelines is removing the image because it is outdated and sees little use. VS2015 is still tested through Appveyor for the time being.