Line data Source code
1 : #include "ParsedElementIDMeshGenerator.h" 2 : 3 : registerMooseObject("CardinalApp", ParsedElementIDMeshGenerator); 4 : 5 : InputParameters 6 18 : ParsedElementIDMeshGenerator::validParams() 7 : { 8 : 9 18 : InputParameters params = MeshGenerator::validParams(); 10 : 11 36 : params.addRequiredParam<MeshGeneratorName>("input", "The mesh we want to modify"); 12 : 13 36 : params.addRequiredParam<std::vector<ExtraElementIDName>>("extra_element_integer_names", 14 : "list of extra integer names to" 15 : "to be added in the mesh."); 16 : 17 36 : params.addParam<std::vector<int>>( 18 : "values", 19 : "Optional list of integer values corresponding to each name in " 20 : "'extra_element_integer_names'. " 21 : "If not provided, all values will default to -1. " 22 : "If provided, the list must contain the same number of entries as " 23 : "'extra_element_integer_names', " 24 : "with each value assigned to the respective extra element integer."); 25 : 26 18 : params.addClassDescription("Adds extra element integers to the whole mesh."); 27 18 : return params; 28 0 : } 29 : 30 9 : ParsedElementIDMeshGenerator::ParsedElementIDMeshGenerator(const InputParameters & params) 31 : : MeshGenerator(params), 32 9 : _input(getMesh("input")), 33 9 : _extra_element_id_names( 34 9 : getParam<std::vector<ExtraElementIDName>>("extra_element_integer_names")), 35 36 : _eeiid_values(isParamValid("values") 36 9 : ? getParam<std::vector<int>>("values") 37 9 : : std::vector<int>(_extra_element_id_names.size(), DEFAULT)) 38 : { 39 9 : if (_eeiid_values.empty() || _extra_element_id_names.empty()) 40 0 : mooseError("Both 'extra_element_integer_names' and 'values' cannot be empty. " 41 : "Please provide at least one entry for each."); 42 : 43 : // check if value for every extra element integer is provided 44 9 : if (_eeiid_values.size() != _extra_element_id_names.size()) 45 0 : paramError("values", 46 0 : "Number of entries in 'values' (" + std::to_string(_eeiid_values.size()) + 47 : ") must match the number of entries in 'extra_element_integer_names'" 48 0 : " (" + 49 0 : std::to_string(_extra_element_id_names.size()) + ")"); 50 9 : } 51 : 52 : std::unique_ptr<MeshBase> 53 9 : ParsedElementIDMeshGenerator::generate() 54 : { 55 9 : std::unique_ptr<MeshBase> mesh = std::move(_input); 56 : 57 18 : for (int i = 0; i < _extra_element_id_names.size(); i++) 58 : { 59 : // check if the extra element integer already exists in the mesh and only add the 60 : // element integer if it doesn't. 61 : // If it exits already then throw a mooseWarning. 62 9 : if (!mesh->has_elem_integer(_extra_element_id_names[i])) 63 18 : mesh->add_elem_integer(_extra_element_id_names[i], _eeiid_values[i]); 64 : else 65 0 : mooseWarning("The element integer id named ", 66 : _extra_element_id_names[i], 67 : " already exists in the mesh. The existing values will be retained," 68 : " and the provided value for ", 69 0 : _extra_element_id_names[i], 70 : " will be ignored."); 71 : } 72 : 73 9 : return mesh; 74 0 : }