Simulation Framework

The Simulation Framework is a set of cooperating classes designed to facilitate developing large, complex, distributed, event driven simulations.  Many of the difficult and complex parts of this type of simulation development are handled without the need for any developer coding.  Systematic techniques are used to perform frequently needed functions such as getting input parameters, logging informational, warning or error messages and configuring the simulation.  This assists the simulation developer as well as ensuring a consistent method is used for these omnipresent tasks.

The simulation application consists of a distributed network of cooperating nodes.  Each node runs an executable program (node application program) called a NodeApp.  The NodeApp programs are assumed independent of one another.  Each node can contain any number of models of any model type.

The method of communication between nodes can be defined (i.e. it is not fixed).  The communication interface is defined by the base class CComm which defines the communication objects used to communicate between nodes.  Any class derived from this base class can be used.  All models within the same node are assumed to be able to communicate through shared memory and assumed to run under a single thread of execution.  This allows intra-node messages to bypass the node to node communication method for efficiency and bypass mutual exclusion concerns for ease of simulation development.

Models communicate with other models by sending messages.  Normally, the communication object will optimize sending messages between models on the same node so that no distributed communication overhead is incurred.

The Simulation Framework supports multiple sessions per each time the NodeApp is executed.  A session is defined to be a repeatable simulation execution.  Since a distributed simulation requires a startup, configuration, and shut down phase for a session, the SF allows the simulation to wait after each session so that it can be run again without incurring the repeated overhead of the startup, configuration and shut down phases.

The Simulation Framework supports Monte-Carlo processing by always performing a run set during each session.  A run set is initialized, a sequence of N runs is performed, and the run set is summarized.  Each run is initialized, processed and summarized.  A previous session can be repeated through a random number control process.