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