1# Ascent
2
3An extremely fast and flexible C++ simulation engine and differential equation solver.
4
5See the [Ascent Wiki](https://github.com/AnyarInc/Ascent/wiki) for more examples and help
6
7Study the [modular-spring-damper](https://github.com/AnyarInc/Ascent/wiki/modular-spring-damper) example to learn the basics of solving matrix free systems of ordinary differential equations in an object-oriented manner
8
9## Blazingly Fast
10
11Ascent's integration algorithms are designed for speed, and outperform boost's [odeint](http://headmyshoulder.github.io/odeint-v2/index.html) in both Debug and Release
12
13<img src="https://github.com/AnyarInc/Ascent/wiki/graphics/speedup-ratio.PNG" width="400"><img src="https://github.com/AnyarInc/Ascent/wiki/graphics/Lorenz.PNG" width="300">
14
15Integration algorithms are automatically vectorized when using std::vector
16
17## Extremely Flexible
18
19Ascent solvers conform to the odeint system syntax, letting you run odeint system without changes (and with faster results!)
20
21odeint solvers can also be used to run Ascent simulations, providing all flexibility of the odeint engine with Ascent's simulation framework
22
23Ascent can solve complex, dynamic systems of differential equations in a modular, object-oriented manner
24
25Easily multi-thread systems and change integrators on the fly
26
27## Highlights
28- Header Only
29- Automatic Vectorization: Ascent conforms to vectorization standards (such as Intel's)
30- Free for open source and commercial applications (Apache License)
31- Modular (Optional): solve systems in an object-oriented manner
32- Variable Tracking: Optimized recording of variable time history
33- Asynchronous Sampling and Event Scheduling
34- Multiple Integration Algorithms (In Progress): adaptive steppers, predictor-correctors, etc.
35- Use boost's odeint library as the numerical integration engine
36
37***
38## Requirements
39- C++17 compliant compiler
40
41## Applications
42- Aerospace, multi-body physics, chemical reactions, economics, circuits, and much more
43- As a game engine for synchronization and physics
44- Agent-based simulations
45- Complex systems of differential equations
46- State-space modeling
47- Control algorithms (e.g. robotics)
48
49***
50### About [odeint](https://github.com/boostorg/odeint)
51odeint is a C++ ordinary differential equation solver that is part of the boost library.
52Ascent was partly inspired by the design of odeint, but Ascent offers better performance where comparisons can be made, this is especially true for solving object-oriented systems.
53odeint offers various state types and solvers that Ascent integration algorithms currently do not support, so the odeint solvers are a viable option as the integration algorithm beneath an Ascent simulation.
54