All Projects → bluescarni → heyoka

bluescarni / heyoka

Licence: MPL-2.0 license
C++ library for ODE integration via Taylor's method and LLVM

Programming Languages

C++
36643 projects - #6 most used programming language

Projects that are alternatives of or similar to heyoka

heyoka.py
Python library for ODE integration via Taylor's method and LLVM
Stars: ✭ 45 (-70.2%)
Mutual labels:  astronomy, llvm, astrodynamics, ode, simd, astrophysics, nbody, differential-equations, multiprecision, n-body, ode-solver, celestial-mechanics, extended-precision, just-in-time
godesim
ODE system solver made simple. For IVPs (initial value problems).
Stars: ✭ 19 (-87.42%)
Mutual labels:  ode, differential-equations, ode-solver
owl ode
Owl's Differential Equation Solvers
Stars: ✭ 24 (-84.11%)
Mutual labels:  ode, differential-equations, ode-solver
odex-js
Bulirsch-Stoer integration of systems of ordinary differential equations in JavaScript
Stars: ✭ 52 (-65.56%)
Mutual labels:  ode, differential-equations, ode-solver
pydens
PyDEns is a framework for solving Ordinary and Partial Differential Equations (ODEs & PDEs) using neural networks
Stars: ✭ 201 (+33.11%)
Mutual labels:  ode, differential-equations, ode-solver
yt astro analysis
yt astrophysical analysis modules
Stars: ✭ 18 (-88.08%)
Mutual labels:  astronomy, astrophysics
diffeqr
Solving differential equations in R using DifferentialEquations.jl and the SciML Scientific Machine Learning ecosystem
Stars: ✭ 118 (-21.85%)
Mutual labels:  ode, differential-equations
Sundials.jl
Julia interface to Sundials, including a nonlinear solver (KINSOL), ODE's (CVODE and ARKODE), and DAE's (IDA) in a SciML scientific machine learning enabled manner
Stars: ✭ 167 (+10.6%)
Mutual labels:  ode, differential-equations
DiffEqPhysics.jl
A library for building differential equations arising from physical problems for physics-informed and scientific machine learning (SciML)
Stars: ✭ 46 (-69.54%)
Mutual labels:  ode, differential-equations
odepack
Work in Progress to refactor and modernize the ODEPACK Library
Stars: ✭ 30 (-80.13%)
Mutual labels:  ode, ode-solver
astrobook
The Astrobook source files
Stars: ✭ 32 (-78.81%)
Mutual labels:  astronomy, astrodynamics
DiffEqCallbacks.jl
A library of useful callbacks for hybrid scientific machine learning (SciML) with augmented differential equation solvers
Stars: ✭ 43 (-71.52%)
Mutual labels:  ode, differential-equations
dae-cpp
A simple but powerful C++ DAE (Differential Algebraic Equation) solver
Stars: ✭ 33 (-78.15%)
Mutual labels:  ode, differential-equations
CellMLToolkit.jl
CellMLToolkit.jl is a Julia library that connects CellML models to the Scientific Julia ecosystem.
Stars: ✭ 50 (-66.89%)
Mutual labels:  ode, differential-equations
DiffEqUncertainty.jl
Fast uncertainty quantification for scientific machine learning (SciML) and differential equations
Stars: ✭ 61 (-59.6%)
Mutual labels:  ode, differential-equations
DiffEqDevTools.jl
Benchmarking, testing, and development tools for differential equations and scientific machine learning (SciML)
Stars: ✭ 37 (-75.5%)
Mutual labels:  ode, differential-equations
PandExo
A Community Tool for Transiting Exoplanet Science with the JWST & HST
Stars: ✭ 23 (-84.77%)
Mutual labels:  astronomy, astrophysics
Compiler-written-in-Haskell
A Turing complete language 😉
Stars: ✭ 31 (-79.47%)
Mutual labels:  llvm, just-in-time
FLINT
Fortran Library for numerical INTegration of differential equations
Stars: ✭ 37 (-75.5%)
Mutual labels:  ode, differential-equations
MultiScaleArrays.jl
A framework for developing multi-scale arrays for use in scientific machine learning (SciML) simulations
Stars: ✭ 63 (-58.28%)
Mutual labels:  ode, differential-equations

