API C++

The complete C++ reference of adc_cpp (all classes, concepts and functions, with the signatures and the header comments) is generated by Doxygen from the headers include/pops/**. It is published online:

The same reference is also embedded in this site (“Embedded C++ API” entry in the sidebar, or https://wolf75222.github.io/adc_cpp/doxygen/): pages generated by doxysphinx, integrated into the Sphinx navigation and search. The raw Doxygen site stays published under /cpp/ unchanged.

The Doxygen configuration lives in the repository: docs/Doxyfile. Regenerating it locally produces the HTML under the configured output directory:

doxygen docs/Doxyfile

The library is header-only (C++23 templates and concepts): there is no .a/.so object to link for the core, you include the headers. The three design axes are orthogonal (physical model x numerical flux x elliptic solver), composed through a single parallelism seam (for_each_cell: serial / OpenMP / Kokkos; comm.hpp: MPI collectives). See ARCHITECTURE.md and CHOICES.md.

Main concepts and classes

Symbol

Role

PhysicalModel

Physical model concept: state, physical flux, eigenvalues, conservative <-> primitive conversions, elliptic right-hand side. This is the “equation” axis.

NumericalFlux

Riemann numerical flux policy at the face (Rusanov / HLL / HLLC / Roe). This is the “flux” axis, chosen independently of the model.

EllipticSolver

Elliptic solver concept (solve() interface) modeled by GeometricMG, PoissonFFTSolver, the tensor Krylov solvers… This is the “Poisson” axis.

System

Runtime coupler: composes blocks (one model per block), shares a system Poisson, advances the whole. Exposed to the Python binding as pops.System.

AmrSystem

Refined counterpart of System: one or more blocks on a block-structured AMR hierarchy (regrid, conservative reflux). Exposes pops.AmrSystem.

GeometricMG

Multigrid Poisson solver (V-cycle, red-black Gauss-Seidel smoother); handles conducting wall and cut-cell. Any case (including non-periodic).

PoissonFFTSolver

Direct spectral Poisson solver (FFT); periodic domain, n = 2^k. Single-rank by design (refuses MPI).

RemappedFFTSolver

FFT Poisson under MPI (ADC-287): presents the System single box, box-slab scatter/gather around PoissonFFT. Periodic, constant coefficient, Ny divisible by n_ranks(). Selected by the FFT() field-solver descriptor when the bound route runs on multiple ranks.

AmrCouplerMP

Multi-patch AMR coupler: Berger-Rigoutsos regrid, time subcycling of the fine levels, coverage-aware reflux at the coarse-fine interface.

(The canonical definitions of these symbols live respectively in include/pops/core/model/physical_model.hpp, include/pops/numerics/fv/numerical_flux.hpp, include/pops/numerics/elliptic/interface/elliptic_solver.hpp, include/pops/runtime/system.hpp, include/pops/runtime/amr_system.hpp, include/pops/numerics/elliptic/mg/geometric_mg.hpp, include/pops/numerics/elliptic/poisson/poisson_fft_solver.hpp, include/pops/coupling/amr/amr_coupler_mp.hpp.)

For the test coverage of these components by backend, see backend matrix.