SCM model for the PNNL 12-pin benchmark
Benchmark Description
The PNNL 26 benchmark Bates and Khan (1980) was performed at Pacific Northwest National Laboratory in 1977 for investigating the buoyancy effect in the mixed (combined free and forced) convection regime for specific flow coast-down transients. The objective of the study was to develop an understanding of the thermal hydraulic phenomena at low flows in a pin bundle subjected to lateral power skews. The study was performed using a non-uniformly electrically heated 2x6 pin bundle contained in a flow housing.
Local fluid velocity and temperature measurements in the mixed (combined free and forced) convection regime were obtained. This benchmark aims to validate the SCM code in natural convection conditions. For each of the test conditions of this study, fluid axial velocity and temperature (both local and bulk average inlet and outlet) were measured within the heated length of the pin bundle. For the steady state cases studied, velocity measurements were made along the X axis at Y = 0.0 which is along the centerline of the central subchannels (subchannels 1-7). The cross section of the pin bundle is presented in Figure Figure 1.

Figure 1: Bundle Cross-Section with Subchannel Numbering Scheme and Bundle Dimensions (in.)
Velocity data were recorded at selected points along the central subchannel axial centerlines (centerpoints) for the transient flow cases. Cases 5, 9 and 13 where chosen to test the SCM code. For the transient case 5, the location of the experimental measurements is the center of subchannel 4. The nominal run conditions for these cases are shown in Table Table 1.
Table 1: Operational parameters for PNNL 2X6-pin benchmark.
Case number | Initial Flow | Final Flow | time | Power Gradient | Re {initial/final} | ||
---|---|---|---|---|---|---|---|
S.S | |||||||
S.S |
SCM Input
Steady State
The input file for the steady case 9 is:
[GlobalParams<<<{"href": "../../../syntax/GlobalParams/index.html"}>>>]
######## Geometry #
nx = 7
ny = 3
n_cells = 48
n_blocks = 1
pitch = 0.014605
pin_diameter = 0.012065
gap = 0.0015875
heated_length = 1.2192
spacer_z = '0.0'
spacer_k = '0.0'
[]
######## BC's #################
T_in = 297.039 # K
P_out = 101325 # Pa
[QuadSubChannelMesh]
[sub_channel]
type = SCMQuadSubChannelMeshGenerator
[]
[fuel_pins]
type = SCMQuadPinMeshGenerator
input = sub_channel
[]
[]
[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
[]
[Dpin]
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
beta = 0.006
CT = 2.6
P_tol = 1e-6
T_tol = 1e-6
compute_density = true
compute_viscosity = true
compute_power = true
P_out = ${P_out}
implicit = true
segregated = false
monolithic_thermal = false
[]
[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]"}>>> = 5460 # 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.012065
[]
[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"}>>> = 131.43435930715006
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
[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
[]
[rho_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"}>>> = rho
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."}>>> = "rho_in.txt"
height<<<{"description": "Axial location of normal slice [m]"}>>> = 0.0
[]
[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]"}>>> = 1.2192
[]
[rho_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"}>>> = rho
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."}>>> = "rho_out.txt"
height<<<{"description": "Axial location of normal slice [m]"}>>> = 1.2192
[]
[mdot_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_075.txt"
height<<<{"description": "Axial location of normal slice [m]"}>>> = 0.9144
[]
[T_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"}>>> = 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."}>>> = "T_in.txt"
height<<<{"description": "Axial location of normal slice [m]"}>>> = 0.0
[]
[T_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."}>>> = "T_out.txt"
height<<<{"description": "Axial location of normal slice [m]"}>>> = 1.2192
[]
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[mdot7]
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"}>>> = mdot
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 0.9144
[]
[mdot8]
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"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = 8
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 0.9144
[]
[mdot9]
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"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = 9
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 0.9144
[]
[mdot10]
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"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = 10
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 0.9144
[]
[mdot11]
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"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = 11
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 0.9144
[]
[mdot12]
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"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = 12
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 0.9144
[]
[mdot13]
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"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = 13
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 0.9144
[]
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Steady
[]
################################################################################
# A multiapp that projects data to a detailed mesh
################################################################################
[MultiApps<<<{"href": "../../../syntax/MultiApps/index.html"}>>>]
[viz]
type = FullSolveMultiApp<<<{"description": "Performs a complete simulation during each execution.", "href": "../../../source/multiapps/FullSolveMultiApp.html"}>>>
input_files<<<{"description": "The input file for each App. If this parameter only contains one input file it will be used for all of the Apps. When using 'positions_from_file' it is also admissable to provide one input_file per file."}>>> = "3d.i"
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"
[]
[]
###### Transfers to the detailedMesh at the end of the coupled simulations
[Transfers<<<{"href": "../../../syntax/Transfers/index.html"}>>>]
[subchannel_transfer]
type = SCMSolutionTransfer<<<{"description": "Transfers subchannel solution from computational mesh onto visualization mesh", "href": "../../../source/transfers/SCMSolutionTransfer.html"}>>>
to_multi_app<<<{"description": "The name of the MultiApp to transfer the data to"}>>> = viz
variable<<<{"description": "The auxiliary variables to transfer."}>>> = 'mdot SumWij P DP h T rho mu S'
[]
[pin_transfer]
type = SCMPinSolutionTransfer<<<{"description": "Transfers pin solution from computational mesh onto visualization mesh", "href": "../../../source/transfers/SCMPinSolutionTransfer.html"}>>>
to_multi_app<<<{"description": "The name of the MultiApp to transfer the data to"}>>> = viz
variable<<<{"description": "The auxiliary variables to transfer."}>>> = 'Tpin q_prime'
[]
[]
(modules/subchannel/validation/PNNL_12_pin/steady_state/2X6_ss.i)The input file decribing the radial pin power profile is:
0.0
0.0
0.0
1.0
1.0
1.0
0.0
0.0
0.0
1.0
1.0
1.0
(modules/subchannel/validation/PNNL_12_pin/steady_state/power_profile.txt)For case 13 the input file and power profile file, need to be adapted according to the respective operational parameters.
Transient
The input file for the steady case 5 is:
T_in = 297.039 # K
P_out = 101325 # Pa
[QuadSubChannelMesh]
[sub_channel]
type = SCMQuadSubChannelMeshGenerator
nx = 7
ny = 3
n_cells = 60
pitch = 0.014605
pin_diameter = 0.012065
gap = 0.0015875
unheated_length_entry = 0.3048
heated_length = 1.2192
spacer_z = '0.0'
spacer_k = '0.0'
[]
[]
[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.006
CT = 2.6
P_tol = 1e-6
T_tol = 1e-6
compute_density = true
compute_viscosity = true
compute_power = false
P_out = ${P_out}
[]
[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]"}>>> = 0.0 # 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}
[]
[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.012101767481985
[]
[]
[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
[mass_flux]
type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../source/functions/PiecewiseLinear.html"}>>>
xy_data<<<{"description": "All function data, supplied in abscissa, ordinate pairs"}>>> = '
5.0 122.2645
10.0 42.7926'
[]
[]
[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'
[]
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[mass_flux_in]
type = FunctionValuePostprocessor<<<{"description": "Computes the value of a supplied function at a single point (scalable)", "href": "../../../source/postprocessors/FunctionValuePostprocessor.html"}>>>
function<<<{"description": "The function which supplies the postprocessor value."}>>> = mass_flux
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."}>>> = 'initial timestep_end'
[]
[mdot]
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"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = 4
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 0.4953
[]
[mdot2]
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"}>>> = mdot
index<<<{"description": "Index of subchannel"}>>> = 4
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 0.0
[]
[]
[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
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Transient
nl_rel_tol = 0.9
l_tol = 0.9
start_time = 0.0
end_time = 10
dt = 1.0
[]
################################################################################
# A multiapp that projects data to a detailed mesh
################################################################################
[MultiApps<<<{"href": "../../../syntax/MultiApps/index.html"}>>>]
[viz]
type = TransientMultiApp<<<{"description": "MultiApp for performing coupled simulations with the parent and sub-application both progressing in time.", "href": "../../../source/multiapps/TransientMultiApp.html"}>>>
input_files<<<{"description": "The input file for each App. If this parameter only contains one input file it will be used for all of the Apps. When using 'positions_from_file' it is also admissable to provide one input_file per file."}>>> = "3d.i"
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"
[]
[]
[Transfers<<<{"href": "../../../syntax/Transfers/index.html"}>>>]
[xfer]
type = SCMSolutionTransfer<<<{"description": "Transfers subchannel solution from computational mesh onto visualization mesh", "href": "../../../source/transfers/SCMSolutionTransfer.html"}>>>
to_multi_app<<<{"description": "The name of the MultiApp to transfer the data to"}>>> = viz
variable<<<{"description": "The auxiliary variables to transfer."}>>> = 'mdot SumWij P DP h T rho mu q_prime S'
[]
[]
(modules/subchannel/validation/PNNL_12_pin/transient/2X6_transient.i)Results
The SCM results vs the experimental measurements are shown in Figures Figure 2, Figure 3 and Figure 4.

Figure 2: Velocity profile across centerline

Figure 3: Velocity profile across centerline

Figure 4: Linear flow coast down
The code predicted average values in all three cases are lower than the measured experimental values. That's because the experimental results are pointwise instantaneous velocity measurements while the SCM results are the surface-averaged velocities in each subchannel.
The experimental maximum values measured at the subchannel centers are less than the analytically predicted value of for laminar flow inside a circular pipe. Where is the surface average of the flow profile which is what SCM calculates. This happens because of turbulence (modeled in SCM with closure models) which tends to flatten the velocity profiles. In turbulent flows momentum is transferred towards the wall regions, hence the maximum velocity in a turbulent profile is less than that in the laminar case.
Furthermore, when the power ratio is reduced (case 13 vs case 9), the velocity profile gets more flat. The code prediction follows that trend. Buoyancy effects are more pronounced when there are more extreme gradients in heat rate in the radial direction.
In all cases the SCM results follow the trend of the experimental measurements. Last it should be noted that the initial bump in the code prediction in Figure Figure 4 relates to the time required for the boundary condition information to reach the point of the measurement downstream.
References
- J M Bates and E U Khan.
Investigation of combined free and forced convection in a 2 x 6 pin bundle during controlled flow transients.
10 1980.
URL: https://www.osti.gov/biblio/7042813, doi:10.2172/7042813.[BibTeX]