https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
FiniteStrainUObasedCP Class Reference

FiniteStrainUObasedCP uses the multiplicative decomposition of deformation gradient and solves the PK2 stress residual equation at the intermediate configuration to evolve the material state. More...

#include <FiniteStrainUObasedCP.h>

Inheritance diagram for FiniteStrainUObasedCP:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 FiniteStrainUObasedCP (const InputParameters &parameters)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 
void validateDerivativeMaterialPropertyBase (const std::string &base)
 
const MaterialPropertyName derivativePropertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName derivativePropertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName derivativePropertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName derivativePropertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual void computeQpStress ()
 updates the stress at a quadrature point.
 
virtual void initQpStatefulProperties ()
 initializes the stateful properties such as stress, plastic deformation gradient, slip system resistances, etc.
 
virtual void calcResidJacob ()
 calls the residual and jacobian functions used in the stress update algorithm.
 
virtual void updateSlipSystemResistanceAndStateVariable ()
 updates the slip system resistances and state variables.
 
virtual void preSolveQp ()
 set variables for stress and internal variable solve.
 
virtual void solveQp ()
 solve stress and internal variables.
 
virtual void postSolveQp ()
 update stress and internal variable after solve.
 
virtual void preSolveStatevar ()
 set variables for internal variable solve.
 
virtual void solveStatevar ()
 solve internal variables.
 
virtual void postSolveStatevar ()
 update internal variable after solve.
 
virtual void preSolveStress ()
 set variables for stress solve.
 
virtual void solveStress ()
 solves for stress, updates plastic deformation gradient.
 
virtual void postSolveStress ()
 update stress and plastic deformation gradient after solve.
 
virtual void calcResidual ()
 calculate stress residual.
 
virtual void calcJacobian ()
 calculate jacobian.
 
virtual void getSlipRates ()
 updates the slip rates.
 
virtual void calcTangentModuli ()
 calculate the tangent moduli for preconditioner.
 
virtual void elasticTangentModuli ()
 calculate the elastic tangent moduli for preconditioner.
 
virtual void elastoPlasticTangentModuli ()
 calculate the exact tangent moduli for preconditioner.
 
bool lineSearchUpdate (const Real rnorm_prev, const RankTwoTensor)
 performs the line search update
 
virtual bool isStateVariablesConverged ()
 evaluates convergence of state variables.
 
virtual void computeQpProperties () override
 

Protected Attributes

std::vector< const CrystalPlasticitySlipRate * > _uo_slip_rates
 User objects that define the slip rate.
 
std::vector< const CrystalPlasticitySlipResistance * > _uo_slip_resistances
 User objects that define the slip resistance.
 
std::vector< const CrystalPlasticityStateVariable * > _uo_state_vars
 User objects that define the state variable.
 
std::vector< const CrystalPlasticityStateVarRateComponent * > _uo_state_var_evol_rate_comps
 User objects that define the state variable evolution rate component.
 
std::vector< MaterialProperty< std::vector< Real > > * > _mat_prop_slip_rates
 Slip rates material property.
 
std::vector< MaterialProperty< std::vector< Real > > * > _mat_prop_slip_resistances
 Slip resistance material property.
 
std::vector< MaterialProperty< std::vector< Real > > * > _mat_prop_state_vars
 State variable material property.
 
std::vector< const MaterialProperty< std::vector< Real > > * > _mat_prop_state_vars_old
 Old state variable material property.
 
std::vector< MaterialProperty< std::vector< Real > > * > _mat_prop_state_var_evol_rate_comps
 State variable evolution rate component material property.
 
unsigned int _num_uo_slip_rates
 Number of slip rate user objects.
 
unsigned int _num_uo_slip_resistances
 Number of slip resistance user objects.
 
unsigned int _num_uo_state_vars
 Number of state variable user objects.
 
unsigned int _num_uo_state_var_evol_rate_comps
 Number of state variable evolution rate component user objects.
 
std::vector< std::vector< Real > > _state_vars_old
 Local state variable.
 
std::vector< std::vector< Real > > _state_vars_old_stored
 Local stored state variable (for sub-stepping)
 
std::vector< std::vector< Real > > _state_vars_prev
 Local old state variable.
 
Real _rtol
 Stress residual equation relative tolerance.
 
Real _abs_tol
 Stress residual equation absolute tolerance.
 
Real _stol
 Internal variable update equation tolerance.
 
Real _zero_tol
 Residual tolerance when variable value is zero. Default 1e-12.
 
RankTwoTensor _resid
 Residual tensor.
 
RankFourTensor _jac
 Jacobian tensor.
 
unsigned int _maxiter
 Maximum number of iterations for stress update.
 
unsigned int _maxiterg
 Maximum number of iterations for internal variable update.
 
MooseEnum _tan_mod_type
 Type of tangent moduli calculation.
 
unsigned int _max_substep_iter
 Maximum number of substep iterations.
 
bool _use_line_search
 Flag to activate line serach.
 
Real _min_lsrch_step
 Minimum line search step size.
 
Real _lsrch_tol
 Line search bisection method tolerance.
 
unsigned int _lsrch_max_iter
 Line search bisection method maximum iteration number.
 
MooseEnum _lsrch_method
 Line search method.
 
MaterialProperty< RankTwoTensor > & _fp
 
const MaterialProperty< RankTwoTensor > & _fp_old
 
MaterialProperty< RankTwoTensor > & _pk2
 
const MaterialProperty< RankTwoTensor > & _pk2_old
 
MaterialProperty< RankTwoTensor > & _lag_e
 
MaterialProperty< RankTwoTensor > & _update_rot
 
const MaterialProperty< RankTwoTensor > & _update_rot_old
 
const std::string _elasticity_tensor_name
 Name of the elasticity tensor material property.
 
const MaterialProperty< RankFourTensor > & _elasticity_tensor
 Elasticity tensor material property.
 
const MaterialProperty< RankTwoTensor > & _deformation_gradient
 
const MaterialProperty< RankTwoTensor > & _deformation_gradient_old
 
const MaterialProperty< RankTwoTensor > & _crysrot
 Crystal rotation.
 
RankTwoTensor _dfgrd_tmp
 
RankTwoTensor _fe
 
RankTwoTensor _fp_old_inv
 
RankTwoTensor _fp_inv
 
DenseVector< Real > _tau
 
std::vector< MaterialProperty< std::vector< RankTwoTensor > > * > _flow_direction
 
bool _err_tol
 Flag to check whether convergence is achieved.
 
RankTwoTensor _delta_dfgrd
 Used for substepping; Uniformly divides the increment in deformation gradient.
 
RankTwoTensor _dfgrd_tmp_old
 
Real _dfgrd_scale_factor
 Scales the substepping increment to obtain deformation gradient at a substep iteration.
 
Real _substep_dt
 Current substep size.
 
const std::string _base_name
 Base name prepended to all material property names to allow for multi-material systems.
 
const MaterialProperty< RankTwoTensor > & _mechanical_strain
 Mechanical strain material property.
 
MaterialProperty< RankTwoTensor > & _stress
 Stress material property.
 
MaterialProperty< RankTwoTensor > & _elastic_strain
 Elastic strain material property.
 
const MaterialProperty< RankTwoTensor > & _extra_stress
 Extra stress tensor.
 
std::vector< const Function * > _initial_stress_fcn
 initial stress components
 
MaterialProperty< RankFourTensor > & _Jacobian_mult
 derivative of stress w.r.t. strain (_dstress_dstrain)
 

Private Member Functions

bool haveMaterialProperty (const std::string &prop_name)
 
std::vector< VariableName > buildVariableVector (const VariableName &c1, const VariableName &c2, const VariableName &c3)
 
