Friction 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 friction are clearly discernible and quantifiable. Momentum transfer in the single-phase case is driven by a lateral pressure gradient and turbulence. By deactivating turbulence in the test model case, momentum transfer can only be the result of lateral pressure imbalance; which for a model with no form losses (spacer grids), can only be driven by unequal frictional losses. Friction loss depends on the hydraulic diameter, so it makes sense to devise a two-channel problem, with channels that have an unequal flow area. The problem geometry is shown in Figure 1.

Figure 1: Friction model verification problem geometry

Channel-2 has a hydraulic diameter that is twice the size of the Channel-1 hydraulic diameter. The length of the model is set to 10 m to allow the flow to completely redistribute within the solution space. The different frictional pressure drops create a lateral pressure gradient that drives flow from the higher resistance channel to the lower resistance channel. Moving up the channels, velocity grows larger in the low-resistance channel, which increases frictional pressure drop in that channel. Simultaneously, velocity decreases in the high-resistance channel, which decreases frictional pressure drop. This continues until the frictional pressure drop is the same in both channels, at which point crossflow ceases. At this point, the channels are said to be in mechanical equilibrium. An analytical solution can be derived for this point of mechanical equilibrium:

Results

 

The analytical prediction is compared with the code results in Figure 2. The code results converge to the analytical solution at the mechanical equilibrium.

Figure 2: Relative mass flow distribution in the axial direction

Input file

T_in = 473.15 # K
mass_flux_in = 3500 # kg /sec m2
P_out = 155e+5 # Pa

[QuadSubChannelMesh]
  [sub_channel]
    type = SCMQuadSubChannelMeshGenerator
    nx = 1
    ny = 2
    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"}>>>]
  [S_fn]
    type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../../source/functions/MooseParsedFunction.html"}>>>
    expression<<<{"description": "The user defined function."}>>> = if(y>0.0,0.002,0.001)
  []
[]

[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 = 0.0
  P_tol = 1e-6
  T_tol = 1e-6
  implicit = false
  compute_density = true
  compute_viscosity = true
  compute_power = true
  P_out = ${P_out}
[]

[ICs<<<{"href": "../../../syntax/ICs/index.html"}>>>]
  [S_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."}>>> = S
    function<<<{"description": "The initial condition function."}>>> = S_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
  []

  [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.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"}>>>]
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
[]

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [mdot_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"}>>> = mdot
    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
  []
  [mdot_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"}>>> = mdot
    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/friction_model_verification/two_channel.i)

References

  1. Chris Gosdin Robert Salko, Marcus Gergar and Maria Avramova. CTF Void Drift Validation Study. CASL, 2015.[BibTeX]