User Tools

Site Tools


This page is accurate as of Nanoverse v1.0.0-a6. If you are using a later version, some aspects may have changed.

Continuum layers

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.

Hold and release

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: Hold and 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 Hold and Release.

If, however, the user schedules a Hold, then an Exp, and then a Diffuse, we start to see the power of Hold and Release: the matrix operations associated with Exp and Diffuse are summed, and then both of them are applied at the same time.

Agent-continuum relationships

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 Hold and Release, relationship state is updated upon Release. If not using Hold and Release, it can be updated instantaneously using a process called Integrate.

continuum_layers.txt · Last modified: 2015/11/17 10:33 by david