Loading [MathJax]/extensions/tex2jax.js
https://mooseframework.inl.gov
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
SubdomainExtraElementIDGenerator Class Reference

#include <SubdomainExtraElementIDGenerator.h>

Inheritance diagram for SubdomainExtraElementIDGenerator:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 SubdomainExtraElementIDGenerator (const InputParameters &parameters)
 
virtual std::unique_ptr< MeshBase > generate () override
 
std::unique_ptr< MeshBase > generateInternal ()
 
const std::set< MeshGeneratorName > & getRequestedMeshGenerators () const
 
const std::set< MeshGeneratorName > & getRequestedMeshGeneratorsForSub () const
 
void addParentMeshGenerator (const MeshGenerator &mg, const AddParentChildKey)
 
void addChildMeshGenerator (const MeshGenerator &mg, const AddParentChildKey)
 
const std::set< const MeshGenerator *, Comparator > & getParentMeshGenerators () const
 
const std::set< const MeshGenerator *, Comparator > & getChildMeshGenerators () const
 
const std::set< const MeshGenerator *, Comparator > & getSubMeshGenerators () const
 
bool isParentMeshGenerator (const MeshGeneratorName &name, const bool direct=true) const
 
bool isChildMeshGenerator (const MeshGeneratorName &name, const bool direct=true) const
 
bool isNullMeshName (const MeshGeneratorName &name) const
 
bool hasSaveMesh () const
 
bool hasOutput () const
 
const std::string & getSavedMeshName () const
 
bool hasGenerateData () const
 
bool isDataOnly () const
 
virtual bool enabled () const
 
std::shared_ptr< MooseObjectgetSharedPtr ()
 
std::shared_ptr< const MooseObjectgetSharedPtr () const
 
MooseAppgetMooseApp () const
 
const std::string & type () const
 
virtual const std::string & name () const
 
std::string typeAndName () const
 
std::string errorPrefix (const std::string &error_type) const
 
void callMooseError (std::string msg, const bool with_prefix) const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
const InputParametersparameters () const
 
MooseObjectName uniqueName () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &nm) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void mooseError (Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static InputParameters validParams ()
 
static bool hasGenerateData (const InputParameters &params)
 
static void setHasGenerateData (InputParameters &params)
 

Public Attributes

const ConsoleStream _console
 

Static Public Attributes

static const std::string data_only_param
 
static constexpr auto SYSTEM
 
static constexpr auto NAME
 

Protected Member Functions

virtual void generateData ()
 
T & copyMeshProperty (const std::string &target_data_name, const std::string &source_data_name, const std::string &source_mesh)
 
T & copyMeshProperty (const std::string &source_data_name, const std::string &source_mesh)
 
std::unique_ptr< MeshBase > & getMesh (const std::string &param_name, const bool allow_invalid=false)
 
std::vector< std::unique_ptr< MeshBase > *> getMeshes (const std::string &param_name)
 
std::unique_ptr< MeshBase > & getMeshByName (const MeshGeneratorName &mesh_generator_name)
 
std::vector< std::unique_ptr< MeshBase > *> getMeshesByName (const std::vector< MeshGeneratorName > &mesh_generator_names)
 
void declareMeshForSub (const std::string &param_name)
 
void declareMeshesForSub (const std::string &param_name)
 
void declareMeshForSubByName (const MeshGeneratorName &mesh_generator_name)
 
void declareMeshesForSubByName (const std::vector< MeshGeneratorName > &mesh_generator_names)
 
std::unique_ptr< MeshBase > buildMeshBaseObject (unsigned int dim=libMesh::invalid_uint)
 
std::unique_ptr< ReplicatedMesh > buildReplicatedMesh (unsigned int dim=libMesh::invalid_uint)
 
std::unique_ptr< DistributedMesh > buildDistributedMesh (unsigned int dim=libMesh::invalid_uint)
 
void addMeshSubgenerator (const std::string &type, const std::string &name, Ts... extra_input_parameters)
 
void addMeshSubgenerator (const std::string &type, const std::string &name, InputParameters params)
 
void declareNullMeshName (const MeshGeneratorName &name)
 
const T & getMeshProperty (const std::string &data_name, const std::string &prefix)
 
const T & getMeshProperty (const std::string &data_name)
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name) const
 
