https://mooseframework.inl.gov
Public Member Functions | Private Attributes | List of all members
MFEMGeometricMultigridSolver::MGProxy Class Reference

Stable preconditioner object seen by outer MFEM solvers. More...

Inheritance diagram for MFEMGeometricMultigridSolver::MGProxy:
[legend]

Public Member Functions

 MGProxy (MFEMGeometricMultigridSolver &owner)
 Constructs a proxy that delegates multigrid rebuilding to the owning MOOSE solver. More...
 
void setMG (mfem::GeometricMultigrid &mg)
 Updates the concrete MFEM multigrid object used by Mult(). More...
 
void SetOperator (const mfem::Operator &op) override
 Rebuilds the owner's multigrid hierarchy for the new outer-solver operator. More...
 
void Mult (const mfem::Vector &x, mfem::Vector &y) const override
 Applies the current concrete MFEM multigrid preconditioner. More...
 

Private Attributes

MFEMGeometricMultigridSolver_owner
 Solver object that owns the concrete multigrid and level data. More...
 
mfem::GeometricMultigrid * _mg = nullptr
 Non-owning pointer to the currently active concrete MFEM multigrid object. More...
 

Detailed Description

Stable preconditioner object seen by outer MFEM solvers.

MFEM iterative solvers call SetOperator() on their preconditioner, but mfem::GeometricMultigrid::SetOperator() aborts. This proxy keeps a stable solver address for the outer solver and uses SetOperator() as the hook to rebuild the actual multigrid hierarchy.

Definition at line 82 of file MFEMGeometricMultigridSolver.h.

Constructor & Destructor Documentation

◆ MGProxy()

MFEMGeometricMultigridSolver::MGProxy::MGProxy ( MFEMGeometricMultigridSolver owner)

Constructs a proxy that delegates multigrid rebuilding to the owning MOOSE solver.

Definition at line 18 of file MFEMGeometricMultigridSolver.C.

18  : _owner(owner)
19 {
20  // MGProxy is installed as a preconditioner, so Mult() should overwrite its output vector rather
21  // than treating it as an initial iterate. This matches MFEM's
22  // IterativeSolver::SetPreconditioner() convention, which sets the preconditioner's iterative_mode
23  // to false.
24  iterative_mode = false;
25 }
MFEMGeometricMultigridSolver & _owner
Solver object that owns the concrete multigrid and level data.

Member Function Documentation

◆ Mult()

void MFEMGeometricMultigridSolver::MGProxy::Mult ( const mfem::Vector &  x,
mfem::Vector &  y 
) const
override

Applies the current concrete MFEM multigrid preconditioner.

Definition at line 42 of file MFEMGeometricMultigridSolver.C.

43 {
44  MFEM_VERIFY(_mg, "MGProxy: GeometricMultigrid not yet built");
45  _mg->Mult(x, y);
46 }
mfem::GeometricMultigrid * _mg
Non-owning pointer to the currently active concrete MFEM multigrid object.

◆ setMG()

void MFEMGeometricMultigridSolver::MGProxy::setMG ( mfem::GeometricMultigrid &  mg)

Updates the concrete MFEM multigrid object used by Mult().

Definition at line 28 of file MFEMGeometricMultigridSolver.C.

Referenced by MFEMGeometricMultigridSolver::BuildMultigrid().

29 {
30  _mg = &mg;
31  height = mg.Height();
32  width = mg.Width();
33 }
mfem::GeometricMultigrid * _mg
Non-owning pointer to the currently active concrete MFEM multigrid object.

◆ SetOperator()

void MFEMGeometricMultigridSolver::MGProxy::SetOperator ( const mfem::Operator &  op)
override

Rebuilds the owner's multigrid hierarchy for the new outer-solver operator.

Definition at line 36 of file MFEMGeometricMultigridSolver.C.

37 {
39 }
void BuildMultigrid(const mfem::Operator &op)
Rebuild the multigrid object and per-level operators for the supplied finest-level operator...
MFEMGeometricMultigridSolver & _owner
Solver object that owns the concrete multigrid and level data.

Member Data Documentation

◆ _mg

mfem::GeometricMultigrid* MFEMGeometricMultigridSolver::MGProxy::_mg = nullptr
private

Non-owning pointer to the currently active concrete MFEM multigrid object.

Definition at line 102 of file MFEMGeometricMultigridSolver.h.

◆ _owner

MFEMGeometricMultigridSolver& MFEMGeometricMultigridSolver::MGProxy::_owner
private

Solver object that owns the concrete multigrid and level data.

Definition at line 99 of file MFEMGeometricMultigridSolver.h.


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