SPADE is a framework for the solution of partial differential equations in space and time. It provides a series of high-order algorithms that are intended to make the the implementation of solvers as smooth and efficient as possible.
SPADE is currently a header-only, single-include implementation that utilized
features available in the c++20 standard. To build a project using SPADE, simply
include the header src/spade.h and ensure that the c++20 standard is used.
Examples are currently found in the runs directory. runs/channel contains an
example solver for a compressible turbulent channel flow, solved using the
Navier-stokes equations.
Everything that SPADE can do is organized into its various namespaces, all of which
fall under the spade namespace, e.g. the io namespace would be used as
spade::io. The list of namespaces within SPADE are as follows:
-
timing: contains various utilities for measuring the performance of implemented applications. -
algs: i.e. "algorithms". Contains a series of general-purpose algorithms that are useful for managine the state of arrays or performing loops compactly. -
aliases: an intermediate namespace that forwards STL types for use in CPU implementations and providing polymorphism for GPU implementations. For example,aliases::vector<double>will bestd::vector<double>when compiling as a CPU application, but will be something else when compiling with CUDA. -
array_container: A specialized namespace that handles underlying storage for grid arrays. -
detailor[namespace]::detail: a quarantined space for highly specialized implementations that should not be called or manipulated outside very specific situations. Don't come in here! -
block_config: provides various implementations of block configurations for grid arrays. -
cli_args: contains utilities for handling command-line arguments -
consts: contains mathematical constants -
coords: contains everything to do with coordinate systems and their jacobians for use with generalized-coordinates formulations -
ctrs: i.e. "containers". Contains various flavors of basic arrays with arithmetic operations enabled. -
dims: soon to be deprecated! -
finite_diff: algoriths for the calculation of finite-difference coefficients -
grid: contains everything to do with the semantics of handling data stored on a grid -
io: contains functions for outputting data to files -
linear_algebra: contains implementations for numerical linear algebra algorithms for small-size problems -
parallel: contains types and functions dealing with the use of a parallel computing context -
utils: contains general-purpose utilities -
partition: contains implementations of partitioning algorithms for load-balancing -
pde_algs: contains algorithms specifically intended for the numerical solution of partial differential equations -
reduce_ops: contains general definitions of reduction operations -
static_math: contains implementations for compile-time mathematical calculations -
time_integration: contains algorithms for causal integration in a single dimension, e.g. through time -
fetch: contains specialized algorithms for buffering grid array data for the calculation of PDE terms. Careful in here! -
convective: contains implementations of inviscid fluxes for the solution of the compressible Navier-Stokes equations (CNSE) -
viscous: contains implementations of viscous fluxes for the solution of CNSE -
fluid_state: contains implementations of and conversions between fluid states of a gas -
navier_stokes_mms: soon to be deprecated! -
viscous_laws: contains state-dependent viscous laws for CNSE -
amr: contains algorithms for adaptive mesh refinement