Detailed postprocessing for PyGriffin
Postrun logic can be improved in PyGriffin by giving a detailed description of power levels within each subassembly region. Because we have transitioned to using RGMB mesh generators, the assembly_wise and axial_wise extra element IDs are already defined by default, and we only need to add the following block to input file to get the necessary subassembly power and volume data:
[AuxVariables]
[volume]
family = MONOMIAL
order = CONSTANT
[]
[]
[AuxKernels]
[volume]
type = ConstantAux
variable = volume
value = 1.0
[]
[]
[VectorPostprocessors]
[subassembly_power]
type = ExtraIDIntegralVectorPostprocessor
variable = 'power'
id_name = 'assembly_id plane_id'
[]
[subassembly_volume]
type = ExtraIDIntegralVectorPostprocessor
variable = 'volume'
id_name = 'assembly_id plane_id'
[]
[]
This will generate two output CSV files upon Griffin execution that lists the integral power in one file and volume in another file as a function of assembly_id and plane_id. With this data, we can create a Griffin summary file in a similar manner as PyDIF3D's summary file. The following output would be a good starting point for displaying detailed power distributions within the core:
************************* POWER EDITION PER SUBASSEMBLY ***************************
Assembly| Ring| Index| Axial| Int Power| Volume|
ID| #| #| #| [W]| [cm3]|
---------------|----------|----------|----------|---------------|---------------|
where Assembly ID is the Griffin ID for distinguishing assemblies (can view this in the mesh Exodus file), ring number and index number are the ARC-based ID's used to indicate which ring and position within the ring each assembly lies, axial number is the axial index of the subassembly region, and Int Power and Volume are the integral power and volumes of each subassembly region.
One additional step that is required for this is that we don't currently store a mapping between assembly ID and (ring id, index id), so this would need to be stored to figure out how Griffin ID's map to actual assembly locations. This can be done by modifying PyGriffinConnect::generate_mesh_input
, since we iterate by each assembly location and figure out the corresponding ring id and index id when we define the core_lattice_str
variable
Optionally, it could also be useful to visualize this table as a function of power within each material zone as well, similar to DIF3D's ************************* POWER AND FLUX INFORMATION PER AREA ***************************
table
With this data processing in place, ideally we would also be able to call the plot_2d
function in the utilities_plot2d
directory to generate a plot of the 2-D power map and Assembly ID map of all assembly locations.
@kkiesling is this a task you can take on and I can advise as needed?