https://mooseframework.inl.gov
BlockRestrictable.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 "ParallelUniqueId.h"
15 #include "MaterialData.h"
16 #include "MooseObject.h"
17 
18 #define usingBlockRestrictableMembers using BlockRestrictable::getBlockCoordSystem
19 
20 class FEProblemBase;
21 class MooseMesh;
22 
24 
58 {
59 public:
69  BlockRestrictable(const MooseObject * moose_object, bool initialize = true);
70 
72 
80  BlockRestrictable(const MooseObject * moose_object, const std::set<BoundaryID> & boundary_ids);
81 
86  virtual ~BlockRestrictable() {}
87 
96  const std::vector<SubdomainName> & blocks() const;
97 
102  unsigned int numBlocks() const;
103 
109  virtual const std::set<SubdomainID> & blockIDs() const;
110 
114  unsigned int blocksMaxDimension() const;
115 
121  bool hasBlocks(const SubdomainName & name) const;
122 
128  bool hasBlocks(const std::vector<SubdomainName> & names) const;
129 
135  bool hasBlocks(const std::set<SubdomainName> & names) const;
136 
142  bool hasBlocks(SubdomainID id) const;
143 
149  bool hasBlocks(const std::vector<SubdomainID> & ids) const;
150 
157  bool hasBlocks(const std::set<SubdomainID> & ids) const;
158 
166  bool isBlockSubset(const std::set<SubdomainID> & ids) const;
167 
175  bool isBlockSubset(const std::vector<SubdomainID> & ids) const;
176 
189  template <typename T, bool is_ad = false>
190  bool hasBlockMaterialProperty(const std::string & prop_name);
191 
196  const std::set<SubdomainID> & meshBlockIDs() const;
197 
202  virtual bool blockRestricted() const;
203 
210  virtual void checkVariable(const MooseVariableFieldBase & variable) const;
211 
212 protected:
215 
221  virtual bool hasBlockMaterialPropertyHelper(const std::string & prop_name);
222 
226  void initializeBlockRestrictable(const MooseObject * moose_object);
227 
233 
234 private:
236  std::set<SubdomainID> _blk_ids;
237 
239  std::vector<SubdomainID> _vec_ids;
240 
242  std::vector<SubdomainName> _blocks;
243 
246 
249 
252 
254  const std::set<BoundaryID> _empty_boundary_ids;
255 
257  const std::set<BoundaryID> & _boundary_ids;
258 
261 
263  const std::string & _blk_name;
264 
266  unsigned int _blk_dim;
267 };
268 
269 template <typename T, bool is_ad>
270 bool
271 BlockRestrictable::hasBlockMaterialProperty(const std::string & prop_name)
272 {
273  mooseAssert(_blk_material_data != NULL, "MaterialData pointer is not defined");
274  return hasBlockMaterialPropertyHelper(prop_name) &&
275  _blk_material_data->haveGenericProperty<T, is_ad>(prop_name);
276 }
unsigned int blocksMaxDimension() const
Return the largest mesh dimension of the elements in the blocks for this object.
unsigned int _blk_dim
Largest mesh dimension of the elements in the blocks for this object.
bool haveGenericProperty(const std::string &prop_name) const
Definition: MaterialData.h:253
unsigned int numBlocks() const
Return the number of blocks for this object.
const bool _blk_dual_restrictable
Flag for allowing dual restriction.
Moose::CoordinateSystemType getBlockCoordSystem()
Check if the blocks this object operates on all have the same coordinate system, and if so return it...
FEProblemBase * _blk_feproblem
Pointer to FEProblemBase.
virtual void checkVariable(const MooseVariableFieldBase &variable) const
Helper for checking that the ids for this object are in agreement with the variables on the supplied ...
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
This class provides an interface for common operations on field variables of both FE and FV types wit...
virtual const std::set< SubdomainID > & blockIDs() const
Return the block subdomain ids for this object Note, if this is not block restricted, this function returns all mesh subdomain ids.
virtual bool blockRestricted() const
Returns true if this object has been restricted to a block.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
void initialize(EquationSystems &es, const std::string &system_name)
static InputParameters validParams()
bool isBlockSubset(const std::set< SubdomainID > &ids) const
Test if the class block ids are a subset of the supplied objects.
void initializeBlockRestrictable(const MooseObject *moose_object)
An initialization routine needed for dual constructors.
virtual ~BlockRestrictable()
Destructor: does nothing but needs to be marked as virtual since this class defines virtual functions...
std::vector< SubdomainID > _vec_ids
Vector of block ids supplied by the user via the input file (for error reporting) ...
Every object that can be built by the factory should be derived from this class.
Definition: MooseObject.h:28
MooseMesh wraps a libMesh::Mesh object and enhances its capabilities by caching additional data and s...
Definition: MooseMesh.h:88
THREAD_ID _blk_tid
Thread id for this object.
std::vector< SubdomainName > _blocks
Vector the block names supplied by the user via the input file.
bool hasBlockMaterialProperty(const std::string &prop_name)
Check if a material property is valid for all blocks of this object.
const MooseMesh * _blk_mesh
Pointer to Mesh.
const std::vector< SubdomainName > & blocks() const
Return the block names for this object.
const std::set< BoundaryID > _empty_boundary_ids
An empty set for referencing when boundary_ids is not included.
CoordinateSystemType
Definition: MooseTypes.h:809
const MaterialData * _blk_material_data
Pointer to the MaterialData class for this object.
An interface that restricts an object to subdomains via the &#39;blocks&#39; input parameter.
const std::set< SubdomainID > & meshBlockIDs() const
Return all of the SubdomainIDs for the mesh.
virtual bool hasBlockMaterialPropertyHelper(const std::string &prop_name)
A helper method to allow the Material object to specialize the behavior of hasBlockMaterialProperty.
const std::set< BoundaryID > & _boundary_ids
Reference to the boundary_ids, defaults to an empty set if not provided.
Proxy for accessing MaterialPropertyStorage.
Definition: MaterialData.h:33
BlockRestrictable(const MooseObject *moose_object, bool initialize=true)
Class constructor Populates the &#39;block&#39; input parameters, see the general class documentation for det...
bool hasBlocks(const SubdomainName &name) const
Test if the supplied block name is valid for this object.
std::set< SubdomainID > _blk_ids
Set of block ids supplied by the user via the input file (for error checking)
const std::string & _blk_name
Name of the object.
unsigned int THREAD_ID
Definition: MooseTypes.h:209