Skip to content

surface postprocessors #857

@ragusa

Description

@ragusa

Surface Post-Processor (SPP) Specification

Goal

The Surface Post-Processor (SPP) computes face-based, current-like quantities derived from the angular flux on a user-defined set of surfaces. Surfaces are selected by a surface filter that may reference boundary IDs (external domain perimeter), named/user-defined face sets (including internal surfaces), and optionally MPI rank-interface faces. In addition, the user may provide an optional list of logical volumes to further restrict which faces are included; this logical-volume filter is applied as an additional AND constraint on top of the surface selection. The SPP uses the built-in directional factor $\Omega\cdot n$ (not user-configurable) and supports angular integration modes for net, outgoing, or incoming contributions. By default, results are summed over all energy groups, with options to return per-group results or user-defined group-set (macro-group) collapsed results. Internal or MPI-interface surface post-processing is only valid if angular flux storage was enabled in the simulation.

  • Provide a consistent, extensible mechanism to compute boundary leakage and surface currents from angular flux.
  • Clearly separate surface-based post-processing from volumetric scalar-flux post-processing.
  • Support both simple boundary-ID based use cases and advanced user-defined internal surface sets.
  • Allow optional restriction of surface tallies to faces adjacent to user-specified logical volumes.

Scope

In scope

  • Angular-flux-based surface QoIs on selected faces.
  • Surface selection via boundary IDs and user-defined surface/face sets.
  • Optional logical-volume restriction on top of surface selection.
  • Angular integration modes: net, outgoing, incoming.
  • Energy aggregation modes: all-groups (default), per-group, group-sets.
  • Global reductions over the selected faces.

Out of scope (v1)

  • User-defined multipliers beyond the built-in $\Omega\cdot n$.
  • Per-neighbor-rank or per-partition-island reporting for MPI interfaces.

Definitions

Let:

  • $f$ be a face, $g\in{1,\dots,G}$ an energy group.
  • $A_f$ the face area.
  • $n_f$ outward normal (well-defined for boundary faces; for internal faces, orientation must be specified or implied by the face-set definition).
  • $\psi_{i,g}(\Omega)$ the angular flux at DoF $i$ on face $f$, group $g$.
  • $DOF(f)$ the set of DoFs associated with face $f$.
  • $S$ the selected set of faces after filtering.

Built-in directional factor (not user-configurable):
$$
(\Omega \cdot n_f)
$$

Per-face angularly integrated quantities:

  • Net current
    $$
    j_{f,g}^{net} = \int_{4\pi} (\Omega\cdot n_f),\sum_{i \in DOF(f)} \psi_{i,g}(\Omega),d\Omega
    $$
  • Outgoing current
    $$
    j_{f,g}^{+} = \int_{\Omega\cdot n_f>0} (\Omega\cdot n_f),\sum_{i \in DOF(f)} \psi_{i,g}(\Omega),d\Omega
    $$
  • Incoming current
    $$
    j_{f,g}^{-} = \int_{\Omega\cdot n_f<0} (\Omega\cdot n_f),\sum_{i \in DOF(f)} \psi_{i,g}(\Omega),d\Omega
    $$

Surface filter specification

User inputs

A surface filter must be able to select faces by one of:

  1. boundary_ids (external perimeter faces)
  2. surface_sets (named/user-defined face sets; may include internal faces)
  3. mpi_interface (optional; union of rank-interface faces)

Optional additional restriction:

  • logical_volumes (optional list of logical volume names)

Inclusion rule

A face $f$ is included if:

  1. It belongs to the chosen surface_filter.type category and matches the user-provided IDs/names,
    AND
  2. If logical_volumes is provided, $f$ must be adjacent to at least one cell that belongs to at least one of the listed logical volumes.

Recommended predicate:

  • Let $L$ be the optional set/list of logical volumes.
  • Let $AdjCells(f)$ be the set of cells adjacent to face $f$ (1 cell for boundary faces, 2 for internal).

Then:
$$
f \in S \iff
(\text{matches surface filter})
\ \land
\bigl(L\ \text{unspecified} \ \lor\ \exists c \in AdjCells(f): c \in L \bigr)
$$

Notes:

  • boundary_ids should map to mesh/BC-provided face tags.
  • surface_sets must allow user-defined internal surfaces.
  • mpi_interface, if enabled in v1, should represent the union of all faces whose adjacent cells are owned by different MPI ranks.
  • The logical-volume filter is intended to let users restrict a boundary-ID or surface-set SPP to a sub-region of the domain without introducing material-based filtering on faces.

Angular-flux requirement rules

  • Boundary-ID SPP: requires angular flux if computing any current-like quantity (default assumption).
  • Internal surface-set SPP: requires store_angular_flux = true (or equivalent).
  • MPI-interface SPP (if supported): requires store_angular_flux = true.

SPP must reject or clearly error if an internal/MPI-interface SPP is requested without angular flux storage.


Angular integration modes

SPP must support:

  • net (default TBD)
  • outgoing ($\Omega\cdot n&gt;0$)
  • incoming ($\Omega\cdot n&lt;0$)

No additional user-defined angular multipliers in v1.


Energy handling

Default

  • energy.mode = all_groups
    Return results summed over all groups.

Supported modes

  1. all_groups
    $$
    Q = \sum_{g=1}^G Q_g
    $$
  2. per_group
    Return $Q_g$ for all $g$.
  3. group_sets
    User provides named group sets $\mathcal{G}k$:
    $$
    Q_k = \sum
    {g\in \mathcal{G}_k} Q_g
    $$

Spatial reductions (outputs)

For each group $g$, and chosen angular mode $m \in {net, +, -}$:

  • Surface integral
    $$
    Q_{g}^{int} = \sum_{f\in S} j_{f,g}^{m},A_f
    $$
  • Surface average
    $$
    Q_{g}^{avg} =
    \frac{\sum_{f\in S} j_{f,g}^{m},A_f}{\sum_{f\in S} A_f}
    $$
  • Min / Max (face-wise)
    $$
    Q_{g}^{min} = \min_{f\in S} j_{f,g}^{m}, \quad
    Q_{g}^{max} = \max_{f\in S} j_{f,g}^{m}
    $$

Orientation / normals

  • For boundary faces, outward normals are defined by the mesh.
  • For internal face sets, the SPP must define or require a consistent normal convention. Options:
    • normal orientation is stored with the face set, or
    • a documented deterministic rule is used (e.g., local cell ordering), and the choice is documented.

Output shape rules

The final output dimensions are determined by:

  • selected reductions × angular mode × energy mode

Examples:

  • surface_integral + outgoing + all_groups → single scalar
  • surface_average + net + per_group → length $G$ vector
  • max + incoming + group_sets → length $K$ vector

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions