www.mooseframework.org
SingleVariableReturnMappingSolution.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 "InputParameters.h"
13 #include "ConsoleStream.h"
14 
16 
17 template <>
19 
25 {
26 public:
27  static InputParameters validParams();
28 
29  SingleVariableReturnMappingSolution(const InputParameters & parameters);
31 
32 protected:
39  void returnMappingSolve(const Real effective_trial_stress,
40  Real & scalar,
41  const ConsoleStream & console);
42 
48  virtual Real minimumPermissibleValue(const Real effective_trial_stress) const;
49 
55  virtual Real maximumPermissibleValue(const Real effective_trial_stress) const;
56 
64  virtual Real initialGuess(const Real /*effective_trial_stress*/) { return 0.0; }
65 
72  virtual Real computeResidual(const Real effective_trial_stress, const Real scalar) = 0;
73 
80  virtual Real computeDerivative(const Real effective_trial_stress, const Real scalar) = 0;
81 
88  virtual Real computeReferenceResidual(const Real effective_trial_stress, const Real scalar) = 0;
89 
94  virtual void iterationFinalize(Real /*scalar*/) {}
95 
105  virtual void outputIterationStep(std::stringstream * iter_output,
106  const unsigned int it,
107  const Real effective_trial_stress,
108  const Real scalar,
109  const Real residual,
110  const Real reference_residual);
111 
117  virtual void outputIterationSummary(std::stringstream * iter_output, const unsigned int total_it);
118 
121 
124 
128 
129 private:
131  {
132  NEVER,
133  ON_ERROR,
134  ALWAYS
136 
137  enum class SolveState
138  {
139  SUCCESS,
140  NAN_INF,
142  };
143 
146  const unsigned int _max_its;
147 
150 
153 
156 
159 
161  const std::size_t _num_resids;
162 
164  std::vector<Real> _residual_history;
165 
167  unsigned int _iteration;
168 
171  Real _residual;
173 
175  const std::string _svrms_name;
176 
184  SolveState internalSolve(const Real effective_trial_stress,
185  Real & scalar,
186  std::stringstream * iter_output = nullptr);
187 
194  bool converged(const Real residual, const Real reference);
195 
205  bool convergedAcceptable(const unsigned int it, const Real residual, const Real reference);
206 
217  void checkPermissibleRange(Real & scalar,
218  Real & scalar_increment,
219  const Real scalar_old,
220  const Real min_permissible_scalar,
221  const Real max_permissible_scalar,
222  std::stringstream * iter_output);
223 
233  void updateBounds(const Real scalar,
234  const Real residual,
235  const Real init_resid_sign,
236  Real & scalar_upper_bound,
237  Real & scalar_lower_bound,
238  std::stringstream * iter_output);
239 };
SingleVariableReturnMappingSolution::maximumPermissibleValue
virtual Real maximumPermissibleValue(const Real effective_trial_stress) const
Compute the maximum permissible value of the scalar.
Definition: SingleVariableReturnMappingSolution.C:89
SingleVariableReturnMappingSolution::_check_range
bool _check_range
Whether to check to see whether iterative solution is within admissible range, and set within that ra...
Definition: SingleVariableReturnMappingSolution.h:120
SingleVariableReturnMappingSolution::_initial_residual
Real _initial_residual
Residual values, kept as members to retain solver state for summary outputting.
Definition: SingleVariableReturnMappingSolution.h:170
SingleVariableReturnMappingSolution::_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: SingleVariableReturnMappingSolution.h:127
SingleVariableReturnMappingSolution::validParams
static InputParameters validParams()
Definition: SingleVariableReturnMappingSolution.C:28
SingleVariableReturnMappingSolution::SolveState::NAN_INF
SingleVariableReturnMappingSolution::_acceptable_multiplier
Real _acceptable_multiplier
Multiplier applied to relative and absolute tolerances for acceptable convergence.
Definition: SingleVariableReturnMappingSolution.h:158
SingleVariableReturnMappingSolution::minimumPermissibleValue
virtual Real minimumPermissibleValue(const Real effective_trial_stress) const
Compute the minimum permissible value of the scalar.
Definition: SingleVariableReturnMappingSolution.C:82
SingleVariableReturnMappingSolution::outputIterationSummary
virtual void outputIterationSummary(std::stringstream *iter_output, const unsigned int total_it)
Output summary information for the convergence history of the model.
Definition: SingleVariableReturnMappingSolution.C:347
SingleVariableReturnMappingSolution::SolveState::SUCCESS
SingleVariableReturnMappingSolution::_iteration
unsigned int _iteration
iteration number
Definition: SingleVariableReturnMappingSolution.h:167
SingleVariableReturnMappingSolution::_max_its
const unsigned int _max_its
Maximum number of return mapping iterations.
Definition: SingleVariableReturnMappingSolution.h:146
SingleVariableReturnMappingSolution::updateBounds
void updateBounds(const Real scalar, const Real residual, const Real init_resid_sign, Real &scalar_upper_bound, Real &scalar_lower_bound, std::stringstream *iter_output)
Update the upper and lower bounds of the root for the effective inelastic strain.
Definition: SingleVariableReturnMappingSolution.C:384
SingleVariableReturnMappingSolution::converged
bool converged(const Real residual, const Real reference)
Check to see whether the residual is within the convergence limits.
Definition: SingleVariableReturnMappingSolution.C:298
SingleVariableReturnMappingSolution::initialGuess
virtual Real initialGuess(const Real)
Compute an initial guess for the value of the scalar.
Definition: SingleVariableReturnMappingSolution.h:64
SingleVariableReturnMappingSolution::~SingleVariableReturnMappingSolution
virtual ~SingleVariableReturnMappingSolution()
Definition: SingleVariableReturnMappingSolution.h:30
SingleVariableReturnMappingSolution::InternalSolveOutput::ALWAYS
SingleVariableReturnMappingSolution::internalSolve
SolveState internalSolve(const Real effective_trial_stress, Real &scalar, std::stringstream *iter_output=nullptr)
Method called from within this class to perform the actual return mappping iterations.
Definition: SingleVariableReturnMappingSolution.C:157
SingleVariableReturnMappingSolution::InternalSolveOutput::NEVER
SingleVariableReturnMappingSolution::iterationFinalize
virtual void iterationFinalize(Real)
Finalize internal state variables for a model for a given iteration.
Definition: SingleVariableReturnMappingSolution.h:94
SingleVariableReturnMappingSolution::_internal_solve_output_on
enum SingleVariableReturnMappingSolution::InternalSolveOutput _internal_solve_output_on
SingleVariableReturnMappingSolution::_residual
Real _residual
Definition: SingleVariableReturnMappingSolution.h:171
SingleVariableReturnMappingSolution::outputIterationStep
virtual void outputIterationStep(std::stringstream *iter_output, const unsigned int it, const Real effective_trial_stress, const Real scalar, const Real residual, const Real reference_residual)
Output information for a single iteration step to build the convergence history of the model.
Definition: SingleVariableReturnMappingSolution.C:328
SingleVariableReturnMappingSolution::computeDerivative
virtual Real computeDerivative(const Real effective_trial_stress, const Real scalar)=0
Compute the derivative of the residual as a function of the scalar variable.
SingleVariableReturnMappingSolution::_line_search
bool _line_search
Whether to use line searches to improve convergence.
Definition: SingleVariableReturnMappingSolution.h:123
SingleVariableReturnMappingSolution::InternalSolveOutput::ON_ERROR
SingleVariableReturnMappingSolution::checkPermissibleRange
void checkPermissibleRange(Real &scalar, Real &scalar_increment, const Real scalar_old, const Real min_permissible_scalar, const Real 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: SingleVariableReturnMappingSolution.C:356
SingleVariableReturnMappingSolution::returnMappingSolve
void returnMappingSolve(const Real effective_trial_stress, Real &scalar, const ConsoleStream &console)
Perform the return mapping iterations.
Definition: SingleVariableReturnMappingSolution.C:96
SingleVariableReturnMappingSolution::_svrms_name
const std::string _svrms_name
MOOSE input name of the object performing the solve.
Definition: SingleVariableReturnMappingSolution.h:175
SingleVariableReturnMappingSolution::computeResidual
virtual Real computeResidual(const Real effective_trial_stress, const Real scalar)=0
Compute the residual for a predicted value of the scalar.
SingleVariableReturnMappingSolution::_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: SingleVariableReturnMappingSolution.h:149
SingleVariableReturnMappingSolution::SolveState::EXCEEDED_ITERATIONS
validParams< SingleVariableReturnMappingSolution >
InputParameters validParams< SingleVariableReturnMappingSolution >()
SingleVariableReturnMappingSolution::_residual_history
std::vector< Real > _residual_history
History of residuals used to check whether progress is still being made on decreasing the residual.
Definition: SingleVariableReturnMappingSolution.h:164
SingleVariableReturnMappingSolution
Base class that provides capability for Newton return mapping iterations on a single variable.
Definition: SingleVariableReturnMappingSolution.h:24
SingleVariableReturnMappingSolution::convergedAcceptable
bool convergedAcceptable(const unsigned int it, const Real residual, const Real reference)
Check to see whether the residual is within acceptable convergence limits.
Definition: SingleVariableReturnMappingSolution.C:305
SingleVariableReturnMappingSolution::_num_resids
const std::size_t _num_resids
Number of residuals to be stored in history.
Definition: SingleVariableReturnMappingSolution.h:161
SingleVariableReturnMappingSolution::computeReferenceResidual
virtual Real computeReferenceResidual(const Real effective_trial_stress, const Real scalar)=0
Compute a reference quantity to be used for checking relative convergence.
SingleVariableReturnMappingSolution::SolveState
SolveState
Definition: SingleVariableReturnMappingSolution.h:137
SingleVariableReturnMappingSolution::_relative_tolerance
Real _relative_tolerance
Relative convergence tolerance.
Definition: SingleVariableReturnMappingSolution.h:152
SingleVariableReturnMappingSolution::_absolute_tolerance
Real _absolute_tolerance
Absolute convergence tolerance.
Definition: SingleVariableReturnMappingSolution.h:155
SingleVariableReturnMappingSolution::SingleVariableReturnMappingSolution
SingleVariableReturnMappingSolution(const InputParameters &parameters)
Definition: SingleVariableReturnMappingSolution.C:59
SingleVariableReturnMappingSolution::InternalSolveOutput
InternalSolveOutput
Definition: SingleVariableReturnMappingSolution.h:130