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 = Moose::MFEM::EigensolverBase::validParams(); 21 : 22 4248 : params.addClassDescription("Locally Optimal Block PCG eigensolver to iteratively compute the " 23 : "lowest eigenmodes of a generalized eigenvalue problem."); 24 6372 : params.addParam<int>("random_seed", 123, "Set the random seed for the solver."); 25 : 26 2124 : return params; 27 0 : } 28 : 29 13 : MFEMHypreLOBPCG::MFEMHypreLOBPCG(const InputParameters & parameters) 30 13 : : Moose::MFEM::EigensolverBase(parameters) 31 : { 32 13 : ConstructSolver(); 33 13 : } 34 : 35 : void 36 13 : MFEMHypreLOBPCG::ConstructSolver() 37 : { 38 13 : _eigensolver = std::make_unique<mfem::HypreLOBPCG>(getMFEMProblem().getComm()); 39 : 40 13 : _eigensolver->SetNumModes(_num_modes); 41 26 : _eigensolver->SetRandomSeed(getParam<int>("random_seed")); 42 26 : _eigensolver->SetMaxIter(getParam<int>("l_max_its")); 43 26 : _eigensolver->SetTol(getParam<mfem::real_t>("l_tol")); 44 13 : _eigensolver->SetPrecondUsageMode(1); 45 26 : _eigensolver->SetPrintLevel(getParam<int>("print_level")); 46 13 : SetPreconditioner(*_eigensolver); 47 13 : } 48 : 49 : #endif