33 "The string of displacements suitable for the problem statement");
36 params.
addParam<MaterialPropertyName>(
"GI_c",
37 "Critical energy release rate in normal direction.");
38 params.
addParam<MaterialPropertyName>(
"GII_c",
39 "Critical energy release rate in shear direction.");
40 params.
addParam<MaterialPropertyName>(
"normal_strength",
"Tensile strength in normal direction.");
41 params.
addParam<MaterialPropertyName>(
"shear_strength",
"Tensile strength in shear direction.");
42 params.
addParam<
Real>(
"power_law_parameter",
"The power law parameter.");
43 MooseEnum criterion(
"POWER_LAW BK",
"BK");
44 params.
addParam<
Real>(
"viscosity", 0.0,
"Viscosity for damage model.");
46 "mixed_mode_criterion", criterion,
"Option for mixed mode propagation criterion.");
48 "lag_displacement_jump",
50 "Whether to use old displacement jumps to compute the effective displacement jump.");
52 "regularization_alpha", 1e-10,
"Regularization parameter for the Macaulay bracket.");
54 "penalty_stiffness",
"penalty_stiffness > 0.0",
"Penalty stiffness for CZM.");
56 "GI_c GII_c normal_strength shear_strength power_law_parameter viscosity " 57 "mixed_mode_criterion lag_displacement_jump regularization_alpha " 59 "Bilinear mixed mode traction");
75 _ndisp(coupledComponents(
"displacements")),
76 _normal_strength(getMaterialProperty<
Real>(
"normal_strength")),
77 _shear_strength(getMaterialProperty<
Real>(
"shear_strength")),
78 _GI_c(getMaterialProperty<
Real>(
"GI_c")),
79 _GII_c(getMaterialProperty<
Real>(
"GII_c")),
80 _penalty_stiffness_czm(getParam<
Real>(
"penalty_stiffness")),
82 _power_law_parameter(getParam<
Real>(
"power_law_parameter")),
83 _viscosity(getParam<
Real>(
"viscosity")),
84 _regularization_alpha(getParam<
Real>(
"regularization_alpha"))
88 for (
unsigned int i = 0; i <
_ndisp; ++i)
95 for (
unsigned int i =
_ndisp; i < 3; i++)
106 "The CZM bilinear mixed mode traction parameters GI_c, GII_c, normal_strength, " 107 "shear_strength, and power_law_parameter are required. Revise your input and add " 108 "those parameters if you want to use the bilinear mixed mode traction model. ");
157 const std::unordered_map<const DofObject *, T> & map,
const Node *
const node)
171 auto & [damage, old_damage] = map_pr.second;
177 delta_tangential_lm.setZero();
204 map_pr.second.setToIdentity();
250 "The deformation gradient on the secondary surface is not finite in " 251 "PenaltySimpleCohesiveZoneModel. MOOSE needs to cut the time step size.");
256 const auto Uinv = MathUtils::sqrt(
C).inverse().get();
263 global_interface_displacement;
281 const auto interface_displacement_jump =
284 const ADRealVectorValue delta_active(std::max(interface_displacement_jump(0), 0.0),
285 interface_displacement_jump(1),
286 interface_displacement_jump(2));
287 const ADRealVectorValue delta_inactive(std::min(interface_displacement_jump(0), 0.0), 0.0, 0.0);
312 const auto interface_displacement_jump =
317 const auto delta_s = std::sqrt(interface_displacement_jump(1) * interface_displacement_jump(1) +
318 interface_displacement_jump(2) * interface_displacement_jump(2) +
330 const auto interface_displacement_jump =
335 const auto delta_normal_knot =
337 const auto delta_shear_knot =
344 const auto delta_mixed = std::sqrt(delta_shear_knot * delta_shear_knot +
345 Utility::pow<2>(mixity_ratio * delta_normal_knot));
348 std::sqrt(1.0 + mixity_ratio * mixity_ratio) / delta_mixed;
355 const auto interface_displacement_jump =
373 (normalized_GII_c - normalized_GI_c) *
374 std::pow(mixity_ratio * mixity_ratio / (1 + mixity_ratio * mixity_ratio),
379 const auto Gc_mixed =
393 const auto interface_displacement_jump =
396 const auto delta_normal_pos =
398 interface_displacement_jump(0);
400 _dof_to_delta_max[node] = std::sqrt(Utility::pow<2>(interface_displacement_jump(1)) +
401 Utility::pow<2>(interface_displacement_jump(2)) +
412 if (delta_max < delta_initial)
414 else if (delta_max > delta_final)
418 delta_final * (delta_max - delta_initial) / delta_max / (delta_final - delta_initial);
454 const auto & test_i = (*_test)[i];
494 "Internal error in czmGlobalTraction. Index exceeds the traction vector size.");
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_interface_displacement_jump
Map from degree of freedom to local displacement jump.
virtual MooseMesh & mesh()=0
std::unordered_map< const DofObject *, ADReal > _dof_to_normal_strength
ADReal _normal_strength_interpolation
Interpolated value of normal_strength.
Real getModeMixityRatio(const Node *const node) const
unsigned int _qp
Quadrature point index for the mortar segments.
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_interface_F
Map from degree of freedom to interface deformation gradient tensor.
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_rotation_matrix
*** Kinematics/displacement jump quantities *** Map from degree of freedom to rotation matrix ...
virtual void computeFandR(const Node *const node) override
const MooseArray< ADRealVectorValue > & _ad_grad_zero
std::unordered_map< const DofObject *, TwoVector > _dof_to_frictional_lagrange_multipliers
Map from degree of freedom to augmented lagrange multiplier.
const MaterialProperty< Real > & _GI_c
Fracture parameter mode I.
const Real _regularization_alpha
Parameter for the regularization of the Macaulay bracket.
virtual void reinit() override
const ADVariableGradient & adCoupledGradient(const std::string &var_name, unsigned int comp=0) const
const Real & _dt
Current delta t... or timestep size.
virtual void reinit() override
std::vector< const GenericVariableGradient< true > * > _grad_disp
Coupled displacement gradients.
const unsigned int _ndisp
Number of displacement components.
virtual void timestepSetup() override
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_weighted_displacements
A map from node to weighted displacements.
virtual const ADVariableValue & czmGlobalTraction(unsigned int i) const
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_initial
registerMooseObject("ContactApp", BilinearMixedModeCohesiveZoneModel)
User object for computing weighted gaps and contact pressure for penalty based mortar constraints...
const bool _nodal
Whether the dof objects are nodal; if they're not, then they're elemental.
const std::vector< Real > & _JxW_msm
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_interface_R
Map from degree of freedom to interface rotation tensor.
const Parallel::Communicator & _communicator
virtual void computeBilinearMixedModeTraction(const Node *const node) override
Encapsulate the CZM constitutive behavior.
Creates dof object to weighted tangential velocities map.
const MaterialProperty< Real > & _GII_c
Fracture parameter mode II.
Real getCohesiveDamage(const Node *const node) const
virtual void finalize() override
const Real _viscosity
Viscosity for damage model.
virtual bool constrainedByOwner() const override
ADReal _shear_strength_interpolation
Interpolated value of shear_strength.
static RankTwoTensorTempl Identity()
std::unordered_map< const DofObject *, std::pair< ADReal, Real > > _dof_to_damage
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_max
const libMesh::QBase *const & _qrule_msm
static const std::string F
std::unordered_map< const DofObject *, ADReal > _dof_to_GII_c
const Real _epsilon_tolerance
Tolerance to avoid NaN/Inf in automatic differentiation operations.
virtual void computeQpIProperties() override
Computes properties that are functions both of _qp and _i, for example the weighted gap...
MixedModeCriterion
Mixed-mode propagation criterion.
bool isParamValid(const std::string &name) const
virtual void computeQpProperties() override
Computes properties that are functions only of the current quadrature point (_qp), e.g.
static RankTwoTensorTempl initializeFromRows(const libMesh::TypeVector< ADReal > &row0, const libMesh::TypeVector< ADReal > &row1, const libMesh::TypeVector< ADReal > &row2)
Real getLocalDisplacementTangential(const Node *const node) const
Elem const *const & _lower_secondary_elem
virtual void computeGlobalTraction(const Node *const node) override
Compute global traction for mortar application.
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_czm_traction
Total Lagrangian stress to be applied on CZM interface.
virtual void initialize() override
ADRankTwoTensor _F_interpolation
Deformation gradient for interpolation.
const MaterialProperty< Real > & _shear_strength
The shear strength material property.
std::vector< ADVariableValue > _czm_interpolated_traction
The global traction.
const MaterialProperty< Real > & _normal_strength
The normal strength material property.
virtual unsigned int dimension() const
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_F_neighbor
Map from degree of freedom to neighbor, interpolated deformation gradient tensor. ...
std::vector< Point > _normals
ADRankTwoTensor _F_neighbor_interpolation
Deformation gradient for interpolation of the neighbor projection.
const VariableTestValue * _test
A pointer to the test function associated with the weighted gap.
virtual const Node * nodePtr(const dof_id_type i) const
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_final
virtual void timestepSetup() override
std::unordered_map< const DofObject *, ADRankTwoTensor > _dof_to_F
Map from degree of freedom to secondary, interpolated deformation gradient tensor.
unsigned int n_points() const
virtual void computeQpProperties() override
Computes properties that are functions only of the current quadrature point (_qp), e.g.
virtual void computeModeMixity(const Node *const node)
void paramError(const std::string ¶m, Args... args) const
static InputParameters validParams()
static InputParameters validParams()
T normalizeQuantity(const std::unordered_map< const DofObject *, T > &map, const Node *const node)
Normalize mortar quantities (remove mortar integral scaling)
std::unordered_map< const DofObject *, ADReal > _dof_to_czm_normal_traction
Map from degree of freedom to czm normal traction.
BilinearMixedModeCohesiveZoneModel(const InputParameters ¶meters)
std::unordered_map< const DofObject *, ADReal > _dof_to_shear_strength
virtual void computeDamage(const Node *const node)
const MooseArray< Real > & _coord
Member for handling change of coordinate systems (xyz, rz, spherical)
ADReal _GI_c_interpolation
Interpolated value of fracture paramter mode I.
virtual void computeCriticalDisplacementJump(const Node *const node)
Creates dof object to weighted gap map.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::unordered_map< const DofObject *, ADReal > _dof_to_GI_c
IntRange< T > make_range(T beg, T end)
std::vector< const GenericVariableGradient< true > * > _grad_disp_neighbor
Coupled displacement and neighbor displacement gradient.
User object that interface pressure resulting from a simple traction separation law.
unsigned int _i
Test function index.
virtual void prepareJumpKinematicQuantities() override
enum BilinearMixedModeCohesiveZoneModel::MixedModeCriterion _mix_mode_criterion
T regularizedHeavyside(T x, Real smoothing_length)
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
User object that interface pressure resulting from a simple traction separation law.
virtual void computeFinalDisplacementJump(const Node *const node)
const Real _power_law_parameter
Power law parameter for bilinear traction model.
Real getLocalDisplacementNormal(const Node *const node) const
virtual void computeEffectiveDisplacementJump(const Node *const node)
virtual void computeQpIProperties() override
Computes properties that are functions both of _qp and _i, for example the weighted gap...
std::unordered_map< const DofObject *, std::pair< ADReal, Real > > _dof_to_weighted_gap
A map from node to weighted gap and normalization (if requested)
virtual void initialize() override
MooseUnits pow(const MooseUnits &, int)
ADReal _GII_c_interpolation
Interpolated value of fracture paramter mode II.
auto index_range(const T &sizable)
static const std::string C
std::unordered_map< const DofObject *, ADReal > _dof_to_mode_mixity_ratio
Map from degree of freedom to mode mixity ratio (AD needed?)
const Real _penalty_stiffness_czm
virtual void finalize() override