ASCENT





Stephen Berry
June, 2016
Anyar, Inc.

http://anyarinc.github.io/ascent/

A modern, open source, C++ simulation architecture and engine

Replaces two aerospace architectures used by the US Air Force, Army, and NASA:

  • Computer Aided Design of Aerospace Concepts (CADAC++)
  • C++ Model Developer

Developed under Phase 3 SBIR for Air Force Research Lab

Why Another Simulation Engine?

➢ Automatic, dynamic ordering with mixed synchronicity
➢ Non-iterative, matrix free system solving
➢ Modern, memory managed, C++
➢ Distributed and multi-threaded simulations
➢ Highly generic and modular
➢ Built on powerful open source libraries

  • and more . . .

CADAC++

➢ Over 35 years of development by Dr. Peter H. Zipfel
➢ Used by the Air Force Research Lab for high fidelity 6 DoF missile modeling


▼
CADAC++ Limitations
Design/Feature CADAC++ Ascent
Proper Discrete and Continuous Signal Mixing ✘ ✔
Integration State Handling ✘ ✔
Various/Interchangeable Integration Methods ✘ ✔
Module Specific Sampling Rates ✘ ✔
Asynchronous Sampling and Event Scheduling ✘ ✔
Module Level Variables ✘ ✔
Guaranteed Use of Properly Initialized Variables ✘ ✔
Automatic Module Ordering ✘ ✔
Variable Accessing/Setting Errors Caught at Compile Time ✘ ✔
Module Interconnection Is Modifiable and Limitable ✘ ✔
Modules Can Be Frozen Yet Accessible For Testing ✘ ✔
Dynamic Module Interconnection/Deletion ✘ ✔
Modules as Drivers ✘ ✔
Inter-Phase Algorithmic Ordering ✘ ✔
Developing New Modules Does Not Affect Base Inherited Class ✘ ✔
Complex Stoppers ✘ ✔

C++ Model Developer

➢ Improved upon NASA's MAVERIC architecture for multi-stage rocket simulation

Ascent began as an extension of the C++ Model Developer architecture.

▼
C++ Model Developer Limitations
Design/Feature C++ Model Developer Ascent
Predictor-Corrector and Adaptive Integration Algorithms ✘ ✔
Guaranteed Use of Properly Initialized Variables ✘ ✔
Automatic Module Ordering ✘ ✔
Module Interconnection Is Modifiable and Limitable ✘ ✔
Modules Can Be Frozen Yet Accessible For Testing ✘ ✔
Dynamic Module Interconnection/Deletion ✘ ✔
Queue-free Staging ✘ ✔
Modules as Drivers ✘ ✔
Inter-Phase Algorithmic Ordering ✘ ✔
Variable Tracking ✘ ✔
Complex Stoppers ✘ ✔
Supports Multi-Threading ✘ ✔
Embedded Scripting Engine ✘ ✔

Solving Ordinary Differential Equations

Entire systems solved within ODE engine

Lorenz Attractor
▼
Minimum Phase-Based Integration
  • ➢ No need for init0, init1, init2, etc.
  • ➢ Integration is fully separated from differentiation


Importance of Higher Order Integration

Solving Complex Systems

Non-iterative, matrix-free, solution. Easy to reconfigure. No state-space modeling required!

Used by Anyar, Inc. to solve viscoelastic human injury models.

Module Ordering

➢ Memory is internally managed with std::shared_ptr(s)
➢ A shared pointer is a race condition!


  1. Asynchronous (no ordering required)
  2. Pre-computational ordering
  3. Post-computational ordering

▼

Automatic Ordering

This ordering is automatically generated from how module data is accessed!

▼

Drivers

The Mass modules don't need to know anything about the Spring and Damper modules.
The programmer only defines the driving links.

Sampling and Events

➢ Queue-free event handling
➢ Asynchronously assign events
➢ Events are exactly stepped to with proper numerical integration
➢ Specify sampling rates for discrete signals

Agent Based Simulations













Control Problems


Results for asychronous runs with differing proportional gains
void Control::postcalc()
{
   error.push_back(x_target - x);

   f = Kp*error.back() + Ki * error.integral() + Kd*error.derivative();
}

ChaiScript Embedded C++ Scripting Engine

Ascent combines variable tracking and scripting with straightforward macros, for fast and generic interfaces.

Ascent even allows scripting of Eigen matrix and vector math

Contributions Are Welcome!


Future Plans

  • ➢ JSON interface*
  • ➢ Partial differential equations with method of lines
  • ➢ GPU acceleration
  • ➢ Built in, generic, table handling
    *Prototype built