https://mooseframework.inl.gov
GeneralizedReturnMappingSolution.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 "InputParameters.h"
13 #include "MooseTypes.h"
14 
15 class ConsoleStream;
16 
21 template <bool is_ad>
23 {
24 public:
26 
29 
30 protected:
37  void returnMappingSolve(const GenericDenseVector<is_ad> & effective_trial_stress,
38  const GenericDenseVector<is_ad> & stress_new,
39  GenericReal<is_ad> & scalar,
40  const ConsoleStream & console);
46  virtual GenericReal<is_ad>
47  minimumPermissibleValue(const GenericDenseVector<is_ad> & effective_trial_stress) const;
48 
54  virtual GenericReal<is_ad>
55  maximumPermissibleValue(const GenericDenseVector<is_ad> & effective_trial_stress) const;
56 
64  virtual GenericReal<is_ad>
65  initialGuess(const GenericDenseVector<is_ad> & /*effective_trial_stress*/)
66  {
67  return 0.0;
68  }
69 
76  virtual GenericReal<is_ad>
77  computeResidual(const GenericDenseVector<is_ad> & effective_trial_stress,
78  const GenericDenseVector<is_ad> & stress_new,
79  const GenericReal<is_ad> & delta_gamma) = 0;
80 
87  virtual Real
88  computeReferenceResidual(const GenericDenseVector<is_ad> & effective_trial_stress,
89  const GenericDenseVector<is_ad> & stress_new,
90  const GenericReal<is_ad> & residual,
91  const GenericReal<is_ad> & scalar_effective_inelastic_strain) = 0;
92 
93  virtual GenericReal<is_ad>
94  computeDerivative(const GenericDenseVector<is_ad> & effective_trial_stress,
95  const GenericDenseVector<is_ad> & stress_new,
96  const GenericReal<is_ad> & scalar) = 0;
101  virtual void iterationFinalize(const GenericReal<is_ad> & /*scalar*/) {}
102 
108  virtual void outputIterationSummary(std::stringstream * iter_output, const unsigned int total_it);
109 
112 
115 
119 
129  virtual void outputIterationStep(std::stringstream * iter_output,
130  const GenericDenseVector<is_ad> & effective_trial_stress,
131  const GenericReal<is_ad> & scalar,
132  const GenericReal<is_ad> reference_residual);
133 
140  bool converged(const GenericReal<is_ad> & residual, const Real & reference);
141 
142 private:
144  {
145  NEVER,
146  ON_ERROR,
147  ALWAYS
149 
150  enum class SolveState
151  {
152  SUCCESS,
153  NAN_INF,
155  };
156 
159  const unsigned int _max_its;
160 
163 
166 
169 
172 
174  const std::size_t _num_resids;
175 
177  std::vector<Real> _residual_history;
178 
180  unsigned int _iteration;
181 
186 
188  const std::string _svrms_name;
189 
197  SolveState internalSolve(const GenericDenseVector<is_ad> & effective_trial_stress,
198  const GenericDenseVector<is_ad> & stress_new,
199  GenericReal<is_ad> & scalar,
200  std::stringstream * iter_output = nullptr);
201 
211  bool convergedAcceptable(const unsigned int it, const Real & reference);
212 
224  GenericReal<is_ad> & scalar_increment,
225  const GenericReal<is_ad> & scalar_old,
226  const GenericReal<is_ad> min_permissible_scalar,
227  const GenericReal<is_ad> max_permissible_scalar,
228  std::stringstream * iter_output);
229 
239  void updateBounds(const GenericReal<is_ad> & scalar,
240  const GenericReal<is_ad> & residual,
241  const Real init_resid_sign,
242  GenericReal<is_ad> & scalar_upper_bound,
243  GenericReal<is_ad> & scalar_lower_bound,
244  std::stringstream * iter_output);
245 };
246 
Moose::GenericType< Real, is_ad > GenericReal
void returnMappingSolve(const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, GenericReal< is_ad > &scalar, const ConsoleStream &console)
Perform the return mapping iterations.
Real _relative_tolerance
Relative convergence tolerance.
std::vector< Real > _residual_history
History of residuals used to check whether progress is still being made on decreasing the residual...
enum GeneralizedReturnMappingSolutionTempl::InternalSolveOutput _internal_solve_output_on
virtual void iterationFinalize(const GenericReal< is_ad > &)
Finalize internal state variables for a model for a given iteration.
virtual GenericReal< is_ad > initialGuess(const GenericDenseVector< is_ad > &)
Compute an initial guess for the value of the scalar.
void updateBounds(const GenericReal< is_ad > &scalar, const GenericReal< is_ad > &residual, const Real init_resid_sign, GenericReal< is_ad > &scalar_upper_bound, GenericReal< is_ad > &scalar_lower_bound, std::stringstream *iter_output)
Update the upper and lower bounds of the root for the effective inelastic strain. ...
Real _absolute_tolerance
Absolute convergence tolerance.
virtual Real computeReferenceResidual(const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, const GenericReal< is_ad > &residual, const GenericReal< is_ad > &scalar_effective_inelastic_strain)=0
Compute a reference quantity to be used for checking relative convergence.
Moose::GenericType< DenseVector< Real >, is_ad > GenericDenseVector
GenericReal< is_ad > _initial_residual
Residual values, kept as members to retain solver state for summary outputting.
bool converged(const GenericReal< is_ad > &residual, const Real &reference)
Check to see whether the residual is within the convergence limits.
const std::string _svrms_name
MOOSE input name of the object performing the solve.
GeneralizedReturnMappingSolutionTempl< false > GeneralizedReturnMappingSolution
virtual void outputIterationStep(std::stringstream *iter_output, const GenericDenseVector< is_ad > &effective_trial_stress, const GenericReal< is_ad > &scalar, const GenericReal< is_ad > reference_residual)
Output information for a single iteration step to build the convergence history of the model...
void checkPermissibleRange(GenericReal< is_ad > &scalar, GenericReal< is_ad > &scalar_increment, const GenericReal< is_ad > &scalar_old, const GenericReal< is_ad > min_permissible_scalar, const GenericReal< is_ad > max_permissible_scalar, std::stringstream *iter_output)
Check to see whether solution is within admissible range, and set it within that range if it is not...
const bool _internal_solve_full_iteration_history
Whether to output iteration information all the time (regardless of whether iterations converge) ...
virtual GenericReal< is_ad > computeResidual(const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, const GenericReal< is_ad > &delta_gamma)=0
Compute the residual for a predicted value of the scalar.
bool _check_range
Whether to check to see whether iterative solution is within admissible range, and set within that ra...
bool _bracket_solution
Whether to save upper and lower bounds of root for scalar, and set solution to the midpoint between t...
const std::size_t _num_resids
Number of residuals to be stored in history.
const unsigned int _max_its
Maximum number of return mapping iterations.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Real _acceptable_multiplier
Multiplier applied to relative and absolute tolerances for acceptable convergence.
Base class that provides capability for Newton generalized (anisotropic) return mapping iterations on...
bool convergedAcceptable(const unsigned int it, const Real &reference)
Check to see whether the residual is within acceptable convergence limits.
virtual GenericReal< is_ad > computeDerivative(const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, const GenericReal< is_ad > &scalar)=0
virtual void outputIterationSummary(std::stringstream *iter_output, const unsigned int total_it)
Output summary information for the convergence history of the model.
SolveState internalSolve(const GenericDenseVector< is_ad > &effective_trial_stress, const GenericDenseVector< is_ad > &stress_new, GenericReal< is_ad > &scalar, std::stringstream *iter_output=nullptr)
Method called from within this class to perform the actual return mappping iterations.
GeneralizedReturnMappingSolutionTempl< true > ADGeneralizedReturnMappingSolution
virtual GenericReal< is_ad > maximumPermissibleValue(const GenericDenseVector< is_ad > &effective_trial_stress) const
Compute the maximum permissible value of the scalar.
virtual GenericReal< is_ad > minimumPermissibleValue(const GenericDenseVector< is_ad > &effective_trial_stress) const
Compute the minimum permissible value of the scalar.
GeneralizedReturnMappingSolutionTempl(const InputParameters &parameters)
bool _line_search
Whether to use line searches to improve convergence.