Operational Semantics

From Nova Documentation
Jump to: navigation, search

This refers to the behavior of the Nova simulating engine. To fully appreciate Nova design concepts, you should first know something about how it works.

Each simulation uses a clock to sequence its steps. The clock maintains a current model time, starting at a specific start time (usually 0) and end time, and incremented at each step by a delta value called dt.

Each step, or iteration represents the progress of the system from its state at time t to its state at time t+dt. The state of the system is comprised of the values of all Stocks, Sequences and Local Variables in all Capsules used by the simulation. The user must choose an integration method, which determines the process by which Stocks representing continuous functions are updated.

At the beginning of the iteration model time is t, and by the end it has been updated to t+dt. During the iteration the computation “bootstraps” by drawing on previously computed values to compute the next generation. Depending on the integration method, model time may be updated incrementally through several substeps, however in systems dynamics models all processing is complete once model time has reached t + dt. This may not be the case for other simulation types. Consequently, you will notice that some components (Commands and Codechips) provide a choice of pre-update or post-update for when they are to be executed. Those selected for pre-update use component values at t (or intermediate points, depending on the integration method), while those selected for post-update use the newly computed values for t + dt.

An iteration consists of a sequence of strobes, which are actions taken at a step or substep, followed by post-processing, which is performed once at the end of the iteration when the clock has been updated to t + dt. Here is a simplified summary of Capsule iteration:

Strobe

  • Strobe aggregates and chips
  • Strobe stateful and converter plugins (explaned here)
  • Strobe Stocks (i.e. compute their next values)
  • Strobe pre-update Code Chips, Commands and converter plug-ins
  • Update clock

Post Processing

  • Post-process aggregates and chips
  • Strobe post-update Codechips and Commands
  • Update displays and display plug-ins
  • Perform any cleanup