20 params.addClassDescription(
"Computes the q-function for a segment along the crack front, used in "
21 "the calculation of the J-integral");
22 params.addRequiredParam<Real>(
"j_integral_radius_inner",
"Radius for J-Integral calculation");
23 params.addRequiredParam<Real>(
"j_integral_radius_outer",
"Radius for J-Integral calculation");
24 params.addRequiredParam<UserObjectName>(
"crack_front_definition",
25 "The CrackFrontDefinition user object name");
26 params.addParam<
unsigned int>(
27 "crack_front_point_index",
28 "The index of the point on the crack front corresponding to this q function");
29 params.set<
bool>(
"use_displaced_mesh") =
false;
34 : AuxKernel(parameters),
35 _j_integral_radius_inner(getParam<Real>(
"j_integral_radius_inner")),
36 _j_integral_radius_outer(getParam<Real>(
"j_integral_radius_outer")),
38 _has_crack_front_point_index(isParamValid(
"crack_front_point_index")),
39 _crack_front_point_index(
40 _has_crack_front_point_index ? getParam<unsigned int>(
"crack_front_point_index") : 0),
42 _is_point_on_intersecting_boundary(false)
56 "crack_front_point_index ignored because CrackFrontDefinition is set to treat as 2D");
63 mooseError(
"crack_front_point_index must be specified in DomainIntegralQFunction");
73 Real dist_to_crack_front;
74 Real dist_along_tangent;
87 Real tangent_multiplier = 1.0;
90 const Real forward_segment_length =
92 const Real backward_segment_length =
95 if (dist_along_tangent >= 0.0)
97 if (forward_segment_length > 0.0)
98 tangent_multiplier = 1.0 - dist_along_tangent / forward_segment_length;
102 if (backward_segment_length > 0.0)
103 tangent_multiplier = 1.0 + dist_along_tangent / backward_segment_length;
107 tangent_multiplier = std::max(tangent_multiplier, 0.0);
108 tangent_multiplier = std::min(tangent_multiplier, 1.0);
113 tangent_multiplier = 0.0;
115 q *= tangent_multiplier;
124 const Point * crack_front_point =
127 Point p = *_current_node;
128 const RealVectorValue & crack_front_tangent =
131 RealVectorValue crack_node_to_current_node = p - *crack_front_point;
132 dist_along_tangent = crack_node_to_current_node * crack_front_tangent;
133 RealVectorValue projection_point = *crack_front_point + dist_along_tangent * crack_front_tangent;
134 RealVectorValue axis_to_current_node = p - projection_point;
135 dist_to_front = axis_to_current_node.norm();