Steady-state mixing model Validation
The PSBT 5x5 benchmark is an international benchmark developed by the Organisation for Economic Co-operation and Development (OECD), the Nuclear Regulatory Commission (NRC), and the Nuclear Power Engineering Center (NUPEC) Rubin et al. (2012). In this work we utilize the steady-state mixing test, detailed in volume III of the PSBT benchmark Rubin et al. (2012). The purpose of this test is to validate the mixing models of the participating codes. The participating codes predict the fluid temperature distribution at the exit of the heated section of a pin bundle assembly and compare it with the experimental values provided by the benchmark. Here we will present as an example case 01-5237, as well as the average error for all the cases run Kyriakopoulos et al. (2022). The pin bundle geometry description is presented in Table below.
PSBT pin bundle specifications |
---|
Item | Value |
---|---|
Rods array | |
Number of heated pins | |
Heated pin outer diameter (mm) | |
Pitch (mm) | |
Axial heated length (mm) | |
Flow channel inner width (mm) | |
Axial power shape | Uniform |
Number of mixing vaned (MV) spacers | |
Number of non mixing vaned (NMV) spacers | |
Number of simple spacers (SS) | |
MV spacer location (mm) | |
NMV spacer location (mm) | |
Simple spacer location (mm) |
The pin bundle has a radial power profile in which the right side of the assembly is under-heated. The radial power profile is shown in Figure 1. The pins on the left side transfer 100% of available pin power to the fluid, while the pins on the right transfer 25%. This causes an uneven temperature distribution at the exit of the assembly.

Figure 1: Radial pin power profile
Note that the turbulent mixing parameter used for all the cases was: , which differs significantly from the default value of . The reason behind the need to adjust to a much higher value, has to do with the geometry of the PSBT facility. Note that there is a preferential mixing direction of the experimental results in the diagonal direction (towards one corner of the assembly), exhibited in Figure 2, while the code results for both values of are symmetric as expected. The experimental results exhibit a non symmetric distribution that we cannot capture with a constant value of beta. There is a temperature gradient towards the corner due to an additional mixing effect, which may reduce the exit temperature differences between the two regions (hot/cold, left/right) and finally increase the optimum in comparison with the case of no temperature gradient in each region.

Figure 2: Exit temperature distribution for case 01-5237
The reason for the additional mixing effect is thought to be the special mixing vanes that the NUPEC facility incorporates in its design. Specifically, the temperature gradient appearing in the experimental data was attributed to the thermal mixing in the diagonal direction of the test bundle, which may be caused by the alignment of mixing vanes mounted in the spacer grids Hwang et al. (2012). This is the physical reason behind the need to use an increased value of .
This illustrates the fact that modeling parameters like should ideally be calibrated for specific geometries and in no way can they be applied generally without proper justification. Nevertheless our results show that, provided we choose the optimum parameters adjusted for the specific geometries, we can accurately predict the exit temperatures. Figure Figure 3 presents the cumulative mean absolute error in the exit temperature in comparison with other subchannel codes Rubin et al. (2012). We note that for the temperature mixing test, our code performs adequately in comparison to the other codes. Our mean absolute error is calculated to be which places us in 5th place out of the nine codes.

