www.mooseframework.org
GeometricSearchData.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 // MOOSE includes
13 #include "MooseTypes.h"
14 
15 // libMesh includes
16 #include "libmesh/enum_order.h"
17 
18 // C++ includes
19 #include <map>
20 
21 // Forward Declarations
22 class MooseMesh;
23 class SubProblem;
24 class PenetrationLocator;
25 class NearestNodeLocator;
26 class ElementPairLocator;
27 
29 {
30 public:
33  {
34  ALL,
39  };
40 
41  GeometricSearchData(SubProblem & subproblem, MooseMesh & mesh);
42  virtual ~GeometricSearchData();
43 
44  PenetrationLocator & getPenetrationLocator(const BoundaryName & master,
45  const BoundaryName & slave,
46  Order order = FIRST);
47  PenetrationLocator & getQuadraturePenetrationLocator(const BoundaryName & master,
48  const BoundaryName & slave,
49  Order order = FIRST);
50 
51  NearestNodeLocator & getNearestNodeLocator(const BoundaryName & master,
52  const BoundaryName & slave);
53  NearestNodeLocator & getNearestNodeLocator(const unsigned int master_id,
54  const unsigned int slave_id);
55 
56  NearestNodeLocator & getQuadratureNearestNodeLocator(const BoundaryName & master,
57  const BoundaryName & slave);
58  NearestNodeLocator & getQuadratureNearestNodeLocator(const unsigned int master_id,
59  const unsigned int slave_id);
60 
61  const std::map<std::pair<unsigned int, unsigned int>, PenetrationLocator *> &
63  {
64  return _penetration_locators;
65  }
66 
67  void addElementPairLocator(const unsigned int & interface_id,
68  std::shared_ptr<ElementPairLocator> epl);
69 
74 
78  void reinit();
79 
84 
90  Real maxPatchPercentage();
91 
96  void updateGhostedElems();
97 
98  // protected:
101  std::map<std::pair<unsigned int, unsigned int>, PenetrationLocator *> _penetration_locators;
102  std::map<std::pair<unsigned int, unsigned int>, NearestNodeLocator *> _nearest_node_locators;
103  std::map<unsigned int, std::shared_ptr<ElementPairLocator>> _element_pair_locators;
104 
105 protected:
107  std::set<unsigned int> _quadrature_boundaries;
108 
110  std::map<unsigned int, unsigned int> _slave_to_qslave;
111 
112 private:
121  void
122  generateQuadratureNodes(unsigned int slave_id, unsigned int qslave_id, bool reiniting = false);
123 
127  void updateQuadratureNodes(unsigned int slave_id);
128 
132  void reinitQuadratureNodes(unsigned int slave_id);
133 
137  bool _first;
138 };
GeometricSearchData::_quadrature_boundaries
std::set< unsigned int > _quadrature_boundaries
These are real boundaries that have quadrature nodes on them.
Definition: GeometricSearchData.h:107
type
MatType type
Definition: PetscDMMoose.C:1477
GeometricSearchData::maxPatchPercentage
Real maxPatchPercentage()
Maximum percentage through the search patch that any NearestNodeLocator had to look.
Definition: GeometricSearchData.C:127
GeometricSearchData::clearNearestNodeLocators
void clearNearestNodeLocators()
Clear out the Penetration Locators so they will redo the search.
Definition: GeometricSearchData.C:117
GeometricSearchData::QUADRATURE
Definition: GeometricSearchData.h:37
GeometricSearchData::update
void update(GeometricSearchType type=ALL)
Update all of the search objects.
Definition: GeometricSearchData.C:37
GeometricSearchData::getNearestNodeLocator
NearestNodeLocator & getNearestNodeLocator(const BoundaryName &master, const BoundaryName &slave)
Definition: GeometricSearchData.C:208
GeometricSearchData::updateQuadratureNodes
void updateQuadratureNodes(unsigned int slave_id)
Update the positions of the quadrature nodes.
Definition: GeometricSearchData.C:311
GeometricSearchData::~GeometricSearchData
virtual ~GeometricSearchData()
Definition: GeometricSearchData.C:27
GeometricSearchData::_subproblem
SubProblem & _subproblem
Definition: GeometricSearchData.h:99
GeometricSearchData::GeometricSearchData
GeometricSearchData(SubProblem &subproblem, MooseMesh &mesh)
Definition: GeometricSearchData.C:22
GeometricSearchData::GeometricSearchType
GeometricSearchType
Used to select groups of geometric search objects to update.
Definition: GeometricSearchData.h:32
ElementPairLocator
This is the ElementPairLocator class.
Definition: ElementPairLocator.h:34
GeometricSearchData::PENETRATION
Definition: GeometricSearchData.h:36
GeometricSearchData::ELEMENTPAIR
Definition: GeometricSearchData.h:38
GeometricSearchData::_element_pair_locators
std::map< unsigned int, std::shared_ptr< ElementPairLocator > > _element_pair_locators
Definition: GeometricSearchData.h:103
PenetrationLocator
Definition: PenetrationLocator.h:27
GeometricSearchData::_penetration_locators
std::map< std::pair< unsigned int, unsigned int >, PenetrationLocator * > _penetration_locators
Definition: GeometricSearchData.h:101
NearestNodeLocator
Finds the nearest node to each node in boundary1 to each node in boundary2 and the other way around.
Definition: NearestNodeLocator.h:24
GeometricSearchData::_nearest_node_locators
std::map< std::pair< unsigned int, unsigned int >, NearestNodeLocator * > _nearest_node_locators
Definition: GeometricSearchData.h:102
GeometricSearchData
Definition: GeometricSearchData.h:28
SubProblem
Generic class for solving transient nonlinear problems.
Definition: SubProblem.h:62
GeometricSearchData::getPenetrationLocator
PenetrationLocator & getPenetrationLocator(const BoundaryName &master, const BoundaryName &slave, Order order=FIRST)
Definition: GeometricSearchData.C:143
GeometricSearchData::_mesh
MooseMesh & _mesh
Definition: GeometricSearchData.h:100
GeometricSearchData::_first
bool _first
Denotes whether this is the first time the geometric search objects have been updated.
Definition: GeometricSearchData.h:137
GeometricSearchData::NEAREST_NODE
Definition: GeometricSearchData.h:35
GeometricSearchData::reinit
void reinit()
Completely redo all geometric search objects.
Definition: GeometricSearchData.C:90
GeometricSearchData::ALL
Definition: GeometricSearchData.h:34
GeometricSearchData::reinitQuadratureNodes
void reinitQuadratureNodes(unsigned int slave_id)
Completely redo quadrature nodes.
Definition: GeometricSearchData.C:339
MooseMesh
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition: MooseMesh.h:74
GeometricSearchData::_slave_to_qslave
std::map< unsigned int, unsigned int > _slave_to_qslave
A mapping of the real boundary id to the slave boundary ids.
Definition: GeometricSearchData.h:110
GeometricSearchData::getPenetrationLocators
const std::map< std::pair< unsigned int, unsigned int >, PenetrationLocator * > & getPenetrationLocators() const
Definition: GeometricSearchData.h:62
GeometricSearchData::generateQuadratureNodes
void generateQuadratureNodes(unsigned int slave_id, unsigned int qslave_id, bool reiniting=false)
Add Quadrature Nodes to the Mesh in support of Quadrature based penetration location and nearest node...
Definition: GeometricSearchData.C:265
MooseTypes.h
GeometricSearchData::getQuadratureNearestNodeLocator
NearestNodeLocator & getQuadratureNearestNodeLocator(const BoundaryName &master, const BoundaryName &slave)
Definition: GeometricSearchData.C:239
GeometricSearchData::getQuadraturePenetrationLocator
PenetrationLocator & getQuadraturePenetrationLocator(const BoundaryName &master, const BoundaryName &slave, Order order=FIRST)
Definition: GeometricSearchData.C:172
GeometricSearchData::addElementPairLocator
void addElementPairLocator(const unsigned int &interface_id, std::shared_ptr< ElementPairLocator > epl)
Definition: GeometricSearchData.C:304
GeometricSearchData::updateGhostedElems
void updateGhostedElems()
Updates the list of ghosted elements at the start of each time step for the nonlinear iteration patch...
Definition: GeometricSearchData.C:347