SpECTRE  v2021.12.06
elliptic::subdomain_preconditioners::MinusLaplacian< Dim, OptionsGroup, Solver, LinearSolverRegistrars > Class Template Reference

Approximate the subdomain operator with a flat-space Laplacian with Dirichlet boundary conditions for every tensor component separately. More...

#include <MinusLaplacian.hpp>

Classes

struct  SolverOptionTag
 

Public Types

using options_group = OptionsGroup
 
using poisson_system = Poisson::FirstOrderSystem< Dim, Poisson::Geometry::FlatCartesian >
 
using SubdomainOperator = elliptic::dg::subdomain_operator::SubdomainOperator< poisson_system, OptionsGroup >
 
using SubdomainData = ::LinearSolver::Schwarz::ElementCenteredSubdomainData< Dim, tmpl::list< Poisson::Tags::Field > >
 
using solver_type = Solver
 
using options = tmpl::list< SolverOptionTag >
 

Public Member Functions

 MinusLaplacian (MinusLaplacian &&)=default
 
MinusLaplacianoperator= (MinusLaplacian &&)=default
 
 MinusLaplacian (const MinusLaplacian &rhs)
 
MinusLaplacianoperator= (const MinusLaplacian &rhs)
 
 MinusLaplacian (StoredSolverType solver)
 
const Solver & solver () const
 
template<typename LinearOperator , typename VarsType , typename SourceType , typename... OperatorArgs>
Convergence::HasConverged solve (gsl::not_null< VarsType * > solution, LinearOperator &&linear_operator, const SourceType &source, const std::tuple< OperatorArgs... > &operator_args=std::tuple{}) const
 Solve the equation \(Ax=b\) by approximating \(A\) with a Laplace operator with homogeneous Dirichlet boundary conditions for every tensor component in \(x\).
 
void reset () override
 
void pup (PUP::er &p) override
 
std::unique_ptr< Baseget_clone () const override
 
template<typename LinearOperator , typename VarsType , typename SourceType , typename... OperatorArgs>
Convergence::HasConverged solve (const gsl::not_null< VarsType * > initial_guess_in_solution_out, LinearOperator &&, const SourceType &source, const std::tuple< OperatorArgs... > &operator_args) const
 

Static Public Attributes

static constexpr size_t volume_dim = Dim
 
static constexpr Options::String help
 

Detailed Description

template<size_t Dim, typename OptionsGroup, typename Solver = LinearSolver::Serial::LinearSolver<tmpl::list< ::LinearSolver::Serial::Registrars::Gmres< ::LinearSolver::Schwarz::ElementCenteredSubdomainData< Dim, tmpl::list<Poisson::Tags::Field>>>, ::LinearSolver::Serial::Registrars::ExplicitInverse>>, typename LinearSolverRegistrars = tmpl::list<Registrars::MinusLaplacian<Dim, OptionsGroup, Solver>>>
class elliptic::subdomain_preconditioners::MinusLaplacian< Dim, OptionsGroup, Solver, LinearSolverRegistrars >

Approximate the subdomain operator with a flat-space Laplacian with Dirichlet boundary conditions for every tensor component separately.

This linear solver applies the Solver to every tensor component in turn, approximating the subdomain operator with a flat-space Laplacian with Dirichlet boundary conditions. This can be a lot cheaper than solving the full subdomain operator and can provide effective preconditioning for an iterative subdomain solver. The approximation is better the closer the original PDEs are to a set of decoupled flat-space Poisson equations with Dirichlet boundary conditions.

Template Parameters
DimSpatial dimension
OptionsGroupThe options group identifying the LinearSolver::Schwarz::Schwarz solver that defines the subdomain geometry.
SolverAny class that provides a solve and a reset function, but typically a LinearSolver::Serial::LinearSolver. The solver will be factory-created from input-file options.

Member Data Documentation

◆ help

template<size_t Dim, typename OptionsGroup , typename Solver = LinearSolver::Serial::LinearSolver<tmpl::list< ::LinearSolver::Serial::Registrars::Gmres< ::LinearSolver::Schwarz::ElementCenteredSubdomainData< Dim, tmpl::list<Poisson::Tags::Field>>>, ::LinearSolver::Serial::Registrars::ExplicitInverse>>, typename LinearSolverRegistrars = tmpl::list<Registrars::MinusLaplacian<Dim, OptionsGroup, Solver>>>
constexpr Options::String elliptic::subdomain_preconditioners::MinusLaplacian< Dim, OptionsGroup, Solver, LinearSolverRegistrars >::help
staticconstexpr
Initial value:
=
"Approximate the linear operator with a Laplace operator with Dirichlet "
"boundary conditions for every tensor component separately."

The documentation for this class was generated from the following file: