18 #ifndef LIBMESH_SINGLE_PREDICATES_H
19 #define LIBMESH_SINGLE_PREDICATES_H
22 #include "libmesh/libmesh_common.h"
23 #include "libmesh/id_types.h"
53 template <
typename T>
struct abstract_multi_predicate;
63 virtual bool operator()(
const T & it)
const = 0;
67 virtual std::unique_ptr<predicate>
clone()
const = 0;
78 virtual bool operator()(
const T & it)
const override {
return *it ==
nullptr; }
81 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<is_null<T>>(*this); }
93 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<not_null<T>>(*this); }
100 template <
typename T>
104 virtual bool operator()(
const T & it)
const override {
return (*it)->active(); }
107 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<active<T>>(*this); }
113 template <
typename T>
119 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<not_active<T>>(*this); }
126 template <
typename T>
130 virtual bool operator()(
const T & it)
const override {
return (*it)->ancestor(); }
133 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<ancestor<T>>(*this); }
139 template <
typename T>
145 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<not_ancestor<T>>(*this); }
152 template <
typename T>
156 virtual bool operator()(
const T & it)
const override {
return (*it)->subactive(); }
159 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<subactive<T>>(*this); }
165 template <
typename T>
171 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<not_subactive<T>>(*this); }
179 template <
typename T>
183 virtual ~pid() =
default;
186 virtual bool operator()(
const T & it)
const override {
return (*it)->processor_id() ==
_pid; }
189 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<pid<T>>(*this); }
198 template <
typename T>
202 const BoundaryInfo & bndry_info) :
206 virtual ~bid() =
default;
209 virtual bool operator()(
const T & it)
const override;
212 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<bid<T>>(*this); }
222 template <
typename T>
225 bnd(
const BoundaryInfo & bndry_info) :
228 virtual ~bnd() =
default;
231 virtual bool operator()(
const T & it)
const override;
234 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<bnd<T>>(*this); }
244 template <
typename T>
251 virtual bool operator()(
const T & it)
const override {
return (*it)->is_semilocal(
_pid); }
254 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<semilocal_pid<T>>(*this); }
264 template <
typename T>
273 if ((*it)->processor_id() ==
_pid)
275 for (
auto n : (*it)->neighbor_ptr_range())
276 if (n && n->processor_id() ==
_pid)
282 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<facelocal_pid<T>>(*this); }
291 template <
typename T>
299 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<not_pid<T>>(*this); }
308 template <
typename T>
317 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<elem_type<T>>(*this); }
323 #ifdef LIBMESH_ENABLE_AMR
329 template <
typename T>
335 virtual bool operator()(
const T & it)
const override {
return (*it)->refinement_flag() ==
_rflag; }
338 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<flagged<T>>(*this); }
341 #endif // LIBMESH_ENABLE_AMR
351 template <
typename T>
355 virtual ~level() =
default;
360 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<level<T>>(*this); }
370 template <
typename T>
378 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<not_level<T>>(*this); }
387 template <
typename T>
393 return (*it)->on_boundary();
397 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<null_neighbor<T>>(*this); }
409 template <
typename T>
415 return it.side_on_boundary();
419 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<boundary_side<T>>(*this); }
426 template <
typename T>
436 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<subdomain<T>>(*this); }
445 template <
typename T>
455 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<subdomain_set<T>>(*this); }
465 template <
typename T>
469 unsigned int var_num) :
474 virtual bool operator()(
const T & it)
const override;
477 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<evaluable<T>>(*this); }
487 template <
typename T>
495 virtual bool operator()(
const T & it)
const override;
498 virtual std::unique_ptr<predicate<T>>
clone()
const override {
return std::make_unique<multi_evaluable<T>>(*this); }
508 #endif // LIBMESH_SINGLE_PREDICATES_H
virtual std::unique_ptr< predicate< T > > clone() const override
virtual bool operator()(const T &it) const override
std::vector< const DofMap * > _dof_maps
const unsigned int _level
const processor_id_type _pid
flagged(unsigned char rflag)
virtual ~elem_type()=default
virtual bool operator()(const T &it) const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual bool operator()(const T &it) const override
virtual bool operator()(const T &it) const override
facelocal_pid(processor_id_type p)
virtual bool operator()(const T &it) const override
virtual ~facelocal_pid()=default
virtual bool operator()(const T &it) const override
virtual bool operator()(const T &it) const override
virtual ~semilocal_pid()=default
virtual bool operator()(const T &it) const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual bool operator()(const T &it) const override
virtual ~active()=default
virtual bool operator()(const T &it) const override
virtual std::unique_ptr< predicate< T > > clone() const override
bnd(const BoundaryInfo &bndry_info)
virtual bool operator()(const T &it) const override
virtual bool operator()(const T &it) const override
virtual bool operator()(const T &it) const override
virtual bool operator()(const T &it) const override
uint8_t processor_id_type
const BoundaryInfo & _bndry_info
virtual std::unique_ptr< predicate< T > > clone() const override
This class handles the numbering of degrees of freedom on a mesh.
const boundary_id_type _bid
virtual ~evaluable()=default
const unsigned char _rflag
evaluable(const DofMap &dof_map, unsigned int var_num)
virtual bool operator()(const T &it) const override
virtual ~subdomain_set()=default
virtual std::unique_ptr< predicate< T > > clone() const override
virtual bool operator()(const T &it) const override
const processor_id_type _pid
virtual std::unique_ptr< predicate< T > > clone() const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual bool operator()(const T &it) const =0
not_level(unsigned int l)
bid(boundary_id_type b_id, const BoundaryInfo &bndry_info)
not_pid(processor_id_type p)
virtual std::unique_ptr< predicate< T > > clone() const override
virtual bool operator()(const T &it) const override
virtual bool operator()(const T &it) const override
semilocal_pid(processor_id_type p)
multi_evaluable(std::vector< const DofMap * > dof_maps)
subdomain(subdomain_id_type sid)
virtual std::unique_ptr< predicate< T > > clone() const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual ~flagged()=default
virtual bool operator()(const T &it) const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual bool operator()(const T &it) const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual ~multi_evaluable()=default
subdomain_set(std::set< subdomain_id_type > sset)
const BoundaryInfo & _bndry_info
virtual bool operator()(const T &it) const override
virtual ~is_null()=default
const subdomain_id_type _subdomain
virtual std::unique_ptr< predicate< T > > clone() const override
virtual ~ancestor()=default
virtual std::unique_ptr< predicate< T > > clone() const override
virtual ~boundary_side()=default
virtual std::unique_ptr< predicate< T > > clone() const override
virtual bool operator()(const T &it) const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual ~subactive()=default
virtual ~subdomain()=default
virtual std::unique_ptr< predicate< T > > clone() const override
virtual std::unique_ptr< predicate< T > > clone() const override
virtual bool operator()(const T &it) const override
const processor_id_type _pid
const ElemType _elem_type
virtual std::unique_ptr< predicate > clone() const =0
const std::set< subdomain_id_type > _subdomain_set
virtual bool operator()(const T &it) const override
virtual ~predicate()=default
virtual ~null_neighbor()=default