13 #include "MooseError.h"
25 params.addRequiredParam<std::vector<Real>>(
"cut_data",
26 "Vector of Real values providing cut information");
28 params.addParam<std::vector<Real>>(
"cut_scale",
"X,Y scale factors for geometric cuts");
29 params.addParam<std::vector<Real>>(
"cut_translate",
"X,Y translations for geometric cuts");
31 params.addClassDescription(
"Creates a UserObject for a line segment cut on 2D meshes for XFEM");
40 const int line_cut_data_len = 6;
43 if (
_cut_data.size() % line_cut_data_len != 0)
44 mooseError(
"Length of LineSegmentCutSetUserObject cut_data must be a multiple of 6.");
46 unsigned int num_cuts =
_cut_data.size() / line_cut_data_len;
49 std::pair<Real, Real> scale;
50 if (isParamValid(
"cut_scale"))
52 auto vec_scale = getParam<std::vector<Real>>(
"cut_scale");
53 scale = std::make_pair(vec_scale[0], vec_scale[1]);
57 scale = std::make_pair(1.0, 1.0);
60 std::pair<Real, Real> trans;
61 if (isParamValid(
"cut_translate"))
63 auto vec_trans = getParam<std::vector<Real>>(
"cut_translate");
64 trans = std::make_pair(vec_trans[0], vec_trans[1]);
68 trans = std::make_pair(0.0, 0.0);
75 for (
unsigned int i = 0; i < num_cuts; ++i)
77 Real x0 = (
_cut_data[i * line_cut_data_len + 0] + trans.first) * scale.first;
78 Real y0 = (
_cut_data[i * line_cut_data_len + 1] + trans.second) * scale.second;
79 Real x1 = (
_cut_data[i * line_cut_data_len + 2] + trans.first) * scale.first;
80 Real y1 = (
_cut_data[i * line_cut_data_len + 3] + trans.second) * scale.second;
84 std::make_pair(
_cut_data[i * line_cut_data_len + 4],
_cut_data[i * line_cut_data_len + 5]));
88 mooseError(
"Number of start/end times must match number of cut line endpoint sets");
91 const std::vector<Point>
94 mooseError(
"getCrackFrontPoints() is not implemented for this object.");