Thermal Fluid and Thermal Conduction Model
Thermal Fluids Model
The thermal-hydraulics model for Pronghorn is based on ongoing NEAMS work (Schunert et al., 2022) (Schunert et al., 2021) with some additional improvements. The Pronghorn model uses the weakly compressible finite volume formulation for discretizing the fluid mass, fluid momentum, fluid energy, and solid energy conservation equations. The model includes a riser and bypass flow channels, and the fueling chute as an open flow region.
The cold fluid from the circulators enters the core via the vertical risers in the reflector region. The flow then enters the cold plenum, where the flow is diverted into the cavity, upper reflector, and control and shutdown system bypass channels. From the upper cavity, the fluid enters the active core region, then the lower reflector, and finally the outlet plenum.
The radiative heat transfer at the outer boundary of the reactor vessel has a small impact on steady-state calculations and a larger impact during the loss of forced cooling (DLOFC) transients. Also, during the loss of flow transient, fluid inflow and outflow boundary conditions are not changed to wall boundary conditions, which leads to a significant change in the helium leaving the core due to thermal expansion, which tends to increase temperature estimates.
The model for the thermal fluid calculations can be found in this input. A depiction of the geometry and materials in the Pronghorn thermal-hydraulic model and the fluid flow path is shown in Figure 1.

Figure 1: Depiction of the geometry and masterials in the Pronghorn thermal-hydraulic model including the fluid flow path.
The boundary condition for the Pronghorn model of the HTR-PM include: * Inlet helium flow rate of 96.0 kg/s. * The inlet fluid temperature is set to 523.15 K. * The outlet fluid pressure is set to Pa. * Inlet velocity, outlet pressure, slip-wall, and symmetry boundary conditions are used for the fluid mass, momentum, and energy equations. * All walls are assumed to be adiabatic for the fluid energy equation, and conjugate heat transfer is treated as a volumetric phenomenon. * The solid energy equations have adiabatic boundary conditions except for the outside of the pressure vessel * Radiative and convective boundary conditions were applied between the pressure vessel and isothermal cylindrical reactor cavity cooling system (RCCS) panel with an inner diameter of 4 m, a temperature of K, a heat transfer coefficient of 5 W/m.K, and a surface emissivities are assumed to be 0.8.
The model input starts by defining geometric parameters for the problem. Then, global parameters are defined in [GlobalParams] and the mesh is defined in the [Mesh] block
[GlobalParams]
acceleration = '0.0 -9.81 0.0' # Gravity acceleration (m/s2).
fp = fluid_properties_obj
porosity = 'porosity'
pebble_diameter = ${pebble_diameter}
T_solid = T_solid
rhie_chow_user_object = pins_rhie_chow_interpolator
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)[Mesh]
type = MeshGeneratorMesh
block_id = '1 2 3 4 5 6 7 8 10 12 61 71 9 11'
block_name = 'pebble_bed
top_reflector
bottom_reflector
top_cavity
hot_plenum
cold_plenum
side_reflector
carbon_brick
core_barrel
rpv
riser
bypass
refl_barrel_gap
barrel_rpv_gap'
uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050
0.130
0.080 0.080 0.080 0.200 0.120 0.010 0.240
0.150 0.040 0.160 0.150 '
ix = ' 1 1 1 1 1 1
1 1
1
1 1 1 2 1 1 1
1 1 1 1 '
dy = ' 0.400 0.400 0.100 0.100
0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300
0.400 0.400 '
iy = ' 1 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1
1 1 '
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8 9 10 11 12
6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12 '
[]
# Side sets for gap conductance model.
[reflector_barrel_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 8
paired_block = 9
input = cartesian_mesh
new_boundary = reflector_barrel_gap_inner
[]
[reflector_barrel_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 9
input = reflector_barrel_gap_inner
new_boundary = reflector_barrel_gap_outer
[]
[barrel_rpv_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 11
input = reflector_barrel_gap_outer
new_boundary = barrel_rpv_gap_inner
[]
[barrel_rpv_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 12
paired_block = 11
input = barrel_rpv_gap_inner
new_boundary = barrel_rpv_gap_outer
[]
# Side sets for inflow and outflow conditions.
[reactor_inlet]
type = ParsedGenerateSideset
included_subdomains = '61'
combinatorial_geometry = 'abs(y-1) < 1e-3'
fixed_normal = true
normal = '0 -1 0'
input = barrel_rpv_gap_outer
new_sideset_name = reactor_inlet
[]
[reactor_outlet]
type = SideSetsAroundSubdomainGenerator
block = '5'
fixed_normal = true
normal = '1 0 0'
input = reactor_inlet
new_boundary = reactor_outlet
[]
[riser_walls]
type = ParsedGenerateSideset
included_subdomains = '61'
included_neighbors = '7'
combinatorial_geometry = 'y > 1 + 1e-3'
input = reactor_outlet
new_sideset_name = riser_walls
[]
# Side sets for wall boundaries.
[cold_plenum_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '6'
paired_block = '7'
input = riser_walls
new_boundary = cold_plenum_walls
[]
[hot_plenum_walls]
type = ParsedGenerateSideset
included_subdomains = 5
included_neighbors = 7
combinatorial_geometry = 'x < 1.69'
input = cold_plenum_walls
new_sideset_name = hot_plenum_walls
[]
[bypass_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '7'
input = hot_plenum_walls
new_boundary = 'bypass_wall'
[]
[pbed_inner]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4 5 6'
combinatorial_geometry = '( abs(x - 0.000) < ${geometric_tolerance} &
y > ${fparse 1.000 - geometric_tolerance} &
y < ${fparse 16.00 + geometric_tolerance} )'
input = bypass_walls
new_sideset_name = pbed_inner
[]
[pbed_outer]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4'
combinatorial_geometry = '( abs(x - ${pbed_r}) < ${geometric_tolerance} &
y > ${fparse 1.800 - geometric_tolerance} &
y < ${fparse 15.70 + geometric_tolerance} ) '
input = pbed_inner
new_sideset_name = pbed_outer
[]
[bypass_hot_plenum_interface]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '5'
new_boundary = 'bypass_hot_plenum_interface'
input = pbed_outer
[]
coord_type = RZ
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)The definition of the pronghorn Navier-Stokes equation for the solution of the weakly-compressible fluid, and the properties of the fluid go into Physics block.
[Physics]
[NavierStokes]
[Flow]
[all]
# basic settings
block = ${fluid_blocks}
compressibility = 'weakly-compressible'
gravity = '0.0 -9.81 0.0'
# Porous treatement
porous_medium_treatment = true
friction_types = 'darcy forchheimer'
friction_coeffs = 'Darcy_coefficient Forchheimer_coefficient'
consistent_scaling = ${scaling}
porosity_smoothing_layers = 0
use_friction_correction = true
# fluid properties
density = 'rho'
dynamic_viscosity = 'mu'
# initial conditions
initial_velocity = '1e-6 1e-6 0'
initial_pressure = '${p_outlet}'
# boundary conditions
inlet_boundaries = 'reactor_inlet'
momentum_inlet_types = 'flux-mass'
flux_inlet_pps = 'set_inlet_mfr'
flux_inlet_directions = '0 1 0'
outlet_boundaries = 'reactor_outlet'
momentum_outlet_types = 'fixed-pressure'
pressure_functors = '${p_outlet}'
wall_boundaries = 'pbed_inner pbed_outer hot_plenum_walls cold_plenum_walls riser_walls bypass_wall'
momentum_wall_types = 'symmetry slip slip slip slip slip'
# numerical scheme
pressure_face_interpolation = average
momentum_advection_interpolation = upwind
mass_advection_interpolation = upwind
# prevents solution jump on future restarts
time_derivative_contributes_to_RC_coefficients = false
[]
[]
[FluidHeatTransfer]
[all]
block = ${fluid_blocks}
# numerical scheme
energy_advection_interpolation = upwind
system_names = 'nl0'
# convective heat transfer
ambient_convection_blocks = '1 2 3 5 6 61 71'
ambient_convection_alpha = 'alpha'
ambient_temperature = 'T_solid'
# fluid properties
thermal_conductivity = 'kappa'
specific_heat = 'cp'
# initial conditions
initial_temperature = '${T_inlet}'
# boundary conditions
# see Flow physics for list of boundaries
energy_inlet_types = 'flux-mass'
energy_inlet_functors = '${T_inlet}'
energy_wall_types = 'heatflux heatflux heatflux heatflux heatflux heatflux'
energy_wall_functors = '0 0 0 0 0 0'
[]
[]
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)Material properties are defined in the [Materials] block
[Materials]
## natural htc for BC
[natural_htc_mat]
type = ADGenericConstantMaterial
prop_names = 'natural_htc'
prop_values = '5'
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)The characteristics of the execution of the problem are defined in [Executioner] block
[Executioner]
type = Transient
# solver parameters
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart -pc_factor_shift_type -mat_mumps_icntl_20'
petsc_options_value = 'lu mumps 100 NONZERO 0'
automatic_scaling = true
nl_abs_tol = 1e-5
line_search = l2
nl_max_its = 50
# time stepping
end_time = 1e6
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
optimal_iterations = 9
iteration_window = 2
growth_factor = 2
cutback_factor = 0.5
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)And control of output is defined in [Outputs] block
[Outputs]
csv = true
exodus = true
checkpoint = true
[console]
type = Console
hide = 'area_pp_reactor_inlet set_inlet_mfr'
[]
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)Pebble Conduction Model:
The pebble heat conduction model solves the 1D spherical conduction problem assuming a thermal equilibrium approximation in pebble simulations during transient calculations. Several sources of heat transfer nonuniformity around the pebble were ignored: the coolant flow orientation, pebble-to-pebble contact, pebble-to-reflector contact, and radiation. A Dirichlet boundary condition is set at the TRISO surface to obtain the fuel temperature, and a Neumann boundary condition would improve energy conservation.
The model of the pebble conduction is found in /htgr/htr-pm-2/pebble_triso.i. The model set up is visually depicted in Figure 2.

