www.mooseframework.org
LineSegmentCutSetUserObject.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
12 // MOOSE includes
13 #include "MooseError.h"
14 
16 
17 template <>
18 InputParameters
20 {
21  // Get input parameters from parent class
22  InputParameters params = validParams<GeometricCut2DUserObject>();
23 
24  // Add required parameters
25  params.addRequiredParam<std::vector<Real>>("cut_data",
26  "Vector of Real values providing cut information");
27  // Add optional parameters
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");
30  // Class description
31  params.addClassDescription("Creates a UserObject for a line segment cut on 2D meshes for XFEM");
32  // Return the parameters
33  return params;
34 }
35 
37  : GeometricCut2DUserObject(parameters), _cut_data(getParam<std::vector<Real>>("cut_data"))
38 {
39  // Set up constant parameters
40  const int line_cut_data_len = 6;
41 
42  // Throw error if length of cut_data is incorrect
43  if (_cut_data.size() % line_cut_data_len != 0)
44  mooseError("Length of LineSegmentCutSetUserObject cut_data must be a multiple of 6.");
45 
46  unsigned int num_cuts = _cut_data.size() / line_cut_data_len;
47 
48  // Assign scale and translate parameters
49  std::pair<Real, Real> scale;
50  if (isParamValid("cut_scale"))
51  {
52  auto vec_scale = getParam<std::vector<Real>>("cut_scale");
53  scale = std::make_pair(vec_scale[0], vec_scale[1]);
54  }
55  else
56  {
57  scale = std::make_pair(1.0, 1.0);
58  }
59 
60  std::pair<Real, Real> trans;
61  if (isParamValid("cut_translate"))
62  {
63  auto vec_trans = getParam<std::vector<Real>>("cut_translate");
64  trans = std::make_pair(vec_trans[0], vec_trans[1]);
65  }
66  else
67  {
68  trans = std::make_pair(0.0, 0.0);
69  }
70 
71  // Clear _start_times & _end_times vectors initialized from
72  // time_start_cut & time_end_cut values
73  _cut_time_ranges.clear();
74 
75  for (unsigned int i = 0; i < num_cuts; ++i)
76  {
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;
81  _cut_line_endpoints.push_back(std::make_pair(Point(x0, y0, 0.0), Point(x1, y1, 0.0)));
82 
83  _cut_time_ranges.push_back(
84  std::make_pair(_cut_data[i * line_cut_data_len + 4], _cut_data[i * line_cut_data_len + 5]));
85  }
86 
87  if (_cut_line_endpoints.size() != _cut_time_ranges.size())
88  mooseError("Number of start/end times must match number of cut line endpoint sets");
89 }
90 
91 const std::vector<Point>
92 LineSegmentCutSetUserObject::getCrackFrontPoints(unsigned int /*num_crack_front_points*/) const
93 {
94  mooseError("getCrackFrontPoints() is not implemented for this object.");
95 }
LineSegmentCutSetUserObject::_cut_data
std::vector< Real > _cut_data
Definition: LineSegmentCutSetUserObject.h:32
LineSegmentCutSetUserObject::LineSegmentCutSetUserObject
LineSegmentCutSetUserObject(const InputParameters &parameters)
Definition: LineSegmentCutSetUserObject.C:36
validParams< LineSegmentCutSetUserObject >
InputParameters validParams< LineSegmentCutSetUserObject >()
Definition: LineSegmentCutSetUserObject.C:19
GeometricCut2DUserObject::_cut_time_ranges
std::vector< std::pair< Real, Real > > _cut_time_ranges
Vector of start/end times for each cut segment.
Definition: GeometricCut2DUserObject.h:61
registerMooseObject
registerMooseObject("XFEMApp", LineSegmentCutSetUserObject)
LineSegmentCutSetUserObject.h
GeometricCut2DUserObject
Definition: GeometricCut2DUserObject.h:20
LineSegmentCutSetUserObject
Definition: LineSegmentCutSetUserObject.h:20
LineSegmentCutSetUserObject::getCrackFrontPoints
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
Definition: LineSegmentCutSetUserObject.C:92
GeometricCut2DUserObject::_cut_line_endpoints
std::vector< std::pair< Point, Point > > _cut_line_endpoints
Definition: GeometricCut2DUserObject.h:41
validParams< GeometricCut2DUserObject >
InputParameters validParams< GeometricCut2DUserObject >()
Definition: GeometricCut2DUserObject.C:22