https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MFEMSteady.C
Go to the documentation of this file.
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 "MFEMSteady.h"
13#include "MFEMProblem.h"
14#include "MFEMEigenproblem.h"
18
20
23{
25 params += Executioner::validParams();
26 params.addClassDescription("Executioner for steady state MFEM problems.");
27 params.addParam<Real>("time", 0.0, "System time");
28 return params;
29}
30
32 : Executioner(params),
33 _mfem_problem(dynamic_cast<MFEMProblem &>(feProblem())),
34 _mfem_problem_data(_mfem_problem.getProblemData()),
35 _mfem_problem_solve(*this, getProblemOperators()),
36 _system_time(getParam<Real>("time")),
37 _time_step(_mfem_problem.timeStep()),
38 _time([this]() -> Real & { return this->_mfem_problem.time() = this->_system_time; }()),
39 _last_solve_converged(false)
40{
41 // If no ProblemOperators have been added by the user, add a default
42 if (!_mfem_problem.getProblemComposer())
43 {
44 std::string name = "__DefaultWeakFormProblemComposer";
45 InputParameters params = _factory.getValidParams("MFEMWeakFormProblemComposer");
46
47 if (dynamic_cast<MFEMEigenproblem *>(&_mfem_problem))
48 _mfem_problem.addMFEMProblemComposer("MFEMEigenWeakFormProblemComposer", name, params);
49 else if (_mfem_problem.getNumericType() == MFEMProblem::NumericType::COMPLEX)
50 _mfem_problem.addMFEMProblemComposer("MFEMComplexWeakFormProblemComposer", name, params);
51 else
52 _mfem_problem.addMFEMProblemComposer("MFEMWeakFormProblemComposer", name, params);
53 }
54 addProblemOperator(_mfem_problem.getProblemComposer()->createProblemOperator(_mfem_problem));
55}
56
57void
59{
62
64 {
66 _mfem_problem_data.eqn_system->SetGradientRequired(
67 _mfem_problem_data.nonlinear_solver->RequiresGradient());
68
70
71 // Set up initial conditions
75 getParam<MooseEnum>("assembly_level").getEnum<mfem::AssemblyLevel>());
76 }
77
78 for (const auto & problem_operator : getProblemOperators())
79 {
80 problem_operator->SetGridFunctions();
81 problem_operator->Init(_mfem_problem_data.true_solution);
82 }
83}
84
85void
87{
88 if (_app.isRecovering())
89 {
90 _console << "\nCannot recover steady solves!\nExiting...\n" << std::endl;
91 return;
92 }
93
94 _time_step = 0;
98
99 preExecute();
100
102
103 // first step in any steady state solve is always 1 (preserving backwards compatibility)
104 _time_step = 1;
107 {
108 _last_solve_converged = false;
109 return;
110 }
112
114
117
118 // need to keep _time in sync with _time_step to get correct output
124
125 {
126 TIME_SECTION("final", 1, "Executing Final Objects")
134 }
135
136 postExecute();
137}
138
139#endif
registerMooseObject("MooseApp", MFEMSteady)
const ExecFlagType EXEC_PRE_MULTIAPP_SETUP
Definition Moose.C:57
const ExecFlagType EXEC_TIMESTEP_END
Definition Moose.C:37
const ExecFlagType EXEC_TIMESTEP_BEGIN
Definition Moose.C:38
const ExecFlagType EXEC_INITIAL
Definition Moose.C:31
const ExecFlagType EXEC_FINAL
Definition Moose.C:49
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
Executioners are objects that do the actual work of solving your problem.
Definition Executioner.h:37
static InputParameters validParams()
Definition Executioner.C:26
virtual void preExecute()
Override this for actions that should take place before execution.
Definition Executioner.h:73
virtual void postExecute()
Override this for actions that should take place after execution.
Definition Executioner.h:78
virtual void advanceState()
Advance all of the state holding vectors / datastructures so that we can move to the next timestep.
virtual void postExecute()
Method called at the end of the simulation.
bool execMultiApps(ExecFlagType type, bool auto_advance=true)
Execute the MultiApps associated with the ExecFlagType.
void timestepSetup() override
virtual void computeIndicators()
void finalizeMultiApps()
virtual Real & time() const
virtual void computeMarkers()
virtual void outputStep(ExecFlagType type)
Output the current step.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an optional parameter and a documentation string to the InputParameters object.
void addClassDescription(const std::string &doc_string)
This method adds a description of the class that will be displayed in the input file syntax dump.
virtual bool solve() override
Solve routine provided by this object.
static InputParameters validParams()
virtual void execute(const ExecFlagType &exec_type) override
Convenience function for performing execution of MOOSE systems.
virtual void initialSetup() override
Definition MFEMProblem.C:88
MFEMSteady(const InputParameters &params)
Definition MFEMSteady.C:31
virtual void execute() override
Pure virtual execute function MUST be overridden by children classes.
Definition MFEMSteady.C:86
MFEMProblemSolve _mfem_problem_solve
Definition MFEMSteady.h:36
MFEMProblemData & _mfem_problem_data
Definition MFEMSteady.h:35
bool _last_solve_converged
Flag showing if the last solve converged.
Definition MFEMSteady.h:45
int & _time_step
Definition MFEMSteady.h:41
static InputParameters validParams()
Definition MFEMSteady.C:22
MFEMProblem & _mfem_problem
Definition MFEMSteady.h:34
virtual void init() override
Initialize the executioner.
Definition MFEMSteady.C:58
Real _system_time
Definition MFEMSteady.h:40
Real & _time
Definition MFEMSteady.h:42
bool isRecovering() const
Whether or not this is a "recover" calculation.
Definition MooseApp.C:1674
MooseApp & _app
The MOOSE application this is associated with.
Definition MooseBase.h:375
virtual std::vector< std::shared_ptr< ProblemOperatorBase > > & getProblemOperators()
Returns a pointer to the operator's equation system.
std::shared_ptr< Moose::MFEM::EquationSystem > eqn_system
Moose::MFEM::CoefficientManager coefficients
Moose::MFEM::ComplexGridFunctions cmplx_gridfunctions
mfem::BlockVector true_solution
Persistent true-DoF solution vector backing trial grid functions after problem operator init.
std::shared_ptr< Moose::MFEM::NonlinearSolverBase > nonlinear_solver
Moose::MFEM::GridFunctions gridfunctions