https://mooseframework.inl.gov
FixedPointSolve.h
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 #pragma once
11 
12 #include "SolveObject.h"
13 
14 // System includes
15 #include <string>
16 
18 {
19 public:
21 
22  virtual ~FixedPointSolve() = default;
23 
26 
27  virtual void initialSetup() override;
28 
33  virtual bool solve() override;
34 
37  {
38  UNSOLVED = 0,
40  CONVERGED_ABS = 2,
41  CONVERGED_RELATIVE = 3,
42  CONVERGED_PP = 4,
43  REACH_MAX_ITS = 5,
44  CONVERGED_OBJECT = 6,
45  DIVERGED_MAX_ITS = -1,
46  DIVERGED_NONLINEAR = -2,
48  DIVERGED_OBJECT = -4
49  };
50 
58  unsigned int numFixedPointIts() const { return _fixed_point_it + 1; }
59 
61  unsigned int numPicardIts() const
62  {
63  mooseDeprecated("numPicards() is deprecated. Please use numFixedPointIts() instead.");
64 
65  return _fixed_point_it + 1;
66  }
67 
70 
72  bool XFEMRepeatStep() const { return _xfem_repeat_step; }
73 
76  {
78  }
79 
82 
85 
88 
90  void setMultiAppTransformedVariables(const std::vector<std::string> & vars)
91  {
93  }
94 
96  virtual void setMultiAppTransformedPostprocessors(const std::vector<PostprocessorName> & pps)
97  {
99  }
100 
109  virtual void allocateStorage(const bool primary) = 0;
110 
112  bool autoAdvance() const;
113 
115  void failStep() { _fail_step = true; }
116 
118  virtual void
119  printFixedPointConvergenceHistory(Real initial_norm,
120  const std::vector<Real> & timestep_begin_norms,
121  const std::vector<Real> & timestep_end_norms) const = 0;
122 
123 protected:
130  virtual void saveVariableValues(const bool primary) = 0;
131 
138  virtual void savePostprocessorValues(const bool primary) = 0;
139 
148  virtual bool useFixedPointAlgorithmUpdateInsteadOfPicard(const bool primary) = 0;
149 
161  virtual bool solveStep(const std::set<dof_id_type> & transformed_dofs);
162 
164  virtual void saveAllValues(const bool primary);
165 
174  virtual void transformPostprocessors(const bool primary) = 0;
175 
185  virtual void transformVariables(const std::set<dof_id_type> & transformed_dofs,
186  const bool primary) = 0;
187 
189  bool examineFixedPointConvergence(bool & converged);
190 
193 
196 
200  std::vector<std::string> _transformed_vars; // TODO: make const once relaxed_variables is removed
202  const std::vector<PostprocessorName> _transformed_pps;
204  std::vector<std::vector<PostprocessorValue>> _transformed_pps_values;
205 
209  std::vector<std::string> _secondary_transformed_variables;
211  std::vector<PostprocessorName> _secondary_transformed_pps;
213  std::vector<std::vector<PostprocessorValue>> _secondary_transformed_pps_values;
214 
217  unsigned int _fixed_point_it;
219  unsigned int _main_fixed_point_it;
223 private:
225  const unsigned int _max_xfem_update;
228 
230  unsigned int _xfem_update_count;
233 
236 
239 
243 
247 };
std::vector< std::vector< PostprocessorValue > > _transformed_pps_values
Previous values of the relaxed postprocessors.
std::vector< std::vector< PostprocessorValue > > _secondary_transformed_pps_values
Previous values of the postprocessors relaxed outside of the fixed point iteration (used as a subapp)...
static InputParameters fixedPointDefaultConvergenceParams()
FixedPointSolve(Executioner &ex)
virtual void saveVariableValues(const bool primary)=0
Saves the current values of the variables, and update the old(er) vectors.
void mooseDeprecated(Args &&... args) const
bool examineFixedPointConvergence(bool &converged)
Examine the various convergence metrics.
virtual void allocateStorage(const bool primary)=0
Allocate storage for the fixed point algorithm.
char ** vars
void setFixedPointStatus(MooseFixedPointConvergenceReason status)
Set fixed point status.
void failStep()
Mark the current solve as failed due to external conditions.
virtual bool solve() override
Iteratively solves the FEProblem.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
void setMultiAppRelaxationFactor(Real factor)
Set relaxation factor for the current solve as a SubApp.
void clearFixedPointStatus()
Clear fixed point status.
MooseFixedPointConvergenceReason
Enumeration for fixed point convergence reasons.
unsigned int numPicardIts() const
Deprecated getter for the number of fixed point iterations.
virtual void saveAllValues(const bool primary)
Save both the variable and postprocessor values.
unsigned int numFixedPointIts() const
Get the number of fixed point iterations performed Because this returns the number of fixed point ite...
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.
MooseFixedPointConvergenceReason checkConvergence() const
Check the solver status.
std::vector< PostprocessorName > _secondary_transformed_pps
Postprocessors to be relaxed outside of fixed point iteration (used as a subapp)
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.
virtual ~FixedPointSolve()=default
MPI_Status status
unsigned int _xfem_update_count
Counter for number of xfem updates that have been performed in the current step.
const Real _relax_factor
Relaxation factor for fixed point Iteration.
MooseFixedPointConvergenceReason _fixed_point_status
Status of fixed point solve.
virtual void transformVariables(const std::set< dof_id_type > &transformed_dofs, const bool primary)=0
Use the fixed point algorithm to transform the variables.
Executioners are objects that do the actual work of solving your problem.
Definition: Executioner.h:30
Real _secondary_relaxation_factor
Relaxation factor outside of fixed point iteration (used as a subapp)
FP converged by relative residual tolerance.
virtual void setMultiAppTransformedPostprocessors(const std::vector< PostprocessorName > &pps)
Set relaxation postprocessors for the current solve as a SubApp.
bool XFEMRepeatStep() const
This function checks the _xfem_repeat_step flag set by solve.
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...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const bool _auto_advance_set_by_user
Whether the user has set the auto_advance parameter for handling advancement of sub-applications in m...
std::vector< std::string > _secondary_transformed_variables
Variables to be relaxed outside of fixed point iteration (used as a subapp)
bool autoAdvance() const
Whether sub-applications are automatically advanced no matter what happens during their solves...
bool _xfem_repeat_step
Whether step should be repeated due to xfem modifying the mesh.
void setMultiAppTransformedVariables(const std::vector< std::string > &vars)
Set relaxation variables for the current solve as a SubApp.
Real _old_entering_time
Time of previous fixed point solve as a subapp.
Main app nonlinear solve converged, FP unassessed.
const unsigned int _max_xfem_update
Maximum number of xfem updates per step.
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.
bool hasFixedPointIteration()
Whether or not this has fixed point iterations.
virtual bool solveStep(const std::set< dof_id_type > &transformed_dofs)
Perform one fixed point iteration or a full 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...
unsigned int _main_fixed_point_it
fixed point iteration counter for the main app
FP converged by absolute or relative PP tolerance.
const bool _update_xfem_at_timestep_begin
Controls whether xfem should update the mesh at the beginning of the time step.
virtual void printFixedPointConvergenceHistory(Real initial_norm, const std::vector< Real > &timestep_begin_norms, const std::vector< Real > &timestep_end_norms) const =0
Print the convergence history of the coupling, at every fixed point iteration.
std::vector< std::string > _transformed_vars
The variables (transferred or not) that are going to be relaxed.