Reporting IDs: A Powerful Feature for Assisting with Physics Input and Output Processing

When using an unstructured finite element mesh format for reactor analysis, it can be challenging to identify which individual elements belong to each geometric component, which is necessary for assigning properties and for extracting integral quantities from the output solution. The block ID (also called subdomain ID) has been used in the past for bookkeeping of elements, which requires each bookkeeping region to have a different block ID. If there are multiple hierarchical levels in geometries (e.g., pin, assembly), block ID is not sufficient to track all the associations of a given element association. Additionally, using an excessive number of blocks in a mesh can cause performance degradation in MOOSE compared to using only a few blocks. Reporting IDs were introduced as a practical solution to this bookkeeping issue. Reporting IDs are extra integer ID tags assigned on each element which designate association with a specific reactor component or zone, such as pin ID or assembly ID. Multiple reporting IDs may be assigned on each element to track different information (e.g., pin number, assembly number, plane number).

The automatic assignment of reporting IDs to elements in a mesh is provided through several mesh generators, as described in the following sections. Collections of elements forming pins and assemblies are identifiable without providing information about their physical location since the mesh generators themselves understand the concept of pins and assemblies.

Reporting IDs can be leveraged to post-process solution data into tables by using the ExtraIDIntegralVectorPostprocessor. This postprocessor integrates the solution based on reporting IDs. Component-wise values such as pin-by-pin power distribution can be easily yielded by specifying integration over pin and assembly reporting IDs to this postprocessor.

Applying Reporting IDs for Cartesian and Hexagonal Lattices

In addition to being used to stitch together Cartesian and hexagonal grids from smaller unit meshes, PatternedCartesianMeshGenerator and PatternedHexMeshGenerator can also assign reporting IDs to the mesh during the stitching process. When using these mesh generators to stitch pins into an assembly, a pin reporting ID (e.g., pin_id) is relevant. When stitching assemblies into a core, an assembly reporting ID (e.g., assembly_id) is relevant.

Since the mesh generators understand the pin or assembly pattern, IDs can be applied in one of several ways: cell (default), pattern, or manual. In the cell numbering pattern, each cell is given a unique ID starting with 0 in the upper left-hand corner of the hexagon grid, increasing monotonically from left to right, top to bottom up until N-1 for the final pin location. Duct regions are assigned reporting IDs starting with the next available integer following pin region assignment. Certain regions can be excluded from being labeled with an ID, for example dummy regions that will later be deleted. This can be accommodated by listing mesh objects in the "exclude_id" parameter. Usage of this parameter is helpful to retain sequential numbering when dummy regions are later deleted.

Object

Features

  • Assign reporting IDs for input geometric components (pins or assemblies) during lattice mesh generations.

  • Supports the following numbering schemes (set with "assign_type"):

    • cell (default): Assign unique IDs for each component in the lattice in sequential order (begins at 0 in the top left corner of the pattern).

    • pattern: assign a different ID for each unique input component

    • manual: use a manual numbering scheme provided by user

  • When assembly duct regions are present, these regions are numbered sequentially starting from the inner-most region to the outer-most region.

Notes

  • Pin and Assembly IDs are applied during creations of assemblies and core, respectively.

Cell Pattern Example

Figure 1: Typical Cartesian (left) and hexagonal (right) cores, colored by Pin ID (top) and Assembly ID (bottom).

Listing 1: Cell pattern reporting ID example for Cartesian lattices.

