www.mooseframework.org
MovingLineSegmentCutSetUserObject.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 
13 
14 template <>
15 InputParameters
17 {
18  InputParameters params = validParams<LineSegmentCutSetUserObject>();
19  params.addRequiredParam<UserObjectName>("interface_velocity",
20  "The name of userobject that computes the velocity.");
21  params.addClassDescription(
22  "Creates a UserObject for a moving line segment cut on 2D meshes for XFEM");
23  return params;
24 }
25 
27  const InputParameters & parameters)
28  : LineSegmentCutSetUserObject(parameters)
29 {
30 }
31 
32 const std::vector<Point>
34  unsigned int /*num_crack_front_points*/) const
35 {
36  mooseError("getCrackFrontPoints() is not implemented for this object.");
37 }
38 
39 void
41 {
42  const UserObject * uo =
43  &(_fe_problem.getUserObjectBase(getParam<UserObjectName>("interface_velocity")));
44 
45  if (dynamic_cast<const XFEMMovingInterfaceVelocityBase *>(uo) == nullptr)
46  mooseError("UserObject casting to XFEMMovingInterfaceVelocityBase in "
47  "MovingLineSegmentCutSetUserObject");
48 
49  _interface_velocity = dynamic_cast<const XFEMMovingInterfaceVelocityBase *>(uo);
50 
51  const_cast<XFEMMovingInterfaceVelocityBase *>(_interface_velocity)->initialize();
52 }
53 
54 void
56 {
57  std::vector<Real> cut_data_copy = _cut_data;
58 
59  const int line_cut_data_len = 6;
60 
61  if (_cut_data.size() % line_cut_data_len != 0)
62  mooseError("Length of MovingLineSegmentCutSetUserObject cut_data must be a multiple of 6.");
63 
64  unsigned int num_cuts = _cut_data.size() / line_cut_data_len;
65 
66  if (_t_step > 1)
67  {
68  for (unsigned int i = 1; i < _interface_velocity->numberPoints(); ++i)
69  {
70  cut_data_copy[(i - 1) * line_cut_data_len + 0] +=
72  cut_data_copy[(i - 1) * line_cut_data_len + 2] +=
74  }
75  }
76 
77  _cut_line_endpoints.clear();
78  for (unsigned int i = 0; i < num_cuts; ++i)
79  {
80  Real x0 = cut_data_copy[i * line_cut_data_len + 0];
81  Real y0 = cut_data_copy[i * line_cut_data_len + 1];
82  Real x1 = cut_data_copy[i * line_cut_data_len + 2];
83  Real y1 = cut_data_copy[i * line_cut_data_len + 3];
84  _cut_line_endpoints.push_back(std::make_pair(Point(x0, y0, 0.0), Point(x1, y1, 0.0)));
85  }
86 
88 }
89 
90 void
92 {
93  const int line_cut_data_len = 6;
94 
95  if (_t_step > 1)
96  {
97  for (unsigned int i = 1; i < _interface_velocity->numberPoints(); ++i)
98  {
99  _cut_data[(i - 1) * line_cut_data_len + 0] +=
101  _cut_data[(i - 1) * line_cut_data_len + 2] +=
103  }
104  }
105 
107 }
108 
109 Real
110 MovingLineSegmentCutSetUserObject::cutFraction(unsigned int /*cut_num*/, Real /*time*/) const
111 {
112  return 1;
113 }
registerMooseObject
registerMooseObject("XFEMApp", MovingLineSegmentCutSetUserObject)
LineSegmentCutSetUserObject::_cut_data
std::vector< Real > _cut_data
Definition: LineSegmentCutSetUserObject.h:32
MovingLineSegmentCutSetUserObject
Definition: MovingLineSegmentCutSetUserObject.h:22
XFEMMovingInterfaceVelocityBase::numberPoints
unsigned int numberPoints() const
Compute total number of points that are used to define an interface.
Definition: XFEMMovingInterfaceVelocityBase.h:38
MovingLineSegmentCutSetUserObject::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: MovingLineSegmentCutSetUserObject.C:33
MovingLineSegmentCutSetUserObject::_interface_velocity
const XFEMMovingInterfaceVelocityBase * _interface_velocity
Pointer to XFEMMovingInterfaceVelocityBase object.
Definition: MovingLineSegmentCutSetUserObject.h:40
XFEMMovingInterfaceVelocityBase::computeMovingInterfaceVelocity
virtual Real computeMovingInterfaceVelocity(unsigned int point_id) const =0
Compute the interface velocity for a point.
MovingLineSegmentCutSetUserObject::initialize
virtual void initialize() override
Definition: MovingLineSegmentCutSetUserObject.C:40
validParams< LineSegmentCutSetUserObject >
InputParameters validParams< LineSegmentCutSetUserObject >()
Definition: LineSegmentCutSetUserObject.C:19
LineSegmentCutSetUserObject
Definition: LineSegmentCutSetUserObject.h:20
MovingLineSegmentCutSetUserObject::finalize
virtual void finalize() override
Definition: MovingLineSegmentCutSetUserObject.C:91
validParams< MovingLineSegmentCutSetUserObject >
InputParameters validParams< MovingLineSegmentCutSetUserObject >()
Definition: MovingLineSegmentCutSetUserObject.C:16
GeometricCut2DUserObject::_cut_line_endpoints
std::vector< std::pair< Point, Point > > _cut_line_endpoints
Definition: GeometricCut2DUserObject.h:41
MovingLineSegmentCutSetUserObject.h
MovingLineSegmentCutSetUserObject::cutFraction
virtual Real cutFraction(unsigned int cut_num, Real time) const override
Find the fractional distance along a specified cut line for the current time that is currently active...
Definition: MovingLineSegmentCutSetUserObject.C:110
GeometricCutUserObject::finalize
virtual void finalize() override
Definition: GeometricCutUserObject.C:254
MovingLineSegmentCutSetUserObject::execute
virtual void execute() override
Definition: MovingLineSegmentCutSetUserObject.C:55
GeometricCutUserObject::execute
virtual void execute() override
Definition: GeometricCutUserObject.C:67
MovingLineSegmentCutSetUserObject::MovingLineSegmentCutSetUserObject
MovingLineSegmentCutSetUserObject(const InputParameters &parameters)
Definition: MovingLineSegmentCutSetUserObject.C:26