void validateCouplingHelper (const MaterialPropertyName &base, const std::vector< VariableName > &c, const System &system, std::vector< VariableName > &missing)
 
bool isNotObjectVariable (const VariableName &name)
 

Private Attributes

FEProblemBase_dmi_fe_problem
 

Detailed Description

FiniteStrainUObasedCP uses the multiplicative decomposition of deformation gradient and solves the PK2 stress residual equation at the intermediate configuration to evolve the material state.

The internal variables are updated using an interative predictor-corrector algorithm. Backward Euler integration rule is used for the rate equations.

Involves 4 different types of user objects that calculates: State variables - update state variable (derive from CrystalPlasticityStateVariable) State variable evolution compoment - individual component of state variable incremental rate (derive from CrystalPlasticityStateVariableEvolutionRateComponent) Slip resistance - calcuate slip resistances (derive from CrystalPlasticitySlipResistances) Slip rates - calcuate flow direction and slip rates (derive from CrystalPlasticitySlipRates)

Definition at line 33 of file FiniteStrainUObasedCP.h.

Constructor & Destructor Documentation

◆ FiniteStrainUObasedCP()

FiniteStrainUObasedCP::FiniteStrainUObasedCP ( const InputParameters parameters)

Definition at line 64 of file FiniteStrainUObasedCP.C.

65 : ComputeStressBase(parameters),
66 _num_uo_slip_rates(parameters.get<std::vector<UserObjectName>>("uo_slip_rates").size()),
68 parameters.get<std::vector<UserObjectName>>("uo_slip_resistances").size()),
69 _num_uo_state_vars(parameters.get<std::vector<UserObjectName>>("uo_state_vars").size()),
71 parameters.get<std::vector<UserObjectName>>("uo_state_var_evol_rate_comps").size()),
72 _rtol(getParam<Real>("rtol")),
73 _abs_tol(getParam<Real>("abs_tol")),
74 _stol(getParam<Real>("stol")),
75 _zero_tol(getParam<Real>("zero_tol")),
76 _maxiter(getParam<unsigned int>("maxiter")),
77 _maxiterg(getParam<unsigned int>("maxiter_state_variable")),
78 _tan_mod_type(getParam<MooseEnum>("tan_mod_type")),
79 _max_substep_iter(getParam<unsigned int>("maximum_substep_iteration")),
80 _use_line_search(getParam<bool>("use_line_search")),
81 _min_lsrch_step(getParam<Real>("min_line_search_step_size")),
82 _lsrch_tol(getParam<Real>("line_search_tol")),
83 _lsrch_max_iter(getParam<unsigned int>("line_search_maxiter")),
84 _lsrch_method(getParam<MooseEnum>("line_search_method")),
85 _fp(declareProperty<RankTwoTensor>("fp")), // Plastic deformation gradient
86 _fp_old(getMaterialPropertyOld<RankTwoTensor>(
87 "fp")), // Plastic deformation gradient of previous increment
88 _pk2(declareProperty<RankTwoTensor>("pk2")), // 2nd Piola-Kirchoff Stress
89 _pk2_old(getMaterialPropertyOld<RankTwoTensor>(
90 "pk2")), // 2nd Piola Kirchoff Stress of previous increment
91 _lag_e(declareProperty<RankTwoTensor>("lage")), // Lagrangian strain
92 _update_rot(declareProperty<RankTwoTensor>(
93 "update_rot")), // Rotation tensor considering material rotation and crystal orientation
94 _update_rot_old(getMaterialPropertyOld<RankTwoTensor>("update_rot")),
95 _elasticity_tensor_name(_base_name + "elasticity_tensor"),
96 _elasticity_tensor(getMaterialPropertyByName<RankFourTensor>(_elasticity_tensor_name)),
97 _deformation_gradient(getMaterialProperty<RankTwoTensor>("deformation_gradient")),
98 _deformation_gradient_old(getMaterialPropertyOld<RankTwoTensor>("deformation_gradient")),
99 _crysrot(getMaterialProperty<RankTwoTensor>("crysrot"))
100{
101 _err_tol = false;
102
103 _delta_dfgrd.zero();
104
105 // resize the material properties for each userobject
111
112 // resize the flow direction
114
115 // resize local state variables
119
120 // resize user objects
125
126 // assign the user objects
127 for (unsigned int i = 0; i < _num_uo_slip_rates; ++i)
128 {
129 _uo_slip_rates[i] = &getUserObjectByName<CrystalPlasticitySlipRate>(
130 parameters.get<std::vector<UserObjectName>>("uo_slip_rates")[i]);
131 _mat_prop_slip_rates[i] = &declareProperty<std::vector<Real>>(
132 parameters.get<std::vector<UserObjectName>>("uo_slip_rates")[i]);
133 _flow_direction[i] = &declareProperty<std::vector<RankTwoTensor>>(
134 parameters.get<std::vector<UserObjectName>>("uo_slip_rates")[i] + "_flow_direction");
135 }
136
137 for (unsigned int i = 0; i < _num_uo_slip_resistances; ++i)
138 {
139 _uo_slip_resistances[i] = &getUserObjectByName<CrystalPlasticitySlipResistance>(
140 parameters.get<std::vector<UserObjectName>>("uo_slip_resistances")[i]);
141 _mat_prop_slip_resistances[i] = &declareProperty<std::vector<Real>>(
142 parameters.get<std::vector<UserObjectName>>("uo_slip_resistances")[i]);
143 }
144
145 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
146 {
147 _uo_state_vars[i] = &getUserObjectByName<CrystalPlasticityStateVariable>(
148 parameters.get<std::vector<UserObjectName>>("uo_state_vars")[i]);
149 _mat_prop_state_vars[i] = &declareProperty<std::vector<Real>>(
150 parameters.get<std::vector<UserObjectName>>("uo_state_vars")[i]);
151 _mat_prop_state_vars_old[i] = &getMaterialPropertyOld<std::vector<Real>>(
152 parameters.get<std::vector<UserObjectName>>("uo_state_vars")[i]);
153 }
154
155 for (unsigned int i = 0; i < _num_uo_state_var_evol_rate_comps; ++i)
156 {
157 _uo_state_var_evol_rate_comps[i] = &getUserObjectByName<CrystalPlasticityStateVarRateComponent>(
158 parameters.get<std::vector<UserObjectName>>("uo_state_var_evol_rate_comps")[i]);
159 _mat_prop_state_var_evol_rate_comps[i] = &declareProperty<std::vector<Real>>(
160 parameters.get<std::vector<UserObjectName>>("uo_state_var_evol_rate_comps")[i]);
161 }
162
163 _substep_dt = 0.0;
164}
const std::string _base_name
Base name prepended to all material property names to allow for multi-material systems.
ComputeStressBase is the base class for stress tensors computed from MOOSE's strain calculators.
std::vector< const CrystalPlasticitySlipRate * > _uo_slip_rates
User objects that define the slip rate.
MaterialProperty< RankTwoTensor > & _lag_e
std::vector< MaterialProperty< std::vector< Real > > * > _mat_prop_state_vars
State variable material property.
const MaterialProperty< RankTwoTensor > & _crysrot
Crystal rotation.
std::vector< std::vector< Real > > _state_vars_old
Local state variable.
MaterialProperty< RankTwoTensor > & _update_rot
unsigned int _num_uo_slip_resistances
Number of slip resistance user objects.
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Elasticity tensor material property.
unsigned int _maxiterg
Maximum number of iterations for internal variable update.
std::vector< const CrystalPlasticityStateVarRateComponent * > _uo_state_var_evol_rate_comps
User objects that define the state variable evolution rate component.
RankTwoTensor _delta_dfgrd
Used for substepping; Uniformly divides the increment in deformation gradient.
unsigned int _max_substep_iter
Maximum number of substep iterations.
bool _err_tol
Flag to check whether convergence is achieved.
const MaterialProperty< RankTwoTensor > & _fp_old
MooseEnum _lsrch_method
Line search method.
Real _min_lsrch_step
Minimum line search step size.
const MaterialProperty< RankTwoTensor > & _pk2_old
MooseEnum _tan_mod_type
Type of tangent moduli calculation.
std::vector< const MaterialProperty< std::vector< Real > > * > _mat_prop_state_vars_old
Old state variable material property.
MaterialProperty< RankTwoTensor > & _pk2
std::vector< MaterialProperty< std::vector< Real > > * > _mat_prop_slip_rates
Slip rates material property.
std::vector< MaterialProperty< std::vector< RankTwoTensor > > * > _flow_direction
Real _rtol
Stress residual equation relative tolerance.
const MaterialProperty< RankTwoTensor > & _deformation_gradient_old
std::vector< std::vector< Real > > _state_vars_prev
Local old state variable.
bool _use_line_search
Flag to activate line serach.
Real _substep_dt
Current substep size.
std::vector< const CrystalPlasticitySlipResistance * > _uo_slip_resistances
User objects that define the slip resistance.
std::vector< const CrystalPlasticityStateVariable * > _uo_state_vars
User objects that define the state variable.
const MaterialProperty< RankTwoTensor > & _deformation_gradient
unsigned int _num_uo_state_vars
Number of state variable user objects.
std::vector< MaterialProperty< std::vector< Real > > * > _mat_prop_slip_resistances
Slip resistance material property.
std::vector< MaterialProperty< std::vector< Real > > * > _mat_prop_state_var_evol_rate_comps
State variable evolution rate component material property.
Real _lsrch_tol
Line search bisection method tolerance.
Real _zero_tol
Residual tolerance when variable value is zero. Default 1e-12.
std::vector< std::vector< Real > > _state_vars_old_stored
Local stored state variable (for sub-stepping)
Real _abs_tol
Stress residual equation absolute tolerance.
MaterialProperty< RankTwoTensor > & _fp
const std::string _elasticity_tensor_name
Name of the elasticity tensor material property.
const MaterialProperty< RankTwoTensor > & _update_rot_old
unsigned int _num_uo_slip_rates
Number of slip rate user objects.
unsigned int _maxiter
Maximum number of iterations for stress update.
Real _stol
Internal variable update equation tolerance.
unsigned int _lsrch_max_iter
Line search bisection method maximum iteration number.
unsigned int _num_uo_state_var_evol_rate_comps
Number of state variable evolution rate component user objects.
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const

