tree.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2018 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 override;
68 
72  virtual void print_elements(std::ostream & my_out=libMesh::out) const override;
73 
77  virtual unsigned int n_active_bins() const 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 = nullptr,
87  Real relative_tol = TOLERANCE) const override;
88 
94  const Elem * operator() (const Point & p,
95  const std::set<subdomain_id_type> * allowed_subdomains = 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
Definition: tree.h:102
virtual void print_nodes(std::ostream &my_out=libMesh::out) const override
Definition: tree.C:120
const Elem * operator()(const Point &p, const std::set< subdomain_id_type > *allowed_subdomains=nullptr, Real relative_tol=TOLERANCE) const
Definition: tree.C:150
virtual unsigned int n_active_bins() const override
Definition: tree.h:77
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:139
Tree class templated on the number of leaves on each node.
Definition: tree.h:44
Tree< 8 > OctTree
Definition: tree.h:134
The base class for all geometric element types.
Definition: elem.h:100
static const Real TOLERANCE
Base class for Mesh.
Definition: mesh_base.h:77
Tree< 4 > QuadTree
Definition: tree.h:128
virtual void print_elements(std::ostream &my_out=libMesh::out) const override
Definition: tree.C:129
Base class for different Tree types.
Definition: tree_node.h:53
Tree(const MeshBase &m, unsigned int target_bin_size, Trees::BuildType bt=Trees::NODES)
Definition: tree.C:37
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
BuildType
Base class for different Tree types.
Definition: tree_base.h:55
OStreamProxy out(std::cout)
A geometric point in (x,y,z) space.
Definition: point.h:38
Tree< 2 > BinaryTree
Definition: tree.h:122
const Trees::BuildType build_type
Definition: tree.h:107