include/pops/coupling/source/coupled_source.hpp Source FileΒΆ

adc_cpp: include/pops/coupling/source/coupled_source.hpp Source File
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_source.hpp
Go to the documentation of this file.
1
11
12#pragma once
13
17
18namespace pops {
19
20// Contract of a coupling source for a given system.
23template <class C, class System>
26 requires(const C c, System& s, const MultiFab& aux, Real dt) { c.apply(s, aux, dt); };
27
28// Default: no coupling source. Single-species case, or coupling provided
29// solely by Poisson (the field). No-op, zero cost.
33 template <CoupledSystemLike System>
34 void apply(System&, const MultiFab&, Real) const {}
35};
36
37} // namespace pops
Field distributed over a level: decomposition (BoxArray) + distribution (DistributionMapping) + ncomp...
Definition multifab.hpp:33
Coupled multi-species system, composed at runtime from generic bricks.
Definition system.hpp:89
Concept: C is a valid coupling source for System if System is a CoupledSystem and if C exposes apply(...
Definition coupled_source.hpp:24
Minimal concept for coupled systems: n_blocks and for_each_block with a named functor.
Definition coupled_system.hpp:84
CoupledSystem: heterogeneous collection of equation blocks (multi-species, multi-scheme).
MultiFab: a field DISTRIBUTED over a level (equivalent of AMReX's MultiFab).
Definition amr_hierarchy.hpp:29
double Real
Definition types.hpp:30
NULL coupling source (default): apply() is a no-op.
Definition coupled_source.hpp:32
void apply(System &, const MultiFab &, Real) const
Definition coupled_source.hpp:34
Base scalar types and the POPS_HD macro (host+device portability).