Steel Creep Damage (Oh et al)

Steel scalar damage model: Material 'suddenly' loses load-carrying capacity. This can model, e.g., 316H creep failure. See Oh et al (2011).

Description

The SteelCreepDamageOh can model the mechanical failure of steel due to creep (see Oh et al. (2011) and Oh et al. (2011)).

Accumulated damage () is computed by accumulating the creep strain rate normalized with the multi-axial creep ductility. The accumulated damage is

The triaxial creep ductility can be obtained from the uniaxial creep ductility using the following expression

where is the creep power law exponent, is the stress triaxiality.

commentnote

The accumulated damage , as defined in Oh et al. (2011), can be requested by the user as an auxiliary variable. In addition, the more traditional damage_index, which represents a linear change in the stress value, can also be requested. and damage_index carry a different meaning and differ in value: damage_index is zero until the threshold value of is reached. This class internally casts the value of into the damage_index.

Implementation and Usage

The effects of damage can be applied all at once or progressively. In essence, this object allows the user to select an initial value of at which the load carrying capacity of the finite element will start to get reduced linearly (reduction_damage_threshold). In addition, the user can select the factor that will reduce the load-carrying capacity (stress) through the input parameter reduction_factor. These two parameters should be chosen such that material damage consistently reduces material point's stresses. For example, for steel, reduction_damage_threshold should be selected to be close to 1.0 so that the load-carrying capacity of the finite element is lost quickly.

Damaged elements may get distorted and, therefore, may generate increased values of creep strains which may, in turn, limit the maximum allowable material time step. To avoid these undesired effects, the user may combine damage models with CoupledVarThresholdElementSubdomainModifier. The CoupledVarThresholdElementSubdomainModifier user object can eliminate or move damage elements from selected mesh blocks. In addition, it is strongly recommended to toggle the use_old_damage flag to true for this object to yield optimal convergence properties.

Example Input Syntax

