Skip to content

Releases: bluescarni/heyoka

heyoka 7.2.0

02 Jan 14:19
Compare
Choose a tag to compare

This quick release immediately follows version 7.1.0 with the addition of public functions to convert between UTC and TAI Julian dates (which were omitted in 7.1.0 by mistake).

As usual, the full changelog is available here:

https://bluescarni.github.io/heyoka/changelog.html

heyoka 7.1.0

02 Jan 08:40
fd6d070
Compare
Choose a tag to compare

This is a quick release that contains a single change over version 7.0.0: the SGP4 propagator now expects both GPE epochs and propagation dates to be provided as UTC Julian dates.

Internally, epochs and dates are converted to the TAI scale of time in order to ensure accurate propagation even in the presence of leap seconds.

The full changelog, as usual, is available here:

https://bluescarni.github.io/heyoka/changelog.html

heyoka 7.0.0

28 Dec 13:06
Compare
Choose a tag to compare

NOTE: despite the major version bump, there are no API breaking changes.

This is an incremental release which updates the requirement on the mp++ library to version 2 (hence the major version bump).

Other changes include:

  • better tuning for Zen 4 and later CPUs,
  • improved support for non-standard batch sizes (i.e., batch sizes which do not correspond exactly to native SIMD sizes),
  • several improvements and tweaks to the SGP4 integrator implementation.

As usual, the full changelog is available here:

https://bluescarni.github.io/heyoka/changelog.html

heyoka 6.1.0

10 Oct 08:46
Compare
Choose a tag to compare

This is a quick release containing:

  • a fix for a likely clang-17 bug which manifests itself with exceptions being thrown during (de)serialisation, and
  • a fix for symbols from heyoka and its dependencies not being available to the JIT runtime when the heyoka shared library is dlopen()-ed with RTLD_LOCAL.

The minor version number has been bumped out of an abundance of caution, but this release does not contain any new user-facing features.

As usual, the full changelog is available here:

https://bluescarni.github.io/heyoka/changelog.html

heyoka 6.0.0

21 Sep 07:39
Compare
Choose a tag to compare

Improved support for mega-kernels ⚡

The main focus of this new heyoka release is improved support for very large computational graphs in both Taylor integrators and compiled functions. Specifically:

  • when compact_mode is active, heyoka now splits the LLVM IR code in multiple modules rather than keeping it all in a single module - this leads to noticeable improvements in compilation time;
  • the new parjit boolean flag (that can optionally be passed to the constructors of Taylor integrators and compiled functions) can be used to enable parallel compilation in compact_mode - this can lead to dramatically-reduced compilation times on multicore machines;
  • it is now possible to pass the desired LLVM code model to the constructors of Taylor integrators and compiled functions. By default, the small code model is used, but very large computational graphs (which would error out in previous heyoka versions) might require the large model.

Warning

Due to several LLVM issues around parallel JIT compilation discovered during this latest heyoka development cycle, the parjit flag is currently off by default on Unix platforms and completely disabled on Windows. Turning on parjit on Unix platforms is considered safe but can very rarely result in a runtime exception being thrown. See the "known issues" page for more details:

https://bluescarni.github.io/heyoka/known_issues.html

We expect the parjit feature to become more stable in later LLVM releases, at which point it will be turned on by default.

Improvements to the integrator API 🔨

  • It is now possible to initialise a Taylor integrator without providing a set of initial conditions - this will result in a zeroed-out initial state vector.
  • The integrator constructor will now error out if a non-empty array of parameter values with the incorrect size is specified. If an empty array of parameter values is passed on construction, the parameter values in the integrator will be zero-inited.

pow() improvements 💥

Exponentiations with non-numerical exponents are now supported in the right-hand side of ODEs.

Update on supported LLVM versions 🔁

The minimum supported LLVM version is now 15. This release also adds support for the recently-released LLVM 19.

Miscellanea

  • Fix build system warnings when using recent versions of CMake and Boost.
  • Fix compilation on FreeBSD.
  • Enable support for fmt 11.

As usual, the full changelog is available here:

https://bluescarni.github.io/heyoka/changelog.html

heyoka 5.1.0

21 Jul 09:21
Compare
Choose a tag to compare

SGP4 propagation 🌍