Member Function Documentation

◆ calcJacobian()

void FiniteStrainUObasedCP::calcJacobian ( )
protectedvirtual

calculate jacobian.

Definition at line 541 of file FiniteStrainUObasedCP.C.

542{
543 RankFourTensor dfedfpinv, deedfe, dfpinvdpk2;
544
545 for (const auto i : make_range(Moose::dim))
546 for (const auto j : make_range(Moose::dim))
547 for (const auto k : make_range(Moose::dim))
548 dfedfpinv(i, j, k, j) = _dfgrd_tmp(i, k);
549
550 for (const auto i : make_range(Moose::dim))
551 for (const auto j : make_range(Moose::dim))
552 for (const auto k : make_range(Moose::dim))
553 {
554 deedfe(i, j, k, i) = deedfe(i, j, k, i) + _fe(k, j) * 0.5;
555 deedfe(i, j, k, j) = deedfe(i, j, k, j) + _fe(k, i) * 0.5;
556 }
557
558 for (unsigned int i = 0; i < _num_uo_slip_rates; ++i)
559 {
560 unsigned int nss = _uo_slip_rates[i]->variableSize();
561 std::vector<RankTwoTensor> dtaudpk2(nss), dfpinvdslip(nss);
562 std::vector<Real> dslipdtau;
563 dslipdtau.resize(nss);
564 _uo_slip_rates[i]->calcSlipRateDerivative(_qp, _substep_dt, dslipdtau);
565 for (unsigned int j = 0; j < nss; j++)
566 {
567 dtaudpk2[j] = (*_flow_direction[i])[_qp][j];
568 dfpinvdslip[j] = -_fp_old_inv * (*_flow_direction[i])[_qp][j];
569 dfpinvdpk2 += (dfpinvdslip[j] * dslipdtau[j] * _substep_dt).outerProduct(dtaudpk2[j]);
570 }
571 }
572 _jac =
573 RankFourTensor::IdentityFour() - (_elasticity_tensor[_qp] * deedfe * dfedfpinv * dfpinvdpk2);
574}
for(PetscInt i=0;i< nvars;++i)
unsigned int dim
RankFourTensor _jac
Jacobian tensor.
static RankFourTensorTempl< T > IdentityFour()
IntRange< T > make_range(T beg, T end)

Referenced by calcResidJacob().

◆ calcResidJacob()

void FiniteStrainUObasedCP::calcResidJacob ( )
protectedvirtual

calls the residual and jacobian functions used in the stress update algorithm.

Definition at line 492 of file FiniteStrainUObasedCP.C.

493{
494 calcResidual();
495 if (_err_tol)
496 return;
497 calcJacobian();
498}
virtual void calcResidual()
calculate stress residual.
virtual void calcJacobian()
calculate jacobian.

Referenced by solveStress().

◆ calcResidual()

void FiniteStrainUObasedCP::calcResidual ( )
protectedvirtual

calculate stress residual.

Definition at line 514 of file FiniteStrainUObasedCP.C.

515{
516 RankTwoTensor iden(RankTwoTensor::initIdentity), ce, ee, ce_pk2, eqv_slip_incr, pk2_new;
517
518 getSlipRates();
519 if (_err_tol)
520 return;
521
522 for (unsigned int i = 0; i < _num_uo_slip_rates; ++i)
523 for (unsigned int j = 0; j < _uo_slip_rates[i]->variableSize(); ++j)
524 eqv_slip_incr +=
525 (*_flow_direction[i])[_qp][j] * (*_mat_prop_slip_rates[i])[_qp][j] * _substep_dt;
526
527 eqv_slip_incr = iden - eqv_slip_incr;
528 _fp_inv = _fp_old_inv * eqv_slip_incr;
530
531 ce = _fe.transpose() * _fe;
532 ee = ce - iden;
533 ee *= 0.5;
534
535 pk2_new = _elasticity_tensor[_qp] * ee;
536
537 _resid = _pk2[_qp] - pk2_new;
538}
virtual void getSlipRates()
updates the slip rates.
RankTwoTensor _resid
Residual tensor.
RankTwoTensorTempl< T > transpose() const

Referenced by calcResidJacob(), and lineSearchUpdate().

◆ calcTangentModuli()

void FiniteStrainUObasedCP::calcTangentModuli ( )
protectedvirtual

calculate the tangent moduli for preconditioner.

Default is the elastic stiffness matrix. Exact jacobian is currently implemented. tan_mod_type can be modified to exact in .i file to turn it on.

Definition at line 577 of file FiniteStrainUObasedCP.C.

578{
579 switch (_tan_mod_type)
580 {
581 case 0:
583 break;
584 default:
586 }
587}
virtual void elastoPlasticTangentModuli()
calculate the exact tangent moduli for preconditioner.
virtual void elasticTangentModuli()
calculate the elastic tangent moduli for preconditioner.

Referenced by postSolveQp().

◆ computeQpProperties()

void ComputeGeneralStressBase::computeQpProperties ( )
overrideprotectedvirtualinherited