bool hasMeshProperty (const std::string &data_name) const
 
std::string meshPropertyName (const std::string &data_name) const
 
T & declareMeshProperty (const std::string &data_name, Args &&... args)
 
T & declareMeshProperty (const std::string &data_name, const T &data_value)
 
T & declareMeshProperty (const std::string &data_name, Args &&... args)
 
T & declareMeshProperty (const std::string &data_name, const T &data_value)
 
T & setMeshProperty (const std::string &data_name, Args &&... args)
 
T & setMeshProperty (const std::string &data_name, const T &data_value)
 
T & setMeshProperty (const std::string &data_name, Args &&... args)
 
T & setMeshProperty (const std::string &data_name, const T &data_value)
 

Static Protected Member Functions

static std::string meshPropertyName (const std::string &data_name, const std::string &prefix)
 

Protected Attributes

std::unique_ptr< MeshBase > & _input
 input mesh for adding element IDs More...
 
const std::vector< SubdomainName > & _subdomain_names
 subdomains that are to be assigned with element IDs More...
 
MooseMesh *const _mesh
 
const bool & _enabled
 
MooseApp_app
 
const std::string _type
 
const std::string _name
 
const InputParameters_pars
 
Factory_factory
 
ActionFactory_action_factory
 
const Parallel::Communicator & _communicator
 

Detailed Description

Definition at line 14 of file SubdomainExtraElementIDGenerator.h.

Constructor & Destructor Documentation

◆ SubdomainExtraElementIDGenerator()

SubdomainExtraElementIDGenerator::SubdomainExtraElementIDGenerator ( const InputParameters parameters)

Definition at line 40 of file SubdomainExtraElementIDGenerator.C.

41  : MeshGenerator(params),
42  _input(getMesh("input")),
43  _subdomain_names(getParam<std::vector<SubdomainName>>("subdomains"))
44 {
45  if (_subdomain_names.size() == 0)
46  paramError("subdomains", "Empty subdomain vector provided!");
47 }
MeshGenerator(const InputParameters &parameters)
const std::vector< SubdomainName > & _subdomain_names
subdomains that are to be assigned with element IDs
std::unique_ptr< MeshBase > & getMesh(const std::string &param_name, const bool allow_invalid=false)
const T & getParam(const std::string &name) const
std::unique_ptr< MeshBase > & _input
input mesh for adding element IDs
void paramError(const std::string &param, Args... args) const

Member Function Documentation

◆ generate()

std::unique_ptr< MeshBase > SubdomainExtraElementIDGenerator::generate ( )
overridevirtual

Implements MeshGenerator.

Definition at line 50 of file SubdomainExtraElementIDGenerator.C.

51 {
52  std::unique_ptr<MeshBase> mesh = std::move(_input);
53 
54  // construct a map from the subdomain ID to the index in 'subdomains'
55  auto subdomain_ids = MooseMeshUtils::getSubdomainIDs(*mesh, _subdomain_names);
56 
57  // check that all subdomains are present
58  for (const auto & name : _subdomain_names)
60  paramError("subdomains", "Subdomain " + name + " does not exist in the mesh");
61 
62  // check to make sure no duplicated subdomain ids
63  std::set<SubdomainID> unique_subdomain_ids;
64  for (const auto & id : subdomain_ids)
65  if (unique_subdomain_ids.count(id) > 0)
66  paramError("subdomains", "Cannot have subdomain with ID ", id, " listed more than once!");
67  else
68  unique_subdomain_ids.insert(id);
69 
70  std::map<SubdomainID, unsigned int> subdomains;
71  for (unsigned int i = 0; i < _subdomain_names.size(); ++i)
72  subdomains[subdomain_ids[i]] = i;
73 
74  auto & element_id_names = getParam<std::vector<std::string>>("extra_element_id_names");
75  auto & element_ids = getParam<std::vector<std::vector<dof_id_type>>>("extra_element_ids");
76 
77  if (element_id_names.size() != element_ids.size())
78  paramError("extra_element_ids", "Inconsistent vector size for element IDs");
79  for (auto & element_id : element_ids)
80  {
81  if (_subdomain_names.size() != element_id.size())
82  paramError("extra_element_ids", "Inconsistent vector size for element IDs");
83  }
84 
85  // get indices for all extra element integers
86  std::vector<unsigned int> extra_id_indices;
87  for (auto & element_id_name : element_id_names)
88  {
89  if (!mesh->has_elem_integer(element_id_name))
90  extra_id_indices.push_back(mesh->add_elem_integer(element_id_name));
91  else
92  extra_id_indices.push_back(mesh->get_elem_integer_index(element_id_name));
93  }
94 
95  if (isParamValid("default_extra_element_ids"))
96  {
97  auto & default_ids = getParam<std::vector<dof_id_type>>("default_extra_element_ids");
98  if (default_ids.size() != element_id_names.size())
99  paramError("default_extra_element_ids", "Inconsistent vector size for default element IDs");
100 
101  for (auto & elem : mesh->element_ptr_range())
102  for (unsigned int i = 0; i < element_ids.size(); ++i)
103  elem->set_extra_integer(extra_id_indices[i], default_ids[i]);
104  }
105 
106  for (auto & elem : mesh->element_ptr_range())
107  {
108  SubdomainID id = elem->subdomain_id();
109  auto it = subdomains.find(id);
110  if (it == subdomains.end())
111  continue;
112 
113  for (unsigned int i = 0; i < element_ids.size(); ++i)
114  elem->set_extra_integer(extra_id_indices[i], element_ids[i][it->second]);
115  }
116 
117  return mesh;
118 }
MeshBase & mesh
std::vector< subdomain_id_type > getSubdomainIDs(const libMesh::MeshBase &mesh, const std::vector< SubdomainName > &subdomain_name)
virtual const std::string & name() const
bool isParamValid(const std::string &name) const
const std::vector< SubdomainName > & _subdomain_names
subdomains that are to be assigned with element IDs
std::unique_ptr< MeshBase > & _input
input mesh for adding element IDs
void paramError(const std::string &param, Args... args) const
bool hasSubdomainName(const MeshBase &input_mesh, const SubdomainName &name)

◆ validParams()

InputParameters SubdomainExtraElementIDGenerator::validParams ( )
static

Definition at line 19 of file SubdomainExtraElementIDGenerator.C.

20 {
22  params.addRequiredParam<MeshGeneratorName>(
23  "input", "Name of an existing mesh generator to which we assign element IDs");
24  params.addRequiredParam<std::vector<SubdomainName>>("subdomains",
25  "Subdomain names present in the input mesh");
26  params.addRequiredParam<std::vector<std::string>>("extra_element_id_names",
27  "List of user-defined extra element ID names");
28  params.addRequiredParam<std::vector<std::vector<dof_id_type>>>(
29  "extra_element_ids",
30  "User-defined extra element IDs corresponding to 'subdomains' in the same order");
31 
32  params.addParam<std::vector<dof_id_type>>(
33  "default_extra_element_ids", "Default extra element IDs for elements not in 'subdomains'");
34 
35  params.addClassDescription(
36  "Assign extra element IDs for elements on a mesh based on mesh subdomains.");
37  return params;
38 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
static InputParameters validParams()
void addClassDescription(const std::string &doc_string)

Member Data Documentation

◆ _input

std::unique_ptr<MeshBase>& SubdomainExtraElementIDGenerator::_input
protected

input mesh for adding element IDs

Definition at line 24 of file SubdomainExtraElementIDGenerator.h.

Referenced by generate().

◆ _subdomain_names

const std::vector<SubdomainName>& SubdomainExtraElementIDGenerator::_subdomain_names
protected

subdomains that are to be assigned with element IDs

Definition at line 26 of file SubdomainExtraElementIDGenerator.h.

Referenced by generate(), and SubdomainExtraElementIDGenerator().


The documentation for this class was generated from the following files: