28 "Vector of Real values providing cut information");
39 const int cut_data_len = 9;
43 mooseError(
"Length of CircleCutUserObject cut_data must be 9");
55 std::pair<Real, Real> ray_radii =
56 std::make_pair(std::sqrt(rays.first.norm_sq()), std::sqrt(rays.second.norm_sq()));
58 if (std::abs(ray_radii.first - ray_radii.second) > 1e-10)
59 mooseError(
"CircleCutUserObject only works for a circular cut");
61 _radius = 0.5 * (ray_radii.first + ray_radii.second);
62 _angle = std::acos((rays.first * rays.second) / (ray_radii.first * ray_radii.second));
69 if (std::abs(ray *
_normal) < 1e-15 && std::sqrt(ray.norm_sq()) <
_radius)
74const std::vector<Point>
77 std::vector<Point> crack_front_points(number_crack_front_points);
83 for (
unsigned int i = 0; i < number_crack_front_points; ++i)
85 Real theta = 2.0 *
libMesh::pi / number_crack_front_points * i;
86 crack_front_points[i] =
90 return crack_front_points;
93const std::vector<RealVectorValue>
96 mooseError(
"getCrackPlaneNormals() is not implemented for this object.");
registerMooseObject("XFEMApp", CircleCutUserObject)
virtual const std::vector< RealVectorValue > getCrackPlaneNormals(unsigned int num_crack_front_points) const override
get a set of normal vectors along a crack front from a XFEM GeometricCutUserObject
virtual const std::vector< Point > getCrackFrontPoints(unsigned int num_crack_front_points) const override
get a set of points along a crack front from a XFEM GeometricCutUserObject
virtual bool isInsideCutPlane(Point p) const override
CircleCutUserObject(const InputParameters ¶meters)
static InputParameters validParams()
std::vector< Point > _vertices
std::vector< Real > _cut_data
static InputParameters validParams()
void mooseError(Args &&... args) const
TypeVector< typename CompareTypes< Real, T2 >::supertype > cross(const TypeVector< T2 > &v) const
void normalizePoint(Point &p)