ASCEND capabilities

From ASCEND

Jump to: navigation, search


This is intended to be a succinct list of the core capabilities of ASCEND. It's supposed to address what types of numerical problems can be solved and what algorithms it uses, rather that all the glories of the GUI(s) and API(s) etc. More of what and less of how. No mention of any purely GUI features here eg plotting, sparsity maps etc.

The items I can confidently state include:

  • Solves real-valued systems of non-linear equations (i.e. steady state)
  • Allows models to be built up as combinations of interconnected smaller sub-models (Object-oriented modelling)
  • Polymorphism allows models to be specialised instances of more general models
  • Parameterised models allows for flexible interconnection of components, and more reusable model code
  • Tracks, outputs and converts units of measurement
  • Efficiently manage arrays of subcomponents (submodels, or just equations or variables) declared with 'for loop' style syntax.
  • Decomposes hierarchical models into 'flat' systems of relations and variables
  • Decomposes systems of relations and variables into 'blocks' of self-contained subsystems
  • Compiles 'flat' systems into machine-code for fast evaluation during solving (optional)
  • Normalises variables according to user preference
  • Implements an efficient equation reordering algorithm that improves convergence, similar to 'tearing'
  • Dynamic modelling with the LSODE ODE integrator (using a rather laborious syntax at present) for defined timestep sequences
  • 'Creep up on solutions': solver keeps its results, allows modifications to system then re-analyse and re-solve.
  • Model initialisation performed by arbitrary 'METHOD' statements; so models can be given with multiple 'starting states'.
  • Efficiently recognises repeating sub-sections of large models, and uses this to aid in the pre-ordering analysis('anonymous class') and solution.
  • Solves 'conditional models' in which certain equations are used or not used depending on the values of boolean variables in the system.
  • Allows equations written in other languages/tools to be linked with ASCEND solver using 'external library' code.

Partial support:


Some things which I think ASCEND can do, but which I can't say for sure are:

  • Performs some basic symbolic manipulation to allow direct solution of certain simple equations.
  • Uses dog-leg Newton solver techniques to converge
  • Solve deterministic (one variable per block) boolean/logical systems LRSlv

Broken functionality:

  • Export models to other formats (eg GAMS)

It just can't:

  • Solve higher-order DAEs and ODEs (you need to reduce the order manually)
  • Perform index reduction on systems of DAEs
  • Automatically 'tear' systems of equations (although the preordering has a similar effect?)

Some strictly architectural features include:

  • 'Model library' architecture for common model components
  • Scripting with Tcl/Tk and with Python (two different APIs though)
  • Values can be modified interactively
  • Constants (fixed values) and variables (free values) can be interchanged interactively at any stage (not just in the original model declaration file).
  • A structured self-documentation format ('NOTES') a la doxygen.
Personal tools