Nanoverse allows for two kinds of layers: agent layers and continuum layers. The latter represent a scalar field of continuous values, with one value at each coordinate. These values can be locally manipulated by agents, or globally transformed through continuum processes.
Continuum layers are coupled to a solver. There are two kinds of solvers: equilibrium and non-equilibirum. The equilibrium solver solves a transformation to steady state (assuming one exists), while the non-equilibrium solver integrates forward by a finite amount. The equilibrium solvers are much more mature than the non-equilibrium solvers, although all of these features are fairly new.
By default, changes to the continuum are applied as soon as they are requested. If a single agent alters its local continuum value, that will require a global update. Obviously that's not very efficient, so we include two meta-processes:
Release. When a
Hold event occurs, changes are queued up until a
Release event takes place. At that time, any scheduled matrix or vector operations are added up, and the resulting operation is solved all at once. The
Release can happen in the same cycle as the
Hold operation, or in a different cycle.
For example, suppose that the user specifies a
Hold process. If a
Release process then followed immediately, the continuum would not be changed at all. If the user scheduled a
Exp process (multiply every site's value by some scalar) before the
Release process, then once again the result would be the same as never having used
If, however, the user schedules a
Hold, then an
Exp, and then a
Diffuse, we start to see the power of
Release: the matrix operations associated with
Diffuse are summed, and then both of them are applied at the same time.
Agents can affect the local state of continuum layers two ways. The first is called a
Relationship, and is specified as a property of the
Agent. Relationships are ongoing interactions between the agent and the layer. For example, the the agent may deplete the local value of a continuum by a set percent (
exp) or increase it by a constant amount (
inj). These changes follow the agent around as it moves (or dies).
Relationships do not get updated automatically as the agent moves; with many thousands of agents, that would become prohibitively slow. If using
Release, relationship state is updated upon
Release. If not using
Release, it can be updated instantaneously using a process called