https://mooseframework.inl.gov
LineSegmentCutUserObject.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 
13 
16 {
17  // Get input parameters from parent class
19 
20  // Add required parameters
21  params.addRequiredParam<std::vector<Real>>("cut_data",
22  "Vector of Real values providing cut information");
23  // Add optional parameters
24  params.addParam<std::vector<Real>>("cut_scale", "X,Y scale factors for geometric cuts");
25  params.addParam<std::vector<Real>>("cut_translate", "X,Y translations for geometric cuts");
26  // Class description
27  params.addClassDescription("Creates a UserObject for a line segment cut on 2D meshes for XFEM");
28  // Return the parameters
29  return params;
30 }
31 
33  : GeometricCut2DUserObject(parameters), _cut_data(getParam<std::vector<Real>>("cut_data"))
34 {
35  // Set up constant parameters
36  const int cut_data_len = 4;
37 
38  // Throw error if length of cut_data is incorrect
39  if (_cut_data.size() != cut_data_len)
40  mooseError("Length of LineSegmentCutUserObject cut_data must be 4");
41 
42  // Assign scale and translate parameters
43  std::pair<Real, Real> scale;
44  if (isParamValid("cut_scale"))
45  {
46  auto vec_scale = getParam<std::vector<Real>>("cut_scale");
47  scale = std::make_pair(vec_scale[0], vec_scale[1]);
48  }
49  else
50  {
51  scale = std::make_pair(1.0, 1.0);
52  }
53 
54  std::pair<Real, Real> trans;
55  if (isParamValid("cut_translate"))
56  {
57  auto vec_trans = getParam<std::vector<Real>>("cut_translate");
58  trans = std::make_pair(vec_trans[0], vec_trans[1]);
59  }
60  else
61  {
62  trans = std::make_pair(0.0, 0.0);
63  }
64 
65  // Assign translated and scaled cut_data to vars used to construct cuts
66  Real x0 = (_cut_data[0] + trans.first) * scale.first;
67  Real y0 = (_cut_data[1] + trans.second) * scale.second;
68  Real x1 = (_cut_data[2] + trans.first) * scale.first;
69  Real y1 = (_cut_data[3] + trans.second) * scale.second;
70 
71  _cut_line_endpoints.push_back(std::make_pair(Point(x0, y0, 0.0), Point(x1, y1, 0.0)));
72 
73  if (_cut_line_endpoints.size() != _cut_time_ranges.size())
74  mooseError("Number of start/end times must match number of cut line endpoint sets");
75 }
76 
77 const std::vector<Point>
78 LineSegmentCutUserObject::getCrackFrontPoints(unsigned int /*num_crack_front_points*/) const
79 {
80  mooseError("getCrackFrontPoints() is not implemented for this object.");
81 }
82 
83 const std::vector<RealVectorValue>
84 LineSegmentCutUserObject::getCrackPlaneNormals(unsigned int /*num_crack_front_points*/) const
85 {
86  mooseError("getCrackPlaneNormals() is not implemented for this object.");
87 }
std::vector< std::pair< Point, Point > > _cut_line_endpoints
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void scale(MeshBase &mesh, const Real xs, const Real ys=0., const Real zs=0.)
static InputParameters validParams()
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
LineSegmentCutUserObject(const InputParameters &parameters)
void addRequiredParam(const std::string &name, const std::string &doc_string)
bool isParamValid(const std::string &name) const
registerMooseObject("XFEMApp", LineSegmentCutUserObject)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void mooseError(Args &&... args) const
std::vector< std::pair< Real, Real > > _cut_time_ranges
Vector of start/end times for each cut segment.
void addClassDescription(const std::string &doc_string)
static InputParameters validParams()
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 ...