www.mooseframework.org
CrackFrontDefinition.h
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 
10 #pragma once
11 
12 #include "GeneralUserObject.h"
14 #include "BoundaryRestrictable.h"
15 #include <set>
16 
18 class AuxiliarySystem;
19 template <typename>
22 
23 // libMesh forward declarations
24 namespace libMesh
25 {
26 class QBase;
27 }
28 
29 template <>
30 InputParameters validParams<CrackFrontDefinition>();
31 void addCrackFrontDefinitionParams(InputParameters & params);
32 
36 class CrackFrontDefinition : public GeneralUserObject, public BoundaryRestrictable
37 {
38 public:
39  static InputParameters validParams();
40 
41  CrackFrontDefinition(const InputParameters & parameters);
42  virtual ~CrackFrontDefinition();
43 
44  virtual void initialSetup();
45  virtual void initialize();
46  virtual void finalize();
47  virtual void execute();
48 
49  const Node * getCrackFrontNodePtr(const unsigned int node_index) const;
50  const Point * getCrackFrontPoint(const unsigned int point_index) const;
51  const RealVectorValue & getCrackFrontTangent(const unsigned int point_index) const;
52  Real getCrackFrontForwardSegmentLength(const unsigned int point_index) const;
53  Real getCrackFrontBackwardSegmentLength(const unsigned int point_index) const;
54  const RealVectorValue & getCrackDirection(const unsigned int point_index) const;
55  Real getDistanceAlongFront(const unsigned int point_index) const;
56  bool hasAngleAlongFront() const;
57  Real getAngleAlongFront(const unsigned int point_index) const;
58  unsigned int getNumCrackFrontPoints() const;
59  bool treatAs2D() const { return _treat_as_2d; }
60  RealVectorValue rotateToCrackFrontCoords(const RealVectorValue vector,
61  const unsigned int point_index) const;
63  const unsigned int point_index) const;
64 
68  RealVectorValue rotateFromCrackFrontCoordsToGlobal(const RealVectorValue vector,
69  const unsigned int point_index) const;
70 
75  void calculateRThetaToCrackFront(const Point qp,
76  const unsigned int point_index,
77  Real & r,
78  Real & theta) const;
84  unsigned int calculateRThetaToCrackFront(const Point qp, Real & r, Real & theta) const;
85 
86  bool isNodeOnIntersectingBoundary(const Node * const node) const;
87  bool isPointWithIndexOnIntersectingBoundary(const unsigned int point_index) const;
88  Real getCrackFrontTangentialStrain(const unsigned int node_index) const;
90  bool isNodeInRing(const unsigned int ring_index,
91  const dof_id_type connected_node_id,
92  const unsigned int node_index) const;
93 
94  Real DomainIntegralQFunction(unsigned int crack_front_point_index,
95  unsigned int ring_index,
96  const Node * const current_node) const;
97  Real DomainIntegralTopologicalQFunction(unsigned int crack_front_point_index,
98  unsigned int ring_index,
99  const Node * const current_node) const;
100 
101 protected:
103  {
107  };
108 
110  {
113  };
114 
116  {
120  };
121 
123  {
126  };
127 
128  AuxiliarySystem & _aux;
129  MooseMesh & _mesh;
130  static const Real _tol;
131 
132  std::vector<unsigned int> _ordered_crack_front_nodes;
134  std::vector<Point> _crack_front_points;
135  std::vector<RealVectorValue> _tangent_directions;
136  std::vector<RealVectorValue> _crack_directions;
137  std::vector<std::pair<Real, Real>> _segment_lengths;
138  std::vector<Real> _distances_along_front;
139  std::vector<Real> _angles_along_front;
140  std::vector<Real> _strain_along_front;
141  std::vector<RankTwoTensor> _rot_matrix;
145  RealVectorValue _crack_direction_vector;
148  std::vector<BoundaryName> _crack_mouth_boundary_names;
149  std::vector<BoundaryID> _crack_mouth_boundary_ids;
150  std::vector<BoundaryName> _intersecting_boundary_names;
151  std::vector<BoundaryID> _intersecting_boundary_ids;
152  RealVectorValue _crack_mouth_coordinates;
153  RealVectorValue _crack_plane_normal;
156  unsigned int _axis_2d;
158  unsigned int _symmetry_plane;
159  std::string _disp_x_var_name;
160  std::string _disp_y_var_name;
161  std::string _disp_z_var_name;
162  bool _t_stress;
164  unsigned int _last_ring;
165  unsigned int _first_ring;
166  std::map<std::pair<dof_id_type, unsigned int>, std::set<dof_id_type>>
168  MooseEnum _q_function_type;
170  std::vector<Real> _j_integral_radius_inner;
171  std::vector<Real> _j_integral_radius_outer;
174 
175  void getCrackFrontNodes(std::set<dof_id_type> & nodes);
176  void orderCrackFrontNodes(std::set<dof_id_type> & nodes);
177  void orderEndNodes(std::vector<dof_id_type> & end_nodes);
178  void
179  pickLoopCrackEndNodes(std::vector<dof_id_type> & end_nodes,
180  std::set<dof_id_type> & nodes,
181  std::map<dof_id_type, std::vector<dof_id_type>> & node_to_line_elem_map,
182  std::vector<std::vector<dof_id_type>> & line_elems);
183  unsigned int maxNodeCoor(std::vector<Node *> & nodes, unsigned int dir0 = 0);
186  RealVectorValue calculateCrackFrontDirection(const Point & crack_front_point,
187  const RealVectorValue & tangent_direction,
188  const CRACK_NODE_TYPE ntype) const;
190  void createQFunctionRings();
191  void addNodesToQFunctionRing(std::set<dof_id_type> & nodes_new_ring,
192  const std::set<dof_id_type> & nodes_old_ring,
193  const std::set<dof_id_type> & nodes_all_rings,
194  const std::set<dof_id_type> & nodes_neighbor1,
195  const std::set<dof_id_type> & nodes_neighbor2,
196  std::vector<std::vector<const Elem *>> & nodes_to_elem_map);
197  void projectToFrontAtPoint(Real & dist_to_front,
198  Real & dist_along_tangent,
199  unsigned int crack_front_point_index,
200  const Node * const current_node) const;
201 };
CrackFrontDefinition::_mesh
MooseMesh & _mesh
Definition: CrackFrontDefinition.h:129
addCrackFrontDefinitionParams
void addCrackFrontDefinitionParams(InputParameters &params)
Definition: CrackFrontDefinition.C:38
CrackFrontDefinition::createQFunctionRings
void createQFunctionRings()
Definition: CrackFrontDefinition.C:1460
CrackFrontDefinition::END_1_NODE
Definition: CrackFrontDefinition.h:118
CrackFrontDefinition::pickLoopCrackEndNodes
void pickLoopCrackEndNodes(std::vector< dof_id_type > &end_nodes, std::set< dof_id_type > &nodes, std::map< dof_id_type, std::vector< dof_id_type >> &node_to_line_elem_map, std::vector< std::vector< dof_id_type >> &line_elems)
Definition: CrackFrontDefinition.C:565
CrackFrontDefinition::_axis_2d
unsigned int _axis_2d
Definition: CrackFrontDefinition.h:156
CrackFrontDefinition::_last_ring
unsigned int _last_ring
Definition: CrackFrontDefinition.h:164
CrackFrontDefinition::_ordered_crack_front_nodes
std::vector< unsigned int > _ordered_crack_front_nodes
Definition: CrackFrontDefinition.h:132
CrackFrontDefinition::_j_integral_radius_outer
std::vector< Real > _j_integral_radius_outer
Definition: CrackFrontDefinition.h:171
CrackFrontDefinition::_angles_along_front
std::vector< Real > _angles_along_front
Definition: CrackFrontDefinition.h:139
CrackFrontDefinition::getCrackFrontNodePtr
const Node * getCrackFrontNodePtr(const unsigned int node_index) const
Definition: CrackFrontDefinition.C:1048
CrackFrontDefinition::getCrackFrontTangent
const RealVectorValue & getCrackFrontTangent(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1071
CrackFrontDefinition::calculateCrackFrontDirection
RealVectorValue calculateCrackFrontDirection(const Point &crack_front_point, const RealVectorValue &tangent_direction, const CRACK_NODE_TYPE ntype) const
Definition: CrackFrontDefinition.C:987
libMesh
Definition: RANFSNormalMechanicalContact.h:24
CrackFrontDefinition::initialize
virtual void initialize()
Definition: CrackFrontDefinition.C:298
CrackFrontDefinition::_crack_mouth_boundary_names
std::vector< BoundaryName > _crack_mouth_boundary_names
Definition: CrackFrontDefinition.h:148
CrackFrontDefinition::addNodesToQFunctionRing
void addNodesToQFunctionRing(std::set< dof_id_type > &nodes_new_ring, const std::set< dof_id_type > &nodes_old_ring, const std::set< dof_id_type > &nodes_all_rings, const std::set< dof_id_type > &nodes_neighbor1, const std::set< dof_id_type > &nodes_neighbor2, std::vector< std::vector< const Elem * >> &nodes_to_elem_map)
Definition: CrackFrontDefinition.C:1621
CrackFrontDefinition::_intersecting_boundary_names
std::vector< BoundaryName > _intersecting_boundary_names
Definition: CrackFrontDefinition.h:150
CrackFrontDefinition::CRACK_GEOM_DEFINITION
CRACK_GEOM_DEFINITION
Definition: CrackFrontDefinition.h:122
CrackFrontDefinition::maxNodeCoor
unsigned int maxNodeCoor(std::vector< Node * > &nodes, unsigned int dir0=0)
Definition: CrackFrontDefinition.C:627
CrackFrontDefinition::DomainIntegralQFunction
Real DomainIntegralQFunction(unsigned int crack_front_point_index, unsigned int ring_index, const Node *const current_node) const
Definition: CrackFrontDefinition.C:1675
CrackFrontDefinition::calculateTangentialStrainAlongFront
void calculateTangentialStrainAlongFront()
Definition: CrackFrontDefinition.C:1327
CrackFrontDefinition::_tol
static const Real _tol
Definition: CrackFrontDefinition.h:130
CrackFrontDefinition::validParams
static InputParameters validParams()
Definition: CrackFrontDefinition.C:26
CrackFrontDefinition::CURVED_CRACK_FRONT
Definition: CrackFrontDefinition.h:106
CrackFrontDefinition::_crack_direction_vector_end_2
RealVectorValue _crack_direction_vector_end_2
Definition: CrackFrontDefinition.h:147
CrackFrontDefinition::_crack_front_points
std::vector< Point > _crack_front_points
Definition: CrackFrontDefinition.h:134
CrackFrontDefinition::isNodeOnIntersectingBoundary
bool isNodeOnIntersectingBoundary(const Node *const node) const
Definition: CrackFrontDefinition.C:1290
CrackFrontDefinition::isNodeInRing
bool isNodeInRing(const unsigned int ring_index, const dof_id_type connected_node_id, const unsigned int node_index) const
Definition: CrackFrontDefinition.C:1651
CrackFrontDefinition::CRACK_NODE_TYPE
CRACK_NODE_TYPE
Definition: CrackFrontDefinition.h:115
CrackFrontDefinition
Works on top of NodalNormalsPreprocessor.
Definition: CrackFrontDefinition.h:36
CrackFrontDefinition::_q_function_rings
bool _q_function_rings
Definition: CrackFrontDefinition.h:163
CrackFrontDefinition::_strain_along_front
std::vector< Real > _strain_along_front
Definition: CrackFrontDefinition.h:140
CrackFrontDefinition::getCrackFrontTangentialStrain
Real getCrackFrontTangentialStrain(const unsigned int node_index) const
Definition: CrackFrontDefinition.C:1448
CrackFrontDefinition::DIRECTION_METHOD
DIRECTION_METHOD
Definition: CrackFrontDefinition.h:102
CrackFrontDefinition::_first_ring
unsigned int _first_ring
Definition: CrackFrontDefinition.h:165
CrackFrontDefinition::_distances_along_front
std::vector< Real > _distances_along_front
Definition: CrackFrontDefinition.h:138
CrackFrontDefinition::execute
virtual void execute()
Definition: CrackFrontDefinition.C:243
CrackFrontDefinition::orderEndNodes
void orderEndNodes(std::vector< dof_id_type > &end_nodes)
Definition: CrackFrontDefinition.C:515
CrackFrontDefinition::CRACK_FRONT_POINTS
Definition: CrackFrontDefinition.h:125
CrackFrontDefinition::_j_integral_radius_inner
std::vector< Real > _j_integral_radius_inner
Definition: CrackFrontDefinition.h:170
CrackFrontDefinition::~CrackFrontDefinition
virtual ~CrackFrontDefinition()
Definition: CrackFrontDefinition.C:240
CrackFrontDefinition::isPointWithIndexOnIntersectingBoundary
bool isPointWithIndexOnIntersectingBoundary(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1307
CrackFrontDefinition::END_CRACK_DIRECTION_VECTOR
Definition: CrackFrontDefinition.h:112
CrackFrontDefinition::hasAngleAlongFront
bool hasAngleAlongFront() const
Definition: CrackFrontDefinition.C:1102
CrackFrontDefinition::updateCrackFrontGeometry
void updateCrackFrontGeometry()
Definition: CrackFrontDefinition.C:710
CrackFrontDefinition::_crack_mouth_boundary_ids
std::vector< BoundaryID > _crack_mouth_boundary_ids
Definition: CrackFrontDefinition.h:149
CrackFrontDefinition::_disp_y_var_name
std::string _disp_y_var_name
Definition: CrackFrontDefinition.h:160
CrackFrontDefinition::_t_stress
bool _t_stress
Definition: CrackFrontDefinition.h:162
CrackFrontDefinition::_aux
AuxiliarySystem & _aux
Definition: CrackFrontDefinition.h:128
CrackFrontDefinition::getCrackFrontPoint
const Point * getCrackFrontPoint(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1057
CrackFrontDefinition::updateDataForCrackDirection
void updateDataForCrackDirection()
Definition: CrackFrontDefinition.C:905
CrackFrontDefinition::DomainIntegralTopologicalQFunction
Real DomainIntegralTopologicalQFunction(unsigned int crack_front_point_index, unsigned int ring_index, const Node *const current_node) const
Definition: CrackFrontDefinition.C:1729
CrackFrontPointsProvider.h
CrackFrontDefinition::rotateFromCrackFrontCoordsToGlobal
RealVectorValue rotateFromCrackFrontCoordsToGlobal(const RealVectorValue vector, const unsigned int point_index) const
rotate a vector from crack front cartesian coordinate to global cartesian coordinate
Definition: CrackFrontDefinition.C:1133
CrackFrontDefinition::_crack_front_node_to_node_map
std::map< std::pair< dof_id_type, unsigned int >, std::set< dof_id_type > > _crack_front_node_to_node_map
Definition: CrackFrontDefinition.h:167
CrackFrontDefinition::_num_points_from_provider
unsigned int _num_points_from_provider
Definition: CrackFrontDefinition.h:173
CrackFrontDefinition::_crack_mouth_coordinates
RealVectorValue _crack_mouth_coordinates
Definition: CrackFrontDefinition.h:152
CrackFrontDefinition::_intersecting_boundary_ids
std::vector< BoundaryID > _intersecting_boundary_ids
Definition: CrackFrontDefinition.h:151
CrackFrontDefinition::_crack_directions
std::vector< RealVectorValue > _crack_directions
Definition: CrackFrontDefinition.h:136
CrackFrontDefinition::calculateRThetaToCrackFront
void calculateRThetaToCrackFront(const Point qp, const unsigned int point_index, Real &r, Real &theta) const
calculate r and theta in the crack front polar coordinates
Definition: CrackFrontDefinition.C:1150
CrackFrontDefinition::getNumCrackFrontPoints
unsigned int getNumCrackFrontPoints() const
Definition: CrackFrontDefinition.C:1117
CrackFrontDefinition::getCrackDirection
const RealVectorValue & getCrackDirection(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1090
CrackFrontDefinition::_end_direction_method
END_DIRECTION_METHOD _end_direction_method
Definition: CrackFrontDefinition.h:144
CrackFrontDefinition::CRACK_DIRECTION_VECTOR
Definition: CrackFrontDefinition.h:104
CrackFrontDefinition::_disp_z_var_name
std::string _disp_z_var_name
Definition: CrackFrontDefinition.h:161
CrackFrontDefinition::getCrackFrontNodes
void getCrackFrontNodes(std::set< dof_id_type > &nodes)
Definition: CrackFrontDefinition.C:310
CrackFrontDefinition::_q_function_type
MooseEnum _q_function_type
Definition: CrackFrontDefinition.h:168
CrackFrontDefinition::_crack_direction_vector
RealVectorValue _crack_direction_vector
Definition: CrackFrontDefinition.h:145
CrackFrontDefinition::initialSetup
virtual void initialSetup()
Definition: CrackFrontDefinition.C:252
CrackFrontDefinition::_rot_matrix
std::vector< RankTwoTensor > _rot_matrix
Definition: CrackFrontDefinition.h:141
CrackFrontDefinition::rotateToCrackFrontCoords
RealVectorValue rotateToCrackFrontCoords(const RealVectorValue vector, const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1126
CrackFrontDefinition::getDistanceAlongFront
Real getDistanceAlongFront(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1096
CrackFrontDefinition::END_DIRECTION_METHOD
END_DIRECTION_METHOD
Definition: CrackFrontDefinition.h:109
CrackFrontDefinition::CRACK_FRONT_NODES
Definition: CrackFrontDefinition.h:124
CrackFrontDefinition::_overall_length
Real _overall_length
Definition: CrackFrontDefinition.h:142
CrackFrontDefinition::treatAs2D
bool treatAs2D() const
Definition: CrackFrontDefinition.h:59
CrackFrontDefinition::CRACK_MOUTH
Definition: CrackFrontDefinition.h:105
CrackFrontDefinition::projectToFrontAtPoint
void projectToFrontAtPoint(Real &dist_to_front, Real &dist_along_tangent, unsigned int crack_front_point_index, const Node *const current_node) const
Definition: CrackFrontDefinition.C:1742
RankTwoTensor
RankTwoTensorTempl< Real > RankTwoTensor
Definition: CrackFrontDefinition.h:20
CrackFrontDefinition::orderCrackFrontNodes
void orderCrackFrontNodes(std::set< dof_id_type > &nodes)
Definition: CrackFrontDefinition.C:375
CrackFrontDefinition::_geom_definition_method
CRACK_GEOM_DEFINITION _geom_definition_method
Definition: CrackFrontDefinition.h:133
CrackFrontDefinition::hasCrackFrontNodes
bool hasCrackFrontNodes() const
Definition: CrackFrontDefinition.h:89
CrackFrontDefinition::NO_SPECIAL_TREATMENT
Definition: CrackFrontDefinition.h:111
validParams< CrackFrontDefinition >
InputParameters validParams< CrackFrontDefinition >()
CrackFrontDefinition::_crack_front_points_provider
const CrackFrontPointsProvider * _crack_front_points_provider
Definition: CrackFrontDefinition.h:172
CrackFrontDefinition::_tangent_directions
std::vector< RealVectorValue > _tangent_directions
Definition: CrackFrontDefinition.h:135
CrackFrontDefinition::_crack_plane_normal
RealVectorValue _crack_plane_normal
Definition: CrackFrontDefinition.h:153
RankTwoTensorTempl
Definition: ACGrGrElasticDrivingForce.h:17
CrackFrontDefinition::MIDDLE_NODE
Definition: CrackFrontDefinition.h:117
CrackFrontDefinition::getAngleAlongFront
Real getAngleAlongFront(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1108
CrackFrontDefinition::getCrackFrontBackwardSegmentLength
Real getCrackFrontBackwardSegmentLength(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1084
CrackFrontDefinition::_is_point_on_intersecting_boundary
std::vector< bool > _is_point_on_intersecting_boundary
Definition: CrackFrontDefinition.h:169
CrackFrontDefinition::finalize
virtual void finalize()
Definition: CrackFrontDefinition.C:303
CrackFrontDefinition::END_2_NODE
Definition: CrackFrontDefinition.h:119
CrackFrontDefinition::_closed_loop
bool _closed_loop
Definition: CrackFrontDefinition.h:155
CrackFrontDefinition::_treat_as_2d
bool _treat_as_2d
Definition: CrackFrontDefinition.h:154
CrackFrontDefinition::_segment_lengths
std::vector< std::pair< Real, Real > > _segment_lengths
Definition: CrackFrontDefinition.h:137
CrackFrontDefinition::_direction_method
DIRECTION_METHOD _direction_method
Definition: CrackFrontDefinition.h:143
CrackFrontDefinition::getCrackFrontForwardSegmentLength
Real getCrackFrontForwardSegmentLength(const unsigned int point_index) const
Definition: CrackFrontDefinition.C:1078
CrackFrontDefinition::_has_symmetry_plane
bool _has_symmetry_plane
Definition: CrackFrontDefinition.h:157
CrackFrontDefinition::_disp_x_var_name
std::string _disp_x_var_name
Definition: CrackFrontDefinition.h:159
CrackFrontDefinition::_crack_direction_vector_end_1
RealVectorValue _crack_direction_vector_end_1
Definition: CrackFrontDefinition.h:146
CrackFrontDefinition::_symmetry_plane
unsigned int _symmetry_plane
Definition: CrackFrontDefinition.h:158
CrackFrontDefinition::CrackFrontDefinition
CrackFrontDefinition(const InputParameters &parameters)
Definition: CrackFrontDefinition.C:102
CrackFrontPointsProvider
Base class for crack front points provider.
Definition: CrackFrontPointsProvider.h:22