Definition at line 44 of file ComputeGeneralStressBase.C.

45{
47
48 // Add in extra stress
49 _stress[_qp] += _extra_stress[_qp];
50}
const MaterialProperty< RankTwoTensor > & _extra_stress
Extra stress tensor.
virtual void computeQpStress()=0
Compute the stress and store it in the _stress material property for the current quadrature point.
MaterialProperty< RankTwoTensor > & _stress
Stress material property.

◆ computeQpStress()

void FiniteStrainUObasedCP::computeQpStress ( )
protectedvirtual

updates the stress at a quadrature point.

Solves stress residual equation using NR.

Updates slip system resistances iteratively.

Implements ComputeGeneralStressBase.

Definition at line 207 of file FiniteStrainUObasedCP.C.

208{
209 // Userobject based crystal plasticity does not support face/boundary material property
210 // calculation.
211 if (isBoundaryMaterial())
212 return;
213 // Depth of substepping; Limited to maximum substep iteration
214 unsigned int substep_iter = 1;
215 // Calculated from substep_iter as 2^substep_iter
216 unsigned int num_substep = 1;
217
219 if (_dfgrd_tmp_old.det() == 0)
221
223
224 // Saves the old stateful properties that are modified during sub stepping
225 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
227
228 for (unsigned int i = 0; i < _num_uo_slip_rates; ++i)
229 _uo_slip_rates[i]->calcFlowDirection(_qp, (*_flow_direction[i])[_qp]);
230
231 do
232 {
233 _err_tol = false;
234
235 preSolveQp();
236
237 _substep_dt = _dt / num_substep;
238
239 for (unsigned int istep = 0; istep < num_substep; ++istep)
240 {
241 _dfgrd_tmp = (static_cast<Real>(istep) + 1) / num_substep * _delta_dfgrd + _dfgrd_tmp_old;
242
243 solveQp();
244
245 if (_err_tol)
246 {
247 substep_iter++;
248 num_substep *= 2;
249 break;
250 }
251 }
252
253 if (substep_iter > _max_substep_iter && _err_tol)
254 throw MooseException("FiniteStrainUObasedCP: Constitutive failure.");
255 } while (_err_tol);
256
257 postSolveQp();
258}
virtual void postSolveQp()
update stress and internal variable after solve.
virtual void preSolveQp()
set variables for stress and internal variable solve.
virtual void solveQp()
solve stress and internal variables.
void addIa(const T &a)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ elasticTangentModuli()

void FiniteStrainUObasedCP::elasticTangentModuli ( )
protectedvirtual

calculate the elastic tangent moduli for preconditioner.

Definition at line 634 of file FiniteStrainUObasedCP.C.

635{
636 // update jacobian_mult
638}
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)

Referenced by calcTangentModuli().

◆ elastoPlasticTangentModuli()

void FiniteStrainUObasedCP::elastoPlasticTangentModuli ( )
protectedvirtual

calculate the exact tangent moduli for preconditioner.

Definition at line 590 of file FiniteStrainUObasedCP.C.

591{
592 RankFourTensor tan_mod;
593 RankTwoTensor pk2fet, fepk2;
594 RankFourTensor deedfe, dsigdpk2dfe, dfedf;
595
596 // Fill in the matrix stiffness material property
597 for (const auto i : make_range(Moose::dim))
598 for (const auto j : make_range(Moose::dim))
599 for (const auto k : make_range(Moose::dim))
600 {
601 deedfe(i, j, k, i) = deedfe(i, j, k, i) + _fe(k, j) * 0.5;
602 deedfe(i, j, k, j) = deedfe(i, j, k, j) + _fe(k, i) * 0.5;
603 }
604
605 usingTensorIndices(i_, j_, k_, l_);
606 dsigdpk2dfe = _fe.times<i_, k_, j_, l_>(_fe) * _elasticity_tensor[_qp] * deedfe;
607
608 pk2fet = _pk2[_qp] * _fe.transpose();
609 fepk2 = _fe * _pk2[_qp];
610
611 for (const auto i : make_range(Moose::dim))
612 for (const auto j : make_range(Moose::dim))
613 for (const auto l : make_range(Moose::dim))
614 {
615 tan_mod(i, j, i, l) += pk2fet(l, j);
616 tan_mod(i, j, j, l) += fepk2(i, l);
617 }
618
619 tan_mod += dsigdpk2dfe;
620
621 Real je = _fe.det();
622 if (je > 0.0)
623 tan_mod /= je;
624
625 for (const auto i : make_range(Moose::dim))
626 for (const auto j : make_range(Moose::dim))
627 for (const auto l : make_range(Moose::dim))
628 dfedf(i, j, i, l) = _fp_inv(l, j);
629
630 _Jacobian_mult[_qp] = tan_mod * dfedf;
631}
RankFourTensorTempl< T > times(const RankTwoTensorTempl< T > &b) const

Referenced by calcTangentModuli().

◆ getSlipRates()

void FiniteStrainUObasedCP::getSlipRates ( )
protectedvirtual

updates the slip rates.

Definition at line 501 of file FiniteStrainUObasedCP.C.

502{
503 for (unsigned int i = 0; i < _num_uo_slip_rates; ++i)
504 {
505 if (!_uo_slip_rates[i]->calcSlipRate(_qp, _substep_dt, (*_mat_prop_slip_rates[i])[_qp]))
506 {
507 _err_tol = true;
508 return;
509 }
510 }
511}

Referenced by calcResidual().

◆ initQpStatefulProperties()

void FiniteStrainUObasedCP::initQpStatefulProperties ( )
protectedvirtual

initializes the stateful properties such as stress, plastic deformation gradient, slip system resistances, etc.

Reimplemented from ComputeGeneralStressBase.

Definition at line 167 of file FiniteStrainUObasedCP.C.

168{
169 for (unsigned int i = 0; i < _num_uo_slip_rates; ++i)
170 {
171 (*_mat_prop_slip_rates[i])[_qp].resize(_uo_slip_rates[i]->variableSize());
172 (*_flow_direction[i])[_qp].resize(_uo_slip_rates[i]->variableSize());
173 }
174
175 for (unsigned int i = 0; i < _num_uo_slip_resistances; ++i)
176 (*_mat_prop_slip_resistances[i])[_qp].resize(_uo_slip_resistances[i]->variableSize());
177
178 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
179 {
180 (*_mat_prop_state_vars[i])[_qp].resize(_uo_state_vars[i]->variableSize());
181 _state_vars_old[i].resize(_uo_state_vars[i]->variableSize());
182 _state_vars_old_stored[i].resize(_uo_state_vars[i]->variableSize());
183 _state_vars_prev[i].resize(_uo_state_vars[i]->variableSize());
184 }
185
186 for (unsigned int i = 0; i < _num_uo_state_var_evol_rate_comps; ++i)
187 (*_mat_prop_state_var_evol_rate_comps[i])[_qp].resize(
188 _uo_state_var_evol_rate_comps[i]->variableSize());
189
190 _stress[_qp].zero();
191 _pk2[_qp].zero();
192 _lag_e[_qp].zero();
193
194 _fp[_qp].setToIdentity();
195 _update_rot[_qp].setToIdentity();
196
197 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
198 // Initializes slip system related properties
199 _uo_state_vars[i]->initSlipSysProps((*_mat_prop_state_vars[i])[_qp], _q_point[_qp]);
200}

◆ isStateVariablesConverged()

bool FiniteStrainUObasedCP::isStateVariablesConverged ( )
protectedvirtual

evaluates convergence of state variables.

Definition at line 349 of file FiniteStrainUObasedCP.C.

