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 "ProblemOperatorInterface.h" 15 : #include "MFEMProblemSolve.h" 16 : #include "TimeDependentProblemOperator.h" 17 : #include "TransientBase.h" 18 : 19 : class MFEMTransient : public TransientBase, public Moose::MFEM::ProblemOperatorInterface 20 : { 21 : public: 22 : static InputParameters validParams(); 23 : 24 : explicit MFEMTransient(const InputParameters & params); 25 : 26 : virtual void init() override; 27 : 28 : /// Return the solve object wrapped by time stepper 29 1284 : virtual SolveObject * timeStepSolveObject() override { return &_mfem_problem_solve; } 30 : 31 : /// Do whatever is necessary to advance one step. 32 : virtual void takeStep(Real input_dt = -1.0) override; 33 : 34 : /// Not supported for MFEM problems, so error if called. 35 0 : virtual Real relativeSolutionDifferenceNorm(bool /*check_aux*/) const override 36 : { 37 0 : mooseError("MFEMTransient executioner does not yet support evaluating the relative solution " 38 : "difference norm at each timestep."); 39 : return 0.0; 40 : } 41 : 42 : /// MFEM problems have no libMesh based TimeIntegrators attached, so return empty set. 43 2780 : virtual std::set<TimeIntegrator *> getTimeIntegrators() const override { return {}; } 44 : 45 : /// MFEM problems have no libMesh based TimeIntegrators attached, so return empty vector. 46 258 : virtual std::vector<std::string> getTimeIntegratorNames() const override { return {}; } 47 : 48 : private: 49 : MFEMProblem & _mfem_problem; 50 : MFEMProblemData & _mfem_problem_data; 51 : MFEMProblemSolve _mfem_problem_solve; 52 : }; 53 : 54 : #endif