- 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
Unit:(no unit assumed)
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]
[nucleate]
type = MeshCut2DRankTwoTensorNucleation
tensor = stress
scalar_type = MaxPrincipal
nucleation_threshold = 180
initiate_on_boundary = 'left'
nucleation_radius = .21
edge_extension_factor = 2e-5
nucleation_length = 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>
Unit:(no unit assumed)
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.
- 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
Unit:(no unit assumed)
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.
- initiate_on_boundaryCracks can only initiate on elements adjacent to specified boundaries.
C++ Type:std::vector<BoundaryName>
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
Controllable:No
Description:End point for axis used to calculate some cylindrical material tensor quantities
- 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.
- scalar_typeScalar quantity to be computed from tensor and used as a failure criterion
C++ Type:MooseEnum
Unit:(no unit assumed)
Controllable:No
Description:Scalar quantity to be computed from tensor and used as a failure criterion
- 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.
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
Unit:(no unit assumed)
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).
- 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.
- execution_order_group-1Nucleation UO needs to be completely executed before GeometricCutUserObject.
Default:-1
C++ Type:int
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
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
Unit:(no unit assumed)
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
- 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
- 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
Unit:(no unit assumed)
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.