SpECTRE  2021.08.02
elliptic::dg::subdomain_operator::SubdomainOperator< System, OptionsGroup, ArgsTagsFromCenter > Struct Template Reference

The elliptic DG operator on an element-centered subdomain. More...

#include <SubdomainOperator.hpp>

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, db::DataBox< DbTagsList > &box) noexcept
 

Additional Inherited Members

- Static Public Attributes inherited from LinearSolver::Schwarz::SubdomainOperator< System::volume_dim >
static constexpr size_t volume_dim
 

Detailed Description

template<typename System, typename OptionsGroup, typename ArgsTagsFromCenter = tmpl::list<>>
struct elliptic::dg::subdomain_operator::SubdomainOperator< System, OptionsGroup, ArgsTagsFromCenter >

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:

  • Geometric quantities provided by elliptic::dg::subdomain_operator::InitializeSubdomain.
  • All System::fluxes_computer::argument_tags and System::sources_computer::argument_tags (or 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.
  • The System::fluxes_computer::argument_tags on internal and external interfaces, except those listed in System::fluxes_computer::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.

Warning
The subdomain operator hasn't been tested with periodic boundary conditions so far.