A plug-and-play architecture makes replacing of some specific simulation steps possible. Each simulation step is represented by an interface and implementation can be selected in the experiment setup. The {@linkplain saces.exp.Experiment} class loads these plug-and-play classes.

The simulation steps made available for plug-and-play are

  1. Initial particle distribution {@linkplain saces.pnp.Distributor}
  2. Wall reflection {@linkplain saces.pnp.Reflector}
  3. Colision detection {@linkplain saces.pnp.Detector}
  4. Merge reactions {@linkplain saces.pnp.Merger}
  5. Transform reactions {@linkplain saces.pnp.Transformer}
  6. Collision response {@linkplain saces.pnp.Response}
  7. Decay reactions {@linkplain saces.pnp.Decayer}
and perhaps a few more steps.

An important optimizing detail is that the implementations are given arrays and not single instances. The collision response takes an array of collisions, for example. This allows native implementation of some steps which have presented themselves as extraordinarily expensive.