https://mooseframework.inl.gov
BoundaryRestrictable.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 // MOOSE includes
13 #include "InputParameters.h"
14 #include "MaterialData.h"
15 
16 class MooseMesh;
17 
26 {
27 public:
29  enum TEST_TYPE
30  {
31  ALL,
33  };
34 
42  BoundaryRestrictable(const MooseObject * moose_object, bool nodal);
43 
45 
54  BoundaryRestrictable(const MooseObject * moose_object,
55  const std::set<SubdomainID> & block_ids,
56  bool nodal);
57 
62  static bool restricted(const std::set<BoundaryID> & ids);
63 
67  virtual ~BoundaryRestrictable();
68 
73  const virtual std::set<BoundaryID> & boundaryIDs() const;
74 
79  const std::vector<BoundaryName> & boundaryNames() const;
80 
85  unsigned int numBoundaryIDs() const;
86 
92  bool hasBoundary(const BoundaryName & name) const;
93 
99  bool hasBoundary(const std::vector<BoundaryName> & names) const;
100 
106  bool hasBoundary(const BoundaryID & id) const;
107 
116  bool hasBoundary(const std::vector<BoundaryID> & ids, TEST_TYPE type = ALL) const;
117 
128  bool hasBoundary(const std::set<BoundaryID> & ids, TEST_TYPE type = ALL) const;
129 
137  bool isBoundarySubset(const std::set<BoundaryID> & ids) const;
138 
139  /*
140  * Test if the class boundary ids are a subset of the supplied objects
141  * @param ids A std::set of Boundary IDs to check
142  * @return True if all of the boundary ids for this class are found within the given ids (opposite
143  * of hasBoundary)
144  * \see hasBoundary
145  */
146  bool isBoundarySubset(const std::vector<BoundaryID> & ids) const;
147 
158  template <typename T, bool is_ad = false>
159  bool hasBoundaryMaterialProperty(const std::string & prop_name) const;
160 
165  virtual bool boundaryRestricted() const;
166 
171  const std::set<BoundaryID> & meshBoundaryIDs() const;
172 
179  virtual bool checkVariableBoundaryIntegrity() const { return true; }
180 
181 private:
184 
187 
189  std::set<BoundaryID> _bnd_ids;
190 
192  std::vector<BoundaryID> _vec_ids;
193 
195  std::vector<BoundaryName> _boundary_names;
196 
199 
201  const std::set<SubdomainID> _empty_block_ids;
202 
204  const std::set<SubdomainID> & _block_ids;
205 
208 
211 
214 
217 
222 
223 protected:
228  bool hasBoundaryMaterialPropertyHelper(const std::string & prop_name) const;
229 };
230 
231 template <typename T, bool is_ad>
232 bool
233 BoundaryRestrictable::hasBoundaryMaterialProperty(const std::string & prop_name) const
234 {
235  // If you get here the supplied property is defined on all boundaries, but is still subject
236  // existence in the MateialData class
237  return hasBoundaryMaterialPropertyHelper(prop_name) &&
238  _bnd_material_data.haveGenericProperty<T, is_ad>(prop_name);
239 }
bool haveGenericProperty(const std::string &prop_name) const
Definition: MaterialData.h:253
virtual bool checkVariableBoundaryIntegrity() const
Whether integrity/coverage checking should be conducted for moose variables used in this object...
virtual ~BoundaryRestrictable()
Empty class destructor.
bool isBoundarySubset(const std::set< BoundaryID > &ids) const
Test if the class boundary ids are a subset of the supplied objects.
void initializeBoundaryRestrictable()
An initialization routine needed for dual constructors.
virtual bool boundaryRestricted() const
Returns true if this object has been restricted to a boundary.
MooseMesh * _bnd_mesh
Point to mesh.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
/class BoundaryRestrictable /brief Provides functionality for limiting the object to certain boundary...
const bool _bnd_dual_restrictable
Flag for allowing dual restriction with BlockRestrictable.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
bool hasBoundaryMaterialPropertyHelper(const std::string &prop_name) const
A helper method to avoid circular #include problems.
THREAD_ID _bnd_tid
Thread id for this object.
const std::set< SubdomainID > _empty_block_ids
An empty set for referencing when block_ids is not included.
static bool restricted(const std::set< BoundaryID > &ids)
Helper for determining if the object is boundary restricted.
Every object that can be built by the factory should be derived from this class.
Definition: MooseObject.h:28
boundary_id_type BoundaryID
std::set< BoundaryID > _bnd_ids
Set of the boundary ids.
bool hasBoundaryMaterialProperty(const std::string &prop_name) const
Check if a material property is valid for all boundaries of this object.
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition: MooseMesh.h:88
const std::set< BoundaryID > & meshBoundaryIDs() const
Returns the set of all boundary ids for the entire mesh.
unsigned int numBoundaryIDs() const
Return the number of boundaries for this object.
TEST_TYPE
A flag changing the behavior of hasBoundary.
bool _bnd_nodal
Whether or not this object is restricted to nodesets.
static InputParameters validParams()
std::vector< BoundaryID > _vec_ids
Vector of the boundary ids.
bool hasBoundary(const BoundaryName &name) const
Test if the supplied boundary name is valid for this object.
const MooseObject & _moose_object
The moose object that this is an interface for.
const MaterialData & _bnd_material_data
Pointer to MaterialData for boundary (.
std::vector< BoundaryName > _boundary_names
Vector the the boundary names.
Proxy for accessing MaterialPropertyStorage.
Definition: MaterialData.h:33
const std::set< SubdomainID > & _block_ids
Reference to the block_ids, defaults to an empty set if not provided.
FEProblemBase * _bnd_feproblem
Pointer to FEProblemBase.
BoundaryRestrictable(const MooseObject *moose_object, bool nodal)
Class constructor Populates the _bnd_ids for the given boundary names supplied with the &#39;boundary&#39; in...
const std::vector< BoundaryName > & boundaryNames() const
Return the boundary names for this object.
virtual const std::set< BoundaryID > & boundaryIDs() const
Return the boundary IDs for this object.
unsigned int THREAD_ID
Definition: MooseTypes.h:209