34 params.
addParam<MaterialPropertyName>(
"GI_c",
35 "Critical energy release rate in normal direction.");
36 params.
addParam<MaterialPropertyName>(
"GII_c",
37 "Critical energy release rate in shear direction.");
38 params.
addParam<MaterialPropertyName>(
"normal_strength",
"Tensile strength in normal direction.");
39 params.
addParam<MaterialPropertyName>(
"shear_strength",
"Tensile strength in shear direction.");
40 params.
addParam<
Real>(
"power_law_parameter",
"The power law parameter.");
41 MooseEnum criterion(
"POWER_LAW BK",
"BK");
42 params.
addParam<
Real>(
"viscosity", 0.0,
"Viscosity for damage model.");
44 "mixed_mode_criterion", criterion,
"Option for mixed mode propagation criterion.");
46 "lag_displacement_jump",
48 "Whether to use old displacement jumps to compute the effective displacement jump.");
49 params.
addParam<
bool>(
"set_compressive_traction_to_zero",
51 "Zero compressive traction (set to true, allowing the use of standard " 52 "zero-penetration mortar contact constraints in " 53 "the normal direction).");
55 "regularization_alpha", 1e-10,
"Regularization parameter for the Macaulay bracket.");
57 "penalty_stiffness",
"penalty_stiffness > 0.0",
"Penalty stiffness for CZM.");
59 "GI_c GII_c normal_strength shear_strength power_law_parameter viscosity " 60 "mixed_mode_criterion lag_displacement_jump regularization_alpha " 62 "Bilinear mixed mode traction");
74 _set_compressive_traction_to_zero(getParam<bool>(
"set_compressive_traction_to_zero")),
75 _normal_strength(getMaterialProperty<
Real>(
"normal_strength")),
76 _shear_strength(getMaterialProperty<
Real>(
"shear_strength")),
77 _GI_c(getMaterialProperty<
Real>(
"GI_c")),
78 _GII_c(getMaterialProperty<
Real>(
"GII_c")),
79 _penalty_stiffness_czm(getParam<
Real>(
"penalty_stiffness")),
81 _power_law_parameter(getParam<
Real>(
"power_law_parameter")),
82 _viscosity(getParam<
Real>(
"viscosity")),
83 _regularization_alpha(getParam<
Real>(
"regularization_alpha"))
91 "The CZM bilinear mixed mode traction parameters GI_c, GII_c, normal_strength, " 92 "shear_strength, and power_law_parameter are required. Revise your input and add " 93 "those parameters if you want to use the bilinear mixed mode traction model. ");
143 using std::max, std::min;
157 const auto interface_displacement_jump =
161 interface_displacement_jump(1),
162 interface_displacement_jump(2));
177 const auto interface_displacement_jump =
183 sqrt(interface_displacement_jump(1) * interface_displacement_jump(1) +
184 interface_displacement_jump(2) * interface_displacement_jump(2) +
_epsilon_tolerance);
197 const auto interface_displacement_jump =
202 const auto delta_normal_knot =
204 const auto delta_shear_knot =
211 const auto delta_mixed =
sqrt(delta_shear_knot * delta_shear_knot +
212 Utility::pow<2>(mixity_ratio * delta_normal_knot));
215 sqrt(1.0 + mixity_ratio * mixity_ratio) / delta_mixed;
224 const auto interface_displacement_jump =
242 (normalized_GII_c - normalized_GI_c) *
243 pow(mixity_ratio * mixity_ratio / (1 + mixity_ratio * mixity_ratio),
248 const auto Gc_mixed =
264 const auto interface_displacement_jump =
267 const auto delta_normal_pos =
269 interface_displacement_jump(0);
272 Utility::pow<2>(interface_displacement_jump(2)) +
284 if (delta_max < delta_initial)
286 else if (delta_max > delta_final)
289 damage = delta_final * (delta_max - delta_initial) / delta_max / (delta_final - delta_initial);
291 if (damage < damage_old)
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.
void paramError(const std::string ¶m, Args... args) const
const MaterialProperty< Real > & _GI_c
Fracture parameter mode I.
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_czm_traction
Total Lagrangian stress to be applied on CZM interface.
const Real _regularization_alpha
Parameter for the regularization of the Macaulay bracket.
const bool _set_compressive_traction_to_zero
Zero compressive traction.
static InputParameters validParams()
T normalizeQuantity(const std::unordered_map< const DofObject *, T > &map, const Node *const node)
Normalize mortar quantities (remove mortar integral scaling)
const Real & _dt
Current delta t... or timestep size.
virtual void computeQpProperties() override
Computes properties that are functions only of the current quadrature point (_qp), e.g.
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_interface_displacement_jump
Map from degree of freedom to local displacement jump.
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
const Parallel::Communicator & _communicator
Creates dof object to weighted tangential velocities map.
const Real _epsilon_tolerance
Tolerance to avoid NaN/Inf in automatic differentiation operations.
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.
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_max
std::unordered_map< const DofObject *, ADReal > _dof_to_GII_c
auto max(const L &left, const R &right)
virtual void computeQpIProperties() override
Computes properties that are functions both of _qp and _i, for example the weighted gap...
MixedModeCriterion
Mixed-mode propagation criterion.
virtual void computeQpProperties() override
Computes properties that are functions only of the current quadrature point (_qp), e.g.
Real getLocalDisplacementTangential(const Node *const node) const
Elem const *const & _lower_secondary_elem
const MaterialProperty< Real > & _shear_strength
The shear strength material property.
const MaterialProperty< Real > & _normal_strength
The normal strength material property.
virtual const Node * nodePtr(const dof_id_type i) const
std::unordered_map< const DofObject *, ADReal > _dof_to_delta_final
virtual void computeDamage(const Node *const node) override
virtual void computeModeMixity(const Node *const node)
static InputParameters validParams()
BilinearMixedModeCohesiveZoneModel(const InputParameters ¶meters)
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
std::unordered_map< const DofObject *, ADReal > _dof_to_shear_strength
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 computeQpIProperties() override
Computes properties that are functions both of _qp and _i, for example the weighted gap...
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
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
std::unordered_map< const DofObject *, ADReal > _dof_to_GI_c
T regularizedHeavyside(const T &x, Real smoothing_length)
User object that computes bilinear mixed mode traction separation law.
unsigned int _i
Test function index.
enum BilinearMixedModeCohesiveZoneModel::MixedModeCriterion _mix_mode_criterion
bool isParamValid(const std::string &name) const
virtual void computeFinalDisplacementJump(const Node *const node)
const Real _power_law_parameter
Power law parameter for bilinear traction model.
virtual void initialize() override
virtual void computeCZMTraction(const Node *const node) override
Encapsulate the CZM constitutive behavior.
Real getLocalDisplacementNormal(const Node *const node) const
virtual void computeEffectiveDisplacementJump(const Node *const node)
std::unordered_map< const DofObject *, std::pair< ADReal, Real > > _dof_to_weighted_gap
A map from node to weighted gap and normalization (if requested)
Base class for mortar-based cohesive zone model.
auto min(const L &left, const R &right)
virtual void initialize() override
MooseUnits pow(const MooseUnits &, int)
std::unordered_map< dof_id_type, std::pair< ADReal, Real > > & _dof_to_damage
Damage values (pair of current and old) on CZM interface.
ADReal _GII_c_interpolation
Interpolated value of fracture paramter mode II.
std::unordered_map< const DofObject *, ADReal > _dof_to_mode_mixity_ratio
Map from degree of freedom to mode mixity ratio (AD needed?)
virtual void finalize() override
const Real _penalty_stiffness_czm