20 MooseEnum disp_component(
"x=0 y=1 z=2");
22 params.addClassDescription(
"Implements a boundary condition that enforces a displacement field "
23 "around a crack tip based on applied stress intensity factors.");
24 params.addRequiredParam<MooseEnum>(
25 "component", disp_component,
"The component of the displacement to apply BC on.");
26 params.addRequiredParam<UserObjectName>(
"crack_front_definition",
27 "The CrackFrontDefinition user object name");
28 params.addParam<
unsigned int>(
29 "crack_front_point_index", 0,
"The index of the point on the crack front.");
30 params.addRequiredParam<Real>(
"poissons_ratio",
"Poisson's ratio for the material.");
31 params.addRequiredParam<Real>(
"youngs_modulus",
"Young's modulus of the material.");
32 params.addRequiredParam<FunctionName>(
"KI_function",
33 "Function describing the Mode I stress intensity factor.");
34 params.addRequiredParam<FunctionName>(
"KII_function",
35 "Function describing the Mode II stress intensity factor.");
36 params.addRequiredParam<FunctionName>(
37 "KIII_function",
"Function describing the Mode III stress intensity factor.");
38 params.set<
bool>(
"preset") =
true;
43 : DirichletBCBase(parameters),
44 _component(getParam<MooseEnum>(
"component")),
46 _crack_front_point_index(getParam<unsigned int>(
"crack_front_point_index")),
47 _poissons_ratio(getParam<Real>(
"poissons_ratio")),
48 _youngs_modulus(getParam<Real>(
"youngs_modulus")),
49 _ki_function(getFunction(
"KI_function")),
50 _kii_function(getFunction(
"KII_function")),
51 _kiii_function(getFunction(
"KIII_function"))
60 const Real ki_val =
_ki_function.value(_t, *_current_node);
64 const Point p(*_current_node);
70 const Real st2 = std::sin(
_theta / 2.0);
71 const Real ct2 = std::cos(
_theta / 2.0);
76 disp = 1 / (2 *
_mu) * std::sqrt(
_r / (2 * libMesh::pi)) *
77 (ki_val * ct2 * (
_kappa - 1 + 2 * st2 * st2) +
78 kii_val * st2 * (
_kappa + 1 + 2 * ct2 * ct2));
80 disp = 1 / (2 *
_mu) * std::sqrt(
_r / (2 * libMesh::pi)) *
81 (ki_val * st2 * (
_kappa + 1 - 2 * ct2 * ct2) -
82 kii_val * ct2 * (
_kappa - 1 - 2 * st2 * st2));
84 disp = 1 /
_mu * std::sqrt(2 *
_r / libMesh::pi) * kiii_val * st2;