include/pops/core/model/equation_block.hpp Source FileΒΆ

adc_cpp: include/pops/core/model/equation_block.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
equation_block.hpp
Go to the documentation of this file.
1
15
16#pragma once
17
23
24#include <concepts>
25#include <string_view>
26
27namespace pops {
28
41template <class ModelT, class SpatialT = FirstOrder, class TimeT = ExplicitTime<SSPRK2>>
43 static_assert(PhysicalModel<ModelT>, "EquationBlock expects a ModelT that models PhysicalModel");
45 "EquationBlock expects a named spatial discretisation");
46
47 using Model = ModelT;
48 using Spatial = SpatialT;
49 using Time = TimeT;
50
51 std::string_view name{};
53 MultiFab* state = nullptr;
55
56 EquationBlock(std::string_view block_name, const Model& block_model, MultiFab& block_state,
57 const BCRec& block_bc = {})
58 : name(block_name), model(block_model), state(&block_state), bc(block_bc) {}
59
60 MultiFab& U() { return *state; }
61 const MultiFab& U() const { return *state; }
62};
63
67template <class B>
68concept EquationBlockLike = requires(B b) {
69 typename B::Model;
70 typename B::Spatial;
71 typename B::Time;
72 { b.name } -> std::convertible_to<std::string_view>;
73 { b.state } -> std::convertible_to<MultiFab*>;
74 { b.U() } -> std::same_as<MultiFab&>;
75};
76
77} // namespace pops
Field distributed over a level: decomposition (BoxArray) + distribution (DistributionMapping) + ncomp...
Definition multifab.hpp:33
Minimal concept for equation blocks: Model, Spatial, Time, name, state, U().
Definition equation_block.hpp:68
Minimal contract of a physical model.
Definition physical_model.hpp:81
SpatialDiscretisationLike: concept validating a SpatialDiscretisation.
Definition spatial_discretisation.hpp:37
MultiFab: a field DISTRIBUTED over a level (equivalent of AMReX's MultiFab).
Definition amr_hierarchy.hpp:29
PHYSICAL boundary conditions at the domain edge (BCType, BCRec, fill_physical_bc, fill_ghosts).
C++20 concepts defining the contract of the physics layer.
"Spatial method" aggregate: reconstruction (limiter) + numerical flux in one named type.
Boundary conditions for the FOUR faces of the domain (type + associated Dirichlet value).
Definition physical_bc.hpp:29
Association of a PhysicalModel with its field U (MultiFab), its spatial scheme, its time policy and i...
Definition equation_block.hpp:42
const MultiFab & U() const
Definition equation_block.hpp:61
ModelT Model
Definition equation_block.hpp:47
TimeT Time
Definition equation_block.hpp:49
MultiFab & U()
Definition equation_block.hpp:60
SpatialT Spatial
Definition equation_block.hpp:48
MultiFab * state
Definition equation_block.hpp:53
Model model
Definition equation_block.hpp:52
std::string_view name
Definition equation_block.hpp:51
EquationBlock(std::string_view block_name, const Model &block_model, MultiFab &block_state, const BCRec &block_bc={})
Definition equation_block.hpp:56
BCRec bc
Definition equation_block.hpp:54
Scheme tags (SSPRK2, SSPRK3, UserTimeIntegrator), TimeTreatment enum and per-block time policies: tem...