https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
15class ConsoleStream;
16
21template <bool is_ad>
23{
24public:
26
29
30protected:
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
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
142private:
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
GeneralizedReturnMappingSolutionTempl< false > GeneralizedReturnMappingSolution
GeneralizedReturnMappingSolutionTempl< true > ADGeneralizedReturnMappingSolution
Moose::GenericType< DenseVector< Real >, is_ad > GenericDenseVector
Moose::GenericType< Real, is_ad > GenericReal
Base class that provides capability for Newton generalized (anisotropic) return mapping iterations on...
Real _relative_tolerance
Relative 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.
enum GeneralizedReturnMappingSolutionTempl::InternalSolveOutput _internal_solve_output_on
bool convergedAcceptable(const unsigned int it, const Real &reference)
Check to see whether the residual is within acceptable convergence limits.
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.
std::vector< Real > _residual_history
History of residuals used to check whether progress is still being made on decreasing the residual.
bool _line_search
Whether to use line searches to improve convergence.
bool converged(const GenericReal< is_ad > &residual, const Real &reference)
Check to see whether the residual is within the convergence limits.
virtual GenericReal< is_ad > initialGuess(const GenericDenseVector< is_ad > &)
Compute an initial guess for the value of the scalar.
GenericReal< is_ad > _initial_residual
Residual values, kept as members to retain solver state for summary outputting.
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.
bool _bracket_solution
Whether to save upper and lower bounds of root for scalar, and set solution to the midpoint between t...
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 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.
virtual GenericReal< is_ad > maximumPermissibleValue(const GenericDenseVector< is_ad > &effective_trial_stress) const
Compute the maximum permissible value of the scalar.
virtual void outputIterationSummary(std::stringstream *iter_output, const unsigned int total_it)
Output summary information for the convergence history of the model.
bool _check_range
Whether to check to see whether iterative solution is within admissible range, and set within that ra...
virtual GenericReal< is_ad > minimumPermissibleValue(const GenericDenseVector< is_ad > &effective_trial_stress) const
Compute the minimum permissible value of the scalar.
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.
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.
const bool _internal_solve_full_iteration_history
Whether to output iteration information all the time (regardless of whether iterations converge)
const std::string _svrms_name
MOOSE input name of the object performing the solve.
const std::size_t _num_resids
Number of residuals to be stored in history.
Real _acceptable_multiplier
Multiplier applied to relative and absolute tolerances for acceptable convergence.
const unsigned int _max_its
Maximum number of return mapping iterations.
Real _absolute_tolerance
Absolute convergence tolerance.
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.
virtual void iterationFinalize(const GenericReal< is_ad > &)
Finalize internal state variables for a model for a given iteration.