- nucleation_thresholdThreshold for the scalar quantity of the RankTwoTensor to nucleate new cracks
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Threshold for the scalar quantity of the RankTwoTensor to nucleate new cracks
- tensorThe material tensor name.
C++ Type:std::string
Controllable:No
Description:The material tensor name.
MeshCut2DRankTwoTensorNucleation
Nucleate a crack in MeshCut2D UO based on a scalar extracted from a RankTwoTensor
Overview
The XFEM nucleation UserObject MeshCut2DRankTwoTensorNucleation
defines new cracks that are added to the cutter mesh used by MeshCut2DFractureUserObject when a user-defined nucleation criterion is met. The nucleation criterion is based on the "scalar_type" extracted from a RankTwoTensor
specified by "tensor" (used to store stresses and strains in SolidMechanics), such as a principal stress or a component of stress.
If the scalar exceeds a threshold specified by "nucleation_threshold", a line segment with a length specified by "nucleation_length" will be inserted into the MeshCut2DFractureUserObject cutter mesh. Cracks will nucleate on the domain interior or boundary. Crack nucleation can be limited to elements on boundaries specified by "initiate_on_boundary". Once the nucleation criterion is reached, a line segment of the specified length is inserted into the cutter mesh, centered on the element centroid it nucleates from. The direction of the nucleated crack is normal to the direction returned by the RankTwoTensor
scalar. For example, MaxInPlanePrincipal
returns the direction of the maximum in-plane principal component and the crack direction is normal to this. It is an error for "nucleation_length" to be smaller than the length of the element the crack nucleates in, unless the user sets nucleate_across_full_element=true
. A crack will only be nucleated if it is at least a distance specified by "nucleation_radius" away from existing or nucleated cracks. If multiple cracks nucleate in the same xfem update and are within the specified nucleation_radius
, the crack nucleated from the element with the lowest id will be retained and no other cracks within the nucleation_radius
will be nucleated. The nucleation_radius
is a good way to limit the number of cracks that nucleate within a region, which can help limit problems related to excessive numbers of XFEM cuts in a single element.
MeshCut2DRankTwoTensorNucleation
copies several features available in the XFEMRankTwoTensorMarkerUserObject. These include the nucleation threshold being provided as a coupled variable and the computation of the maximum value of the scalar quantity used for nucleation. By providing the nucleation threshold as a coupled variable, it can be specified as either a constant or variable value. Coupled variable input is useful for introducing randomness in the strength by using an AuxVariable that has been initialized with a random initial condition. For example, the Volume Weighted Weibull initial condition is well-suited for this purpose. The determination of crack nucleation is based on the average value of the scalar quantity over all the quadrature points in an element.
Example Input File Syntax
[UserObjects<<<{"href": "../../syntax/UserObjects/index.html"}>>>]
[nucleate]
type = MeshCut2DRankTwoTensorNucleation<<<{"description": "Nucleate a crack in MeshCut2D UO based on a scalar extracted from a RankTwoTensor", "href": "MeshCut2DRankTwoTensorNucleation.html"}>>>
tensor<<<{"description": "The material tensor name."}>>> = stress
scalar_type<<<{"description": "Scalar quantity to be computed from tensor and used as a failure criterion"}>>> = MaxPrincipal
nucleation_threshold<<<{"description": "Threshold for the scalar quantity of the RankTwoTensor to nucleate new cracks"}>>> = 180
initiate_on_boundary<<<{"description": "Cracks can only initiate on elements adjacent to specified boundaries."}>>> = 'left'
nucleation_radius<<<{"description": "Cracks will only nucleate if they are outside the nucleation_radius of an existing crack."}>>> = .21
edge_extension_factor<<<{"description": "Factor by which the length of cracks that have been adjusted to coincide with element edges are increased to avoid missing an intersection with the edge due to numerical tolerance issues."}>>> = 2e-5
nucleation_length<<<{"description": "Size of crack to nucleate. Must be larger than the length of the element in which the crack is nucleated, unless 'nucleate_across_full_element' is set to 'true'."}>>> = 0.11
[]
[]
(modules/xfem/test/tests/nucleation_uo/nucleate_AllEdgeCracks.i)Input Parameters
- 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
- edge_extension_factor1e-05Factor by which the length of cracks that have been adjusted to coincide with element edges are increased to avoid missing an intersection with the edge due to numerical tolerance issues.
Default:1e-05
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Factor by which the length of cracks that have been adjusted to coincide with element edges are increased to avoid missing an intersection with the edge due to numerical tolerance issues.
- initiate_on_boundaryCracks can only initiate on elements adjacent to specified boundaries.
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:Cracks can only initiate on elements adjacent to specified boundaries.
- nucleate_across_full_elementFalseControls the behavior of nucleating cracks if 'nucleation_length' is smaller than the length required to travserse an element with a nucleating crack. If this is set to 'false', that condition will result in an error, but if set to 'true', a crack with the length needed to traverse the element will be inserted.
Default:False
C++ Type:bool
Controllable:No
Description:Controls the behavior of nucleating cracks if 'nucleation_length' is smaller than the length required to travserse an element with a nucleating crack. If this is set to 'false', that condition will result in an error, but if set to 'true', a crack with the length needed to traverse the element will be inserted.
- nucleation_lengthSize of crack to nucleate. Must be larger than the length of the element in which the crack is nucleated, unless 'nucleate_across_full_element' is set to 'true'.
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Size of crack to nucleate. Must be larger than the length of the element in which the crack is nucleated, unless 'nucleate_across_full_element' is set to 'true'.
- nucleation_radius0Cracks will only nucleate if they are outside the nucleation_radius of an existing crack.
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Cracks will only nucleate if they are outside the nucleation_radius of an existing crack.
- point10 0 0Start point for axis used to calculate some cylindrical material tensor quantities
Default:0 0 0
C++ Type:libMesh::Point
Controllable:No
Description:Start point for axis used to calculate some cylindrical material tensor quantities
- point20 1 0End point for axis used to calculate some cylindrical material tensor quantities
Default:0 1 0
C++ Type:libMesh::Point
Controllable:No
Description:End point for axis used to calculate some cylindrical material tensor quantities
- scalar_typeScalar quantity to be computed from tensor and used as a failure criterion
C++ Type:MooseEnum
Controllable:No
Description:Scalar quantity to be computed from tensor and used as a failure criterion
Optional Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- execute_onXFEM_MARKThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:XFEM_MARK
C++ Type:ExecFlagEnum
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- execution_order_group-1Nucleation UO needs to be completely executed before GeometricCutUserObject.
Default:-1
C++ Type:int
Controllable:No
Description:Nucleation UO needs to be completely executed before GeometricCutUserObject.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
Execution Scheduling 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
- 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.