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 "MFEMHypreLOBPCG.h" 13 : #include "MFEMProblem.h" 14 : 15 : registerMooseObject("MooseApp", MFEMHypreLOBPCG); 16 : 17 : InputParameters 18 2124 : MFEMHypreLOBPCG::validParams() 19 : { 20 2124 : InputParameters params = MFEMEigensolverBase::validParams(); 21 : 22 4248 : params.addClassDescription("Base class for defining MFEM eigensolver classes for Moose "); 23 6372 : params.addParam<int>("random_seed", 123, "Set the random seed for the solver."); 24 : 25 2124 : return params; 26 0 : } 27 : 28 13 : MFEMHypreLOBPCG::MFEMHypreLOBPCG(const InputParameters & parameters) 29 13 : : MFEMEigensolverBase(parameters) 30 : { 31 13 : constructSolver(); 32 13 : } 33 : 34 : void 35 13 : MFEMHypreLOBPCG::constructSolver() 36 : { 37 13 : _eigensolver = std::make_unique<mfem::HypreLOBPCG>(getMFEMProblem().getComm()); 38 : 39 13 : _eigensolver->SetNumModes(_num_modes); 40 26 : _eigensolver->SetRandomSeed(getParam<int>("random_seed")); 41 26 : _eigensolver->SetMaxIter(getParam<int>("l_max_its")); 42 26 : _eigensolver->SetTol(getParam<mfem::real_t>("l_tol")); 43 13 : _eigensolver->SetPrecondUsageMode(1); 44 26 : _eigensolver->SetPrintLevel(getParam<int>("print_level")); 45 13 : setPreconditioner(*_eigensolver); 46 13 : } 47 : 48 : #endif