www.mooseframework.org
ADSingleVariableReturnMappingSolution.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 "MooseTypes.h"
13 #include "InputParameters.h"
14 
15 #define usingSingleVariableReturnMappingSolutionMembers \
16  using ADSingleVariableReturnMappingSolution<compute_stage>::returnMappingSolve; \
17  using ADSingleVariableReturnMappingSolution<compute_stage>::minimumPermissibleValue; \
18  using ADSingleVariableReturnMappingSolution<compute_stage>::maximumPermissibleValue; \
19  using ADSingleVariableReturnMappingSolution<compute_stage>::initialGuess; \
20  using ADSingleVariableReturnMappingSolution<compute_stage>::computeResidual; \
21  using ADSingleVariableReturnMappingSolution<compute_stage>::computeDerivative; \
22  using ADSingleVariableReturnMappingSolution<compute_stage>::computeReferenceResidual; \
23  using ADSingleVariableReturnMappingSolution<compute_stage>::iterationFinalize; \
24  using ADSingleVariableReturnMappingSolution<compute_stage>::outputIterationSummary; \
25  using ADSingleVariableReturnMappingSolution<compute_stage>::_check_range; \
26  using ADSingleVariableReturnMappingSolution<compute_stage>::_line_search; \
27  using ADSingleVariableReturnMappingSolution<compute_stage>::_bracket_solution; \
28  using ADSingleVariableReturnMappingSolution<compute_stage>::converged
29 
30 // Forward declarations
31 template <ComputeStage>
33 class ConsoleStream;
34 
36 
41 template <ComputeStage compute_stage>
43 {
44 public:
45  static InputParameters validParams();
46 
47  ADSingleVariableReturnMappingSolution(const InputParameters & parameters);
49 
50 protected:
57  void returnMappingSolve(const ADReal & effective_trial_stress,
58  ADReal & scalar,
59  const ConsoleStream & console);
60 
66  virtual ADReal minimumPermissibleValue(const ADReal & effective_trial_stress) const;
67 
73  virtual ADReal maximumPermissibleValue(const ADReal & effective_trial_stress) const;
74 
82  virtual ADReal initialGuess(const ADReal & /*effective_trial_stress*/) { return 0.0; }
83 
90  virtual ADReal computeResidual(const ADReal & effective_trial_stress, const ADReal & scalar) = 0;
91 
98  virtual ADReal computeDerivative(const ADReal & effective_trial_stress,
99  const ADReal & scalar) = 0;
100 
107  virtual Real computeReferenceResidual(const ADReal & effective_trial_stress,
108  const ADReal & scalar) = 0;
109 
114  virtual void iterationFinalize(ADReal /*scalar*/) {}
115 
121  virtual void outputIterationSummary(std::stringstream * iter_output, const unsigned int total_it);
122 
125 
128 
132 
142  virtual void outputIterationStep(std::stringstream * iter_output,
143  const ADReal & effective_trial_stress,
144  const ADReal & scalar,
145  const Real reference_residual);
146 
153  bool converged(const ADReal & residual, const Real reference);
154 
155 private:
157  {
158  NEVER,
159  ON_ERROR,
160  ALWAYS
162 
163  enum class SolveState
164  {
165  SUCCESS,
166  NAN_INF,
168  };
169 
172  const unsigned int _max_its;
173 
176 
179 
182 
185 
187  const std::size_t _num_resids;
188 
190  std::vector<Real> _residual_history;
191 
193  unsigned int _iteration;
194 
197  ADReal _residual;
199 
201  const std::string _svrms_name;
202 
210  SolveState internalSolve(const ADReal effective_trial_stress,
211  ADReal & scalar,
212  std::stringstream * iter_output = nullptr);
213 
223  bool convergedAcceptable(const unsigned int it, const Real reference);
224 
235  void checkPermissibleRange(ADReal & scalar,
236  ADReal & scalar_increment,
237  const ADReal & scalar_old,
238  const ADReal min_permissible_scalar,
239  const ADReal max_permissible_scalar,
240  std::stringstream * iter_output);
241 
251  void updateBounds(const ADReal & scalar,
252  const ADReal & residual,
253  const Real init_resid_sign,
254  ADReal & scalar_upper_bound,
255  ADReal & scalar_lower_bound,
256  std::stringstream * iter_output);
257 };
ADSingleVariableReturnMappingSolution::initialGuess
virtual ADReal initialGuess(const ADReal &)
Compute an initial guess for the value of the scalar.
Definition: ADSingleVariableReturnMappingSolution.h:82
ADSingleVariableReturnMappingSolution::~ADSingleVariableReturnMappingSolution
virtual ~ADSingleVariableReturnMappingSolution()
Definition: ADSingleVariableReturnMappingSolution.h:48
ADSingleVariableReturnMappingSolution::InternalSolveOutput::NEVER
ADSingleVariableReturnMappingSolution::_internal_solve_full_iteration_history
const bool _internal_solve_full_iteration_history
Whether to output iteration information all the time (regardless of whether iterations converge)
Definition: ADSingleVariableReturnMappingSolution.h:175
ADSingleVariableReturnMappingSolution::returnMappingSolve
void returnMappingSolve(const ADReal &effective_trial_stress, ADReal &scalar, const ConsoleStream &console)
Perform the return mapping iterations.
Definition: ADSingleVariableReturnMappingSolution.C:101
ADSingleVariableReturnMappingSolution::SolveState::EXCEEDED_ITERATIONS
ADSingleVariableReturnMappingSolution::SolveState::NAN_INF
ADSingleVariableReturnMappingSolution::_bracket_solution
bool _bracket_solution
Whether to save upper and lower bounds of root for scalar, and set solution to the midpoint between t...
Definition: ADSingleVariableReturnMappingSolution.h:131
ADSingleVariableReturnMappingSolution::outputIterationStep
virtual void outputIterationStep(std::stringstream *iter_output, const ADReal &effective_trial_stress, const ADReal &scalar, const Real reference_residual)
Output information for a single iteration step to build the convergence history of the model.
Definition: ADSingleVariableReturnMappingSolution.C:393
ADSingleVariableReturnMappingSolution::_iteration
unsigned int _iteration
iteration number
Definition: ADSingleVariableReturnMappingSolution.h:193
ADSingleVariableReturnMappingSolution::_initial_residual
ADReal _initial_residual
Residual values, kept as members to retain solver state for summary outputting.
Definition: ADSingleVariableReturnMappingSolution.h:196
ADSingleVariableReturnMappingSolution::convergedAcceptable
bool convergedAcceptable(const unsigned int it, const Real reference)
Check to see whether the residual is within acceptable convergence limits.
Definition: ADSingleVariableReturnMappingSolution.C:311
ADSingleVariableReturnMappingSolution::_residual_history
std::vector< Real > _residual_history
History of residuals used to check whether progress is still being made on decreasing the residual.
Definition: ADSingleVariableReturnMappingSolution.h:190
ADSingleVariableReturnMappingSolution::maximumPermissibleValue
virtual ADReal maximumPermissibleValue(const ADReal &effective_trial_stress) const
Compute the maximum permissible value of the scalar.
Definition: ADSingleVariableReturnMappingSolution.C:93
ADSingleVariableReturnMappingSolution::validParams
static InputParameters validParams()
Definition: ADSingleVariableReturnMappingSolution.C:32
ADSingleVariableReturnMappingSolution::_relative_tolerance
Real _relative_tolerance
Relative convergence tolerance.
Definition: ADSingleVariableReturnMappingSolution.h:178
ADSingleVariableReturnMappingSolution::_internal_solve_output_on
enum ADSingleVariableReturnMappingSolution::InternalSolveOutput _internal_solve_output_on
ADSingleVariableReturnMappingSolution::_residual
ADReal _residual
Definition: ADSingleVariableReturnMappingSolution.h:197
ADSingleVariableReturnMappingSolution::_acceptable_multiplier
Real _acceptable_multiplier
Multiplier applied to relative and absolute tolerances for acceptable convergence.
Definition: ADSingleVariableReturnMappingSolution.h:184
ADSingleVariableReturnMappingSolution::converged
bool converged(const ADReal &residual, const Real reference)
Check to see whether the residual is within the convergence limits.
Definition: ADSingleVariableReturnMappingSolution.C:301
declareADValidParams
declareADValidParams(ADSingleVariableReturnMappingSolution)
ADSingleVariableReturnMappingSolution::updateBounds
void updateBounds(const ADReal &scalar, const ADReal &residual, const Real init_resid_sign, ADReal &scalar_upper_bound, ADReal &scalar_lower_bound, std::stringstream *iter_output)
Update the upper and lower bounds of the root for the effective inelastic strain.
Definition: ADSingleVariableReturnMappingSolution.C:365
ADSingleVariableReturnMappingSolution::InternalSolveOutput::ALWAYS
ADSingleVariableReturnMappingSolution::_max_its
const unsigned int _max_its
Maximum number of return mapping iterations.
Definition: ADSingleVariableReturnMappingSolution.h:172
ADSingleVariableReturnMappingSolution::_svrms_name
const std::string _svrms_name
MOOSE input name of the object performing the solve.
Definition: ADSingleVariableReturnMappingSolution.h:201
ADSingleVariableReturnMappingSolution::checkPermissibleRange
void checkPermissibleRange(ADReal &scalar, ADReal &scalar_increment, const ADReal &scalar_old, const ADReal min_permissible_scalar, const ADReal 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.
Definition: ADSingleVariableReturnMappingSolution.C:334
ADSingleVariableReturnMappingSolution::iterationFinalize
virtual void iterationFinalize(ADReal)
Finalize internal state variables for a model for a given iteration.
Definition: ADSingleVariableReturnMappingSolution.h:114
ADSingleVariableReturnMappingSolution::minimumPermissibleValue
virtual ADReal minimumPermissibleValue(const ADReal &effective_trial_stress) const
Compute the minimum permissible value of the scalar.
Definition: ADSingleVariableReturnMappingSolution.C:85
ADSingleVariableReturnMappingSolution::_check_range
bool _check_range
Whether to check to see whether iterative solution is within admissible range, and set within that ra...
Definition: ADSingleVariableReturnMappingSolution.h:124
ADSingleVariableReturnMappingSolution::ADSingleVariableReturnMappingSolution
ADSingleVariableReturnMappingSolution(const InputParameters &parameters)
Definition: ADSingleVariableReturnMappingSolution.C:61
ADSingleVariableReturnMappingSolution::_num_resids
const std::size_t _num_resids
Number of residuals to be stored in history.
Definition: ADSingleVariableReturnMappingSolution.h:187
ADSingleVariableReturnMappingSolution::SolveState::SUCCESS
ADSingleVariableReturnMappingSolution::InternalSolveOutput
InternalSolveOutput
Definition: ADSingleVariableReturnMappingSolution.h:156
ADSingleVariableReturnMappingSolution::_absolute_tolerance
Real _absolute_tolerance
Absolute convergence tolerance.
Definition: ADSingleVariableReturnMappingSolution.h:181
ADSingleVariableReturnMappingSolution::_line_search
bool _line_search
Whether to use line searches to improve convergence.
Definition: ADSingleVariableReturnMappingSolution.h:127
ADSingleVariableReturnMappingSolution::SolveState
SolveState
Definition: ADSingleVariableReturnMappingSolution.h:163
ADSingleVariableReturnMappingSolution::computeResidual
virtual ADReal computeResidual(const ADReal &effective_trial_stress, const ADReal &scalar)=0
Compute the residual for a predicted value of the scalar.
ADSingleVariableReturnMappingSolution::outputIterationSummary
virtual void outputIterationSummary(std::stringstream *iter_output, const unsigned int total_it)
Output summary information for the convergence history of the model.
Definition: ADSingleVariableReturnMappingSolution.C:416
ADSingleVariableReturnMappingSolution::internalSolve
SolveState internalSolve(const ADReal effective_trial_stress, ADReal &scalar, std::stringstream *iter_output=nullptr)
Method called from within this class to perform the actual return mappping iterations.
Definition: ADSingleVariableReturnMappingSolution.C:162
ADSingleVariableReturnMappingSolution
Base class that provides capability for Newton return mapping iterations on a single variable.
Definition: ADSingleVariableReturnMappingSolution.h:32
ADSingleVariableReturnMappingSolution::computeDerivative
virtual ADReal computeDerivative(const ADReal &effective_trial_stress, const ADReal &scalar)=0
Compute the derivative of the residual as a function of the scalar variable.
ADSingleVariableReturnMappingSolution::computeReferenceResidual
virtual Real computeReferenceResidual(const ADReal &effective_trial_stress, const ADReal &scalar)=0
Compute a reference quantity to be used for checking relative convergence.
ADSingleVariableReturnMappingSolution::InternalSolveOutput::ON_ERROR