List of limitations

“What limitations does Morpheus have?”

Below is a non-exhaustive list of Morpheus limitations. Many of these are on our to-do list or under development.


Morpheus uses regular lattice discretization for all spatial processes. It does not support irregular lattices of continuous space models.


The solvers in Morpheus use finite difference schemes with adaptive time-stepping by default. Fixed time-stepping schemes are also available. It does not support solving of really stiff ODE systems.


Morpheus can simulate reaction-diffusion systems, but does not support processes that depend on other derivatives (e.g. in order to model advection).

Cell motility

Morpheus supports the cellular Potts model to represent cell shape, motility and interaction. Depending on the scale at which cell-based models are used, motility of cells may be more suitably modeled in more parsimonious formalisms, such as interacting particle systems. These are currently not supported by Morpheus.


Morpheus is an extensible framework and provides a plugin interface to extend its features. However, this requires building from source. To build Morpheus, please clone the sources from our GitLab repository.


Multi-scale models pose very different challanges in terms of performance requirements. Morpheus offers in particular an optimized scheduling of solvers based on model analysis, expression optimization and adaptive solvers to conquer these challenges. However, Morpheus' flexibility comes at a price: Mathematical expressions are parsed and evaluated on the fly by muparser. Although this provides fast evaluation by translating into bytecode, its performance cannot compete with compiled C++ code. Thus, the flexibility gained by using parsed expression invokes a penalty on computational performance.

The amount of penalty depends on the number and complexity of parsed expressions and is highly model-dependent. Therefore, Morpheus may not be best-suited for large-scale simulations.

See the results of performance and scalability tests for more detailed and quantitative information.


Morpheus uses openMP multithreading to concurrently execute several data-parallel processes. For instance, intracellular ODEs are computed concurrently for each cell. As of Morpheus 2.0, the use of multi-threading has been generalized to better exploit computation on multi-core machines. However, scalability heavily depends on the used specific model components, in particular the CPM component is not parallelized yet.