28 "fixed_point_min_its", 1,
"Specifies the minimum number of fixed point iterations.");
30 "fixed_point_max_its", 1,
"Specifies the maximum number of fixed point iterations.");
31 params.
addParam<
bool>(
"disable_fixed_point_residual_norm_check",
33 "Disable the residual norm evaluation thus the three parameters " 34 "fixed_point_rel_tol, fixed_point_abs_tol and fixed_point_force_norms.");
36 "fixed_point_force_norms",
38 "Force the evaluation of both the TIMESTEP_BEGIN and TIMESTEP_END norms regardless of the " 39 "existence of active MultiApps with those execute_on flags, default: false.");
41 "accept_on_max_fixed_point_iteration",
43 "True to treat reaching the maximum number of fixed point iterations as converged.");
46 "fixed_point_rel_tol>0",
47 "The relative nonlinear residual drop to shoot for " 48 "during fixed point iterations. This check is " 49 "performed based on the main app's nonlinear " 53 "fixed_point_abs_tol>0",
54 "The absolute nonlinear residual to shoot for " 55 "during fixed point iterations. This check is " 56 "performed based on the main app's nonlinear " 59 params.
addParam<PostprocessorName>(
"custom_pp",
60 "Postprocessor for custom fixed point convergence check.");
61 params.
addParam<
bool>(
"direct_pp_value",
63 "True to use direct postprocessor value " 64 "(scaled by value on first iteration). " 65 "False (default) to use difference in postprocessor " 66 "value between fixed point iterations.");
70 "The relative nonlinear residual drop to shoot for " 71 "during fixed point iterations. This check is " 72 "performed based on the postprocessor defined by " 73 "custom_pp residual.");
77 "The absolute nonlinear residual to shoot for " 78 "during fixed point iterations. This check is " 79 "performed based on postprocessor defined by " 80 "the custom_pp residual.");
83 "fixed_point_min_its fixed_point_max_its disable_fixed_point_residual_norm_check " 84 "accept_on_max_fixed_point_iteration fixed_point_rel_tol fixed_point_abs_tol " 85 "fixed_point_force_norms custom_pp direct_pp_value custom_abs_tol custom_rel_tol",
86 "Fixed point iterations");
98 "multiapp_fixed_point_convergence",
99 "Name of the Convergence object to use to assess convergence of the " 100 "MultiApp fixed point solve. If not provided, a default Convergence " 101 "will be constructed internally from the executioner parameters.");
106 "relaxation_factor>0 & relaxation_factor<2",
107 "Fraction of newly computed value to keep." 108 "Set between 0 and 2.");
109 params.
addParam<std::vector<std::string>>(
110 "transformed_variables",
111 std::vector<std::string>(),
112 "List of main app variables to transform during fixed point iterations");
113 params.
addParam<std::vector<PostprocessorName>>(
114 "transformed_postprocessors",
115 std::vector<PostprocessorName>(),
116 "List of main app postprocessors to transform during fixed point iterations");
119 std::vector<std::string>(),
120 "List of main app variables to relax during fixed point iterations",
121 "Relaxed variables is deprecated, use transformed_variables instead.");
123 params.
addParam<
bool>(
"auto_advance",
124 "Whether to automatically advance sub-applications regardless of whether " 125 "their solve converges, for transient executioners only.");
128 "multiapp_fixed_point_convergence " 129 "relaxation_factor transformed_variables transformed_postprocessors auto_advance",
130 "Fixed point iterations");
135 "Maximum number of times to update XFEM crack topology in a step due to evolving cracks");
136 params.
addParam<
bool>(
"update_xfem_at_timestep_begin",
138 "Should XFEM update the mesh at the beginning of the timestep");
141 "XFEM fixed point iterations");
148 _has_fixed_point_its(getParam<unsigned
int>(
"fixed_point_max_its") > 1 ||
149 isParamSetByUser(
"multiapp_fixed_point_convergence")),
150 _relax_factor(getParam<
Real>(
"relaxation_factor")),
151 _transformed_vars(getParam<
std::vector<
std::string>>(
"transformed_variables")),
152 _transformed_pps(getParam<
std::vector<PostprocessorName>>(
"transformed_postprocessors")),
154 _secondary_relaxation_factor(1.0),
157 _max_xfem_update(getParam<unsigned
int>(
"max_xfem_update")),
158 _update_xfem_at_timestep_begin(getParam<bool>(
"update_xfem_at_timestep_begin")),
159 _xfem_update_count(0),
160 _xfem_repeat_step(false),
161 _old_entering_time(_problem.time() - 1),
163 _auto_advance_set_by_user(isParamValid(
"auto_advance")),
164 _auto_advance_user_value(_auto_advance_set_by_user ? getParam<bool>(
"auto_advance") : true)
167 if (!
parameters().isParamSetByAddParam(
"relaxed_variables"))
172 "Both variable and postprocessor transformation are active. If the two share dofs, the " 173 "transformation will not be correct.");
184 getParam<ConvergenceName>(
"multiapp_fixed_point_convergence"));
204 TIME_SECTION(
"PicardSolve", 1);
208 bool converged =
true;
218 std::set<dof_id_type> transformed_dofs;
224 Threads::parallel_reduce(elem_range, aldit);
230 std::set<dof_id_type> secondary_transformed_dofs;
238 Threads::parallel_reduce(elem_range, aldit);
277 << COLOR_DEFAULT << std::endl
282 const bool solve_converged =
solveStep(transformed_dofs);
424 _console << COLOR_MAGENTA <<
"\nMain app solve:" << COLOR_DEFAULT << std::endl;
442 _console <<
"\nXFEM modified mesh, repeating step" << std::endl;
452 _console <<
"\nXFEM did not modify mesh, continuing" << std::endl;
503 _console <<
"Fixed point convergence reason: ";
519 _console <<
"CONVERGED_OBJECT (see Convergence object)";
528 _console <<
"DIVERGED_FAILED_MULTIAPP";
531 _console <<
"DIVERGED_OBJECT (see Convergence object)";
536 mooseError(
"Internal error: wrong fixed point status!");
const auto MULTIAPP_FIXED_POINT
static InputParameters fixedPointDefaultConvergenceParams()
FEProblemBase & _problem
Reference to FEProblem.
const ExecFlagType EXEC_FAILED
libMesh::ConstElemRange * getActiveLocalElementRange()
Return pointers to range objects for various types of ranges (local nodes, boundary elems...
std::vector< std::string > sub_transformed_vars
The names of variables to transform for fixed point solve algorithms (e.g. secant, etc.).
bool isUltimateMaster() const
Whether or not this app is the ultimate master app.
virtual Real & time() const
FixedPointSolve(Executioner &ex)
std::vector< PostprocessorName > sub_transformed_pps
The names of postprocessors to transform for fixed point solve algorithms (e.g. secant, etc.).
virtual void saveVariableValues(const bool primary)=0
Saves the current values of the variables, and update the old(er) vectors.
void setNeedToAddDefaultMultiAppFixedPointConvergence()
Sets _need_to_add_default_multiapp_fixed_point_convergence to true.
bool examineFixedPointConvergence(bool &converged)
Examine the various convergence metrics.
virtual void initialize()
Method that gets called before each iteration loop.
virtual void preSolve()
Override this for actions that should take place before execution, called by FixedPointSolve.
virtual MooseConvergenceStatus checkConvergence(unsigned int iter)=0
Returns convergence status.
FixedPointConfig & fixedPointConfig()
This info is stored here because we need a "globalish" place to put it in order to allow communicatio...
virtual void updateActiveObjects()
Update the active objects in the warehouses.
virtual bool solve() override
Iteratively solves the FEProblem.
const ExecFlagType EXEC_MULTIAPP_FIXED_POINT_END
virtual void onTimestepEnd() override
bool haveXFEM()
Find out whether the current analysis is using XFEM.
const ExecFlagType EXEC_TIMESTEP_END
MooseFixedPointConvergenceReason
Enumeration for fixed point convergence reasons.
virtual void initialSetup()
Method that should be executed once, before any solve calls.
virtual void saveAllValues(const bool primary)
Save both the variable and postprocessor values.
bool _fail_step
force the current step to fail, triggering are repeat with a cut dt
virtual void transformPostprocessors(const bool primary)=0
Use the fixed point algorithm to transform the postprocessors.
void mooseWarning(Args &&... args) const
Emits a warning prefixed with object name and type.
const std::set< dof_id_type > & getDofIndices() const
std::vector< PostprocessorName > _secondary_transformed_pps
Postprocessors to be relaxed outside of fixed point iteration (used as a subapp)
auto max(const L &left, const R &right)
const std::vector< PostprocessorName > _transformed_pps
The postprocessors (transferred or not) that are going to be relaxed.
FP converged according to Convergence object.
virtual void savePostprocessorValues(const bool primary)=0
Saves the current values of the postprocessors, and update the old(er) vectors.
bool isParamValid(const std::string &name) const
Test if the supplied parameter is valid.
Grab all the (possibly semi)local dof indices for the variables passed in, in the system passed in...
unsigned int _xfem_update_count
Counter for number of xfem updates that have been performed in the current step.
virtual void execute(const ExecFlagType &exec_type)
Convenience function for performing execution of MOOSE systems.
Executioner & _executioner
Executioner used to construct this.
const Real _relax_factor
Relaxation factor for fixed point Iteration.
MooseFixedPointConvergenceReason _fixed_point_status
Status of fixed point solve.
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.
const ConvergenceName & getMultiAppFixedPointConvergenceName() const
Gets the MultiApp fixed point convergence object name.
const ExecFlagType EXEC_TIMESTEP_BEGIN
SolveObject * _inner_solve
SolveObject wrapped by this solve object.
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 bool updateMeshXFEM()
Update the mesh due to changing XFEM cuts.
FP converged by absolute residual tolerance.
Executioners are objects that do the actual work of solving your problem.
virtual void checkIterationType(IterationType) const
Perform checks related to the iteration type.
Real _secondary_relaxation_factor
Relaxation factor outside of fixed point iteration (used as a subapp)
MooseApp & _app
The MOOSE application this is associated with.
FP converged by relative residual tolerance.
void backupMultiApps(ExecFlagType type)
Backup the MultiApps associated with the ExecFlagType.
unsigned int _fixed_point_it
static InputParameters validParams()
virtual bool useFixedPointAlgorithmUpdateInsteadOfPicard(const bool primary)=0
Use the fixed point algorithm transform instead of simply using the Picard update This routine can be...
Real sub_relaxation_factor
relaxation factor to be used for a MultiApp's subapps.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void postSolve()
Override this for actions that should take place after execution, called by FixedPointSolve.
const bool _auto_advance_set_by_user
Whether the user has set the auto_advance parameter for handling advancement of sub-applications in m...
const ExecFlagType EXEC_MULTIAPP_FIXED_POINT_BEGIN
void restoreMultiApps(ExecFlagType type, bool force=false)
Restore the MultiApps associated with the ExecFlagType.
std::vector< std::string > _secondary_transformed_variables
Variables to be relaxed outside of fixed point iteration (used as a subapp)
FP diverged by hitting max iterations.
bool autoAdvance() const
Whether sub-applications are automatically advanced no matter what happens during their solves...
const ExecFlagType EXEC_MULTIAPP_FIXED_POINT_ITERATION_END
virtual MooseMesh & mesh() override
bool _xfem_repeat_step
Whether step should be repeated due to xfem modifying the mesh.
void mooseError(Args &&... args) const
Emits an error prefixed with object name and type.
const InputParameters & parameters() const
Get the parameters of the object.
Real _old_entering_time
Time of previous fixed point solve as a subapp.
Main app nonlinear solve converged, FP unassessed.
const ConsoleStream _console
An instance of helper class to write streams to the Console objects.
bool execMultiApps(ExecFlagType type, bool auto_advance=true)
Execute the MultiApps associated with the ExecFlagType.
const unsigned int _max_xfem_update
Maximum number of xfem updates per step.
virtual bool isTransient() const override
const ExecFlagType EXEC_MULTIAPP_FIXED_POINT_CONVERGENCE
void printFixedPointConvergenceReason()
Print information about the fixed point convergence.
FP converged by hitting max iterations and accepting.
virtual void initialSetup() override
Method that should be executed once, before any solve calls.
const bool _has_fixed_point_its
Whether or not we activate fixed point iteration.
virtual bool solve()=0
Solve routine provided by this object.
virtual Real & dt() const
virtual bool solveStep(const std::set< dof_id_type > &transformed_dofs)
Perform one fixed point iteration or a full solve.
virtual void preExecute()
Method that gets called in each iteration before the solve.
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...
void ErrorVector unsigned int
unsigned int _main_fixed_point_it
fixed point iteration counter for the main app
FP converged by absolute or relative PP tolerance.
virtual void outputStep(ExecFlagType type)
Output the current step.
const bool _update_xfem_at_timestep_begin
Controls whether xfem should update the mesh at the beginning of the time step.
void execTransfers(ExecFlagType type)
Execute the Transfers associated with the ExecFlagType.
Main app nonlinear solve diverged.
std::vector< std::string > _transformed_vars
The variables (transferred or not) that are going to be relaxed.