The subsystems from which SimSoup is composed are identified below. The purpose of each subsystem is described. Where a subsystem has one or more subsystem level interfaces, these are also identified and described.
Kernel Layer Subsystems
Kernel: The Kernel is the heart of the SimSoup model. It is responsible for representing Molecules and the Interactions that take place between them. The Kernel is also responsible for ensuring that the simulation is setup and run according to the user's requirements (as specified in 'Action Requests'). The Kernel is composed of the following subsystems:-
- Chemistry: Represents the laws of the SimSoup artificial chemistry by defining Molecule Types and the Interaction Types in which they cay be involved. The Chemistry is also referred to as the Static Model.
- Reactor: Provides the Dynamic Model, in which Molecules of the types defined in the Chemistry take part in Interactions of various types (also defined in the Chemistry). The Reactor has the following subsystem interfaces:-
- IntType Notify API: This enables the Reactor to be notified of the addition of new Interaction Types and the removal of existing Interaction Types
- Reactor Time API: This provides access to the Reactor time
- Simulation: Enables simulation scenarios to be defined in terms of Action Requests, and runs these scenarios by using the functions of the Chemistry and Reactor subsystems to execute the Action Requests.
- Tracker: Enables the detection and monitoring of cycles in which material in the Reactor goes through a series if Interactions and periodically returns to the same Molecule Type. Such cycles are key to the operation of autocatalytic sets.
- Kernel Manager: Undertakes key management functions for the kernel. This includes initialising Kernel structures, and co-operating with the SimSoup GUI subsystem and GTK+ to schedule simulation processing.
The Kernel has the following subsystem interfaces:-
- Kernel Control API: This handles Kernel Control Requests
- Kernel Visibility API: This handles Kernel Visibility Requests, returning the required Kernel information.
Statistics: The Statistics subsystem provides facilities for storing and retrieving simulation statistics, including time series data.
Utilities: This provides a range of general purpose functions, including random number sequence handling.
User Interface Manager Layer Subsystems
Form Manager: Manages the SimSoup user interface. Provides the logic required to handle user inputs and to control the display of information; this includes handling Simulation Display Requests from the Kernel. The Form Manager is not responsible for the final presentation of the user interface or for the initial capture of user inputs; instead it manages an abstraction of the user interface. This ensures that it is isolated from the details of the graphics toolset used for presentation. The Form Manager has the following subsystem interfaces:-
- Simulation Display API: This provides the means for the Kernel to request the display of simulation information
- User Actions API: This provides the means for Kernel Control Requests and Kernel Visibility Requests to be passed to the User Interface Presentatrion Layer.
Network Painter: This is responsible for graphical display of networks.
User Interface Presentation Layer Subsystems
SimSoup GUI: This is responsible for presentation of the user interface, including screen display and the immediate handling of user inputs; it uses the GTK+ graphics toolset. Each of the 'Forms' known to the Form Manager is setup as a tab in a GTK+ Notebook. The SimSoup GUI initialises and manages the various widgets on each tab, as well as the SimSoup menu. Handlers for the various SimSoup user actions are provided; when they are invoked they each call the relevant logic in the Form Manager. The SimSoup GUI provides the following subsystem interface:-
- SimSoup GUI API: This provides the means for output from the Form Manager to be displayed on the GUI. This could be simulation output generated by the Form Manager in response to Simulation Display Requests, or it could be output resulting from Kernel Visibility Requests.
GUI Tools: Provides some common tools for managing the SimSoup user interface.
GTK+: This is the Gimp Toolkit. It is a multi-platform toolkit for creating graphical user interfaces. GTK+ is free software and part of the GNU Project. It is used to provide the user interface for SimSoup. Thanks to the GTK+ team for making this excellent software available! GTK+ provides the following interface:-
- GTKMM: This is the official C++ interface for GTK. SimSoup is written in C++, and so GTKMM is the natural choice for accessing GTK+.