Figure 3: Mean absolute error in predicted exit temperature
Input file for case: 01-5237
# M. Avramova et al., 2012,
# OECD/NRC Benchmark Based on NUPEC PWR
# Sub-channel and Bundle Tests (PSBT). Volume III: Departure from Nucleate Boiling
# Case:01-5237
T_in = 502.35
# [1e+6 kg/m^2-hour] turns into kg/m^2-sec
mass_flux_in = ${fparse 1e+6 * 16.95 / 3600.}
P_out = 14.72e6 # Pa
[QuadSubChannelMesh]
[sub_channel]
type = SCMQuadSubChannelMeshGenerator
nx = 6
ny = 6
n_cells = 20
pitch = 0.0126
pin_diameter = 0.00950
gap = 0.00095
heated_length = 3.658
spacer_z = '0.0 0.229 0.457 0.686 0.914 1.143 1.372 1.600 1.829 2.057 2.286 2.515 2.743 2.972 3.200 3.429'
spacer_k = '0.7 0.4 1.0 0.4 1.0 0.4 1.0 0.4 1.0 0.4 1.0 0.4 1.0 0.4 1.0 0.4'
[]
[fuel_pins]
type = SCMQuadPinMeshGenerator
input = sub_channel
nx = 6
ny = 6
n_cells = 20
pitch = 0.0126
heated_length = 3.658
[]
[]
[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
[mdot]
block = sub_channel
[]
[SumWij]
block = sub_channel
[]
[P]
block = sub_channel
[]
[DP]
block = sub_channel
[]
[h]
block = sub_channel
[]
[T]
block = sub_channel
[]
[Tpin]
block = fuel_pins
[]
[rho]
block = sub_channel
[]
[mu]
block = sub_channel
[]
[S]
block = sub_channel
[]
[w_perim]
block = sub_channel
[]
[q_prime]
block = fuel_pins
[]
[]
[FluidProperties<<<{"href": "../../../syntax/FluidProperties/index.html"}>>>]
[water]
type = Water97FluidProperties<<<{"description": "Fluid properties for water and steam (H2O) using IAPWS-IF97", "href": "../../../source/fluidproperties/Water97FluidProperties.html"}>>>
[]
[]
[SubChannel]
type = QuadSubChannel1PhaseProblem
fp = water
n_blocks = 1
beta = 0.08
CT = 2.6
compute_density = true
compute_viscosity = true
compute_power = true
P_out = ${P_out}
implicit = true
segregated = false
staggered_pressure = false
monolithic_thermal = false
verbose_subchannel = true
interpolation_scheme = exponential
deformation = true # this flag allows the re-calculation of subchannel geometric parameters based on the dpin value
[]
[ICs<<<{"href": "../../../syntax/ICs/index.html"}>>>]
[S_IC]
type = SCMQuadFlowAreaIC<<<{"description": "Computes subchannel flow area in the square lattice subchannel arrangement", "href": "../../../source/ics/SCMQuadFlowAreaIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = S
[]
[w_perim_IC]
type = SCMQuadWettedPerimIC<<<{"description": "Computes wetted perimeter of subchannels in a square lattice arrangement", "href": "../../../source/ics/SCMQuadWettedPerimIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = w_perim
[]
[q_prime_IC]
type = SCMQuadPowerIC<<<{"description": "Computes axial heat rate (W/m) that goes into the subchannel cells or is assigned to the fuel pins, in a square lattice arrangement", "href": "../../../source/ics/SCMQuadPowerIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = q_prime
power<<<{"description": "The postprocessor or Real to use for the total power of the subassembly [W]"}>>> = 3.23e6 # W
filename<<<{"description": "name of radial power profile .txt file (should be a single column) [UnitLess]."}>>> = "power_profile.txt"
[]
[T_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = T
value<<<{"description": "The value to be set in IC"}>>> = ${T_in}
[]
[Dpin_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = Dpin
value<<<{"description": "The value to be set in IC"}>>> = 0.00950
[]
[P_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = P
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[DP_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = DP
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[Viscosity_ic]
type = ViscosityIC<<<{"description": "Computes viscosity from specified pressure and temperature", "href": "../../../source/ics/ViscosityIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mu
p<<<{"description": "Pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "Temperature [K]"}>>> = T
fp<<<{"description": "Fluid properties user object name"}>>> = water
[]
[rho_ic]
type = RhoFromPressureTemperatureIC<<<{"description": "Computes the density from pressure and temperature.", "href": "../../../source/ics/RhoFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = rho
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[h_ic]
type = SpecificEnthalpyFromPressureTemperatureIC<<<{"description": "Computes the specific enthalpy from pressure and temperature.", "href": "../../../source/ics/SpecificEnthalpyFromPressureTemperatureIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = h
p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
T<<<{"description": "The temperature [K]"}>>> = T
fp<<<{"description": "The name of fluid properties user object."}>>> = water
[]
[mdot_ic]
type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mdot
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[]
[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
[T_in_bc]
type = ConstantAux<<<{"description": "Creates a constant field in the domain.", "href": "../../../source/auxkernels/ConstantAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = T
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
value<<<{"description": "Some constant value that can be read from the input file"}>>> = ${T_in}
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[mdot_in_bc]
type = SCMMassFlowRateAux<<<{"description": "Computes mass flow rate from specified mass flux and subchannel cross-sectional area. Can read either PostprocessorValue or Real", "href": "../../../source/auxkernels/SCMMassFlowRateAux.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = mdot
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
area<<<{"description": "Cross sectional area [m^2]"}>>> = S
mass_flux<<<{"description": "The postprocessor or Real to use for the value of mass_flux"}>>> = ${mass_flux_in}
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
[]
[]
[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
[Temp_Out_MATRIX]
type = QuadSubChannelNormalSliceValues<<<{"description": "Prints out a user selected value at a user selected axial height in a matrix format to be used for post-processing", "href": "../../../source/outputs/QuadSubChannelNormalSliceValues.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = T
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = final
file_base<<<{"description": "The desired solution output name without an extension. If not provided, MOOSE sets it with Outputs/file_base when available. Otherwise, MOOSE uses input file name and this object name for a master input or uses master file_base, the subapp name and this object name for a subapp input to set it."}>>> = "Temp_Out.txt"
height<<<{"description": "Axial location of normal slice [m]"}>>> = 3.658
[]
[mdot_Out_MATRIX]
type = QuadSubChannelNormalSliceValues<<<{"description": "Prints out a user selected value at a user selected axial height in a matrix format to be used for post-processing", "href": "../../../source/outputs/QuadSubChannelNormalSliceValues.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = final
file_base<<<{"description": "The desired solution output name without an extension. If not provided, MOOSE sets it with Outputs/file_base when available. Otherwise, MOOSE uses input file name and this object name for a master input or uses master file_base, the subapp name and this object name for a subapp input to set it."}>>> = "mdot_Out.txt"
height<<<{"description": "Axial location of normal slice [m]"}>>> = 3.658
[]
[mdot_In_MATRIX]
type = QuadSubChannelNormalSliceValues<<<{"description": "Prints out a user selected value at a user selected axial height in a matrix format to be used for post-processing", "href": "../../../source/outputs/QuadSubChannelNormalSliceValues.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = mdot
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = final
file_base<<<{"description": "The desired solution output name without an extension. If not provided, MOOSE sets it with Outputs/file_base when available. Otherwise, MOOSE uses input file name and this object name for a master input or uses master file_base, the subapp name and this object name for a subapp input to set it."}>>> = "mdot_In.txt"
height<<<{"description": "Axial location of normal slice [m]"}>>> = 0.0
[]
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[total_pressure_drop]
type = SubChannelDelta<<<{"description": "Calculates an absolute overall inlet-mass-flow-rate weighted difference, of a chosen variable, for the whole subchannel assembly, from inlet to outlet", "href": "../../../source/postprocessors/SubChannelDelta.html"}>>>
variable<<<{"description": "Variable you want the delta of"}>>> = P
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = "timestep_end"
[]
[T1]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = T
index<<<{"description": "Index of subchannel"}>>> = 0
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = "timestep_end"
height<<<{"description": "Axial location of point [m]"}>>> = 3.658
[]
[T2]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = T
index<<<{"description": "Index of subchannel"}>>> = 7
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = "timestep_end"
height<<<{"description": "Axial location of point [m]"}>>> = 3.658
[]
[T3]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = T
index<<<{"description": "Index of subchannel"}>>> = 14
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = "timestep_end"
height<<<{"description": "Axial location of point [m]"}>>> = 3.658
[]
[T4]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = T
index<<<{"description": "Index of subchannel"}>>> = 21
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = "timestep_end"
height<<<{"description": "Axial location of point [m]"}>>> = 3.658
[]
[T5]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = T
index<<<{"description": "Index of subchannel"}>>> = 28
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = "timestep_end"
height<<<{"description": "Axial location of point [m]"}>>> = 3.658
[]
[T6]
type = SubChannelPointValue<<<{"description": "Prints out a user selected value of a specified subchannel at a user selected axial height", "href": "../../../source/postprocessors/SubChannelPointValue.html"}>>>
variable<<<{"description": "Variable you want the value of"}>>> = T
index<<<{"description": "Index of subchannel"}>>> = 35
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = "timestep_end"
height<<<{"description": "Axial location of point [m]"}>>> = 3.658
[]
[PinTemp]
type = SCMPinSurfaceTemperature<<<{"description": "Returns the surface temperature of a specific fuel pin at a user defined height. Applies a linear reconstruction for the temperature.", "href": "../../../source/postprocessors/SCMPinSurfaceTemperature.html"}>>>
index<<<{"description": "Index of fuel pin"}>>> = 10
height<<<{"description": "Axial location on fuel pin [m]"}>>> = 3.658
[]
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Steady
[]
(modules/subchannel/validation/psbt/psbt_ss/psbt.i)References
- Dae-Hyun Hwang, Seong-Jin Kim, Kyong-Won Seo, and Hyuk Kwon.
Accuracy and uncertainty analysis of psbt benchmark exercises using a subchannel code matra.
Science and Technology of Nuclear Installations, 2012.[BibTeX]
- Vasileios Kyriakopoulos, Mauricio E Tano, and Jean C Ragusa.
Development of a single-phase, transient, subchannel code, within the moose multi-physics computational framework.
Energies, 15(11):3948, 2022.[BibTeX]
- A. Rubin, A. Schoedel, M. Avramova, H. Utsuno, S. Bajorek, and A. Velazquez-Lozada.
OECD/NRC Benchmark Based on NUPEC PWR Sub-channel and Bundle Tests (PSBT). Volume I: Experimental Database and Final Problem Specifications.
OECD, NUCLEAR ENERGY AGENCY, 2012.[BibTeX]
- A. Rubin, A. Schoedel, M. Avramova, H. Utsuno, S. Bajorek, and A. Velazquez-Lozada.
OECD/NRC Benchmark Based on NUPEC PWR Sub-channel and Bundle Tests (PSBT). Volume III: Departure from Nucleate Boiling.
OECD, NUCLEAR ENERGY AGENCY, 2012.[BibTeX]