[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
  [damage]
    type = SteelCreepDamageOh<<<{"description": "Steel scalar damage model: Material 'suddenly' loses load-carrying capacity. This can model, e.g., 316H creep failure. See Oh et al (2011).", "href": "SteelCreepDamageOh.html"}>>>
    epsilon_f<<<{"description": "Uniaxial creep fracture strain (creep ductility)."}>>> = 0.01
    creep_strain_names<<<{"description": "Names of the creep strains driving the damage."}>>> = creep_strain
    reduction_factor<<<{"description": "Reduction on the load-carrying capacity (stress)."}>>> = 1.0e3
    use_old_damage<<<{"description": "Whether to use the damage index from the previous step in the stress computation"}>>> = true
    creep_law_exponent<<<{"description": "Exponent of the creep power law."}>>> = 10.0
  []
[]
(blackbear/test/tests/steel_creep_damage_oh/steel_creep_damage.i)

SteelCreepDamage is run in conjunction with a stress calculator that supports the use of a damage model, (ComputeMultipleInelasticStress in this case), as shown:

[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
  [damage]
    type = SteelCreepDamageOh<<<{"description": "Steel scalar damage model: Material 'suddenly' loses load-carrying capacity. This can model, e.g., 316H creep failure. See Oh et al (2011).", "href": "SteelCreepDamageOh.html"}>>>
    epsilon_f<<<{"description": "Uniaxial creep fracture strain (creep ductility)."}>>> = 0.01
    creep_strain_names<<<{"description": "Names of the creep strains driving the damage."}>>> = creep_strain
    reduction_factor<<<{"description": "Reduction on the load-carrying capacity (stress)."}>>> = 1.0e3
    use_old_damage<<<{"description": "Whether to use the damage index from the previous step in the stress computation"}>>> = true
    creep_law_exponent<<<{"description": "Exponent of the creep power law."}>>> = 10.0
  []

  [radial_return_stress]
    type = ComputeMultipleInelasticStress<<<{"description": "Compute state (stress and internal parameters such as plastic strains and internal parameters) using an iterative process.  Combinations of creep models and plastic models may be used.", "href": "ComputeMultipleInelasticStress.html"}>>>
    inelastic_models<<<{"description": "The material objects to use to calculate stress and inelastic strains. Note: specify creep models first and plasticity models second."}>>> = 'powerlawcrp'
    damage_model<<<{"description": "Name of the damage model"}>>> = damage
  []
  [powerlawcrp]
    type = PowerLawCreepStressUpdate<<<{"description": "This class uses the stress update material in a radial return isotropic power law creep model. This class can be used in conjunction with other creep and plasticity materials for more complex simulations.", "href": "PowerLawCreepStressUpdate.html"}>>>
    coefficient<<<{"description": "Leading coefficient in power-law equation"}>>> = 3.125e-21
    n_exponent<<<{"description": "Exponent on effective stress in power-law equation"}>>> = 4.0
    m_exponent<<<{"description": "Exponent on time in power-law equation"}>>> = 0.0
    activation_energy<<<{"description": "Activation energy"}>>> = 0.0
  []
  [elasticity]
    type = ComputeIsotropicElasticityTensor<<<{"description": "Compute a constant isotropic elasticity tensor.", "href": "ComputeIsotropicElasticityTensor.html"}>>>
    poissons_ratio<<<{"description": "Poisson's ratio for the material."}>>> = 0.2
    youngs_modulus<<<{"description": "Young's modulus of the material."}>>> = 10e9
  []
[]
(blackbear/test/tests/steel_creep_damage_oh/steel_creep_damage.i)

Input Parameters

  • creep_law_exponentExponent of the creep power law.

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Exponent of the creep power law.

  • creep_strain_namesNames of the creep strains driving the damage.

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

    Controllable:No

    Description:Names of the creep strains driving the damage.

  • epsilon_fUniaxial creep fracture strain (creep ductility).

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Uniaxial creep fracture strain (creep ductility).

Required Parameters

  • 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

  • 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

    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

  • damage_index_namedamage_indexname of the material property where the damage index is stored

    Default:damage_index

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:name of the material property where the damage index is stored

  • 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.

  • maximum_damage1Maximum value allowed for damage index

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Maximum value allowed for damage index

  • maximum_damage_increment0.1maximum damage increment allowed for simulations with adaptive time step

    Default:0.1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:maximum damage increment allowed for simulations with adaptive time step

  • reduction_damage_threshold0.9Starting value of damage that will trigger linear reduction of quadrature point's load-carrying capacity.

    Default:0.9

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Starting value of damage that will trigger linear reduction of quadrature point's load-carrying capacity.

  • reduction_factor1000Reduction on the load-carrying capacity (stress).

    Default:1000

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reduction on the load-carrying capacity (stress).

  • residual_stiffness_fraction1e-08Minimum fraction of original material stiffness retained for fully damaged material (when damage_index=1)

    Default:1e-08

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Minimum fraction of original material stiffness retained for fully damaged material (when damage_index=1)

  • use_old_damageFalseWhether to use the damage index from the previous step in the stress computation

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to use the damage index from the previous step in the stress computation

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

  • use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.

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

Outputs Parameters

  • 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.

  • 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

    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.

Material Property Retrieval Parameters

References

  1. Chang-Sik Oh, Nak-Hyun Kim, Yun-Jae Kim, Jong-Hyun Baek, Young-Pyo Kim, and Woo-Sik Kim. A finite element ductile failure simulation method using stress-modified fracture strain model. Engineering Fracture Mechanics, 78(1):124–137, 2011. URL: https://www.sciencedirect.com/science/article/pii/S0013794410004443, doi:https://doi.org/10.1016/j.engfracmech.2010.10.004.[BibTeX]
  2. Chang-Sik Oh, Nak-Hyun Kim, Yun-Jae Kim, Catrin Davies, Kamran Nikbin, and David Dean. Creep failure simulations of 316h at 550 c: part i–a method and validation. Engineering fracture mechanics, 78(17):2966–2977, 2011.[BibTeX]