Enumerations | |
| enum class | FrictionProjectionDegree { ONE , TWO } |
Functions | |
| template<typename T > | |
| T | augmentedNormalPressure (const T &normal_pressure, const T &scaled_normal_gap) |
| Return the augmented normal pressure p_n - C_n g_bar. | |
| template<typename T > | |
| T | coulombFrictionRadius (const T &friction_coefficient, const T &augmented_normal_pressure) |
| Return the nonnegative Coulomb friction radius. | |
| template<typename T , std::size_t N> | |
| std::array< T, N > | projectToClosedSphere (const std::array< T, N > &vector, const T &radius) |
Project vector onto a closed sphere centered at the origin with radius radius. | |
| template<typename T , std::size_t N> | |
| std::array< T, N > | alartCurnierFrictionResidual (const std::array< T, N > &tangential_pressure, const std::array< T, N > &augmented_tangential_pressure, const T &radius) |
| Return the degree-one Alart-Curnier friction residual p_t - Proj_{B_radius}(q_t). | |
| template<typename T , std::size_t N> | |
| std::array< T, N > | alartCurnierFrictionResidual (const std::array< T, N > &tangential_pressure, const std::array< T, N > &augmented_tangential_pressure, const T &radius, const T &normal_pressure, const T &epsilon) |
Same as the three-argument alartCurnierFrictionResidual, but additionally short-circuits to the trivial identity residual whenever the raw, unaugmented normal contact pressure normal_pressure falls below epsilon, mirroring the epsilon-gated hueberStadlerWohlmuthFrictionResidual overload below so both friction-residual degrees apply the same active-set transition guard. | |
| template<typename T , std::size_t N> | |
| std::array< T, N > | hueberStadlerWohlmuthFrictionResidual (const std::array< T, N > &tangential_pressure, const std::array< T, N > &augmented_tangential_pressure, const T &radius) |
| Return the degree-two Hueber-Stadler-Wohlmuth friction residual max(radius, ||q_t||) p_t - radius q_t. | |
| template<typename T , std::size_t N> | |
| std::array< T, N > | hueberStadlerWohlmuthFrictionResidual (const std::array< T, N > &tangential_pressure, const std::array< T, N > &augmented_tangential_pressure, const T &radius, const T &normal_pressure, const T &epsilon) |
Same as the three-argument hueberStadlerWohlmuthFrictionResidual, but additionally short-circuits to the trivial identity residual whenever the raw, unaugmented normal contact pressure normal_pressure falls below epsilon. | |
| template<typename T , std::size_t N> | |
| std::array< T, N > | frictionalContactResidual (const std::array< T, N > &tangential_pressure, const std::array< T, N > &tangential_velocity, const T &c_t, const T &dt, const T &normal_pressure, const T &scaled_normal_gap, const T &friction_coefficient, const T &epsilon, const FrictionProjectionDegree projection_degree) |
| Compute the epsilon-gated frictional residual for a mortar contact node. | |
| template<typename T > | |
| void | communicateVelocities (std::unordered_map< const DofObject *, T > &dof_map, const MooseMesh &mesh, const bool nodal, const Parallel::Communicator &communicator, const bool send_data_back) |
| This function is used to communicate velocities across processes. | |
| void | communicateR2T (std::unordered_map< const DofObject *, ADRankTwoTensor > &dof_map_adr2t, const MooseMesh &mesh, const bool nodal, const Parallel::Communicator &communicator, const bool send_data_back) |
| This function is used to communicate velocities across processes. | |
| template<typename T > | |
| void | communicateRealObject (std::unordered_map< const DofObject *, T > &dof_to_adreal, const MooseMesh &mesh, const bool nodal, const Parallel::Communicator &communicator, const bool send_data_back) |
| void | communicateGaps (std::unordered_map< const DofObject *, std::pair< ADReal, Real > > &dof_to_weighted_gap, const MooseMesh &mesh, bool nodal, bool normalize_c, const Parallel::Communicator &communicator, bool send_data_back) |
| This function is used to communicate gaps across processes. | |
|
strong |
| std::array< T, N > Moose::Mortar::Contact::alartCurnierFrictionResidual | ( | const std::array< T, N > & | tangential_pressure, |
| const std::array< T, N > & | augmented_tangential_pressure, | ||
| const T & | radius | ||
| ) |
Return the degree-one Alart-Curnier friction residual p_t - Proj_{B_radius}(q_t).
| tangential_pressure | The tangential contact pressure p_t |
| augmented_tangential_pressure | The velocity-augmented tangential pressure q_t (see frictionalContactResidual) |
| radius | The Coulomb friction radius (see coulombFrictionRadius) |
Definition at line 127 of file MortarContactUtils.h.
Referenced by alartCurnierFrictionResidual(), frictionalContactResidual(), TYPED_TEST(), TYPED_TEST(), TYPED_TEST(), TYPED_TEST(), and TYPED_TEST().
| std::array< T, N > Moose::Mortar::Contact::alartCurnierFrictionResidual | ( | const std::array< T, N > & | tangential_pressure, |
| const std::array< T, N > & | augmented_tangential_pressure, | ||
| const T & | radius, | ||
| const T & | normal_pressure, | ||
| const T & | epsilon | ||
| ) |
Same as the three-argument alartCurnierFrictionResidual, but additionally short-circuits to the trivial identity residual whenever the raw, unaugmented normal contact pressure normal_pressure falls below epsilon, mirroring the epsilon-gated hueberStadlerWohlmuthFrictionResidual overload below so both friction-residual degrees apply the same active-set transition guard.
| tangential_pressure | The tangential contact pressure p_t |
| augmented_tangential_pressure | The velocity-augmented tangential pressure q_t (see frictionalContactResidual) |
| radius | The Coulomb friction radius (see coulombFrictionRadius) |
| normal_pressure | The raw, unaugmented normal contact pressure |
| epsilon | The minimum normal contact pressure required to enable frictional enforcement |
Definition at line 154 of file MortarContactUtils.h.
| T Moose::Mortar::Contact::augmentedNormalPressure | ( | const T & | normal_pressure, |
| const T & | scaled_normal_gap | ||
| ) |
Return the augmented normal pressure p_n - C_n g_bar.
| normal_pressure | The normal contact pressure p_n |
| scaled_normal_gap | The normal gap g_bar scaled by a factor C_n, intended to bring it onto the order of the contact pressure for a well-conditioned complementarity function |
Definition at line 77 of file MortarContactUtils.h.
Referenced by frictionalContactResidual(), and TYPED_TEST().
| void Moose::Mortar::Contact::communicateGaps | ( | std::unordered_map< const DofObject *, std::pair< ADReal, Real > > & | dof_to_weighted_gap, |
| const MooseMesh & | mesh, | ||
| bool | nodal, | ||
| bool | normalize_c, | ||
| const Parallel::Communicator & | communicator, | ||
| bool | send_data_back | ||
| ) |
This function is used to communicate gaps across processes.
| dof_to_weighted_gap | Map from degree of freedom to weighted (weak) gap |
| mesh | Mesh used to locate nodes or elements |
| nodal | Whether the element has Lagrange interpolation |
| normalize_c | Whether to normalize with size the c coefficient in contact constraint |
| communicator | Process communicator |
| send_data_back | After aggregating data on the owning process, whether to send the aggregate back to senders. This can be necessary for things like penalty contact in which the constraint is not enforced by the owner but in a weighted way by the displacement constraints |
Definition at line 21 of file MortarContactUtils.C.
Referenced by WeightedGapUserObject::finalize(), ComputeDynamicWeightedGapLMMechanicalContact::incorrectEdgeDroppingPost(), ComputeFrictionalForceCartesianLMMechanicalContact::incorrectEdgeDroppingPost(), ComputeWeightedGapCartesianLMMechanicalContact::incorrectEdgeDroppingPost(), ComputeDynamicWeightedGapLMMechanicalContact::post(), ComputeFrictionalForceCartesianLMMechanicalContact::post(), and ComputeWeightedGapCartesianLMMechanicalContact::post().
|
inline |
This function is used to communicate velocities across processes.
| dof_map_adr2t | Map from degree of freedom to weighted tank two tensor |
| mesh | Mesh used to locate nodes or elements |
| nodal | Whether the element has Lagrange interpolation |
| communicator | Process communicator |
| send_data_back | Whether to send back data to a distributed constraint |
Definition at line 396 of file MortarContactUtils.h.
Referenced by CohesiveZoneModelBase::finalize().
| void Moose::Mortar::Contact::communicateRealObject | ( | std::unordered_map< const DofObject *, T > & | dof_to_adreal, |
| const MooseMesh & | mesh, | ||
| const bool | nodal, | ||
| const Parallel::Communicator & | communicator, | ||
| const bool | send_data_back | ||
| ) |
Definition at line 491 of file MortarContactUtils.h.
Referenced by BilinearMixedModeCohesiveZoneModel::finalize(), CohesiveZoneModelBase::finalize(), and LMWeightedGapUserObject::finalizeNodalScaling().
|
inline |
This function is used to communicate velocities across processes.
| dof_to_weighted_gap | Map from degree of freedom to weighted (weak) gap |
| mesh | Mesh used to locate nodes or elements |
| nodal | Whether the element has Lagrange interpolation |
| communicator | Process communicator |
| send_data_back | Whether to send back data to a distributed constraint |
Definition at line 298 of file MortarContactUtils.h.
Referenced by WeightedVelocitiesUserObject::finalize(), ComputeDynamicFrictionalForceLMMechanicalContact::incorrectEdgeDroppingPost(), ComputeFrictionalForceCartesianLMMechanicalContact::incorrectEdgeDroppingPost(), ComputeDynamicFrictionalForceLMMechanicalContact::post(), and ComputeFrictionalForceCartesianLMMechanicalContact::post().
| T Moose::Mortar::Contact::coulombFrictionRadius | ( | const T & | friction_coefficient, |
| const T & | augmented_normal_pressure | ||
| ) |
Return the nonnegative Coulomb friction radius.
| friction_coefficient | The Coulomb friction coefficient |
| augmented_normal_pressure | The augmented normal pressure (see augmentedNormalPressure) |
Definition at line 90 of file MortarContactUtils.h.
Referenced by frictionalContactResidual(), and TYPED_TEST().
| std::array< T, N > Moose::Mortar::Contact::frictionalContactResidual | ( | const std::array< T, N > & | tangential_pressure, |
| const std::array< T, N > & | tangential_velocity, | ||
| const T & | c_t, | ||
| const T & | dt, | ||
| const T & | normal_pressure, | ||
| const T & | scaled_normal_gap, | ||
| const T & | friction_coefficient, | ||
| const T & | epsilon, | ||
| const FrictionProjectionDegree | projection_degree | ||
| ) |
Compute the epsilon-gated frictional residual for a mortar contact node.
This composes the tangential pressure augmentation tangential_pressure + c_t * tangential_velocity * dt with augmentedNormalPressure, coulombFrictionRadius, and the epsilon-gated, degree-selected (projection_degree) friction residual (alartCurnierFrictionResidual for FrictionProjectionDegree::ONE, hueberStadlerWohlmuthFrictionResidual for FrictionProjectionDegree::TWO), the composition shared by the normal, dynamic, and Cartesian mortar frictional contact constraints.
| tangential_pressure | The tangential contact pressure p_t |
| tangential_velocity | The relative (slip) velocity between the secondary and primary surfaces, resolved into the local tangential direction(s) at this node |
| c_t | Numerical factor used in the tangential constraints for convergence purposes |
| dt | The current time step size |
| normal_pressure | The raw, unaugmented normal contact pressure |
| scaled_normal_gap | The normal gap g_bar scaled by a factor C_n, intended to bring it onto the order of the contact pressure for a well-conditioned complementarity function |
| friction_coefficient | The Coulomb friction coefficient |
| epsilon | The minimum normal contact pressure required to enable frictional enforcement |
| projection_degree | Which friction-residual projection degree to use |
Definition at line 258 of file MortarContactUtils.h.
Referenced by ComputeDynamicFrictionalForceLMMechanicalContact::enforceConstraintOnDof(), ComputeFrictionalForceCartesianLMMechanicalContact::enforceConstraintOnDof(), ComputeFrictionalForceLMMechanicalContact::enforceConstraintOnDof(), ComputeDynamicFrictionalForceLMMechanicalContact::enforceConstraintOnDof3d(), and ComputeFrictionalForceLMMechanicalContact::enforceConstraintOnDof3d().
| std::array< T, N > Moose::Mortar::Contact::hueberStadlerWohlmuthFrictionResidual | ( | const std::array< T, N > & | tangential_pressure, |
| const std::array< T, N > & | augmented_tangential_pressure, | ||
| const T & | radius | ||
| ) |
Return the degree-two Hueber-Stadler-Wohlmuth friction residual max(radius, ||q_t||) p_t - radius q_t.
At radius = ||q_t|| = 0 the degree-two expression vanishes for every p_t. Returning p_t in that state preserves the Coulomb solution set during separation.
| tangential_pressure | The tangential contact pressure p_t |
| augmented_tangential_pressure | The velocity-augmented tangential pressure q_t (see frictionalContactResidual) |
| radius | The Coulomb friction radius (see coulombFrictionRadius) |
Definition at line 180 of file MortarContactUtils.h.
Referenced by frictionalContactResidual(), hueberStadlerWohlmuthFrictionResidual(), TYPED_TEST(), TYPED_TEST(), TYPED_TEST(), TYPED_TEST(), and TYPED_TEST().
| std::array< T, N > Moose::Mortar::Contact::hueberStadlerWohlmuthFrictionResidual | ( | const std::array< T, N > & | tangential_pressure, |
| const std::array< T, N > & | augmented_tangential_pressure, | ||
| const T & | radius, | ||
| const T & | normal_pressure, | ||
| const T & | epsilon | ||
| ) |
Same as the three-argument hueberStadlerWohlmuthFrictionResidual, but additionally short-circuits to the trivial identity residual whenever the raw, unaugmented normal contact pressure normal_pressure falls below epsilon.
The pure weight == 0 condition in the three-argument overload is an exact mathematical criterion, but it is a poor numerical proxy for "this dof is separated" during Newton iteration: augmented_tangential_pressure includes a c_t-scaled tangential velocity term that is essentially never exactly zero in floating point, so the full weight/radius expression stays active even for dofs whose normal contact state is still swinging between contact and separation as the active set settles. Because that expression is only piecewise smooth across the active-set boundary, evaluating it on a dof that has not yet settled can inject a large, poorly conditioned residual and Jacobian row into that Newton step. Gating on the raw normal Lagrange multiplier instead is a coarser but cheaper and more conservative criterion: it forces such transitioning dofs onto the trivial identity residual (a well-conditioned, constant-derivative Jacobian row) until the normal contact state has clearly resolved, trading a small amount of formulation fidelity for solver robustness during that transient.
| tangential_pressure | The tangential contact pressure p_t |
| augmented_tangential_pressure | The velocity-augmented tangential pressure q_t (see frictionalContactResidual) |
| radius | The Coulomb friction radius (see coulombFrictionRadius) |
| normal_pressure | The raw, unaugmented normal contact pressure |
| epsilon | The minimum normal contact pressure required to enable frictional enforcement |
Definition at line 222 of file MortarContactUtils.h.
| std::array< T, N > Moose::Mortar::Contact::projectToClosedSphere | ( | const std::array< T, N > & | vector, |
| const T & | radius | ||
| ) |
Project vector onto a closed sphere centered at the origin with radius radius.
| vector | The vector to project |
| radius | The radius of the closed sphere to project onto |
vector unchanged if its norm is already within radius, otherwise vector scaled down to have norm radius Definition at line 104 of file MortarContactUtils.h.
Referenced by alartCurnierFrictionResidual(), and TYPED_TEST().