11#include "libmesh/utility.h"
22 "GI_c",
"Critical energy release rate in normal direction.");
24 "Critical energy release rate in shear direction.");
26 "Tensile strength in normal direction.");
28 "Tensile strength in shear direction.");
30 MooseEnum criterion(
"POWER_LAW BK",
"BK");
31 params.
addParam<Real>(
"viscosity", 0.0,
"Viscosity.");
33 "mixed_mode_criterion", criterion,
"Option for mixed mode propagation criterion.");
37 "lag_mode_mixity",
true,
"Whether to use old displacement jumps to compute the mode mixity.");
39 "lag_displacement_jump",
41 "Whether to use old displacement jumps to compute the effective displacement jump.");
42 params.
addParam<Real>(
"alpha", 1e-10,
"Regularization parameter for the Macaulay bracket.");
50 _K(getParam<Real>(
"penalty_stiffness")),
51 _d(declareProperty<Real>(_base_name +
"damage")),
52 _d_old(getMaterialPropertyOld<Real>(_base_name +
"damage")),
53 _interface_displacement_jump_old(
54 getMaterialPropertyOld<RealVectorValue>(_base_name +
"interface_displacement_jump")),
56 declareProperty<Real>(_base_name +
"effective_displacement_jump_at_damage_initiation")),
58 declareProperty<Real>(_base_name +
"effective_displacement_jump_at_full_degradation")),
59 _delta_m(declareProperty<Real>(_base_name +
"effective_displacement_jump")),
60 _GI_c(getMaterialProperty<Real>(_base_name + getParam<MaterialPropertyName>(
"GI_c"))),
61 _GII_c(getMaterialProperty<Real>(_base_name + getParam<MaterialPropertyName>(
"GII_c"))),
62 _N(getMaterialProperty<Real>(_base_name + getParam<MaterialPropertyName>(
"normal_strength"))),
63 _S(getMaterialProperty<Real>(_base_name + getParam<MaterialPropertyName>(
"shear_strength"))),
64 _eta(getParam<Real>(
"eta")),
65 _beta(declareProperty<Real>(_base_name +
"mode_mixity_ratio")),
66 _viscosity(getParam<Real>(
"viscosity")),
68 _lag_mode_mixity(getParam<bool>(
"lag_mode_mixity")),
69 _lag_disp_jump(getParam<bool>(
"lag_displacement_jump")),
70 _alpha(getParam<Real>(
"alpha"))
100 const RealVectorValue delta_active(std::max(delta(0), 0.), delta(1), delta(2));
101 const RealVectorValue delta_inactive(std::min(delta(0), 0.), 0, 0);
103 return (1 -
_d[
_qp]) *
_K * delta_active +
_K * delta_inactive;
116 (1 -
_d[
_qp]) *
_K * ddelta_active_ddelta +
_K * ddelta_inactive_ddelta;
119 const RealVectorValue delta_active(std::max(delta(0), 0.), delta(1), delta(2));
122 dtraction_ddelta -=
_K *
A;
124 return dtraction_ddelta;
130 const RealVectorValue delta =
135 const Real delta_s = std::sqrt(delta(1) * delta(1) + delta(2) * delta(2));
139 _dbeta_ddelta = RealVectorValue(-delta_s / delta(0) / delta(0),
140 delta(1) / delta_s / delta(0),
141 delta(2) / delta_s / delta(0));
153 const RealVectorValue delta =
156 const Real delta_normal0 =
_N[
_qp] /
_K;
157 const Real delta_shear0 =
_S[
_qp] /
_K;
163 const Real delta_mixed =
164 std::sqrt(delta_shear0 * delta_shear0 + Utility::pow<2>(
_beta[
_qp] * delta_normal0));
166 delta_normal0 * delta_shear0 * std::sqrt(1 +
_beta[
_qp] *
_beta[
_qp]) / delta_mixed;
169 const Real ddelta_init_dbeta =
180 const RealVectorValue delta =
197 const Real ddelta_final_dbeta =
207 const Real Gc_mixed =
214 const Real ddelta_final_dbeta =
217 std::pow(Gc_mixed, -1 /
_eta - 1) *
231 const RealVectorValue delta =
235 _delta_m[
_qp] = std::sqrt(Utility::pow<2>(delta(1)) + Utility::pow<2>(delta(2)) +
236 Utility::pow<2>(delta_normal_pos));
240 const Real ddelta_normal_pos_ddelta_normal =
244 RealVectorValue(delta_normal_pos * ddelta_normal_pos_ddelta_normal, delta(1), delta(2));
registerMooseObject("SolidMechanicsApp", BiLinearMixedModeTraction)
Implementation of the mixed mode bilinear traction separation law described in Mixed-Mode Decohesion ...
void computeEffectiveDisplacementJump()
virtual RankTwoTensor computeTractionDerivatives()
Compute the total traction derivatives w.r.t. the interface displacement jump.
RealVectorValue _dd_ddelta
virtual RealVectorValue computeTraction()
The traction-separation law.
virtual void computeInterfaceTractionAndDerivatives() override
Compute the local traction and derivatives. This method should fill the _interface_traction and _dint...
const MaterialProperty< RealVectorValue > & _interface_displacement_jump_old
old interface displacement jump value
const MaterialProperty< Real > & _S
The shear strength.
MaterialProperty< Real > & _d
const Real _viscosity
The viscosity.
RealVectorValue _ddelta_init_ddelta
const MaterialProperty< Real > & _d_old
RealVectorValue _ddelta_final_ddelta
BiLinearMixedModeTraction(const InputParameters ¶meters)
virtual void computeDamage()
const MaterialProperty< Real > & _GII_c
Mode II critical fracture toughness.
MaterialProperty< Real > & _delta_m
enum BiLinearMixedModeTraction::MixedModeCriterion _criterion
void computeCriticalDisplacementJump()
MixedModeCriterion
mixed mode propagation criterion
const MaterialProperty< Real > & _N
The normal strength.
const bool _lag_disp_jump
RealVectorValue _dbeta_ddelta
MaterialProperty< Real > & _delta_final
const Real _eta
The B-K power law parameter.
MaterialProperty< Real > & _beta
The mode mixity ratio.
static InputParameters validParams()
const MaterialProperty< Real > & _GI_c
Mode I critical fracture toughness.
virtual void initQpStatefulProperties() override
RealVectorValue _ddelta_m_ddelta
const bool _lag_mode_mixity
const Real _K
Penalty elastic stiffness.
void computeFinalDisplacementJump()
MaterialProperty< Real > & _delta_init
MaterialProperty< RankTwoTensor > & _dinterface_traction_djump
the traction's derivatives wrt the displacement jump in local coordinates
const MaterialProperty< RealVectorValue > & _interface_displacement_jump
The displacment jump in local coordaintes.
MaterialProperty< RealVectorValue > & _interface_traction
the value of the traction in local coordinates
Base class used to implement traction separetion laws for materials whose beahvior can be described u...
static InputParameters validParams()
virtual void initQpStatefulProperties()
void fillFromInputVector(const std::vector< T > &input, FillMethod fill_method=autodetect)
void vectorOuterProduct(const libMesh::TypeVector< T > &, const libMesh::TypeVector< T > &)
T regularizedHeavyside(const T &x, Real smoothing_length)
T regularizedHeavysideDerivative(const T &x, Real smoothing_length)