350{
351 Real diff;
352
353 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
354 {
355 unsigned int n = (*_mat_prop_state_vars[i])[_qp].size();
356 for (unsigned j = 0; j < n; j++)
357 {
358 diff = std::abs((*_mat_prop_state_vars[i])[_qp][j] - _state_vars_prev[i][j]);
359
360 if (std::abs(_state_vars_old_stored[i][j]) < _zero_tol && diff > _zero_tol)
361 return true;
362 if (std::abs(_state_vars_old_stored[i][j]) > _zero_tol &&
363 diff > _stol * std::abs(_state_vars_old_stored[i][j]))
364 return true;
365 }
366 }
367 return false;
368}

Referenced by solveStatevar().

◆ lineSearchUpdate()

bool FiniteStrainUObasedCP::lineSearchUpdate ( const Real  rnorm_prev,
const RankTwoTensor  dpk2 
)
protected

performs the line search update

Definition at line 641 of file FiniteStrainUObasedCP.C.

642{
643 switch (_lsrch_method)
644 {
645 case 0: // CUT_HALF
646 {
647 Real rnorm;
648 Real step = 1.0;
649
650 do
651 {
652 _pk2[_qp] = _pk2[_qp] - step * dpk2;
653 step /= 2.0;
654 _pk2[_qp] = _pk2[_qp] + step * dpk2;
655
656 calcResidual();
657 rnorm = _resid.L2norm();
658 } while (rnorm > rnorm_prev && step > _min_lsrch_step);
659
660 // has norm improved or is the step still above minumum search step size?
661 return (rnorm <= rnorm_prev || step > _min_lsrch_step);
662 }
663
664 case 1: // BISECTION
665 {
666 unsigned int count = 0;
667 Real step_a = 0.0;
668 Real step_b = 1.0;
669 Real step = 1.0;
670 Real s_m = 1000.0;
671 Real rnorm = 1000.0;
672
673 calcResidual();
674 Real s_b = _resid.doubleContraction(dpk2);
675 Real rnorm1 = _resid.L2norm();
676 _pk2[_qp] = _pk2[_qp] - dpk2;
677 calcResidual();
678 Real s_a = _resid.doubleContraction(dpk2);
679 Real rnorm0 = _resid.L2norm();
680 _pk2[_qp] = _pk2[_qp] + dpk2;
681
682 if ((rnorm1 / rnorm0) < _lsrch_tol || s_a * s_b > 0)
683 {
684 calcResidual();
685 return true;
686 }
687
688 while ((rnorm / rnorm0) > _lsrch_tol && count < _lsrch_max_iter)
689 {
690 _pk2[_qp] = _pk2[_qp] - step * dpk2;
691 step = 0.5 * (step_b + step_a);
692 _pk2[_qp] = _pk2[_qp] + step * dpk2;
693 calcResidual();
694 s_m = _resid.doubleContraction(dpk2);
695 rnorm = _resid.L2norm();
696
697 if (s_m * s_a < 0.0)
698 {
699 step_b = step;
700 s_b = s_m;
701 }
702 if (s_m * s_b < 0.0)
703 {
704 step_a = step;
705 s_a = s_m;
706 }
707 count++;
708 }
709
710 // below tolerance and max iterations?
711 return ((rnorm / rnorm0) < _lsrch_tol && count < _lsrch_max_iter);
712 }
713
714 default:
715 mooseError("Line search method is not provided.");
716 }
717}
void mooseError(Args &&... args)
unsigned int count
T doubleContraction(const RankTwoTensorTempl< T > &a) const

Referenced by solveStress().

◆ postSolveQp()

void FiniteStrainUObasedCP::postSolveQp ( )
protectedvirtual

update stress and internal variable after solve.

Definition at line 282 of file FiniteStrainUObasedCP.C.

283{
284 _stress[_qp] = _fe * _pk2[_qp] * _fe.transpose() / _fe.det();
285
286 // Calculate jacobian for preconditioner
288
290
291 _lag_e[_qp] = _deformation_gradient[_qp].transpose() * _deformation_gradient[_qp] - iden;
292 _lag_e[_qp] = _lag_e[_qp] * 0.5;
293
294 RankTwoTensor rot;
295 // Calculate material rotation
297 _update_rot[_qp] = rot * _crysrot[_qp];
298}
virtual void calcTangentModuli()
calculate the tangent moduli for preconditioner.
void getRUDecompositionRotation(RankTwoTensorTempl< T > &rot) const

Referenced by computeQpStress().

◆ postSolveStatevar()

void FiniteStrainUObasedCP::postSolveStatevar ( )
protectedvirtual

update internal variable after solve.

Definition at line 371 of file FiniteStrainUObasedCP.C.

372{
373 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
375
377}

Referenced by solveQp().

◆ postSolveStress()

void FiniteStrainUObasedCP::postSolveStress ( )
protectedvirtual

update stress and plastic deformation gradient after solve.

Definition at line 464 of file FiniteStrainUObasedCP.C.

465{
466 _fp[_qp] = _fp_inv.inverse();
467}
RankTwoTensorTempl< T > inverse() const

Referenced by solveStatevar().

◆ preSolveQp()

void FiniteStrainUObasedCP::preSolveQp ( )
protectedvirtual

set variables for stress and internal variable solve.

Definition at line 261 of file FiniteStrainUObasedCP.C.

262{
263 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
265
266 _pk2[_qp] = _pk2_old[_qp];
267 _fp_old_inv = _fp_old[_qp].inverse();
268}

Referenced by computeQpStress().

◆ preSolveStatevar()

void FiniteStrainUObasedCP::preSolveStatevar ( )
protectedvirtual

set variables for internal variable solve.

Definition at line 301 of file FiniteStrainUObasedCP.C.

302{
303 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
305
306 for (unsigned int i = 0; i < _num_uo_slip_resistances; ++i)
307 _uo_slip_resistances[i]->calcSlipResistance(_qp, (*_mat_prop_slip_resistances[i])[_qp]);
308
310}

Referenced by solveQp().

◆ preSolveStress()

void FiniteStrainUObasedCP::preSolveStress ( )
protectedvirtual

set variables for stress solve.

Definition at line 380 of file FiniteStrainUObasedCP.C.

381{
382}

Referenced by solveStatevar().

◆ solveQp()

void FiniteStrainUObasedCP::solveQp ( )
protectedvirtual

solve stress and internal variables.

Definition at line 271 of file FiniteStrainUObasedCP.C.

272{
275 if (_err_tol)
276 return;
277
279}
virtual void preSolveStatevar()
set variables for internal variable solve.
virtual void solveStatevar()
solve internal variables.
virtual void postSolveStatevar()
update internal variable after solve.

Referenced by computeQpStress().

◆ solveStatevar()

void FiniteStrainUObasedCP::solveStatevar ( )
protectedvirtual

solve internal variables.

Definition at line 313 of file FiniteStrainUObasedCP.C.

314{
315 unsigned int iterg;
316 bool iter_flag = true;
317
318 iterg = 0;
319 // Check for slip system resistance update tolerance
320 while (iter_flag && iterg < _maxiterg)
321 {
323 solveStress();
324 if (_err_tol)
325 return;
326
328
329 // Update slip system resistance and state variable
331
332 if (_err_tol)
333 return;
334
335 iter_flag = isStateVariablesConverged();
336 iterg++;
337 }
338
339 if (iterg == _maxiterg)
340 {
341#ifdef DEBUG
342 mooseWarning("FiniteStrainUObasedCP: Hardness Integration error\n");
343#endif
344 _err_tol = true;
345 }
346}
void mooseWarning(Args &&... args)
virtual void postSolveStress()
update stress and plastic deformation gradient after solve.
virtual void solveStress()
solves for stress, updates plastic deformation gradient.
virtual bool isStateVariablesConverged()
evaluates convergence of state variables.
virtual void updateSlipSystemResistanceAndStateVariable()
updates the slip system resistances and state variables.
virtual void preSolveStress()
set variables for stress solve.

