SpECTRE
v2023.01.13

A system of elliptic equations in firstorder "flux" formulation. More...
#include <FirstOrderSystem.hpp>
Classes  
struct  test 
A system of elliptic equations in firstorder "flux" formulation.
Classes conforming to this protocol represent a set of elliptic partial differential equations in firstorder "flux" formulation:
\begin{equation} \partial_i F^i_\alpha + S_\alpha = f_\alpha(x) \end{equation}
in terms of fluxes \(F_\alpha^i\), sources \(S_\alpha\) and fixedsources \(f_\alpha(x)\). It resembles closely formulations of hyperbolic conservation laws but allows the fluxes \(F_\alpha^i\) to be higherrank tensor fields. The fluxes and sources are functionals of the "primal" system variables \(u_A(x)\) and their corresponding "auxiliary" variables \(v_A(x)\). The fixedsourced \(f_\alpha(x)\) are independent of the system variables. We enumerate the variables with uppercase letters such that \(v_A\) is the auxiliary variable corresponding to \(u_A\). Greek letters enumerate all variables. In documentation related to particular elliptic systems we generally use the canonical systemspecific symbols for the fields in place of these indices. See the Poisson::FirstOrderSystem
and the Elasticity::FirstOrderSystem
for examples.
Conforming classes must have these static member variables:
size_t volume_dim
: The number of spatial dimensions.Conforming classes must have these type aliases:
primal_fields
: A list of tags representing the primal fields. These are the fields we solve for, e.g. \(u\) for a Poisson equation.auxiliary_fields
: A list of tags representing the auxiliary fields, which are typically gradients of the primal fields, e.g. \(v_i = \partial_i u\) for a Poisson equation. These must follow the order of the primal_fields
. Specifically, each auxiliary field must have one rank higher than its corresponding primal field.primal_fluxes
: A list of tags representing the primal fluxes \(F_{u_A}^i\). These are typically some linear combination of the auxiliary fields with raised indices, e.g. \(v^i = g^{ij}v_j\) for a curvedspace Poisson equation on a background metric \(g_{ij}\). They must have the same rank as the auxiliary_fields
but with an upperspatial first index, because their divergence defines the elliptic equation.auxiliary_fluxes
: A list of tags representing the auxiliary fluxes \(F_{v_A}^i\), e.g. \(\delta^i_j u\) for a Poisson equation. These must have one rank higher than the auxiliary_fields
and have an upperspatial first index because their divergence defines the auxiliary fields.background_fields
: A list of tags representing the variableindependent background fields in the equations. Examples are a background metric, associated fixed geometry quantities such as Christoffel symbols or the Ricci scalar, or any other fixed field that determines the problem to be solved such as matter sources in the Einstein constraint equations.inv_metric_tag
: The tag that defines the background geometry, i.e. the the geometry that the elliptic equations are formulated on. This is the metric responsible for normalizing oneforms, such as face normals.fluxes_computer
: A class that defines the primal and auxiliary fluxes \(F_\alpha^i\). Must have an argument_tags
type alias and two apply
function overloads: One that computes the primal fluxes and another that computes the auxiliary fluxes. The first apply
function takes these arguments in this order:
primal_fluxes
as notnull pointerargument_tags
auxiliary_fields
The second apply
function takes these arguments in this order:
auxiliary_fluxes
as notnull pointerargument_tags
primal_fields
The functions can assume the output buffers are already correctly sized, but no guarantee is made on the values that the buffers hold at input. The class must have an additional volume_tags
type alias that lists the subset of argument_tags
that will be retrieved directly from the DataBox, instead of retrieving it from the face of an element.
sources_computer
: A class that defines the primal and auxiliary sources \(S_\alpha\). Must have an argument_tags
type alias and two apply
function overloads: One that adds the primal sources and another that adds the auxiliary sources to the equations. The first apply
function takes these arguments in this order:
primal_fields
as notnull pointer. These are the primal equations.argument_tags
primal_fields
primal_fluxes
The second apply
function takes these arguments in this order:
auxiliary_fields
as notnull pointer. These are the auxiliary equations.argument_tags
primal_fields
The functions are expected to add the sources \(S_\alpha\) to the output buffers.
boundary_conditions_base
: A base class representing the supported boundary conditions. Boundary conditions can be factorycreated from this base class. Currently this should be a specialization of elliptic::BoundaryConditions::BoundaryCondition
.