10#ifdef MOOSE_MFEM_ENABLED
14#include "libmesh/int_range.h"
27 _ess_markers.at(0).SetSize(trial_gf.ParFESpace()->GetParMesh()->bdr_attributes.Max(), 0);
28 trial_gf.ParFESpace()->GetParMesh()->MarkExternalBoundaries(
_ess_markers.at(0));
46 mfem::ConstantCoefficient one(1.0);
48 std::unique_ptr<mfem::ParBilinearForm> m = std::make_unique<mfem::ParBilinearForm>(fespace);
50 if (fespace->GetTypicalFE()->GetRangeType() == mfem::FiniteElement::SCALAR)
51 m->AddDomainIntegrator(
new mfem::MassIntegrator(one));
53 m->AddDomainIntegrator(
new mfem::VectorFEMassIntegrator(one));
59 m->EliminateEssentialBCDiag(
_ess_markers.at(0), std::numeric_limits<mfem::real_t>::min());
69 "Eigensolve is only supported for single-variable, square systems");
71 height = trueX.Size();
virtual void ApplyEssentialBCs() override
Mark external boundaries as essential for eigenproblem BC elimination.
void BuildEigenproblemJacobian(mfem::BlockVector &trueX)
Build eigenproblem system, with essential boundary conditions accounted for.
mfem::OperatorHandle _mass_rhs
The mass operator (e.g. the RHS operator for a generalized eigenproblem)
void PrepareEigensolver(EigensolverBase &solver)
Prepare the provided eigensolver.
void FormMassMatrix()
Form mass matrix for the eigensolver with Dirichlet BC elimination.
void FormEigenproblemMatrix()
Form HypreParMatrix matrix operator for the eigensolver with Dirichlet BC elimination.
Base class for eigensolvers.
virtual void SetMassMatrix(mfem::Operator &mass)=0
Sets the mass matrix for the eigensolver in derived classes.
std::vector< mfem::ParFiniteElementSpace * > _test_pfespaces
Pointers to finite element spaces associated with test variables.
std::vector< std::string > _test_var_names
Names of all test variables corresponding to linear forms in this equation system.
std::vector< mfem::Array< int > > _ess_tdof_lists
NamedFieldsMap< mfem::ParBilinearForm > _blfs
mfem::OperatorHandle _jacobian
std::vector< std::string > _trial_var_names
Subset of _coupled_var_names of all variables corresponding to gridfunctions with degrees of freedom ...
std::vector< std::unique_ptr< mfem::ParGridFunction > > _var_ess_constraints
Gridfunctions holding essential constraints from Dirichlet BCs.
std::vector< mfem::Array< int > > _ess_markers
Moose::MFEM::GridFunctions * _gfuncs
T * Get(const std::string &field_name) const
Returns a non-owning pointer to the field. This is guaranteed to return a non-null pointer.
T & GetRef(const std::string &field_name) const
Returns a reference to a field.
void SetOperator(mfem::Operator &op)
Updates the solver and any associated weak form context at the operator level.
Utilities for converting between vector(s) of libMesh Points and MFEM Vector(s).