libMesh
|
This is the base class for point locators. More...
#include <point_locator_base.h>
Public Member Functions | |
virtual | ~PointLocatorBase () |
Destructor. More... | |
virtual void | clear ()=0 |
Clears the PointLocator . More... | |
virtual void | init ()=0 |
Initializes the point locator, so that the operator() methods can be used. More... | |
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. More... | |
virtual void | operator() (const Point &p, std::set< const Elem *> &candidate_elements, const std::set< subdomain_id_type > *allowed_subdomains=nullptr) const =0 |
Locates a set of elements in proximity to the point with global coordinates p Pure virtual. More... | |
virtual const Node * | locate_node (const Point &p, const std::set< subdomain_id_type > *allowed_subdomains=nullptr, Real tol=TOLERANCE) const |
bool | initialized () const |
virtual void | enable_out_of_mesh_mode ()=0 |
Enables out-of-mesh mode. More... | |
virtual void | disable_out_of_mesh_mode ()=0 |
Disables out-of-mesh mode (default). More... | |
Real | get_close_to_point_tol () const |
Get the close-to-point tolerance. More... | |
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. More... | |
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 within the mesh. More... | |
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. More... | |
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 element in the mesh. More... | |
virtual Real | get_contains_point_tol () const |
Get the tolerance for determining element containment in the point locator. More... | |
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_contains_point_tol(), it won't actually be used. More... | |
const MeshBase & | get_mesh () const |
Get a const reference to this PointLocator's mesh. More... | |
Static Public Member Functions | |
static std::unique_ptr< PointLocatorBase > | build (PointLocatorType t, const MeshBase &mesh, const PointLocatorBase *master=nullptr) |
Builds an PointLocator for the mesh mesh . More... | |
static std::string | get_info () |
Gets a string containing the reference information. More... | |
static void | print_info (std::ostream &out_stream=libMesh::out) |
Prints the reference information, by default to libMesh::out . More... | |
static unsigned int | n_objects () |
Prints the number of outstanding (created, but not yet destroyed) objects. More... | |
static void | enable_print_counter_info () |
Methods to enable/disable the reference counter output from print_info() More... | |
static void | disable_print_counter_info () |
Public Attributes | |
bool | _verbose |
Boolean flag to indicate whether to print out extra info. More... | |
Protected Types | |
typedef std::map< std::string, std::pair< unsigned int, unsigned int > > | Counts |
Data structure to log the information. More... | |
Protected Member Functions | |
PointLocatorBase (const MeshBase &mesh, const PointLocatorBase *master) | |
Constructor. More... | |
void | increment_constructor_count (const std::string &name) noexcept |
Increments the construction counter. More... | |
void | increment_destructor_count (const std::string &name) noexcept |
Increments the destruction counter. More... | |
Protected Attributes | |
const PointLocatorBase * | _master |
Const pointer to our master, initialized to nullptr if none given. More... | |
const MeshBase & | _mesh |
constant reference to the mesh in which the point is looked for. More... | |
bool | _initialized |
true when properly initialized, false otherwise. More... | |
bool | _use_close_to_point_tol |
true if we will use a user-specified tolerance for locating the element in an exhaustive search. More... | |
Real | _close_to_point_tol |
The tolerance to use. More... | |
bool | _use_contains_point_tol |
true if we will use a user-specified tolerance for locating the element. More... | |
Real | _contains_point_tol |
The tolerance to use when locating an element in the tree. More... | |
Static Protected Attributes | |
static Counts | _counts |
Actually holds the data. More... | |
static Threads::atomic< unsigned int > | _n_objects |
The number of objects. More... | |
static Threads::spin_mutex | _mutex |
Mutual exclusion object to enable thread-safe reference counting. More... | |
static bool | _enable_print_counter = true |
Flag to control whether reference count information is printed when print_info is called. More... | |
This is the base class for point locators.
They locate points in space: given a mesh they return the element and local coordinates for a given point in global coordinates.
Definition at line 54 of file point_locator_base.h.
|
protectedinherited |
Data structure to log the information.
The log is identified by the class name.
Definition at line 119 of file reference_counter.h.
|
protected |
Constructor.
Protected so that this base class cannot be explicitly instantiated. Takes a master PointLocator that helps in saving memory.
Definition at line 35 of file point_locator_base.C.
References _close_to_point_tol, _master, and _use_close_to_point_tol.
|
virtualdefault |
Destructor.
|
static |
Builds an PointLocator for the mesh mesh
.
Optionally takes a master PointLocator to save memory. An std::unique_ptr<PointLocatorBase>
is returned to prevent memory leak. This way the user need not remember to delete the object.
Definition at line 67 of file point_locator_base.C.
References libMesh::Trees::ELEMENTS, libMesh::Trees::LOCAL_ELEMENTS, mesh, libMesh::NANOFLANN, libMesh::TREE, libMesh::TREE_ELEMENTS, and libMesh::TREE_LOCAL_ELEMENTS.
Referenced by libMesh::MeshBase::sub_point_locator().
|
pure virtual |
Clears the PointLocator
.
Implemented in libMesh::PointLocatorNanoflann, and libMesh::PointLocatorTree.
|
pure virtual |
Disables out-of-mesh mode (default).
If asked to find a point that is contained in no mesh at all, the point locator will now crash.
Implemented in libMesh::PointLocatorTree, and libMesh::PointLocatorNanoflann.
|
staticinherited |
Definition at line 100 of file reference_counter.C.
References libMesh::ReferenceCounter::_enable_print_counter.
|
pure virtual |
Enables out-of-mesh mode.
In this mode, if asked to find a point that is contained in no mesh at all, the point locator will return a nullptr instead of crashing. Per default, this mode is off.
Implemented in libMesh::PointLocatorTree, and libMesh::PointLocatorNanoflann.
Referenced by libMesh::System::point_gradient(), libMesh::System::point_hessian(), and libMesh::System::point_value().
|
staticinherited |
Methods to enable/disable the reference counter output from print_info()
Definition at line 94 of file reference_counter.C.
References libMesh::ReferenceCounter::_enable_print_counter.
Real libMesh::PointLocatorBase::get_close_to_point_tol | ( | ) | const |
Get the close-to-point tolerance.
Definition at line 92 of file point_locator_base.C.
References _close_to_point_tol.
Referenced by libMesh::MeshFunction::MeshFunction().
|
virtual |
Get the tolerance for determining element containment in the point locator.
Definition at line 122 of file point_locator_base.C.
References _contains_point_tol.
|
staticinherited |
Gets a string containing the reference information.
Definition at line 47 of file reference_counter.C.
References libMesh::ReferenceCounter::_counts, and libMesh::Quality::name().
Referenced by libMesh::ReferenceCounter::print_info().
const MeshBase & libMesh::PointLocatorBase::get_mesh | ( | ) | const |
Get a const reference to this PointLocator's mesh.
Definition at line 127 of file point_locator_base.C.
References _mesh.
Referenced by libMesh::PeriodicBoundaries::neighbor().
|
inline |
The contains_point_tol may be nonzero (in fact it defaults to non-zero) but unless the user calls set_contains_point_tol(), it won't actually be used.
This const accessor can be used to determine the current status of this flag.
Definition at line 191 of file point_locator_base.h.
References _use_contains_point_tol.
|
inlineprotectednoexceptinherited |
Increments the construction counter.
Should be called in the constructor of any derived class that will be reference counted.
Definition at line 183 of file reference_counter.h.
References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.
Referenced by libMesh::ReferenceCountedObject< RBParametrized >::ReferenceCountedObject().
|
inlineprotectednoexceptinherited |
Increments the destruction counter.
Should be called in the destructor of any derived class that will be reference counted.
Definition at line 207 of file reference_counter.h.
References libMesh::err, libMesh::BasicOStreamProxy< charT, traits >::get(), libMesh::Quality::name(), and libMesh::Threads::spin_mtx.
Referenced by libMesh::ReferenceCountedObject< RBParametrized >::~ReferenceCountedObject().
|
pure virtual |
Initializes the point locator, so that the operator()
methods can be used.
Pure virtual.
Implemented in libMesh::PointLocatorTree, and libMesh::PointLocatorNanoflann.
bool libMesh::PointLocatorBase::initialized | ( | ) | const |
true
when this object is properly initialized and ready for use, false
otherwise. Definition at line 60 of file point_locator_base.C.
References _initialized.
Referenced by libMesh::PointLocatorTree::init(), and libMesh::MeshFunction::MeshFunction().
|
virtual |
Virtual subclasses can override for efficiency, but the base class has a default implementation that works based on element lookup.
Optionally allows the user to restrict the subdomains searched; with such a restriction, only a Node belonging to an element on one or more of those subdomains will be returned.
Will only return a Node whose distance from p
is less than tol
multiplied by the size of a semilocal element which contains p
.
Definition at line 135 of file point_locator_base.C.
References libMesh::TensorTools::norm_sq(), operator()(), and libMesh::Real.
|
inlinestaticinherited |
Prints the number of outstanding (created, but not yet destroyed) objects.
Definition at line 85 of file reference_counter.h.
References libMesh::ReferenceCounter::_n_objects.
Referenced by libMesh::LibMeshInit::~LibMeshInit().
|
pure virtual |
Locates the element in which the point with global coordinates p
is located.
Pure virtual. Optionally allows the user to restrict the subdomains searched.
Implemented in libMesh::PointLocatorTree, and libMesh::PointLocatorNanoflann.
Referenced by locate_node().
|
pure virtual |
Locates a set of elements in proximity to the point with global coordinates p
Pure virtual.
Optionally allows the user to restrict the subdomains searched.
Implemented in libMesh::PointLocatorNanoflann, and libMesh::PointLocatorTree.
|
staticinherited |
Prints the reference information, by default to libMesh::out
.
Definition at line 81 of file reference_counter.C.
References libMesh::ReferenceCounter::_enable_print_counter, and libMesh::ReferenceCounter::get_info().
Referenced by libMesh::LibMeshInit::~LibMeshInit().
|
virtual |
Set a tolerance to use when determining if a point is contained within the mesh.
Definition at line 98 of file point_locator_base.C.
References _close_to_point_tol, and _use_close_to_point_tol.
|
virtual |
Set a tolerance to use when checking if a point is within an element in the mesh.
Definition at line 110 of file point_locator_base.C.
References _contains_point_tol, and _use_contains_point_tol.
|
virtual |
Specify that we do not want to use a user-specified tolerance to determine if a point is contained within the mesh.
Definition at line 104 of file point_locator_base.C.
References _close_to_point_tol, _use_close_to_point_tol, and libMesh::TOLERANCE.
|
virtual |
Specify that we do not want to use a user-specified tolerance to determine if a point is inside an element in the mesh.
Definition at line 116 of file point_locator_base.C.
References _contains_point_tol, _use_contains_point_tol, and libMesh::TOLERANCE.
|
protected |
The tolerance to use.
Definition at line 230 of file point_locator_base.h.
Referenced by get_close_to_point_tol(), libMesh::PointLocatorTree::operator()(), PointLocatorBase(), set_close_to_point_tol(), and unset_close_to_point_tol().
|
protected |
The tolerance to use when locating an element in the tree.
Definition at line 241 of file point_locator_base.h.
Referenced by get_contains_point_tol(), libMesh::PointLocatorNanoflann::operator()(), libMesh::PointLocatorTree::operator()(), libMesh::PointLocatorTree::perform_linear_search(), set_contains_point_tol(), and unset_contains_point_tol().
|
staticprotectedinherited |
Actually holds the data.
Definition at line 124 of file reference_counter.h.
Referenced by libMesh::ReferenceCounter::get_info().
|
staticprotectedinherited |
Flag to control whether reference count information is printed when print_info is called.
Definition at line 143 of file reference_counter.h.
Referenced by libMesh::ReferenceCounter::disable_print_counter_info(), libMesh::ReferenceCounter::enable_print_counter_info(), and libMesh::ReferenceCounter::print_info().
|
protected |
true
when properly initialized, false
otherwise.
Definition at line 219 of file point_locator_base.h.
Referenced by libMesh::PointLocatorTree::clear(), libMesh::PointLocatorNanoflann::clear(), libMesh::PointLocatorTree::init(), libMesh::PointLocatorNanoflann::init(), initialized(), libMesh::PointLocatorNanoflann::operator()(), and libMesh::PointLocatorTree::operator()().
|
protected |
Const pointer to our master, initialized to nullptr
if none given.
When using multiple PointLocators, one can be assigned master and be in charge of something that all can have access to.
Definition at line 209 of file point_locator_base.h.
Referenced by libMesh::PointLocatorTree::init(), libMesh::PointLocatorNanoflann::init(), and PointLocatorBase().
|
protected |
constant reference to the mesh in which the point is looked for.
Definition at line 214 of file point_locator_base.h.
Referenced by get_mesh(), libMesh::PointLocatorTree::init(), libMesh::PointLocatorNanoflann::init(), libMesh::PointLocatorTree::perform_fuzzy_linear_search(), and libMesh::PointLocatorTree::perform_linear_search().
|
staticprotectedinherited |
Mutual exclusion object to enable thread-safe reference counting.
Definition at line 137 of file reference_counter.h.
|
staticprotectedinherited |
The number of objects.
Print the reference count information when the number returns to 0.
Definition at line 132 of file reference_counter.h.
Referenced by libMesh::ReferenceCounter::n_objects(), libMesh::ReferenceCounter::ReferenceCounter(), and libMesh::ReferenceCounter::~ReferenceCounter().
|
protected |
true
if we will use a user-specified tolerance for locating the element in an exhaustive search.
Definition at line 225 of file point_locator_base.h.
Referenced by libMesh::PointLocatorTree::operator()(), PointLocatorBase(), set_close_to_point_tol(), and unset_close_to_point_tol().
|
protected |
true
if we will use a user-specified tolerance for locating the element.
Definition at line 236 of file point_locator_base.h.
Referenced by get_use_contains_point_tol(), libMesh::PointLocatorNanoflann::operator()(), libMesh::PointLocatorTree::operator()(), set_contains_point_tol(), and unset_contains_point_tol().
bool libMesh::PointLocatorBase::_verbose |
Boolean flag to indicate whether to print out extra info.
Definition at line 201 of file point_locator_base.h.
Referenced by libMesh::PointLocatorTree::operator()().