- uo_slip_ratesList of names of user objects that define the slip rates for this material.
C++ Type:std::vector<UserObjectName>
Controllable:No
Description:List of names of user objects that define the slip rates for this material.
- uo_slip_resistancesList of names of user objects that define the slip resistances for this material.
C++ Type:std::vector<UserObjectName>
Controllable:No
Description:List of names of user objects that define the slip resistances for this material.
- uo_state_var_evol_rate_compsList of names of user objects that define the state variable evolution rate components for this material.
C++ Type:std::vector<UserObjectName>
Controllable:No
Description:List of names of user objects that define the state variable evolution rate components for this material.
- uo_state_varsList of names of user objects that define the state variable for this material.
C++ Type:std::vector<UserObjectName>
Controllable:No
Description:List of names of user objects that define the state variable for this material.
UserObject based Crystal Plasticity System
UserObject based Crystal Plasticity system.
Description
The UserObject based crystal plasticity system is designed to facilitate the implementation of different constitutive laws in a modular way. Both phenomenological constitutive models and dislocation-based constitutive models can be implemented through this system. This system consists of one material class FiniteStrainUObasedCP
and four UserObject classes, namely CrystalPlasticitySlipRate
, CrystalPlasticitySlipResistance
, CrystalPlasticityStateVarRateComponent
and CrystalPlasticityStateVariable
.
The material class is based on plastic flow on individual slip systems to obtain the inelastic deformation in materials. The present formulation considers large deformation and is based on a stress update algorithm. Some of the important functions associated with this class are outlined below.
Function computeQpStress
:
Input:
2 Piola-Kirchhoff (PK2) stress in the intermediate configuration at previous increment (variable
_pk2_old
, symbol );Plastic deformation gradient at previous increment (variable
_fp_old
, symbol );State variables at previous increment;
Current deformation gradient (variable
_dfgrd
, symbol ).
Output:
Current PK2 stress (variable
_pk2
, symbol );Current plastic deformation gradient (variable
_fp
, symbol );Current slip system resistances.
State variables are solved iteratively using a predictor corrector algorithm. is solved using Newton Raphson.
Flowchart:
i: At iteration i=0,
ii: Calculate the residual r and Jacobian J= from the function calc_resid_jacob
iii: Update T as:
iv: Check _rtol
(Optional user defined parameter)
If False then go to Step ii
Else
v: Calculate from function updateSlipSystemResistanceAndStateVariable
vi: Check _stol
(Optional user defined parameter)
If False then go to Step ii
Else
vii: Obtain rotation tensor R
viii: Update rotation as where Q is the rotation tensor from Euler angles
Exit Function
Function calc_resid_jacob
: User can override this function.
Input:
PK2 stress at previous iteration (variable
_pk2
, symbol , i - iteration);Inverse of plastic deformation gradient at previous increment (variable
_fp_old_inv
, symbol );Current deformation gradient (variable
_dfgrd
, symbol ).
Output:
Residual (variable
resid
, symbol r);Jacobian (variable
jac
, symbol J);Updated inverse of plastic deformation gradient (variable
_fp_inv
, symbol )
Residual r as implemented:
i. Get slip rates from userobject.
ii. Resultant slip increment (variable eqv_slip_incr
) where is the flow direction.
iii. Current plastic component of deformation gradient .
iv. Elastic component of deformation gradient in iteration i+1, .
vi: PK2 stress due to and associated slip increment in current iteration i+1 (variable pk2_new
), .
vii. Residual .
Jacobian J formulation:
i. and .
ii. which gives .
iii. which gives in indicial notation where is the Kroneckar delta.
iv. which gives in indicial notation .
v. which gives .
vi. which gives .
vii. which gives .
viii. gives .
ix. Hence .
Jacobian J as implemented:
i. Variable dtaudpk2
, .
ii. Variable dfpinvdslip
, .
iii. Variable dfedfpinv
, .
iv: Variable deedfe
, .
v. Variable dfpinvdpk2
, .
vi. obtained from slip rate userobject.
vii. Variable jac
, , followed by where is the fourth order identity tensor.
Update Cauchy stress (variable sig) .
Function computeQpElasticityTensor
: Defines tangent moduli K and can be used as preconditioner for JFNK. User can override this function.
Input:
Current plastic deformation gradient (variable
_fp
, symbol );Current deformation gradient (variable
_dfgrd
, symbol )
Output:
Tangent moduli (variable
_Jacobian_mult
,symbol K).
Formulation:
i. .
ii. which gives .
iii. In indicial notation .
iv. which gives .
v. In indicial notation .
Implementation:
i. Variable dfedf
calculates .
ii. Variable deedfe
calculates .
iii. Variable dsigspk2dfe
calculates .
Input Parameters
- abs_tol1e-06Constitutive stress residue absolute tolerance
Default:1e-06
C++ Type:double
Controllable:No
Description:Constitutive stress residue absolute tolerance
- base_nameOptional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases
C++ Type:std::string
Controllable:No
Description:Optional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- computeTrueWhen false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
Default:True
C++ Type:bool
Controllable:No
Description:When false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
- constant_onNONEWhen ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
Default:NONE
C++ Type:MooseEnum
Controllable:No
Description:When ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
- declare_suffixAn optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Controllable:No
Description:An optional suffix parameter that can be appended to any declared properties. The suffix will be prepended with a '_' character.
- line_search_maxiter20Line search bisection method maximum number of iteration
Default:20
C++ Type:unsigned int
Controllable:No
Description:Line search bisection method maximum number of iteration
- line_search_methodCUT_HALFThe method used in line search
Default:CUT_HALF
C++ Type:MooseEnum
Controllable:No
Description:The method used in line search
- line_search_tol0.5Line search bisection method tolerance
Default:0.5
C++ Type:double
Controllable:No
Description:Line search bisection method tolerance
- maximum_substep_iteration1Maximum number of substep iteration
Default:1
C++ Type:unsigned int
Controllable:No
Description:Maximum number of substep iteration
- maxiter100Maximum number of iterations for stress update
Default:100
C++ Type:unsigned int
Controllable:No
Description:Maximum number of iterations for stress update
- maxiter_state_variable100Maximum number of iterations for state variable update
Default:100
C++ Type:unsigned int
Controllable:No
Description:Maximum number of iterations for state variable update
- min_line_search_step_size0.01Minimum line search step size
Default:0.01
C++ Type:double
Controllable:No
Description:Minimum line search step size
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- rtol1e-06Constitutive stress residue relative tolerance
Default:1e-06
C++ Type:double
Controllable:No
Description:Constitutive stress residue relative tolerance
- stol0.01Constitutive slip system resistance relative residual tolerance
Default:0.01
C++ Type:double
Controllable:No
Description:Constitutive slip system resistance relative residual tolerance
- tan_mod_typenoneType of tangent moduli for preconditioner: default elastic
Default:none
C++ Type:MooseEnum
Controllable:No
Description:Type of tangent moduli for preconditioner: default elastic
- use_line_searchFalseUse line search in constitutive update
Default:False
C++ Type:bool
Controllable:No
Description:Use line search in constitutive update
- zero_tol1e-12Tolerance for residual check when variable value is zero
Default:1e-12
C++ Type:double
Controllable:No
Description:Tolerance for residual check when variable value is zero
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
Advanced Parameters
- output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)
C++ Type:std::vector<std::string>
Controllable:No
Description:List of material properties, from this material, to output (outputs must also be defined to an output type)
- outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object
Default:none
C++ Type:std::vector<OutputName>
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object