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 Kronecker 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

  • uo_slip_ratesList of names of user objects that define the slip rates for this material.

    C++ Type:std::vector<UserObjectName>

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    Controllable:No

    Description:List of names of user objects that define the state variable for this material.

Required Parameters

  • abs_tol1e-06Constitutive stress residue absolute tolerance

    Default:1e-06

    C++ Type:double

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    Options:NONE, ELEMENT, SUBDOMAIN

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    Options:CUT_HALF, BISECTION

    Controllable:No

    Description:The method used in line search

  • line_search_tol0.5Line search bisection method tolerance

    Default:0.5

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Line search bisection method tolerance

  • maximum_substep_iteration1Maximum number of substep iteration

    Default:1

    C++ Type:unsigned int

    Unit:(no unit assumed)

    Controllable:No

    Description:Maximum number of substep iteration

  • maxiter100Maximum number of iterations for stress update

    Default:100

    C++ Type:unsigned int

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    Controllable:No

    Description:Constitutive stress residue relative tolerance

  • stol0.01Constitutive slip system resistance relative residual tolerance

    Default:0.01

    C++ Type:double

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    Options:exact, none

    Controllable:No

    Description:Type of tangent moduli for preconditioner: default elastic

  • use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    Controllable:No

    Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

  • use_line_searchFalseUse line search in constitutive update

    Default:False

    C++ Type:bool

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    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>

    Unit:(no unit assumed)

    Controllable:No

    Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object

Outputs Parameters

References

No citations exist within this document.