inciter::NodeDiagnostics class

NodeDiagnostics class used to compute diagnostics while integrating PDEs.

Public static functions

static void registerReducers()
Configure Charm++ custom reduction types initiated from this class.

Public functions

auto rhocompute(Discretization& d, const tk::Fields& u, const tk::Fields& un, uint64_t diag_iter) const -> bool
Compute diagnostics for density-based solvers.
auto precompute(Discretization& d, const tk::Fields& u, const tk::Fields& un, const std::vector<tk::real>& p, const std::vector<tk::real>& dp, uint64_t diag_iter) const -> bool
Compute diagnostics for pressure-based solvers.
auto accompute(Discretization& d, const tk::Fields& u, const tk::Fields& un, uint64_t diag_iter) const -> bool
Compute diagnostics for artificial compressibility solvers.

Charm++ pack/unpack serializer member functions

void pup(PUP::er&)
Pack/Unpack serialize member function.
void operator|(PUP::er& p, NodeDiagnostics& d)
Pack/Unpack serialize operator|.

Function documentation

static void inciter::NodeDiagnostics::registerReducers()

Configure Charm++ custom reduction types initiated from this class.

This routine is supposed to be called from a Charm++ initnode routine. Since the runtime system executes initnode routines exactly once on every logical node early on in the Charm++ init sequence, they must be static as they are called without an object. See also: Section "Initializations at Program Startup" at in the Charm++ manual http://charm.cs.illinois.edu/manuals/html/charm++/manual.html.

bool inciter::NodeDiagnostics::rhocompute(Discretization& d, const tk::Fields& u, const tk::Fields& un, uint64_t diag_iter) const

Compute diagnostics for density-based solvers.

Parameters
in Discretization proxy to read from
in Current solution vector
un in Previous solution vector
diag_iter in Diagnostics output frequency
Returns True if diagnostics have been computed

Diagnostics are defined as some norm, e.g., L2 norm, of a quantity, computed in mesh nodes, A, as ||A||_2 = sqrt[ sum_i(A_i)^2 V_i ], where the sum is taken over all mesh nodes and V_i is the nodal volume. We send multiple sets of quantities to the host for aggregation across the whole mesh. The final aggregated solution will end up in Transporter::diagnostics(). Aggregation of the partially computed diagnostics is done via potentially different policies for each field.

bool inciter::NodeDiagnostics::precompute(Discretization& d, const tk::Fields& u, const tk::Fields& un, const std::vector<tk::real>& p, const std::vector<tk::real>& dp, uint64_t diag_iter) const

Compute diagnostics for pressure-based solvers.

Parameters
in Discretization proxy to read from
in Current solution vector
un in Previous solution vector
in Current pressure solution
dp in Recent pressure solution increment
diag_iter in Diagnostics output frequency
Returns True if diagnostics have been computed

Diagnostics are defined as some norm, e.g., L2 norm, of a quantity, computed in mesh nodes, A, as ||A||_2 = sqrt[ sum_i(A_i)^2 V_i ], where the sum is taken over all mesh nodes and V_i is the nodal volume. We send multiple sets of quantities to the host for aggregation across the whole mesh. The final aggregated solution will end up in Transporter::diagnostics(). Aggregation of the partially computed diagnostics is done via potentially different policies for each field.

bool inciter::NodeDiagnostics::accompute(Discretization& d, const tk::Fields& u, const tk::Fields& un, uint64_t diag_iter) const

Compute diagnostics for artificial compressibility solvers.

Parameters
in Discretization proxy to read from
in Current solution vector
un in Previous solution vector
diag_iter in Diagnostics output frequency
Returns True if diagnostics have been computed

Diagnostics are defined as some norm, e.g., L2 norm, of a quantity, computed in mesh nodes, A, as ||A||_2 = sqrt[ sum_i(A_i)^2 V_i ], where the sum is taken over all mesh nodes and V_i is the nodal volume. We send multiple sets of quantities to the host for aggregation across the whole mesh. The final aggregated solution will end up in Transporter::diagnostics(). Aggregation of the partially computed diagnostics is done via potentially different policies for each field.

void inciter::NodeDiagnostics::operator|(PUP::er& p, NodeDiagnostics& d)

Pack/Unpack serialize operator|.

Parameters
in/out Charm++'s PUP::er serializer object reference
in/out Diagnostics object reference