libmpdata++ 0.1: a library of parallel MPDATA solvers for systems of generalised transport equations
This paper accompanies first release of libmpdata++, a C++ library implementing the Multidimensional Positive-Definite Advection Transport Algorithm (MPDATA). The library offers basic numerical solvers for systems of generalised transport equations. The solvers are forward-in-time, conservative and...
Saved in:
Main Authors | , , , , , |
---|---|
Format | Journal Article |
Language | English |
Published |
04.07.2014
|
Subjects | |
Online Access | Get full text |
Cover
Loading…
Summary: | This paper accompanies first release of libmpdata++, a C++ library
implementing the Multidimensional Positive-Definite Advection Transport
Algorithm (MPDATA). The library offers basic numerical solvers for systems of
generalised transport equations. The solvers are forward-in-time, conservative
and non-linearly stable. The libmpdata++ library covers the basic
second-order-accurate formulation of MPDATA, its third-order variant, the
infinite-gauge option for variable-sign fields and a flux-corrected transport
extension to guarantee non-oscillatory solutions. The library is equipped with
a non-symmetric variational elliptic solver for implicit evaluation of pressure
gradient terms. All solvers offer parallelisation through domain decomposition
using shared-memory parallelisation.
The paper describes the library programming interface, and serves as a user
guide. Supported options are illustrated with benchmarks discussed in the
MPDATA literature. Benchmark descriptions include code snippets as well as
quantitative representations of simulation results. Examples of applications
include: homogeneous transport in one, two and three dimensions in Cartesian
and spherical domains; shallow-water system compared with analytical solution
(originally derived for a 2D case); and a buoyant convection problem in an
incompressible Boussinesq fluid with interfacial instability. All the examples
are implemented out of the library tree. Regardless of the differences in the
problem dimensionality, right-hand-side terms, boundary conditions and
parallelisation approach, all the examples use the same unmodified library,
which is a key goal of libmpdata++ design. The libmpdata++ library is
implemented in C++, making use of the Blitz++ multi-dimensioanl array
containers, and is released as free/libre and open-source software. |
---|---|
DOI: | 10.48550/arxiv.1407.1309 |