MultiParameterPlasticityStressUpdate performs the return-map algorithm and associated stress updates for plastic models where the yield function and flow directions depend on multiple parameters (called "stress_params" in the documentation and sp in the code) that are themselves functions of stress. More...
#include <MultiParameterPlasticityStressUpdate.h>
Classes | |
struct | yieldAndFlow |
Struct designed to hold info about a single yield function and its derivatives, as well as the flow directions. More... | |
Public Member Functions | |
MultiParameterPlasticityStressUpdate (const InputParameters ¶meters, unsigned num_sp, unsigned num_yf, unsigned num_intnl) | |
void | setQp (unsigned int qp) |
Sets the value of the global variable _qp for inheriting classes. More... | |
virtual bool | requiresIsotropicTensor ()=0 |
Does the model require the elasticity tensor to be isotropic? More... | |
virtual bool | isIsotropic () |
Is the implmented model isotropic? The safe default is 'false'. More... | |
virtual Real | computeTimeStepLimit () |
void | resetQpProperties () final |
Retained as empty methods to avoid a warning from Material.C in framework. These methods are unused in all inheriting classes and should not be overwritten. More... | |
void | resetProperties () final |
Static Public Member Functions | |
static InputParameters | validParams () |
Protected Member Functions | |
virtual void | initQpStatefulProperties () override |
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 return-mapping process) to produce an admissible stress, an elastic strain increment and an inelastic strain increment. More... | |
virtual void | propagateQpStatefulProperties () override |
If updateState is not called during a timestep, this will be. More... | |
virtual TangentCalculationMethod | getTangentCalculationMethod () override |
Real | yieldF (const std::vector< Real > &stress_params, const std::vector< Real > &intnl) const |
Computes the smoothed yield function. More... | |
Real | yieldF (const std::vector< Real > &yfs) const |
Computes the smoothed yield function. More... | |
Real | ismoother (Real f_diff) const |
Smooths yield functions. More... | |
Real | smoother (Real f_diff) const |
Derivative of ismoother. More... | |
Real | dsmoother (Real f_diff) const |
Derivative of smoother. More... | |
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. More... | |
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: More... | |
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. More... | |
Real | calculateRes2 (const std::vector< Real > &rhs) const |
Calculates the residual-squared for the Newton-Raphson + line-search. More... | |
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[1] = S[1] - S[1]^trial + ga * E[1, j] * dg/dS[j] ... More... | |
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 the linear system using LAPACK gsev. More... | |
virtual void | errorHandler (const std::string &message) const |
Performs any necessary cleaning-up, then throw MooseException(message) More... | |
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. More... | |
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. More... | |
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-mapping algorithm. More... | |
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. More... | |
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, and the old values of the internal parameters. More... | |
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, their current values, and the current values of the internal parameters. More... | |
virtual void | computeStressParams (const RankTwoTensor &stress, std::vector< Real > &stress_params) const =0 |
Computes stress_params, given stress. More... | |
virtual void | initializeReturnProcess () |
Derived classes may use this to perform calculations before any return-map process is performed, for instance, to initialize variables. More... | |
virtual void | finalizeReturnProcess (const RankTwoTensor &rotation_increment) |
Derived classes may use this to perform calculations after the return-map process has completed successfully in stress_param space but before the returned stress tensor has been calculcated. More... | |
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. More... | |
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 process has completed successfully in stress_param space, just after finalizeReturnProcess has been called. More... | |
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. More... | |
virtual std::vector< RankTwoTensor > | dstress_param_dstress (const RankTwoTensor &stress) const =0 |
d(stress_param[i])/d(stress) at given stress More... | |
virtual std::vector< RankFourTensor > | d2stress_param_dstress (const RankTwoTensor &stress) const =0 |
d2(stress_param[i])/d(stress)/d(stress) at given stress More... | |
virtual void | setEffectiveElasticity (const RankFourTensor &Eijkl)=0 |
Sets _Eij and _En and _Cij. More... | |
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_params for the (sub)strain increment. More... | |
bool | precisionLoss (const std::vector< Real > &solution, const std::vector< Real > &stress_params, Real gaE) const |
Check whether precision loss has occurred. More... | |
Protected Attributes | |
const unsigned | _num_sp |
Number of stress parameters. More... | |
const std::vector< Real > | _definitely_ok_sp |
An admissible value of stress_params at the initial time. More... | |
std::vector< std::vector< Real > > | _Eij |
E[i, j] in the system of equations to be solved. More... | |
Real | _En |
normalising factor More... | |
std::vector< std::vector< Real > > | _Cij |
_Cij[i, j] * _Eij[j, k] = 1 iff j == k More... | |
const unsigned | _num_yf |
Number of yield functions. More... | |
const unsigned | _num_intnl |
Number of internal parameters. More... | |
const unsigned | _max_nr_its |
Maximum number of Newton-Raphson iterations allowed in the return-map process. More... | |
const bool | _perform_finite_strain_rotations |
Whether to perform finite-strain rotations. More... | |
const Real | _smoothing_tol |
Smoothing tolerance: edges of the yield surface get smoothed by this amount. More... | |
const Real | _smoothing_tol2 |
Square of the smoothing tolerance. More... | |
const Real | _f_tol |
The yield-function tolerance. More... | |
const Real | _f_tol2 |
Square of the yield-function tolerance. More... | |
const Real | _min_step_size |
In order to help the Newton-Raphson procedure, the applied strain increment may be applied in sub-increments of size greater than this value. More... | |
bool | _step_one |
handles case of initial_stress that is inadmissible being supplied More... | |
const bool | _warn_about_precision_loss |
Output a warning message if precision loss is encountered during the return-map process. More... | |
MaterialProperty< RankTwoTensor > & | _plastic_strain |
plastic strain More... | |
const MaterialProperty< RankTwoTensor > & | _plastic_strain_old |
Old value of plastic strain. More... | |
MaterialProperty< std::vector< Real > > & | _intnl |
internal parameters More... | |
const MaterialProperty< std::vector< Real > > & | _intnl_old |
old values of internal parameters More... | |
MaterialProperty< std::vector< Real > > & | _yf |
yield functions More... | |
MaterialProperty< Real > & | _iter |
Number of Newton-Raphson iterations used in the return-map. More... | |
MaterialProperty< Real > & | _max_iter_used |
Maximum number of Newton-Raphson iterations used in the return-map during the course of the entire simulation. More... | |
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 the entire simulation. More... | |
MaterialProperty< Real > & | _linesearch_needed |
Whether a line-search was needed in the latest Newton-Raphson process (1 if true, 0 otherwise) More... | |
const std::string | _base_name |
Name used as a prefix for all material properties related to the stress update model. More... | |
Static Protected Attributes | |
constexpr static unsigned | _tensor_dimensionality = 3 |
Internal dimensionality of tensors (currently this is 3 throughout tensor_mechanics) More... | |
Private Types | |
enum | SmootherFunctionType { SmootherFunctionType::cos, SmootherFunctionType::poly1, SmootherFunctionType::poly2, SmootherFunctionType::poly3 } |
The type of smoother function. More... | |
Private Attributes | |
std::vector< Real > | _trial_sp |
"Trial" value of stress_params that initializes the return-map process This is derived from stress = stress_old + Eijkl * strain_increment. More... | |
RankTwoTensor | _stress_trial |
"Trial" value of stress that is set at the beginning of the return-map process. More... | |
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, i] * dg/dS[i] ... More... | |
std::vector< std::vector< Real > > | _dvar_dtrial |
d({stress_param[i], gaE})/d(trial_stress_param[j]) More... | |
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". More... | |
std::vector< Real > | _ok_intnl |
The state (ok_sp, ok_intnl) is known to be admissible. More... | |
std::vector< Real > | _del_stress_params |
_del_stress_params = trial_stress_params - ok_sp This is fixed at the beginning of the return-map process, irrespective of substepping. More... | |
std::vector< Real > | _current_sp |
The current values of the stress params during the Newton-Raphson. More... | |
std::vector< Real > | _current_intnl |
The current values of the internal params during the Newton-Raphson. More... | |
enum MultiParameterPlasticityStressUpdate::SmootherFunctionType | _smoother_function_type |
MultiParameterPlasticityStressUpdate performs the return-map algorithm and associated stress updates for plastic models where the yield function and flow directions depend on multiple parameters (called "stress_params" in the documentation and sp in the code) that are themselves functions of stress.
Let the stress_params be S = {S[0], S[1], ... S[N-1]} and define _num_sp = N.
For instance, CappedDruckerPrager plasticity has _num_sp = 2 and defines S[0] = p = stress.trace() S[1] = q = sqrt(stress.secondInvariant())
The point of the stress_params is to reduce the number of degrees of freedom involved in the return-map algorithm (for computational efficiency as all the intensive computation occurs in "stress_param space") and to allow users to write their yield functions, etc, in forms that are clear to them to avoid errors.
Derived classes can describe plasticity via multiple yield functions. The number of yield function is _num_yf. The yield function(s) and flow potential(s) must be functions of the stress_params.
Derived classes can use any number of internal parameters. The number of internal parameters is _num_intnl. The derived classes must define the evolution of these internal parameters, which are typically functions of certain "distances" in the return-mapping procedure.
For instance, CappedDruckerPrager plasticity has three yield functions (a smoothed DruckerPrager cone, a tensile failure envelope, and a compressive failure envelope) and two internal parameters (plastic shear strain and plastic tensile strain). The strength parameters (cohesion, friction angle, dilation angle, tensile strength, compressive strength) are functions of these internal parameters.
A novel smoothing procedure is used to smooth the derived class's yield functions into a single, smooth yield function. The smoothing is also performed for the flow potential. All return-mapping, etc, processes are performed on this single yield function and flow potential.
The return-map algorithm implements the updateState method of StressUpdateBase. In particular, the following system of equations is solved: 0 = _rhs[0] = S[0] - S[0]^trial + ga * E[0, j] * dg/dS[j] 0 = _rhs[1] = S[1] - S[1]^trial + ga * E[1, j] * dg/dS[j] ... 0 = _rhs[N-1] = S[N-1] - S[N-1]^trial + ga * E[N-1, j] * dg/dS[j] 0 = _rhs[N] = f(S, intnl) (here there is an implied sum over j) for the _num_sp stress_params S, and the single scalar ga (actually I solve for gaE = ga * _En, where _En is a normalising factor so that gaE is of similar magnitude to the S variables). In general E[a, b] = dS[a]/dstress(i, j) E(i, j, k, l) dS[b]/dstress(k, l), and in the code below it is assumed that the E[a, b] are independent of the stress_params, but adding a dependence would only require some Jacobian terms to be modified. There are N+1 rhs equations to solve. Here f is the smoothed yield function, so the last equation is the admissibility condition (the returned stress lies on the yield surface) and g is the flow potential so the other conditions implement the normality condition. It is up to the derived classes to defined E[i, j] so that the rhs really represents the normality condition.
For instance, CappedDruckerPrager has (with Eijkl being the elasticity tensor): E[0, 0] = _Epp = Eijkl.sum3x3() E[0, 1] = 0 E[1, 0] = 0 E[1, 1] = Eijkl(0, 1, 0, 1)
Definition at line 99 of file MultiParameterPlasticityStressUpdate.h.
|
strongprivate |
The type of smoother function.
Enumerator | |
---|---|
cos | |
poly1 | |
poly2 | |
poly3 |
Definition at line 743 of file MultiParameterPlasticityStressUpdate.h.
MultiParameterPlasticityStressUpdate::MultiParameterPlasticityStressUpdate | ( | const InputParameters & | parameters, |
unsigned | num_sp, | ||
unsigned | num_yf, | ||
unsigned | num_intnl | ||
) |
Definition at line 82 of file MultiParameterPlasticityStressUpdate.C.
|
protected |
Calculates the residual-squared for the Newton-Raphson + line-search.
rhs[in] | The RHS vector |
Definition at line 802 of file MultiParameterPlasticityStressUpdate.C.
Referenced by lineSearch(), and updateState().
|
protected |
Calculates the RHS in the following 0 = rhs[0] = S[0] - S[0]^trial + ga * E[0, j] * dg/dS[j] 0 = rhs[1] = S[1] - S[1]^trial + ga * E[1, j] * dg/dS[j] ...
0 = rhs[N-1] = S[N-1] - S[N-1]^trial + ga * E[N-1, j] * dg/dS[j] 0 = rhs[N] = f(S, intnl) where N = _num_sp
trial_stress_params[in] | The trial stress parameters for this (sub)strain increment, S[:]^trial |
stress_params[in] | The current stress parameters, S[:] |
gaE[in] | ga*_En (the normalisation with _En is so that gaE is of similar magnitude to S) |
smoothed_q[in] | Holds the current value of yield function and derivatives evaluated at the current stress parameters and the current internal parameters |
rhs[out] | The result |
Definition at line 811 of file MultiParameterPlasticityStressUpdate.C.
Referenced by lineSearch(), and updateState().
|
protectedpure virtual |
Completely fills all_q with correct values.
These values are: (1) the yield function values, yf[i] (2) d(yf[i])/d(stress_params[j]) (3) d(yf[i])/d(intnl[j]) (4) d(flowPotential[i])/d(stress_params[j]) (5) d2(flowPotential[i])/d(stress_params[j])/d(stress_params[k]) (6) d2(flowPotential[i])/d(stress_params[j])/d(intnl[k])
stress_params[in] | The stress parameters | |
intnl[in] | The internal parameters | |
[out] | all_q | All the desired quantities |
Implemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, and TensileStressUpdate.
Referenced by smoothAllQuantities().
|
protectedpure virtual |
Computes stress_params, given stress.
Derived classes must override this
stress[in] | Stress tensor |
stress_params[out] | The compute stress_params |
Implemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, and TensileStressUpdate.
Referenced by updateState().
|
virtualinherited |
Reimplemented in RadialReturnStressUpdate.
Definition at line 56 of file StressUpdateBase.C.
|
protectedvirtual |
Calculates the consistent tangent operator.
Derived classes may choose to override this for computational efficiency. The implementation in this class is quite expensive, even though it looks compact and clean, because of all the manipulations of RankFourTensors involved.
stress_trial[in] | the trial value of the stress tensor for this strain increment | |
trial_stress_params[in] | the trial values of the stress_params for this strain increment | |
stress[in] | the returned value of the stress tensor for this strain increment | |
stress_params[in] | the returned value of the stress_params for this strain increment | |
gaE[in] | the total value of that came from this strain increment | |
smoothed_q[in] | contains the yield function and derivatives evaluated at (p, q) | |
Eijkl[in] | The elasticity tensor | |
compute_full_tangent_operator[in] | true if the full consistent tangent operator is needed, otherwise false | |
dvar_dtrial[in] | dvar_dtrial[i][j] = d({stress_param[i],gaE})/d(trial_stress_param[j]) for this strain increment | |
[out] | cto | The consistent tangent operator |
Reimplemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, TensileStressUpdate, and CappedMohrCoulombCosseratStressUpdate.
Definition at line 725 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
protectedpure virtual |
d2(stress_param[i])/d(stress)/d(stress) at given stress
stress | stress tensor |
Implemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, and TensileStressUpdate.
Referenced by consistentTangentOperatorV().
|
protected |
Derivative of -RHS with respect to the stress_params and gaE, placed into an array ready for solving the linear system using LAPACK gsev.
smoothed_q[in] | Holds the current value of yield function and derivatives evaluated at the current values of the stress_params and the internal parameters |
dintnl[in] | The derivatives of the internal parameters wrt the stress_params |
stress_params[in] | The current value of the stress_params during the Newton-Raphson process |
gaE[in] | The current value of gaE |
jac[out] | The outputted derivatives |
Definition at line 828 of file MultiParameterPlasticityStressUpdate.C.
Referenced by dVardTrial(), and nrStep().
|
protected |
Derivative of smoother.
Definition at line 533 of file MultiParameterPlasticityStressUpdate.C.
Referenced by smoothAllQuantities().
|
protectedpure virtual |
d(stress_param[i])/d(stress) at given stress
stress | stress tensor |
Implemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, and TensileStressUpdate.
Referenced by consistentTangentOperatorV(), and setInelasticStrainIncrementAfterReturn().
|
protected |
Calculates derivatives of the stress_params and gaE with repect to the trial values of the stress_params for the (sub)strain increment.
After the strain increment has been fully applied, dvar_dtrial will contain the result appropriate to the full strain increment. Before that time (if applying in sub-strain increments) it will contain the result appropriate to the amount of strain increment applied successfully.
elastic_only[in] | whether this was an elastic step: if so then the updates to dvar_dtrial are fairly trivial |
trial_stress_params[in] | Trial values of stress_params for this (sub)strain increment |
stress_params[in] | Returned values of stress_params for this (sub)strain increment |
gaE[in] | the value of gaE that came from this (sub)strain increment |
intnl[in] | the value of the internal parameters at the returned position |
smoothed_q[in] | contains the yield function and derivatives evaluated at (stress_params, intnl) |
step_size[in] | size of this (sub)strain increment |
compute_full_tangent_operator[in] | true if the full consistent tangent operator is needed, otherwise false |
dvar_dtrial[out] | dvar_dtrial[i][j] = d({stress_param[i],gaE})/d(trial_stress_param[j]) |
Definition at line 873 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
protectedvirtual |
Performs any necessary cleaning-up, then throw MooseException(message)
message | The message to using in MooseException |
Definition at line 661 of file MultiParameterPlasticityStressUpdate.C.
Referenced by dVardTrial(), and updateState().
|
protectedvirtual |
Derived classes may use this to perform calculations after the return-map process has completed successfully in stress_param space but before the returned stress tensor has been calculcated.
rotation_increment[in] | The large-strain rotation increment |
Reimplemented in CappedDruckerPragerStressUpdate, CappedWeakPlaneStressUpdate, and CappedWeakInclinedPlaneStressUpdate.
Definition at line 672 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
inlineoverrideprotectedvirtual |
Reimplemented from StressUpdateBase.
Definition at line 123 of file MultiParameterPlasticityStressUpdate.h.
|
protectedvirtual |
Derived classes may use this to perform calculations before any return-map process is performed, for instance, to initialize variables.
This is called at the very start of updateState, even before any checking for admissible stresses, etc, is performed
Reimplemented in CappedDruckerPragerStressUpdate, CappedWeakPlaneStressUpdate, and CappedWeakInclinedPlaneStressUpdate.
Definition at line 667 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
protectedvirtual |
Sets (stress_params, intnl) at "good guesses" of the solution to the Return-Map algorithm.
The purpose of these "good guesses" is to speed up the Newton-Raphson process by providing it with a good initial guess. Derived classes may choose to override this if their plastic models are easy enough to solve approximately. The default values, provided by this class, are simply gaE = 0, stress_params = trial_stress_params, that is, the "good guess" is just the trial point for this (sub)strain increment.
trial_stress_params[in] | The stress_params at the trial point |
intnl_old[in] | The internal parameters before applying the (sub)strain increment |
stress_params[out] | The "good guess" value of the stress_params |
gaE[out] | The "good guess" value of gaE |
intnl[out] | The "good guess" value of the internal parameters |
Reimplemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, and TensileStressUpdate.
Definition at line 713 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
overrideprotectedvirtual |
Reimplemented in CappedWeakInclinedPlaneStressUpdate.
Definition at line 141 of file MultiParameterPlasticityStressUpdate.C.
Referenced by CappedWeakInclinedPlaneStressUpdate::initQpStatefulProperties(), and updateState().
|
inlinevirtualinherited |
Is the implmented model isotropic? The safe default is 'false'.
Reimplemented in RadialReturnStressUpdate, CappedDruckerPragerStressUpdate, and CappedMohrCoulombStressUpdate.
Definition at line 112 of file StressUpdateBase.h.
Referenced by ComputeMultipleInelasticStress::initialSetup().
|
protected |
Smooths yield functions.
The returned value must be zero if abs(f_diff) >= _smoothing_tol and otherwise must satisfy, over -_smoothing_tol <= f_diff <= _smoothing_tol: (1) C2 (2) zero at f_diff = +/- _smoothing_tol (3) derivative is +/-0.5 at f_diff = +/- _smoothing_tol (4) derivative must be in [-0.5, 0.5] (5) second derivative is zero at f_diff = +/- _smoothing_tol (6) second derivative must be non-negative in order to ensure C2 differentiability and convexity of the smoothed yield surface.
Definition at line 484 of file MultiParameterPlasticityStressUpdate.C.
Referenced by smoothAllQuantities(), and yieldF().
|
protected |
Performs a line-search to find stress_params and gaE Upon entry:
res2[in,out] | the residual-squared, both as an input and output |
stress_params[in,out] | Upon input the value of the stress_params before the current Newton-Raphson process was initiated. Upon exit this will hold the values coming from the line search. |
trial_stress_params[in] | Trial value for the stress_params for this (sub)strain increment |
gaE[in,out] | Upon input the value of gaE before the current Newton-Raphson iteration was initiated. Upon exit this will hold the value coming from the line-search |
smoothed_q[in,out] | Upon input, the value of the smoothed yield function and derivatives at the prior-to-Newton configuration. Upon exit this is evaluated at the new (stress_params, intnl) |
intnl_ok[in] | The value of the internal parameters from the start of this (sub)strain increment |
intnl[in,out] | The value of the internal parameters after the line-search has converged |
rhs[in,out] | Upon entry this contains the solution to the Newton-Raphson. Upon exit this contains the updated rhs values |
Definition at line 553 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
protected |
Performs a Newton-Raphson step to attempt to zero rhs Upon return, rhs will contain the solution.
smoothed_q[in] | The value of the smoothed yield function and derivatives prior to this Newton-Raphson step |
trial_stress_params[in] | Trial value for the stress_params for this (sub)strain increment |
stress_params[in] | The current value of the stress_params |
intnl[in] | The current value of the internal parameters |
gaE[in] | The current value of gaE |
rhs[in,out] | Upon entry, the rhs to zero using Newton-Raphson. Upon exit, the solution to the Newton-Raphson problem |
Definition at line 637 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
protected |
Check whether precision loss has occurred.
[in] | solution | The solution to the Newton-Raphson system |
[in] | stress_params | The currect values of the stress_params for this (sub)strain increment |
[in] | gaE | The currenct value of gaE for this (sub)strain increment |
Definition at line 983 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
protectedvirtual |
Derived classes may employ this function to record stuff or do other computations prior to the return-mapping algorithm.
We know that (trial_stress_params, intnl_old) is inadmissible when this is called
trial_stress_params[in] | The trial values of the stress parameters |
stress_trial[in] | Trial stress tensor |
intnl_old[in] | Old value of the internal parameters. |
yf[in] | The yield functions at (p_trial, q_trial, intnl_old) |
Eijkl[in] | The elasticity tensor |
Reimplemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, TensileStressUpdate, and CappedMohrCoulombCosseratStressUpdate.
Definition at line 678 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
overrideprotectedvirtual |
If updateState is not called during a timestep, this will be.
This method allows derived classes to set internal parameters from their Old values, for instance
Reimplemented from StressUpdateBase.
Definition at line 152 of file MultiParameterPlasticityStressUpdate.C.
|
pure virtualinherited |
Does the model require the elasticity tensor to be isotropic?
Implemented in RadialReturnStressUpdate, CappedDruckerPragerStressUpdate, CappedDruckerPragerCosseratStressUpdate, LinearViscoelasticStressUpdate, CappedMohrCoulombCosseratStressUpdate, CappedWeakPlaneStressUpdate, CappedWeakInclinedPlaneStressUpdate, CappedWeakPlaneCosseratStressUpdate, CappedMohrCoulombStressUpdate, and TensileStressUpdate.
Referenced by ComputeMultipleInelasticStress::initialSetup().
|
inlinefinalinherited |
Definition at line 123 of file StressUpdateBase.h.
|
inlinefinalinherited |
Retained as empty methods to avoid a warning from Material.C in framework. These methods are unused in all inheriting classes and should not be overwritten.
Definition at line 122 of file StressUpdateBase.h.
|
protectedpure virtual |
Sets _Eij and _En and _Cij.
Implemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, TensileStressUpdate, and CappedMohrCoulombCosseratStressUpdate.
Referenced by updateState().
|
protectedvirtual |
Sets inelastic strain increment from the returned configuration This is called after the return-map process has completed successfully in stress_param space, just after finalizeReturnProcess has been called.
Derived classes may override this function
stress_trial[in] | The trial value of stress |
gaE[in] | The value of gaE after the return-map process has completed successfully |
smoothed_q[in] | Holds the current value of yield function and derivatives evaluated at the returned configuration |
elasticity_tensor[in] | The elasticity tensor |
returned_stress[in] | The stress after the return-map process |
inelastic_strain_increment[out] | The inelastic strain increment resulting from this return-map |
Reimplemented in TwoParameterPlasticityStressUpdate.
Definition at line 786 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
protectedpure virtual |
Sets the derivatives of internal parameters, based on the trial values of stress_params, their current values, and the current values of the internal parameters.
Derived classes must override this.
trial_stress_params[in] | The trial stress parameters |
current_stress_params[in] | The current stress parameters |
intnl[in] | The current value of the internal parameters |
dintnl[out] | The derivatives dintnl[i][j] = d(intnl[i])/d(stress_param j) |
Implemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, and TensileStressUpdate.
Referenced by dVardTrial(), and nrStep().
|
protectedpure virtual |
Sets the internal parameters based on the trial values of stress_params, their current values, and the old values of the internal parameters.
Derived classes must override this.
trial_stress_params[in] | The trial stress parameters (eg trial_p and trial_q) |
current_stress_params[in] | The current stress parameters (eg p and q) |
intnl_old[out] | Old value of internal parameters |
intnl[out] | The value of internal parameters to be set |
Implemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, and TensileStressUpdate.
Referenced by lineSearch(), and updateState().
|
inherited |
Sets the value of the global variable _qp for inheriting classes.
Definition at line 43 of file StressUpdateBase.C.
|
protectedpure virtual |
Sets stress from the admissible parameters.
This is called after the return-map process has completed successfully in stress_param space, just after finalizeReturnProcess has been called. Derived classes must override this function
stress_trial[in] | The trial value of stress |
stress_params[in] | The value of the stress_params after the return-map process has completed successfully |
gaE[in] | The value of gaE after the return-map process has completed successfully |
intnl[in] | The value of the internal parameters after the return-map process has completed successfully |
smoothed_q[in] | Holds the current value of yield function and derivatives evaluated at the returned state |
Eijkl[in] | The elasticity tensor |
stress[out] | The returned value of the stress tensor |
Implemented in TwoParameterPlasticityStressUpdate, CappedMohrCoulombStressUpdate, TensileStressUpdate, and CappedMohrCoulombCosseratStressUpdate.
Referenced by updateState().
|
protected |
Calculates all yield functions and derivatives, and then performs the smoothing scheme.
stress_params[in] | The stress parameters (eg stress_params[0] = stress_zz and stress_params[1] = sqrt(stress_zx^2 + stress_zy^2)) |
intnl[in] | Internal parameters |
Definition at line 400 of file MultiParameterPlasticityStressUpdate.C.
Referenced by lineSearch(), and updateState().
|
protected |
Derivative of ismoother.
Definition at line 510 of file MultiParameterPlasticityStressUpdate.C.
Referenced by smoothAllQuantities().
|
overrideprotectedvirtual |
Given a strain increment that results in a trial stress, perform some procedure (such as an iterative return-mapping process) to produce an admissible stress, an elastic strain increment and an inelastic strain increment.
If _fe_problem.currentlyComputingJacobian() = true, then updateState also computes d(stress)/d(strain) (or some approximation to it).
This method is called by ComputeMultipleInelasticStress. This method is pure virutal: all inheriting classes must overwrite this method.
strain_increment | Upon input: the strain increment. Upon output: the elastic strain increment |
inelastic_strain_increment | The inelastic_strain resulting from the interative procedure |
rotation_increment | The finite-strain rotation increment |
stress_new | Upon input: the trial stress that results from applying strain_increment as an elastic strain. Upon output: the admissible stress |
stress_old | The old value of stress |
elasticity_tensor | The elasticity tensor |
compute_full_tangent_operator | The calling routine would like the full consistent tangent operator to be placed in tangent_operator, if possible. This is irrelevant if _fe_problem.currentlyComputingJacobian() = false |
tangent_operator | d(stress)/d(strain), or some approximation to it If compute_full_tangent_operator=false, then tangent_operator=elasticity_tensor is an appropriate choice. tangent_operator is only computed if _fe_problem.currentlyComputingJacobian() = true |
Implements StressUpdateBase.
Definition at line 160 of file MultiParameterPlasticityStressUpdate.C.
|
static |
Definition at line 23 of file MultiParameterPlasticityStressUpdate.C.
Referenced by CappedMohrCoulombStressUpdate::validParams(), TensileStressUpdate::validParams(), and TwoParameterPlasticityStressUpdate::validParams().
|
protected |
Computes the smoothed yield function.
stress_params | The stress parameters (eg stress_params[0] = stress_zz and stress_params[1] = sqrt(stress_zx^2 + stress_zy^2)) |
intnl | The internal parameters (eg intnl[0] is shear, intnl[1] is tensile) |
Definition at line 688 of file MultiParameterPlasticityStressUpdate.C.
Referenced by updateState().
|
protected |
Computes the smoothed yield function.
yfs | The values of the individual yield functions |
Definition at line 697 of file MultiParameterPlasticityStressUpdate.C.
|
protectedpure virtual |
Computes the values of the yield functions, given stress_params and intnl parameters.
Derived classes must override this, to provide the values of the yield functions in yf.
stress_params[in] | The stress parameters | |
intnl[in] | The internal parameters | |
[out] | yf | The yield function values |
Implemented in CappedMohrCoulombStressUpdate, TwoParameterPlasticityStressUpdate, and TensileStressUpdate.
Referenced by updateState(), and yieldF().
|
protectedinherited |
Name used as a prefix for all material properties related to the stress update model.
Definition at line 128 of file StressUpdateBase.h.
|
protected |
_Cij[i, j] * _Eij[j, k] = 1 iff j == k
Definition at line 144 of file MultiParameterPlasticityStressUpdate.h.
Referenced by consistentTangentOperatorV(), CappedMohrCoulombCosseratStressUpdate::setEffectiveElasticity(), TensileStressUpdate::setEffectiveElasticity(), CappedMohrCoulombStressUpdate::setEffectiveElasticity(), and TwoParameterPlasticityStressUpdate::setEffectiveElasticity().
|
private |
The current values of the internal params during the Newton-Raphson.
Definition at line 737 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
private |
The current values of the stress params during the Newton-Raphson.
Definition at line 732 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
protected |
An admissible value of stress_params at the initial time.
Definition at line 135 of file MultiParameterPlasticityStressUpdate.h.
Referenced by MultiParameterPlasticityStressUpdate(), and updateState().
|
private |
_del_stress_params = trial_stress_params - ok_sp This is fixed at the beginning of the return-map process, irrespective of substepping.
The return-map problem is: apply del_stress_params to stress_prams, and then find an admissible (returned) stress_params and gaE
Definition at line 727 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
private |
d({stress_param[i], gaE})/d(trial_stress_param[j])
Definition at line 703 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
protected |
E[i, j] in the system of equations to be solved.
Definition at line 138 of file MultiParameterPlasticityStressUpdate.h.
Referenced by calculateRHS(), dnRHSdVar(), dVardTrial(), CappedMohrCoulombStressUpdate::initializeVarsV(), CappedMohrCoulombCosseratStressUpdate::setEffectiveElasticity(), TensileStressUpdate::setEffectiveElasticity(), CappedMohrCoulombStressUpdate::setEffectiveElasticity(), TwoParameterPlasticityStressUpdate::setEffectiveElasticity(), TensileStressUpdate::setIntnlDerivativesV(), CappedMohrCoulombStressUpdate::setIntnlDerivativesV(), TensileStressUpdate::setIntnlValuesV(), and CappedMohrCoulombStressUpdate::setIntnlValuesV().
|
protected |
normalising factor
Definition at line 141 of file MultiParameterPlasticityStressUpdate.h.
Referenced by calculateRHS(), consistentTangentOperatorV(), dnRHSdVar(), dVardTrial(), CappedMohrCoulombCosseratStressUpdate::setEffectiveElasticity(), TensileStressUpdate::setEffectiveElasticity(), CappedMohrCoulombStressUpdate::setEffectiveElasticity(), TwoParameterPlasticityStressUpdate::setEffectiveElasticity(), and setInelasticStrainIncrementAfterReturn().
|
protected |
The yield-function tolerance.
Definition at line 165 of file MultiParameterPlasticityStressUpdate.h.
Referenced by CappedMohrCoulombStressUpdate::initializeVarsV(), and updateState().
|
protected |
Square of the yield-function tolerance.
Definition at line 168 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
protected |
internal parameters
Definition at line 190 of file MultiParameterPlasticityStressUpdate.h.
Referenced by CappedWeakPlaneCosseratStressUpdate::consistentTangentOperator(), CappedWeakPlaneStressUpdate::consistentTangentOperator(), initQpStatefulProperties(), propagateQpStatefulProperties(), and updateState().
|
protected |
old values of internal parameters
Definition at line 193 of file MultiParameterPlasticityStressUpdate.h.
Referenced by propagateQpStatefulProperties(), and updateState().
|
protected |
Number of Newton-Raphson iterations used in the return-map.
Definition at line 199 of file MultiParameterPlasticityStressUpdate.h.
Referenced by initQpStatefulProperties(), and updateState().
|
protected |
Whether a line-search was needed in the latest Newton-Raphson process (1 if true, 0 otherwise)
Definition at line 208 of file MultiParameterPlasticityStressUpdate.h.
Referenced by initQpStatefulProperties(), and updateState().
|
protected |
Maximum number of Newton-Raphson iterations used in the return-map during the course of the entire simulation.
Definition at line 202 of file MultiParameterPlasticityStressUpdate.h.
Referenced by initQpStatefulProperties(), propagateQpStatefulProperties(), and updateState().
|
protected |
Old value of maximum number of Newton-Raphson iterations used in the return-map during the course of the entire simulation.
Definition at line 205 of file MultiParameterPlasticityStressUpdate.h.
Referenced by propagateQpStatefulProperties(), and updateState().
|
protected |
Maximum number of Newton-Raphson iterations allowed in the return-map process.
Definition at line 153 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
protected |
In order to help the Newton-Raphson procedure, the applied strain increment may be applied in sub-increments of size greater than this value.
Definition at line 175 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
protected |
Number of internal parameters.
Definition at line 150 of file MultiParameterPlasticityStressUpdate.h.
Referenced by CappedMohrCoulombStressUpdate::computeAllQV(), dnRHSdVar(), dVardTrial(), initQpStatefulProperties(), nrStep(), smoothAllQuantities(), and updateState().
|
protected |
Number of stress parameters.
Definition at line 132 of file MultiParameterPlasticityStressUpdate.h.
Referenced by calculateRHS(), TensileStressUpdate::computeAllQV(), CappedMohrCoulombStressUpdate::computeAllQV(), TensileStressUpdate::consistentTangentOperatorV(), CappedMohrCoulombStressUpdate::consistentTangentOperatorV(), consistentTangentOperatorV(), dnRHSdVar(), dVardTrial(), TensileStressUpdate::initializeVarsV(), CappedMohrCoulombStressUpdate::initializeVarsV(), lineSearch(), MultiParameterPlasticityStressUpdate(), nrStep(), precisionLoss(), CappedMohrCoulombCosseratStressUpdate::setEffectiveElasticity(), TensileStressUpdate::setEffectiveElasticity(), CappedMohrCoulombStressUpdate::setEffectiveElasticity(), setInelasticStrainIncrementAfterReturn(), CappedMohrCoulombStressUpdate::setIntnlDerivativesV(), smoothAllQuantities(), and updateState().
|
protected |
Number of yield functions.
Definition at line 147 of file MultiParameterPlasticityStressUpdate.h.
Referenced by TensileStressUpdate::computeAllQV(), CappedMohrCoulombStressUpdate::computeAllQV(), initQpStatefulProperties(), smoothAllQuantities(), updateState(), and yieldF().
|
private |
The state (ok_sp, ok_intnl) is known to be admissible.
Definition at line 718 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
private |
The state (ok_sp, ok_intnl) is known to be admissible, so ok_sp are stress_params that are "OK".
If the strain_increment is applied in substeps then ok_sp is updated after each sub strain_increment is applied and the return-map is successful. At the end of the entire return-map process _ok_sp will contain the stress_params where (_ok_sp, _intnl) is admissible.
Definition at line 713 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
protected |
Whether to perform finite-strain rotations.
Definition at line 156 of file MultiParameterPlasticityStressUpdate.h.
Referenced by CappedWeakInclinedPlaneStressUpdate::finalizeReturnProcess(), and CappedWeakInclinedPlaneStressUpdate::initializeReturnProcess().
|
protected |
plastic strain
Definition at line 184 of file MultiParameterPlasticityStressUpdate.h.
Referenced by initQpStatefulProperties(), propagateQpStatefulProperties(), and updateState().
|
protected |
Old value of plastic strain.
Definition at line 187 of file MultiParameterPlasticityStressUpdate.h.
Referenced by propagateQpStatefulProperties(), and updateState().
|
private |
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, i] * dg/dS[i] ...
0 = rhs[N-1] = S[N-1] - S[N-1]^trial + ga * E[N-1, i] * dg/dS[i] 0 = rhs[N] = f(S, intnl) Here N = num_sp
Definition at line 698 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
private |
Referenced by dsmoother(), ismoother(), and smoother().
|
protected |
Smoothing tolerance: edges of the yield surface get smoothed by this amount.
Definition at line 159 of file MultiParameterPlasticityStressUpdate.h.
Referenced by CappedDruckerPragerStressUpdate::CappedDruckerPragerStressUpdate(), CappedWeakPlaneStressUpdate::CappedWeakPlaneStressUpdate(), dsmoother(), ismoother(), smoothAllQuantities(), smoother(), and yieldF().
|
protected |
Square of the smoothing tolerance.
Definition at line 162 of file MultiParameterPlasticityStressUpdate.h.
Referenced by ismoother().
|
protected |
handles case of initial_stress that is inadmissible being supplied
Definition at line 178 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
private |
"Trial" value of stress that is set at the beginning of the return-map process.
It is fixed at stress_old + Eijkl * strain_increment irrespective of any sub-stepping
Definition at line 688 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
staticconstexprprotected |
Internal dimensionality of tensors (currently this is 3 throughout tensor_mechanics)
Definition at line 129 of file MultiParameterPlasticityStressUpdate.h.
Referenced by CappedWeakPlaneCosseratStressUpdate::consistentTangentOperator(), CappedDruckerPragerCosseratStressUpdate::consistentTangentOperator(), CappedWeakPlaneStressUpdate::consistentTangentOperator(), CappedDruckerPragerStressUpdate::consistentTangentOperator(), TwoParameterPlasticityStressUpdate::consistentTangentOperator(), CappedMohrCoulombCosseratStressUpdate::consistentTangentOperatorV(), TensileStressUpdate::consistentTangentOperatorV(), CappedMohrCoulombStressUpdate::consistentTangentOperatorV(), and CappedWeakPlaneStressUpdate::d2qdstress2().
|
private |
"Trial" value of stress_params that initializes the return-map process This is derived from stress = stress_old + Eijkl * strain_increment.
However, since the return-map process can fail and be restarted by applying strain_increment in multiple substeps, _trial_sp can vary from substep to substep.
Definition at line 681 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
protected |
Output a warning message if precision loss is encountered during the return-map process.
Definition at line 181 of file MultiParameterPlasticityStressUpdate.h.
Referenced by updateState().
|
protected |
yield functions
Definition at line 196 of file MultiParameterPlasticityStressUpdate.h.
Referenced by initQpStatefulProperties(), and updateState().