include/pops/coupling/base/elliptic_rhs.hpp File ReferenceΒΆ

adc_cpp: include/pops/coupling/base/elliptic_rhs.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
elliptic_rhs.hpp File Reference

Elliptic (Poisson) RIGHT-HAND-SIDE assemblers: single-model and N-species. More...

#include <pops/core/model/coupled_system.hpp>
#include <pops/core/foundation/types.hpp>
#include <pops/mesh/execution/for_each.hpp>
#include <pops/mesh/storage/multifab.hpp>
#include <pops/numerics/spatial_operator.hpp>
#include <cstddef>
#include <stdexcept>
#include <vector>
+ Include dependency graph for elliptic_rhs.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  pops::detail::SingleModelEllipticRhsKernel< Model >
 NAMED functor (not an POPS_HD lambda) of the single-model RHS: f(i,j,0) = model.elliptic_rhs(U). More...
 
struct  pops::SingleModelEllipticRhs< Model >
 SINGLE-model RHS assembler: rhs(.,.,0) = model.elliptic_rhs(U) over the valid cells. More...
 
struct  pops::detail::TwoFieldChargeDensityRhsKernel
 NAMED functor (not an POPS_HD lambda) of the two-field RHS: r(i,j,0) = a0 u0 + a1 u1. More...
 
struct  pops::TwoFieldChargeDensityRhs
 Two-field RHS: rhs = q0 * U0(.,.,comp0) + q1 * U1(.,.,comp1) (two-species charge density). More...
 
struct  pops::TwoBlockChargeDensityRhs
 Two-block RHS: same computation as TwoFieldChargeDensityRhs but reads blocks 0 and 1 of a CoupledSystem (q0 n0 + q1 n1). More...
 
struct  pops::SpeciesCharge
 Charge (with sign) and density component of a species for the elliptic RHS assembly. More...
 
struct  pops::detail::AddScaledComponentKernel
 NAMED functor (not an POPS_HD lambda) of the accumulation: r(i,j,0) += a * u(i,j,c). More...
 
struct  pops::ChargeDensityRhs
 N-species Poisson RHS: f = Sum_s q_s n_s over ALL blocks of the system. More...
 

Namespaces

namespace  pops
 
namespace  pops::detail
 

Functions

void pops::add_scaled_component (const MultiFab &U, Real q, int comp, MultiFab &rhs)
 rhs(.,.,0) += q * U(.,.,comp) over the valid cells.
 

Detailed Description

Elliptic (Poisson) RIGHT-HAND-SIDE assemblers: single-model and N-species.

model.elliptic_rhs(U) covers the SINGLE-block case (SingleModelEllipticRhs). For several species the right-hand side is a SYSTEM quantity (f = Sum_s q_s n_s) reading several MultiFab. This header isolates that responsibility from the Coupler. ChargeDensityRhs (N species) REQUIRES one entry per block (species.size() == n_blocks): a forgotten block does not silently disappear from the right-hand side; a neutral species is declared explicitly with charge = 0. add_scaled_component (rhs += q * U) is the accumulation brick. The kernels assume identical layouts between U and rhs.