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 : // MOOSE includes 11 : #include "SteadyBase.h" 12 : #include "FEProblem.h" 13 : #include "Factory.h" 14 : #include "MooseApp.h" 15 : #include "NonlinearSystem.h" 16 : 17 : #include "libmesh/equation_systems.h" 18 : 19 : InputParameters 20 151512 : SteadyBase::validParams() 21 : { 22 151512 : InputParameters params = Executioner::validParams(); 23 454536 : params.addParam<Real>("time", 0.0, "System time"); 24 151512 : return params; 25 0 : } 26 : 27 31143 : SteadyBase::SteadyBase(const InputParameters & parameters) 28 : : Executioner(parameters), 29 31143 : _problem(_fe_problem), 30 31143 : _system_time(getParam<Real>("time")), 31 31143 : _time_step(_problem.timeStep()), 32 62286 : _time([this]() -> Real & { return this->_problem.time() = this->_system_time; }()), 33 31143 : _output_iteration_number(0) 34 : { 35 31143 : } 36 : 37 : void 38 30042 : SteadyBase::execute() 39 : { 40 30042 : if (_app.isRecovering()) 41 : { 42 1608 : _console << "\nCannot recover steady-state solves of type: " << this->type() 43 1608 : << "!\nExiting...\n" 44 1608 : << std::endl; 45 1608 : _last_solve_converged = true; 46 1608 : return; 47 : } 48 : 49 28434 : _time_step = 0; 50 28434 : _time = _time_step; 51 28434 : _problem.outputStep(EXEC_INITIAL); 52 28430 : _time = _system_time; 53 : 54 28430 : preExecute(); 55 : 56 28430 : _problem.advanceState(); 57 : 58 : // first step in any SteadyBase state solve is always 1 (preserving backwards compatibility) 59 28430 : _time_step = 1; 60 : 61 : #ifdef LIBMESH_ENABLE_AMR 62 : 63 : // Define the refinement loop 64 28430 : unsigned int steps = _problem.adaptivity().getSteps(); 65 57291 : for (unsigned int r_step = 0; r_step <= steps; r_step++) 66 : { 67 : #endif // LIBMESH_ENABLE_AMR 68 29281 : _problem.timestepSetup(); 69 : 70 29281 : _last_solve_converged = _fixed_point_solve->solve(); 71 : 72 29064 : if (!lastSolveConverged()) 73 : { 74 195 : _console << "Aborting as solve did not converge" << std::endl; 75 195 : break; 76 : } 77 : 78 28869 : _problem.computeIndicators(); 79 28869 : _problem.computeMarkers(); 80 : 81 : // need to keep _time in sync with _time_step to get correct output 82 28865 : _time = _time_step; 83 28865 : _problem.outputStep(EXEC_TIMESTEP_END); 84 28861 : _time = _system_time; 85 : 86 : #ifdef LIBMESH_ENABLE_AMR 87 28861 : if (r_step != steps) 88 : { 89 851 : _problem.adaptMesh(); 90 : } 91 : 92 28861 : _time_step++; 93 : } 94 : #endif 95 : 96 : { 97 141025 : TIME_SECTION("final", 1, "Executing Final Objects") 98 28205 : _problem.execMultiApps(EXEC_FINAL); 99 28205 : _problem.finalizeMultiApps(); 100 28205 : _problem.postExecute(); 101 28205 : _problem.execute(EXEC_FINAL); 102 28205 : _time = _time_step; 103 28205 : _problem.outputStep(EXEC_FINAL); 104 28205 : _time = _system_time; 105 28205 : } 106 : 107 28205 : postExecute(); 108 : }