[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
  [pin1]
    type = PolygonConcentricCircleMeshGenerator<<<{"description": "This PolygonConcentricCircleMeshGenerator object is designed to mesh a polygon geometry with optional rings centered inside.", "href": "../../../source/meshgenerators/PolygonConcentricCircleMeshGenerator.html"}>>>
    num_sides<<<{"description": "Number of sides of the polygon."}>>> = 4
    num_sectors_per_side<<<{"description": "Number of azimuthal sectors per polygon side (rotating counterclockwise from top right face)."}>>> = '2 2 2 2'
    background_intervals<<<{"description": "Number of radial meshing intervals in background region (area between rings and ducts) excluding the background's boundary layers."}>>> = 1
    ring_radii<<<{"description": "Radii of major concentric circles (rings)."}>>> = '0.4 0.5'
    ring_intervals<<<{"description": "Number of radial mesh intervals within each major concentric circle excluding their boundary layers."}>>> = '1 1'
    polygon_size<<<{"description": "Size of the polygon to be generated (given as either apothem or radius depending on polygon_size_style)."}>>> = 0.63
    flat_side_up<<<{"description": "Whether to rotate the generated polygon mesh to ensure that one flat side faces up."}>>> = true
  []

  [pin2]
    type = PolygonConcentricCircleMeshGenerator<<<{"description": "This PolygonConcentricCircleMeshGenerator object is designed to mesh a polygon geometry with optional rings centered inside.", "href": "../../../source/meshgenerators/PolygonConcentricCircleMeshGenerator.html"}>>>
    num_sides<<<{"description": "Number of sides of the polygon."}>>> = 4
    num_sectors_per_side<<<{"description": "Number of azimuthal sectors per polygon side (rotating counterclockwise from top right face)."}>>> = '2 2 2 2'
    background_intervals<<<{"description": "Number of radial meshing intervals in background region (area between rings and ducts) excluding the background's boundary layers."}>>> = 1
    ring_radii<<<{"description": "Radii of major concentric circles (rings)."}>>> = '0.4 0.5'
    ring_intervals<<<{"description": "Number of radial mesh intervals within each major concentric circle excluding their boundary layers."}>>> = '1 1'
    polygon_size<<<{"description": "Size of the polygon to be generated (given as either apothem or radius depending on polygon_size_style)."}>>> = 0.63
    flat_side_up<<<{"description": "Whether to rotate the generated polygon mesh to ensure that one flat side faces up."}>>> = true
  []

  [assembly1]
    type = PatternedCartesianMeshGenerator<<<{"description": "This PatternedCartesianMeshGenerator source code assembles square meshes into a square grid and optionally forces the outer boundary to be square and/or adds a duct.", "href": "../../../source/meshgenerators/PatternedCartesianMeshGenerator.html"}>>>
    inputs<<<{"description": "The names of the meshes forming the pattern."}>>> = 'pin1 pin2'
    pattern<<<{"description": "A two-dimensional cartesian (square-shaped) array starting with the upper-left corner.It is composed of indexes into the inputs vector"}>>> = ' 1  0  1  0;
                0  1  0  1;
                1  0  1  0;
                0  1  0  1'
    assign_type<<<{"description": "List of integer ID assignment types"}>>> = 'cell'
    id_name<<<{"description": "List of extra integer ID set names"}>>> = 'pin_id'
    pattern_boundary<<<{"description": "The boundary shape of the patterned mesh."}>>> = 'none'
    generate_core_metadata<<<{"description": "A Boolean parameter that controls whether the core related metadata is generated for other MOOSE objects such as 'MultiControlDrumFunction' or not."}>>> = false
  []

  [assembly2]
    type = PatternedCartesianMeshGenerator<<<{"description": "This PatternedCartesianMeshGenerator source code assembles square meshes into a square grid and optionally forces the outer boundary to be square and/or adds a duct.", "href": "../../../source/meshgenerators/PatternedCartesianMeshGenerator.html"}>>>
    inputs<<<{"description": "The names of the meshes forming the pattern."}>>> = 'pin1 pin2'
    pattern<<<{"description": "A two-dimensional cartesian (square-shaped) array starting with the upper-left corner.It is composed of indexes into the inputs vector"}>>> = ' 0  1  1  0;
                1  0  0  1;
                1  0  0  1;
                0  1  1  0'
    assign_type<<<{"description": "List of integer ID assignment types"}>>> = 'cell'
    id_name<<<{"description": "List of extra integer ID set names"}>>> = 'pin_id'
    pattern_boundary<<<{"description": "The boundary shape of the patterned mesh."}>>> = 'none'
    generate_core_metadata<<<{"description": "A Boolean parameter that controls whether the core related metadata is generated for other MOOSE objects such as 'MultiControlDrumFunction' or not."}>>> = false
  []

  [core]
    type = PatternedCartesianMeshGenerator<<<{"description": "This PatternedCartesianMeshGenerator source code assembles square meshes into a square grid and optionally forces the outer boundary to be square and/or adds a duct.", "href": "../../../source/meshgenerators/PatternedCartesianMeshGenerator.html"}>>>
    inputs<<<{"description": "The names of the meshes forming the pattern."}>>> = 'assembly1 assembly2'
    pattern<<<{"description": "A two-dimensional cartesian (square-shaped) array starting with the upper-left corner.It is composed of indexes into the inputs vector"}>>> = '0  1;
               1  0'
    assign_type<<<{"description": "List of integer ID assignment types"}>>> = 'cell'
    id_name<<<{"description": "List of extra integer ID set names"}>>> = 'assembly_id'
    pattern_boundary<<<{"description": "The boundary shape of the patterned mesh."}>>> = 'none'
    generate_core_metadata<<<{"description": "A Boolean parameter that controls whether the core related metadata is generated for other MOOSE objects such as 'MultiControlDrumFunction' or not."}>>> = true
  []
[]
(modules/reactor/test/tests/meshgenerators/reporting_id/cartesian_id/patterned_cartesian_core_reporting_id.i)

Listing 2: Cell pattern reporting ID example for hexagonal lattices.

[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
  [pin1]
    type = PolygonConcentricCircleMeshGenerator<<<{"description": "This PolygonConcentricCircleMeshGenerator object is designed to mesh a polygon geometry with optional rings centered inside.", "href": "../../../source/meshgenerators/PolygonConcentricCircleMeshGenerator.html"}>>>
    preserve_volumes<<<{"description": "Volume of concentric circles can be preserved using this function."}>>> = true
    ring_radii<<<{"description": "Radii of major concentric circles (rings)."}>>> = 0.4
    ring_intervals<<<{"description": "Number of radial mesh intervals within each major concentric circle excluding their boundary layers."}>>> = 1
    background_intervals<<<{"description": "Number of radial meshing intervals in background region (area between rings and ducts) excluding the background's boundary layers."}>>> = 1
    num_sides<<<{"description": "Number of sides of the polygon."}>>> = 6
    num_sectors_per_side<<<{"description": "Number of azimuthal sectors per polygon side (rotating counterclockwise from top right face)."}>>> = '2 2 2 2 2 2'
    polygon_size<<<{"description": "Size of the polygon to be generated (given as either apothem or radius depending on polygon_size_style)."}>>> = 0.5
  []
  [pin2]
    type = PolygonConcentricCircleMeshGenerator<<<{"description": "This PolygonConcentricCircleMeshGenerator object is designed to mesh a polygon geometry with optional rings centered inside.", "href": "../../../source/meshgenerators/PolygonConcentricCircleMeshGenerator.html"}>>>
    preserve_volumes<<<{"description": "Volume of concentric circles can be preserved using this function."}>>> = true
    ring_radii<<<{"description": "Radii of major concentric circles (rings)."}>>> = 0.4
    ring_intervals<<<{"description": "Number of radial mesh intervals within each major concentric circle excluding their boundary layers."}>>> = 1
    background_intervals<<<{"description": "Number of radial meshing intervals in background region (area between rings and ducts) excluding the background's boundary layers."}>>> = 1
    num_sides<<<{"description": "Number of sides of the polygon."}>>> = 6
    num_sectors_per_side<<<{"description": "Number of azimuthal sectors per polygon side (rotating counterclockwise from top right face)."}>>> = '2 2 2 2 2 2'
    polygon_size<<<{"description": "Size of the polygon to be generated (given as either apothem or radius depending on polygon_size_style)."}>>> = 0.5
  []
  [assembly1]
    type = PatternedHexMeshGenerator<<<{"description": "This PatternedHexMeshGenerator source code assembles hexagonal meshes into a hexagonal grid and optionally forces the outer boundary to be hexagonal and/or adds a duct.", "href": "../../../source/meshgenerators/PatternedHexMeshGenerator.html"}>>>
    inputs<<<{"description": "The input MeshGenerators."}>>> = 'pin1 pin2'
    pattern_boundary<<<{"description": "The boundary shape of the patterned mesh."}>>> = hexagon
    pattern<<<{"description": "A double-indexed hexagonal-shaped array starting with the upper-left corner."}>>> = '  1 0 1;
                0 0 0 0;
               1 0 1 0 1;
                0 0 0 0;
                 1 0 1'
    hexagon_size<<<{"description": "Size of the outmost hexagon boundary to be generated; this is required only when pattern type is 'hexagon'."}>>> = 2.6
    duct_sizes<<<{"description": "Distance(s) from center to duct(s) inner boundaries."}>>> = '2.4 2.5'
    duct_intervals<<<{"description": "Number of meshing intervals in each enclosing duct."}>>> = '1 1'
    id_name<<<{"description": "List of extra integer ID set names"}>>> = 'pin_id'
    assign_type<<<{"description": "List of integer ID assignment types"}>>> = 'cell'
  []
  [assembly2]
    type = PatternedHexMeshGenerator<<<{"description": "This PatternedHexMeshGenerator source code assembles hexagonal meshes into a hexagonal grid and optionally forces the outer boundary to be hexagonal and/or adds a duct.", "href": "../../../source/meshgenerators/PatternedHexMeshGenerator.html"}>>>
    inputs<<<{"description": "The input MeshGenerators."}>>> = 'pin1 pin2'
    pattern_boundary<<<{"description": "The boundary shape of the patterned mesh."}>>> = hexagon
    pattern<<<{"description": "A double-indexed hexagonal-shaped array starting with the upper-left corner."}>>> = '  0 0 0;
                0 1 1 0;
               0 1 0 1 0;
                0 1 1 0;
                 0 0 0'
    hexagon_size<<<{"description": "Size of the outmost hexagon boundary to be generated; this is required only when pattern type is 'hexagon'."}>>> = 2.6
    duct_sizes<<<{"description": "Distance(s) from center to duct(s) inner boundaries."}>>> = '2.4 2.5'
    duct_intervals<<<{"description": "Number of meshing intervals in each enclosing duct."}>>> = '1 1'
    id_name<<<{"description": "List of extra integer ID set names"}>>> = 'pin_id'
    assign_type<<<{"description": "List of integer ID assignment types"}>>> = 'cell'
  []
  [core]
    type = PatternedHexMeshGenerator<<<{"description": "This PatternedHexMeshGenerator source code assembles hexagonal meshes into a hexagonal grid and optionally forces the outer boundary to be hexagonal and/or adds a duct.", "href": "../../../source/meshgenerators/PatternedHexMeshGenerator.html"}>>>
    inputs<<<{"description": "The input MeshGenerators."}>>> = 'assembly1 assembly2'
    pattern_boundary<<<{"description": "The boundary shape of the patterned mesh."}>>> = none
    pattern<<<{"description": "A double-indexed hexagonal-shaped array starting with the upper-left corner."}>>> = '1 1;
              1 0 1;
               1 1'
    generate_core_metadata<<<{"description": "A Boolean parameter that controls whether the core related metadata is generated for other MOOSE objects such as 'MultiControlDrumFunction' or not."}>>> = true
    id_name<<<{"description": "List of extra integer ID set names"}>>> = 'assembly_id'
    assign_type<<<{"description": "List of integer ID assignment types"}>>> = 'cell'
  []
[]
(modules/reactor/test/tests/meshgenerators/reporting_id/hexagonal_id/core_reporting_id.i)

Alternative Pattern Example

Supports other numbering schemes:

Figure 2: Pattern (left) and Manual (right) Numbering scheme, colored by Pin ID.

Listing 3: Alternative pattern reporting ID example.

[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
  [pin1]
    type = PolygonConcentricCircleMeshGenerator<<<{"description": "This PolygonConcentricCircleMeshGenerator object is designed to mesh a polygon geometry with optional rings centered inside.", "href": "../../../source/meshgenerators/PolygonConcentricCircleMeshGenerator.html"}>>>
    num_sides<<<{"description": "Number of sides of the polygon."}>>> = 4
    num_sectors_per_side<<<{"description": "Number of azimuthal sectors per polygon side (rotating counterclockwise from top right face)."}>>> = '2 2 2 2'
    background_intervals<<<{"description": "Number of radial meshing intervals in background region (area between rings and ducts) excluding the background's boundary layers."}>>> = 1
    ring_radii<<<{"description": "Radii of major concentric circles (rings)."}>>> = '0.4 0.5'
    ring_intervals<<<{"description": "Number of radial mesh intervals within each major concentric circle excluding their boundary layers."}>>> = '1 1'
    polygon_size<<<{"description": "Size of the polygon to be generated (given as either apothem or radius depending on polygon_size_style)."}>>> = 0.63
    flat_side_up<<<{"description": "Whether to rotate the generated polygon mesh to ensure that one flat side faces up."}>>> = true
  []

  [pin2]
    type = PolygonConcentricCircleMeshGenerator<<<{"description": "This PolygonConcentricCircleMeshGenerator object is designed to mesh a polygon geometry with optional rings centered inside.", "href": "../../../source/meshgenerators/PolygonConcentricCircleMeshGenerator.html"}>>>
    num_sides<<<{"description": "Number of sides of the polygon."}>>> = 4
    num_sectors_per_side<<<{"description": "Number of azimuthal sectors per polygon side (rotating counterclockwise from top right face)."}>>> = '2 2 2 2'
    background_intervals<<<{"description": "Number of radial meshing intervals in background region (area between rings and ducts) excluding the background's boundary layers."}>>> = 1
    ring_radii<<<{"description": "Radii of major concentric circles (rings)."}>>> = '0.4 0.5'
    ring_intervals<<<{"description": "Number of radial mesh intervals within each major concentric circle excluding their boundary layers."}>>> = '1 1'
    polygon_size<<<{"description": "Size of the polygon to be generated (given as either apothem or radius depending on polygon_size_style)."}>>> = 0.63
    flat_side_up<<<{"description": "Whether to rotate the generated polygon mesh to ensure that one flat side faces up."}>>> = true
  []

  [assembly1]
    type = PatternedCartesianMeshGenerator<<<{"description": "This PatternedCartesianMeshGenerator source code assembles square meshes into a square grid and optionally forces the outer boundary to be square and/or adds a duct.", "href": "../../../source/meshgenerators/PatternedCartesianMeshGenerator.html"}>>>
    inputs<<<{"description": "The names of the meshes forming the pattern."}>>> = 'pin1 pin2'
    pattern<<<{"description": "A two-dimensional cartesian (square-shaped) array starting with the upper-left corner.It is composed of indexes into the inputs vector"}>>> = ' 1  0  0  1;
                0  0  1  0;
                0  1  0  0;
                1  0  0  1'
    assign_type<<<{"description": "List of integer ID assignment types"}>>> = 'pattern'
    id_name<<<{"description": "List of extra integer ID set names"}>>> = 'pin_id'
    pattern_boundary<<<{"description": "The boundary shape of the patterned mesh."}>>> = 'none'
    generate_core_metadata<<<{"description": "A Boolean parameter that controls whether the core related metadata is generated for other MOOSE objects such as 'MultiControlDrumFunction' or not."}>>> = false
  []

  [assembly2]
    type = PatternedCartesianMeshGenerator<<<{"description": "This PatternedCartesianMeshGenerator source code assembles square meshes into a square grid and optionally forces the outer boundary to be square and/or adds a duct.", "href": "../../../source/meshgenerators/PatternedCartesianMeshGenerator.html"}>>>
    inputs<<<{"description": "The names of the meshes forming the pattern."}>>> = 'pin1 pin2'
    pattern<<<{"description": "A two-dimensional cartesian (square-shaped) array starting with the upper-left corner.It is composed of indexes into the inputs vector"}>>> = ' 0  1  1  0;
                1  0  0  1;
                1  0  0  1;
                0  1  1  0'
    id_pattern<<<{"description": "User-defined element IDs. A double-indexed array starting with the upper-left corner. When providing multiple patterns, each pattern should be separated using '|'"}>>> = ' 0  0  1  1;
                   0  0  1  1;
                   2  2  3  3;
                   2  2  3  3'
    assign_type<<<{"description": "List of integer ID assignment types"}>>> = 'manual'
    id_name<<<{"description": "List of extra integer ID set names"}>>> = 'pin_id'
    pattern_boundary<<<{"description": "The boundary shape of the patterned mesh."}>>> = 'none'
    generate_core_metadata<<<{"description": "A Boolean parameter that controls whether the core related metadata is generated for other MOOSE objects such as 'MultiControlDrumFunction' or not."}>>> = false
  []

  [core]
    type = PatternedCartesianMeshGenerator<<<{"description": "This PatternedCartesianMeshGenerator source code assembles square meshes into a square grid and optionally forces the outer boundary to be square and/or adds a duct.", "href": "../../../source/meshgenerators/PatternedCartesianMeshGenerator.html"}>>>
    inputs<<<{"description": "The names of the meshes forming the pattern."}>>> = 'assembly1 assembly2'
    pattern<<<{"description": "A two-dimensional cartesian (square-shaped) array starting with the upper-left corner.It is composed of indexes into the inputs vector"}>>> = '0  1;
               1  0'
    assign_type<<<{"description": "List of integer ID assignment types"}>>> = 'cell'
    id_name<<<{"description": "List of extra integer ID set names"}>>> = 'assembly_id'
    pattern_boundary<<<{"description": "The boundary shape of the patterned mesh."}>>> = 'none'
    generate_core_metadata<<<{"description": "A Boolean parameter that controls whether the core related metadata is generated for other MOOSE objects such as 'MultiControlDrumFunction' or not."}>>> = true
  []
[]
(tutorials/tutorial04_meshing/app/test/tests/base_mesh_generators/alternative_pattern_reporting_id.i)

Applying Reporting IDs for Axial Plane

Users often wish to postprocess solutions along the axial dimension. The PlaneIDMeshGenerator applies reporting IDs to axial planes in an already extruded mesh. To be clear, this mesh generator does NOT extrude the mesh: an extruded mesh must be provided as input.

Object

Features

  • Apply reporting IDs between axial planes in an already extruded mesh

Notes

  • Only applicable for extruded geometries where the concept of axial layers (in , , or directions) is valid

  • The input mesh to this mesh generator should be 3D (this mesh generator does not perform the extrusion itself)

  • Unique IDs can be assigned between axial planes (coarse approach) or also to each unique sublayer defined by axial subintervals between the planes (fine approach)

Example

Figure 3: Simplified extruded cores with (left) and without (right) subinterval numberings on center region, colored by plane IDs.

Listing 4: Plane ID example with subinterval numbering. Removing the "num_ids_per_plane" parameter will produce the same core without subinterval numbering.

[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
  [CORE_3D]
    type = PlaneIDMeshGenerator<<<{"description": "Adds an extra element integer that identifies planes in a mesh.", "href": "../../../source/meshgenerators/PlaneIDMeshGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = 'CORE_3D_BASE'
    plane_coordinates<<<{"description": "Coordinates of planes along the axis. The origin are at x/y/z=0 depending on the axis"}>>> = '0. 10. 50. 60.'
    num_ids_per_plane<<<{"description": "Number of unique ids per plane"}>>> = '1 4 1'
    id_name<<<{"description": "Name of extra integer ID set"}>>> = 'plane_id'
  []
[]
(tutorials/tutorial04_meshing/app/test/tests/base_mesh_generators/plane_id.i)

Applying Depletion IDs

The DepletionIDGenerator is useful for defining neutronics depletion zones. The fidelity of the depletion zones (pin-level, assembly-level, or even intra-pin zones) can be handled.

Object

Features

  • Automatically assign depletion zones based on existing unique combination of reporting IDs and material ID

  • Easily control the fidelity of depletion zones based on the other reporting IDs already in the mesh (including block and material IDs)

Notes

  • For a pin-level depletion case, the depletion IDs for the entire domain can be specified by finding unique combinations of assembly, pin, and material IDs

  • By additionally including ring and sector IDs accessible through PolygonConcentricCircleMeshGenerator, depletion zones can be defined within the pin itself

Example

Figure 4: Generating depletion ID using pin and assembly reporting IDs.

Listing 5: Depletion ID example.

[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
  [depletion_id]
    type = DepletionIDGenerator<<<{"description": "This DepletionIDGenerator source code is to assign an extra element integer for elements on a mesh based on material and other extra element IDs that is typically used for depletion.", "href": "../../../source/meshgenerators/DepletionIDGenerator.html"}>>>
    input<<<{"description": "Name of an existing mesh generator to which we assign element IDs"}>>> = 'core_mat_id'
    id_name<<<{"description": "Extra integer id names"}>>> = 'assembly_id pin_id'
    material_id_name<<<{"description": "Material id name"}>>> = 'material_id'
    exclude_id_name<<<{"description": "Extra ID names that need to be excluded in the depletion ID generation"}>>> = 'material_id'
    exclude_id_value<<<{"description": "Extra ID values corresponding to names defined in `exclude_id_name`"}>>> = '3 4'
  []
[]
(tutorials/tutorial04_meshing/app/test/tests/base_mesh_generators/depletion_id.i)

Querying Output Data using Reporting IDs

After performing a physics simulation using a mesh with reporting IDs, the solution variables may be post-processed into useful integrals using the reporting IDs. ExtraIDIntegralVectorPostprocessor and ExtraIDIntegralReporter both integrate solution variables over zones identified by unique combinations of reporting IDs (controlled by the user). The user can easily retrieve quantities from an unstructured mesh such as "pin power of pin 6 in assembly 2 on axial layer 3" by using the pin_id, assembly_id, and plane_id as the integration criteria.

Objects

Features

  • Integrates solution variables over zones identified by combinations of reporting IDs

Notes

Example

Figure 5: Example of vector post-processing utilizing reporting IDs.

Listing 6: Vector post-processing example.

[VectorPostprocessors<<<{"href": "../../../syntax/VectorPostprocessors/index.html"}>>>]
  [integral]
    type = ExtraIDIntegralVectorPostprocessor<<<{"description": "Integrates or averages variables based on extra element IDs", "href": "../../../source/vectorpostprocessors/ExtraIDIntegralVectorPostprocessor.html"}>>>
    variable<<<{"description": "The names of the variables that this VectorPostprocessor operates on"}>>> = 'variable_1 variable_2'
    id_name<<<{"description": "List of extra element ID names by which to separate integral(s)."}>>> = 'assembly_id pin_id'
  []
[]
(tutorials/tutorial04_meshing/app/test/tests/base_mesh_generators/reporting_id_vpp.i)