heyoka 5.1.0 adds an implementation of SGP4, a widely-used analytical propagator for Earth-orbiting objects.

SGP4 uses two-line elements sets (TLEs) (available from websites such as CelesTrak and Space-Track) to predict the future or past states of Earth-orbiting objects via a simplified perturbation model. The positional accuracy of SGP4 is in the order of kilometres for propagations up to a few days from the TLE reference epoch.

heyoka's SGP4 implementation is fully differentiable up to arbitrary order, thus enabling applications such as state covariance propagation, state transition matrix computation, gradient-based optimisation, orbit determination, etc.

SGP4 is available either as a low-level function that that produces the analytical formulae of SGP4 in heyoka's expression system, or a as a fast high-level propagator class accelerated via multithreaded parallelisation and SIMD vectorisation, providing state-of-the-art propagation performance. For more details, see the tutorial in the documentation of the Python bindings:

https://bluescarni.github.io/heyoka.py/notebooks/sgp4_propagator.html

Logical and relational operators, select() 📝

Another new feature in this release is support for logical and relational operators, as well as the select() primitive, in the heyoka expression system.

Relational operators allow to perform comparisons (such as "equal to", "less than", "greater than", etc.) during the evaluation of an expression (e.g., during a numerical integration), yielding a numerical value of 1 (true) or 0 (false). Logical operators allow to combine comparisons via logical AND/OR.

The select() primitive can be used to select one of two expressions based on the result of a comparison, thus providing a primitive form of if/then/else branching in the expression system. Note however that select() will always evaluate both the true and false branches, and thus it is unsuitable for complicated flow control.

The full changelog, as usual, is available here:

https://bluescarni.github.io/heyoka/changelog.html

heyoka 5.0.0

13 Jun 19:57
Compare
Choose a tag to compare

Variational equations 💫

With version 5.0.0, heyoka takes another big leap forward with built-in support for the variational equations - that is, the ability to compute not only the solution of an ODE system, but also its partial derivatives with respect to the initial conditions and/or parameters of the system.

The variational equations, which are automatically formulated by heyoka at any order via a process of efficient symbolic differentiation, enable a host of new applications, such as the solution of inversion problems (e.g., orbit determination), uncertainty propagation, Taylor maps and jet transport, the computation of chaos indicators, training of neural networks in NeuralODEs, etc.

A tutorial describing this new feature is available in the Python bindings.

Thermosphere models 🤖

Another big addition in this release is thermoNETs - a set of novel models for the calculation of the Earth's atmospheric density. These models, which have been recently unveiled at the ISSFD2024 conference, can be used to set up accurate and high-performance simulations of the LEO dynamical environment, accounting for the influence of air drag during orbital propagation. A tutorial describing this new feature is available in the Python bindings.

For more information, see also the arxiv preprint https://arxiv.org/html/2405.19384v1.

Support for LLVM 18

heyoka 5.0.0 adds support for the recently-released version 18 of LLVM.

The full changelog, as usual, is available here:

https://bluescarni.github.io/heyoka/changelog.html

heyoka 4.0.3

04 Apr 07:12
Compare
Choose a tag to compare

This is a quick release that fixes a couple of build issues, one on FreeBSD and the other affecting the unit tests when building with GCC 13.

NOTE: heyoka 4.x introduces several breaking changes with respect to the 3.x series. Please see the following link for a list of breaking changes and explanations on how to adapt your code to the new API:

https://bluescarni.github.io/heyoka/breaking_changes.html#bchanges-4-0-0

heyoka 4.0.2

03 Mar 19:34
Compare
Choose a tag to compare

This is a quick release that fixes a build issue on MinGW.

NOTE: heyoka 4.x introduces several breaking changes with respect to the 3.x series. Please see the following link for a list of breaking changes and explanations on how to adapt your code to the new API:

https://bluescarni.github.io/heyoka/breaking_changes.html#bchanges-4-0-0

heyoka 4.0.1

02 Mar 15:42
Compare
Choose a tag to compare

This is a quick release that fixes a build issue on PPC64.

NOTE: heyoka 4.x introduces several breaking changes with respect to the 3.x series. Please see the following link for a list of breaking changes and explanations on how to adapt your code to the new API:

https://bluescarni.github.io/heyoka/breaking_changes.html#bchanges-4-0-0