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 44 of file MeshExtruder.h.

Constructor & Destructor Documentation

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 136 of file MeshExtruder.C.

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

Member Function Documentation

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.

Referenced by QueryElemSubdomainID().

Member Data Documentation

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 57 of file MeshExtruder.h.

Referenced by QueryElemSubdomainID().

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 62 of file MeshExtruder.h.

Referenced by QueryElemSubdomainID().


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