Legacy explicit syntax for mass equation

This conservation is expressed by the FVKernels/mass kernel:

[FVKernels]
  [mass]
    type = INSFVMassAdvection
    variable = pressure
    block = 'fuel pump hx'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

(Note that this kernel uses variable = pressure even though pressure does not appear in the mass conservation equation. This is an artifact of the way systems of equations are described in MOOSE. Since the number of equations must correspond to the number of non-linear variables, we are essentially using the variables to "name" each equation. The momentum equations will be named by the corresponding velocity variable. That just leaves the pressure variable for naming the mass equation, even though pressure does not appear in the mass equation.)

Legacy explicit syntax for momentum equation

The first term in the momentum equation—the advection of momentum—is handled with the kernel,

[FVKernels]
  [u_advection]
    type = INSFVMomentumAdvection
    variable = v_x
    block = 'fuel pump hx'
    momentum_component = 'x'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

The second term—the pressure gradient—is handled with,

[FVKernels]
  [u_pressure]
    type = INSFVMomentumPressure
    variable = v_x
    momentum_component = 'x'
    block = 'fuel pump hx'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

The third and fourth term—the Reynolds Stress and the Viscous Tensor—with,

[FVKernels]
  [u_turbulent_diffusion_rans]
    type = INSFVMixingLengthReynoldsStress
    variable = v_x
    momentum_component = 'x'
  []

  [u_molecular_diffusion]
    type = INSFVMomentumDiffusion
    variable = v_x
    block = 'fuel pump hx'
    momentum_component = 'x'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

The definition of the mixing length is handled with,

[AuxKernels]
  [mixing_len]
    type = WallDistanceMixingLengthAux
    walls = 'shield_wall reflector_wall'
    variable = mixing_len
    execute_on = 'initial'
    block = 'fuel'
    von_karman_const = ${von_karman_const}
    delta = 0.1 # capping parameter (m)
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

Recall that the fifth term, the viscous force, is treated with a unique model for the heat exchanger region. Consequently, the block parameter is used to restrict the relevant kernel to the heat exchanger,

[FVKernels]
  [friction_hx_x]
    type = INSFVMomentumFriction
    variable = v_x
    quadratic_coef_name = 'friction_coef'
    block = 'hx'
    momentum_component = 'x'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

This model does not include a friction force for the other blocks so no kernel needs to be specified for those blocks.

The conservation of momentum in the -direction is analogous, but it also includes the Boussinesq approximation in order to capture the effect of buoyancy and a body force in the pump region. Note that the Boussinesq term is needed because of the approximation that the fluid density is uniform and constant,

where is the pump head driving the flow, is the expansion coefficient, is the fluid temperature, and is a reference temperature value. The pump head is tuned such that the imposed mass flow rate is ~18500 kg/s.

For each kernel describing the -momentum equation, there is a corresponding kernel for the -momentum equation. The additional Boussinesq kernel and the pump kernel for this equation are,

[FVKernels]
  [v_buoyancy]
    type = INSFVMomentumBoussinesq
    variable = v_y
    T_fluid = T
    gravity = '0 -9.81 0'
    ref_temperature = 1000
    momentum_component = 'y'
    block = 'fuel'
    alpha_name = 'alpha_b'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)
[FVKernels]
  [pump]
    type = INSFVBodyForce
    variable = v_y
    functor = ${pump_force}
    block = 'pump'
    momentum_component = 'y'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

Boundary conditions include standard velocity wall functions at the walls to account for the non-linearity of the velocity in the boundary layer given the coarse mesh and symmetry at the center axis of the MSFR,

[FVBCs]
  [walls_u]
    type = INSFVWallFunctionBC
    variable = v_x
    boundary = 'shield_wall reflector_wall'
    momentum_component = 'x'
  []
  [walls_v]
    type = INSFVWallFunctionBC
    variable = v_y
    boundary = 'shield_wall reflector_wall'
    momentum_component = 'y'
  []

  [symmetry_u]
    type = INSFVSymmetryVelocityBC
    variable = v_x
    boundary = 'fluid_symmetry'
    momentum_component = 'x'
    mu = 'total_viscosity'
  []
  [symmetry_v]
    type = INSFVSymmetryVelocityBC
    variable = v_y
    boundary = 'fluid_symmetry'
    momentum_component = 'y'
    mu = 'total_viscosity'
  []
  [symmetry_pressure]
    type = INSFVSymmetryPressureBC
    boundary = 'fluid_symmetry'
    variable = pressure
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

