Multisystem: Containers

Introduction

In Octopus there is the possibility to group several systems into containers, which are implemented in the multisystem_basic_t class.

Containers can have different purposes and applications. In the simplest case, containers are simply a collection of other systems, and do not have their own interactions with anything else. In this case, containers do not introduce any different physics (or approximations), but simply help in the book-keeping of the problem.

Containers do not correspond to a given region in space, but only to a selection of systems. In many cases, these systems might be confined to a certain region in space, but this is not a property of the container. In many other cases, e.g. combining matter and maxwell fields, both systems occupy the same space, or have a substantial overlap.

Another use case might be to group systems into a container, and then only interact with the whole container, instead of the individual systems. This, however, is an approximation, and furthermore (at least, at the moment) has some limitations due to the implementation.

Note, that containers themselves do not move. This has consequences to the definition of the energy contributions. In particular, a container does not have it’s own kinetic energy, and all kinetic energy contributions of the constituents are accounted for in the internal energy. For more information, see Calculating Energies

Implementation

Most of the functionality is implemented at the level of the abstract class multisystem_t:

Definition of multisystem_t

The specific multisystem_basic_t class only adds the finalizer:

Definition of multisystem_basic_t