Figure 2: Depiction of the pebble conduction model.
In this model, the mesh is defined as follows
[Mesh]
block_id = '1 2 3 4 5 6 7'
block_name = 'core
shell
kernel
buffer
ipyc
sic
opyc'
dim = 1
[pebble_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-02 5.00e-03'
ix = '15 3'
subdomain_id = '1 2'
[]
[triso_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-04 9.00e-05 4.00e-05 3.50e-05 4.00e-05'
ix = '21 8 3 3 3'
subdomain_id = '3 4 5 6 7'
[]
[mesh_combine]
type = CombinerGenerator
inputs = 'pebble_mesh triso_mesh'
[]
[pebble_surface]
type = SideSetsAroundSubdomainGenerator
block = '2'
fixed_normal = 1
normal = '1 0 0'
input = mesh_combine
new_boundary = pebble_surface
[]
[triso_surface]
type = SideSetsAroundSubdomainGenerator
block = '7'
fixed_normal = 1
normal = '1 0 0'
input = pebble_surface
new_boundary = triso_surface
[]
coord_type = 'RSPHERICAL'
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)The model also defines pebble and TRISO temperatures as follows
[Variables]
[T_pebble]
block = '1 2'
# initial_condition = ${initial_temperature}
[]
[T_triso]
block = '3 4 5 6 7'
# initial_condition = ${initial_temperature}
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)Materials are defined in [Materials] block
[Materials]
[pebble_core]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = pebble_core
block = '1'
[]
[pebble_shell]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = gmatrix
block = '2'
[]
# TRISO.
[kernel]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = kernel
block = '3'
[]
[buffer]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = buffer
block = '4'
[]
[ipyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = ipyc
block = '5'
[]
[sic]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = sic
block = '6'
[]
[opyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = opyc
block = '7'
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)materials thermal conductivity and burnup are defined in [Functions] block:
[Functions]
[uo2_k]
type = ParsedFunction
expression = 'if(bnp < 1e-10, (115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000))),
(115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000)))*
(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp))*atan(1./(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp)))*
(1+0.019*bnp/(3.-0.019*bnp)*(1.+exp(-(t-1200)/100))^(-1))*
(1.-0.2/(1+exp((t-900.)/80.))) )'
symbol_names = 'bnp'
symbol_values = 'fima'
[]
[buffer_k]
type = ParsedFunction
expression = 244.3/2*t^(-0.574)*(970/(2.2*(1930.-970)+970))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[pyc_k]
type = ParsedFunction
expression = 244.3*t^(-0.574)*(1900/(2.2*(1930.-1900)+1900))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[sic_k]
type = ParsedFunction
expression = (17885/t+2.)*exp(-0.1277*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[gmatrix_k]
type = ParsedFunction
expression = 47.4*(1-9.7556E-4*(t-373.15)*exp(-6.036E-4*(t-273.15)))*(1740/(2.2*(1700.-1740)+1740))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[fluence]
type = ParsedFunction
expression = 7.41611E-06*bnp*bnp*bnp-5.36979E-06*bnp*bnp+1.37527E-02*bnp-4.48921E-02
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[fima]
type = ParsedFunction
expression = -2.022642E-06*bnp*bnp+1.053601E-03*bnp
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)These properties are linked to a type of object in the [UserObject] block as follows
[UserObjects]
[kernel]
type = FunctionSolidProperties
k_s = uo2_k
[]
[buffer]
type = FunctionSolidProperties
k_s = buffer_k
[]
[ipyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[sic]
type = FunctionSolidProperties
k_s = sic_k
[]
[opyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[gmatrix]
type = FunctionSolidProperties
k_s = gmatrix_k
[]
# Mixtures.
[triso]
type = CompositeSolidProperties
materials = 'kernel buffer ipyc sic opyc'
fractions = '0.1659 0.2514 0.1653 0.1762 0.2412' # volume fractions.
k_mixing = 'series'
[]
[pebble_core]
type = CompositeSolidProperties
materials = 'triso gmatrix'
fractions = '0.090484107 0.909515893' # volume fractions.
k_mixing = 'chiew'
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)The boundary conditions are applied in the [BCs] block
[BCs]
[pebble_surface_temp]
type = PostprocessorDirichletBC
variable = T_pebble
postprocessor = T_surface
boundary = 'pebble_surface'
[]
[triso_surface_temp]
type = PostprocessorDirichletBC
variable = T_triso
postprocessor = pebble_core_average_temp
boundary = 'triso_surface'
[]
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)Finally, the characteristics of the execution process are provided in
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = 'l2'
# Linear/nonlinear iterations.
nl_abs_tol = 1e-8
[](htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)References
- Sebastian Schunert, Guillaume Louis Giudicelli, Alexander D Lindsay, Paolo Balestra, Sterling Harper, Ramiro Freile, Mauricio Tano, and Jean Ragusa.
Deployment of the finite volume method in pronghorn for gas and salt cooled pebble bed reactors.
Technical Report, Idaho National Laboratory (INL), Idaho Falls, ID (United States), 2021.[Export]
BibTeX
@techreport{schunert2021deployment, author = "Schunert, Sebastian and Giudicelli, Guillaume Louis and Lindsay, Alexander D and Balestra, Paolo and Harper, Sterling and Freile, Ramiro and Tano, Mauricio and Ragusa, Jean", title = "Deployment of the Finite Volume Method in Pronghorn for Gas and Salt cooled Pebble Bed Reactors", year = "2021", institution = "Idaho National Laboratory (INL), Idaho Falls, ID (United States)" }RIS
TY - RPRT AU - Schunert, Sebastian AU - Giudicelli, Guillaume Louis AU - Lindsay, Alexander D AU - Balestra, Paolo AU - Harper, Sterling AU - Freile, Ramiro AU - Tano, Mauricio AU - Ragusa, Jean TI - Deployment of the Finite Volume Method in Pronghorn for Gas and Salt cooled Pebble Bed Reactors PY - 2021 ER -Plain Text
Sebastian Schunert, Guillaume Louis Giudicelli, Alexander D Lindsay, Paolo Balestra, Sterling Harper, Ramiro Freile, Mauricio Tano, and Jean Ragusa. Deployment of the finite volume method in pronghorn for gas and salt cooled pebble bed reactors. Technical Report, Idaho National Laboratory (INL), Idaho Falls, ID (United States), 2021. - Sebastian Schunert, Mustafa Kamel Mohammad Jaradat, Olin W Calvin, Guillaume Louis Giudicelli, Alexander D Lindsay, Yaqi Wang, Mauricio Eduardo Tano Retamales, and Samuel Austin Walker.
Improvements in high temperature gas cooled reactor modeling capabilities in the pronghorn code.
Technical Report, Idaho National Laboratory (INL), Idaho Falls, ID (United States), 2022.[Export]
BibTeX
@techreport{schunert2022improvements, author = "Schunert, Sebastian and Mohammad Jaradat, Mustafa Kamel and Calvin, Olin W and Giudicelli, Guillaume Louis and Lindsay, Alexander D and Wang, Yaqi and Tano Retamales, Mauricio Eduardo and Walker, Samuel Austin", title = "Improvements in High Temperature Gas Cooled Reactor Modeling Capabilities in the Pronghorn Code", year = "2022", institution = "Idaho National Laboratory (INL), Idaho Falls, ID (United States)" }RIS
TY - RPRT AU - Schunert, Sebastian AU - Mohammad Jaradat, Mustafa Kamel AU - Calvin, Olin W AU - Giudicelli, Guillaume Louis AU - Lindsay, Alexander D AU - Wang, Yaqi AU - Tano Retamales, Mauricio Eduardo AU - Walker, Samuel Austin TI - Improvements in High Temperature Gas Cooled Reactor Modeling Capabilities in the Pronghorn Code PY - 2022 ER -Plain Text
Sebastian Schunert, Mustafa Kamel Mohammad Jaradat, Olin W Calvin, Guillaume Louis Giudicelli, Alexander D Lindsay, Yaqi Wang, Mauricio Eduardo Tano Retamales, and Samuel Austin Walker. Improvements in high temperature gas cooled reactor modeling capabilities in the pronghorn code. Technical Report, Idaho National Laboratory (INL), Idaho Falls, ID (United States), 2022.
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)
# ==============================================================================
# Model description
# ------------------------------------------------------------------------------
# Steady state HTR-PM model
# Created & modifed by Sebastian Schunert, Mustafa Jaradat, April 11, 2023
# Updated by Guillaume Giudicelli, June 15th 2026
# ==============================================================================
# - htr-pm-FV: reference plant design based on 250MW HTR-PM plant.
# - FV using the new FV action
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
# Geometry ---------------------------------------------------------------------
pebble_diameter = 0.06 # Diameter of the pebbles (m).
geometric_tolerance = 1e-3 # Geometric tolerance to generate the side-sets (m).
pbed_top = 14.228 # TAF (m).
pbed_bottom = 3.228 # Bottom of bed (m).
pbed_r = 1.500 # Pebble Bed radius (m).
# Hydraulic diameter -----------------------------------------------------------
D_H_bypass = 0.15 # Hydraulic diameter of bypass
D_H_riser = 0.1875 # Hydraulic diameter of riser
D_H_top_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_bottom_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_top_cavity = 0.67 # Hydraulic diameter of the top cavity
# Properties -------------------------------------------------------------------
global_emissivity = 0.80 # All the materials have the same emissivity (//).
pebble_bed_porosity = 0.39 # Pebble bed porosity (//).
fluid_channels_porosity = 0.20 # 20% is assumed in regions where the He flows in graphite areas (//).
bypass_channel_porosity = 0.32 # Porosity in the bypass channel (see engineering calc in spreadsheet)
riser_porosity = 0.32 # Porosity in the riser channel (see engineering calc in spreadsheet)
top_reflector_porosity = 0.3 # Porosity of the top reflector
bottom_reflector_porosity = 0.3 # Porosity of the bottom reflector
# Operating conditions ---------------------------------------------------------
mfr = 96.0 # Total reactor He mass flow rate (kg/s).
T_inlet = 523.15 # Helium inlet temperature (K).
p_outlet = 7.0e+6 # Reactor outlet pressure (Pa)
T_exterior = 300.0 # External temperature (K)
reference_power = 250e6 # Reference power (W)
# Heat transfer area per volume ------------------------------------------------
C_DB = 0.023 # original Dittus Boelter constant for areal htc; modified by ApV
ApV_bypass = 8.521 # heat transfer area per volume bypass
ApV_riser = 6.927 # heat transfer area per volume riser
ApV_top_reflector = 5.737 # heat transfer area per volume top reflector
ApV_bottom_reflector = 5.737 # heat transfer area per volume bottom reflector
# volumetric heat transfer coefficient between solid
# fluid and solid in the fluid/solid regions except the
# bed; currently applied in top_reflector bottom_reflector hot_plenum cold_plenum
# TODO: use correlations here
alpha_fluid_solid = 5e3
## block definitions
# fluid blocks define fluid vars and solve for them
fluid_blocks = '1 2 3 4 5 6 61 71'
# solid blocks define T_solid and solve for it
solid_blocks = '1 2 3 5 6 7 8 10 12 61 71 9 11'
# friction scaling
scaling = 1 #0.05
[GlobalParams]
acceleration = '0.0 -9.81 0.0' # Gravity acceleration (m/s2).
fp = fluid_properties_obj
porosity = 'porosity'
pebble_diameter = ${pebble_diameter}
T_solid = T_solid
rhie_chow_user_object = pins_rhie_chow_interpolator
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = '1 2 3 4 5 6 7 8 10 12 61 71 9 11'
block_name = 'pebble_bed
top_reflector
bottom_reflector
top_cavity
hot_plenum
cold_plenum
side_reflector
carbon_brick
core_barrel
rpv
riser
bypass
refl_barrel_gap
barrel_rpv_gap'
uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050
0.130
0.080 0.080 0.080 0.200 0.120 0.010 0.240
0.150 0.040 0.160 0.150 '
ix = ' 1 1 1 1 1 1
1 1
1
1 1 1 2 1 1 1
1 1 1 1 '
dy = ' 0.400 0.400 0.100 0.100
0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300
0.400 0.400 '
iy = ' 1 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1
1 1 '
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8 9 10 11 12
6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12 '
[]
# Side sets for gap conductance model.
[reflector_barrel_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 8
paired_block = 9
input = cartesian_mesh
new_boundary = reflector_barrel_gap_inner
[]
[reflector_barrel_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 9
input = reflector_barrel_gap_inner
new_boundary = reflector_barrel_gap_outer
[]
[barrel_rpv_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 11
input = reflector_barrel_gap_outer
new_boundary = barrel_rpv_gap_inner
[]
[barrel_rpv_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 12
paired_block = 11
input = barrel_rpv_gap_inner
new_boundary = barrel_rpv_gap_outer
[]
# Side sets for inflow and outflow conditions.
[reactor_inlet]
type = ParsedGenerateSideset
included_subdomains = '61'
combinatorial_geometry = 'abs(y-1) < 1e-3'
fixed_normal = true
normal = '0 -1 0'
input = barrel_rpv_gap_outer
new_sideset_name = reactor_inlet
[]
[reactor_outlet]
type = SideSetsAroundSubdomainGenerator
block = '5'
fixed_normal = true
normal = '1 0 0'
input = reactor_inlet
new_boundary = reactor_outlet
[]
[riser_walls]
type = ParsedGenerateSideset
included_subdomains = '61'
included_neighbors = '7'
combinatorial_geometry = 'y > 1 + 1e-3'
input = reactor_outlet
new_sideset_name = riser_walls
[]
# Side sets for wall boundaries.
[cold_plenum_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '6'
paired_block = '7'
input = riser_walls
new_boundary = cold_plenum_walls
[]
[hot_plenum_walls]
type = ParsedGenerateSideset
included_subdomains = 5
included_neighbors = 7
combinatorial_geometry = 'x < 1.69'
input = cold_plenum_walls
new_sideset_name = hot_plenum_walls
[]
[bypass_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '7'
input = hot_plenum_walls
new_boundary = 'bypass_wall'
[]
[pbed_inner]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4 5 6'
combinatorial_geometry = '( abs(x - 0.000) < ${geometric_tolerance} &
y > ${fparse 1.000 - geometric_tolerance} &
y < ${fparse 16.00 + geometric_tolerance} )'
input = bypass_walls
new_sideset_name = pbed_inner
[]
[pbed_outer]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4'
combinatorial_geometry = '( abs(x - ${pbed_r}) < ${geometric_tolerance} &
y > ${fparse 1.800 - geometric_tolerance} &
y < ${fparse 15.70 + geometric_tolerance} ) '
input = pbed_inner
new_sideset_name = pbed_outer
[]
[bypass_hot_plenum_interface]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '5'
new_boundary = 'bypass_hot_plenum_interface'
input = pbed_outer
[]
coord_type = RZ
[]
# ==============================================================================
# Physics Equations
# ==============================================================================
[Physics]
[NavierStokes]
[Flow/all]
# basic settings
block = ${fluid_blocks}
compressibility = 'weakly-compressible'
gravity = '0.0 -9.81 0.0'
# Porous treatement
porous_medium_treatment = true
friction_types = 'darcy forchheimer'
friction_coeffs = 'Darcy_coefficient Forchheimer_coefficient'
consistent_scaling = ${scaling}
porosity_smoothing_layers = 0
use_friction_correction = true
# fluid properties
density = 'rho'
dynamic_viscosity = 'mu'
# initial conditions
initial_velocity = '1e-6 1e-6 0'
initial_pressure = '${p_outlet}'
# boundary conditions
inlet_boundaries = 'reactor_inlet'
momentum_inlet_types = 'flux-mass'
flux_inlet_pps = 'set_inlet_mfr'
flux_inlet_directions = '0 1 0'
outlet_boundaries = 'reactor_outlet'
momentum_outlet_types = 'fixed-pressure'
pressure_functors = '${p_outlet}'
wall_boundaries = 'pbed_inner pbed_outer hot_plenum_walls cold_plenum_walls riser_walls bypass_wall'
momentum_wall_types = 'symmetry slip slip slip slip slip'
# numerical scheme
pressure_face_interpolation = average
momentum_advection_interpolation = upwind
mass_advection_interpolation = upwind
# prevents solution jump on future restarts
time_derivative_contributes_to_RC_coefficients = false
[]
[FluidHeatTransfer/all]
block = ${fluid_blocks}
# numerical scheme
energy_advection_interpolation = upwind
system_names = 'nl0'
# convective heat transfer
ambient_convection_blocks = '1 2 3 5 6 61 71'
ambient_convection_alpha = 'alpha'
ambient_temperature = 'T_solid'
# fluid properties
thermal_conductivity = 'kappa'
specific_heat = 'cp'
# initial conditions
initial_temperature = '${T_inlet}'
# boundary conditions
# see Flow physics for list of boundaries
energy_inlet_types = 'flux-mass'
energy_inlet_functors = '${T_inlet}'
energy_wall_types = 'heatflux heatflux heatflux heatflux heatflux heatflux'
energy_wall_functors = '0 0 0 0 0 0'
[]
[]
[]
[Variables]
[T_solid]
type = INSFVEnergyVariable
initial_condition = ${T_inlet}
block = '${solid_blocks}'
[]
[]
[FVKernels]
[energy_storage]
type = PINSFVEnergyTimeDerivative
variable = T_solid
rho = rho_s
cp = cp_s
is_solid = true
[]
[solid_energy_diffusion_core]
type = PINSFVEnergyAnisotropicDiffusion
variable = T_solid
kappa = 'effective_thermal_conductivity'
effective_diffusivity = true
# porosity won't be used because effective_diffusivity = true
# so set it to 1
porosity = 1
[]
[convection_pebble_bed_fluid]
type = PINSFVEnergyAmbientConvection
variable = T_solid
T_fluid = T_fluid
T_solid = T_solid
is_solid = true
h_solid_fluid = alpha
block = 'pebble_bed top_reflector
bottom_reflector hot_plenum
cold_plenum riser bypass'
[]
[heat_source]
type = FVCoupledForce
variable = T_solid
v = power_density
block = 'pebble_bed'
[]
[]
[FVBCs]
[radiation]
type = FVInfiniteCylinderRadiativeBC
variable = T_solid
boundary = right
temperature = T_solid
Tinfinity = ${T_exterior}
boundary_radius = 3.0
boundary_emissivity = ${global_emissivity}
cylinder_radius = 4.0
cylinder_emissivity = ${global_emissivity}
[]
[convection]
type = FVThermalResistanceBC
variable = T_solid
htc = natural_htc
T_ambient = ${T_exterior}
emissivity = 0
thermal_conductivities = '0.025'
conduction_thicknesses = '1'
boundary = right
[]
[]
# ==============================================================================
# Operating conditions and ramps to steady state
# ==============================================================================
[AuxVariables]
[power_density]
type = MooseVariableFVReal
initial_condition = ${fparse reference_power / 77.754418176347}
# volume from postprocessing
block = 'pebble_bed'
[]
[]
[Functions]
[mu_ramp_fn]
type = PiecewiseLinear
x = '0 1 10'
y = '10 1.5 1'
[]
[mfr_fn]
type = PiecewiseLinear
x = '0 1'
y = '0 ${mfr}'
[]
[]
[Postprocessors]
[set_inlet_mfr]
type = FunctionValuePostprocessor
function = 'mfr_fn'
execute_on = TIMESTEP_BEGIN
[]
[]
# ==============================================================================
# Materials and closure models
# ==============================================================================
!include htr-pm-flow-fv_materials.i
# ==============================================================================
# Solver parameters
# ==============================================================================
[Executioner]
type = Transient
# solver parameters
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart -pc_factor_shift_type -mat_mumps_icntl_20'
petsc_options_value = 'lu mumps 100 NONZERO 0'
automatic_scaling = true
nl_abs_tol = 1e-5
line_search = l2
nl_max_its = 50
# time stepping
end_time = 1e6
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
optimal_iterations = 9
iteration_window = 2
growth_factor = 2
cutback_factor = 0.5
[]
[]
# ==============================================================================
# Outputs and postprocessing
# ==============================================================================
[Outputs]
csv = true
exodus = true
checkpoint = true
[console]
type = Console
hide = 'area_pp_reactor_inlet set_inlet_mfr'
[]
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
!include htr-pm-flow-fv_postprocessing.i
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)
# ==============================================================================
# Model description
# ------------------------------------------------------------------------------
# Steady state HTR-PM model
# Created & modifed by Sebastian Schunert, Mustafa Jaradat, April 11, 2023
# Updated by Guillaume Giudicelli, June 15th 2026
# ==============================================================================
# - htr-pm-FV: reference plant design based on 250MW HTR-PM plant.
# - FV using the new FV action
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
# Geometry ---------------------------------------------------------------------
pebble_diameter = 0.06 # Diameter of the pebbles (m).
geometric_tolerance = 1e-3 # Geometric tolerance to generate the side-sets (m).
pbed_top = 14.228 # TAF (m).
pbed_bottom = 3.228 # Bottom of bed (m).
pbed_r = 1.500 # Pebble Bed radius (m).
# Hydraulic diameter -----------------------------------------------------------
D_H_bypass = 0.15 # Hydraulic diameter of bypass
D_H_riser = 0.1875 # Hydraulic diameter of riser
D_H_top_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_bottom_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_top_cavity = 0.67 # Hydraulic diameter of the top cavity
# Properties -------------------------------------------------------------------
global_emissivity = 0.80 # All the materials have the same emissivity (//).
pebble_bed_porosity = 0.39 # Pebble bed porosity (//).
fluid_channels_porosity = 0.20 # 20% is assumed in regions where the He flows in graphite areas (//).
bypass_channel_porosity = 0.32 # Porosity in the bypass channel (see engineering calc in spreadsheet)
riser_porosity = 0.32 # Porosity in the riser channel (see engineering calc in spreadsheet)
top_reflector_porosity = 0.3 # Porosity of the top reflector
bottom_reflector_porosity = 0.3 # Porosity of the bottom reflector
# Operating conditions ---------------------------------------------------------
mfr = 96.0 # Total reactor He mass flow rate (kg/s).
T_inlet = 523.15 # Helium inlet temperature (K).
p_outlet = 7.0e+6 # Reactor outlet pressure (Pa)
T_exterior = 300.0 # External temperature (K)
reference_power = 250e6 # Reference power (W)
# Heat transfer area per volume ------------------------------------------------
C_DB = 0.023 # original Dittus Boelter constant for areal htc; modified by ApV
ApV_bypass = 8.521 # heat transfer area per volume bypass
ApV_riser = 6.927 # heat transfer area per volume riser
ApV_top_reflector = 5.737 # heat transfer area per volume top reflector
ApV_bottom_reflector = 5.737 # heat transfer area per volume bottom reflector
# volumetric heat transfer coefficient between solid
# fluid and solid in the fluid/solid regions except the
# bed; currently applied in top_reflector bottom_reflector hot_plenum cold_plenum
# TODO: use correlations here
alpha_fluid_solid = 5e3
## block definitions
# fluid blocks define fluid vars and solve for them
fluid_blocks = '1 2 3 4 5 6 61 71'
# solid blocks define T_solid and solve for it
solid_blocks = '1 2 3 5 6 7 8 10 12 61 71 9 11'
# friction scaling
scaling = 1 #0.05
[GlobalParams]
acceleration = '0.0 -9.81 0.0' # Gravity acceleration (m/s2).
fp = fluid_properties_obj
porosity = 'porosity'
pebble_diameter = ${pebble_diameter}
T_solid = T_solid
rhie_chow_user_object = pins_rhie_chow_interpolator
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = '1 2 3 4 5 6 7 8 10 12 61 71 9 11'
block_name = 'pebble_bed
top_reflector
bottom_reflector
top_cavity
hot_plenum
cold_plenum
side_reflector
carbon_brick
core_barrel
rpv
riser
bypass
refl_barrel_gap
barrel_rpv_gap'
uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050
0.130
0.080 0.080 0.080 0.200 0.120 0.010 0.240
0.150 0.040 0.160 0.150 '
ix = ' 1 1 1 1 1 1
1 1
1
1 1 1 2 1 1 1
1 1 1 1 '
dy = ' 0.400 0.400 0.100 0.100
0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300
0.400 0.400 '
iy = ' 1 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1
1 1 '
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8 9 10 11 12
6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12 '
[]
# Side sets for gap conductance model.
[reflector_barrel_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 8
paired_block = 9
input = cartesian_mesh
new_boundary = reflector_barrel_gap_inner
[]
[reflector_barrel_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 9
input = reflector_barrel_gap_inner
new_boundary = reflector_barrel_gap_outer
[]
[barrel_rpv_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 11
input = reflector_barrel_gap_outer
new_boundary = barrel_rpv_gap_inner
[]
[barrel_rpv_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 12
paired_block = 11
input = barrel_rpv_gap_inner
new_boundary = barrel_rpv_gap_outer
[]
# Side sets for inflow and outflow conditions.
[reactor_inlet]
type = ParsedGenerateSideset
included_subdomains = '61'
combinatorial_geometry = 'abs(y-1) < 1e-3'
fixed_normal = true
normal = '0 -1 0'
input = barrel_rpv_gap_outer
new_sideset_name = reactor_inlet
[]
[reactor_outlet]
type = SideSetsAroundSubdomainGenerator
block = '5'
fixed_normal = true
normal = '1 0 0'
input = reactor_inlet
new_boundary = reactor_outlet
[]
[riser_walls]
type = ParsedGenerateSideset
included_subdomains = '61'
included_neighbors = '7'
combinatorial_geometry = 'y > 1 + 1e-3'
input = reactor_outlet
new_sideset_name = riser_walls
[]
# Side sets for wall boundaries.
[cold_plenum_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '6'
paired_block = '7'
input = riser_walls
new_boundary = cold_plenum_walls
[]
[hot_plenum_walls]
type = ParsedGenerateSideset
included_subdomains = 5
included_neighbors = 7
combinatorial_geometry = 'x < 1.69'
input = cold_plenum_walls
new_sideset_name = hot_plenum_walls
[]
[bypass_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '7'
input = hot_plenum_walls
new_boundary = 'bypass_wall'
[]
[pbed_inner]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4 5 6'
combinatorial_geometry = '( abs(x - 0.000) < ${geometric_tolerance} &
y > ${fparse 1.000 - geometric_tolerance} &
y < ${fparse 16.00 + geometric_tolerance} )'
input = bypass_walls
new_sideset_name = pbed_inner
[]
[pbed_outer]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4'
combinatorial_geometry = '( abs(x - ${pbed_r}) < ${geometric_tolerance} &
y > ${fparse 1.800 - geometric_tolerance} &
y < ${fparse 15.70 + geometric_tolerance} ) '
input = pbed_inner
new_sideset_name = pbed_outer
[]
[bypass_hot_plenum_interface]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '5'
new_boundary = 'bypass_hot_plenum_interface'
input = pbed_outer
[]
coord_type = RZ
[]
# ==============================================================================
# Physics Equations
# ==============================================================================
[Physics]
[NavierStokes]
[Flow/all]
# basic settings
block = ${fluid_blocks}
compressibility = 'weakly-compressible'
gravity = '0.0 -9.81 0.0'
# Porous treatement
porous_medium_treatment = true
friction_types = 'darcy forchheimer'
friction_coeffs = 'Darcy_coefficient Forchheimer_coefficient'
consistent_scaling = ${scaling}
porosity_smoothing_layers = 0
use_friction_correction = true
# fluid properties
density = 'rho'
dynamic_viscosity = 'mu'
# initial conditions
initial_velocity = '1e-6 1e-6 0'
initial_pressure = '${p_outlet}'
# boundary conditions
inlet_boundaries = 'reactor_inlet'
momentum_inlet_types = 'flux-mass'
flux_inlet_pps = 'set_inlet_mfr'
flux_inlet_directions = '0 1 0'
outlet_boundaries = 'reactor_outlet'
momentum_outlet_types = 'fixed-pressure'
pressure_functors = '${p_outlet}'
wall_boundaries = 'pbed_inner pbed_outer hot_plenum_walls cold_plenum_walls riser_walls bypass_wall'
momentum_wall_types = 'symmetry slip slip slip slip slip'
# numerical scheme
pressure_face_interpolation = average
momentum_advection_interpolation = upwind
mass_advection_interpolation = upwind
# prevents solution jump on future restarts
time_derivative_contributes_to_RC_coefficients = false
[]
[FluidHeatTransfer/all]
block = ${fluid_blocks}
# numerical scheme
energy_advection_interpolation = upwind
system_names = 'nl0'
# convective heat transfer
ambient_convection_blocks = '1 2 3 5 6 61 71'
ambient_convection_alpha = 'alpha'
ambient_temperature = 'T_solid'
# fluid properties
thermal_conductivity = 'kappa'
specific_heat = 'cp'
# initial conditions
initial_temperature = '${T_inlet}'
# boundary conditions
# see Flow physics for list of boundaries
energy_inlet_types = 'flux-mass'
energy_inlet_functors = '${T_inlet}'
energy_wall_types = 'heatflux heatflux heatflux heatflux heatflux heatflux'
energy_wall_functors = '0 0 0 0 0 0'
[]
[]
[]
[Variables]
[T_solid]
type = INSFVEnergyVariable
initial_condition = ${T_inlet}
block = '${solid_blocks}'
[]
[]
[FVKernels]
[energy_storage]
type = PINSFVEnergyTimeDerivative
variable = T_solid
rho = rho_s
cp = cp_s
is_solid = true
[]
[solid_energy_diffusion_core]
type = PINSFVEnergyAnisotropicDiffusion
variable = T_solid
kappa = 'effective_thermal_conductivity'
effective_diffusivity = true
# porosity won't be used because effective_diffusivity = true
# so set it to 1
porosity = 1
[]
[convection_pebble_bed_fluid]
type = PINSFVEnergyAmbientConvection
variable = T_solid
T_fluid = T_fluid
T_solid = T_solid
is_solid = true
h_solid_fluid = alpha
block = 'pebble_bed top_reflector
bottom_reflector hot_plenum
cold_plenum riser bypass'
[]
[heat_source]
type = FVCoupledForce
variable = T_solid
v = power_density
block = 'pebble_bed'
[]
[]
[FVBCs]
[radiation]
type = FVInfiniteCylinderRadiativeBC
variable = T_solid
boundary = right
temperature = T_solid
Tinfinity = ${T_exterior}
boundary_radius = 3.0
boundary_emissivity = ${global_emissivity}
cylinder_radius = 4.0
cylinder_emissivity = ${global_emissivity}
[]
[convection]
type = FVThermalResistanceBC
variable = T_solid
htc = natural_htc
T_ambient = ${T_exterior}
emissivity = 0
thermal_conductivities = '0.025'
conduction_thicknesses = '1'
boundary = right
[]
[]
# ==============================================================================
# Operating conditions and ramps to steady state
# ==============================================================================
[AuxVariables]
[power_density]
type = MooseVariableFVReal
initial_condition = ${fparse reference_power / 77.754418176347}
# volume from postprocessing
block = 'pebble_bed'
[]
[]
[Functions]
[mu_ramp_fn]
type = PiecewiseLinear
x = '0 1 10'
y = '10 1.5 1'
[]
[mfr_fn]
type = PiecewiseLinear
x = '0 1'
y = '0 ${mfr}'
[]
[]
[Postprocessors]
[set_inlet_mfr]
type = FunctionValuePostprocessor
function = 'mfr_fn'
execute_on = TIMESTEP_BEGIN
[]
[]
# ==============================================================================
# Materials and closure models
# ==============================================================================
!include htr-pm-flow-fv_materials.i
# ==============================================================================
# Solver parameters
# ==============================================================================
[Executioner]
type = Transient
# solver parameters
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart -pc_factor_shift_type -mat_mumps_icntl_20'
petsc_options_value = 'lu mumps 100 NONZERO 0'
automatic_scaling = true
nl_abs_tol = 1e-5
line_search = l2
nl_max_its = 50
# time stepping
end_time = 1e6
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
optimal_iterations = 9
iteration_window = 2
growth_factor = 2
cutback_factor = 0.5
[]
[]
# ==============================================================================
# Outputs and postprocessing
# ==============================================================================
[Outputs]
csv = true
exodus = true
checkpoint = true
[console]
type = Console
hide = 'area_pp_reactor_inlet set_inlet_mfr'
[]
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
!include htr-pm-flow-fv_postprocessing.i
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)
# ==============================================================================
# Model description
# ------------------------------------------------------------------------------
# Steady state HTR-PM model
# Created & modifed by Sebastian Schunert, Mustafa Jaradat, April 11, 2023
# Updated by Guillaume Giudicelli, June 15th 2026
# ==============================================================================
# - htr-pm-FV: reference plant design based on 250MW HTR-PM plant.
# - FV using the new FV action
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
# Geometry ---------------------------------------------------------------------
pebble_diameter = 0.06 # Diameter of the pebbles (m).
geometric_tolerance = 1e-3 # Geometric tolerance to generate the side-sets (m).
pbed_top = 14.228 # TAF (m).
pbed_bottom = 3.228 # Bottom of bed (m).
pbed_r = 1.500 # Pebble Bed radius (m).
# Hydraulic diameter -----------------------------------------------------------
D_H_bypass = 0.15 # Hydraulic diameter of bypass
D_H_riser = 0.1875 # Hydraulic diameter of riser
D_H_top_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_bottom_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_top_cavity = 0.67 # Hydraulic diameter of the top cavity
# Properties -------------------------------------------------------------------
global_emissivity = 0.80 # All the materials have the same emissivity (//).
pebble_bed_porosity = 0.39 # Pebble bed porosity (//).
fluid_channels_porosity = 0.20 # 20% is assumed in regions where the He flows in graphite areas (//).
bypass_channel_porosity = 0.32 # Porosity in the bypass channel (see engineering calc in spreadsheet)
riser_porosity = 0.32 # Porosity in the riser channel (see engineering calc in spreadsheet)
top_reflector_porosity = 0.3 # Porosity of the top reflector
bottom_reflector_porosity = 0.3 # Porosity of the bottom reflector
# Operating conditions ---------------------------------------------------------
mfr = 96.0 # Total reactor He mass flow rate (kg/s).
T_inlet = 523.15 # Helium inlet temperature (K).
p_outlet = 7.0e+6 # Reactor outlet pressure (Pa)
T_exterior = 300.0 # External temperature (K)
reference_power = 250e6 # Reference power (W)
# Heat transfer area per volume ------------------------------------------------
C_DB = 0.023 # original Dittus Boelter constant for areal htc; modified by ApV
ApV_bypass = 8.521 # heat transfer area per volume bypass
ApV_riser = 6.927 # heat transfer area per volume riser
ApV_top_reflector = 5.737 # heat transfer area per volume top reflector
ApV_bottom_reflector = 5.737 # heat transfer area per volume bottom reflector
# volumetric heat transfer coefficient between solid
# fluid and solid in the fluid/solid regions except the
# bed; currently applied in top_reflector bottom_reflector hot_plenum cold_plenum
# TODO: use correlations here
alpha_fluid_solid = 5e3
## block definitions
# fluid blocks define fluid vars and solve for them
fluid_blocks = '1 2 3 4 5 6 61 71'
# solid blocks define T_solid and solve for it
solid_blocks = '1 2 3 5 6 7 8 10 12 61 71 9 11'
# friction scaling
scaling = 1 #0.05
[GlobalParams]
acceleration = '0.0 -9.81 0.0' # Gravity acceleration (m/s2).
fp = fluid_properties_obj
porosity = 'porosity'
pebble_diameter = ${pebble_diameter}
T_solid = T_solid
rhie_chow_user_object = pins_rhie_chow_interpolator
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = '1 2 3 4 5 6 7 8 10 12 61 71 9 11'
block_name = 'pebble_bed
top_reflector
bottom_reflector
top_cavity
hot_plenum
cold_plenum
side_reflector
carbon_brick
core_barrel
rpv
riser
bypass
refl_barrel_gap
barrel_rpv_gap'
uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050
0.130
0.080 0.080 0.080 0.200 0.120 0.010 0.240
0.150 0.040 0.160 0.150 '
ix = ' 1 1 1 1 1 1
1 1
1
1 1 1 2 1 1 1
1 1 1 1 '
dy = ' 0.400 0.400 0.100 0.100
0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300
0.400 0.400 '
iy = ' 1 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1
1 1 '
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8 9 10 11 12
6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12 '
[]
# Side sets for gap conductance model.
[reflector_barrel_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 8
paired_block = 9
input = cartesian_mesh
new_boundary = reflector_barrel_gap_inner
[]
[reflector_barrel_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 9
input = reflector_barrel_gap_inner
new_boundary = reflector_barrel_gap_outer
[]
[barrel_rpv_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 11
input = reflector_barrel_gap_outer
new_boundary = barrel_rpv_gap_inner
[]
[barrel_rpv_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 12
paired_block = 11
input = barrel_rpv_gap_inner
new_boundary = barrel_rpv_gap_outer
[]
# Side sets for inflow and outflow conditions.
[reactor_inlet]
type = ParsedGenerateSideset
included_subdomains = '61'
combinatorial_geometry = 'abs(y-1) < 1e-3'
fixed_normal = true
normal = '0 -1 0'
input = barrel_rpv_gap_outer
new_sideset_name = reactor_inlet
[]
[reactor_outlet]
type = SideSetsAroundSubdomainGenerator
block = '5'
fixed_normal = true
normal = '1 0 0'
input = reactor_inlet
new_boundary = reactor_outlet
[]
[riser_walls]
type = ParsedGenerateSideset
included_subdomains = '61'
included_neighbors = '7'
combinatorial_geometry = 'y > 1 + 1e-3'
input = reactor_outlet
new_sideset_name = riser_walls
[]
# Side sets for wall boundaries.
[cold_plenum_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '6'
paired_block = '7'
input = riser_walls
new_boundary = cold_plenum_walls
[]
[hot_plenum_walls]
type = ParsedGenerateSideset
included_subdomains = 5
included_neighbors = 7
combinatorial_geometry = 'x < 1.69'
input = cold_plenum_walls
new_sideset_name = hot_plenum_walls
[]
[bypass_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '7'
input = hot_plenum_walls
new_boundary = 'bypass_wall'
[]
[pbed_inner]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4 5 6'
combinatorial_geometry = '( abs(x - 0.000) < ${geometric_tolerance} &
y > ${fparse 1.000 - geometric_tolerance} &
y < ${fparse 16.00 + geometric_tolerance} )'
input = bypass_walls
new_sideset_name = pbed_inner
[]
[pbed_outer]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4'
combinatorial_geometry = '( abs(x - ${pbed_r}) < ${geometric_tolerance} &
y > ${fparse 1.800 - geometric_tolerance} &
y < ${fparse 15.70 + geometric_tolerance} ) '
input = pbed_inner
new_sideset_name = pbed_outer
[]
[bypass_hot_plenum_interface]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '5'
new_boundary = 'bypass_hot_plenum_interface'
input = pbed_outer
[]
coord_type = RZ
[]
# ==============================================================================
# Physics Equations
# ==============================================================================
[Physics]
[NavierStokes]
[Flow/all]
# basic settings
block = ${fluid_blocks}
compressibility = 'weakly-compressible'
gravity = '0.0 -9.81 0.0'
# Porous treatement
porous_medium_treatment = true
friction_types = 'darcy forchheimer'
friction_coeffs = 'Darcy_coefficient Forchheimer_coefficient'
consistent_scaling = ${scaling}
porosity_smoothing_layers = 0
use_friction_correction = true
# fluid properties
density = 'rho'
dynamic_viscosity = 'mu'
# initial conditions
initial_velocity = '1e-6 1e-6 0'
initial_pressure = '${p_outlet}'
# boundary conditions
inlet_boundaries = 'reactor_inlet'
momentum_inlet_types = 'flux-mass'
flux_inlet_pps = 'set_inlet_mfr'
flux_inlet_directions = '0 1 0'
outlet_boundaries = 'reactor_outlet'
momentum_outlet_types = 'fixed-pressure'
pressure_functors = '${p_outlet}'
wall_boundaries = 'pbed_inner pbed_outer hot_plenum_walls cold_plenum_walls riser_walls bypass_wall'
momentum_wall_types = 'symmetry slip slip slip slip slip'
# numerical scheme
pressure_face_interpolation = average
momentum_advection_interpolation = upwind
mass_advection_interpolation = upwind
# prevents solution jump on future restarts
time_derivative_contributes_to_RC_coefficients = false
[]
[FluidHeatTransfer/all]
block = ${fluid_blocks}
# numerical scheme
energy_advection_interpolation = upwind
system_names = 'nl0'
# convective heat transfer
ambient_convection_blocks = '1 2 3 5 6 61 71'
ambient_convection_alpha = 'alpha'
ambient_temperature = 'T_solid'
# fluid properties
thermal_conductivity = 'kappa'
specific_heat = 'cp'
# initial conditions
initial_temperature = '${T_inlet}'
# boundary conditions
# see Flow physics for list of boundaries
energy_inlet_types = 'flux-mass'
energy_inlet_functors = '${T_inlet}'
energy_wall_types = 'heatflux heatflux heatflux heatflux heatflux heatflux'
energy_wall_functors = '0 0 0 0 0 0'
[]
[]
[]
[Variables]
[T_solid]
type = INSFVEnergyVariable
initial_condition = ${T_inlet}
block = '${solid_blocks}'
[]
[]
[FVKernels]
[energy_storage]
type = PINSFVEnergyTimeDerivative
variable = T_solid
rho = rho_s
cp = cp_s
is_solid = true
[]
[solid_energy_diffusion_core]
type = PINSFVEnergyAnisotropicDiffusion
variable = T_solid
kappa = 'effective_thermal_conductivity'
effective_diffusivity = true
# porosity won't be used because effective_diffusivity = true
# so set it to 1
porosity = 1
[]
[convection_pebble_bed_fluid]
type = PINSFVEnergyAmbientConvection
variable = T_solid
T_fluid = T_fluid
T_solid = T_solid
is_solid = true
h_solid_fluid = alpha
block = 'pebble_bed top_reflector
bottom_reflector hot_plenum
cold_plenum riser bypass'
[]
[heat_source]
type = FVCoupledForce
variable = T_solid
v = power_density
block = 'pebble_bed'
[]
[]
[FVBCs]
[radiation]
type = FVInfiniteCylinderRadiativeBC
variable = T_solid
boundary = right
temperature = T_solid
Tinfinity = ${T_exterior}
boundary_radius = 3.0
boundary_emissivity = ${global_emissivity}
cylinder_radius = 4.0
cylinder_emissivity = ${global_emissivity}
[]
[convection]
type = FVThermalResistanceBC
variable = T_solid
htc = natural_htc
T_ambient = ${T_exterior}
emissivity = 0
thermal_conductivities = '0.025'
conduction_thicknesses = '1'
boundary = right
[]
[]
# ==============================================================================
# Operating conditions and ramps to steady state
# ==============================================================================
[AuxVariables]
[power_density]
type = MooseVariableFVReal
initial_condition = ${fparse reference_power / 77.754418176347}
# volume from postprocessing
block = 'pebble_bed'
[]
[]
[Functions]
[mu_ramp_fn]
type = PiecewiseLinear
x = '0 1 10'
y = '10 1.5 1'
[]
[mfr_fn]
type = PiecewiseLinear
x = '0 1'
y = '0 ${mfr}'
[]
[]
[Postprocessors]
[set_inlet_mfr]
type = FunctionValuePostprocessor
function = 'mfr_fn'
execute_on = TIMESTEP_BEGIN
[]
[]
# ==============================================================================
# Materials and closure models
# ==============================================================================
!include htr-pm-flow-fv_materials.i
# ==============================================================================
# Solver parameters
# ==============================================================================
[Executioner]
type = Transient
# solver parameters
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart -pc_factor_shift_type -mat_mumps_icntl_20'
petsc_options_value = 'lu mumps 100 NONZERO 0'
automatic_scaling = true
nl_abs_tol = 1e-5
line_search = l2
nl_max_its = 50
# time stepping
end_time = 1e6
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
optimal_iterations = 9
iteration_window = 2
growth_factor = 2
cutback_factor = 0.5
[]
[]
# ==============================================================================
# Outputs and postprocessing
# ==============================================================================
[Outputs]
csv = true
exodus = true
checkpoint = true
[console]
type = Console
hide = 'area_pp_reactor_inlet set_inlet_mfr'
[]
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
!include htr-pm-flow-fv_postprocessing.i
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)
# ==============================================================================
# Model description
# ------------------------------------------------------------------------------
# Steady state HTR-PM model
# Created & modifed by Sebastian Schunert, Mustafa Jaradat, April 11, 2023
# Updated by Guillaume Giudicelli, June 15th 2026
# ==============================================================================
# - htr-pm-FV: reference plant design based on 250MW HTR-PM plant.
# - FV using the new FV action
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
# Geometry ---------------------------------------------------------------------
pebble_diameter = 0.06 # Diameter of the pebbles (m).
geometric_tolerance = 1e-3 # Geometric tolerance to generate the side-sets (m).
pbed_top = 14.228 # TAF (m).
pbed_bottom = 3.228 # Bottom of bed (m).
pbed_r = 1.500 # Pebble Bed radius (m).
# Hydraulic diameter -----------------------------------------------------------
D_H_bypass = 0.15 # Hydraulic diameter of bypass
D_H_riser = 0.1875 # Hydraulic diameter of riser
D_H_top_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_bottom_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_top_cavity = 0.67 # Hydraulic diameter of the top cavity
# Properties -------------------------------------------------------------------
global_emissivity = 0.80 # All the materials have the same emissivity (//).
pebble_bed_porosity = 0.39 # Pebble bed porosity (//).
fluid_channels_porosity = 0.20 # 20% is assumed in regions where the He flows in graphite areas (//).
bypass_channel_porosity = 0.32 # Porosity in the bypass channel (see engineering calc in spreadsheet)
riser_porosity = 0.32 # Porosity in the riser channel (see engineering calc in spreadsheet)
top_reflector_porosity = 0.3 # Porosity of the top reflector
bottom_reflector_porosity = 0.3 # Porosity of the bottom reflector
# Operating conditions ---------------------------------------------------------
mfr = 96.0 # Total reactor He mass flow rate (kg/s).
T_inlet = 523.15 # Helium inlet temperature (K).
p_outlet = 7.0e+6 # Reactor outlet pressure (Pa)
T_exterior = 300.0 # External temperature (K)
reference_power = 250e6 # Reference power (W)
# Heat transfer area per volume ------------------------------------------------
C_DB = 0.023 # original Dittus Boelter constant for areal htc; modified by ApV
ApV_bypass = 8.521 # heat transfer area per volume bypass
ApV_riser = 6.927 # heat transfer area per volume riser
ApV_top_reflector = 5.737 # heat transfer area per volume top reflector
ApV_bottom_reflector = 5.737 # heat transfer area per volume bottom reflector
# volumetric heat transfer coefficient between solid
# fluid and solid in the fluid/solid regions except the
# bed; currently applied in top_reflector bottom_reflector hot_plenum cold_plenum
# TODO: use correlations here
alpha_fluid_solid = 5e3
## block definitions
# fluid blocks define fluid vars and solve for them
fluid_blocks = '1 2 3 4 5 6 61 71'
# solid blocks define T_solid and solve for it
solid_blocks = '1 2 3 5 6 7 8 10 12 61 71 9 11'
# friction scaling
scaling = 1 #0.05
[GlobalParams]
acceleration = '0.0 -9.81 0.0' # Gravity acceleration (m/s2).
fp = fluid_properties_obj
porosity = 'porosity'
pebble_diameter = ${pebble_diameter}
T_solid = T_solid
rhie_chow_user_object = pins_rhie_chow_interpolator
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = '1 2 3 4 5 6 7 8 10 12 61 71 9 11'
block_name = 'pebble_bed
top_reflector
bottom_reflector
top_cavity
hot_plenum
cold_plenum
side_reflector
carbon_brick
core_barrel
rpv
riser
bypass
refl_barrel_gap
barrel_rpv_gap'
uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050
0.130
0.080 0.080 0.080 0.200 0.120 0.010 0.240
0.150 0.040 0.160 0.150 '
ix = ' 1 1 1 1 1 1
1 1
1
1 1 1 2 1 1 1
1 1 1 1 '
dy = ' 0.400 0.400 0.100 0.100
0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300
0.400 0.400 '
iy = ' 1 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1
1 1 '
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8 9 10 11 12
6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12 '
[]
# Side sets for gap conductance model.
[reflector_barrel_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 8
paired_block = 9
input = cartesian_mesh
new_boundary = reflector_barrel_gap_inner
[]
[reflector_barrel_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 9
input = reflector_barrel_gap_inner
new_boundary = reflector_barrel_gap_outer
[]
[barrel_rpv_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 11
input = reflector_barrel_gap_outer
new_boundary = barrel_rpv_gap_inner
[]
[barrel_rpv_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 12
paired_block = 11
input = barrel_rpv_gap_inner
new_boundary = barrel_rpv_gap_outer
[]
# Side sets for inflow and outflow conditions.
[reactor_inlet]
type = ParsedGenerateSideset
included_subdomains = '61'
combinatorial_geometry = 'abs(y-1) < 1e-3'
fixed_normal = true
normal = '0 -1 0'
input = barrel_rpv_gap_outer
new_sideset_name = reactor_inlet
[]
[reactor_outlet]
type = SideSetsAroundSubdomainGenerator
block = '5'
fixed_normal = true
normal = '1 0 0'
input = reactor_inlet
new_boundary = reactor_outlet
[]
[riser_walls]
type = ParsedGenerateSideset
included_subdomains = '61'
included_neighbors = '7'
combinatorial_geometry = 'y > 1 + 1e-3'
input = reactor_outlet
new_sideset_name = riser_walls
[]
# Side sets for wall boundaries.
[cold_plenum_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '6'
paired_block = '7'
input = riser_walls
new_boundary = cold_plenum_walls
[]
[hot_plenum_walls]
type = ParsedGenerateSideset
included_subdomains = 5
included_neighbors = 7
combinatorial_geometry = 'x < 1.69'
input = cold_plenum_walls
new_sideset_name = hot_plenum_walls
[]
[bypass_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '7'
input = hot_plenum_walls
new_boundary = 'bypass_wall'
[]
[pbed_inner]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4 5 6'
combinatorial_geometry = '( abs(x - 0.000) < ${geometric_tolerance} &
y > ${fparse 1.000 - geometric_tolerance} &
y < ${fparse 16.00 + geometric_tolerance} )'
input = bypass_walls
new_sideset_name = pbed_inner
[]
[pbed_outer]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4'
combinatorial_geometry = '( abs(x - ${pbed_r}) < ${geometric_tolerance} &
y > ${fparse 1.800 - geometric_tolerance} &
y < ${fparse 15.70 + geometric_tolerance} ) '
input = pbed_inner
new_sideset_name = pbed_outer
[]
[bypass_hot_plenum_interface]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '5'
new_boundary = 'bypass_hot_plenum_interface'
input = pbed_outer
[]
coord_type = RZ
[]
# ==============================================================================
# Physics Equations
# ==============================================================================
[Physics]
[NavierStokes]
[Flow/all]
# basic settings
block = ${fluid_blocks}
compressibility = 'weakly-compressible'
gravity = '0.0 -9.81 0.0'
# Porous treatement
porous_medium_treatment = true
friction_types = 'darcy forchheimer'
friction_coeffs = 'Darcy_coefficient Forchheimer_coefficient'
consistent_scaling = ${scaling}
porosity_smoothing_layers = 0
use_friction_correction = true
# fluid properties
density = 'rho'
dynamic_viscosity = 'mu'
# initial conditions
initial_velocity = '1e-6 1e-6 0'
initial_pressure = '${p_outlet}'
# boundary conditions
inlet_boundaries = 'reactor_inlet'
momentum_inlet_types = 'flux-mass'
flux_inlet_pps = 'set_inlet_mfr'
flux_inlet_directions = '0 1 0'
outlet_boundaries = 'reactor_outlet'
momentum_outlet_types = 'fixed-pressure'
pressure_functors = '${p_outlet}'
wall_boundaries = 'pbed_inner pbed_outer hot_plenum_walls cold_plenum_walls riser_walls bypass_wall'
momentum_wall_types = 'symmetry slip slip slip slip slip'
# numerical scheme
pressure_face_interpolation = average
momentum_advection_interpolation = upwind
mass_advection_interpolation = upwind
# prevents solution jump on future restarts
time_derivative_contributes_to_RC_coefficients = false
[]
[FluidHeatTransfer/all]
block = ${fluid_blocks}
# numerical scheme
energy_advection_interpolation = upwind
system_names = 'nl0'
# convective heat transfer
ambient_convection_blocks = '1 2 3 5 6 61 71'
ambient_convection_alpha = 'alpha'
ambient_temperature = 'T_solid'
# fluid properties
thermal_conductivity = 'kappa'
specific_heat = 'cp'
# initial conditions
initial_temperature = '${T_inlet}'
# boundary conditions
# see Flow physics for list of boundaries
energy_inlet_types = 'flux-mass'
energy_inlet_functors = '${T_inlet}'
energy_wall_types = 'heatflux heatflux heatflux heatflux heatflux heatflux'
energy_wall_functors = '0 0 0 0 0 0'
[]
[]
[]
[Variables]
[T_solid]
type = INSFVEnergyVariable
initial_condition = ${T_inlet}
block = '${solid_blocks}'
[]
[]
[FVKernels]
[energy_storage]
type = PINSFVEnergyTimeDerivative
variable = T_solid
rho = rho_s
cp = cp_s
is_solid = true
[]
[solid_energy_diffusion_core]
type = PINSFVEnergyAnisotropicDiffusion
variable = T_solid
kappa = 'effective_thermal_conductivity'
effective_diffusivity = true
# porosity won't be used because effective_diffusivity = true
# so set it to 1
porosity = 1
[]
[convection_pebble_bed_fluid]
type = PINSFVEnergyAmbientConvection
variable = T_solid
T_fluid = T_fluid
T_solid = T_solid
is_solid = true
h_solid_fluid = alpha
block = 'pebble_bed top_reflector
bottom_reflector hot_plenum
cold_plenum riser bypass'
[]
[heat_source]
type = FVCoupledForce
variable = T_solid
v = power_density
block = 'pebble_bed'
[]
[]
[FVBCs]
[radiation]
type = FVInfiniteCylinderRadiativeBC
variable = T_solid
boundary = right
temperature = T_solid
Tinfinity = ${T_exterior}
boundary_radius = 3.0
boundary_emissivity = ${global_emissivity}
cylinder_radius = 4.0
cylinder_emissivity = ${global_emissivity}
[]
[convection]
type = FVThermalResistanceBC
variable = T_solid
htc = natural_htc
T_ambient = ${T_exterior}
emissivity = 0
thermal_conductivities = '0.025'
conduction_thicknesses = '1'
boundary = right
[]
[]
# ==============================================================================
# Operating conditions and ramps to steady state
# ==============================================================================
[AuxVariables]
[power_density]
type = MooseVariableFVReal
initial_condition = ${fparse reference_power / 77.754418176347}
# volume from postprocessing
block = 'pebble_bed'
[]
[]
[Functions]
[mu_ramp_fn]
type = PiecewiseLinear
x = '0 1 10'
y = '10 1.5 1'
[]
[mfr_fn]
type = PiecewiseLinear
x = '0 1'
y = '0 ${mfr}'
[]
[]
[Postprocessors]
[set_inlet_mfr]
type = FunctionValuePostprocessor
function = 'mfr_fn'
execute_on = TIMESTEP_BEGIN
[]
[]
# ==============================================================================
# Materials and closure models
# ==============================================================================
!include htr-pm-flow-fv_materials.i
# ==============================================================================
# Solver parameters
# ==============================================================================
[Executioner]
type = Transient
# solver parameters
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart -pc_factor_shift_type -mat_mumps_icntl_20'
petsc_options_value = 'lu mumps 100 NONZERO 0'
automatic_scaling = true
nl_abs_tol = 1e-5
line_search = l2
nl_max_its = 50
# time stepping
end_time = 1e6
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
optimal_iterations = 9
iteration_window = 2
growth_factor = 2
cutback_factor = 0.5
[]
[]
# ==============================================================================
# Outputs and postprocessing
# ==============================================================================
[Outputs]
csv = true
exodus = true
checkpoint = true
[console]
type = Console
hide = 'area_pp_reactor_inlet set_inlet_mfr'
[]
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
!include htr-pm-flow-fv_postprocessing.i
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)
# ==============================================================================
# Model description
# ------------------------------------------------------------------------------
# Steady state HTR-PM model
# Created & modifed by Sebastian Schunert, Mustafa Jaradat, April 11, 2023
# Updated by Guillaume Giudicelli, June 15th 2026
# ==============================================================================
# - htr-pm-FV: reference plant design based on 250MW HTR-PM plant.
# - FV using the new FV action
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
# Geometry ---------------------------------------------------------------------
pebble_diameter = 0.06 # Diameter of the pebbles (m).
geometric_tolerance = 1e-3 # Geometric tolerance to generate the side-sets (m).
pbed_top = 14.228 # TAF (m).
pbed_bottom = 3.228 # Bottom of bed (m).
pbed_r = 1.500 # Pebble Bed radius (m).
# Hydraulic diameter -----------------------------------------------------------
D_H_bypass = 0.15 # Hydraulic diameter of bypass
D_H_riser = 0.1875 # Hydraulic diameter of riser
D_H_top_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_bottom_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_top_cavity = 0.67 # Hydraulic diameter of the top cavity
# Properties -------------------------------------------------------------------
global_emissivity = 0.80 # All the materials have the same emissivity (//).
pebble_bed_porosity = 0.39 # Pebble bed porosity (//).
fluid_channels_porosity = 0.20 # 20% is assumed in regions where the He flows in graphite areas (//).
bypass_channel_porosity = 0.32 # Porosity in the bypass channel (see engineering calc in spreadsheet)
riser_porosity = 0.32 # Porosity in the riser channel (see engineering calc in spreadsheet)
top_reflector_porosity = 0.3 # Porosity of the top reflector
bottom_reflector_porosity = 0.3 # Porosity of the bottom reflector
# Operating conditions ---------------------------------------------------------
mfr = 96.0 # Total reactor He mass flow rate (kg/s).
T_inlet = 523.15 # Helium inlet temperature (K).
p_outlet = 7.0e+6 # Reactor outlet pressure (Pa)
T_exterior = 300.0 # External temperature (K)
reference_power = 250e6 # Reference power (W)
# Heat transfer area per volume ------------------------------------------------
C_DB = 0.023 # original Dittus Boelter constant for areal htc; modified by ApV
ApV_bypass = 8.521 # heat transfer area per volume bypass
ApV_riser = 6.927 # heat transfer area per volume riser
ApV_top_reflector = 5.737 # heat transfer area per volume top reflector
ApV_bottom_reflector = 5.737 # heat transfer area per volume bottom reflector
# volumetric heat transfer coefficient between solid
# fluid and solid in the fluid/solid regions except the
# bed; currently applied in top_reflector bottom_reflector hot_plenum cold_plenum
# TODO: use correlations here
alpha_fluid_solid = 5e3
## block definitions
# fluid blocks define fluid vars and solve for them
fluid_blocks = '1 2 3 4 5 6 61 71'
# solid blocks define T_solid and solve for it
solid_blocks = '1 2 3 5 6 7 8 10 12 61 71 9 11'
# friction scaling
scaling = 1 #0.05
[GlobalParams]
acceleration = '0.0 -9.81 0.0' # Gravity acceleration (m/s2).
fp = fluid_properties_obj
porosity = 'porosity'
pebble_diameter = ${pebble_diameter}
T_solid = T_solid
rhie_chow_user_object = pins_rhie_chow_interpolator
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = '1 2 3 4 5 6 7 8 10 12 61 71 9 11'
block_name = 'pebble_bed
top_reflector
bottom_reflector
top_cavity
hot_plenum
cold_plenum
side_reflector
carbon_brick
core_barrel
rpv
riser
bypass
refl_barrel_gap
barrel_rpv_gap'
uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050
0.130
0.080 0.080 0.080 0.200 0.120 0.010 0.240
0.150 0.040 0.160 0.150 '
ix = ' 1 1 1 1 1 1
1 1
1
1 1 1 2 1 1 1
1 1 1 1 '
dy = ' 0.400 0.400 0.100 0.100
0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300
0.400 0.400 '
iy = ' 1 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1
1 1 '
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8 9 10 11 12
6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12 '
[]
# Side sets for gap conductance model.
[reflector_barrel_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 8
paired_block = 9
input = cartesian_mesh
new_boundary = reflector_barrel_gap_inner
[]
[reflector_barrel_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 9
input = reflector_barrel_gap_inner
new_boundary = reflector_barrel_gap_outer
[]
[barrel_rpv_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 11
input = reflector_barrel_gap_outer
new_boundary = barrel_rpv_gap_inner
[]
[barrel_rpv_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 12
paired_block = 11
input = barrel_rpv_gap_inner
new_boundary = barrel_rpv_gap_outer
[]
# Side sets for inflow and outflow conditions.
[reactor_inlet]
type = ParsedGenerateSideset
included_subdomains = '61'
combinatorial_geometry = 'abs(y-1) < 1e-3'
fixed_normal = true
normal = '0 -1 0'
input = barrel_rpv_gap_outer
new_sideset_name = reactor_inlet
[]
[reactor_outlet]
type = SideSetsAroundSubdomainGenerator
block = '5'
fixed_normal = true
normal = '1 0 0'
input = reactor_inlet
new_boundary = reactor_outlet
[]
[riser_walls]
type = ParsedGenerateSideset
included_subdomains = '61'
included_neighbors = '7'
combinatorial_geometry = 'y > 1 + 1e-3'
input = reactor_outlet
new_sideset_name = riser_walls
[]
# Side sets for wall boundaries.
[cold_plenum_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '6'
paired_block = '7'
input = riser_walls
new_boundary = cold_plenum_walls
[]
[hot_plenum_walls]
type = ParsedGenerateSideset
included_subdomains = 5
included_neighbors = 7
combinatorial_geometry = 'x < 1.69'
input = cold_plenum_walls
new_sideset_name = hot_plenum_walls
[]
[bypass_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '7'
input = hot_plenum_walls
new_boundary = 'bypass_wall'
[]
[pbed_inner]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4 5 6'
combinatorial_geometry = '( abs(x - 0.000) < ${geometric_tolerance} &
y > ${fparse 1.000 - geometric_tolerance} &
y < ${fparse 16.00 + geometric_tolerance} )'
input = bypass_walls
new_sideset_name = pbed_inner
[]
[pbed_outer]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4'
combinatorial_geometry = '( abs(x - ${pbed_r}) < ${geometric_tolerance} &
y > ${fparse 1.800 - geometric_tolerance} &
y < ${fparse 15.70 + geometric_tolerance} ) '
input = pbed_inner
new_sideset_name = pbed_outer
[]
[bypass_hot_plenum_interface]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '5'
new_boundary = 'bypass_hot_plenum_interface'
input = pbed_outer
[]
coord_type = RZ
[]
# ==============================================================================
# Physics Equations
# ==============================================================================
[Physics]
[NavierStokes]
[Flow/all]
# basic settings
block = ${fluid_blocks}
compressibility = 'weakly-compressible'
gravity = '0.0 -9.81 0.0'
# Porous treatement
porous_medium_treatment = true
friction_types = 'darcy forchheimer'
friction_coeffs = 'Darcy_coefficient Forchheimer_coefficient'
consistent_scaling = ${scaling}
porosity_smoothing_layers = 0
use_friction_correction = true
# fluid properties
density = 'rho'
dynamic_viscosity = 'mu'
# initial conditions
initial_velocity = '1e-6 1e-6 0'
initial_pressure = '${p_outlet}'
# boundary conditions
inlet_boundaries = 'reactor_inlet'
momentum_inlet_types = 'flux-mass'
flux_inlet_pps = 'set_inlet_mfr'
flux_inlet_directions = '0 1 0'
outlet_boundaries = 'reactor_outlet'
momentum_outlet_types = 'fixed-pressure'
pressure_functors = '${p_outlet}'
wall_boundaries = 'pbed_inner pbed_outer hot_plenum_walls cold_plenum_walls riser_walls bypass_wall'
momentum_wall_types = 'symmetry slip slip slip slip slip'
# numerical scheme
pressure_face_interpolation = average
momentum_advection_interpolation = upwind
mass_advection_interpolation = upwind
# prevents solution jump on future restarts
time_derivative_contributes_to_RC_coefficients = false
[]
[FluidHeatTransfer/all]
block = ${fluid_blocks}
# numerical scheme
energy_advection_interpolation = upwind
system_names = 'nl0'
# convective heat transfer
ambient_convection_blocks = '1 2 3 5 6 61 71'
ambient_convection_alpha = 'alpha'
ambient_temperature = 'T_solid'
# fluid properties
thermal_conductivity = 'kappa'
specific_heat = 'cp'
# initial conditions
initial_temperature = '${T_inlet}'
# boundary conditions
# see Flow physics for list of boundaries
energy_inlet_types = 'flux-mass'
energy_inlet_functors = '${T_inlet}'
energy_wall_types = 'heatflux heatflux heatflux heatflux heatflux heatflux'
energy_wall_functors = '0 0 0 0 0 0'
[]
[]
[]
[Variables]
[T_solid]
type = INSFVEnergyVariable
initial_condition = ${T_inlet}
block = '${solid_blocks}'
[]
[]
[FVKernels]
[energy_storage]
type = PINSFVEnergyTimeDerivative
variable = T_solid
rho = rho_s
cp = cp_s
is_solid = true
[]
[solid_energy_diffusion_core]
type = PINSFVEnergyAnisotropicDiffusion
variable = T_solid
kappa = 'effective_thermal_conductivity'
effective_diffusivity = true
# porosity won't be used because effective_diffusivity = true
# so set it to 1
porosity = 1
[]
[convection_pebble_bed_fluid]
type = PINSFVEnergyAmbientConvection
variable = T_solid
T_fluid = T_fluid
T_solid = T_solid
is_solid = true
h_solid_fluid = alpha
block = 'pebble_bed top_reflector
bottom_reflector hot_plenum
cold_plenum riser bypass'
[]
[heat_source]
type = FVCoupledForce
variable = T_solid
v = power_density
block = 'pebble_bed'
[]
[]
[FVBCs]
[radiation]
type = FVInfiniteCylinderRadiativeBC
variable = T_solid
boundary = right
temperature = T_solid
Tinfinity = ${T_exterior}
boundary_radius = 3.0
boundary_emissivity = ${global_emissivity}
cylinder_radius = 4.0
cylinder_emissivity = ${global_emissivity}
[]
[convection]
type = FVThermalResistanceBC
variable = T_solid
htc = natural_htc
T_ambient = ${T_exterior}
emissivity = 0
thermal_conductivities = '0.025'
conduction_thicknesses = '1'
boundary = right
[]
[]
# ==============================================================================
# Operating conditions and ramps to steady state
# ==============================================================================
[AuxVariables]
[power_density]
type = MooseVariableFVReal
initial_condition = ${fparse reference_power / 77.754418176347}
# volume from postprocessing
block = 'pebble_bed'
[]
[]
[Functions]
[mu_ramp_fn]
type = PiecewiseLinear
x = '0 1 10'
y = '10 1.5 1'
[]
[mfr_fn]
type = PiecewiseLinear
x = '0 1'
y = '0 ${mfr}'
[]
[]
[Postprocessors]
[set_inlet_mfr]
type = FunctionValuePostprocessor
function = 'mfr_fn'
execute_on = TIMESTEP_BEGIN
[]
[]
# ==============================================================================
# Materials and closure models
# ==============================================================================
!include htr-pm-flow-fv_materials.i
# ==============================================================================
# Solver parameters
# ==============================================================================
[Executioner]
type = Transient
# solver parameters
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart -pc_factor_shift_type -mat_mumps_icntl_20'
petsc_options_value = 'lu mumps 100 NONZERO 0'
automatic_scaling = true
nl_abs_tol = 1e-5
line_search = l2
nl_max_its = 50
# time stepping
end_time = 1e6
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
optimal_iterations = 9
iteration_window = 2
growth_factor = 2
cutback_factor = 0.5
[]
[]
# ==============================================================================
# Outputs and postprocessing
# ==============================================================================
[Outputs]
csv = true
exodus = true
checkpoint = true
[console]
type = Console
hide = 'area_pp_reactor_inlet set_inlet_mfr'
[]
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
!include htr-pm-flow-fv_postprocessing.i
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/htr-pm-flow-fv-ss.i)
# ==============================================================================
# Model description
# ------------------------------------------------------------------------------
# Steady state HTR-PM model
# Created & modifed by Sebastian Schunert, Mustafa Jaradat, April 11, 2023
# Updated by Guillaume Giudicelli, June 15th 2026
# ==============================================================================
# - htr-pm-FV: reference plant design based on 250MW HTR-PM plant.
# - FV using the new FV action
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
# Geometry ---------------------------------------------------------------------
pebble_diameter = 0.06 # Diameter of the pebbles (m).
geometric_tolerance = 1e-3 # Geometric tolerance to generate the side-sets (m).
pbed_top = 14.228 # TAF (m).
pbed_bottom = 3.228 # Bottom of bed (m).
pbed_r = 1.500 # Pebble Bed radius (m).
# Hydraulic diameter -----------------------------------------------------------
D_H_bypass = 0.15 # Hydraulic diameter of bypass
D_H_riser = 0.1875 # Hydraulic diameter of riser
D_H_top_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_bottom_reflector = 0.2 # Hydraulic diameter of the top reflector
D_H_top_cavity = 0.67 # Hydraulic diameter of the top cavity
# Properties -------------------------------------------------------------------
global_emissivity = 0.80 # All the materials have the same emissivity (//).
pebble_bed_porosity = 0.39 # Pebble bed porosity (//).
fluid_channels_porosity = 0.20 # 20% is assumed in regions where the He flows in graphite areas (//).
bypass_channel_porosity = 0.32 # Porosity in the bypass channel (see engineering calc in spreadsheet)
riser_porosity = 0.32 # Porosity in the riser channel (see engineering calc in spreadsheet)
top_reflector_porosity = 0.3 # Porosity of the top reflector
bottom_reflector_porosity = 0.3 # Porosity of the bottom reflector
# Operating conditions ---------------------------------------------------------
mfr = 96.0 # Total reactor He mass flow rate (kg/s).
T_inlet = 523.15 # Helium inlet temperature (K).
p_outlet = 7.0e+6 # Reactor outlet pressure (Pa)
T_exterior = 300.0 # External temperature (K)
reference_power = 250e6 # Reference power (W)
# Heat transfer area per volume ------------------------------------------------
C_DB = 0.023 # original Dittus Boelter constant for areal htc; modified by ApV
ApV_bypass = 8.521 # heat transfer area per volume bypass
ApV_riser = 6.927 # heat transfer area per volume riser
ApV_top_reflector = 5.737 # heat transfer area per volume top reflector
ApV_bottom_reflector = 5.737 # heat transfer area per volume bottom reflector
# volumetric heat transfer coefficient between solid
# fluid and solid in the fluid/solid regions except the
# bed; currently applied in top_reflector bottom_reflector hot_plenum cold_plenum
# TODO: use correlations here
alpha_fluid_solid = 5e3
## block definitions
# fluid blocks define fluid vars and solve for them
fluid_blocks = '1 2 3 4 5 6 61 71'
# solid blocks define T_solid and solve for it
solid_blocks = '1 2 3 5 6 7 8 10 12 61 71 9 11'
# friction scaling
scaling = 1 #0.05
[GlobalParams]
acceleration = '0.0 -9.81 0.0' # Gravity acceleration (m/s2).
fp = fluid_properties_obj
porosity = 'porosity'
pebble_diameter = ${pebble_diameter}
T_solid = T_solid
rhie_chow_user_object = pins_rhie_chow_interpolator
[]
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
type = MeshGeneratorMesh
block_id = '1 2 3 4 5 6 7 8 10 12 61 71 9 11'
block_name = 'pebble_bed
top_reflector
bottom_reflector
top_cavity
hot_plenum
cold_plenum
side_reflector
carbon_brick
core_barrel
rpv
riser
bypass
refl_barrel_gap
barrel_rpv_gap'
uniform_refine = 1
[cartesian_mesh]
type = CartesianMeshGenerator
dim = 2
dx = ' 0.250 0.250 0.250 0.250 0.250 0.250
0.010 0.050
0.130
0.080 0.080 0.080 0.200 0.120 0.010 0.240
0.150 0.040 0.160 0.150 '
ix = ' 1 1 1 1 1 1
1 1
1
1 1 1 2 1 1 1
1 1 1 1 '
dy = ' 0.400 0.400 0.100 0.100
0.800 0.300 0.200 0.300 0.216 0.412
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550 0.550
0.760 0.712 0.300
0.400 0.400 '
iy = ' 1 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 2 1
1 1 '
subdomain_id = ' 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
5 5 5 5 5 5 5 5 5 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
3 3 3 3 3 3 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
1 1 1 1 1 1 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 4 4 4 4 4 7 7 71 7 7 7 61 7 8 8 9 10 11 12
4 2 2 2 2 2 7 7 71 7 7 7 61 7 8 8 9 10 11 12
6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 8 9 10 11 12
7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 9 10 11 12
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 10 11 12 '
[]
# Side sets for gap conductance model.
[reflector_barrel_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 8
paired_block = 9
input = cartesian_mesh
new_boundary = reflector_barrel_gap_inner
[]
[reflector_barrel_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 9
input = reflector_barrel_gap_inner
new_boundary = reflector_barrel_gap_outer
[]
[barrel_rpv_gap_inner]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 10
paired_block = 11
input = reflector_barrel_gap_outer
new_boundary = barrel_rpv_gap_inner
[]
[barrel_rpv_gap_outer]
type = SideSetsBetweenSubdomainsGenerator
primary_block = 12
paired_block = 11
input = barrel_rpv_gap_inner
new_boundary = barrel_rpv_gap_outer
[]
# Side sets for inflow and outflow conditions.
[reactor_inlet]
type = ParsedGenerateSideset
included_subdomains = '61'
combinatorial_geometry = 'abs(y-1) < 1e-3'
fixed_normal = true
normal = '0 -1 0'
input = barrel_rpv_gap_outer
new_sideset_name = reactor_inlet
[]
[reactor_outlet]
type = SideSetsAroundSubdomainGenerator
block = '5'
fixed_normal = true
normal = '1 0 0'
input = reactor_inlet
new_boundary = reactor_outlet
[]
[riser_walls]
type = ParsedGenerateSideset
included_subdomains = '61'
included_neighbors = '7'
combinatorial_geometry = 'y > 1 + 1e-3'
input = reactor_outlet
new_sideset_name = riser_walls
[]
# Side sets for wall boundaries.
[cold_plenum_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '6'
paired_block = '7'
input = riser_walls
new_boundary = cold_plenum_walls
[]
[hot_plenum_walls]
type = ParsedGenerateSideset
included_subdomains = 5
included_neighbors = 7
combinatorial_geometry = 'x < 1.69'
input = cold_plenum_walls
new_sideset_name = hot_plenum_walls
[]
[bypass_walls]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '7'
input = hot_plenum_walls
new_boundary = 'bypass_wall'
[]
[pbed_inner]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4 5 6'
combinatorial_geometry = '( abs(x - 0.000) < ${geometric_tolerance} &
y > ${fparse 1.000 - geometric_tolerance} &
y < ${fparse 16.00 + geometric_tolerance} )'
input = bypass_walls
new_sideset_name = pbed_inner
[]
[pbed_outer]
type = ParsedGenerateSideset
included_subdomains = '1 2 3 4'
combinatorial_geometry = '( abs(x - ${pbed_r}) < ${geometric_tolerance} &
y > ${fparse 1.800 - geometric_tolerance} &
y < ${fparse 15.70 + geometric_tolerance} ) '
input = pbed_inner
new_sideset_name = pbed_outer
[]
[bypass_hot_plenum_interface]
type = SideSetsBetweenSubdomainsGenerator
primary_block = '71'
paired_block = '5'
new_boundary = 'bypass_hot_plenum_interface'
input = pbed_outer
[]
coord_type = RZ
[]
# ==============================================================================
# Physics Equations
# ==============================================================================
[Physics]
[NavierStokes]
[Flow/all]
# basic settings
block = ${fluid_blocks}
compressibility = 'weakly-compressible'
gravity = '0.0 -9.81 0.0'
# Porous treatement
porous_medium_treatment = true
friction_types = 'darcy forchheimer'
friction_coeffs = 'Darcy_coefficient Forchheimer_coefficient'
consistent_scaling = ${scaling}
porosity_smoothing_layers = 0
use_friction_correction = true
# fluid properties
density = 'rho'
dynamic_viscosity = 'mu'
# initial conditions
initial_velocity = '1e-6 1e-6 0'
initial_pressure = '${p_outlet}'
# boundary conditions
inlet_boundaries = 'reactor_inlet'
momentum_inlet_types = 'flux-mass'
flux_inlet_pps = 'set_inlet_mfr'
flux_inlet_directions = '0 1 0'
outlet_boundaries = 'reactor_outlet'
momentum_outlet_types = 'fixed-pressure'
pressure_functors = '${p_outlet}'
wall_boundaries = 'pbed_inner pbed_outer hot_plenum_walls cold_plenum_walls riser_walls bypass_wall'
momentum_wall_types = 'symmetry slip slip slip slip slip'
# numerical scheme
pressure_face_interpolation = average
momentum_advection_interpolation = upwind
mass_advection_interpolation = upwind
# prevents solution jump on future restarts
time_derivative_contributes_to_RC_coefficients = false
[]
[FluidHeatTransfer/all]
block = ${fluid_blocks}
# numerical scheme
energy_advection_interpolation = upwind
system_names = 'nl0'
# convective heat transfer
ambient_convection_blocks = '1 2 3 5 6 61 71'
ambient_convection_alpha = 'alpha'
ambient_temperature = 'T_solid'
# fluid properties
thermal_conductivity = 'kappa'
specific_heat = 'cp'
# initial conditions
initial_temperature = '${T_inlet}'
# boundary conditions
# see Flow physics for list of boundaries
energy_inlet_types = 'flux-mass'
energy_inlet_functors = '${T_inlet}'
energy_wall_types = 'heatflux heatflux heatflux heatflux heatflux heatflux'
energy_wall_functors = '0 0 0 0 0 0'
[]
[]
[]
[Variables]
[T_solid]
type = INSFVEnergyVariable
initial_condition = ${T_inlet}
block = '${solid_blocks}'
[]
[]
[FVKernels]
[energy_storage]
type = PINSFVEnergyTimeDerivative
variable = T_solid
rho = rho_s
cp = cp_s
is_solid = true
[]
[solid_energy_diffusion_core]
type = PINSFVEnergyAnisotropicDiffusion
variable = T_solid
kappa = 'effective_thermal_conductivity'
effective_diffusivity = true
# porosity won't be used because effective_diffusivity = true
# so set it to 1
porosity = 1
[]
[convection_pebble_bed_fluid]
type = PINSFVEnergyAmbientConvection
variable = T_solid
T_fluid = T_fluid
T_solid = T_solid
is_solid = true
h_solid_fluid = alpha
block = 'pebble_bed top_reflector
bottom_reflector hot_plenum
cold_plenum riser bypass'
[]
[heat_source]
type = FVCoupledForce
variable = T_solid
v = power_density
block = 'pebble_bed'
[]
[]
[FVBCs]
[radiation]
type = FVInfiniteCylinderRadiativeBC
variable = T_solid
boundary = right
temperature = T_solid
Tinfinity = ${T_exterior}
boundary_radius = 3.0
boundary_emissivity = ${global_emissivity}
cylinder_radius = 4.0
cylinder_emissivity = ${global_emissivity}
[]
[convection]
type = FVThermalResistanceBC
variable = T_solid
htc = natural_htc
T_ambient = ${T_exterior}
emissivity = 0
thermal_conductivities = '0.025'
conduction_thicknesses = '1'
boundary = right
[]
[]
# ==============================================================================
# Operating conditions and ramps to steady state
# ==============================================================================
[AuxVariables]
[power_density]
type = MooseVariableFVReal
initial_condition = ${fparse reference_power / 77.754418176347}
# volume from postprocessing
block = 'pebble_bed'
[]
[]
[Functions]
[mu_ramp_fn]
type = PiecewiseLinear
x = '0 1 10'
y = '10 1.5 1'
[]
[mfr_fn]
type = PiecewiseLinear
x = '0 1'
y = '0 ${mfr}'
[]
[]
[Postprocessors]
[set_inlet_mfr]
type = FunctionValuePostprocessor
function = 'mfr_fn'
execute_on = TIMESTEP_BEGIN
[]
[]
# ==============================================================================
# Materials and closure models
# ==============================================================================
!include htr-pm-flow-fv_materials.i
# ==============================================================================
# Solver parameters
# ==============================================================================
[Executioner]
type = Transient
# solver parameters
solve_type = NEWTON
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -ksp_gmres_restart -pc_factor_shift_type -mat_mumps_icntl_20'
petsc_options_value = 'lu mumps 100 NONZERO 0'
automatic_scaling = true
nl_abs_tol = 1e-5
line_search = l2
nl_max_its = 50
# time stepping
end_time = 1e6
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
optimal_iterations = 9
iteration_window = 2
growth_factor = 2
cutback_factor = 0.5
[]
[]
# ==============================================================================
# Outputs and postprocessing
# ==============================================================================
[Outputs]
csv = true
exodus = true
checkpoint = true
[console]
type = Console
hide = 'area_pp_reactor_inlet set_inlet_mfr'
[]
print_linear_converged_reason = false
print_linear_residuals = false
print_nonlinear_converged_reason = false
[]
!include htr-pm-flow-fv_postprocessing.i
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)
# ==============================================================================
# Model description
# Single Pebble temperature model
# ------------------------------------------------------------------------------
# Idaho Falls, INL, September 29, 2022
# Author(s): Dr. Sebastian Schunert, Dr. Javier Ortensi, Dr. Mustafa Jaradat
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Geometry and data ------------------------------------------------------------
pebble_radius = 3.0e-2 # pebble radius (m)
pebble_shell_thickness = 5.0e-03 # pebble fuel free zone thickness (graphite shell) (m)
pebble_volume = ${fparse 4/3*pi*pow(pebble_radius,3)} # volume of the pebble (m3)
pebble_core_volume = ${fparse 4/3*pi*pow(pebble_radius-pebble_shell_thickness,3)} # volume of the pebble occupied by TRISO (m3)
kernel_radius = 2.50e-04 # kernel particle radius (m)
kernel_volume = ${fparse 4/3*pi*pow(kernel_radius,3)} # volume of the kernel (m3)
triso_number = 11668 # number of TRISO particle in a pebble (//)
initial_temperature = 500.0 # (K)
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
block_id = '1 2 3 4 5 6 7'
block_name = 'core
shell
kernel
buffer
ipyc
sic
opyc'
dim = 1
[pebble_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-02 5.00e-03'
ix = '15 3'
subdomain_id = '1 2'
[]
[triso_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-04 9.00e-05 4.00e-05 3.50e-05 4.00e-05'
ix = '21 8 3 3 3'
subdomain_id = '3 4 5 6 7'
[]
[mesh_combine]
type = CombinerGenerator
inputs = 'pebble_mesh triso_mesh'
[]
[pebble_surface]
type = SideSetsAroundSubdomainGenerator
block = '2'
fixed_normal = 1
normal = '1 0 0'
input = mesh_combine
new_boundary = pebble_surface
[]
[triso_surface]
type = SideSetsAroundSubdomainGenerator
block = '7'
fixed_normal = 1
normal = '1 0 0'
input = pebble_surface
new_boundary = triso_surface
[]
coord_type = 'RSPHERICAL'
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_pebble]
block = '1 2'
# initial_condition = ${initial_temperature}
[]
[T_triso]
block = '3 4 5 6 7'
# initial_condition = ${initial_temperature}
[]
[]
[Kernels]
[pebble_diffusion]
type = ADHeatConduction
variable = T_pebble
thermal_conductivity = 'k_s'
block = '1 2'
[]
[pebble_core_heat_source]
type = HeatSource
variable = T_pebble
postprocessor = pebble_power_density
value = ${fparse pebble_volume/pebble_core_volume}
block = '1'
[]
[triso_diffusion]
type = ADHeatConduction
variable = T_triso
thermal_conductivity = 'k_s'
block = '3 4 5 6 7'
[]
[kernel_heat_source]
type = HeatSource
variable = T_triso
postprocessor = pebble_power_density
value = ${fparse pebble_volume/triso_number/kernel_volume}
block = '3'
[]
[]
# ==============================================================================
# MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[pebble_core]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = pebble_core
block = '1'
[]
[pebble_shell]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = gmatrix
block = '2'
[]
# TRISO.
[kernel]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = kernel
block = '3'
[]
[buffer]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = buffer
block = '4'
[]
[ipyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = ipyc
block = '5'
[]
[sic]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = sic
block = '6'
[]
[opyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = opyc
block = '7'
[]
[]
[Functions]
[uo2_k]
type = ParsedFunction
expression = 'if(bnp < 1e-10, (115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000))),
(115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000)))*
(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp))*atan(1./(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp)))*
(1+0.019*bnp/(3.-0.019*bnp)*(1.+exp(-(t-1200)/100))^(-1))*
(1.-0.2/(1+exp((t-900.)/80.))) )'
symbol_names = 'bnp'
symbol_values = 'fima'
[]
[buffer_k]
type = ParsedFunction
expression = 244.3/2*t^(-0.574)*(970/(2.2*(1930.-970)+970))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[pyc_k]
type = ParsedFunction
expression = 244.3*t^(-0.574)*(1900/(2.2*(1930.-1900)+1900))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[sic_k]
type = ParsedFunction
expression = (17885/t+2.)*exp(-0.1277*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[gmatrix_k]
type = ParsedFunction
expression = 47.4*(1-9.7556E-4*(t-373.15)*exp(-6.036E-4*(t-273.15)))*(1740/(2.2*(1700.-1740)+1740))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[fluence]
type = ParsedFunction
expression = 7.41611E-06*bnp*bnp*bnp-5.36979E-06*bnp*bnp+1.37527E-02*bnp-4.48921E-02
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[fima]
type = ParsedFunction
expression = -2.022642E-06*bnp*bnp+1.053601E-03*bnp
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[]
[UserObjects]
[kernel]
type = FunctionSolidProperties
k_s = uo2_k
[]
[buffer]
type = FunctionSolidProperties
k_s = buffer_k
[]
[ipyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[sic]
type = FunctionSolidProperties
k_s = sic_k
[]
[opyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[gmatrix]
type = FunctionSolidProperties
k_s = gmatrix_k
[]
# Mixtures.
[triso]
type = CompositeSolidProperties
materials = 'kernel buffer ipyc sic opyc'
fractions = '0.1659 0.2514 0.1653 0.1762 0.2412' # volume fractions.
k_mixing = 'series'
[]
[pebble_core]
type = CompositeSolidProperties
materials = 'triso gmatrix'
fractions = '0.090484107 0.909515893' # volume fractions.
k_mixing = 'chiew'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[pebble_surface_temp]
type = PostprocessorDirichletBC
variable = T_pebble
postprocessor = T_surface
boundary = 'pebble_surface'
[]
[triso_surface_temp]
type = PostprocessorDirichletBC
variable = T_triso
postprocessor = pebble_core_average_temp
boundary = 'triso_surface'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = 'l2'
# Linear/nonlinear iterations.
nl_abs_tol = 1e-8
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Debug]
show_var_residual_norms = false
[]
[Postprocessors]
# transferred to this app
[pebble_power_density]
type = Receiver
default = 5.36E+06
[]
[burnup] # MWd/kg
type = Receiver
default = 0
[]
[pebble_core_average_temp]
type = ElementAverageValue
variable = T_pebble
block = '1'
execute_on = 'INITIAL LINEAR'
[]
[T_mod]
type = ElementAverageValue
variable = T_pebble
block = '1 2'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_fuel]
type = ElementAverageValue
variable = T_triso
block = '3'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_surface]
type = Receiver
default = ${initial_temperature}
[]
[]
[Outputs]
exodus = false
csv = false
console = false
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)
# ==============================================================================
# Model description
# Single Pebble temperature model
# ------------------------------------------------------------------------------
# Idaho Falls, INL, September 29, 2022
# Author(s): Dr. Sebastian Schunert, Dr. Javier Ortensi, Dr. Mustafa Jaradat
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Geometry and data ------------------------------------------------------------
pebble_radius = 3.0e-2 # pebble radius (m)
pebble_shell_thickness = 5.0e-03 # pebble fuel free zone thickness (graphite shell) (m)
pebble_volume = ${fparse 4/3*pi*pow(pebble_radius,3)} # volume of the pebble (m3)
pebble_core_volume = ${fparse 4/3*pi*pow(pebble_radius-pebble_shell_thickness,3)} # volume of the pebble occupied by TRISO (m3)
kernel_radius = 2.50e-04 # kernel particle radius (m)
kernel_volume = ${fparse 4/3*pi*pow(kernel_radius,3)} # volume of the kernel (m3)
triso_number = 11668 # number of TRISO particle in a pebble (//)
initial_temperature = 500.0 # (K)
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
block_id = '1 2 3 4 5 6 7'
block_name = 'core
shell
kernel
buffer
ipyc
sic
opyc'
dim = 1
[pebble_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-02 5.00e-03'
ix = '15 3'
subdomain_id = '1 2'
[]
[triso_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-04 9.00e-05 4.00e-05 3.50e-05 4.00e-05'
ix = '21 8 3 3 3'
subdomain_id = '3 4 5 6 7'
[]
[mesh_combine]
type = CombinerGenerator
inputs = 'pebble_mesh triso_mesh'
[]
[pebble_surface]
type = SideSetsAroundSubdomainGenerator
block = '2'
fixed_normal = 1
normal = '1 0 0'
input = mesh_combine
new_boundary = pebble_surface
[]
[triso_surface]
type = SideSetsAroundSubdomainGenerator
block = '7'
fixed_normal = 1
normal = '1 0 0'
input = pebble_surface
new_boundary = triso_surface
[]
coord_type = 'RSPHERICAL'
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_pebble]
block = '1 2'
# initial_condition = ${initial_temperature}
[]
[T_triso]
block = '3 4 5 6 7'
# initial_condition = ${initial_temperature}
[]
[]
[Kernels]
[pebble_diffusion]
type = ADHeatConduction
variable = T_pebble
thermal_conductivity = 'k_s'
block = '1 2'
[]
[pebble_core_heat_source]
type = HeatSource
variable = T_pebble
postprocessor = pebble_power_density
value = ${fparse pebble_volume/pebble_core_volume}
block = '1'
[]
[triso_diffusion]
type = ADHeatConduction
variable = T_triso
thermal_conductivity = 'k_s'
block = '3 4 5 6 7'
[]
[kernel_heat_source]
type = HeatSource
variable = T_triso
postprocessor = pebble_power_density
value = ${fparse pebble_volume/triso_number/kernel_volume}
block = '3'
[]
[]
# ==============================================================================
# MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[pebble_core]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = pebble_core
block = '1'
[]
[pebble_shell]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = gmatrix
block = '2'
[]
# TRISO.
[kernel]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = kernel
block = '3'
[]
[buffer]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = buffer
block = '4'
[]
[ipyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = ipyc
block = '5'
[]
[sic]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = sic
block = '6'
[]
[opyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = opyc
block = '7'
[]
[]
[Functions]
[uo2_k]
type = ParsedFunction
expression = 'if(bnp < 1e-10, (115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000))),
(115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000)))*
(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp))*atan(1./(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp)))*
(1+0.019*bnp/(3.-0.019*bnp)*(1.+exp(-(t-1200)/100))^(-1))*
(1.-0.2/(1+exp((t-900.)/80.))) )'
symbol_names = 'bnp'
symbol_values = 'fima'
[]
[buffer_k]
type = ParsedFunction
expression = 244.3/2*t^(-0.574)*(970/(2.2*(1930.-970)+970))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[pyc_k]
type = ParsedFunction
expression = 244.3*t^(-0.574)*(1900/(2.2*(1930.-1900)+1900))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[sic_k]
type = ParsedFunction
expression = (17885/t+2.)*exp(-0.1277*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[gmatrix_k]
type = ParsedFunction
expression = 47.4*(1-9.7556E-4*(t-373.15)*exp(-6.036E-4*(t-273.15)))*(1740/(2.2*(1700.-1740)+1740))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[fluence]
type = ParsedFunction
expression = 7.41611E-06*bnp*bnp*bnp-5.36979E-06*bnp*bnp+1.37527E-02*bnp-4.48921E-02
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[fima]
type = ParsedFunction
expression = -2.022642E-06*bnp*bnp+1.053601E-03*bnp
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[]
[UserObjects]
[kernel]
type = FunctionSolidProperties
k_s = uo2_k
[]
[buffer]
type = FunctionSolidProperties
k_s = buffer_k
[]
[ipyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[sic]
type = FunctionSolidProperties
k_s = sic_k
[]
[opyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[gmatrix]
type = FunctionSolidProperties
k_s = gmatrix_k
[]
# Mixtures.
[triso]
type = CompositeSolidProperties
materials = 'kernel buffer ipyc sic opyc'
fractions = '0.1659 0.2514 0.1653 0.1762 0.2412' # volume fractions.
k_mixing = 'series'
[]
[pebble_core]
type = CompositeSolidProperties
materials = 'triso gmatrix'
fractions = '0.090484107 0.909515893' # volume fractions.
k_mixing = 'chiew'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[pebble_surface_temp]
type = PostprocessorDirichletBC
variable = T_pebble
postprocessor = T_surface
boundary = 'pebble_surface'
[]
[triso_surface_temp]
type = PostprocessorDirichletBC
variable = T_triso
postprocessor = pebble_core_average_temp
boundary = 'triso_surface'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = 'l2'
# Linear/nonlinear iterations.
nl_abs_tol = 1e-8
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Debug]
show_var_residual_norms = false
[]
[Postprocessors]
# transferred to this app
[pebble_power_density]
type = Receiver
default = 5.36E+06
[]
[burnup] # MWd/kg
type = Receiver
default = 0
[]
[pebble_core_average_temp]
type = ElementAverageValue
variable = T_pebble
block = '1'
execute_on = 'INITIAL LINEAR'
[]
[T_mod]
type = ElementAverageValue
variable = T_pebble
block = '1 2'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_fuel]
type = ElementAverageValue
variable = T_triso
block = '3'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_surface]
type = Receiver
default = ${initial_temperature}
[]
[]
[Outputs]
exodus = false
csv = false
console = false
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)
# ==============================================================================
# Model description
# Single Pebble temperature model
# ------------------------------------------------------------------------------
# Idaho Falls, INL, September 29, 2022
# Author(s): Dr. Sebastian Schunert, Dr. Javier Ortensi, Dr. Mustafa Jaradat
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Geometry and data ------------------------------------------------------------
pebble_radius = 3.0e-2 # pebble radius (m)
pebble_shell_thickness = 5.0e-03 # pebble fuel free zone thickness (graphite shell) (m)
pebble_volume = ${fparse 4/3*pi*pow(pebble_radius,3)} # volume of the pebble (m3)
pebble_core_volume = ${fparse 4/3*pi*pow(pebble_radius-pebble_shell_thickness,3)} # volume of the pebble occupied by TRISO (m3)
kernel_radius = 2.50e-04 # kernel particle radius (m)
kernel_volume = ${fparse 4/3*pi*pow(kernel_radius,3)} # volume of the kernel (m3)
triso_number = 11668 # number of TRISO particle in a pebble (//)
initial_temperature = 500.0 # (K)
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
block_id = '1 2 3 4 5 6 7'
block_name = 'core
shell
kernel
buffer
ipyc
sic
opyc'
dim = 1
[pebble_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-02 5.00e-03'
ix = '15 3'
subdomain_id = '1 2'
[]
[triso_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-04 9.00e-05 4.00e-05 3.50e-05 4.00e-05'
ix = '21 8 3 3 3'
subdomain_id = '3 4 5 6 7'
[]
[mesh_combine]
type = CombinerGenerator
inputs = 'pebble_mesh triso_mesh'
[]
[pebble_surface]
type = SideSetsAroundSubdomainGenerator
block = '2'
fixed_normal = 1
normal = '1 0 0'
input = mesh_combine
new_boundary = pebble_surface
[]
[triso_surface]
type = SideSetsAroundSubdomainGenerator
block = '7'
fixed_normal = 1
normal = '1 0 0'
input = pebble_surface
new_boundary = triso_surface
[]
coord_type = 'RSPHERICAL'
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_pebble]
block = '1 2'
# initial_condition = ${initial_temperature}
[]
[T_triso]
block = '3 4 5 6 7'
# initial_condition = ${initial_temperature}
[]
[]
[Kernels]
[pebble_diffusion]
type = ADHeatConduction
variable = T_pebble
thermal_conductivity = 'k_s'
block = '1 2'
[]
[pebble_core_heat_source]
type = HeatSource
variable = T_pebble
postprocessor = pebble_power_density
value = ${fparse pebble_volume/pebble_core_volume}
block = '1'
[]
[triso_diffusion]
type = ADHeatConduction
variable = T_triso
thermal_conductivity = 'k_s'
block = '3 4 5 6 7'
[]
[kernel_heat_source]
type = HeatSource
variable = T_triso
postprocessor = pebble_power_density
value = ${fparse pebble_volume/triso_number/kernel_volume}
block = '3'
[]
[]
# ==============================================================================
# MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[pebble_core]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = pebble_core
block = '1'
[]
[pebble_shell]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = gmatrix
block = '2'
[]
# TRISO.
[kernel]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = kernel
block = '3'
[]
[buffer]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = buffer
block = '4'
[]
[ipyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = ipyc
block = '5'
[]
[sic]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = sic
block = '6'
[]
[opyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = opyc
block = '7'
[]
[]
[Functions]
[uo2_k]
type = ParsedFunction
expression = 'if(bnp < 1e-10, (115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000))),
(115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000)))*
(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp))*atan(1./(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp)))*
(1+0.019*bnp/(3.-0.019*bnp)*(1.+exp(-(t-1200)/100))^(-1))*
(1.-0.2/(1+exp((t-900.)/80.))) )'
symbol_names = 'bnp'
symbol_values = 'fima'
[]
[buffer_k]
type = ParsedFunction
expression = 244.3/2*t^(-0.574)*(970/(2.2*(1930.-970)+970))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[pyc_k]
type = ParsedFunction
expression = 244.3*t^(-0.574)*(1900/(2.2*(1930.-1900)+1900))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[sic_k]
type = ParsedFunction
expression = (17885/t+2.)*exp(-0.1277*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[gmatrix_k]
type = ParsedFunction
expression = 47.4*(1-9.7556E-4*(t-373.15)*exp(-6.036E-4*(t-273.15)))*(1740/(2.2*(1700.-1740)+1740))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[fluence]
type = ParsedFunction
expression = 7.41611E-06*bnp*bnp*bnp-5.36979E-06*bnp*bnp+1.37527E-02*bnp-4.48921E-02
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[fima]
type = ParsedFunction
expression = -2.022642E-06*bnp*bnp+1.053601E-03*bnp
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[]
[UserObjects]
[kernel]
type = FunctionSolidProperties
k_s = uo2_k
[]
[buffer]
type = FunctionSolidProperties
k_s = buffer_k
[]
[ipyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[sic]
type = FunctionSolidProperties
k_s = sic_k
[]
[opyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[gmatrix]
type = FunctionSolidProperties
k_s = gmatrix_k
[]
# Mixtures.
[triso]
type = CompositeSolidProperties
materials = 'kernel buffer ipyc sic opyc'
fractions = '0.1659 0.2514 0.1653 0.1762 0.2412' # volume fractions.
k_mixing = 'series'
[]
[pebble_core]
type = CompositeSolidProperties
materials = 'triso gmatrix'
fractions = '0.090484107 0.909515893' # volume fractions.
k_mixing = 'chiew'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[pebble_surface_temp]
type = PostprocessorDirichletBC
variable = T_pebble
postprocessor = T_surface
boundary = 'pebble_surface'
[]
[triso_surface_temp]
type = PostprocessorDirichletBC
variable = T_triso
postprocessor = pebble_core_average_temp
boundary = 'triso_surface'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = 'l2'
# Linear/nonlinear iterations.
nl_abs_tol = 1e-8
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Debug]
show_var_residual_norms = false
[]
[Postprocessors]
# transferred to this app
[pebble_power_density]
type = Receiver
default = 5.36E+06
[]
[burnup] # MWd/kg
type = Receiver
default = 0
[]
[pebble_core_average_temp]
type = ElementAverageValue
variable = T_pebble
block = '1'
execute_on = 'INITIAL LINEAR'
[]
[T_mod]
type = ElementAverageValue
variable = T_pebble
block = '1 2'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_fuel]
type = ElementAverageValue
variable = T_triso
block = '3'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_surface]
type = Receiver
default = ${initial_temperature}
[]
[]
[Outputs]
exodus = false
csv = false
console = false
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)
# ==============================================================================
# Model description
# Single Pebble temperature model
# ------------------------------------------------------------------------------
# Idaho Falls, INL, September 29, 2022
# Author(s): Dr. Sebastian Schunert, Dr. Javier Ortensi, Dr. Mustafa Jaradat
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Geometry and data ------------------------------------------------------------
pebble_radius = 3.0e-2 # pebble radius (m)
pebble_shell_thickness = 5.0e-03 # pebble fuel free zone thickness (graphite shell) (m)
pebble_volume = ${fparse 4/3*pi*pow(pebble_radius,3)} # volume of the pebble (m3)
pebble_core_volume = ${fparse 4/3*pi*pow(pebble_radius-pebble_shell_thickness,3)} # volume of the pebble occupied by TRISO (m3)
kernel_radius = 2.50e-04 # kernel particle radius (m)
kernel_volume = ${fparse 4/3*pi*pow(kernel_radius,3)} # volume of the kernel (m3)
triso_number = 11668 # number of TRISO particle in a pebble (//)
initial_temperature = 500.0 # (K)
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
block_id = '1 2 3 4 5 6 7'
block_name = 'core
shell
kernel
buffer
ipyc
sic
opyc'
dim = 1
[pebble_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-02 5.00e-03'
ix = '15 3'
subdomain_id = '1 2'
[]
[triso_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-04 9.00e-05 4.00e-05 3.50e-05 4.00e-05'
ix = '21 8 3 3 3'
subdomain_id = '3 4 5 6 7'
[]
[mesh_combine]
type = CombinerGenerator
inputs = 'pebble_mesh triso_mesh'
[]
[pebble_surface]
type = SideSetsAroundSubdomainGenerator
block = '2'
fixed_normal = 1
normal = '1 0 0'
input = mesh_combine
new_boundary = pebble_surface
[]
[triso_surface]
type = SideSetsAroundSubdomainGenerator
block = '7'
fixed_normal = 1
normal = '1 0 0'
input = pebble_surface
new_boundary = triso_surface
[]
coord_type = 'RSPHERICAL'
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_pebble]
block = '1 2'
# initial_condition = ${initial_temperature}
[]
[T_triso]
block = '3 4 5 6 7'
# initial_condition = ${initial_temperature}
[]
[]
[Kernels]
[pebble_diffusion]
type = ADHeatConduction
variable = T_pebble
thermal_conductivity = 'k_s'
block = '1 2'
[]
[pebble_core_heat_source]
type = HeatSource
variable = T_pebble
postprocessor = pebble_power_density
value = ${fparse pebble_volume/pebble_core_volume}
block = '1'
[]
[triso_diffusion]
type = ADHeatConduction
variable = T_triso
thermal_conductivity = 'k_s'
block = '3 4 5 6 7'
[]
[kernel_heat_source]
type = HeatSource
variable = T_triso
postprocessor = pebble_power_density
value = ${fparse pebble_volume/triso_number/kernel_volume}
block = '3'
[]
[]
# ==============================================================================
# MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[pebble_core]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = pebble_core
block = '1'
[]
[pebble_shell]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = gmatrix
block = '2'
[]
# TRISO.
[kernel]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = kernel
block = '3'
[]
[buffer]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = buffer
block = '4'
[]
[ipyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = ipyc
block = '5'
[]
[sic]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = sic
block = '6'
[]
[opyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = opyc
block = '7'
[]
[]
[Functions]
[uo2_k]
type = ParsedFunction
expression = 'if(bnp < 1e-10, (115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000))),
(115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000)))*
(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp))*atan(1./(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp)))*
(1+0.019*bnp/(3.-0.019*bnp)*(1.+exp(-(t-1200)/100))^(-1))*
(1.-0.2/(1+exp((t-900.)/80.))) )'
symbol_names = 'bnp'
symbol_values = 'fima'
[]
[buffer_k]
type = ParsedFunction
expression = 244.3/2*t^(-0.574)*(970/(2.2*(1930.-970)+970))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[pyc_k]
type = ParsedFunction
expression = 244.3*t^(-0.574)*(1900/(2.2*(1930.-1900)+1900))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[sic_k]
type = ParsedFunction
expression = (17885/t+2.)*exp(-0.1277*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[gmatrix_k]
type = ParsedFunction
expression = 47.4*(1-9.7556E-4*(t-373.15)*exp(-6.036E-4*(t-273.15)))*(1740/(2.2*(1700.-1740)+1740))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[fluence]
type = ParsedFunction
expression = 7.41611E-06*bnp*bnp*bnp-5.36979E-06*bnp*bnp+1.37527E-02*bnp-4.48921E-02
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[fima]
type = ParsedFunction
expression = -2.022642E-06*bnp*bnp+1.053601E-03*bnp
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[]
[UserObjects]
[kernel]
type = FunctionSolidProperties
k_s = uo2_k
[]
[buffer]
type = FunctionSolidProperties
k_s = buffer_k
[]
[ipyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[sic]
type = FunctionSolidProperties
k_s = sic_k
[]
[opyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[gmatrix]
type = FunctionSolidProperties
k_s = gmatrix_k
[]
# Mixtures.
[triso]
type = CompositeSolidProperties
materials = 'kernel buffer ipyc sic opyc'
fractions = '0.1659 0.2514 0.1653 0.1762 0.2412' # volume fractions.
k_mixing = 'series'
[]
[pebble_core]
type = CompositeSolidProperties
materials = 'triso gmatrix'
fractions = '0.090484107 0.909515893' # volume fractions.
k_mixing = 'chiew'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[pebble_surface_temp]
type = PostprocessorDirichletBC
variable = T_pebble
postprocessor = T_surface
boundary = 'pebble_surface'
[]
[triso_surface_temp]
type = PostprocessorDirichletBC
variable = T_triso
postprocessor = pebble_core_average_temp
boundary = 'triso_surface'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = 'l2'
# Linear/nonlinear iterations.
nl_abs_tol = 1e-8
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Debug]
show_var_residual_norms = false
[]
[Postprocessors]
# transferred to this app
[pebble_power_density]
type = Receiver
default = 5.36E+06
[]
[burnup] # MWd/kg
type = Receiver
default = 0
[]
[pebble_core_average_temp]
type = ElementAverageValue
variable = T_pebble
block = '1'
execute_on = 'INITIAL LINEAR'
[]
[T_mod]
type = ElementAverageValue
variable = T_pebble
block = '1 2'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_fuel]
type = ElementAverageValue
variable = T_triso
block = '3'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_surface]
type = Receiver
default = ${initial_temperature}
[]
[]
[Outputs]
exodus = false
csv = false
console = false
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)
# ==============================================================================
# Model description
# Single Pebble temperature model
# ------------------------------------------------------------------------------
# Idaho Falls, INL, September 29, 2022
# Author(s): Dr. Sebastian Schunert, Dr. Javier Ortensi, Dr. Mustafa Jaradat
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Geometry and data ------------------------------------------------------------
pebble_radius = 3.0e-2 # pebble radius (m)
pebble_shell_thickness = 5.0e-03 # pebble fuel free zone thickness (graphite shell) (m)
pebble_volume = ${fparse 4/3*pi*pow(pebble_radius,3)} # volume of the pebble (m3)
pebble_core_volume = ${fparse 4/3*pi*pow(pebble_radius-pebble_shell_thickness,3)} # volume of the pebble occupied by TRISO (m3)
kernel_radius = 2.50e-04 # kernel particle radius (m)
kernel_volume = ${fparse 4/3*pi*pow(kernel_radius,3)} # volume of the kernel (m3)
triso_number = 11668 # number of TRISO particle in a pebble (//)
initial_temperature = 500.0 # (K)
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
block_id = '1 2 3 4 5 6 7'
block_name = 'core
shell
kernel
buffer
ipyc
sic
opyc'
dim = 1
[pebble_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-02 5.00e-03'
ix = '15 3'
subdomain_id = '1 2'
[]
[triso_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-04 9.00e-05 4.00e-05 3.50e-05 4.00e-05'
ix = '21 8 3 3 3'
subdomain_id = '3 4 5 6 7'
[]
[mesh_combine]
type = CombinerGenerator
inputs = 'pebble_mesh triso_mesh'
[]
[pebble_surface]
type = SideSetsAroundSubdomainGenerator
block = '2'
fixed_normal = 1
normal = '1 0 0'
input = mesh_combine
new_boundary = pebble_surface
[]
[triso_surface]
type = SideSetsAroundSubdomainGenerator
block = '7'
fixed_normal = 1
normal = '1 0 0'
input = pebble_surface
new_boundary = triso_surface
[]
coord_type = 'RSPHERICAL'
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_pebble]
block = '1 2'
# initial_condition = ${initial_temperature}
[]
[T_triso]
block = '3 4 5 6 7'
# initial_condition = ${initial_temperature}
[]
[]
[Kernels]
[pebble_diffusion]
type = ADHeatConduction
variable = T_pebble
thermal_conductivity = 'k_s'
block = '1 2'
[]
[pebble_core_heat_source]
type = HeatSource
variable = T_pebble
postprocessor = pebble_power_density
value = ${fparse pebble_volume/pebble_core_volume}
block = '1'
[]
[triso_diffusion]
type = ADHeatConduction
variable = T_triso
thermal_conductivity = 'k_s'
block = '3 4 5 6 7'
[]
[kernel_heat_source]
type = HeatSource
variable = T_triso
postprocessor = pebble_power_density
value = ${fparse pebble_volume/triso_number/kernel_volume}
block = '3'
[]
[]
# ==============================================================================
# MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[pebble_core]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = pebble_core
block = '1'
[]
[pebble_shell]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = gmatrix
block = '2'
[]
# TRISO.
[kernel]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = kernel
block = '3'
[]
[buffer]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = buffer
block = '4'
[]
[ipyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = ipyc
block = '5'
[]
[sic]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = sic
block = '6'
[]
[opyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = opyc
block = '7'
[]
[]
[Functions]
[uo2_k]
type = ParsedFunction
expression = 'if(bnp < 1e-10, (115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000))),
(115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000)))*
(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp))*atan(1./(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp)))*
(1+0.019*bnp/(3.-0.019*bnp)*(1.+exp(-(t-1200)/100))^(-1))*
(1.-0.2/(1+exp((t-900.)/80.))) )'
symbol_names = 'bnp'
symbol_values = 'fima'
[]
[buffer_k]
type = ParsedFunction
expression = 244.3/2*t^(-0.574)*(970/(2.2*(1930.-970)+970))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[pyc_k]
type = ParsedFunction
expression = 244.3*t^(-0.574)*(1900/(2.2*(1930.-1900)+1900))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[sic_k]
type = ParsedFunction
expression = (17885/t+2.)*exp(-0.1277*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[gmatrix_k]
type = ParsedFunction
expression = 47.4*(1-9.7556E-4*(t-373.15)*exp(-6.036E-4*(t-273.15)))*(1740/(2.2*(1700.-1740)+1740))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[fluence]
type = ParsedFunction
expression = 7.41611E-06*bnp*bnp*bnp-5.36979E-06*bnp*bnp+1.37527E-02*bnp-4.48921E-02
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[fima]
type = ParsedFunction
expression = -2.022642E-06*bnp*bnp+1.053601E-03*bnp
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[]
[UserObjects]
[kernel]
type = FunctionSolidProperties
k_s = uo2_k
[]
[buffer]
type = FunctionSolidProperties
k_s = buffer_k
[]
[ipyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[sic]
type = FunctionSolidProperties
k_s = sic_k
[]
[opyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[gmatrix]
type = FunctionSolidProperties
k_s = gmatrix_k
[]
# Mixtures.
[triso]
type = CompositeSolidProperties
materials = 'kernel buffer ipyc sic opyc'
fractions = '0.1659 0.2514 0.1653 0.1762 0.2412' # volume fractions.
k_mixing = 'series'
[]
[pebble_core]
type = CompositeSolidProperties
materials = 'triso gmatrix'
fractions = '0.090484107 0.909515893' # volume fractions.
k_mixing = 'chiew'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[pebble_surface_temp]
type = PostprocessorDirichletBC
variable = T_pebble
postprocessor = T_surface
boundary = 'pebble_surface'
[]
[triso_surface_temp]
type = PostprocessorDirichletBC
variable = T_triso
postprocessor = pebble_core_average_temp
boundary = 'triso_surface'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = 'l2'
# Linear/nonlinear iterations.
nl_abs_tol = 1e-8
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Debug]
show_var_residual_norms = false
[]
[Postprocessors]
# transferred to this app
[pebble_power_density]
type = Receiver
default = 5.36E+06
[]
[burnup] # MWd/kg
type = Receiver
default = 0
[]
[pebble_core_average_temp]
type = ElementAverageValue
variable = T_pebble
block = '1'
execute_on = 'INITIAL LINEAR'
[]
[T_mod]
type = ElementAverageValue
variable = T_pebble
block = '1 2'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_fuel]
type = ElementAverageValue
variable = T_triso
block = '3'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_surface]
type = Receiver
default = ${initial_temperature}
[]
[]
[Outputs]
exodus = false
csv = false
console = false
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)
# ==============================================================================
# Model description
# Single Pebble temperature model
# ------------------------------------------------------------------------------
# Idaho Falls, INL, September 29, 2022
# Author(s): Dr. Sebastian Schunert, Dr. Javier Ortensi, Dr. Mustafa Jaradat
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Geometry and data ------------------------------------------------------------
pebble_radius = 3.0e-2 # pebble radius (m)
pebble_shell_thickness = 5.0e-03 # pebble fuel free zone thickness (graphite shell) (m)
pebble_volume = ${fparse 4/3*pi*pow(pebble_radius,3)} # volume of the pebble (m3)
pebble_core_volume = ${fparse 4/3*pi*pow(pebble_radius-pebble_shell_thickness,3)} # volume of the pebble occupied by TRISO (m3)
kernel_radius = 2.50e-04 # kernel particle radius (m)
kernel_volume = ${fparse 4/3*pi*pow(kernel_radius,3)} # volume of the kernel (m3)
triso_number = 11668 # number of TRISO particle in a pebble (//)
initial_temperature = 500.0 # (K)
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
block_id = '1 2 3 4 5 6 7'
block_name = 'core
shell
kernel
buffer
ipyc
sic
opyc'
dim = 1
[pebble_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-02 5.00e-03'
ix = '15 3'
subdomain_id = '1 2'
[]
[triso_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-04 9.00e-05 4.00e-05 3.50e-05 4.00e-05'
ix = '21 8 3 3 3'
subdomain_id = '3 4 5 6 7'
[]
[mesh_combine]
type = CombinerGenerator
inputs = 'pebble_mesh triso_mesh'
[]
[pebble_surface]
type = SideSetsAroundSubdomainGenerator
block = '2'
fixed_normal = 1
normal = '1 0 0'
input = mesh_combine
new_boundary = pebble_surface
[]
[triso_surface]
type = SideSetsAroundSubdomainGenerator
block = '7'
fixed_normal = 1
normal = '1 0 0'
input = pebble_surface
new_boundary = triso_surface
[]
coord_type = 'RSPHERICAL'
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_pebble]
block = '1 2'
# initial_condition = ${initial_temperature}
[]
[T_triso]
block = '3 4 5 6 7'
# initial_condition = ${initial_temperature}
[]
[]
[Kernels]
[pebble_diffusion]
type = ADHeatConduction
variable = T_pebble
thermal_conductivity = 'k_s'
block = '1 2'
[]
[pebble_core_heat_source]
type = HeatSource
variable = T_pebble
postprocessor = pebble_power_density
value = ${fparse pebble_volume/pebble_core_volume}
block = '1'
[]
[triso_diffusion]
type = ADHeatConduction
variable = T_triso
thermal_conductivity = 'k_s'
block = '3 4 5 6 7'
[]
[kernel_heat_source]
type = HeatSource
variable = T_triso
postprocessor = pebble_power_density
value = ${fparse pebble_volume/triso_number/kernel_volume}
block = '3'
[]
[]
# ==============================================================================
# MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[pebble_core]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = pebble_core
block = '1'
[]
[pebble_shell]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = gmatrix
block = '2'
[]
# TRISO.
[kernel]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = kernel
block = '3'
[]
[buffer]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = buffer
block = '4'
[]
[ipyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = ipyc
block = '5'
[]
[sic]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = sic
block = '6'
[]
[opyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = opyc
block = '7'
[]
[]
[Functions]
[uo2_k]
type = ParsedFunction
expression = 'if(bnp < 1e-10, (115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000))),
(115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000)))*
(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp))*atan(1./(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp)))*
(1+0.019*bnp/(3.-0.019*bnp)*(1.+exp(-(t-1200)/100))^(-1))*
(1.-0.2/(1+exp((t-900.)/80.))) )'
symbol_names = 'bnp'
symbol_values = 'fima'
[]
[buffer_k]
type = ParsedFunction
expression = 244.3/2*t^(-0.574)*(970/(2.2*(1930.-970)+970))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[pyc_k]
type = ParsedFunction
expression = 244.3*t^(-0.574)*(1900/(2.2*(1930.-1900)+1900))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[sic_k]
type = ParsedFunction
expression = (17885/t+2.)*exp(-0.1277*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[gmatrix_k]
type = ParsedFunction
expression = 47.4*(1-9.7556E-4*(t-373.15)*exp(-6.036E-4*(t-273.15)))*(1740/(2.2*(1700.-1740)+1740))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[fluence]
type = ParsedFunction
expression = 7.41611E-06*bnp*bnp*bnp-5.36979E-06*bnp*bnp+1.37527E-02*bnp-4.48921E-02
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[fima]
type = ParsedFunction
expression = -2.022642E-06*bnp*bnp+1.053601E-03*bnp
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[]
[UserObjects]
[kernel]
type = FunctionSolidProperties
k_s = uo2_k
[]
[buffer]
type = FunctionSolidProperties
k_s = buffer_k
[]
[ipyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[sic]
type = FunctionSolidProperties
k_s = sic_k
[]
[opyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[gmatrix]
type = FunctionSolidProperties
k_s = gmatrix_k
[]
# Mixtures.
[triso]
type = CompositeSolidProperties
materials = 'kernel buffer ipyc sic opyc'
fractions = '0.1659 0.2514 0.1653 0.1762 0.2412' # volume fractions.
k_mixing = 'series'
[]
[pebble_core]
type = CompositeSolidProperties
materials = 'triso gmatrix'
fractions = '0.090484107 0.909515893' # volume fractions.
k_mixing = 'chiew'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[pebble_surface_temp]
type = PostprocessorDirichletBC
variable = T_pebble
postprocessor = T_surface
boundary = 'pebble_surface'
[]
[triso_surface_temp]
type = PostprocessorDirichletBC
variable = T_triso
postprocessor = pebble_core_average_temp
boundary = 'triso_surface'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = 'l2'
# Linear/nonlinear iterations.
nl_abs_tol = 1e-8
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Debug]
show_var_residual_norms = false
[]
[Postprocessors]
# transferred to this app
[pebble_power_density]
type = Receiver
default = 5.36E+06
[]
[burnup] # MWd/kg
type = Receiver
default = 0
[]
[pebble_core_average_temp]
type = ElementAverageValue
variable = T_pebble
block = '1'
execute_on = 'INITIAL LINEAR'
[]
[T_mod]
type = ElementAverageValue
variable = T_pebble
block = '1 2'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_fuel]
type = ElementAverageValue
variable = T_triso
block = '3'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_surface]
type = Receiver
default = ${initial_temperature}
[]
[]
[Outputs]
exodus = false
csv = false
console = false
[]
(htgr/htr-pm/core-multiphysics/updated_equilibrium_core/pebble_triso.i)
# ==============================================================================
# Model description
# Single Pebble temperature model
# ------------------------------------------------------------------------------
# Idaho Falls, INL, September 29, 2022
# Author(s): Dr. Sebastian Schunert, Dr. Javier Ortensi, Dr. Mustafa Jaradat
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Geometry and data ------------------------------------------------------------
pebble_radius = 3.0e-2 # pebble radius (m)
pebble_shell_thickness = 5.0e-03 # pebble fuel free zone thickness (graphite shell) (m)
pebble_volume = ${fparse 4/3*pi*pow(pebble_radius,3)} # volume of the pebble (m3)
pebble_core_volume = ${fparse 4/3*pi*pow(pebble_radius-pebble_shell_thickness,3)} # volume of the pebble occupied by TRISO (m3)
kernel_radius = 2.50e-04 # kernel particle radius (m)
kernel_volume = ${fparse 4/3*pi*pow(kernel_radius,3)} # volume of the kernel (m3)
triso_number = 11668 # number of TRISO particle in a pebble (//)
initial_temperature = 500.0 # (K)
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
block_id = '1 2 3 4 5 6 7'
block_name = 'core
shell
kernel
buffer
ipyc
sic
opyc'
dim = 1
[pebble_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-02 5.00e-03'
ix = '15 3'
subdomain_id = '1 2'
[]
[triso_mesh]
type = CartesianMeshGenerator
dim = 1
dx = '2.50e-04 9.00e-05 4.00e-05 3.50e-05 4.00e-05'
ix = '21 8 3 3 3'
subdomain_id = '3 4 5 6 7'
[]
[mesh_combine]
type = CombinerGenerator
inputs = 'pebble_mesh triso_mesh'
[]
[pebble_surface]
type = SideSetsAroundSubdomainGenerator
block = '2'
fixed_normal = 1
normal = '1 0 0'
input = mesh_combine
new_boundary = pebble_surface
[]
[triso_surface]
type = SideSetsAroundSubdomainGenerator
block = '7'
fixed_normal = 1
normal = '1 0 0'
input = pebble_surface
new_boundary = triso_surface
[]
coord_type = 'RSPHERICAL'
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_pebble]
block = '1 2'
# initial_condition = ${initial_temperature}
[]
[T_triso]
block = '3 4 5 6 7'
# initial_condition = ${initial_temperature}
[]
[]
[Kernels]
[pebble_diffusion]
type = ADHeatConduction
variable = T_pebble
thermal_conductivity = 'k_s'
block = '1 2'
[]
[pebble_core_heat_source]
type = HeatSource
variable = T_pebble
postprocessor = pebble_power_density
value = ${fparse pebble_volume/pebble_core_volume}
block = '1'
[]
[triso_diffusion]
type = ADHeatConduction
variable = T_triso
thermal_conductivity = 'k_s'
block = '3 4 5 6 7'
[]
[kernel_heat_source]
type = HeatSource
variable = T_triso
postprocessor = pebble_power_density
value = ${fparse pebble_volume/triso_number/kernel_volume}
block = '3'
[]
[]
# ==============================================================================
# MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[pebble_core]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = pebble_core
block = '1'
[]
[pebble_shell]
type = PronghornSteadyStateSolidMaterial
T_solid = T_pebble
solid = gmatrix
block = '2'
[]
# TRISO.
[kernel]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = kernel
block = '3'
[]
[buffer]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = buffer
block = '4'
[]
[ipyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = ipyc
block = '5'
[]
[sic]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = sic
block = '6'
[]
[opyc]
type = PronghornSteadyStateSolidMaterial
T_solid = T_triso
solid = opyc
block = '7'
[]
[]
[Functions]
[uo2_k]
type = ParsedFunction
expression = 'if(bnp < 1e-10, (115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000))),
(115.8/(7.5408+17.692*(t/1000)+3.6142*(t/1000)^2)+7410.5*(t/1000)^(-5./2.)*exp(-16.35/(t/1000)))*
(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp))*atan(1./(1.09/bnp^(3.265)+0.0643*sqrt(t/bnp)))*
(1+0.019*bnp/(3.-0.019*bnp)*(1.+exp(-(t-1200)/100))^(-1))*
(1.-0.2/(1+exp((t-900.)/80.))) )'
symbol_names = 'bnp'
symbol_values = 'fima'
[]
[buffer_k]
type = ParsedFunction
expression = 244.3/2*t^(-0.574)*(970/(2.2*(1930.-970)+970))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[pyc_k]
type = ParsedFunction
expression = 244.3*t^(-0.574)*(1900/(2.2*(1930.-1900)+1900))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[sic_k]
type = ParsedFunction
expression = (17885/t+2.)*exp(-0.1277*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[gmatrix_k]
type = ParsedFunction
expression = 47.4*(1-9.7556E-4*(t-373.15)*exp(-6.036E-4*(t-273.15)))*(1740/(2.2*(1700.-1740)+1740))*(1.-0.336*(1.-exp(-1.005*gam))-3.50e-2*gam)
symbol_names = 'gam'
symbol_values = 'fluence'
[]
[fluence]
type = ParsedFunction
expression = 7.41611E-06*bnp*bnp*bnp-5.36979E-06*bnp*bnp+1.37527E-02*bnp-4.48921E-02
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[fima]
type = ParsedFunction
expression = -2.022642E-06*bnp*bnp+1.053601E-03*bnp
symbol_names = 'bnp'
symbol_values = 'burnup'
[]
[]
[UserObjects]
[kernel]
type = FunctionSolidProperties
k_s = uo2_k
[]
[buffer]
type = FunctionSolidProperties
k_s = buffer_k
[]
[ipyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[sic]
type = FunctionSolidProperties
k_s = sic_k
[]
[opyc]
type = FunctionSolidProperties
k_s = pyc_k
[]
[gmatrix]
type = FunctionSolidProperties
k_s = gmatrix_k
[]
# Mixtures.
[triso]
type = CompositeSolidProperties
materials = 'kernel buffer ipyc sic opyc'
fractions = '0.1659 0.2514 0.1653 0.1762 0.2412' # volume fractions.
k_mixing = 'series'
[]
[pebble_core]
type = CompositeSolidProperties
materials = 'triso gmatrix'
fractions = '0.090484107 0.909515893' # volume fractions.
k_mixing = 'chiew'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[pebble_surface_temp]
type = PostprocessorDirichletBC
variable = T_pebble
postprocessor = T_surface
boundary = 'pebble_surface'
[]
[triso_surface_temp]
type = PostprocessorDirichletBC
variable = T_triso
postprocessor = pebble_core_average_temp
boundary = 'triso_surface'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
line_search = 'l2'
# Linear/nonlinear iterations.
nl_abs_tol = 1e-8
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Debug]
show_var_residual_norms = false
[]
[Postprocessors]
# transferred to this app
[pebble_power_density]
type = Receiver
default = 5.36E+06
[]
[burnup] # MWd/kg
type = Receiver
default = 0
[]
[pebble_core_average_temp]
type = ElementAverageValue
variable = T_pebble
block = '1'
execute_on = 'INITIAL LINEAR'
[]
[T_mod]
type = ElementAverageValue
variable = T_pebble
block = '1 2'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_fuel]
type = ElementAverageValue
variable = T_triso
block = '3'
execute_on = 'INITIAL TIMESTEP_END'
[]
[T_surface]
type = Receiver
default = ${initial_temperature}
[]
[]
[Outputs]
exodus = false
csv = false
console = false
[]