include/pops/core/model/coupled_system.hpp File ReferenceΒΆ

adc_cpp: include/pops/core/model/coupled_system.hpp File Reference
adc_cpp 0.3.0
Model-free C++23 core for coupled hyperbolic-elliptic systems on adaptive (AMR) meshes, with MPI and GPU (Kokkos) backends
coupled_system.hpp File Reference

CoupledSystem: heterogeneous collection of equation blocks (multi-species, multi-scheme). More...

#include <pops/core/model/equation_block.hpp>
#include <cstddef>
#include <tuple>
#include <type_traits>
#include <utility>
+ Include dependency graph for coupled_system.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  pops::CoupledSystem< Blocks >
 Heterogeneous collection of equation blocks, parameterized by their exact types. More...
 
struct  pops::detail::ForEachBlockProbe
 NAMED no-op probe for the CoupledSystemLike concept. A generic lambda in the. More...
 

Namespaces

namespace  pops
 
namespace  pops::detail
 

Concepts

concept  pops::CoupledSystemLike
 Minimal concept for coupled systems: n_blocks and for_each_block with a named functor.
 

Functions

template<EquationBlockLike... Blocks>
 pops::CoupledSystem (Blocks...) -> CoupledSystem< Blocks... >
 

Detailed Description

CoupledSystem: heterogeneous collection of equation blocks (multi-species, multi-scheme).

CoupledSystem<Blocks...> is a statically typed tuple of blocks. It solves nothing on its own: it provides a named object to the assembler/scheduler layer to iterate over N blocks (for_each_block) and the couplings (Poisson, collisions, cross sources).

CoupledSystemLike: concept used by the AmrSystemCoupler facade and the schedulers. Avoids passing the concrete CoupledSystem<...> into generic code that only needs for_each_block and n_blocks.

nvcc/EDG INVARIANT: for_each_block does not accept a generic lambda in a requires-clause (extended lambda in an unevaluated context -> EDG error). The concept therefore uses the named functor detail::ForEachBlockProbe.