SpECTRE
v2023.01.13
|
A system of elliptic equations in first-order "flux" formulation. More...
#include <FirstOrderSystem.hpp>
Classes | |
struct | test |
A system of elliptic equations in first-order "flux" formulation.
Classes conforming to this protocol represent a set of elliptic partial differential equations in first-order "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 fixed-sources \(f_\alpha(x)\). It resembles closely formulations of hyperbolic conservation laws but allows the fluxes \(F_\alpha^i\) to be higher-rank 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 fixed-sourced \(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 system-specific 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 curved-space Poisson equation on a background metric \(g_{ij}\). They must have the same rank as the auxiliary_fields
but with an upper-spatial 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 upper-spatial first index because their divergence defines the auxiliary fields.background_fields
: A list of tags representing the variable-independent 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 one-forms, 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 not-null pointerargument_tags
auxiliary_fields
The second apply
function takes these arguments in this order:
auxiliary_fluxes
as not-null 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 not-null 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 not-null 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 factory-created from this base class. Currently this should be a specialization of elliptic::BoundaryConditions::BoundaryCondition
.