Referenced by solveQp().

◆ solveStress()

void FiniteStrainUObasedCP::solveStress ( )
protectedvirtual

solves for stress, updates plastic deformation gradient.

Definition at line 385 of file FiniteStrainUObasedCP.C.

386{
387 unsigned int iter = 0;
388 RankTwoTensor dpk2;
389 Real rnorm, rnorm0, rnorm_prev;
390
391 // Calculate stress residual
393 if (_err_tol)
394 {
395#ifdef DEBUG
396 mooseWarning("FiniteStrainUObasedCP: Slip increment exceeds tolerance - Element number ",
397 _current_elem->id(),
398 " Gauss point = ",
399 _qp);
400#endif
401 return;
402 }
403
404 rnorm = _resid.L2norm();
405 rnorm0 = rnorm;
406
407 // Check for stress residual tolerance
408 while (rnorm > _rtol * rnorm0 && rnorm0 > _abs_tol && iter < _maxiter)
409 {
410 // Calculate stress increment
411 dpk2 = -_jac.invSymm() * _resid;
412 _pk2[_qp] = _pk2[_qp] + dpk2;
413
415
416 if (_err_tol)
417 {
418#ifdef DEBUG
419 mooseWarning("FiniteStrainUObasedCP: Slip increment exceeds tolerance - Element number ",
420 _current_elem->id(),
421 " Gauss point = ",
422 _qp);
423#endif
424 return;
425 }
426
427 rnorm_prev = rnorm;
428 rnorm = _resid.L2norm();
429
430 if (_use_line_search && rnorm > rnorm_prev && !lineSearchUpdate(rnorm_prev, dpk2))
431 {
432#ifdef DEBUG
433 mooseWarning("FiniteStrainUObasedCP: Failed with line search");
434#endif
435 _err_tol = true;
436 return;
437 }
438
440 rnorm = _resid.L2norm();
441
442 iter++;
443 }
444
445 if (iter >= _maxiter)
446 {
447#ifdef DEBUG
448 mooseWarning("FiniteStrainUObasedCP: Stress Integration error rmax = ",
449 rnorm,
450 " and the tolerance is ",
451 _rtol * rnorm0,
452 " when the rnorm0 value is ",
453 rnorm0,
454 " for element ",
455 _current_elem->id(),
456 " and qp ",
457 _qp);
458#endif
459 _err_tol = true;
460 }
461}
virtual void calcResidJacob()
calls the residual and jacobian functions used in the stress update algorithm.
bool lineSearchUpdate(const Real rnorm_prev, const RankTwoTensor)
performs the line search update
RankFourTensorTempl< T > invSymm() const

Referenced by solveStatevar().

◆ updateSlipSystemResistanceAndStateVariable()

void FiniteStrainUObasedCP::updateSlipSystemResistanceAndStateVariable ( )
protectedvirtual

updates the slip system resistances and state variables.

override to modify slip system resistance and state variable evolution.

Definition at line 470 of file FiniteStrainUObasedCP.C.

