35 params.
addParam<MaterialPropertyName>(
"GI_c",
36 "Critical energy release rate in normal direction.");
37 params.
addParam<MaterialPropertyName>(
"GII_c",
38 "Critical energy release rate in shear direction.");
39 params.
addParam<MaterialPropertyName>(
"normal_strength",
"Tensile strength in normal direction.");
40 params.
addParam<MaterialPropertyName>(
"shear_strength",
"Tensile strength in shear direction.");
41 params.
addParam<Real>(
"power_law_parameter",
"The power law parameter.");
42 MooseEnum criterion(
"POWER_LAW BK",
"BK");
43 params.
addParam<Real>(
"viscosity", 0.0,
"Viscosity for damage model.");
45 "mixed_mode_criterion", criterion,
"Option for mixed mode propagation criterion.");
47 "lag_displacement_jump",
49 "Whether to use old displacement jumps to compute the effective displacement jump.");
50 params.
addParam<
bool>(
"set_compressive_traction_to_zero",
52 "Zero compressive traction (set to true, allowing the use of standard "
53 "zero-penetration mortar contact constraints in "
54 "the normal direction).");
56 "regularization_alpha", 1e-10,
"Regularization parameter for the Macaulay bracket.");
58 "penalty_stiffness",
"penalty_stiffness > 0.0",
"Penalty stiffness for CZM.");
60 "GI_c GII_c normal_strength shear_strength power_law_parameter viscosity "
61 "mixed_mode_criterion lag_displacement_jump regularization_alpha "
63 "Bilinear mixed mode traction");
75 _set_compressive_traction_to_zero(getParam<bool>(
"set_compressive_traction_to_zero")),
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"))
92 "The CZM bilinear mixed mode traction parameters GI_c, GII_c, normal_strength, "
93 "shear_strength, and power_law_parameter are required. Revise your input and add "
94 "those parameters if you want to use the bilinear mixed mode traction model. ");
145 using std::max, std::min;
159 const auto interface_displacement_jump =
163 interface_displacement_jump(1),
164 interface_displacement_jump(2));
165 const ADRealVectorValue delta_inactive(min(interface_displacement_jump(0), 0.0), 0.0, 0.0);
183 const auto interface_displacement_jump =
189 sqrt(interface_displacement_jump(1) * interface_displacement_jump(1) +
190 interface_displacement_jump(2) * interface_displacement_jump(2) +
_epsilon_tolerance);
203 const auto interface_displacement_jump =
208 const auto delta_normal_knot =
210 const auto delta_shear_knot =
217 const auto delta_mixed = sqrt(delta_shear_knot * delta_shear_knot +
218 Utility::pow<2>(mixity_ratio * delta_normal_knot));
221 sqrt(1.0 + mixity_ratio * mixity_ratio) / delta_mixed;
228 using std::sqrt, std::pow;
230 const auto interface_displacement_jump =
248 (normalized_GII_c - normalized_GI_c) *
249 pow(mixity_ratio * mixity_ratio / (1 + mixity_ratio * mixity_ratio),
254 const auto Gc_mixed =
270 const auto interface_displacement_jump =
273 const auto delta_normal_pos =
275 interface_displacement_jump(0);
278 Utility::pow<2>(interface_displacement_jump(2)) +
290 if (delta_max < delta_initial)
292 else if (delta_max > delta_final)
295 damage = delta_final * (delta_max - delta_initial) / delta_max / (delta_final - delta_initial);
297 if (damage < damage_old)
391 const Node *
const node)
const
404 return sqrt(tangential_one * tangential_one + tangential_two * tangential_two);
416 return it->second(0);
423 const Node *
const node)
const
430 return sqrt(it->second(1) * it->second(1) + it->second(2) * it->second(2));
441 return it->second(1);
452 return it->second(2);
463 return it->second.norm();
registerMooseObject("ContactApp", BilinearMixedModeCohesiveZoneModel)
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
User object that computes bilinear mixed mode traction separation law.
virtual bool constrainedByOwner() const override
const bool _set_compressive_traction_to_zero
Zero compressive traction.
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_final
Real getLocalDisplacementTangentialOne(const Node *const node) const
Real getCohesiveDamage(const Node *const node) const
const MaterialProperty< Real > & _normal_strength
The normal strength material property.
MixedModeCriterion
Mixed-mode propagation criterion.
const Real _power_law_parameter
Power law parameter for bilinear traction model.
static InputParameters validParams()
std::unordered_map< const DofObject *, ADReal > _dof_to_shear_strength
const Real _penalty_stiffness_czm
const Real _regularization_alpha
Parameter for the regularization of the Macaulay bracket.
virtual void computeDamage(const Node *const node) override
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_max
Real getLocalDisplacementTangential(const Node *const node) const
Real getCohesiveTractionTangentialMagnitude(const Node *const node) const
virtual void computeQpProperties() override
Computes properties that are functions only of the current quadrature point (_qp),...
Real getLocalDisplacementTangentialEffective(const Node *const node) const
virtual void initialize() override
Real getCohesiveTractionTangentialTwo(const Node *const node) const
std::unordered_map< const DofObject *, ADReal > _dof_to_normal_strength
const MaterialProperty< Real > & _GI_c
Fracture parameter mode I.
const MaterialProperty< Real > & _GII_c
Fracture parameter mode II.
std::unordered_map< const DofObject *, ADReal > _dof_to_mode_mixity_ratio
Map from degree of freedom to mode mixity ratio (AD needed?)
Real getCohesiveTractionNormal(const Node *const node) const
virtual void computeQpIProperties() override
Computes properties that are functions both of _qp and _i, for example the weighted gap.
ADReal _GI_c_interpolation
Interpolated value of fracture paramter mode I.
virtual void computeFinalDisplacementJump(const Node *const node)
ADReal _shear_strength_interpolation
Interpolated value of shear_strength.
virtual void computeEffectiveDisplacementJump(const Node *const node)
enum BilinearMixedModeCohesiveZoneModel::MixedModeCriterion _mix_mode_criterion
const Real _viscosity
Viscosity for damage model.
std::unordered_map< const DofObject *, RealVectorValue > _dof_to_local_czm_traction
Map from degree of freedom to the local-frame cohesive traction.
virtual void finalize() override
const MaterialProperty< Real > & _shear_strength
The shear strength material property.
Real getModeMixityRatio(const Node *const node) const
Real getLocalDisplacementNormal(const Node *const node) const
virtual void computeModeMixity(const Node *const node)
Real getCohesiveTractionTangentialOne(const Node *const node) const
std::unordered_map< const DofObject *, ADReal > _dof_to_GI_c
std::unordered_map< const DofObject *, ADReal > _dof_to_GII_c
virtual void computeCriticalDisplacementJump(const Node *const node)
virtual void computeCZMTraction(const Node *const node) override
Encapsulate the CZM constitutive behavior.
Real getCohesiveTractionEffective(const Node *const node) const
Real getLocalDisplacementTangentialTwo(const Node *const node) const
ADReal _GII_c_interpolation
Interpolated value of fracture paramter mode II.
ADReal _normal_strength_interpolation
Interpolated value of normal_strength.
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_initial
BilinearMixedModeCohesiveZoneModel(const InputParameters ¶meters)
Base class for mortar-based cohesive zone model.
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_interface_displacement_jump
Map from degree of freedom to local displacement jump.
virtual void computeQpProperties() override
Computes properties that are functions only of the current quadrature point (_qp),...
virtual void computeQpIProperties() override
Computes properties that are functions both of _qp and _i, for example the weighted gap.
const Real _epsilon_tolerance
Tolerance to avoid NaN/Inf in automatic differentiation operations.
static InputParameters validParams()
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_czm_traction
Total Lagrangian stress to be applied on CZM interface.
virtual void finalize() override
std::unordered_map< dof_id_type, std::pair< ADReal, Real > > & _dof_to_damage
Damage values (pair of current and old) on CZM interface.
T normalizeQuantity(const std::unordered_map< const DofObject *, T > &map, const Node *const node)
Normalize mortar quantities (remove mortar integral scaling)
virtual void initialize() override
void paramError(const std::string ¶m, Args... args) const
bool isParamValid(const std::string &name) const
virtual const Node * nodePtr(const dof_id_type i) const
Elem const *const & _lower_secondary_elem
const std::vector< Real > & _JxW_msm
User object for computing weighted gaps and contact pressure for penalty based mortar constraints.
const Real & _dt
Current delta t... or timestep size.
virtual MooseMesh & mesh()=0
Creates dof object to weighted gap map.
unsigned int _i
Test function index.
unsigned int _qp
Quadrature point index for the mortar segments.
const MooseArray< Real > & _coord
Member for handling change of coordinate systems (xyz, rz, spherical)
std::unordered_map< const DofObject *, std::pair< ADReal, Real > > _dof_to_weighted_gap
A map from node to weighted gap and normalization (if requested)
const bool _nodal
Whether the dof objects are nodal; if they're not, then they're elemental.
Creates dof object to weighted tangential velocities map.
const Parallel::Communicator & _communicator
T regularizedHeavyside(const T &x, Real smoothing_length)