libMesh
Loading...
Searching...
No Matches
tree.h
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 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
29namespace libMesh
30{
31
32// Forward Declarations
33class MeshBase;
34
43template <unsigned int N>
44class Tree : public TreeBase
45{
46public:
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
110private:
115
120};
121
122
123
128namespace Trees
129{
135
141
147}
148
149} // namespace libMesh
150
151
152#endif // LIBMESH_TREE_H
This is the base class from which all geometric element types are derived.
Definition elem.h:96
This is the MeshBase class.
Definition mesh_base.h:81
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition point.h:40
This is the base class for trees, it allows pointer usage of trees.
Definition tree_base.h:69
This class defines a node on a tree.
Definition tree_node.h:55
This class defines a tree that may be used for fast point location in space.
Definition tree.h:45
Tree(const Tree< N > &)=delete
Copy-constructor.
virtual void print_elements(std::ostream &my_out=libMesh::out) const override
Prints the nodes.
Definition tree.C:114
virtual void print_nodes(std::ostream &my_out=libMesh::out) const override
Prints the nodes.
Definition tree.C:105
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
TreeNode< N > root
The tree root.
Definition tree.h:114
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 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
Adds to candidate_elements any elements containing the specified point p, optionally restricted to a ...
Definition tree.C:135
virtual unsigned int n_active_bins() const override
Definition tree.h:78
const Trees::BuildType build_type
How the tree is built.
Definition tree.h:119
~Tree()=default
Destructor.
Tree< 4 > QuadTree
A QuadTree is a tree appropriate for 2D meshes.
Definition tree.h:140
Tree< 2 > BinaryTree
A BinaryTree is a tree appropriate for 1D meshes.
Definition tree.h:134
BuildType
enum defining how to build the tree.
Definition tree_base.h:58
Tree< 8 > OctTree
An OctTree is a tree appropriate for 3D meshes.
Definition tree.h:146
The libMesh namespace provides an interface to certain functionality in the library.
OStreamProxy out
static constexpr Real TOLERANCE
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real