https://mooseframework.inl.gov
Loading...
Searching...
No Matches
FixedPointSolve.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#include "FixedPointSolve.h"
11
12#include "FEProblem.h"
13#include "Executioner.h"
14#include "MooseMesh.h"
15#include "NonlinearSystem.h"
16#include "AuxiliarySystem.h"
18#include "Console.h"
20#include "Convergence.h"
22#include "MooseUtils.h"
23
26{
28
29 params.addParam<unsigned int>(
30 "fixed_point_min_its", 1, "Specifies the minimum number of fixed point iterations.");
31 params.addParam<unsigned int>(
32 "fixed_point_max_its", 1, "Specifies the maximum number of fixed point iterations.");
33 params.addParam<bool>("disable_fixed_point_residual_norm_check",
34 false,
35 "Disable the residual norm evaluation thus the three parameters "
36 "fixed_point_rel_tol, fixed_point_abs_tol and fixed_point_force_norms.");
37 params.addParam<bool>(
38 "fixed_point_force_norms",
39 false,
40 "Force the evaluation of both the TIMESTEP_BEGIN and TIMESTEP_END norms regardless of the "
41 "existence of active MultiApps with those execute_on flags, default: false.");
42 params.addParam<bool>(
43 "accept_on_max_fixed_point_iteration",
44 false,
45 "True to treat reaching the maximum number of fixed point iterations as converged.");
46 params.addRangeCheckedParam<Real>("fixed_point_rel_tol",
47 1e-8,
48 "fixed_point_rel_tol>0",
49 "The relative nonlinear residual drop to shoot for "
50 "during fixed point iterations. This check is "
51 "performed based on the main app's nonlinear "
52 "residual.");
53 params.addRangeCheckedParam<Real>("fixed_point_abs_tol",
54 1e-50,
55 "fixed_point_abs_tol>0",
56 "The absolute nonlinear residual to shoot for "
57 "during fixed point iterations. This check is "
58 "performed based on the main app's nonlinear "
59 "residual.");
60
61 params.addParam<PostprocessorName>("custom_pp",
62 "Postprocessor for custom fixed point convergence check.");
63 params.addParam<bool>("direct_pp_value",
64 false,
65 "True to use direct postprocessor value "
66 "(scaled by value on first iteration). "
67 "False (default) to use difference in postprocessor "
68 "value between fixed point iterations.");
69 params.addRangeCheckedParam<Real>("custom_rel_tol",
70 1e-8,
71 "custom_rel_tol>0",
72 "The relative nonlinear residual drop to shoot for "
73 "during fixed point iterations. This check is "
74 "performed based on the postprocessor defined by "
75 "custom_pp residual.");
76 params.addRangeCheckedParam<Real>("custom_abs_tol",
77 1e-50,
78 "custom_abs_tol>0",
79 "The absolute nonlinear residual to shoot for "
80 "during fixed point iterations. This check is "
81 "performed based on postprocessor defined by "
82 "the custom_pp residual.");
83
85 "fixed_point_min_its fixed_point_max_its disable_fixed_point_residual_norm_check "
86 "accept_on_max_fixed_point_iteration fixed_point_rel_tol fixed_point_abs_tol "
87 "fixed_point_force_norms custom_pp direct_pp_value custom_abs_tol custom_rel_tol",
88 "MultiApp fixed point iterations");
89
90 return params;
91}
92
95{
98
99 params.addParam<ConvergenceName>(
100 "multiapp_fixed_point_convergence",
101 "Name of the Convergence object to use to assess convergence of the "
102 "MultiApp fixed point solve. If not provided, a default Convergence "
103 "will be constructed internally from the executioner parameters.");
104
105 // Parameters for relaxing the fixed point process
106 params.addRangeCheckedParam<Real>("relaxation_factor",
107 1.0,
108 "relaxation_factor>0 & relaxation_factor<2",
109 "Fraction of newly computed value to keep."
110 "Set between 0 and 2.");
111 params.addParam<std::vector<std::string>>(
112 "transformed_variables",
113 std::vector<std::string>(),
114 "List of main app variables to transform during fixed point iterations");
115 params.addParam<std::vector<PostprocessorName>>(
116 "transformed_postprocessors",
117 std::vector<PostprocessorName>(),
118 "List of main app postprocessors to transform during fixed point iterations");
119 params.addDeprecatedParam<std::vector<std::string>>(
120 "relaxed_variables",
121 std::vector<std::string>(),
122 "List of main app variables to relax during fixed point iterations",
123 "Relaxed variables is deprecated, use transformed_variables instead.");
124
125 params.addParam<bool>("auto_advance",
126 "Whether to automatically advance sub-applications regardless of whether "
127 "their solve converges, for transient executioners only.");
128
130 "multiapp_fixed_point_convergence "
131 "relaxation_factor transformed_variables transformed_postprocessors auto_advance",
132 "Fixed point iterations");
133
134 params.addParam<unsigned int>(
135 "max_xfem_update",
136 std::numeric_limits<unsigned int>::max(),
137 "Maximum number of times to update XFEM crack topology in a step due to evolving cracks");
138 params.addParam<bool>("update_xfem_at_timestep_begin",
139 false,
140 "Should XFEM update the mesh at the beginning of the timestep");
141
142 params.addParamNamesToGroup("max_xfem_update update_xfem_at_timestep_begin",
143 "XFEM fixed point iterations");
144
145 return params;
146}
147
149 : SolveObject(ex),
150 _has_fixed_point_its(getParam<unsigned int>("fixed_point_max_its") > 1 ||
151 getParam<unsigned int>("fixed_point_min_its") > 1 ||
152 isParamSetByUser("multiapp_fixed_point_convergence")),
153 _relax_factor(getParam<Real>("relaxation_factor")),
154 _transformed_vars(getParam<std::vector<std::string>>("transformed_variables")),
155 _transformed_pps(getParam<std::vector<PostprocessorName>>("transformed_postprocessors")),
156 _transformed_sys(nullptr),
157 // this value will be set by MultiApp
158 _secondary_relaxation_factor(1.0),
159 _fixed_point_it(0),
160 _fixed_point_status(MooseFixedPointConvergenceReason::UNSOLVED),
161 _max_xfem_update(getParam<unsigned int>("max_xfem_update")),
162 _update_xfem_at_timestep_begin(getParam<bool>("update_xfem_at_timestep_begin")),
163 _xfem_update_count(0),
164 _xfem_repeat_step(false),
165 _old_entering_time(_problem.time() - 1),
166 _fail_step(false),
167 _auto_advance_set_by_user(isParamValid("auto_advance")),
168 _auto_advance_user_value(_auto_advance_set_by_user ? getParam<bool>("auto_advance") : true)
169{
170 // Handle deprecated parameters
171 if (!parameters().isParamSetByAddParam("relaxed_variables"))
172 _transformed_vars = getParam<std::vector<std::string>>("relaxed_variables");
173
174 if (_transformed_vars.size() > 0 && _transformed_pps.size() > 0)
176 "Both variable and postprocessor transformation are active. If the two share dofs, the "
177 "transformation will not be correct.");
178 if (_relax_factor != 1 && _transformed_vars.empty() && _transformed_pps.empty())
179 paramError("relaxation_factor",
180 "Relaxation factor must act on at least one 'transformed_variables' or one "
181 "'transformed_postprocessors'");
182
183 // Fixed point was not detected, and yet some parameters are passed
185 (getParam<Real>("relaxation_factor") != 1 ||
186 getParam<std::vector<std::string>>("transformed_variables").size() ||
187 getParam<std::vector<PostprocessorName>>("transformed_postprocessors").size()))
188 paramError("fixed_point_min_its",
189 std::string("Parameter(s) ") +
190 ((getParam<Real>("relaxation_factor") != 1) ? "'relaxation_factor', " : "") +
191 (getParam<std::vector<std::string>>("transformed_variables").size()
192 ? "'transformed_variables', "
193 : "") +
194 (getParam<std::vector<std::string>>("transformed_postprocessors").size()
195 ? "'transformed_postprocessors', "
196 : "") +
197 " were passed to the Executioner for multiapp fixed point iterations, but fixed "
198 "point iterations are only activiated if 'fixed_point_min_its', "
199 "'fixed_point_max_its' or 'multiapp_fixed_point_convergence' are passed");
200
201 if (!_app.isUltimateMaster())
202 {
206 // TODO: use paramError by retrieving parent app's MultiApp
210 "Secondary relaxation factor, specified in the MultiApps block, must act on at least one "
211 "'secondary_transformed_variables' or one 'secondary_transformed_postprocessors'. "
212 "See parent application MultiApp parameters");
213 }
214
215 if (isParamValid("multiapp_fixed_point_convergence"))
217 getParam<ConvergenceName>("multiapp_fixed_point_convergence"));
218 else
220}
221
222void
242
243bool
245{
246 TIME_SECTION("PicardSolve", 1);
247
248 Real current_dt = _problem.dt();
249
250 bool converged = true;
251
252 // need to back up multi-apps even when not doing fixed point iteration for recovering from failed
253 // multiapp solve
258
259 // Prepare to relax variables as a main app
260 std::set<dof_id_type> transformed_dofs;
261 if ((_relax_factor != 1.0 || !dynamic_cast<PicardSolve *>(this)) && _transformed_vars.size() > 0)
262 {
263 // Snag all of the local dof indices for all of these variables
266 Threads::parallel_reduce(elem_range, aldit);
267
268 transformed_dofs = aldit.getDofIndices();
269 }
270
271 // Prepare to relax variables as a subapp
272 std::set<dof_id_type> secondary_transformed_dofs;
273 if (_secondary_relaxation_factor != 1.0 || !dynamic_cast<PicardSolve *>(this))
274 {
276 {
277 // Snag all of the local dof indices for all of these variables
280 Threads::parallel_reduce(elem_range, aldit);
281
282 secondary_transformed_dofs = aldit.getDofIndices();
283 }
284
285 // To detect a new time step
288 {
289 // Keep track of the iteration number of the main app
291
292 // Save variable values before the solve. Solving will provide new values
294 saveVariableValues(/*is parent app of this iteration=*/false);
295 }
296 else
298 }
299
301 {
303 convergence.initialize();
304 }
305
306 _fixed_point_it = 0;
307 while (true)
308 {
310 {
311 if (_fixed_point_it != 0)
312 {
313 // For every iteration other than the first, we need to restore the state of the MultiApps
316 }
317
318 _console << COLOR_MAGENTA << "Beginning fixed point iteration " << _fixed_point_it
319 << COLOR_DEFAULT << std::endl
320 << std::endl;
321 }
322
323 // Solve a single application for one time step
324 const bool solve_converged = solveStep(transformed_dofs);
325
326 if (solve_converged)
327 {
329 {
331
332 // Examine convergence metrics & properties and set the convergence reason
333 bool break_out = examineFixedPointConvergence(converged);
334
335 if (break_out)
336 {
337 // Except DefaultMultiAppFixedPointConvergence, convergence objects will not
338 // update _fixed_point_status, so we give those cases generic values:
340 {
341 if (converged)
343 else
345 }
346
347 break;
348 }
349 }
350 }
351 else
352 {
353 // If the last solve didn't converge then we need to exit this step completely (even in the
354 // case of coupling). So we can retry...
355 converged = false;
356 break;
357 }
358
359 _problem.dt() =
360 current_dt; // _dt might be smaller than this at this point for multistep methods
361
363
365 break;
366 }
367
368 if (converged)
369 {
370 // Fixed point iteration loop ends right above
374 {
376 return false;
377 }
379 }
380
381 // Save postprocessors after the solve and their potential timestep_end execution
382 // The postprocessors could be overwritten at timestep_begin, which is why they are saved
383 // after the solve. They could also be saved right after the transfers.
386
387 if (converged)
388 {
389 // Update the subapp using the fixed point algorithm
390 if (_secondary_transformed_variables.size() > 0 &&
392 transformVariables(secondary_transformed_dofs, false);
393
394 // Update the entering time, used to detect failed solves
396 }
397
400
401 return converged;
402}
403
404void
406{
408 saveVariableValues(primary);
410}
411
412bool
413FixedPointSolve::solveStep(const std::set<dof_id_type> & transformed_dofs)
414{
415 bool auto_advance = autoAdvance();
416
417 // Start new TIMESTEP_BEGIN section for solution invalidity
420
423
424 if (_fixed_point_it == 0)
425 {
429 {
431 return false;
432 }
434 }
435
436 if (!_problem.execMultiApps(EXEC_TIMESTEP_BEGIN, auto_advance))
437 {
439 return false;
440 }
441
444
446
447 // Transform the fixed point postprocessors before solving, but after the timestep_begin transfers
448 // have been received
454
456 {
458 convergence.preExecute();
459 }
460
461 // Keep track of the solution warnings from the TIMESTEP_BEGIN phase before:
462 // - the count reset at the beginning of each iteration of the solve
463 // - the output on TIMESTEP_BEGIN
466
467 // Perform output for timestep begin
469
470 // Update warehouse active objects
472
473 // Save the current values of variables and postprocessors, before the solve
474 saveAllValues(true);
475
476 // Save the previous fixed point iteration solution and aux variables if requested
478 sys->copyPreviousSolutions(Moose::SolutionIterationType::MultiAppFixedPoint);
479
481 _console << COLOR_MAGENTA << "\nMain app solve:" << COLOR_DEFAULT << std::endl;
482 if (!_inner_solve->solve())
483 {
485
486 // Keep track of the solution warnings from the solve
488
489 // Perform the output of the current, failed time step (this only occurs if desired)
491 return false;
492 }
493 else
495
496 // Use the fixed point algorithm if the conditions (availability of values, etc) are met
498 transformVariables(transformed_dofs, true);
499
501 {
502 _console << "\nRepeating step due to XFEM mesh modification" << std::endl;
503 _xfem_repeat_step = true;
505 }
506 else
507 {
508 if (_problem.haveXFEM())
509 {
510 _xfem_repeat_step = false;
512 }
513
514 // Start new TIMESTEP_END section for solution invalidity
515 // We have to restart the current iteration count to avoid double counting
517
520
522 if (!_problem.execMultiApps(EXEC_TIMESTEP_END, auto_advance))
524
525 // Keep track of the solution warnings from the TIMESTEP_END phase
529 }
530
532 return false;
533 if (_fail_step)
534 {
535 _fail_step = false;
536 return false;
537 }
538
540
541 return true;
542}
543
544bool
546{
548
550 // checkConvergence expects the number of iterations performed, not the iteration index:
551 const auto n_iter = _fixed_point_it + 1;
552 const auto status = convergence.checkConvergence(n_iter);
553 switch (status)
554 {
556 converged = true;
557 return true;
559 converged = false;
560 return true;
562 converged = false;
563 return false;
564 default:
565 mooseError("Should not reach here");
566 }
567}
568
569void
571{
572 _console << "Fixed point convergence reason: ";
573 switch (_fixed_point_status)
574 {
576 _console << "CONVERGED_ABS";
577 break;
579 _console << "CONVERGED_RELATIVE";
580 break;
582 _console << "CONVERGED_PP";
583 break;
585 _console << "REACH_MAX_ITS";
586 break;
588 _console << "CONVERGED_OBJECT (see Convergence object)";
589 break;
591 _console << "DIVERGED_MAX_ITS";
592 break;
594 _console << "DIVERGED_NONLINEAR";
595 break;
597 _console << "DIVERGED_FAILED_MULTIAPP";
598 break;
600 _console << "DIVERGED_OBJECT (see Convergence object)";
601 break;
602 default:
603 // UNSOLVED and CONVERGED_NONLINEAR should not be hit when coupling
604 // iteration is not on here
605 mooseError("Internal error: wrong fixed point status!");
606 break;
607 }
608 _console << std::endl;
609}
610
611bool
613{
614 bool auto_advance = !(_has_fixed_point_its && _problem.isTransient());
615
617 auto_advance = true;
618
620 auto_advance = _auto_advance_user_value;
621
622 return auto_advance;
623}
624
625bool
627{
628 if (primary)
629 return !MooseUtils::absoluteFuzzyEqual(_relax_factor, 1.0);
630 else
631 return !MooseUtils::absoluteFuzzyEqual(_secondary_relaxation_factor, 1.0);
632}
633
634void
636{
637 // Find the system for the transformed variables. They must all belong to the same system
638 const auto & transformed_vars = primary ? _transformed_vars : _secondary_transformed_variables;
639 if (!transformed_vars.empty())
640 {
641 if (_problem.hasAuxiliaryVariable(transformed_vars[0]))
643 else
645 }
646
647 for (const auto & var_name : transformed_vars)
648 if (!_transformed_sys->hasVariable(var_name))
649 {
650 if (primary)
651 paramError("transformed_variables",
652 "Transformed variables must all belong to the same system. Auxiliary and each "
653 "solver system cannot be mixed");
654 else
655 mooseError("Secondary transformed variables must all belong to the same system. Auxiliary "
656 "and each solver system cannot be mixed");
657 }
658
659 if (primary && _transformed_sys == &_aux)
660 mooseInfo("Transformation of auxiliary variables is only supported for auxiliary variables "
661 "that are only transferred from the child application");
662
665}
InputParameters emptyInputParameters()
const ExecFlagType EXEC_MULTIAPP_FIXED_POINT_END
Definition Moose.C:40
const ExecFlagType EXEC_MULTIAPP_FIXED_POINT_CONVERGENCE
Definition Moose.C:44
const ExecFlagType EXEC_TIMESTEP_END
Definition Moose.C:36
const ExecFlagType EXEC_TIMESTEP_BEGIN
Definition Moose.C:37
const ExecFlagType EXEC_MULTIAPP_FIXED_POINT_ITERATION_END
Definition Moose.C:38
const ExecFlagType EXEC_MULTIAPP_FIXED_POINT_BEGIN
Definition Moose.C:42
const ExecFlagType EXEC_FAILED
Definition Moose.C:50
void ErrorVector unsigned int
Grab all the (possibly semi)local dof indices for the variables passed in, in the system passed in.
const std::set< dof_id_type > & getDofIndices() const
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
virtual void initialize()
Method that gets called before each iteration loop.
Definition Convergence.h:53
virtual void preExecute()
Method that gets called in each iteration before the solve.
Definition Convergence.h:58
virtual void checkIterationType(IterationType) const
Perform checks related to the iteration type.
Definition Convergence.h:48
This class provides reusable routines for eigenvalue executioners.
Executioners are objects that do the actual work of solving your problem.
Definition Executioner.h:37
virtual void postSolve()
Override this for actions that should take place after execution, called by FixedPointSolve.
Definition Executioner.h:88
virtual void preSolve()
Override this for actions that should take place before execution, called by FixedPointSolve.
Definition Executioner.h:83
virtual void onTimestepEnd() override
void needsPreviousMultiAppFixedPointIterationAuxiliary(bool state)
Set a flag that indicated that user required values for the previous multiapp fixed point iterate for...
virtual bool updateMeshXFEM()
Update the mesh due to changing XFEM cuts.
void execTransfers(ExecFlagType type)
Execute the Transfers associated with the ExecFlagType.
bool haveXFEM()
Find out whether the current analysis is using XFEM.
virtual std::size_t numSolverSystems() const override
virtual void updateActiveObjects()
Update the active objects in the warehouses.
virtual Real & dt() const
virtual Convergence & getConvergence(const std::string &name, const THREAD_ID tid=0) const
Gets a Convergence object.
void setMultiAppFixedPointConvergenceName(const ConvergenceName &convergence_name)
Sets the MultiApp fixed point convergence object name if there is one.
void restoreMultiApps(ExecFlagType type, bool force=false)
Restore the MultiApps associated with the ExecFlagType.
void needsPreviousMultiAppFixedPointIterationSolution(bool needed, const unsigned int solver_sys_num)
Set a flag that indicated that user required values for the previous multiapp fixed point iterate for...
bool execMultiApps(ExecFlagType type, bool auto_advance=true)
Execute the MultiApps associated with the ExecFlagType.
virtual MooseMesh & mesh() override
SolverSystem & getSolverSystem(unsigned int sys_num)
Get non-constant reference to a solver system.
void backupMultiApps(ExecFlagType type)
Backup the MultiApps associated with the ExecFlagType.
void setNeedToAddDefaultMultiAppFixedPointConvergence()
Sets _need_to_add_default_multiapp_fixed_point_convergence to true.
virtual void execute(const ExecFlagType &exec_type)
Convenience function for performing execution of MOOSE systems.
virtual Real & time() const
virtual int & timeStep() const
virtual bool isTransient() const override
const ConvergenceName & getMultiAppFixedPointConvergenceName() const
Gets the MultiApp fixed point convergence object name.
virtual void outputStep(ExecFlagType type)
Output the current step.
std::set< SystemBase * > _systems_to_copy_previous_solutions_for
All the systems that should save their previous solutions.
virtual void transformVariables(const std::set< dof_id_type > &transformed_dofs, const bool primary)=0
Use the fixed point algorithm to transform the variables.
virtual void initialSetup() override
Method that should be executed once, before any solve calls.
unsigned int _main_fixed_point_it
Current fixed point iteration index for the main app; 0 for the first iteration.
Real _secondary_relaxation_factor
Relaxation factor outside of fixed point iteration (used as a subapp)
const Real _relax_factor
Relaxation factor for fixed point Iteration.
virtual bool solveStep(const std::set< dof_id_type > &transformed_dofs)
Perform one fixed point iteration or a full solve.
bool _fail_step
force the current step to fail, triggering are repeat with a cut dt
Real _old_entering_time
Time of previous fixed point solve as a subapp.
bool examineFixedPointConvergence(bool &converged)
Examine the various convergence metrics.
const bool _auto_advance_user_value
The value of auto_advance set by the user for handling advancement of sub-applications in multi-app c...
const unsigned int _max_xfem_update
Maximum number of xfem updates per step.
const bool _has_fixed_point_its
Whether or not we activate fixed point iteration.
static InputParameters validParams()
bool autoAdvance() const
Whether sub-applications are automatically advanced no matter what happens during their solves.
unsigned int _xfem_update_count
Counter for number of xfem updates that have been performed in the current step.
virtual bool useFixedPointAlgorithmUpdateInsteadOfPicard(const bool primary)=0
Use the fixed point algorithm transform instead of simply using the Picard update This routine can be...
bool _xfem_repeat_step
Whether step should be repeated due to xfem modifying the mesh.
MooseFixedPointConvergenceReason
Enumeration for fixed point convergence reasons.
@ DIVERGED_MAX_ITS
FP converged according to Convergence object.
@ CONVERGED_ABS
Main app nonlinear solve converged, FP unassessed.
@ REACH_MAX_ITS
FP converged by absolute or relative PP tolerance.
@ CONVERGED_PP
FP converged by relative residual tolerance.
@ CONVERGED_RELATIVE
FP converged by absolute residual tolerance.
@ DIVERGED_FAILED_MULTIAPP
Main app nonlinear solve diverged.
@ CONVERGED_OBJECT
FP converged by hitting max iterations and accepting.
@ DIVERGED_NONLINEAR
FP diverged by hitting max iterations.
const bool _update_xfem_at_timestep_begin
Controls whether xfem should update the mesh at the beginning of the time step.
void printFixedPointConvergenceReason()
Print information about the fixed point convergence.
const std::vector< PostprocessorName > _transformed_pps
The postprocessors (transferred or not) that are going to be relaxed.
virtual void saveVariableValues(const bool primary)=0
Saves the current values of the variables, and update the old(er) vectors.
virtual void saveAllValues(const bool primary)
Save both the variable and postprocessor values.
bool performingRelaxation(const bool primary) const
Returns true if there is relaxation.
virtual void savePostprocessorValues(const bool primary)=0
Saves the current values of the postprocessors, and update the old(er) vectors.
FixedPointSolve(Executioner &ex)
std::vector< PostprocessorName > _secondary_transformed_pps
Postprocessors to be relaxed outside of fixed point iteration (used as a subapp)
const bool _auto_advance_set_by_user
Whether the user has set the auto_advance parameter for handling advancement of sub-applications in m...
virtual bool solve() override
Iteratively solves the FEProblem.
std::vector< std::string > _transformed_vars
The variables (transferred or not) that are going to be relaxed.
virtual void transformPostprocessors(const bool primary)=0
Use the fixed point algorithm to transform the postprocessors.
unsigned int _fixed_point_it
std::vector< std::string > _secondary_transformed_variables
Variables to be relaxed outside of fixed point iteration (used as a subapp)
void findTransformedSystem(const bool primary)
Find the system holding the variables to be transformed (accelerated or relaxed)
SystemBase * _transformed_sys
System holding the transformed variables.
virtual void allocateStorage(const bool primary)=0
Allocate storage for the fixed point algorithm.
static InputParameters fixedPointDefaultConvergenceParams()
MooseFixedPointConvergenceReason _fixed_point_status
Status of fixed point solve.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void addParamNamesToGroup(const std::string &space_delim_names, const std::string group_name)
This method takes a space delimited list of parameter names and adds them to the specified group name...
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 addDeprecatedParam(const std::string &name, const T &value, const std::string &doc_string, const std::string &deprecation_message)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
FixedPointConfig & fixedPointConfig()
This info is stored here because we need a "globalish" place to put it in order to allow communicatio...
Definition MooseApp.h:392
bool isUltimateMaster() const
Whether or not this app is the ultimate master app.
Definition MooseApp.h:866
SolutionInvalidity & solutionInvalidity()
Get the SolutionInvalidity for this app.
Definition MooseApp.h:185
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131
void paramError(const std::string &param, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
Definition MooseBase.h:457
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type and optionally a file path to the top-level block p...
Definition MooseBase.h:271
const T & getParam(const std::string &name) const
Retrieve a parameter for the object.
Definition MooseBase.h:406
void mooseInfo(Args &&... args) const
Definition MooseBase.h:334
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
Definition MooseBase.h:199
const libMesh::ConstElemRange * getActiveLocalElementRange()
Return pointers to range objects for various types of ranges (local nodes, boundary elems,...
Definition MooseMesh.C:1242
MooseApp & _app
The MOOSE application this is associated with.
Definition MooseBase.h:375
void mooseWarning(Args &&... args) const
void accumulateIterationIntoTimeStepOccurences()
Pass the number of solution invalid occurrences from current iteration to cumulative counters.
void resetTimeStepOccurences()
Reset the number of solution invalid occurrences back to zero for the current time step.
void resetIterationOccurences()
Reset the number of solution invalid occurrences back to zero.
void accumulateTimeStepIntoTotalOccurences(const unsigned int timestep_index)
Pass the number of solution invalid occurrences from current timestep to cumulative timestep counter ...
void syncIteration()
Sync iteration counts to main processor Sum across all processors.
SystemBase & _solver_sys
Reference to a system for creating vectors as needed for the solve, etc.
Definition SolveObject.h:55
FEProblemBase & _problem
Reference to FEProblem.
Definition SolveObject.h:47
SolveObject * _inner_solve
SolveObject wrapped by this solve object.
Definition SolveObject.h:59
virtual void initialSetup()
Method that should be executed once, before any solve calls.
Definition SolveObject.h:32
Executioner & _executioner
Executioner used to construct this.
Definition SolveObject.h:45
AuxiliarySystem & _aux
Reference to auxiliary system for faster access.
Definition SolveObject.h:57
virtual bool solve()=0
Solve routine provided by this object.
virtual bool hasAuxiliaryVariable(const std::string &var_name) const
Whether or not this problem has this auxiliary variable.
Definition SubProblem.C:812
virtual bool hasVariable(const std::string &var_name) const
Query a system for a variable.
Definition SystemBase.C:850
void parallel_reduce(const Range &range, Body &body, unsigned int n_threads=libMesh::n_threads())
std::vector< std::string > sub_transformed_vars
The names of variables to transform for fixed point solve algorithms (e.g. secant,...
Definition MooseApp.h:131
std::vector< PostprocessorName > sub_transformed_pps
The names of postprocessors to transform for fixed point solve algorithms (e.g. secant,...
Definition MooseApp.h:133
Real sub_relaxation_factor
relaxation factor to be used for a MultiApp's subapps.
Definition MooseApp.h:129