15 #include "libmesh/elem.h" 28 params.addRequiredParam<std::vector<MeshGeneratorName>>(
29 "inputs",
"The PinMeshGenerators that form the components of the assembly.");
32 "The integer ID for this assembly type definition");
34 params.addRequiredParam<std::vector<std::vector<unsigned int>>>(
36 "A double-indexed array starting with the upper-left corner where the index" 37 "represents the layout of input pins in the assembly lattice.");
39 params.addRangeCheckedParam<std::vector<Real>>(
42 "Distance(s) from center to duct(s) inner boundaries.");
44 params.addRangeCheckedParam<
unsigned int>(
"background_intervals",
45 "background_intervals>0",
46 "Radial intervals in the assembly peripheral region.");
48 params.addRangeCheckedParam<std::vector<unsigned int>>(
49 "duct_intervals",
"duct_intervals>0",
"Number of meshing intervals in each enclosing duct.");
51 params.addParam<std::vector<subdomain_id_type>>(
52 "background_region_id",
53 "The region id for the background area between the pins and the ducts to set region_id " 54 "extra-element integer");
56 params.addParam<std::vector<std::vector<subdomain_id_type>>>(
58 "The region id for the ducts from innermost to outermost, to set region_id " 59 "extra-element integer.");
61 params.addParam<std::vector<std::string>>(
"background_block_name",
62 "The block names for the assembly background regions");
64 params.addParam<std::vector<std::vector<std::string>>>(
66 "The block names for the assembly duct regions from innermost to outermost");
68 params.addParam<
bool>(
"extrude",
70 "Determines if this is the final step in the geometry construction" 71 " and extrudes the 2D geometry to 3D. If this is true then this mesh " 72 "cannot be used in further mesh building in the Reactor workflow");
73 params.addParamNamesToGroup(
"background_region_id duct_region_ids assembly_type",
"ID assigment");
74 params.addParamNamesToGroup(
"background_intervals background_region_id",
75 "Background specifications");
76 params.addParamNamesToGroup(
"duct_intervals duct_region_ids duct_halfpitch",
77 "Duct specifications");
79 params.addClassDescription(
"This AssemblyMeshGenerator object is designed to generate " 80 "assembly-like structures, with IDs, from a reactor geometry. " 81 "The assembly-like structures must consist of a full pattern of equal " 82 "sized pins from PinMeshGenerator. " 83 "A hexagonal assembly will be placed inside of a bounding hexagon " 84 "consisting of a background region and, optionally," 97 _inputs(getParam<
std::vector<MeshGeneratorName>>(
"inputs")),
99 _pattern(getParam<
std::vector<
std::vector<unsigned
int>>>(
"pattern")),
100 _duct_sizes(isParamValid(
"duct_halfpitch") ? getParam<
std::vector<
Real>>(
"duct_halfpitch")
102 _background_intervals(
103 isParamValid(
"background_intervals") ? getParam<unsigned
int>(
"background_intervals") : 0),
104 _duct_intervals(isParamValid(
"duct_intervals")
105 ? getParam<
std::vector<unsigned
int>>(
"duct_intervals")
106 :
std::vector<unsigned
int>()),
107 _background_region_id(isParamValid(
"background_region_id")
110 _duct_region_ids(isParamValid(
"duct_region_ids")
113 _extrude(getParam<bool>(
"extrude"))
115 MeshGeneratorName reactor_params =
118 for (
unsigned int i = 1; i <
_inputs.size(); i++)
120 mooseError(
"The name of all reactor_params objects should be identical across all input pins " 121 "in the assembly.\n");
131 "In order to extrude this mesh, ReactorMeshParams/dim needs to be set to 3\n");
134 mooseError(
"Both top_boundary_id and bottom_boundary_id must be provided in ReactorMeshParams " 135 "if using extruded geometry");
137 Real base_pitch = 0.0;
140 std::map<subdomain_id_type, std::string> pin_map_type_to_name;
145 base_pitch = getMeshProperty<Real>(
RGMB::pitch, pin);
149 if (!MooseUtils::absoluteFuzzyEqual(
pitch, base_pitch))
150 mooseError(
"All pins within an assembly must have the same pitch");
153 mooseError(
"Pins that have already been extruded cannot be used in AssemblyMeshGenerator " 156 if (pin_map_type_to_name.find(
pin_type) != pin_map_type_to_name.end() &&
157 pin_map_type_to_name[
pin_type] != pin)
158 mooseError(
"Constituent pins have shared pin_type ids but different names. Each uniquely " 159 "defined pin in PinMeshGenerator must have its own pin_type id.");
160 pin_map_type_to_name[
pin_type] = pin;
164 unsigned int n_axial_levels =
174 if ((!MooseUtils::absoluteFuzzyEqual(base_pitch * ny,
assembly_pitch)) ||
175 (!MooseUtils::absoluteFuzzyEqual(base_pitch * nx,
assembly_pitch)))
177 "Assembly pitch must be equal to lattice dimension times pin pitch for Cartesian " 178 "assemblies with no background region");
180 mooseError(
"\"background_region_id\" must be defined if \"background_intervals\" is " 187 "Assembly pitch must be larger than lattice dimension times pin pitch for Cartesian " 188 "assemblies with background region");
190 mooseError(
"\"background_intervals\" must be greater than 0 if \"background_region_id\" is " 194 "The size of background_region_id must be equal to the number of axial levels as " 195 "defined in the ReactorMeshParams object");
201 mooseError(
"Hexagonal assemblies must have a background region defined");
203 mooseError(
"Hexagonal diameter of assembly must be larger than the number of assembly rows " 204 "times the pin pitch");
207 mooseError(
"The size of background_region_id must be equal to the number of axial levels as " 208 "defined in the ReactorMeshParams object");
212 mooseError(
"If ducts are defined then \"duct_intervals\" and \"duct_region_ids\" must also be " 213 "defined and of equal size.");
219 mooseError(
"The size of duct_region_id must be equal to the number of axial levels as " 220 "defined in the ReactorMeshParams object");
223 "If ducts are defined, then \"duct_intervals\" and \"duct_region_ids\" " 224 "must also be defined and of equal size.");
232 "If ReactorMeshParams/region_id_as_block_name is set, background_block_name " 233 "should not be specified in AssemblyMeshGenerator");
237 mooseError(
"The size of background_block_name must match the size of background_region_id");
246 "If ReactorMeshParams/region_id_as_block_name is set, duct_block_names should not " 247 "be specified in AssemblyMeshGenerator");
249 _duct_block_names = getParam<std::vector<std::vector<std::string>>>(
"duct_block_names");
251 mooseError(
"The size of duct_block_names must match the size of duct_region_ids");
254 mooseError(
"The size of duct_block_names must match the size of duct_region_ids");
270 const auto patterned_mg_name =
271 _geom_type ==
"Hex" ?
"PatternedHexMeshGenerator" :
"PatternedCartesianMeshGenerator";
277 params.set<
MooseEnum>(
"hexagon_size_style") =
"apothem";
282 params.set<
MooseEnum>(
"pattern_boundary") =
"none";
285 params.set<
MooseEnum>(
"pattern_boundary") =
"expanded";
287 params.set<
bool>(
"uniform_mesh_on_sides") =
true;
291 params.set<std::vector<std::string>>(
"id_name") = {
"pin_id"};
292 params.set<std::vector<MooseEnum>>(
"assign_type") = {
294 params.set<std::vector<MeshGeneratorName>>(
"inputs") =
_inputs;
295 params.set<std::vector<std::vector<unsigned int>>>(
"pattern") =
_pattern;
296 params.set<
bool>(
"create_outward_interface_boundaries") =
false;
312 std::vector<subdomain_id_type> duct_block_ids;
318 std::to_string(duct_it + 1);
320 duct_block_ids.push_back(duct_block_id);
324 params.set<std::vector<Real>>(
"duct_sizes") =
_duct_sizes;
325 params.set<std::vector<subdomain_id_type>>(
"duct_block_ids") = duct_block_ids;
326 params.set<std::vector<SubdomainName>>(
"duct_block_names") =
duct_block_names;
327 params.set<std::vector<unsigned int>>(
"duct_intervals") =
_duct_intervals;
336 copyMeshProperty<bool>(
"is_control_drum_meta",
name() +
"_pattern");
337 copyMeshProperty<std::vector<Point>>(
"control_drum_positions",
name() +
"_pattern");
338 copyMeshProperty<std::vector<Real>>(
"control_drum_angles",
name() +
"_pattern");
339 copyMeshProperty<std::vector<std::vector<Real>>>(
"control_drums_azimuthal_meta",
340 name() +
"_pattern");
341 copyMeshProperty<std::string>(
"position_file_name",
name() +
"_pattern");
342 copyMeshProperty<Real>(
"pattern_pitch_meta",
name() +
"_pattern");
345 std::string build_mesh_name =
name() +
"_delbds";
350 std::vector<BoundaryName> boundaries_to_delete = {};
351 for (
const auto & pattern_x :
_pattern)
353 for (
const auto & pattern_idx : pattern_x)
355 const auto pin_name =
_inputs[pattern_idx];
356 const auto pin_id = getMeshProperty<subdomain_id_type>(
RGMB::pin_type, pin_name);
357 const BoundaryName boundary_name =
359 if (!std::count(boundaries_to_delete.begin(), boundaries_to_delete.end(), boundary_name))
360 boundaries_to_delete.push_back(boundary_name);
365 params.
set<MeshGeneratorName>(
"input") =
name() +
"_pattern";
366 params.set<std::vector<BoundaryName>>(
"boundary_names") = boundaries_to_delete;
373 if (use_flexible_stitching)
376 build_mesh_name =
name() +
"_fpg_delbds";
381 std::map<subdomain_id_type, std::vector<std::vector<subdomain_id_type>>> region_id_map =
382 getMeshProperty<std::map<subdomain_id_type, std::vector<std::vector<subdomain_id_type>>>>(
386 region_id_map.begin()->first, region_id_map.begin()->second));
436 std::vector<std::vector<int>> pin_name_lattice;
437 std::vector<std::string> input_pin_names;
440 std::vector<int> pin_name_idx(
_pattern[i].size());
444 const auto it = std::find(input_pin_names.begin(), input_pin_names.end(), input_pin_name);
445 if (it == input_pin_names.end())
447 pin_name_idx[
j] = input_pin_names.size();
448 input_pin_names.push_back(input_pin_name);
451 pin_name_idx[
j] = it - input_pin_names.begin();
453 pin_name_lattice.push_back(pin_name_idx);
464 SubdomainName block_to_delete =
"";
466 mooseError(
"Attempting to use flexible stitching on assembly " +
name() +
467 " that does not have a background region. This is not yet supported.");
470 std::to_string(radial_index);
476 params.
set<std::vector<SubdomainName>>(
"block") = {block_to_delete};
477 params.set<MeshGeneratorName>(
"input") =
name() +
"_delbds";
485 params.
set<std::vector<MeshGeneratorName>>(
"inputs") = {
name() +
"_del_outer"};
486 params.set<std::vector<libMesh::Point>>(
"extra_positions") = {
libMesh::Point(0, 0, 0)};
487 params.set<std::vector<unsigned int>>(
"extra_positions_mg_indices") = {0};
488 params.set<
bool>(
"use_auto_area_func") =
true;
490 params.set<
unsigned int>(
"boundary_sectors") =
495 params.set<SubdomainName>(
"background_subdomain_name") =
497 params.set<
bool>(
"verify_holes") =
false;
506 params.
set<MeshGeneratorName>(
"input") =
name() +
"_fpg";
507 params.set<std::vector<BoundaryName>>(
"boundary_names") = {std::to_string(1)};
513 std::unique_ptr<MeshBase>
524 auto null_mesh =
nullptr;
530 if (hasMeshProperty<Real>(
"pattern_pitch_meta",
name() +
"_pattern"))
532 const auto pattern_pitch_meta =
533 getMeshProperty<Real>(
"pattern_pitch_meta",
name() +
"_pattern");
543 std::string plane_id_name =
"plane_id";
544 std::string region_id_name =
"region_id";
545 std::string pin_type_id_name =
"pin_type_id";
546 std::string assembly_type_id_name =
"assembly_type_id";
547 std::string radial_id_name =
"radial_id";
548 const std::string default_block_name =
557 unsigned int plane_id_int = 0;
563 std::map<std::string, SubdomainID> rgmb_name_id_map;
567 for (
auto & elem : (*_build_mesh)->active_element_ptr_range())
570 const dof_id_type pin_type_id = elem->get_extra_integer(pin_type_id_int);
577 const dof_id_type radial_idx = elem->get_extra_integer(radial_id_int);
579 elem->set_extra_integer(region_id_int, elem_rid);
583 auto elem_block_name = default_block_name;
587 elem_block_name +=
"_REG" + std::to_string(elem_rid);
588 if (elem->type() ==
TRI3 || elem->type() ==
PRISM6)
591 *(*
_build_mesh), elem, rgmb_name_id_map, elem_block_name, next_block_id);
598 const auto base_block_id = elem->subdomain_id();
599 const auto base_block_name = (*_build_mesh)->subdomain_name(base_block_id);
603 if (!(base_block_name.find(prefix, 0) == 0))
606 const unsigned int peripheral_idx = std::stoi(base_block_name.substr(prefix.length()));
608 bool is_background_region = peripheral_idx == 0;
611 elem->set_extra_integer(pin_type_id_int,
pin_type);
615 elem->set_extra_integer(region_id_int, elem_rid);
618 auto elem_block_name = default_block_name;
620 elem_block_name +=
"_REG" + std::to_string(elem_rid);
625 if (elem->type() ==
TRI3 || elem->type() ==
PRISM6)
628 *(*
_build_mesh), elem, rgmb_name_id_map, elem_block_name, next_block_id);
632 if (getParam<bool>(
"generate_depletion_id"))
634 const MooseEnum option = getParam<MooseEnum>(
"depletion_id_type");
639 (*_build_mesh)->unset_is_prepared();
644 std::unique_ptr<CSG::CSGBase>
650 auto csg_obj = std::make_unique<CSG::CSGBase>();
655 std::unordered_map<unsigned int, std::string> univ_id_names;
656 std::vector<std::string> univs_to_discard;
659 const auto input_univ_name_discard =
_inputs[i] +
"_root_univ";
660 const auto input_univ_name =
_inputs[i] +
"_univ";
661 csg_obj->joinOtherBase(std::move(*
_input_csg_bases[i]),
true, input_univ_name_discard);
662 univs_to_discard.push_back(input_univ_name_discard);
663 univ_id_names[i] = input_univ_name;
667 for (
const auto & univ_name : univs_to_discard)
669 const auto & universe_to_delete = csg_obj->getUniverseByName(univ_name);
670 const auto cells_to_delete = universe_to_delete.getAllCells();
671 csg_obj->deleteUniverse(universe_to_delete);
672 for (
const auto & cell : cells_to_delete)
673 csg_obj->deleteCell(cell.get());
677 std::vector<std::vector<std::reference_wrapper<const CSG::CSGUniverse>>> universe_pattern;
680 std::vector<std::reference_wrapper<const CSG::CSGUniverse>> universe_row;
681 for (
const auto & univ_id : row)
683 const auto & lattice_univ = csg_obj->getUniverseByName(univ_id_names[univ_id]);
684 universe_row.push_back(lattice_univ);
686 universe_pattern.push_back(universe_row);
690 std::vector<std::reference_wrapper<const CSG::CSGSurface>> surfaces_by_axial_region;
693 if (extruded_assembly)
696 const auto & lowest_axial_surf = surfaces_by_axial_region.front().get();
697 const auto & highest_axial_surf = surfaces_by_axial_region.back().get();
698 axial_extent = +lowest_axial_surf & -highest_axial_surf;
706 const auto & assembly_univ = csg_obj->createUniverse(
name() +
"_univ");
709 bool is_last_radial_region = i == duct_boundaries.size() - 1;
718 std::string lat_cell_name =
name() +
"_lattice_cell";
719 if (!is_last_radial_region)
721 const auto & duct_surfaces =
731 csg_obj->createCell(lat_cell_name,
assembly_lattice, inner_region, &assembly_univ);
737 if (!is_last_radial_region)
739 const auto & duct_surfaces =
742 radial_region &= inner_region;
746 std::string duct_cell_name =
name() +
"_duct_cell_radial_" + std::to_string(i - 1);
747 if (!extruded_assembly)
750 std::string region_name =
"rgmb_region_" + std::to_string(
_duct_region_ids[0][i - 1]);
751 csg_obj->createCell(duct_cell_name, region_name, radial_region, &assembly_univ);
756 const auto & name_prefix =
name() +
"_duct_radial_" + std::to_string(i - 1);
762 csg_obj->createCell(duct_cell_name, fill_univ, radial_region, &assembly_univ);
770 duct_boundaries.size() - 1, duct_boundaries.back(), *csg_obj);
772 if (extruded_assembly)
773 assembly_region &= axial_extent;
774 csg_obj->createCell(
name() +
"_root_cell", assembly_univ, assembly_region);
782 const std::vector<std::reference_wrapper<const CSG::CSGSurface>> & surfaces_by_axial_region,
807 const std::string & name_prefix,
808 const std::vector<std::reference_wrapper<const CSG::CSGSurface>> & surfaces_by_axial_region,
809 const std::vector<subdomain_id_type> & region_ids,
812 mooseAssert(surfaces_by_axial_region.size() - region_ids.size() == 1,
813 "Incorrect length of axial data vectors");
815 for (
const auto i :
make_range(surfaces_by_axial_region.size() - 1))
818 const auto & lower_surf = surfaces_by_axial_region[i].get();
819 if (lower_surf != surfaces_by_axial_region.front())
820 axial_region = +lower_surf;
821 const auto & upper_surf = surfaces_by_axial_region[i + 1].get();
822 if (upper_surf != surfaces_by_axial_region.back())
825 axial_region = -upper_surf;
827 axial_region &= -upper_surf;
829 auto cell_name = name_prefix +
"_axial_" + std::to_string(i);
830 const auto mat_name =
"rgmb_region_" + std::to_string(region_ids[i]);
831 csg_obj.
createCell(cell_name, mat_name, axial_region, &fill_univ);
registerMooseObject("ReactorApp", AssemblyMeshGenerator)
std::unique_ptr< MeshBase > & getMeshByName(const MeshGeneratorName &mesh_generator_name)
static void addDepletionIDParams(InputParameters ¶meters)
const SubdomainName ASSEMBLY_BLOCK_NAME_PREFIX
void generateFlexibleAssemblyBoundaries()
void updateElementBlockNameId(MeshBase &input_mesh, Elem *elem, std::map< std::string, SubdomainID > &name_id_map, std::string elem_block_name, SubdomainID &next_free_id)
Updates the block names and ids of the element in an input mesh according to a map of block name to b...
bool _has_duct_block_names
Whether block names for assembly duct elements have been provided by user.
static const std::string duct_block_names
static const std::string background_region_id
T & setMeshProperty(const std::string &data_name, Args &&... args)
static const std::string assembly_type
const subdomain_id_type ASSEMBLY_BLOCK_ID_START
void paramError(const std::string ¶m, Args... args) const
std::vector< std::unique_ptr< CSG::CSGBase > *> getCSGBases(const std::string ¶m_name)
static const std::string region_id_as_block_name
const unsigned int _background_intervals
The number of divisions in the mesh outside of the pins and inside of the ducts.
static const std::string assembly_lattice
static const std::string is_single_pin
const subdomain_id_type _assembly_type
The id number for the type of the assembly.
std::unique_ptr< MeshBase > generate() override
const CSGCell & createCell(const std::string &name, const std::string &mat_name, const CSGRegion ®ion, const CSGUniverse *add_to_univ=nullptr)
const std::vector< Real > _duct_sizes
The inner apothem of any ducts around the assembly.
unsigned int getElemIntegerFromMesh(MeshBase &input_mesh, std::string extra_int_name, bool should_exist=false)
Initializes extra element integer from id name for a given mesh and throws an error if it should exis...
void setLatticeOuter(const CSGLattice &lattice, const std::string &outer_name)
bool _has_background_block_name
Whether block names for assembly background elements have been provided by user.
static const std::string reactor_params_name
static constexpr boundary_id_type ASSEMBLY_BOUNDARY_ID_START
static const std::string mesh_geometry
void initializeReactorMeshParams(const std::string reactor_param_name)
Initializes and checks validity of ReactorMeshParams mesh generator object.
InputParameters getValidParams(const std::string &name) const
std::vector< std::reference_wrapper< const CSG::CSGSurface > > getAxialPlaneSurfaces(CSG::CSGBase &csg_obj)
Get CSGSurfaces corresponding to axial planes of the extruded RGMB mesh.
std::vector< std::vector< subdomain_id_type > > _duct_region_ids
2-D vector (axial outer indexing, radial inner indexing) used to set the "region_id" extra-element in...
static const std::string background_block_name
std::unique_ptr< MeshBase > * _build_mesh
The final mesh that is generated by the subgenerators; This mesh is generated by the subgenerators wi...
void addDepletionId(MeshBase &input_mesh, const MooseEnum &option, const DepletionIDGenerationLevel generation_level, const bool extrude)
add depletion IDs
static const std::string assembly_pitch
static const std::string pin_type
std::map< subdomain_id_type, std::vector< std::vector< subdomain_id_type > > > _pin_region_id_map
A mapping from pin-type IDs to region IDs used when assigning region IDs during the pin stitching sta...
static InputParameters validParams()
const SubdomainName TRI_BLOCK_NAME_SUFFIX
static InputParameters validParams()
static const std::string pin_region_id_map
const BoundaryName PIN_BOUNDARY_NAME_PREFIX
std::vector< subdomain_id_type > _background_region_id
Vector used to set the "region_id" extra-element integer of the assembly background elements...
static const std::string extruded
const T & getReactorParam(const std::string ¶m_name)
Returns reference of parameter in ReactorMeshParams object.
std::vector< std::unique_ptr< CSG::CSGBase > * > _input_csg_bases
List of pointers to all CSG bases created by input mesh generators.
const std::string & name() const
static const std::string duct_halfpitches
std::unique_ptr< CSG::CSGBase > generateCSG() override
static const std::string mesh_dimensions
const subdomain_id_type ASSEMBLY_BLOCK_ID_TRI_FLEXIBLE
void addMeshSubgenerator(const std::string &type, const std::string &name, Ts... extra_input_parameters)
MeshGeneratorName callExtrusionMeshSubgenerators(const MeshGeneratorName input_mesh_name)
Calls mesh subgenerators related to extrusion, renaming of top / bottom boundaries, and defining plane IDs.
RegionType getRegionType() const
static const std::string pitch
void freeReactorParamsMesh()
Releases the mesh obtained in _reactor_params_mesh.
const std::vector< unsigned int > _duct_intervals
The number of divisions in the meshes of the ducts.
static const std::string top_boundary_id
std::vector< std::unique_ptr< MeshBase > *> getMeshes(const std::string ¶m_name)
std::vector< std::reference_wrapper< const CSG::CSGSurface > > getOuterRadialSurfacesForUnitCell(unsigned int radial_index, Real halfpitch, CSG::CSGBase &csg_obj)
Get CSGSurfaces corresponding to hexagonal or square region with given halfpitch and centered around ...
CSG::CSGRegion getInnerRegion(const std::vector< std::reference_wrapper< const CSG::CSGSurface >> &surfaces, const libMesh::Point &origin)
std::vector< std::vector< std::string > > _duct_block_names
Optional 2-D vector (axial outer indexing, radial inner indexing) used to set the block names of the ...
static void setHasGenerateCSG(InputParameters ¶ms)
static const std::string is_homogenized
void freeReactorParamsCSG()
Releases the CSG base object obtained in _reactor_params_csg.
const CSG::CSGUniverse & createDuctFillUniverse(const std::string &name_prefix, const std::vector< std::reference_wrapper< const CSG::CSGSurface >> &surfaces_by_axial_region, const std::vector< subdomain_id_type > ®ion_ids, CSG::CSGBase &csg_obj)
Create fill universe for ducted regions.
static const std::string is_control_drum
unsigned int _mesh_dimensions
The number of dimensions the mesh is ultimately going to have (2 or 3, declared in the ReactorMeshPar...
static const std::string pin_region_ids
static const std::string flexible_assembly_stitching
static const std::string pin_lattice
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const std::vector< std::vector< unsigned int > > _pattern
The 2D pin-by-pin layout of the assembly mapping indices into _inputs.
std::string _geom_type
The type of geometry that is being described (Square or Hex, declared in the ReactorMeshParams object...
static const std::string pin_block_names
AssemblyMeshGenerator(const InputParameters ¶meters)
const CSG::CSGLattice & createRGMBLattice(const Real pitch, const std::vector< std::vector< std::reference_wrapper< const CSG::CSGUniverse >>> pattern, CSG::CSGBase &csg_obj)
Create CSG lattice for assembly and core lattices.
boundary_id_type _assembly_boundary_id
The ID of the assembly outer boundary, equal to the assembly type ID + 2000.
static const std::string axial_mesh_intervals
IntRange< T > make_range(T beg, T end)
const std::vector< MeshGeneratorName > _inputs
The names of the pins that compose the Assembly.
void mooseError(Args &&... args) const
A base class that contains common members for Reactor Geometry Mesh Builder mesh generators.
const BoundaryName ASSEMBLY_BOUNDARY_NAME_PREFIX
void setAssemblyLatticeOuter(const CSG::CSGLattice &assembly_lattice, const std::vector< std::reference_wrapper< const CSG::CSGSurface >> &surfaces_by_axial_region, CSG::CSGBase &csg_obj)
Create CSG cell with lattice fill for region within first duct boundary.
T & declareMeshProperty(const std::string &data_name, Args &&... args)
std::vector< std::string > _background_block_name
Optional vector used to set the block names of the assembly background elements.
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
bool isParamValid(const std::string &name) const
static const std::string bypass_meshgen
static const std::string pin_names
const CSGUniverse & createUniverse(const std::string &name)
MeshGeneratorSystem & getMeshGeneratorSystem()
std::map< subdomain_id_type, std::vector< std::vector< std::string > > > _pin_block_name_map
A mapping from pin-type IDs to block names used when assigning block names during the pin stitching s...
void declareMeshesForSub(const std::string ¶m_name)
SubdomainID getNextFreeSubdomainID(MeshBase &input_mesh)
const bool _extrude
Whether this mesh should be extruded to 3-D, making it the final structure in the reactor mesh...
static const std::string num_sectors_flexible_stitching
static const std::string duct_region_ids
BoundaryName _assembly_boundary_name
The name of the assembly outer boundary, equal to the concatenation of "outer_assembly_" and the asse...
void ErrorVector unsigned int
const subdomain_id_type MAX_PIN_TYPE_ID
auto index_range(const T &sizable)
static const std::string bottom_boundary_id
static const std::string pin_block_name_map
Mesh generator for defining a reactor assembly using a Cartesian or hexagonal lattice with the option...