heyoka

Build Status Build Status Build Status Build Status language Code Coverage

Anaconda-Server Badge


Logo

Modern Taylor's method via just-in-time compilation
Explore the docs »

Report bug · Request feature · Discuss

The heyókȟa [...] is a kind of sacred clown in the culture of the Sioux (Lakota and Dakota people) of the Great Plains of North America. The heyoka is a contrarian, jester, and satirist, who speaks, moves and reacts in an opposite fashion to the people around them.

heyoka is a C++ library for the integration of ordinary differential equations (ODEs) via Taylor's method, based on automatic differentiation techniques and aggressive just-in-time compilation via LLVM. Notable features include:

  • support for both double-precision and extended-precision floating-point types (80-bit and 128-bit),
  • the ability to maintain machine precision accuracy over tens of billions of timesteps,
  • high-precision zero-cost dense output,
  • accurate and reliable event detection,
  • batch mode integration to harness the power of modern SIMD instruction sets,
  • ensemble simulations and automatic parallelisation.

If you prefer using Python rather than C++, heyoka can be used from Python via heyoka.py, its Python bindings.

If you are using heyoka as part of your research, teaching, or other activities, we would be grateful if you could star the repository and/or cite our work. For citation purposes, you can use the following BibTex entry, which refers to the heyoka paper (arXiv preprint):

@article{10.1093/mnras/stab1032,
    author = {Biscani, Francesco and Izzo, Dario},
    title = "{Revisiting high-order Taylor methods for astrodynamics and celestial mechanics}",
    journal = {Monthly Notices of the Royal Astronomical Society},
    volume = {504},
    number = {2},
    pages = {2614-2628},
    year = {2021},
    month = {04},
    issn = {0035-8711},
    doi = {10.1093/mnras/stab1032},
    url = {https://doi.org/10.1093/mnras/stab1032},
    eprint = {https://academic.oup.com/mnras/article-pdf/504/2/2614/37750349/stab1032.pdf}
}

heyoka's novel event detection system is described in the following paper (arXiv preprint):

@article{10.1093/mnras/stac1092,
    author = {Biscani, Francesco and Izzo, Dario},
    title = "{Reliable event detection for Taylor methods in astrodynamics}",
    journal = {Monthly Notices of the Royal Astronomical Society},
    volume = {513},
    number = {4},
    pages = {4833-4844},
    year = {2022},
    month = {04},
    issn = {0035-8711},
    doi = {10.1093/mnras/stac1092},
    url = {https://doi.org/10.1093/mnras/stac1092},
    eprint = {https://academic.oup.com/mnras/article-pdf/513/4/4833/43796551/stac1092.pdf}
}

Quick example

As a simple example, here's how the ODE system of the pendulum is defined and numerically integrated in heyoka:

#include <iostream>

#include <heyoka/heyoka.hpp>

using namespace heyoka;

int main()
{
    // Create the symbolic variables x and v.
    auto [x, v] = make_vars("x", "v");

    // Create the integrator object
    // in double precision.
    auto ta = taylor_adaptive<double>{// Definition of the ODE system:
                                      // x' = v
                                      // v' = -9.8 * sin(x)
                                      {prime(x) = v, prime(v) = -9.8 * sin(x)},
                                      // Initial conditions
                                      // for x and v.
                                      {0.05, 0.025}};

    // Integrate for 10 time units.
    ta.propagate_for(10.);

    // Print the state vector.
    std::cout << "x(10) = " << ta.get_state()[0] << '\n';
    std::cout << "v(10) = " << ta.get_state()[1] << '\n';
}

Output:

x(10) = 0.0487397
y(10) = 0.0429423

Documentation

The full documentation can be found here.

Authors

  • Francesco Biscani (Max Planck Institute for Astronomy)
  • Dario Izzo (European Space Agency)

License

heyoka is released under the MPL-2.0 license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].