SpECTRE
v2024.12.16
|
The elliptic DG operator on an element-centered subdomain. More...
#include <SubdomainOperator.hpp>
Public Types | |
using | system = System |
using | options_group = OptionsGroup |
Public Member Functions | |
template<typename ResultTags , typename OperandTags , typename DbTagsList > | |
void | operator() (const gsl::not_null< LinearSolver::Schwarz::ElementCenteredSubdomainData< Dim, ResultTags > * > result, const LinearSolver::Schwarz::ElementCenteredSubdomainData< Dim, OperandTags > &operand, const db::DataBox< DbTagsList > &box, const std::unordered_map< std::pair< size_t, Direction< Dim > >, const BoundaryConditionsBase &, boost::hash< std::pair< size_t, Direction< Dim > > > > &override_boundary_conditions={}) const |
void | pup (PUP::er &) |
Additional Inherited Members | |
Static Public Attributes inherited from LinearSolver::Schwarz::SubdomainOperator< System::volume_dim > | |
static constexpr size_t | volume_dim |
The elliptic DG operator on an element-centered subdomain.
This operator is a restriction of the full (linearized) DG-operator to an element-centered subdomain with a few points overlap into neighboring elements. It is a LinearSolver::Schwarz::SubdomainOperator
to be used with the Schwarz linear solver when it solves the elliptic DG operator.
This operator requires the following tags are available on overlap regions with neighboring elements:
elliptic::dg::subdomain_operator::InitializeSubdomain
.System::fluxes_computer::argument_tags
and System::sources_computer::argument_tags
(or System::fluxes_computer_linearized::argument_tags
and System::sources_computer_linearized::argument_tags
for nonlinear systems), except those listed in ArgsTagsFromCenter
. The latter will be taken from the central element's DataBox, so they don't need to be made available on overlaps.System::fluxes_computer::argument_tags
(or System::fluxes_computer_linearized::argument_tags
) on internal and external interfaces, except those listed in System::fluxes_computer::volume_tags
(or System::fluxes_computer_linearized::volume_tags
).Some of these tags may require communication between elements. For example, nonlinear system fields are constant background fields for the linearized DG operator, but are updated in every nonlinear solver iteration. Therefore, the updated nonlinear fields must be communicated across overlaps between nonlinear solver iterations. To perform the communication you can use LinearSolver::Schwarz::Actions::SendOverlapFields
and LinearSolver::Schwarz::Actions::ReceiveOverlapFields
, setting RestrictToOverlap
to false
. See LinearSolver::Schwarz::SubdomainOperator
for details.
LinearSolver::Schwarz::Actions::ResetSubdomainSolver
). Another example is elliptic::subdomain_preconditioners::MinusLaplacian
, where an auxiliary Poisson system is used for preconditioning that doesn't have boundary conditions set up in the domain. In these cases, the boundary conditions used for the subdomain operator can be overridden with the optional override_boundary_conditions
argument to the operator()
. If the overriding boundary conditions are different from those listed in Metavariables::factory_creation
, you can supply the list of boundary-condition classes to the BoundaryConditionClasses
template parameter. Note that the subdomain operator always applies the linearized boundary conditions.
|
inline |