SCM model for the Oak Ridge National Laboratory (ORNL) 19-pin benchmark

Contact: Mauricio Tano, mauricio.tanoretamales.at.inl.gov

Benchmark description

The ORNL 19-pin experiment was built at Oak Ridge National Laboratory for studying the thermal-hydraulic flow characterisitics in SFRs assemblies as described in (Fontana et al., 1974). The cross section of the experimental facility is depicted in Figure 1. The validation exercise was done for test series 2 of this experiment. In this series, the fuel pins of the experiment were heated by 19 identical electric cartridges. The configuration and external heat fluxes of this cartidges matches typical values expected for SFRs. The measurements in test series 2 focused on the distribution of temperatures at the exit of the fuel assembly, the duct walls, and the pin bundle. The nature of the heat source and the lack of neighboring assemblies make the distribution of temperatures at the pin bundle and duct atypical for LMRs. Therefore, this data was deemed of secondary importance for validating the SCM. In contrast, the distribution of temperatures at the exit of the fuel assembly is indicative of the heating of the coolant and flow mixing in the fuel bundle, which is expected to be representative of the one in an actual SFR. Therefore, we have focused our validation work in predicting the distribution of temperatures at the exit of the fuel assembly.

Figure 1: Left: heating pin positions for the experiment. Right: subchannel positions in the experiement.

The design parameters for the test series 2 of the ORNL 19-pin experiment are presented in Table 1. Pressure is assumed to be constant at the outlet of the assembly and temperature and mass flux to be constant at its inlet. The fuel bundle is divided between inlet, heated, and outlet sections along the pin in increasing elevation. A nonzero linear heat rate is only assigned to the heated part of the pin, while no power is imposed at the inlet and outlet sections.

Table 1: Design and operational parameters for ORNL's 19-pin benchmark.

Experiment Parameter (unit)Value
Number of pins (-)
Rod Pitch (cm)
Rod Diameter (cm)
Wire wrap diameter (cm)
Wire wrap axial pitch (cm)
Flat-to-flat duct distance (cm)
Inlet length (cm)
Heated length (cm)
Outlet length (cm)
Outlet pressure (Pa)
Inlet Temperature (K)
Power profile (-)Uniform

Due to hexagonal symmetry in the experiment, the temperature distribution has been measured over the subchannels that approximately lie on a the diagonal line that connects the opposed vertices in the duct. The orientation of the meassuring line connects the south-west vertex to the north-east one. For our numbering convention, this lines includes subchannels 37, 36, 20, 10, 4, 1, 12, and 28.

Three different flow and heating configuration were evaluated for the experiment validation. These configurations are summarized in Table 2.

Table 2: Validation cases selected in the ORNL benchmark

NamingRun IDRod Power (W/cm)Flow rate (m/s)Reynolds number
High flow rate
Medium flow rate
Low flow rate

SCM input

General parameters

The general parameters on the experimental conditions are described here below. They set up the boundary conditions for the high-flow-rate test case.



 T_in = 588.5
 flow_area = 0.0004980799633447909 #m2
 mass_flux_in = ${fparse 55*3.78541/10/60/flow_area}  # [1e+6 kg/m^2-hour] turns into kg/m^2-sec
 P_out = 2.0e5 # Pa

Mesh

The meshing in SCM uses a custom SCMTriSubChannelMeshGenerator. This one generates a mesh of 1D channel segments connected in 3D. The subchannel positions are automatically generated by specifying the number of radial rings, the flat to flat distance of the duct, and the pin pitch. The number of axial cells in which the domain is discretrized is specified by n_cells. For more information about the mesh generator, pelase consult the website documentation on SCM.

[TriSubChannelMesh]
  [subchannel]
    type = SCMTriSubChannelMeshGenerator
    nrings = 3
    n_cells = 40
    flat_to_flat = 3.41e-2
    heated_length = 0.5334
    unheated_length_entry = 0.4064
    unheated_length_exit = 0.0762
    pin_diameter = 5.84e-3
    pitch = 7.26e-3
    dwire = 1.42e-3
    hwire = 0.3048
  []
[]
(modules/subchannel/validation/ORNL_19_pin/ORNL_19.i)

Variables

This block defines the subchannel variables for the SCM solve. This block is not necessary for the solver to run.

