24       "mesh generator creating the mesh on which to create the boundary transition layer on.");
    26       "boundary_names", 
"Boundaries that need to be converted to form a transition layer.");
    28       "conversion_element_layer_number",
    30       "The number of layers of elements to be converted. The farthest layer of the elements from "    31       "the given boundary are converted to elements compatible with the remainder of the mesh, "    32       "while the other layers of elements are converted into TET4.");
    33   params.
addParam<SubdomainName>(
"converted_tet_element_subdomain_name_suffix",
    35                                  "The suffix to be added to the original subdomain name for the "    36                                  "subdomains containing the elements converted to TET4.");
    38       "converted_pyramid_element_subdomain_name_suffix",
    40       "The suffix to be added to the original subdomain name for the subdomains containing the "    41       "elements converted to PYRAMID5.");
    42   params.
addParam<
bool>(
"external_boundaries_checking",
    44                         "Whether to check if provided boundaries are external.");
    46   params.
addClassDescription(
"Convert the elements involved in a set of external boundaries to "    47                              "ensure that the boundary set only contains TRI3 elements");
    55     _input(getMesh(
"input")),
    56     _boundary_names(getParam<
std::vector<BoundaryName>>(
"boundary_names")),
    57     _conversion_element_layer_number(getParam<unsigned 
int>(
"conversion_element_layer_number")),
    58     _external_boundaries_checking(getParam<bool>(
"external_boundaries_checking"))
    62 std::unique_ptr<MeshBase>
    65   auto replicated_mesh_ptr = 
dynamic_cast<ReplicatedMesh *
>(
_input.get());
    66   if (!replicated_mesh_ptr)
    67     paramError(
"input", 
"Input is not a replicated mesh, which is required");
    69   ReplicatedMesh & 
mesh = *replicated_mesh_ptr;
    72   std::set<subdomain_id_type> original_subdomain_ids;
    73   for (
auto elem_it = 
mesh.active_elements_begin(); elem_it != 
mesh.active_elements_end();
    76     original_subdomain_ids.emplace((*elem_it)->subdomain_id());
    86     if (((std::string)e.
what()).compare(
"subdomain id overflow") == 0)
    88                  "Some subdomain ids of the input mesh are too large and cause overflow when "    89                  "assigning new subdomain ids during element conversion. Please consider lowering "    90                  "the subdomain ids using RenameBlockGenerator.");
    91     else if (((std::string)e.
what()).compare(13, 8, 
"boundary") == 0)
   101         original_subdomain_ids,
   102         *original_subdomain_ids.rbegin() + 1,
   103         getParam<SubdomainName>(
"converted_tet_element_subdomain_name_suffix"),
   104         getParam<SubdomainName>(
"converted_pyramid_element_subdomain_name_suffix"));
   106   catch (
const std::exception & e)
   108     if (((std::string)e.what()).compare(26, 4, 
"TET4") == 0)
   109       paramError(
"converted_tet_element_subdomain_name_suffix", e.what());
   111       paramError(
"converted_pyramid_element_subdomain_name_suffix", e.what());
 static InputParameters validParams()
std::unique_ptr< MeshBase > generate() override
Generate / modify the mesh. 
Convert the elements involved in a set of external boundaries to ensure that the boundary set only co...
const unsigned int _conversion_element_layer_number
Number of layers of elements to be converted. 
virtual const char * what() const
Get out the error message. 
void paramError(const std::string ¶m, Args... args) const
Emits an error prefixed with the file and line number of the given param (from the input file) along ...
std::unique_ptr< MeshBase > & _input
Mesh that possibly comes from another generator. 
BoundaryElementConversionGenerator(const InputParameters ¶meters)
const bool _external_boundaries_checking
Whether to check if the provided boundaries are external. 
static InputParameters validParams()
Provides a way for users to bail out of the current solve. 
void assignConvertedElementsSubdomainNameSuffix(ReplicatedMesh &mesh, const std::set< subdomain_id_type > &original_subdomain_ids, const subdomain_id_type sid_shift_base, const SubdomainName &tet_suffix, const SubdomainName &pyramid_suffix)
Assign a subdomain name suffix to the converted elements created during transition layer generation...
registerMooseObject("MooseApp", BoundaryElementConversionGenerator)
const std::vector< BoundaryName > _boundary_names
The boundaries to convert the neighboring elements of. 
MeshGenerators are objects that can modify or add to an existing mesh. 
void ErrorVector unsigned int
void transitionLayerGenerator(ReplicatedMesh &mesh, const std::vector< BoundaryName > &boundary_names, const unsigned int conversion_element_layer_number, const bool external_boundaries_checking)
Generate a transition layer of elements with TRI3 surfaces on the given boundaries.