https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
77const std::vector<Point>
78LineSegmentCutUserObject::getCrackFrontPoints(unsigned int /*num_crack_front_points*/) const
79{
80 mooseError("getCrackFrontPoints() is not implemented for this object.");
81}
82
83const std::vector<RealVectorValue>
84LineSegmentCutUserObject::getCrackPlaneNormals(unsigned int /*num_crack_front_points*/) const
85{
86 mooseError("getCrackPlaneNormals() is not implemented for this object.");
87}
registerMooseObject("XFEMApp", LineSegmentCutUserObject)
Real scale
static InputParameters validParams()
std::vector< std::pair< Point, Point > > _cut_line_endpoints
std::vector< std::pair< Real, Real > > _cut_time_ranges
Vector of start/end times for each cut segment.
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
LineSegmentCutUserObject(const InputParameters &parameters)
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
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
void mooseError(Args &&... args) const
bool isParamValid(const std::string &name) const