  Scalable and efficient numerical simulations continue to gain importance, as
computation is firmly established as the third pillar of discovery, alongside
theory and experiment. Meanwhile, the performance of computing hardware grows
through increasing heterogeneous parallelism, enabling simulations of ever more
complex models. However, efficiently implementing scalable codes on
heterogeneous, distributed hardware systems becomes the bottleneck. This
bottleneck can be alleviated by intermediate software layers that provide
higher-level abstractions closer to the problem domain, hence allowing the
computational scientist to focus on the simulation. Here, we present OpenFPM,
an open and scalable framework that provides an abstraction layer for numerical
simulations using particles and/or meshes. OpenFPM provides transparent and
scalable infrastructure for shared-memory and distributed-memory
implementations of particles-only and hybrid particle-mesh simulations of both
discrete and continuous models, as well as non-simulation codes. This
infrastructure is complemented with portable implementations of frequently used
numerical routines, as well as interfaces to third-party libraries. We present
the architecture and design of OpenFPM, detail the underlying abstractions, and
benchmark the framework in applications ranging from Smoothed-Particle
Hydrodynamics (SPH) to Molecular Dynamics (MD), Discrete Element Methods (DEM),
Vortex Methods, stencil codes, high-dimensional Monte Carlo sampling (CMA-ES),
and Reaction-Diffusion solvers, comparing it to the current state of the art
and existing software frameworks.
