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