Auxkernels are used to compute the wall shear stress obtained by the standard wall function model, the dimensionless wall distance and the value for the eddy viscosity.

[AuxKernels]
  [mixing_len]
    type = WallDistanceMixingLengthAux
    walls = 'shield_wall reflector_wall'
    variable = mixing_len
    execute_on = 'initial'
    block = 'fuel'
    von_karman_const = ${von_karman_const}
    delta = 0.1 # capping parameter (m)
  []
  [wall_shear_stress]
    type = WallFunctionWallShearStressAux
    variable = wall_shear_stress
    walls = 'shield_wall reflector_wall'
    block = 'fuel'
    mu = 'total_viscosity'
  []
  [wall_yplus]
    type = WallFunctionYPlusAux
    variable = wall_yplus
    walls = 'shield_wall reflector_wall'
    block = 'fuel'
    mu = 'total_viscosity'
  []
  [turbulent_viscosity]
    type = INSFVMixingLengthTurbulentViscosityAux
    variable = eddy_viscosity
    block = 'fuel pump hx'
    execute_on = 'initial'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

The mixing length value is obtained from the restart file, as it is constant throughout the simulation.

For relaxation purposes, time derivatives are added to the momentum equations until a steady state is attained.

[FVKernels]
  [u_time]
    type = INSFVMomentumTimeDerivative
    variable = v_x
    momentum_component = 'x'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

Legacy explicit syntax for the energy equation

The energy equation is the final equation that is implemented in this model. The first term—energy advection—is captured by the kernel,

[FVKernels]
  [heat_advection]
    type = INSFVEnergyAdvection
    variable = T
    block = 'fuel pump hx'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

The second term—the turbulent diffusion of heat—corresponds to the kernel,

[FVKernels]
  [heat_turb_diffusion]
    type = WCNSFVMixingLengthEnergyDiffusion
    schmidt_number = ${Pr_t}
    variable = T
    block = 'fuel pump hx'
    cp = 'cp'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

The third term—heat source and loss—is covered by two kernels. First, the nuclear heating computed by the neutronics solver is included with,

[FVKernels]
  [heat_src]
    type = FVCoupledForce
    variable = T
    v = power_density
    block = 'fuel pump hx'
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

And second, the heat loss through the heat exchanger is implemented with the kernel,

[FVKernels]
  [heat_sink]
    type = NSFVEnergyAmbientConvection
    variable = T
    # Compute the coefficient as 600 m^2 / m^3 surface area density times a heat
    # transfer coefficient of 20 kW / m^2 / K
    alpha = 'alpha'
    block = 'hx'
    T_ambient = ${T_HX}
  []
[]
(msr/msfr/steady/legacy/run_ns.i)

Legacy explicit syntax for adding time derivatives to all equations

The following kernels were used to add the time derivatives to their respective equations. This is no longer necessary with the NavierStokesFV syntax.

[FVKernels]
  [u_time]
    type = INSFVMomentumTimeDerivative
    variable = v_x
    momentum_component = 'x'
  []
[]
(msr/msfr/transient/legacy/run_ns.i)
[FVKernels]
  [v_time]
    type = INSFVMomentumTimeDerivative
    variable = v_y
    momentum_component = 'y'
  []
[]
(msr/msfr/transient/legacy/run_ns.i)
[FVKernels]
  [heat_time]
    type = INSFVEnergyTimeDerivative
    variable = T
    cp_name = 'cp'
  []
[]
(msr/msfr/transient/legacy/run_ns.i)
[FVKernels]
  [c1_time]
    type = FVTimeKernel
    variable = c1
  []
[]
(msr/msfr/transient/legacy/run_ns.i)