LILAC
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
LILAC

LILAC is a C++ framework for simulating complex dynamical systems. It provides an extensible set of utilities for performing simulations, from integrators to data IO. For many cases, one may just have to write a class that represents the actual system itself-the f(x) in dx/dt = f(x). An example with extensive documentation and commenting can be found in example_rhs.cpp and example_rhs.h, and the class example_rhs show how to do this.

The main internal structure of a simulation works like this:

  1. The engine reads the input file and constructs each object
    See Also
    engineimp
  2. A dependency graph is generated from the items. Execution ceases here if it is impossible to satisfy the dependencies (a dependency does not exist, or is cyclical)
  3. Each item performs processing processing to prepare for the simulation (allocating memory, calculating values, etc)
  4. The engine calls the simulate function of the simulation class that is active
  5. The engine increments the controller to the next value, and calls the update function on each item that references a variable
  6. The process repeats until the controller is out of values

For documentation on the input language, see Input Tutorial

Documentation on compiling can be found in Compiling the Code

Documentation on running LILAC can be found in Running Lilac

Documentation on Nersc scripts can be found in Running on Nersc

Features that could be added are describes in Features for Lilac