https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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.
 
void SetMG (mfem::GeometricMultigrid &mg)
 Updates the concrete MFEM multigrid object used by Mult().
 
void SetOperator (const mfem::Operator &op) override
 Rebuilds the owner's multigrid hierarchy for the new outer-solver operator.
 
void Mult (const mfem::Vector &x, mfem::Vector &y) const override
 Applies the current concrete MFEM multigrid preconditioner.
 

Private Attributes

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

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 80 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.

29{
30 _mg = &mg;
31 height = mg.Height();
32 width = mg.Width();
33}

Referenced by MFEMGeometricMultigridSolver::BuildMultigrid().

◆ 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.

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 100 of file MFEMGeometricMultigridSolver.h.

◆ _owner

MFEMGeometricMultigridSolver& MFEMGeometricMultigridSolver::MGProxy::_owner
private

Solver object that owns the concrete multigrid and level data.

Definition at line 97 of file MFEMGeometricMultigridSolver.h.


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