include/pops/runtime/builders/block/block_seam.hpp File ReferenceΒΆ

adc_cpp: include/pops/runtime/builders/block/block_seam.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
block_seam.hpp File Reference

Per-transport block-build seam (ADC-335 / P0-B). More...

#include <pops/core/state/variables.hpp>
#include <pops/runtime/builders/block/block_builder.hpp>
#include <pops/runtime/builders/block/block_builder_polar.hpp>
#include <pops/runtime/builders/factory/model_factory.hpp>
#include <functional>
#include <string>
#include <utility>
#include <vector>
+ Include dependency graph for block_seam.hpp:

Go to the source code of this file.

Classes

struct  pops::detail::BuiltBlock
 Everything System::add_block reads back from the (former) dispatch_model visitor. More...
 
struct  pops::detail::BlockBuildArgs
 The non-model inputs of a Cartesian block build (a thin bundle so the seam signature stays fixed). More...
 

Namespaces

namespace  pops
 
namespace  pops::detail
 

Functions

template<class TR , class MakeFn >
BuiltBlock pops::detail::build_block_for_make (TR tr, const ModelSpec &model, const BlockBuildArgs &a, MakeFn make)
 VERBATIM Cartesian visitor body of the former dispatch_model lambda (system.cpp), with the transport brick tr already chosen, and the per-leaf BlockClosures produced by make.
 
template<class TR >
BuiltBlock pops::detail::build_block_for (TR tr, const ModelSpec &model, const BlockBuildArgs &a)
 Per-transport seam body: the full make_block dispatcher (all fluxes).
 
BuiltBlock pops::detail::build_block_exb (const ModelSpec &model, const BlockBuildArgs &a)
 
BuiltBlock pops::detail::build_block_isothermal_rusanov (const ModelSpec &model, const BlockBuildArgs &a)
 
BuiltBlock pops::detail::build_block_isothermal_hll (const ModelSpec &model, const BlockBuildArgs &a)
 
BuiltBlock pops::detail::build_block_compressible_rusanov (const ModelSpec &model, const BlockBuildArgs &a)
 
BuiltBlock pops::detail::build_block_compressible_hll (const ModelSpec &model, const BlockBuildArgs &a)
 
BuiltBlock pops::detail::build_block_compressible_hllc (const ModelSpec &model, const BlockBuildArgs &a)
 
BuiltBlock pops::detail::build_block_compressible_roe (const ModelSpec &model, const BlockBuildArgs &a)
 
BuiltBlock pops::detail::build_block_polar (const ModelSpec &model, const std::string &limiter, const std::string &riemann, const PolarGridContext &pctx, bool recon_prim, const std::string &method, Real positivity_floor, const MultiFab *aux)
 

Detailed Description

Per-transport block-build seam (ADC-335 / P0-B).

System::add_block used to call detail::dispatch_model(spec, lambda) directly; the lambda body instantiated make_block / the makers for EVERY transport in ONE translation unit (python/system.cpp), which is the ~1700-leaf combinatorial product whose -O3 backend pass dominates the build. This header moves that lambda body behind a fixed-signature, NON-template, hidden-visibility free function per transport (build_block_exb / isothermal / _compressible for the Cartesian path, build_block_polar for the ring). Each is defined in its own .cpp (python/system<transport>.cpp), so the per-transport leaves compile in parallel. system.cpp keeps only the string validation + a thin transport if/else.

The seam carries NO template surface: the block boundary is already type-erased (BlockClosures is a POD of std::function, the makers return std::function), so BuiltBlock is a plain bundle. The build_block_for helper is the VERBATIM Cartesian visitor body (so the reachable instantiation set is unchanged and the production binary stays byte-identical); it is instantiated only inside the per-transport TU that names its TR. The seam functions are INTERNAL (no POPS_EXPORT): the module's exported symbol table is unchanged.