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 : #include "MFEMEigenvaluesPostprocessor.h" 13 : #include "MFEMEigenproblem.h" 14 : #include "MFEMEigensolverBase.h" 15 : 16 : registerMooseObject("MooseApp", MFEMEigenvaluesPostprocessor); 17 : 18 : InputParameters 19 2150 : MFEMEigenvaluesPostprocessor::validParams() 20 : { 21 2150 : InputParameters params = MFEMVectorPostprocessor::validParams(); 22 2150 : params.addClassDescription("Retrieves the eigenvalues from an eigensolve for exporting."); 23 2150 : return params; 24 0 : } 25 : 26 26 : MFEMEigenvaluesPostprocessor::MFEMEigenvaluesPostprocessor(const InputParameters & parameters) 27 52 : : MFEMVectorPostprocessor(parameters), _eigenvalues(this->declareVector("eigenvalues")) 28 : { 29 26 : } 30 : 31 : void 32 26 : MFEMEigenvaluesPostprocessor::initialize() 33 : { 34 26 : } 35 : 36 : void 37 26 : MFEMEigenvaluesPostprocessor::execute() 38 : { 39 : auto eigensolver = std::dynamic_pointer_cast<MFEMEigensolverBase>( 40 26 : getMFEMProblem().getProblemData().jacobian_solver); 41 26 : if (!eigensolver) 42 0 : mooseError("The solver is not an eigensolver, cannot retrieve eigenvalues."); 43 : 44 26 : mfem::Array<mfem::real_t> eigenvalues; 45 26 : eigensolver->getEigenvalues(eigenvalues); 46 : 47 52 : const auto ev_dim = getMFEMProblem().getParam<int>("num_modes"); 48 26 : _eigenvalues.resize(ev_dim); 49 : 50 156 : for (int i = 0; i < ev_dim; i++) 51 130 : _eigenvalues[i] = eigenvalues[i]; 52 26 : } 53 : 54 : #endif