# Multisystem framework

Support for multisystem in Octopus is implemented through an object-oriented framework.

Currently, two major modes are implemented:

1. The legacy mode, which only allows for one ‘‘matter’’ system, consisting of electrons, ions and external fields.
2. The new multisystem framework, which allows for several coupled systems, e.g. maxwell, charged particles, etc.

At the time of writing (Feb. 2021), electrons and ions are not yet available as separate systems.

### Legacy mode

The ‘‘legacy’’ mode of the code is used whenever the input file does not have a Systems block. In this case, the top level system is initialized to be of (the old) electrons_t type. This type describes the combined electron-ion system. It is planned for te future, that this will be split into the new electrons_t and ions_t, which will descibe the electrons and ions as separate systems. The current electrons_t is to be replaced by the matter_t, which is a multisystem, containing electrons and ions.

### Multisystem mode

If the input file contains the Systems block, the code uses the new multisystems mode. In this multisystem mode, from the user perspective, the highest level system is a ‘‘multisystem’’. Multisystems are containers which can host other system types, including other multisystems. From the code perspective, the multisystem_t type is a special case of the system_t type (i.e. it extends system_t).

The following chapters will discuss in more detail: