www.mooseframework.org
Public Member Functions | Private Attributes | List of all members
MeshExtruder::QueryElemSubdomainID Class Reference

This class is used during the mesh construction (extrusion) to set element ids as they are created. More...

#include <MeshExtruder.h>

Inheritance diagram for MeshExtruder::QueryElemSubdomainID:
[legend]

Public Member Functions

 QueryElemSubdomainID (std::vector< SubdomainID > existing_subdomains, std::vector< unsigned int > layers, std::vector< unsigned int > new_ids, unsigned int num_layers)
 
virtual subdomain_id_type get_subdomain_for_layer (const Elem *old_elem, unsigned int layer)
 The override from the base class for obtaining a new id based on the old (original) element and the specified layer. More...
 

Private Attributes

std::map< unsigned int, std::map< SubdomainID, unsigned int > > _layer_data
 Data structure for holding the old -> new id mapping based on the layer number. More...
 
unsigned int _num_layers
 The total number of layers in the extrusion. More...
 

Detailed Description

This class is used during the mesh construction (extrusion) to set element ids as they are created.

Definition at line 39 of file MeshExtruder.h.

Constructor & Destructor Documentation

◆ QueryElemSubdomainID()

MeshExtruder::QueryElemSubdomainID::QueryElemSubdomainID ( std::vector< SubdomainID existing_subdomains,
std::vector< unsigned int >  layers,
std::vector< unsigned int >  new_ids,
unsigned int  num_layers 
)

Definition at line 131 of file MeshExtruder.C.

136  : QueryElemSubdomainIDBase()
137 #ifndef NDEBUG
138  ,
139  _num_layers(num_layers)
140 #endif
141 {
142  // Setup our stride depending on whether the user passed unique sets in new ids or just a single
143  // set of new ids
144  const unsigned int zero = 0;
145  const unsigned int stride =
146  existing_subdomains.size() == new_ids.size() ? zero : existing_subdomains.size();
147 
148  // Populate the data structure
149  for (unsigned int i = 0; i < layers.size(); ++i)
150  for (unsigned int j = 0; j < existing_subdomains.size(); ++j)
151  _layer_data[layers[i]][existing_subdomains[j]] = new_ids[i * stride + j];
152 }
153 
154 subdomain_id_type
156  unsigned int layer)
157 {
158  mooseAssert(layer < _num_layers, "Access out of bounds: " << layer);
159 
160  // First locate the layer if it exists
161  std::map<unsigned int, std::map<SubdomainID, unsigned int>>::const_iterator layer_it =
162  _layer_data.find(layer);
163 
164  if (layer_it == _layer_data.end())
165  // If the layer wasn't found, there is no mapping so just return the original subdomain id
166  return old_elem->subdomain_id();
167  else
168  {
169  std::map<SubdomainID, unsigned int>::const_iterator sub_id_it =
170  layer_it->second.find(old_elem->subdomain_id());
171 
172  if (sub_id_it == layer_it->second.end())
173  // If the subdomain wasn't found, it won't be remapped, so just return the original subdomain
174  // id
175  return old_elem->subdomain_id();
176 
177  // Return the remapped id
178  return sub_id_it->second;
179  }
180 }
virtual subdomain_id_type get_subdomain_for_layer(const Elem *old_elem, unsigned int layer)
The override from the base class for obtaining a new id based on the old (original) element and the s...
std::map< unsigned int, std::map< SubdomainID, unsigned int > > _layer_data
Data structure for holding the old -> new id mapping based on the layer number.
Definition: MeshExtruder.h:52
unsigned int _num_layers
The total number of layers in the extrusion.
Definition: MeshExtruder.h:57

Member Function Documentation

◆ get_subdomain_for_layer()

virtual subdomain_id_type MeshExtruder::QueryElemSubdomainID::get_subdomain_for_layer ( const Elem *  old_elem,
unsigned int  layer 
)
virtual

The override from the base class for obtaining a new id based on the old (original) element and the specified layer.

Member Data Documentation

◆ _layer_data

std::map<unsigned int, std::map<SubdomainID, unsigned int> > MeshExtruder::QueryElemSubdomainID::_layer_data
private

Data structure for holding the old -> new id mapping based on the layer number.

Definition at line 52 of file MeshExtruder.h.

Referenced by QueryElemSubdomainID().

◆ _num_layers

unsigned int MeshExtruder::QueryElemSubdomainID::_num_layers
private

The total number of layers in the extrusion.

This is currently only used for a sanity check in dbg mode.

Definition at line 57 of file MeshExtruder.h.


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