libMesh
tree.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_TREE_H
21 #define LIBMESH_TREE_H
22 
23 // Local includes
24 #include "libmesh/tree_node.h"
25 #include "libmesh/tree_base.h"
26 
27 // C++ includes
28 
29 namespace libMesh
30 {
31 
32 // Forward Declarations
33 class MeshBase;
34 
43 template <unsigned int N>
44 class Tree : public TreeBase
45 {
46 public:
50  Tree (const MeshBase & m,
51  unsigned int target_bin_size,
53 
58  Tree (const Tree<N> &) = delete;
59 
63  ~Tree() = default;
64 
68  virtual void print_nodes(std::ostream & my_out=libMesh::out) const override;
69 
73  virtual void print_elements(std::ostream & my_out=libMesh::out) const override;
74 
78  virtual unsigned int n_active_bins() const override
79  { return root.n_active_bins(); }
80 
86  virtual const Elem * find_element(const Point & p,
87  const std::set<subdomain_id_type> * allowed_subdomains = nullptr,
88  Real relative_tol = TOLERANCE) const override;
89 
96  virtual void find_elements(const Point & p,
97  std::set<const Elem *> & candidate_elements,
98  const std::set<subdomain_id_type> * allowed_subdomains = nullptr,
99  Real relative_tol = TOLERANCE) const override;
100 
106  const Elem * operator() (const Point & p,
107  const std::set<subdomain_id_type> * allowed_subdomains = nullptr,
108  Real relative_tol = TOLERANCE) const;
109 
110 private:
115 
120 };
121 
122 
123 
128 namespace Trees
129 {
135 
141 
146 typedef Tree<8> OctTree;
147 }
148 
149 } // namespace libMesh
150 
151 
152 #endif // LIBMESH_TREE_H
TreeNode< N > root
The tree root.
Definition: tree.h:114
virtual void print_nodes(std::ostream &my_out=libMesh::out) const override
Prints the nodes.
Definition: tree.C:105
BuildType
enum defining how to build the tree.
Definition: tree_base.h:58
const Elem * operator()(const Point &p, const std::set< subdomain_id_type > *allowed_subdomains=nullptr, Real relative_tol=TOLERANCE) const
Definition: tree.C:147
virtual unsigned int n_active_bins() const override
Definition: tree.h:78
~Tree()=default
Destructor.
virtual const Elem * find_element(const Point &p, const std::set< subdomain_id_type > *allowed_subdomains=nullptr, Real relative_tol=TOLERANCE) const override
Definition: tree.C:124
This class defines a tree that may be used for fast point location in space.
Definition: tree.h:44
static constexpr Real TOLERANCE
Tree< 8 > OctTree
An OctTree is a tree appropriate for 3D meshes.
Definition: tree.h:146
This is the base class from which all geometric element types are derived.
Definition: elem.h:94
The libMesh namespace provides an interface to certain functionality in the library.
This is the MeshBase class.
Definition: mesh_base.h:74
virtual void find_elements(const Point &p, std::set< const Elem *> &candidate_elements, const std::set< subdomain_id_type > *allowed_subdomains=nullptr, Real relative_tol=TOLERANCE) const override
Fills candidate_elements with any elements containing the specified point p, optionally restricted to...
Definition: tree.C:135
Tree< 4 > QuadTree
A QuadTree is a tree appropriate for 2D meshes.
Definition: tree.h:140
virtual void print_elements(std::ostream &my_out=libMesh::out) const override
Prints the nodes.
Definition: tree.C:114
This class defines a node on a tree.
Definition: tree_node.h:54
Tree(const MeshBase &m, unsigned int target_bin_size, Trees::BuildType bt=Trees::NODES)
Constructor.
Definition: tree.C:37
This is the base class for trees, it allows pointer usage of trees.
Definition: tree_base.h:68
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
OStreamProxy out
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:39
Tree< 2 > BinaryTree
A BinaryTree is a tree appropriate for 1D meshes.
Definition: tree.h:134
const Trees::BuildType build_type
How the tree is built.
Definition: tree.h:119