libMesh
tree.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2017 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 
57  Tree (const Tree<N> & other_tree);
58 
62  ~Tree() {}
63 
67  virtual void print_nodes(std::ostream & my_out=libMesh::out) const libmesh_override;
68 
72  virtual void print_elements(std::ostream & my_out=libMesh::out) const libmesh_override;
73 
77  virtual unsigned int n_active_bins() const libmesh_override
78  { return root.n_active_bins(); }
79 
85  virtual const Elem * find_element(const Point & p,
86  const std::set<subdomain_id_type> * allowed_subdomains = libmesh_nullptr,
87  Real relative_tol = TOLERANCE) const libmesh_override;
88 
94  const Elem * operator() (const Point & p,
95  const std::set<subdomain_id_type> * allowed_subdomains = libmesh_nullptr,
96  Real relative_tol = TOLERANCE) const;
97 
98 private:
103 
108 };
109 
110 
111 
116 namespace Trees
117 {
123 
129 
134 typedef Tree<8> OctTree;
135 }
136 
137 } // namespace libMesh
138 
139 
140 #endif // LIBMESH_TREE_H
TreeNode< N > root
The tree root.
Definition: tree.h:102
This class defines a tree that may be used for fast point location in space.
Definition: tree.h:44
Tree< 8 > OctTree
An OctTree is a tree appropriate for 3D meshes.
Definition: tree.h:134
virtual const Elem * find_element(const Point &p, const std::set< subdomain_id_type > *allowed_subdomains=libmesh_nullptr, Real relative_tol=TOLERANCE) const libmesh_override
Definition: tree.C:139
This is the base class from which all geometric element types are derived.
Definition: elem.h:89
const class libmesh_nullptr_t libmesh_nullptr
static const Real TOLERANCE
The libMesh namespace provides an interface to certain functionality in the library.
This is the MeshBase class.
Definition: mesh_base.h:68
Tree< 4 > QuadTree
A QuadTree is a tree appropriate for 2D meshes.
Definition: tree.h:128
~Tree()
Destructor.
Definition: tree.h:62
virtual void print_elements(std::ostream &my_out=libMesh::out) const libmesh_override
Prints the nodes.
Definition: tree.C:129
virtual unsigned int n_active_bins() const libmesh_override
Definition: tree.h:77
This class defines a node on a tree.
Definition: tree_node.h:52
virtual void print_nodes(std::ostream &my_out=libMesh::out) const libmesh_override
Prints the nodes.
Definition: tree.C:120
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:65
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
OStreamProxy out
const Elem * operator()(const Point &p, const std::set< subdomain_id_type > *allowed_subdomains=libmesh_nullptr, Real relative_tol=TOLERANCE) const
Definition: tree.C:150
BuildType
enum defining how to build the tree.
Definition: tree_base.h:55
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:38
Tree< 2 > BinaryTree
A BinaryTree is a tree appropriate for 1D meshes.
Definition: tree.h:122
const Trees::BuildType build_type
How the tree is built.
Definition: tree.h:107