Enthalpy mixing model Verification
Test Description
This verification problem is the same used in Robert Salko and Avramova (2015). This case presents a problem where the effects of turbulent mixing are clearly discernible and quantifiable. Turbulence causes both momentum and enthalpy mixing through the terms:
Because the model for turbulent mixing is gradient-driven based in , in order to observe the effects of turbulence, it is necessary to make a gradient in either energy or momentum. It is easier to focus on the energy equation and deactivate the density calculation. The problem geometry consists of two identical channels connected by a gap and is seen in Figure 1.

Figure 1: Enthalpy mixing model verification problem geometry
To test the turbulent mixing model, the temperature of one channel is raised by 10 degrees Celsius. Turbulent enthalpy mixing will transfer heat from the hot channel to the cold channel. The solution given by the code is then compared to the analytical solution:
Results
The analytical solution is compared with the code results in Figure 2. The code results are in good agreement with the analytical solution.

Figure 2: Enthalpy distribution in the axial direction
Input file
To run the enthalpy mixing model verification problem use the following input file:
mass_flux_in = 3500 # kg /sec m2
P_out = 155e+5 # Pa
[QuadSubChannelMesh]
[sub_channel]
type = SCMQuadSubChannelMeshGenerator
nx = 2
ny = 1
n_cells = 100
pitch = 0.0126
pin_diameter = 0.00950
gap = 0.00095
heated_length = 10.0
spacer_z = '0.0'
spacer_k = '0.0'
[]
[]
[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
[T_fn]
type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../../source/functions/MooseParsedFunction.html"}>>>
value<<<{"description": "The user defined function."}>>> = if(x>0.0,483.10,473.10)
[]
[]
[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.0
P_tol = 1e-6
T_tol = 1e-6
compute_density = true
compute_viscosity = true
compute_power = true
P_out = ${P_out}
[]
[ICs<<<{"href": "../../../syntax/ICs/index.html"}>>>]
[S_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."}>>> = S
value<<<{"description": "The value to be set in IC"}>>> = 8.78778158e-05
[]
[T_ic]
type = FunctionIC<<<{"description": "An initial condition that uses a normal function of x, y, z to produce values (and optionally gradients) for a field variable.", "href": "../../../source/ics/FunctionIC.html"}>>>
variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = T
function<<<{"description": "The initial condition function."}>>> = T_fn
[]
[w_perim_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."}>>> = w_perim
value<<<{"description": "The value to be set in IC"}>>> = 0.34188034
[]
[q_prime_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."}>>> = q_prime
value<<<{"description": "The value to be set in IC"}>>> = 0.0
[]
[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"}>>>]
[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
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[Temp_1]
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."}>>> = 'initial timestep_end'
height<<<{"description": "Axial location of point [m]"}>>> = 10.0
[]
[Temp_2]
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"}>>> = 1
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]"}>>> = 10.0
[]
[]
[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<<<{"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/verification/enthalpy_mixing_verification/two_channel.i)The solution will be projected to the 3D mesh created by the following input file:
[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
[subchannel]
type = SCMDetailedQuadSubChannelMeshGenerator<<<{"description": "Creates a detailed mesh of subchannels in a square lattice arrangement", "href": "../../../source/meshgenerators/SCMDetailedQuadSubChannelMeshGenerator.html"}>>>
nx<<<{"description": "Number of channels in the x direction [-]"}>>> = 2
ny<<<{"description": "Number of channels in the y direction [-]"}>>> = 1
n_cells<<<{"description": "The number of cells in the axial direction"}>>> = 100
pitch<<<{"description": "Pitch [m]"}>>> = 0.0126
pin_diameter<<<{"description": "Rod diameter [m]"}>>> = 0.00950
gap<<<{"description": "(Its an added distance between a perimetric pin and the duct: Edge Pitch W = pitch/2 - pin_diameter/2 + gap) [m]"}>>> = 0.00095 #
heated_length<<<{"description": "Heated length [m]"}>>> = 10.0
[]
[]
[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
[mdot]
[]
[SumWij]
[]
[P]
[]
[DP]
[]
[h]
[]
[T]
[]
[rho]
[]
[mu]
[]
[S]
[]
[w_perim]
[]
[q_prime]
[]
[]
[Problem<<<{"href": "../../../syntax/Problem/index.html"}>>>]
type = NoSolveProblem
[]
[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Steady
[]
(modules/subchannel/verification/enthalpy_mixing_verification/3d.i)References
- Chris Gosdin Robert Salko, Marcus Gergar and Maria Avramova.
CTF Void Drift Validation Study.
CASL, 2015.[BibTeX]