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");
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"))
103 return (1 -
_d[
_qp]) *
_K * delta_active +
_K * delta_inactive;
116 (1 -
_d[
_qp]) *
_K * ddelta_active_ddelta +
_K * ddelta_inactive_ddelta;
122 dtraction_ddelta -=
_K *
A;
124 return dtraction_ddelta;
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 =
197 const Real ddelta_final_dbeta =
207 const Real Gc_mixed =
214 const Real ddelta_final_dbeta =
236 Utility::pow<2>(delta_normal_pos));
240 const Real ddelta_normal_pos_ddelta_normal =
BiLinearMixedModeTraction(const InputParameters ¶meters)
static InputParameters validParams()
MaterialProperty< Real > & _delta_final
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
MaterialProperty< Real > & _d
virtual void initQpStatefulProperties() override
T regularizedHeavysideDerivative(T x, Real smoothing_length)
const Real _eta
The B-K power law parameter.
int delta(unsigned int i, unsigned int j)
Delta function, which returns zero if $i j$ and unity if $i=j$.
enum BiLinearMixedModeTraction::MixedModeCriterion _criterion
MaterialProperty< RealVectorValue > & _interface_traction
the value of the traction in local coordinates
virtual RankTwoTensor computeTractionDerivatives()
Compute the total traction derivatives w.r.t. the interface displacement jump.
const bool _lag_mode_mixity
RealVectorValue _ddelta_m_ddelta
Implementation of the mixed mode bilinear traction separation law described in Mixed-Mode Decohesion ...
RealVectorValue _ddelta_init_ddelta
void fillFromInputVector(const std::vector< Real > &input, FillMethod fill_method=autodetect)
RealVectorValue _ddelta_final_ddelta
MixedModeCriterion
mixed mode propagation criterion
const MaterialProperty< Real > & _S
The shear strength.
virtual void computeInterfaceTractionAndDerivatives() override
Compute the local traction and derivatives. This method should fill the _interface_traction and _dint...
virtual void computeDamage()
RealVectorValue _dd_ddelta
virtual RealVectorValue computeTraction()
The traction-separation law.
RealVectorValue _dbeta_ddelta
Base class used to implement traction separetion laws for materials whose beahvior can be described u...
MaterialProperty< Real > & _delta_init
void computeCriticalDisplacementJump()
registerMooseObject("SolidMechanicsApp", BiLinearMixedModeTraction)
MaterialProperty< Real > & _delta_m
MaterialProperty< Real > & _beta
The mode mixity ratio.
void computeFinalDisplacementJump()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void initQpStatefulProperties() override
const MaterialProperty< Real > & _d_old
const MaterialProperty< Real > & _GII_c
Mode II critical fracture toughness.
T regularizedHeavyside(T x, Real smoothing_length)
const MaterialProperty< Real > & _N
The normal strength.
void computeEffectiveDisplacementJump()
const bool _lag_disp_jump
const MaterialProperty< RealVectorValue > & _interface_displacement_jump
The displacment jump in local coordaintes.
const Real _K
Penalty elastic stiffness.
const MaterialProperty< RealVectorValue > & _interface_displacement_jump_old
old interface displacement jump value
MooseUnits pow(const MooseUnits &, int)
static InputParameters validParams()
const MaterialProperty< Real > & _GI_c
Mode I critical fracture toughness.
const Real _viscosity
The viscosity.
MaterialProperty< RankTwoTensor > & _dinterface_traction_djump
the traction's derivatives wrt the displacement jump in local coordinates