MortarCZMDebondedBoundaryUpdater

Promotes fully-damaged CZM interface segments into new sidesets.

Description

MortarCZMDebondedBoundaryUpdater builds sidesets on the portions of a mortar cohesive zone interface that have fully debonded, so that loads such as a gas pressure can be applied to the walls of the void that opens between the two surfaces. As the cohesive zone damage evolves, every segment of the interface whose damage has reached a threshold value is added to two sidesets: the face on the secondary side is added to "debonded_boundary_secondary", and every face on the primary side that the secondary face was bonded to is added to "debonded_boundary_primary". Together the two sidesets bound the debonded region, so they both can be used to apply boundary conditions to the surfaces of the void created by debonding.

A segment is considered fully separated when the damage given by "damage_variable" is at or above "threshold" at every quadrature point of a secondary lower-dimensional element. The damage is normally provided by a CohesiveZoneMortarUserObjectAux with cohesive_zone_quantity = cohesive_damage. The default threshold is , so that only segments the cohesive zone model reports as fully broken are added; it is not intended as a tuning parameter.

The primary faces paired with each secondary face are those that overlapped it in the undisplaced configuration, determined once at the start of the simulation from a mortar projection between "secondary_boundary" and "primary_boundary". Pairing in the reference configuration ensures that the faces added to the two sidesets are a subset of the faces that were initially bonded together, regardless of how the surfaces may have opened or slid relative to each other. When the primary and secondary meshes do not conform, a secondary face may be paired with several primary faces, and all of them are added.

Faces are only ever added and never removed from the sidesets, because a debonded cohesive zone is assumed to not heal. The mesh is marked as changed only on time steps in which new faces are added, so that objects acting on the two sidesets, such as Pressure boundary conditions, are reinitialized to include the new faces. Because the sidesets are updated at the end of a time step, after the solve, a face that debonds during a time step is loaded by such boundary conditions from the next time step onward.

Example Input Syntax

[MeshModifiers<<<{"href": "../../syntax/MeshModifiers/index.html"}>>>]
  [pressure_sideset_updater]
    type = MortarCZMDebondedBoundaryUpdater<<<{"description": "Promotes fully-damaged CZM interface segments into new sidesets.", "href": "MortarCZMDebondedBoundaryUpdater.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = secondary_lower
    damage_variable<<<{"description": "CZM damage AuxVariable (0 = intact, 1 = fully broken), valid on the secondary lower-dimensional mortar block."}>>> = damage
    cohesive_zone_userobject<<<{"description": "The mortar cohesive-zone UserObject for this interface."}>>> = czm_uo
    primary_boundary<<<{"description": "Primary side of the CZM mortar interface."}>>> = upper_bottom
    secondary_boundary<<<{"description": "Secondary side of the CZM mortar interface."}>>> = lower_top
    primary_subdomain<<<{"description": "Primary lower-dimensional mortar block."}>>> = primary_lower
    secondary_subdomain<<<{"description": "Secondary lower-dimensional mortar block."}>>> = secondary_lower
    debonded_boundary_primary<<<{"description": "Boundary to populate with fully-damaged primary faces."}>>> = czm_pressure_primary
    debonded_boundary_secondary<<<{"description": "Boundary to populate with fully-damaged secondary faces."}>>> = czm_pressure_secondary
    execute_on<<<{"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."}>>> = TIMESTEP_END
    # Run before the default group so that the postprocessors see faces promoted this step
    execution_order_group<<<{"description": "Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group."}>>> = -1
  []
[]
(modules/combined/test/tests/czm_pressure_sidesets/czm_pressure_sideset.i)

Input Parameters

  • cohesive_zone_userobjectThe mortar cohesive-zone UserObject for this interface.

    C++ Type:UserObjectName

    Controllable:No

    Description:The mortar cohesive-zone UserObject for this interface.

  • damage_variableCZM damage AuxVariable (0 = intact, 1 = fully broken), valid on the secondary lower-dimensional mortar block.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:CZM damage AuxVariable (0 = intact, 1 = fully broken), valid on the secondary lower-dimensional mortar block.

  • debonded_boundary_primaryBoundary to populate with fully-damaged primary faces.

    C++ Type:BoundaryName

    Controllable:No

    Description:Boundary to populate with fully-damaged primary faces.

  • debonded_boundary_secondaryBoundary to populate with fully-damaged secondary faces.

    C++ Type:BoundaryName

    Controllable:No

    Description:Boundary to populate with fully-damaged secondary faces.

  • primary_boundaryPrimary side of the CZM mortar interface.

    C++ Type:BoundaryName

    Controllable:No

    Description:Primary side of the CZM mortar interface.

  • primary_subdomainPrimary lower-dimensional mortar block.

    C++ Type:SubdomainName

    Controllable:No

    Description:Primary lower-dimensional mortar block.

  • secondary_boundarySecondary side of the CZM mortar interface.

    C++ Type:BoundaryName

    Controllable:No

    Description:Secondary side of the CZM mortar interface.

  • secondary_subdomainSecondary lower-dimensional mortar block.

    C++ Type:SubdomainName

    Controllable:No

    Description:Secondary lower-dimensional mortar block.

Required 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

  • interface_boundariesThe interface boundaries on which this object will execute

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

    Controllable:No

    Description:The interface boundaries on which this object will execute

  • threshold1Damage at or above which a face considered is fully separated.

    Default:1

    C++ Type:Real

    Unit:(no unit assumed)

    Controllable:No

    Description:Damage at or above which a face considered is fully separated.

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_onTIMESTEP_ENDThe 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:TIMESTEP_END

    C++ Type:ExecFlagEnum

    Options:XFEM_MARK, FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, LINEAR_CONVERGENCE, NONLINEAR, NONLINEAR_CONVERGENCE, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, MULTIAPP_FIXED_POINT_CONVERGENCE, MULTISYSTEM_FIXED_POINT_ITERATION_END, FINAL, CUSTOM, TRANSFER

    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_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.

    Default:0

    C++ Type:int

    Controllable:No

    Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.

  • 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_meshTrueWhether 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:True

    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.

Material Property Retrieval Parameters

Input Files