471{
472 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
474
475 for (unsigned int i = 0; i < _num_uo_state_var_evol_rate_comps; ++i)
476 _uo_state_var_evol_rate_comps[i]->calcStateVariableEvolutionRateComponent(
478
479 for (unsigned int i = 0; i < _num_uo_state_vars; ++i)
480 {
481 if (!_uo_state_vars[i]->updateStateVariable(
483 _err_tol = true;
484 }
485
486 for (unsigned int i = 0; i < _num_uo_slip_resistances; ++i)
487 _uo_slip_resistances[i]->calcSlipResistance(_qp, (*_mat_prop_slip_resistances[i])[_qp]);
488}

Referenced by solveStatevar().

◆ validParams()

InputParameters FiniteStrainUObasedCP::validParams ( )
static

Definition at line 21 of file FiniteStrainUObasedCP.C.

22{
24 params.addClassDescription("UserObject based Crystal Plasticity system.");
25 params.addParam<Real>("rtol", 1e-6, "Constitutive stress residue relative tolerance");
26 params.addParam<Real>("abs_tol", 1e-6, "Constitutive stress residue absolute tolerance");
27 params.addParam<Real>(
28 "stol", 1e-2, "Constitutive slip system resistance relative residual tolerance");
29 params.addParam<Real>(
30 "zero_tol", 1e-12, "Tolerance for residual check when variable value is zero");
31 params.addParam<unsigned int>("maxiter", 100, "Maximum number of iterations for stress update");
32 params.addParam<unsigned int>(
33 "maxiter_state_variable", 100, "Maximum number of iterations for state variable update");
34 MooseEnum tan_mod_options("exact none", "none"); // Type of read
35 params.addParam<MooseEnum>("tan_mod_type",
36 tan_mod_options,
37 "Type of tangent moduli for preconditioner: default elastic");
38 params.addParam<unsigned int>(
39 "maximum_substep_iteration", 1, "Maximum number of substep iteration");
40 params.addParam<bool>("use_line_search", false, "Use line search in constitutive update");
41 params.addParam<Real>("min_line_search_step_size", 0.01, "Minimum line search step size");
42 params.addParam<Real>("line_search_tol", 0.5, "Line search bisection method tolerance");
43 params.addParam<unsigned int>(
44 "line_search_maxiter", 20, "Line search bisection method maximum number of iteration");
45 MooseEnum line_search_method("CUT_HALF BISECTION", "CUT_HALF");
46 params.addParam<MooseEnum>(
47 "line_search_method", line_search_method, "The method used in line search");
48 params.addRequiredParam<std::vector<UserObjectName>>(
49 "uo_slip_rates",
50 "List of names of user objects that define the slip rates for this material.");
51 params.addRequiredParam<std::vector<UserObjectName>>(
52 "uo_slip_resistances",
53 "List of names of user objects that define the slip resistances for this material.");
54 params.addRequiredParam<std::vector<UserObjectName>>(
55 "uo_state_vars",
56 "List of names of user objects that define the state variable for this material.");
57 params.addRequiredParam<std::vector<UserObjectName>>(
58 "uo_state_var_evol_rate_comps",
59 "List of names of user objects that define the state "
60 "variable evolution rate components for this material.");
61 return params;
62}
static InputParameters validParams()
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _abs_tol

Real FiniteStrainUObasedCP::_abs_tol
protected

Stress residual equation absolute tolerance.

Definition at line 203 of file FiniteStrainUObasedCP.h.

Referenced by solveStress().

◆ _base_name

const std::string ComputeGeneralStressBase::_base_name
protectedinherited

Base name prepended to all material property names to allow for multi-material systems.

Definition at line 43 of file ComputeGeneralStressBase.h.

Referenced by ComputeCosseratLinearElasticStress::initialSetup(), and ComputeLinearElasticStress::initialSetup().

◆ _crysrot

const MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_crysrot
protected

Crystal rotation.

Definition at line 257 of file FiniteStrainUObasedCP.h.

Referenced by postSolveQp().

◆ _deformation_gradient

const MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_deformation_gradient
protected

Definition at line 253 of file FiniteStrainUObasedCP.h.

Referenced by computeQpStress(), and postSolveQp().

◆ _deformation_gradient_old

const MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_deformation_gradient_old
protected

Definition at line 254 of file FiniteStrainUObasedCP.h.

Referenced by computeQpStress().

◆ _delta_dfgrd

RankTwoTensor FiniteStrainUObasedCP::_delta_dfgrd
protected

Used for substepping; Uniformly divides the increment in deformation gradient.

Definition at line 268 of file FiniteStrainUObasedCP.h.

Referenced by computeQpStress(), and FiniteStrainUObasedCP().

◆ _dfgrd_scale_factor

Real FiniteStrainUObasedCP::_dfgrd_scale_factor
protected

Scales the substepping increment to obtain deformation gradient at a substep iteration.

Definition at line 270 of file FiniteStrainUObasedCP.h.

◆ _dfgrd_tmp

RankTwoTensor FiniteStrainUObasedCP::_dfgrd_tmp
protected

Definition at line 259 of file FiniteStrainUObasedCP.h.

Referenced by calcJacobian(), calcResidual(), and computeQpStress().

◆ _dfgrd_tmp_old

RankTwoTensor FiniteStrainUObasedCP::_dfgrd_tmp_old
protected

Definition at line 268 of file FiniteStrainUObasedCP.h.

Referenced by computeQpStress().

◆ _elastic_strain

MaterialProperty<RankTwoTensor>& ComputeGeneralStressBase::_elastic_strain
protectedinherited

◆ _elasticity_tensor

const MaterialProperty<RankFourTensor>& FiniteStrainUObasedCP::_elasticity_tensor
protected

Elasticity tensor material property.

Definition at line 252 of file FiniteStrainUObasedCP.h.

Referenced by calcJacobian(), calcResidual(), elasticTangentModuli(), and elastoPlasticTangentModuli().

◆ _elasticity_tensor_name

const std::string FiniteStrainUObasedCP::_elasticity_tensor_name
protected

Name of the elasticity tensor material property.

Definition at line 250 of file FiniteStrainUObasedCP.h.

◆ _err_tol

bool FiniteStrainUObasedCP::_err_tol
protected

◆ _extra_stress

const MaterialProperty<RankTwoTensor>& ComputeGeneralStressBase::_extra_stress
protectedinherited

Extra stress tensor.

Definition at line 53 of file ComputeGeneralStressBase.h.

Referenced by ComputeGeneralStressBase::computeQpProperties().

◆ _fe

RankTwoTensor FiniteStrainUObasedCP::_fe
protected

◆ _flow_direction

std::vector<MaterialProperty<std::vector<RankTwoTensor> > *> FiniteStrainUObasedCP::_flow_direction
protected

◆ _fp

MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_fp
protected

Definition at line 241 of file FiniteStrainUObasedCP.h.

Referenced by initQpStatefulProperties(), and postSolveStress().

◆ _fp_inv

RankTwoTensor FiniteStrainUObasedCP::_fp_inv
protected

◆ _fp_old

const MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_fp_old
protected

Definition at line 242 of file FiniteStrainUObasedCP.h.

Referenced by preSolveQp().

◆ _fp_old_inv

RankTwoTensor FiniteStrainUObasedCP::_fp_old_inv
protected

◆ _initial_stress_fcn

std::vector<const Function *> ComputeGeneralStressBase::_initial_stress_fcn
protectedinherited

initial stress components

Definition at line 56 of file ComputeGeneralStressBase.h.

◆ _jac

RankFourTensor FiniteStrainUObasedCP::_jac
protected

Jacobian tensor.

Definition at line 213 of file FiniteStrainUObasedCP.h.

Referenced by calcJacobian(), and solveStress().

◆ _Jacobian_mult

MaterialProperty<RankFourTensor>& ComputeGeneralStressBase::_Jacobian_mult
protectedinherited

◆ _lag_e

MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_lag_e
protected

Definition at line 245 of file FiniteStrainUObasedCP.h.

Referenced by initQpStatefulProperties(), and postSolveQp().

◆ _lsrch_max_iter

unsigned int FiniteStrainUObasedCP::_lsrch_max_iter
protected

Line search bisection method maximum iteration number.

Definition at line 236 of file FiniteStrainUObasedCP.h.

Referenced by lineSearchUpdate().

◆ _lsrch_method

MooseEnum FiniteStrainUObasedCP::_lsrch_method
protected

Line search method.

Definition at line 239 of file FiniteStrainUObasedCP.h.

Referenced by lineSearchUpdate().

◆ _lsrch_tol

Real FiniteStrainUObasedCP::_lsrch_tol
protected

Line search bisection method tolerance.

Definition at line 233 of file FiniteStrainUObasedCP.h.

Referenced by lineSearchUpdate().

◆ _mat_prop_slip_rates

std::vector<MaterialProperty<std::vector<Real> > *> FiniteStrainUObasedCP::_mat_prop_slip_rates
protected

Slip rates material property.

Definition at line 165 of file FiniteStrainUObasedCP.h.

Referenced by calcResidual(), FiniteStrainUObasedCP(), getSlipRates(), and initQpStatefulProperties().

◆ _mat_prop_slip_resistances

std::vector<MaterialProperty<std::vector<Real> > *> FiniteStrainUObasedCP::_mat_prop_slip_resistances
protected

Slip resistance material property.

Definition at line 168 of file FiniteStrainUObasedCP.h.

Referenced by FiniteStrainUObasedCP(), initQpStatefulProperties(), preSolveStatevar(), and updateSlipSystemResistanceAndStateVariable().

◆ _mat_prop_state_var_evol_rate_comps

std::vector<MaterialProperty<std::vector<Real> > *> FiniteStrainUObasedCP::_mat_prop_state_var_evol_rate_comps
protected

State variable evolution rate component material property.

Definition at line 177 of file FiniteStrainUObasedCP.h.

Referenced by FiniteStrainUObasedCP(), initQpStatefulProperties(), and updateSlipSystemResistanceAndStateVariable().

◆ _mat_prop_state_vars

std::vector<MaterialProperty<std::vector<Real> > *> FiniteStrainUObasedCP::_mat_prop_state_vars
protected

◆ _mat_prop_state_vars_old

std::vector<const MaterialProperty<std::vector<Real> > *> FiniteStrainUObasedCP::_mat_prop_state_vars_old
protected

Old state variable material property.

Definition at line 174 of file FiniteStrainUObasedCP.h.

Referenced by computeQpStress(), and FiniteStrainUObasedCP().

◆ _max_substep_iter

unsigned int FiniteStrainUObasedCP::_max_substep_iter
protected

Maximum number of substep iterations.

Definition at line 224 of file FiniteStrainUObasedCP.h.

Referenced by computeQpStress().

◆ _maxiter

unsigned int FiniteStrainUObasedCP::_maxiter
protected

Maximum number of iterations for stress update.

Definition at line 216 of file FiniteStrainUObasedCP.h.

Referenced by solveStress().

◆ _maxiterg

unsigned int FiniteStrainUObasedCP::_maxiterg
protected

Maximum number of iterations for internal variable update.

Definition at line 218 of file FiniteStrainUObasedCP.h.

Referenced by solveStatevar().

◆ _mechanical_strain

const MaterialProperty<RankTwoTensor>& ComputeGeneralStressBase::_mechanical_strain
protectedinherited

◆ _min_lsrch_step

Real FiniteStrainUObasedCP::_min_lsrch_step
protected

Minimum line search step size.

Definition at line 230 of file FiniteStrainUObasedCP.h.

Referenced by lineSearchUpdate().

◆ _num_uo_slip_rates

unsigned int FiniteStrainUObasedCP::_num_uo_slip_rates
protected

Number of slip rate user objects.

Definition at line 180 of file FiniteStrainUObasedCP.h.

Referenced by calcJacobian(), calcResidual(), computeQpStress(), FiniteStrainUObasedCP(), getSlipRates(), and initQpStatefulProperties().

◆ _num_uo_slip_resistances

unsigned int FiniteStrainUObasedCP::_num_uo_slip_resistances
protected

Number of slip resistance user objects.

Definition at line 183 of file FiniteStrainUObasedCP.h.

Referenced by FiniteStrainUObasedCP(), initQpStatefulProperties(), preSolveStatevar(), and updateSlipSystemResistanceAndStateVariable().

◆ _num_uo_state_var_evol_rate_comps

unsigned int FiniteStrainUObasedCP::_num_uo_state_var_evol_rate_comps
protected

Number of state variable evolution rate component user objects.

Definition at line 189 of file FiniteStrainUObasedCP.h.

Referenced by FiniteStrainUObasedCP(), initQpStatefulProperties(), and updateSlipSystemResistanceAndStateVariable().

◆ _num_uo_state_vars

unsigned int FiniteStrainUObasedCP::_num_uo_state_vars
protected

◆ _pk2

MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_pk2
protected

◆ _pk2_old

const MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_pk2_old
protected

Definition at line 244 of file FiniteStrainUObasedCP.h.

Referenced by preSolveQp().

◆ _resid

RankTwoTensor FiniteStrainUObasedCP::_resid
protected

Residual tensor.

Definition at line 210 of file FiniteStrainUObasedCP.h.

Referenced by calcResidual(), lineSearchUpdate(), and solveStress().

◆ _rtol

Real FiniteStrainUObasedCP::_rtol
protected

Stress residual equation relative tolerance.

Definition at line 201 of file FiniteStrainUObasedCP.h.

Referenced by solveStress().

◆ _state_vars_old

std::vector<std::vector<Real> > FiniteStrainUObasedCP::_state_vars_old
protected

Local state variable.

Definition at line 192 of file FiniteStrainUObasedCP.h.

Referenced by computeQpStress(), FiniteStrainUObasedCP(), initQpStatefulProperties(), and preSolveQp().

◆ _state_vars_old_stored

std::vector<std::vector<Real> > FiniteStrainUObasedCP::_state_vars_old_stored
protected

◆ _state_vars_prev

std::vector<std::vector<Real> > FiniteStrainUObasedCP::_state_vars_prev
protected

◆ _stol

Real FiniteStrainUObasedCP::_stol
protected

Internal variable update equation tolerance.

Definition at line 205 of file FiniteStrainUObasedCP.h.

Referenced by isStateVariablesConverged().

◆ _stress

MaterialProperty<RankTwoTensor>& ComputeGeneralStressBase::_stress
protectedinherited

Stress material property.

Definition at line 48 of file ComputeGeneralStressBase.h.

Referenced by ComputeMultipleInelasticStressBase::computeAdmissibleState(), ComputeMultipleInelasticCosseratStress::computeAdmissibleState(), ComputeGeneralStressBase::computeQpProperties(), ComputeMultiPlasticityStress::computeQpStress(), ComputeStrainIncrementBasedStress::computeQpStress(), FiniteStrainPlasticMaterial::computeQpStress(), AbaqusUMATStress::computeQpStress(), ComputeCosseratLinearElasticStress::computeQpStress(), ComputeFiniteStrainElasticStress::computeQpStress(), ComputeLinearElasticPFFractureStress::computeQpStress(), ComputeLinearElasticStress::computeQpStress(), ComputeLinearViscoelasticStress::computeQpStress(), ComputeMultipleInelasticStressBase::computeQpStress(), ComputeSmearedCrackingStress::computeQpStress(), ComputeMultipleCrystalPlasticityStress::computeQpStress(), ComputeMultipleInelasticStressBase::computeQpStressIntermediateConfiguration(), ComputeLinearElasticPFFractureStress::computeStrainSpectral(), ComputeLinearElasticPFFractureStress::computeStrainVolDev(), ComputeLinearElasticPFFractureStress::computeStressSpectral(), ComputeCreepPlasticityStress::computeTangentOperators(), ComputeMultipleInelasticStressBase::finiteStrainRotation(), FiniteStrainCrystalPlasticity::initQpStatefulProperties(), initQpStatefulProperties(), FiniteStrainHyperElasticViscoPlastic::initQpStatefulProperties(), ComputeGeneralStressBase::initQpStatefulProperties(), ComputeMultiPlasticityStress::postReturnMap(), FiniteStrainCrystalPlasticity::postSolveQp(), postSolveQp(), FiniteStrainHyperElasticViscoPlastic::postSolveQp(), ComputeSmearedCrackingStress::updateCrackingStateAndStress(), ComputeCreepPlasticityStress::updateQpState(), ComputeMultipleInelasticStress::updateQpState(), and ComputeMultipleInelasticStressBase::updateQpStateSingleModel().

◆ _substep_dt

Real FiniteStrainUObasedCP::_substep_dt
protected

◆ _tan_mod_type

MooseEnum FiniteStrainUObasedCP::_tan_mod_type
protected

Type of tangent moduli calculation.

Definition at line 221 of file FiniteStrainUObasedCP.h.

Referenced by calcTangentModuli().

◆ _tau

DenseVector<Real> FiniteStrainUObasedCP::_tau
protected

Definition at line 261 of file FiniteStrainUObasedCP.h.

◆ _uo_slip_rates

std::vector<const CrystalPlasticitySlipRate *> FiniteStrainUObasedCP::_uo_slip_rates
protected

User objects that define the slip rate.

Definition at line 153 of file FiniteStrainUObasedCP.h.

Referenced by calcJacobian(), calcResidual(), computeQpStress(), FiniteStrainUObasedCP(), getSlipRates(), and initQpStatefulProperties().

◆ _uo_slip_resistances

std::vector<const CrystalPlasticitySlipResistance *> FiniteStrainUObasedCP::_uo_slip_resistances
protected

User objects that define the slip resistance.

Definition at line 156 of file FiniteStrainUObasedCP.h.

Referenced by FiniteStrainUObasedCP(), initQpStatefulProperties(), preSolveStatevar(), and updateSlipSystemResistanceAndStateVariable().

◆ _uo_state_var_evol_rate_comps

std::vector<const CrystalPlasticityStateVarRateComponent *> FiniteStrainUObasedCP::_uo_state_var_evol_rate_comps
protected

User objects that define the state variable evolution rate component.

Definition at line 162 of file FiniteStrainUObasedCP.h.

Referenced by FiniteStrainUObasedCP(), initQpStatefulProperties(), and updateSlipSystemResistanceAndStateVariable().

◆ _uo_state_vars

std::vector<const CrystalPlasticityStateVariable *> FiniteStrainUObasedCP::_uo_state_vars
protected

User objects that define the state variable.

Definition at line 159 of file FiniteStrainUObasedCP.h.

Referenced by FiniteStrainUObasedCP(), initQpStatefulProperties(), and updateSlipSystemResistanceAndStateVariable().

◆ _update_rot

MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_update_rot
protected

Definition at line 246 of file FiniteStrainUObasedCP.h.

Referenced by initQpStatefulProperties(), and postSolveQp().

◆ _update_rot_old

const MaterialProperty<RankTwoTensor>& FiniteStrainUObasedCP::_update_rot_old
protected

Definition at line 247 of file FiniteStrainUObasedCP.h.

◆ _use_line_search

bool FiniteStrainUObasedCP::_use_line_search
protected

Flag to activate line serach.

Definition at line 227 of file FiniteStrainUObasedCP.h.

Referenced by solveStress().

◆ _zero_tol

Real FiniteStrainUObasedCP::_zero_tol
protected

Residual tolerance when variable value is zero. Default 1e-12.

Definition at line 207 of file FiniteStrainUObasedCP.h.

Referenced by isStateVariablesConverged().


The documentation for this class was generated from the following files: