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)(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/steady/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Relaxation towards Steady state 3D thermal hydraulics model ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# The flow in this simulation should be initialized with a previous flow
# solution (isothermal, heated or multiphysics) OR using a viscosity rampdown
# An isothermal solution can be generated using 'run_ns_initial.i', and is
# saved in 'restart/run_ns_initial_restart.e'
# A heated solution, with a flat power distribution, can be generated with
# this script 'run_ns.i', and is saved in 'restart/run_ns_restart.e'
# A coupled neutronics-coarse TH solution can be generated with
# 'run_neutronics.i', saved in 'restart/run_neutronics_ns_restart.e'
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s]
k = 1.7 # thermal conductivity [W / m / K]
# https://www.researchgate.net/publication/337161399_Development_of_a_control-\
# oriented_power_plant_simulator_for_the_molten_salt_fast_reactor/fulltext/5dc9\
# 5c9da6fdcc57503eec39/Development-of-a-control-oriented-power-plant-simulator-\
# for-the-molten-salt-fast-reactor.pdf
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Derived material properties
alpha = '${fparse drho_dT / rho}' # thermal expansion coefficient
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning, for heat exchanger pressure and temperature drop
friction = 4e3 # [kg / m^4]
pump_force = -20000. # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = v_x
v = v_y
pressure = pressure
temperature = T
rhie_chow_user_object = 'rc'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
[restart]
type = FileMeshGenerator
use_for_exodus_restart = true
# Depending on the file chosen, the initialization of variables should be
# adjusted. The following variables can be initalized:
# - v_x, v_y, p, lambda from isothermal simulation
# file = 'restart/run_ns_initial_restart.e'
# - v_x, v_y, p, T, lambda, c_ifrom cosine heated simulation
file = 'restart/run_ns_restart.e'
# - v_x, v_y, p, T, lambda, c_i from coupled multiphysics simulation
# file = 'restart/run_ns_coupled_restart.e'
[]
[min_radius]
type = ParsedGenerateSideset
combinatorial_geometry = 'abs(y-0.) < 1e-10 & x < 1.8'
input = restart
new_sideset_name = min_core_radius
normal = '0 1 0'
[]
[hx_top]
type = ParsedGenerateSideset
combinatorial_geometry = 'y > 0'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 1 0'
new_sideset_name = 'hx_top'
input = 'min_radius'
[]
[hx_bot]
type = ParsedGenerateSideset
combinatorial_geometry = 'y <-0.6'
included_subdomains = '3'
included_neighbors = '1'
fixed_normal = true
normal = '0 -1 0'
new_sideset_name = 'hx_bot'
input = 'hx_top'
[]
[]
[Problem]
coord_type = 'RZ'
rz_coord_axis = Y
[]
################################################################################
# EQUATIONS: VARIABLES, KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_x
[]
[v_y]
type = INSFVVelocityVariable
block = 'fuel pump hx'
initial_from_file_var = v_y
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
block = 'fuel pump hx'
initial_from_file_var = lambda
[]
[T]
type = MooseVariableFVReal
block = 'fuel pump hx'
initial_condition = ${T_HX}
# initial_from_file_var = T
[]
[c1]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c1
[]
[c2]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c2
[]
[c3]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c3
[]
[c4]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c4
[]
[c5]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c5
[]
[c6]
type = MooseVariableFVReal
block = 'fuel pump hx'
# initial_from_file_var = c6
[]
[]
[FVICs]
[c1]
type = FVFunctionIC
variable = c1
function = 'cosine_guess'
scaling_factor = 0.02
[]
[c2]
type = FVFunctionIC
variable = c2
function = 'cosine_guess'
scaling_factor = 0.1
[]
[c3]
type = FVFunctionIC
variable = c3
function = 'cosine_guess'
scaling_factor = 0.03
[]
[c4]
type = FVFunctionIC
variable = c4
function = 'cosine_guess'
scaling_factor = 0.04
[]
[c5]
type = FVFunctionIC
variable = c5
function = 'cosine_guess'
scaling_factor = 0.01
[]
[c6]
type = FVFunctionIC
variable = c6
function = 'cosine_guess'
scaling_factor = 0.001
[]
# Power density is re-initalized by a transfer from neutronics
[power]
type = FVFunctionIC
variable = power_density
function = 'cosine_guess'
scaling_factor = '${fparse 3e9/2.81543}'
[]
# Fission source is re-initalized by a transfer from neutronics
[fission_source]
type = FVFunctionIC
variable = fission_source
function = 'cosine_guess'
scaling_factor = '${fparse 6.303329e+01/2.81543}'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[fission_source]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
# For visualization purposes
[eddy_viscosity]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_shear_stress]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[wall_yplus]
type = MooseVariableFVReal
block = 'fuel pump hx'
[]
[]
[Functions]
# Guess to have a 3D power distribution
[cosine_guess]
type = ParsedFunction
value = 'max(0, cos(x*pi/2/1.2))*max(0, cos(y*pi/2/1.1))'
[]
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[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'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[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'
[]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[Materials]
[heat_exchanger_coefficient]
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[]
[FunctorMaterials]
[boussinesq]
type = ADGenericFunctorMaterial
prop_names = 'alpha_b'
prop_values = '${alpha}'
[]
[mu]
type = ADGenericFunctorMaterial
prop_names = 'mu'
prop_values = '${mu}'
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
# [not_used]
# type = ADGenericFunctorMaterial
# prop_names = 'not_used'
# prop_values = 0
# block = 'shield reflector'
# []
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[cp]
type = ADGenericFunctorMaterial
prop_names = 'cp'
prop_values = '${cp}'
block = 'fuel pump hx'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Functions]
[dts]
type = PiecewiseConstant
x = '0 100'
y = '0.75 2.5'
[]
[]
[Executioner]
type = Transient
# Time stepping parameters
start_time = 0.0
end_time = 20
# [TimeStepper]
# # This time stepper makes the time step grow exponentially
# # It can only be used with proper initialization
# type = IterationAdaptiveDT
# dt = 10 # chosen to obtain convergence with first coupled iteration
# growth_factor = 2
# []
[TimeStepper]
type = FunctionDT
function = dts
[]
steady_state_detection = true
steady_state_tolerance = 1e-8
steady_state_start_time = 10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-8
nl_max_its = 15
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
hide = 'flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[restart]
type = Exodus
overwrite = true
[]
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[total_power]
type = ElementIntegralVariablePostprocessor
variable = power_density
block = 'fuel pump hx'
[]
[total_fission_source]
type = ElementIntegralVariablePostprocessor
variable = fission_source
block = 'fuel pump hx'
[]
[]
(msr/msfr/transient/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Transient 3D thermal hydraulics model ##
## Laminar flow, addition of turbulence is WIP ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# This simulation restarts from the steady state multiphysics coupled
# calculation Exodus output for the Pronghorn input. This can be re-generated
# in that folder by running run_neutronics.i with Griffin and Pronghorn
# coupled.
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s], see steady/ reference
k = 1.7 # thermal conductivity [W / m / K]
# Derived material properties
alpha = ${fparse drho_dT / rho} # thermal expansion coefficient
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning
friction = 4e3 # [kg / m^4]
pump_force = -20000 # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = 'v_x'
v = 'v_y'
pressure = 'pressure'
temperature = 'T'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
rhie_chow_user_object = 'rc'
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
coord_type = 'RZ'
[fmg]
type = FileMeshGenerator
file = '../steady/restart/run_ns_coupled_restart.e'
use_for_exodus_restart = true
[]
# If already deleted in the restart exodus, then remove this block
# [inactive]
# type = BlockDeletionGenerator
# input = fmg
# block = 'shield reflector'
# []
[]
################################################################################
# EQUATIONS: VARIABLES & KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
initial_from_file_var = v_x
block = 'fuel pump hx'
[]
[v_y]
type = INSFVVelocityVariable
initial_from_file_var = v_y
block = 'fuel pump hx'
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
initial_from_file_var = lambda
block = 'fuel pump hx'
[]
[T]
type = MooseVariableFVReal
initial_from_file_var = T
block = 'fuel pump hx'
[]
[c1]
type = MooseVariableFVReal
initial_from_file_var = c1
block = 'fuel pump hx'
[]
[c2]
type = MooseVariableFVReal
initial_from_file_var = c2
block = 'fuel pump hx'
[]
[c3]
type = MooseVariableFVReal
initial_from_file_var = c3
block = 'fuel pump hx'
[]
[c4]
type = MooseVariableFVReal
initial_from_file_var = c4
block = 'fuel pump hx'
[]
[c5]
type = MooseVariableFVReal
initial_from_file_var = c5
block = 'fuel pump hx'
[]
[c6]
type = MooseVariableFVReal
initial_from_file_var = c6
block = 'fuel pump hx'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
initial_from_file_var = power_density
[]
[fission_source]
type = MooseVariableFVReal
initial_from_file_var = fission_source
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[v_buoyancy]
type = INSFVMomentumBoussinesq
variable = v_y
T_fluid = T
gravity = '0 -9.81 0'
ref_temperature = 1000
momentum_component = 'y'
block = 'fuel pump hx'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_time]
type = FVTimeKernel
variable = c1
[]
[c2_time]
type = FVTimeKernel
variable = c2
[]
[c3_time]
type = FVTimeKernel
variable = c3
[]
[c4_time]
type = FVTimeKernel
variable = c4
[]
[c5_time]
type = FVTimeKernel
variable = c5
[]
[c6_time]
type = FVTimeKernel
variable = c6
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[AuxKernels]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[FunctorMaterials]
[matprops_former_type] # Yplus kernel not migrated to functor materials
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[functor_mat_properties]
type = ADGenericFunctorMaterial
prop_names = 'cp alpha_b mu'
prop_values = '${cp} ${alpha} ${mu}'
block = 'fuel pump hx'
[]
[]
################################################################################
# PUMP COASTDOWN PARAMETERS
################################################################################
[Functions]
[pump_fun]
type = PiecewiseConstant
xy_data = '0.0 1
4.0 0.5'
direction = 'left'
[]
[]
[Controls]
[pump_control]
type = RealFunctionControl
parameter = 'FVKernels/pump/scaling_factor'
function = 'pump_fun'
execute_on = 'initial timestep_begin'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Executioner]
type = Transient
# Time-stepping parameters
# The time step is imposed by the neutronics app
start_time = 0.0
end_time = 1e10
dt = 1e10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-08
nl_max_its = 20
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
hide = 'max_v flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[max_T]
type = ElementExtremeValue
variable = T
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[power]
type = Receiver
[]
[pump]
type = FunctionValuePostprocessor
function = 'pump_fun'
[]
[]
(msr/msfr/transient/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Transient 3D thermal hydraulics model ##
## Laminar flow, addition of turbulence is WIP ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# This simulation restarts from the steady state multiphysics coupled
# calculation Exodus output for the Pronghorn input. This can be re-generated
# in that folder by running run_neutronics.i with Griffin and Pronghorn
# coupled.
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s], see steady/ reference
k = 1.7 # thermal conductivity [W / m / K]
# Derived material properties
alpha = ${fparse drho_dT / rho} # thermal expansion coefficient
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning
friction = 4e3 # [kg / m^4]
pump_force = -20000 # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = 'v_x'
v = 'v_y'
pressure = 'pressure'
temperature = 'T'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
rhie_chow_user_object = 'rc'
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
coord_type = 'RZ'
[fmg]
type = FileMeshGenerator
file = '../steady/restart/run_ns_coupled_restart.e'
use_for_exodus_restart = true
[]
# If already deleted in the restart exodus, then remove this block
# [inactive]
# type = BlockDeletionGenerator
# input = fmg
# block = 'shield reflector'
# []
[]
################################################################################
# EQUATIONS: VARIABLES & KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
initial_from_file_var = v_x
block = 'fuel pump hx'
[]
[v_y]
type = INSFVVelocityVariable
initial_from_file_var = v_y
block = 'fuel pump hx'
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
initial_from_file_var = lambda
block = 'fuel pump hx'
[]
[T]
type = MooseVariableFVReal
initial_from_file_var = T
block = 'fuel pump hx'
[]
[c1]
type = MooseVariableFVReal
initial_from_file_var = c1
block = 'fuel pump hx'
[]
[c2]
type = MooseVariableFVReal
initial_from_file_var = c2
block = 'fuel pump hx'
[]
[c3]
type = MooseVariableFVReal
initial_from_file_var = c3
block = 'fuel pump hx'
[]
[c4]
type = MooseVariableFVReal
initial_from_file_var = c4
block = 'fuel pump hx'
[]
[c5]
type = MooseVariableFVReal
initial_from_file_var = c5
block = 'fuel pump hx'
[]
[c6]
type = MooseVariableFVReal
initial_from_file_var = c6
block = 'fuel pump hx'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
initial_from_file_var = power_density
[]
[fission_source]
type = MooseVariableFVReal
initial_from_file_var = fission_source
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[v_buoyancy]
type = INSFVMomentumBoussinesq
variable = v_y
T_fluid = T
gravity = '0 -9.81 0'
ref_temperature = 1000
momentum_component = 'y'
block = 'fuel pump hx'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_time]
type = FVTimeKernel
variable = c1
[]
[c2_time]
type = FVTimeKernel
variable = c2
[]
[c3_time]
type = FVTimeKernel
variable = c3
[]
[c4_time]
type = FVTimeKernel
variable = c4
[]
[c5_time]
type = FVTimeKernel
variable = c5
[]
[c6_time]
type = FVTimeKernel
variable = c6
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[AuxKernels]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[FunctorMaterials]
[matprops_former_type] # Yplus kernel not migrated to functor materials
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[functor_mat_properties]
type = ADGenericFunctorMaterial
prop_names = 'cp alpha_b mu'
prop_values = '${cp} ${alpha} ${mu}'
block = 'fuel pump hx'
[]
[]
################################################################################
# PUMP COASTDOWN PARAMETERS
################################################################################
[Functions]
[pump_fun]
type = PiecewiseConstant
xy_data = '0.0 1
4.0 0.5'
direction = 'left'
[]
[]
[Controls]
[pump_control]
type = RealFunctionControl
parameter = 'FVKernels/pump/scaling_factor'
function = 'pump_fun'
execute_on = 'initial timestep_begin'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Executioner]
type = Transient
# Time-stepping parameters
# The time step is imposed by the neutronics app
start_time = 0.0
end_time = 1e10
dt = 1e10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-08
nl_max_its = 20
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
hide = 'max_v flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[max_T]
type = ElementExtremeValue
variable = T
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[power]
type = Receiver
[]
[pump]
type = FunctionValuePostprocessor
function = 'pump_fun'
[]
[]
(msr/msfr/transient/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Transient 3D thermal hydraulics model ##
## Laminar flow, addition of turbulence is WIP ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# This simulation restarts from the steady state multiphysics coupled
# calculation Exodus output for the Pronghorn input. This can be re-generated
# in that folder by running run_neutronics.i with Griffin and Pronghorn
# coupled.
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s], see steady/ reference
k = 1.7 # thermal conductivity [W / m / K]
# Derived material properties
alpha = ${fparse drho_dT / rho} # thermal expansion coefficient
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning
friction = 4e3 # [kg / m^4]
pump_force = -20000 # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = 'v_x'
v = 'v_y'
pressure = 'pressure'
temperature = 'T'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
rhie_chow_user_object = 'rc'
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
coord_type = 'RZ'
[fmg]
type = FileMeshGenerator
file = '../steady/restart/run_ns_coupled_restart.e'
use_for_exodus_restart = true
[]
# If already deleted in the restart exodus, then remove this block
# [inactive]
# type = BlockDeletionGenerator
# input = fmg
# block = 'shield reflector'
# []
[]
################################################################################
# EQUATIONS: VARIABLES & KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
initial_from_file_var = v_x
block = 'fuel pump hx'
[]
[v_y]
type = INSFVVelocityVariable
initial_from_file_var = v_y
block = 'fuel pump hx'
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
initial_from_file_var = lambda
block = 'fuel pump hx'
[]
[T]
type = MooseVariableFVReal
initial_from_file_var = T
block = 'fuel pump hx'
[]
[c1]
type = MooseVariableFVReal
initial_from_file_var = c1
block = 'fuel pump hx'
[]
[c2]
type = MooseVariableFVReal
initial_from_file_var = c2
block = 'fuel pump hx'
[]
[c3]
type = MooseVariableFVReal
initial_from_file_var = c3
block = 'fuel pump hx'
[]
[c4]
type = MooseVariableFVReal
initial_from_file_var = c4
block = 'fuel pump hx'
[]
[c5]
type = MooseVariableFVReal
initial_from_file_var = c5
block = 'fuel pump hx'
[]
[c6]
type = MooseVariableFVReal
initial_from_file_var = c6
block = 'fuel pump hx'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
initial_from_file_var = power_density
[]
[fission_source]
type = MooseVariableFVReal
initial_from_file_var = fission_source
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[v_buoyancy]
type = INSFVMomentumBoussinesq
variable = v_y
T_fluid = T
gravity = '0 -9.81 0'
ref_temperature = 1000
momentum_component = 'y'
block = 'fuel pump hx'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_time]
type = FVTimeKernel
variable = c1
[]
[c2_time]
type = FVTimeKernel
variable = c2
[]
[c3_time]
type = FVTimeKernel
variable = c3
[]
[c4_time]
type = FVTimeKernel
variable = c4
[]
[c5_time]
type = FVTimeKernel
variable = c5
[]
[c6_time]
type = FVTimeKernel
variable = c6
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[AuxKernels]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[FunctorMaterials]
[matprops_former_type] # Yplus kernel not migrated to functor materials
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[functor_mat_properties]
type = ADGenericFunctorMaterial
prop_names = 'cp alpha_b mu'
prop_values = '${cp} ${alpha} ${mu}'
block = 'fuel pump hx'
[]
[]
################################################################################
# PUMP COASTDOWN PARAMETERS
################################################################################
[Functions]
[pump_fun]
type = PiecewiseConstant
xy_data = '0.0 1
4.0 0.5'
direction = 'left'
[]
[]
[Controls]
[pump_control]
type = RealFunctionControl
parameter = 'FVKernels/pump/scaling_factor'
function = 'pump_fun'
execute_on = 'initial timestep_begin'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Executioner]
type = Transient
# Time-stepping parameters
# The time step is imposed by the neutronics app
start_time = 0.0
end_time = 1e10
dt = 1e10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-08
nl_max_its = 20
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
hide = 'max_v flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[max_T]
type = ElementExtremeValue
variable = T
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[power]
type = Receiver
[]
[pump]
type = FunctionValuePostprocessor
function = 'pump_fun'
[]
[]
(msr/msfr/transient/legacy/run_ns.i)
################################################################################
## Molten Salt Fast Reactor - Euratom EVOL + Rosatom MARS Design ##
## Pronghorn Sub-Application input file ##
## Transient 3D thermal hydraulics model ##
## Laminar flow, addition of turbulence is WIP ##
################################################################################
# If using or referring to this model, please cite as explained in
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
## WARNING
# This input is present for documentation purposes. It is not actively
# maintained and should not be used under any circumstance.
## WARNING
# This simulation restarts from the steady state multiphysics coupled
# calculation Exodus output for the Pronghorn input. This can be re-generated
# in that folder by running run_neutronics.i with Griffin and Pronghorn
# coupled.
# Material properties
rho = 4284 # density [kg / m^3] (@1000K)
cp = 1594 # specific heat capacity [J / kg / K]
drho_dT = 0.882 # derivative of density w.r.t. temperature [kg / m^3 / K]
mu = 0.0166 # viscosity [Pa s], see steady/ reference
k = 1.7 # thermal conductivity [W / m / K]
# Derived material properties
alpha = ${fparse drho_dT / rho} # thermal expansion coefficient
# Turbulent properties
Pr_t = 10 # turbulent Prandtl number
Sc_t = 1 # turbulent Schmidt number
# Operating parameters
T_HX = 873.15 # heat exchanger temperature [K]
# Mass flow rate tuning
friction = 4e3 # [kg / m^4]
pump_force = -20000 # [N / m^3]
# Delayed neutron precursor parameters. Lambda values are decay constants in
# [1 / s]. Beta values are production fractions.
lambda1 = 0.0133104
lambda2 = 0.0305427
lambda3 = 0.115179
lambda4 = 0.301152
lambda5 = 0.879376
lambda6 = 2.91303
beta1 = 8.42817e-05
beta2 = 0.000684616
beta3 = 0.000479796
beta4 = 0.00103883
beta5 = 0.000549185
beta6 = 0.000184087
[GlobalParams]
u = 'v_x'
v = 'v_y'
pressure = 'pressure'
temperature = 'T'
advected_interp_method = 'upwind'
velocity_interp_method = 'rc'
mu = 'mu'
rho = ${rho}
mixing_length = 'mixing_len'
rhie_chow_user_object = 'rc'
[]
[UserObjects]
[rc]
type = INSFVRhieChowInterpolator
block = 'fuel pump hx'
[]
[]
################################################################################
# GEOMETRY
################################################################################
[Mesh]
coord_type = 'RZ'
[fmg]
type = FileMeshGenerator
file = '../steady/restart/run_ns_coupled_restart.e'
use_for_exodus_restart = true
[]
# If already deleted in the restart exodus, then remove this block
# [inactive]
# type = BlockDeletionGenerator
# input = fmg
# block = 'shield reflector'
# []
[]
################################################################################
# EQUATIONS: VARIABLES & KERNELS
################################################################################
[Variables]
[v_x]
type = INSFVVelocityVariable
initial_from_file_var = v_x
block = 'fuel pump hx'
[]
[v_y]
type = INSFVVelocityVariable
initial_from_file_var = v_y
block = 'fuel pump hx'
[]
[pressure]
type = INSFVPressureVariable
block = 'fuel pump hx'
initial_from_file_var = pressure
[]
[lambda]
family = SCALAR
order = FIRST
initial_from_file_var = lambda
block = 'fuel pump hx'
[]
[T]
type = MooseVariableFVReal
initial_from_file_var = T
block = 'fuel pump hx'
[]
[c1]
type = MooseVariableFVReal
initial_from_file_var = c1
block = 'fuel pump hx'
[]
[c2]
type = MooseVariableFVReal
initial_from_file_var = c2
block = 'fuel pump hx'
[]
[c3]
type = MooseVariableFVReal
initial_from_file_var = c3
block = 'fuel pump hx'
[]
[c4]
type = MooseVariableFVReal
initial_from_file_var = c4
block = 'fuel pump hx'
[]
[c5]
type = MooseVariableFVReal
initial_from_file_var = c5
block = 'fuel pump hx'
[]
[c6]
type = MooseVariableFVReal
initial_from_file_var = c6
block = 'fuel pump hx'
[]
[]
[AuxVariables]
[mixing_len]
type = MooseVariableFVReal
initial_from_file_var = mixing_len
block = 'fuel pump hx'
[]
[power_density]
type = MooseVariableFVReal
initial_from_file_var = power_density
[]
[fission_source]
type = MooseVariableFVReal
initial_from_file_var = fission_source
[]
[]
[FVKernels]
[mass]
type = INSFVMassAdvection
variable = pressure
block = 'fuel pump hx'
[]
[mean_zero_pressure]
type = FVScalarLagrangeMultiplier
variable = pressure
lambda = lambda
block = 'fuel pump hx'
[]
[u_time]
type = INSFVMomentumTimeDerivative
variable = v_x
momentum_component = 'x'
[]
[u_advection]
type = INSFVMomentumAdvection
variable = v_x
block = 'fuel pump hx'
momentum_component = 'x'
[]
[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'
[]
[u_pressure]
type = INSFVMomentumPressure
variable = v_x
momentum_component = 'x'
block = 'fuel pump hx'
[]
[v_time]
type = INSFVMomentumTimeDerivative
variable = v_y
momentum_component = 'y'
[]
[v_advection]
type = INSFVMomentumAdvection
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_turbulent_diffusion_rans]
type = INSFVMixingLengthReynoldsStress
variable = v_y
momentum_component = 'y'
[]
[v_molecular_diffusion]
type = INSFVMomentumDiffusion
variable = v_y
block = 'fuel pump hx'
momentum_component = 'y'
[]
[v_pressure]
type = INSFVMomentumPressure
variable = v_y
momentum_component = 'y'
block = 'fuel pump hx'
[]
[v_buoyancy]
type = INSFVMomentumBoussinesq
variable = v_y
T_fluid = T
gravity = '0 -9.81 0'
ref_temperature = 1000
momentum_component = 'y'
block = 'fuel pump hx'
[]
[v_gravity]
type = INSFVMomentumGravity
variable = v_y
gravity = '0 -9.81 0'
block = 'fuel pump hx'
momentum_component = 'y'
[]
[pump]
type = INSFVBodyForce
variable = v_y
functor = ${pump_force}
block = 'pump'
momentum_component = 'y'
[]
[friction_hx_x]
type = INSFVMomentumFriction
variable = v_x
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'x'
[]
[friction_hx_y]
type = INSFVMomentumFriction
variable = v_y
quadratic_coef_name = 'friction_coef'
block = 'hx'
momentum_component = 'y'
[]
[heat_time]
type = INSFVEnergyTimeDerivative
variable = T
cp_name = 'cp'
[]
[heat_advection]
type = INSFVEnergyAdvection
variable = T
block = 'fuel pump hx'
[]
[heat_diffusion]
type = FVDiffusion
coeff = '${k}'
variable = T
block = 'fuel pump hx'
[]
[heat_turb_diffusion]
type = WCNSFVMixingLengthEnergyDiffusion
schmidt_number = ${Pr_t}
variable = T
block = 'fuel pump hx'
cp = 'cp'
[]
[heat_src]
type = FVCoupledForce
variable = T
v = power_density
block = 'fuel pump hx'
[]
[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}
[]
[c1_time]
type = FVTimeKernel
variable = c1
[]
[c2_time]
type = FVTimeKernel
variable = c2
[]
[c3_time]
type = FVTimeKernel
variable = c3
[]
[c4_time]
type = FVTimeKernel
variable = c4
[]
[c5_time]
type = FVTimeKernel
variable = c5
[]
[c6_time]
type = FVTimeKernel
variable = c6
[]
[c1_advection]
type = INSFVScalarFieldAdvection
variable = c1
block = 'fuel pump hx'
[]
[c2_advection]
type = INSFVScalarFieldAdvection
variable = c2
block = 'fuel pump hx'
[]
[c3_advection]
type = INSFVScalarFieldAdvection
variable = c3
block = 'fuel pump hx'
[]
[c4_advection]
type = INSFVScalarFieldAdvection
variable = c4
block = 'fuel pump hx'
[]
[c5_advection]
type = INSFVScalarFieldAdvection
variable = c5
block = 'fuel pump hx'
[]
[c6_advection]
type = INSFVScalarFieldAdvection
variable = c6
block = 'fuel pump hx'
[]
[c1_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c1
block = 'fuel pump hx'
[]
[c2_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c2
block = 'fuel pump hx'
[]
[c3_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c3
block = 'fuel pump hx'
[]
[c4_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c4
block = 'fuel pump hx'
[]
[c5_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c5
block = 'fuel pump hx'
[]
[c6_turb_diffusion]
type = INSFVMixingLengthScalarDiffusion
schmidt_number = ${Sc_t}
variable = c6
block = 'fuel pump hx'
[]
[c1_src]
type = FVCoupledForce
variable = c1
v = fission_source
coef = ${beta1}
block = 'fuel pump hx'
[]
[c2_src]
type = FVCoupledForce
variable = c2
v = fission_source
coef = ${beta2}
block = 'fuel pump hx'
[]
[c3_src]
type = FVCoupledForce
variable = c3
v = fission_source
coef = ${beta3}
block = 'fuel pump hx'
[]
[c4_src]
type = FVCoupledForce
variable = c4
v = fission_source
coef = ${beta4}
block = 'fuel pump hx'
[]
[c5_src]
type = FVCoupledForce
variable = c5
v = fission_source
coef = ${beta5}
block = 'fuel pump hx'
[]
[c6_src]
type = FVCoupledForce
variable = c6
v = fission_source
coef = ${beta6}
block = 'fuel pump hx'
[]
[c1_decay]
type = FVReaction
variable = c1
rate = ${lambda1}
block = 'fuel pump hx'
[]
[c2_decay]
type = FVReaction
variable = c2
rate = ${lambda2}
block = 'fuel pump hx'
[]
[c3_decay]
type = FVReaction
variable = c3
rate = ${lambda3}
block = 'fuel pump hx'
[]
[c4_decay]
type = FVReaction
variable = c4
rate = ${lambda4}
block = 'fuel pump hx'
[]
[c5_decay]
type = FVReaction
variable = c5
rate = ${lambda5}
block = 'fuel pump hx'
[]
[c6_decay]
type = FVReaction
variable = c6
rate = ${lambda6}
block = 'fuel pump hx'
[]
[]
[AuxKernels]
[]
################################################################################
# BOUNDARY CONDITIONS
################################################################################
[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
[]
[]
################################################################################
# MATERIALS
################################################################################
[FunctorMaterials]
[matprops_former_type] # Yplus kernel not migrated to functor materials
type = ADGenericFunctionMaterial
prop_names = 'alpha'
prop_values = '${fparse 600 * 20e3}'
block = 'fuel pump hx'
[]
[ins_fv]
type = INSFVEnthalpyFunctorMaterial
block = 'fuel pump hx'
[]
[total_viscosity]
type = MixingLengthTurbulentViscosityFunctorMaterial
mu = 'mu'
block = 'fuel pump hx'
[]
[friction]
type = ADGenericFunctorMaterial
prop_names = 'friction_coef'
prop_values = '${friction} '
block = 'hx'
[]
[functor_mat_properties]
type = ADGenericFunctorMaterial
prop_names = 'cp alpha_b mu'
prop_values = '${cp} ${alpha} ${mu}'
block = 'fuel pump hx'
[]
[]
################################################################################
# PUMP COASTDOWN PARAMETERS
################################################################################
[Functions]
[pump_fun]
type = PiecewiseConstant
xy_data = '0.0 1
4.0 0.5'
direction = 'left'
[]
[]
[Controls]
[pump_control]
type = RealFunctionControl
parameter = 'FVKernels/pump/scaling_factor'
function = 'pump_fun'
execute_on = 'initial timestep_begin'
[]
[]
################################################################################
# EXECUTION / SOLVE
################################################################################
[Executioner]
type = Transient
# Time-stepping parameters
# The time step is imposed by the neutronics app
start_time = 0.0
end_time = 1e10
dt = 1e10
# Solver parameters
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -pc_factor_shift_type -ksp_gmres_restart'
petsc_options_value = 'lu NONZERO 50'
line_search = 'none'
nl_rel_tol = 1e-9
nl_abs_tol = 2e-08
nl_max_its = 20
l_max_its = 50
automatic_scaling = true
resid_vs_jac_scaling_param = 1
[]
################################################################################
# SIMULATION OUTPUTS
################################################################################
[Outputs]
exodus = true
csv = true
# Reduce base output
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
hide = 'max_v flow_hx_bot flow_hx_top min_flow_T max_flow_T'
[]
[Postprocessors]
[max_v]
type = ElementExtremeValue
variable = v_x
value_type = max
block = 'fuel pump hx'
[]
[max_T]
type = ElementExtremeValue
variable = T
value_type = max
block = 'fuel pump hx'
[]
[mdot]
type = InternalVolumetricFlowRate
boundary = 'min_core_radius'
vel_x = v_x
vel_y = v_y
advected_mat_prop = ${rho}
[]
# TODO: weakly compressible, switch to mass flow rate
[flow_hx_bot]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
[]
[flow_hx_top]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
[]
[max_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_top'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[min_flow_T]
type = InternalVolumetricFlowRate
boundary = 'hx_bot'
vel_x = v_x
vel_y = v_y
advected_variable = 'T'
[]
[dT]
type = ParsedPostprocessor
function = '-max_flow_T / flow_hx_bot + min_flow_T / flow_hx_top'
pp_names = 'max_flow_T min_flow_T flow_hx_bot flow_hx_top'
[]
[power]
type = Receiver
[]
[pump]
type = FunctionValuePostprocessor
function = 'pump_fun'
[]
[]