libMesh
point_locator_base.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2024 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 
19 
20 #ifndef LIBMESH_POINT_LOCATOR_BASE_H
21 #define LIBMESH_POINT_LOCATOR_BASE_H
22 
23 // Local Includes
24 #include "libmesh/reference_counted_object.h"
25 #include "libmesh/libmesh_common.h"
26 
27 // C++ includes
28 #include <cstddef>
29 #include <memory>
30 #include <set>
31 #include <vector>
32 
33 namespace libMesh
34 {
35 
36 // Forward Declarations
37 class PointLocatorBase;
38 class MeshBase;
39 class Point;
40 class TreeBase;
41 class Elem;
42 class Node;
43 enum PointLocatorType : int;
44 
45 
54 class PointLocatorBase : public ReferenceCountedObject<PointLocatorBase>
55 {
56 protected:
63  const PointLocatorBase * master);
64 
65 public:
69  virtual ~PointLocatorBase ();
70 
77  static std::unique_ptr<PointLocatorBase> build (PointLocatorType t,
78  const MeshBase & mesh,
79  const PointLocatorBase * master = nullptr);
80 
84  virtual void clear() = 0;
85 
90  virtual void init() = 0;
91 
97  virtual const Elem * operator() (const Point & p,
98  const std::set<subdomain_id_type> * allowed_subdomains = nullptr) const = 0;
99 
104  virtual void operator() (const Point & p,
105  std::set<const Elem *> & candidate_elements,
106  const std::set<subdomain_id_type> * allowed_subdomains = nullptr) const = 0;
107 
124  virtual const Node *
125  locate_node (const Point & p,
126  const std::set<subdomain_id_type> * allowed_subdomains = nullptr,
127  Real tol = TOLERANCE) const;
128 
133  bool initialized () const;
134 
141  virtual void enable_out_of_mesh_mode () = 0;
142 
148  virtual void disable_out_of_mesh_mode () = 0;
149 
154 
159  virtual void set_close_to_point_tol(Real close_to_point_tol);
160 
165  virtual void unset_close_to_point_tol();
166 
171  virtual void set_contains_point_tol(Real contains_point_tol);
172 
177  virtual void unset_contains_point_tol();
178 
183  virtual Real get_contains_point_tol() const;
184 
192 
196  const MeshBase & get_mesh() const;
197 
201  bool _verbose;
202 
203 protected:
210 
214  const MeshBase & _mesh;
215 
220 
226 
231 
237 
242 };
243 
244 } // namespace libMesh
245 
246 #endif // LIBMESH_POINT_LOCATOR_BASE_H
virtual void disable_out_of_mesh_mode()=0
Disables out-of-mesh mode (default).
virtual ~PointLocatorBase()
Destructor.
A Node is like a Point, but with more information.
Definition: node.h:52
virtual void set_close_to_point_tol(Real close_to_point_tol)
Set a tolerance to use when determining if a point is contained within the mesh.
bool _use_close_to_point_tol
true if we will use a user-specified tolerance for locating the element in an exhaustive search...
static constexpr Real TOLERANCE
Real _close_to_point_tol
The tolerance to use.
virtual Real get_contains_point_tol() const
Get the tolerance for determining element containment in the point locator.
This is the base class from which all geometric element types are derived.
Definition: elem.h:94
bool _initialized
true when properly initialized, false otherwise.
MeshBase & mesh
virtual void set_contains_point_tol(Real contains_point_tol)
Set a tolerance to use when checking if a point is within an element in the mesh. ...
The libMesh namespace provides an interface to certain functionality in the library.
Real get_close_to_point_tol() const
Get the close-to-point tolerance.
virtual void init()=0
Initializes the point locator, so that the operator() methods can be used.
This is the MeshBase class.
Definition: mesh_base.h:74
const MeshBase & _mesh
constant reference to the mesh in which the point is looked for.
This is the base class for point locators.
virtual void clear()=0
Clears the PointLocator.
This class implements reference counting.
virtual void unset_contains_point_tol()
Specify that we do not want to use a user-specified tolerance to determine if a point is inside an el...
virtual const Node * locate_node(const Point &p, const std::set< subdomain_id_type > *allowed_subdomains=nullptr, Real tol=TOLERANCE) const
PointLocatorBase(const MeshBase &mesh, const PointLocatorBase *master)
Constructor.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
bool _verbose
Boolean flag to indicate whether to print out extra info.
bool get_use_contains_point_tol() const
The contains_point_tol may be nonzero (in fact it defaults to non-zero) but unless the user calls set...
virtual const Elem * operator()(const Point &p, const std::set< subdomain_id_type > *allowed_subdomains=nullptr) const =0
Locates the element in which the point with global coordinates p is located.
const PointLocatorBase * _master
Const pointer to our master, initialized to nullptr if none given.
PointLocatorType
defines an enum for the types of point locators (given a point with global coordinates, locate the corresponding element in space) available in libMesh.
virtual void unset_close_to_point_tol()
Specify that we do not want to use a user-specified tolerance to determine if a point is contained wi...
virtual void enable_out_of_mesh_mode()=0
Enables out-of-mesh mode.
static std::unique_ptr< PointLocatorBase > build(PointLocatorType t, const MeshBase &mesh, const PointLocatorBase *master=nullptr)
Builds an PointLocator for the mesh mesh.
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:39
bool _use_contains_point_tol
true if we will use a user-specified tolerance for locating the element.
void ErrorVector unsigned int
Definition: adjoints_ex3.C:360
const MeshBase & get_mesh() const
Get a const reference to this PointLocator&#39;s mesh.
Real _contains_point_tol
The tolerance to use when locating an element in the tree.