Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #ifdef MOOSE_MFEM_ENABLED 11 : 12 : #pragma once 13 : 14 : #include "EquationSystem.h" 15 : 16 : class MFEMEigensolverBase; 17 : 18 : namespace Moose::MFEM 19 : { 20 : 21 : /// Equation system specialization for eigenproblems. 22 : class EigenproblemEquationSystem : public EquationSystem 23 : { 24 : public: 25 26 : EigenproblemEquationSystem() = default; 26 26 : ~EigenproblemEquationSystem() override = default; 27 : 28 : /// Build eigenproblem system, with essential boundary conditions accounted for 29 : void BuildEigenproblemJacobian(mfem::BlockVector & trueX, mfem::OperatorHandle & massRHS); 30 : 31 : protected: 32 : /// Mark external boundaries as essential for eigenproblem BC elimination 33 : virtual void ApplyEssentialBCs() override; 34 : 35 : /// Form HypreParMatrix matrix operator for the eigensolver with Dirichlet BC elimination. 36 : virtual void FormEigenproblemMatrix(mfem::OperatorHandle & op); 37 : 38 : /// Form mass matrix for the eigensolver with Dirichlet BC elimination. 39 : void FormMassMatrix(mfem::OperatorHandle & op); 40 : 41 : private: 42 : friend class EigenproblemESProblemOperator; 43 : 44 : mfem::Array<int> _global_ess_markers; 45 : }; 46 : 47 : } // namespace Moose::MFEM 48 : 49 : #endif