12 #ifndef MFEM_DIVFREE_SOLVER_HPP
13 #define MFEM_DIVFREE_SOLVER_HPP
21 namespace blocksolvers
53 std::vector<OperatorPtr>
P_l2;
55 std::vector<OperatorPtr>
Q_l2;
57 std::vector<OperatorPtr>
C;
67 std::unique_ptr<FiniteElementCollection> hcurl_fec_;
70 std::unique_ptr<ParFiniteElementSpace> coarse_hdiv_fes_;
71 std::unique_ptr<ParFiniteElementSpace> coarse_l2_fes_;
72 std::unique_ptr<ParFiniteElementSpace> coarse_hcurl_fes_;
73 std::unique_ptr<ParFiniteElementSpace> l2_0_fes_;
75 std::unique_ptr<ParFiniteElementSpace> hdiv_fes_;
76 std::unique_ptr<ParFiniteElementSpace> l2_fes_;
77 std::unique_ptr<ParFiniteElementSpace> hcurl_fes_;
79 std::vector<SparseMatrix> el_l2dof_;
86 void MakeDofRelationTables(
int level);
148 std::vector<OperatorPtr> solvers_loc_;
219 std::vector<Array<int>> ops_offsets_;
226 void SolveParticular(
const Vector& rhs,
Vector& sol)
const;
227 void SolveDivFree(
const Vector& rhs,
Vector& sol)
const;
228 void SolvePotential(
const Vector &rhs,
Vector& sol)
const;
242 #endif // MFEM_DIVFREE_SOLVER_HPP
Conjugate gradient method.
int GetNumIterations() const
virtual void Mult(const Vector &b, Vector &x) const
Operator application: y=A(x).
DivFreeSolver(const HypreParMatrix &M, const HypreParMatrix &B, const DFSData &data)
virtual void Mult(const Vector &x, Vector &y) const
Operator application: y=A(x).
std::vector< OperatorPtr > Q_l2
Pointer to an Operator of a specified type.
Abstract solver class for Darcy's flow.
void Copy(Array ©) const
Create a copy of the internal array to the provided copy.
Array< int > coarsest_ess_hdivdofs
Data type dense matrix using column-major storage.
virtual void Mult(const Vector &x, Vector &y) const
Operator application: y=A(x).
Abstract parallel finite element space.
SymDirectSubBlockSolver(const SparseMatrix &A, const SparseMatrix &block_dof)
SaddleSchwarzSmoother(const HypreParMatrix &M, const HypreParMatrix &B, const SparseMatrix &agg_hdivdof, const SparseMatrix &agg_l2dof, const HypreParMatrix &P_l2, const HypreParMatrix &Q_l2)
std::vector< OperatorPtr > P_hcurl
virtual void MultTranspose(const Vector &x, Vector &y) const
Action of the transpose operator: y=A^t(x). The default behavior in class Operator is to generate an ...
IterSolveParameters coarse_solve_param
virtual void Mult(const Vector &x, Vector &y) const
Operator application: y=A(x).
LocalSolver(const DenseMatrix &M, const DenseMatrix &B)
virtual void Mult(const Vector &x, Vector &y) const
Operator application: y=A(x).
Data for the divergence free solver.
const DFSData & GetDFSData() const
virtual int GetNumIterations() const
A class to handle Block diagonal preconditioners in a matrix-free implementation. ...
Wrapper for the block-diagonal-preconditioned MINRES defined in ex5p.cpp.
ParFiniteElementSpace * GetHdivFES() const
virtual void SetOperator(const Operator &op)
Set/update the solver for the given operator.
std::vector< OperatorPtr > P_hdiv
virtual void SetOperator(const Operator &op)
Set/update the solver for the given operator.
IterSolveParameters BBT_solve_param
DarcySolver(int size0, int size1)
virtual void SetOperator(const Operator &op)
Set/update the solver for the given operator.
ParFiniteElementSpace * GetL2FES() const
Arbitrary order H(div)-conforming Raviart-Thomas finite elements.
virtual void MultTranspose(const Vector &x, Vector &y) const
Action of the transpose operator: y=A^t(x). The default behavior in class Operator is to generate an ...
BDPMinresSolver(HypreParMatrix &M, HypreParMatrix &B, IterSolveParameters param)
std::vector< OperatorPtr > agg_hdivdof
std::vector< OperatorPtr > agg_l2dof
Parameters for the divergence free solver.
void SetEssZeroDofs(const Array< int > &dofs)
int height
Dimension of the output / number of rows in the matrix.
std::vector< OperatorPtr > C
virtual int GetNumIterations() const =0
Block diagonal solver for symmetric A, each block is inverted by direct solver.
virtual void SetOperator(const Operator &op)
Set/update the solver for the given operator.
virtual void Mult(const Vector &x, Vector &y) const
Operator application: y=A(x).
virtual void Mult(const Vector &x, Vector &y) const
Operator application: y=A(x).
Parameters for iterative solver.
virtual void SetOperator(const Operator &op)
Set/update the solver for the given operator.
DFSSpaces(int order, int num_refine, ParMesh *mesh, const Array< int > &ess_attr, const DFSParameters ¶m)
Solver for local problems in SaddleSchwarzSmoother.
Wrapper for hypre's ParCSR matrix class.
Block diagonal solver for A, each block is inverted by direct solver.
A class to handle Block systems in a matrix-free implementation.
BBTSolver(const HypreParMatrix &B, IterSolveParameters param)
virtual int GetNumIterations() const
Class for parallel meshes.
std::vector< OperatorPtr > P_l2
Arbitrary order "L2-conforming" discontinuous finite elements.