Approximate the subdomain operator with a flat-space Laplacian for every tensor component separately.
More...
|
| MinusLaplacian (MinusLaplacian &&)=default |
|
MinusLaplacian & | operator= (MinusLaplacian &&)=default |
|
| MinusLaplacian (const MinusLaplacian &rhs) |
|
MinusLaplacian & | operator= (const MinusLaplacian &rhs) |
|
| MinusLaplacian (StoredSolverType solver, std::optional< elliptic::BoundaryConditionType > boundary_condition_type) |
|
const Solver & | solver () const |
|
const auto & | cached_solvers () const |
| The cached solvers for each unique boundary-condition signature. These are only exposed to allow verifying their consistency.
|
|
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) const |
| Solve the equation \(Ax=b\) by approximating \(A\) with a Laplace operator for every tensor component in \(x\).
|
|
void | reset () override |
|
void | pup (PUP::er &p) override |
|
std::unique_ptr< Base > | get_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 |
|
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<DataVector>>>>, ::LinearSolver::Serial::Registrars::ExplicitInverse<double>>>, 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 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. 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.
- Boundary conditions
- At external boundaries we impose homogeneous Dirichlet or Neumann boundary conditions on the Poisson sub-problems. For tensor components and element faces where the original boundary conditions are of Dirichlet-type we choose homogeneous Dirichlet boundary conditions, and for those where the original boundary conditions are of Neumann-type we choose homogeneous Neumann boundary conditions. This means we may end up with more than one distinct Poisson operator on subdomains with external boundaries, one per unique combination of element face and boundary-condition type among the tensor components.
- Template Parameters
-