Go to the documentation of this file.
118 bool compute_full_tangent_operator,
138 std::vector<std::vector<Real>>
_Eij;
144 std::vector<std::vector<Real>>
_Cij;
190 MaterialProperty<std::vector<Real>> &
_intnl;
196 MaterialProperty<std::vector<Real>> &
_yf;
217 std::vector<Real>
df;
219 std::vector<Real>
dg;
220 std::vector<std::vector<Real>>
d2g;
230 d2g(num_var, std::vector<Real>(num_var, 0.0)),
231 d2g_di(num_var, std::vector<Real>(num_intnl, 0.0))
246 Real
yieldF(
const std::vector<Real> & stress_params,
const std::vector<Real> & intnl)
const;
253 Real
yieldF(
const std::vector<Real> & yfs)
const;
286 const std::vector<Real> & intnl)
const;
328 std::vector<Real> & stress_params,
330 const std::vector<Real> & trial_stress_params,
331 yieldAndFlow & smoothed_q,
332 const std::vector<Real> & intnl_ok,
333 std::vector<Real> & intnl,
334 std::vector<Real> & rhs,
335 Real & linesearch_needed)
const;
350 int nrStep(
const yieldAndFlow & smoothed_q,
351 const std::vector<Real> & trial_stress_params,
352 const std::vector<Real> & stress_params,
353 const std::vector<Real> & intnl,
355 std::vector<Real> & rhs)
const;
380 void calculateRHS(
const std::vector<Real> & trial_stress_params,
381 const std::vector<Real> & stress_params,
383 const yieldAndFlow & smoothed_q,
384 std::vector<Real> & rhs)
const;
399 void dnRHSdVar(
const yieldAndFlow & smoothed_q,
400 const std::vector<std::vector<Real>> & dintnl,
401 const std::vector<Real> & stress_params,
403 std::vector<double> & jac)
const;
409 virtual void errorHandler(
const std::string & message)
const;
420 const std::vector<Real> & intnl,
421 std::vector<Real> & yf)
const = 0;
435 virtual void computeAllQV(
const std::vector<Real> & stress_params,
436 const std::vector<Real> & intnl,
437 std::vector<yieldAndFlow> & all_q)
const = 0;
450 virtual void preReturnMapV(
const std::vector<Real> & trial_stress_params,
452 const std::vector<Real> & intnl_old,
453 const std::vector<Real> & yf,
471 virtual void initializeVarsV(
const std::vector<Real> & trial_stress_params,
472 const std::vector<Real> & intnl_old,
473 std::vector<Real> & stress_params,
475 std::vector<Real> & intnl)
const;
487 virtual void setIntnlValuesV(
const std::vector<Real> & trial_stress_params,
488 const std::vector<Real> & current_stress_params,
489 const std::vector<Real> & intnl_old,
490 std::vector<Real> & intnl)
const = 0;
503 const std::vector<Real> & current_stress_params,
504 const std::vector<Real> & intnl,
505 std::vector<std::vector<Real>> & dintnl)
const = 0;
514 std::vector<Real> & stress_params)
const = 0;
551 const std::vector<Real> & stress_params,
553 const std::vector<Real> & intnl,
554 const yieldAndFlow & smoothed_q,
576 const yieldAndFlow & smoothed_q,
603 const std::vector<Real> & trial_stress_params,
605 const std::vector<Real> & stress_params,
607 const yieldAndFlow & smoothed_q,
609 bool compute_full_tangent_operator,
610 const std::vector<std::vector<Real>> & dvar_dtrial,
625 virtual std::vector<RankFourTensor>
653 const std::vector<Real> & trial_stress_params,
654 const std::vector<Real> & stress_params,
656 const std::vector<Real> & intnl,
657 const yieldAndFlow & smoothed_q,
659 bool compute_full_tangent_operator,
660 std::vector<std::vector<Real>> & dvar_dtrial)
const;
670 const std::vector<Real> & stress_params,
virtual void computeAllQV(const std::vector< Real > &stress_params, const std::vector< Real > &intnl, std::vector< yieldAndFlow > &all_q) const =0
Completely fills all_q with correct values.
const unsigned _max_nr_its
Maximum number of Newton-Raphson iterations allowed in the return-map process.
const bool _warn_about_precision_loss
Output a warning message if precision loss is encountered during the return-map process.
RankTwoTensor _stress_trial
"Trial" value of stress that is set at the beginning of the return-map process.
Real ismoother(Real f_diff) const
Smooths yield functions.
MultiParameterPlasticityStressUpdate(const InputParameters ¶meters, unsigned num_sp, unsigned num_yf, unsigned num_intnl)
std::vector< std::vector< Real > > d2g
std::vector< Real > _current_intnl
The current values of the internal params during the Newton-Raphson.
const bool _perform_finite_strain_rotations
Whether to perform finite-strain rotations.
Struct designed to hold info about a single yield function and its derivatives, as well as the flow d...
const Real _smoothing_tol
Smoothing tolerance: edges of the yield surface get smoothed by this amount.
virtual void finalizeReturnProcess(const RankTwoTensor &rotation_increment)
Derived classes may use this to perform calculations after the return-map process has completed succe...
enum MultiParameterPlasticityStressUpdate::SmootherFunctionType _smoother_function_type
std::vector< std::vector< Real > > _Cij
_Cij[i, j] * _Eij[j, k] = 1 iff j == k
int lineSearch(Real &res2, std::vector< Real > &stress_params, Real &gaE, const std::vector< Real > &trial_stress_params, yieldAndFlow &smoothed_q, const std::vector< Real > &intnl_ok, std::vector< Real > &intnl, std::vector< Real > &rhs, Real &linesearch_needed) const
Performs a line-search to find stress_params and gaE Upon entry:
MaterialProperty< Real > & _iter
Number of Newton-Raphson iterations used in the return-map.
const Real _f_tol2
Square of the yield-function tolerance.
const Real _min_step_size
In order to help the Newton-Raphson procedure, the applied strain increment may be applied in sub-inc...
virtual void setEffectiveElasticity(const RankFourTensor &Eijkl)=0
Sets _Eij and _En and _Cij.
virtual std::vector< RankFourTensor > d2stress_param_dstress(const RankTwoTensor &stress) const =0
d2(stress_param[i])/d(stress)/d(stress) at given stress
virtual void initQpStatefulProperties() override
std::vector< Real > _ok_intnl
The state (ok_sp, ok_intnl) is known to be admissible.
virtual void updateState(RankTwoTensor &strain_increment, RankTwoTensor &inelastic_strain_increment, const RankTwoTensor &rotation_increment, RankTwoTensor &stress_new, const RankTwoTensor &stress_old, const RankFourTensor &elasticity_tensor, const RankTwoTensor &elastic_strain_old, bool compute_full_tangent_operator, RankFourTensor &tangent_operator) override
Given a strain increment that results in a trial stress, perform some procedure (such as an iterative...
MaterialProperty< Real > & _linesearch_needed
Whether a line-search was needed in the latest Newton-Raphson process (1 if true, 0 otherwise)
virtual std::vector< RankTwoTensor > dstress_param_dstress(const RankTwoTensor &stress) const =0
d(stress_param[i])/d(stress) at given stress
void dVardTrial(bool elastic_only, const std::vector< Real > &trial_stress_params, const std::vector< Real > &stress_params, Real gaE, const std::vector< Real > &intnl, const yieldAndFlow &smoothed_q, Real step_size, bool compute_full_tangent_operator, std::vector< std::vector< Real >> &dvar_dtrial) const
Calculates derivatives of the stress_params and gaE with repect to the trial values of the stress_par...
virtual void initializeVarsV(const std::vector< Real > &trial_stress_params, const std::vector< Real > &intnl_old, std::vector< Real > &stress_params, Real &gaE, std::vector< Real > &intnl) const
Sets (stress_params, intnl) at "good guesses" of the solution to the Return-Map algorithm.
bool precisionLoss(const std::vector< Real > &solution, const std::vector< Real > &stress_params, Real gaE) const
Check whether precision loss has occurred.
static InputParameters validParams()
const MaterialProperty< RankTwoTensor > & _plastic_strain_old
Old value of plastic strain.
std::vector< std::vector< Real > > _Eij
E[i, j] in the system of equations to be solved.
Real yieldF(const std::vector< Real > &stress_params, const std::vector< Real > &intnl) const
Computes the smoothed yield function.
std::vector< Real > _del_stress_params
_del_stress_params = trial_stress_params - ok_sp This is fixed at the beginning of the return-map pro...
const MaterialProperty< std::vector< Real > > & _intnl_old
old values of internal parameters
virtual void computeStressParams(const RankTwoTensor &stress, std::vector< Real > &stress_params) const =0
Computes stress_params, given stress.
virtual void initializeReturnProcess()
Derived classes may use this to perform calculations before any return-map process is performed,...
Real smoother(Real f_diff) const
Derivative of ismoother.
std::vector< Real > _rhs
0 = rhs[0] = S[0] - S[0]^trial + ga * E[0, i] * dg/dS[i] 0 = rhs[1] = S[1] - S[1]^trial + ga * E[1,...
const unsigned _num_sp
Number of stress parameters.
virtual void yieldFunctionValuesV(const std::vector< Real > &stress_params, const std::vector< Real > &intnl, std::vector< Real > &yf) const =0
Computes the values of the yield functions, given stress_params and intnl parameters.
MaterialProperty< std::vector< Real > > & _yf
yield functions
const unsigned _num_yf
Number of yield functions.
void dnRHSdVar(const yieldAndFlow &smoothed_q, const std::vector< std::vector< Real >> &dintnl, const std::vector< Real > &stress_params, Real gaE, std::vector< double > &jac) const
Derivative of -RHS with respect to the stress_params and gaE, placed into an array ready for solving ...
MaterialProperty< RankTwoTensor > & _plastic_strain
plastic strain
const std::vector< Real > _definitely_ok_sp
An admissible value of stress_params at the initial time.
virtual void propagateQpStatefulProperties() override
If updateState is not called during a timestep, this will be.
InputParameters validParams< MultiParameterPlasticityStressUpdate >()
SmootherFunctionType
The type of smoother function.
std::vector< Real > _trial_sp
"Trial" value of stress_params that initializes the return-map process This is derived from stress = ...
yieldAndFlow(unsigned num_var, unsigned num_intnl)
const unsigned _num_intnl
Number of internal parameters.
bool _step_one
handles case of initial_stress that is inadmissible being supplied
Real dsmoother(Real f_diff) const
Derivative of smoother.
Real calculateRes2(const std::vector< Real > &rhs) const
Calculates the residual-squared for the Newton-Raphson + line-search.
virtual void setIntnlDerivativesV(const std::vector< Real > &trial_stress_params, const std::vector< Real > ¤t_stress_params, const std::vector< Real > &intnl, std::vector< std::vector< Real >> &dintnl) const =0
Sets the derivatives of internal parameters, based on the trial values of stress_params,...
virtual void errorHandler(const std::string &message) const
Performs any necessary cleaning-up, then throw MooseException(message)
std::vector< Real > _current_sp
The current values of the stress params during the Newton-Raphson.
Real _En
normalising factor
virtual void consistentTangentOperatorV(const RankTwoTensor &stress_trial, const std::vector< Real > &trial_stress_params, const RankTwoTensor &stress, const std::vector< Real > &stress_params, Real gaE, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, bool compute_full_tangent_operator, const std::vector< std::vector< Real >> &dvar_dtrial, RankFourTensor &cto)
Calculates the consistent tangent operator.
MaterialProperty< Real > & _max_iter_used
Maximum number of Newton-Raphson iterations used in the return-map during the course of the entire si...
StressUpdateBase is a material that is not called by MOOSE because of the compute=false flag set in t...
virtual void setIntnlValuesV(const std::vector< Real > &trial_stress_params, const std::vector< Real > ¤t_stress_params, const std::vector< Real > &intnl_old, std::vector< Real > &intnl) const =0
Sets the internal parameters based on the trial values of stress_params, their current values,...
std::vector< std::vector< Real > > _dvar_dtrial
d({stress_param[i], gaE})/d(trial_stress_param[j])
yieldAndFlow smoothAllQuantities(const std::vector< Real > &stress_params, const std::vector< Real > &intnl) const
Calculates all yield functions and derivatives, and then performs the smoothing scheme.
void calculateRHS(const std::vector< Real > &trial_stress_params, const std::vector< Real > &stress_params, Real gaE, const yieldAndFlow &smoothed_q, std::vector< Real > &rhs) const
Calculates the RHS in the following 0 = rhs[0] = S[0] - S[0]^trial + ga * E[0, j] * dg/dS[j] 0 = rhs[...
TangentCalculationMethod
TangentCalculationMethod is an enum that determines the calculation method for the tangent operator.
std::vector< std::vector< Real > > d2g_di
std::vector< Real > _ok_sp
The state (ok_sp, ok_intnl) is known to be admissible, so ok_sp are stress_params that are "OK".
virtual void setStressAfterReturnV(const RankTwoTensor &stress_trial, const std::vector< Real > &stress_params, Real gaE, const std::vector< Real > &intnl, const yieldAndFlow &smoothed_q, const RankFourTensor &Eijkl, RankTwoTensor &stress) const =0
Sets stress from the admissible parameters.
virtual void preReturnMapV(const std::vector< Real > &trial_stress_params, const RankTwoTensor &stress_trial, const std::vector< Real > &intnl_old, const std::vector< Real > &yf, const RankFourTensor &Eijkl)
Derived classes may employ this function to record stuff or do other computations prior to the return...
MultiParameterPlasticityStressUpdate performs the return-map algorithm and associated stress updates ...
std::vector< Real > df_di
const Real _smoothing_tol2
Square of the smoothing tolerance.
int nrStep(const yieldAndFlow &smoothed_q, const std::vector< Real > &trial_stress_params, const std::vector< Real > &stress_params, const std::vector< Real > &intnl, Real gaE, std::vector< Real > &rhs) const
Performs a Newton-Raphson step to attempt to zero rhs Upon return, rhs will contain the solution.
constexpr static unsigned _tensor_dimensionality
Internal dimensionality of tensors (currently this is 3 throughout tensor_mechanics)
MaterialProperty< std::vector< Real > > & _intnl
internal parameters
const MaterialProperty< Real > & _max_iter_used_old
Old value of maximum number of Newton-Raphson iterations used in the return-map during the course of ...
virtual TangentCalculationMethod getTangentCalculationMethod() override
virtual void setInelasticStrainIncrementAfterReturn(const RankTwoTensor &stress_trial, Real gaE, const yieldAndFlow &smoothed_q, const RankFourTensor &elasticity_tensor, const RankTwoTensor &returned_stress, RankTwoTensor &inelastic_strain_increment) const
Sets inelastic strain increment from the returned configuration This is called after the return-map p...
bool operator<(const yieldAndFlow &fd) const
const Real _f_tol
The yield-function tolerance.