[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
  [mdot]
  []
  [SumWij]
  []
  [P]
  []
  [DP]
  []
  [h]
  []
  [T]
  []
  [rho]
  []
  [S]
  []
  [w_perim]
  []
  [q_prime]
  []
  [mu]
  []
  [displacement]
  []
[]
(modules/subchannel/validation/ORNL_19_pin/ORNL_19.i)

FluidProperties

The FluidProperties block specifies the thermophysical properties used in the SCM solve. Sodium properties are used in this case.

[FluidProperties<<<{"href": "../../../syntax/FluidProperties/index.html"}>>>]
  [sodium]
    type = PBSodiumFluidProperties<<<{"description": "Class that provides the methods that realize the equations of state for Liquid Sodium", "href": "../../../source/fluidproperties/PBSodiumFluidProperties.html"}>>>
  []
[]
(modules/subchannel/validation/ORNL_19_pin/ORNL_19.i)

Problem

The problem type specifies the solver to be used in the SCM solve. The type of problem used in this case is a liquid metal subchannel problem that uses sodium fluid properties. The parameters beta and C_T are used are used to model the crossflow and cross enthalpy-fluxes. Different solve procedures can be applied. In this case, we use an explicit, segragated solve. For more information about the mesh generator, pelase consult the website documentation on SCM.

[Problem<<<{"href": "../../../syntax/Problem/index.html"}>>>]
  type = TriSubChannel1PhaseProblem
  fp = sodium
  n_blocks = 1
  P_out = 2.0e5
  CT = 2.6
  compute_density = true
  compute_viscosity = true
  compute_power = true
  implicit = true
  segregated = false
  staggered_pressure = false
  monolithic_thermal = true
  verbose_multiapps = true
  verbose_subchannel = true
  interpolation_scheme = upwind
[]
(modules/subchannel/validation/ORNL_19_pin/ORNL_19.i)

Initial Conditions

This block specifies the initial conditions for the AuxVariables utilized in the SCM solve. The linear heat flux initialization requires an external file that defines the relative power per fuel pin. In this case, this file is name "pin_power_profile_19.txt"

[ICs<<<{"href": "../../../syntax/ICs/index.html"}>>>]
  [S_IC]
    type = SCMTriFlowAreaIC<<<{"description": "Computes flow area of subchannels in a triangular lattice arrangement", "href": "../../../source/ics/SCMTriFlowAreaIC.html"}>>>
    variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = S
  []

  [w_perim_IC]
    type = SCMTriWettedPerimIC<<<{"description": "Computes wetted perimeter of subchannels in a triangular lattice arrangement", "href": "../../../source/ics/SCMTriWettedPerimIC.html"}>>>
    variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = w_perim
  []

  [q_prime_IC]
    type = SCMTriPowerIC<<<{"description": "Computes axial power rate (W/m) that goes into the subchannel cells or is assigned to the fuel pins, in a triangular lattice arrangement", "href": "../../../source/ics/SCMTriPowerIC.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]"}>>> = 16975 # W/m
    filename<<<{"description": "name of radial power profile .txt file (should be a single column) [UnitLess]."}>>> = "pin_power_profile19.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"}>>> = sodium
  []

  [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."}>>> = sodium
  []

  [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."}>>> = sodium
  []

  [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
  []
[]
(modules/subchannel/validation/ORNL_19_pin/ORNL_19.i)

Auxiliary Kernels

Auxiliary kernels are used ton apply the boundary conditions on pressure, temperature, and mass flow rate.

[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'
  []
[]
(modules/subchannel/validation/ORNL_19_pin/ORNL_19.i)

Executioner

The executioner can be Steady or Transient. The tolerances are not really used in the SCM problem.

[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
  type = Steady
[]
(modules/subchannel/validation/ORNL_19_pin/ORNL_19.i)

MultiApp system

A MultiApp is used for transfering the SCM solution into 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_ORNL_19.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"
  []
[]
(modules/subchannel/validation/ORNL_19_pin/ORNL_19.i)

A custom transfer, MultiAppDetailedSolutionTransfer, is used for this purpose.

[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/ORNL_19_pin/ORNL_19.i)

The detailed mesh uses a SCMDetailedTriSubChannelMeshGenerator and the solution variables are populated by the transfer.

# M. Fontana, et All,
# "Temperature distribution in the duct wall and at the exit of a 19-pin simulated lmfbr fuel assembly (ffm bundle 2a),
# "Nuclear Technology, vol. 24, no. 2, pp. 176-200, 1974.
T_in = 588.5
flow_area = 0.0004980799633447909 #m2
mass_flux_in = '${fparse 55*3.78541/10/60/flow_area}'
P_out = 2.0e5 # Pa
[TriSubChannelMesh]
  [subchannel]
    type = SCMTriSubChannelMeshGenerator
    nrings = 3
    n_cells = 40
    flat_to_flat = 3.41e-2
    heated_length = 0.5334
    unheated_length_entry = 0.4064
    unheated_length_exit = 0.0762
    pin_diameter = 5.84e-3
    pitch = 7.26e-3
    dwire = 1.42e-3
    hwire = 0.3048
  []
[]

[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
  [mdot]
  []
  [SumWij]
  []
  [P]
  []
  [DP]
  []
  [h]
  []
  [T]
  []
  [rho]
  []
  [S]
  []
  [w_perim]
  []
  [q_prime]
  []
  [mu]
  []
  [displacement]
  []
[]

[FluidProperties<<<{"href": "../../../syntax/FluidProperties/index.html"}>>>]
  [sodium]
    type = PBSodiumFluidProperties<<<{"description": "Class that provides the methods that realize the equations of state for Liquid Sodium", "href": "../../../source/fluidproperties/PBSodiumFluidProperties.html"}>>>
  []
[]

[Problem<<<{"href": "../../../syntax/Problem/index.html"}>>>]
  type = TriSubChannel1PhaseProblem
  fp = sodium
  n_blocks = 1
  P_out = 2.0e5
  CT = 2.6
  compute_density = true
  compute_viscosity = true
  compute_power = true
  implicit = true
  segregated = false
  staggered_pressure = false
  monolithic_thermal = true
  verbose_multiapps = true
  verbose_subchannel = true
  interpolation_scheme = upwind
[]

[ICs<<<{"href": "../../../syntax/ICs/index.html"}>>>]
  [S_IC]
    type = SCMTriFlowAreaIC<<<{"description": "Computes flow area of subchannels in a triangular lattice arrangement", "href": "../../../source/ics/SCMTriFlowAreaIC.html"}>>>
    variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = S
  []

  [w_perim_IC]
    type = SCMTriWettedPerimIC<<<{"description": "Computes wetted perimeter of subchannels in a triangular lattice arrangement", "href": "../../../source/ics/SCMTriWettedPerimIC.html"}>>>
    variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = w_perim
  []

  [q_prime_IC]
    type = SCMTriPowerIC<<<{"description": "Computes axial power rate (W/m) that goes into the subchannel cells or is assigned to the fuel pins, in a triangular lattice arrangement", "href": "../../../source/ics/SCMTriPowerIC.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]"}>>> = 16975 # W/m
    filename<<<{"description": "name of radial power profile .txt file (should be a single column) [UnitLess]."}>>> = "pin_power_profile19.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"}>>> = sodium
  []

  [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."}>>> = sodium
  []

  [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."}>>> = sodium
  []

  [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
[]

[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
  type = Steady
[]

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [T]
    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"}>>> = 36
    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]"}>>> = 0.7
  []

  [Pin_Planar_Mean]
    type = SCMPlanarMean<<<{"description": "Calculates an mass-flow-rate averaged mean of the chosen variable on a z-plane at a user defined height over all subchannels", "href": "../../../source/postprocessors/SCMPlanarMean.html"}>>>
    variable<<<{"description": "Variable you want the mean 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'
    height<<<{"description": "Axial location of plane [m]"}>>> = 0.0
  []

  [Pout_Planar_Mean]
    type = SCMPlanarMean<<<{"description": "Calculates an mass-flow-rate averaged mean of the chosen variable on a z-plane at a user defined height over all subchannels", "href": "../../../source/postprocessors/SCMPlanarMean.html"}>>>
    variable<<<{"description": "Variable you want the mean 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'
    height<<<{"description": "Axial location of plane [m]"}>>> = 1.2
  []

  [Pout_user_provided]
    type = Receiver<<<{"description": "Reports the value stored in this processor, which is usually filled in by another object. The Receiver does not compute its own value.", "href": "../../../source/postprocessors/Receiver.html"}>>>
    default<<<{"description": "The default value"}>>> = ${P_out}
    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'
  []

  ####### Assembly pressure drop
  [DP_Planar_mean]
    type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
    pp_names<<<{"description": "Post-processors arguments"}>>> = 'Pin_Planar_Mean Pout_Planar_Mean'
    function = 'Pin_Planar_Mean - Pout_Planar_Mean'
  []
  [DP_SubchannelDelta]
    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'
  []
[]
################################################################################
# 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_ORNL_19.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/ORNL_19_pin/ORNL_19.i)

Results

The key factor dominating the temperature profile in the outlet of the domain is the competing effect between heat convection and heat conduction in the coolant. An example of the axial and lateral mass flow rates and the temperature and viscosity fields obtained for a high-flow-rate configuration in the ORNL 19-pin benchmark is presented in Figure 2. The flow rapidly develops over the assembly. However, there is a significantly larger flow field in the outer gaps of the pin bundle. This results in the outer pin and channels being colder than the center ones. The temperature difference between outlet and inner subchannels increases with the increasing mass flow rate. There is a small competing effect due to the viscosity in the center of the channels being smaller due to heating, but this effect is of second order compared with the flow driven by the pressure drop effects. However, as mass flow decreases, heat conduction in the sodium coolant starts dominating over heat convection and, hence, the temperature profiles become flatter at the exit. In summary, the temperature distribution measured at the outlet of the assembly can be regulated by the balance between convection and conduction, which is experimentally regulated by changing the axial mass flux and the power at the pin bundles.

Figure 2: Example of simulation results for the high-flow test case in the ORNL-19 benchmark. (a) Distribution of axial mass flow. (b) Distribution of lateral mass flow. (c) Distribution of temperature. (d) Distribution of dynamic viscosity due to heating.

The results obtained are compared against the experimental values and the SUBAC and MATRA-LMR codes in Figure 3. It is observed, that for every single case our code predicts temperature distribution values that matches more closely the experimental results.

Figure 3: Comparison of results obtained for ORNL-19 pin case between experimental measurements, the SUBAC code, the MATRA-LMR code, and the current code. (a) High mass flow case. (b) Medium mass flow case. (c) Low mass flow case

References

  1. MH Fontana, RE MacPherson, PA Gnadt, LF Parsly, and JL Wantland. Temperature distribution in the duct wall and at the exit of a 19-pin simulated lmfbr fuel assembly (ffm bundle 2a). Nuclear Technology, 24(2):176–200, 1974.[BibTeX]