Pebble heat conduction simulation
Contact: Dr. Mustafa Jaradat, [email protected]
Sponsor: Dr. Steve Bajorek (NRC)
Model summarized, documented, and uploaded by Dr. Mustafa Jaradat and Dr. Samuel Walker
The neutronics and thermal hydraulics simulation provide us with the power distribution and the fluid and solid phase temperature on the macroscale. They do not resolve the individual pebbles, and therefore cannot directly inform us on local effects such as temperature gradients within a pebble. These are important to lead fuel performance studies, to verify that the pebbled-fuel remains within design limitations in terms of temperature and burnup.
We use a multiscale approach to resolve the pebble conditions within the reactor. We sample pebble locations over a coarse mesh using a CentroidMultiApp. There are two kinds of pebbles in the core: graphite pebbles in the outer reflector and fueled pebbles in the active region of the core. In the reflector, each sub-app is a 1D spherical heat conduction simulation.
[MultiApps]
[graphite_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_graphite_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '4'
# Use a lighter application for performance
# app_type = HeatConductionApp
# library_path = "/Users/giudgl-mac/projects/moose/modules/heat_conduction/lib"
max_procs_per_app = 1
[]
[]
(pbfhr/mark1/steady/ss3_coarse_pebble_mesh.i)The app_type
may be specified to use a smaller, faster application to run a simulation. For example, a HeatConductionApp
is faster to generate than a PronghornApp
, itself faster than a BlueCrabApp
. Depending on how the computing environment is set up, the library_path
may need to be specified to indicate where to load this smaller application.
As is the case with the graphite pebbles, the fuel pebbles are treated using a sub-app; fuel pebbles are modeled with a 1-D multiscale heat conduction model.
[MultiApps]
[fuel_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_fuel_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '3'
# Use a lighter application for performance
# app_type = PronghornApp
# library_path = "/Users/giudgl-mac/projects/pronghorn/lib"
max_procs_per_app = 1
[]
[]
(pbfhr/mark1/steady/ss3_coarse_pebble_mesh.i)MultiAppVariableValueSamplePostprocessorTransfer and MultiAppVariableValueSampleTransfer allow us to sample the temperature of the solid phase and the power density at these locations and populate a postprocessor / a variable respectively in the sub-app.
[Transfers]
[fuel_matrix_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = fuel_pebble
source_variable = power_distribution
variable = fuel_matrix_heat_source
[]
[pebble_surface_temp_1]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = fuel_pebble
source_variable = temp_solid
postprocessor = pebble_surface_T
[]
[]
(pbfhr/mark1/steady/ss3_coarse_pebble_mesh.i)MultiAppPostprocessorInterpolationTransfer can interpolate from postprocessors in each of subapp at their specified location into auxiliary variables in the macroscale simulation. We use that to obtain the distribution throughout the core of the UO2, graphite matrix and outer shell temperatures.
This can help the reactor analyst examine the most challenging regions in terms of fuel performance. They may also leverage the Adaptivity system to automatically refine the mesh, and therefore spawn more pebble simulations, in the regions of interest. Finally, having access to the temperature of each solid phase in the pebble allows for more accurate self-shielding calculations, for group cross section generation.
[Transfers]
[max_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = max_T_UO2
variable = max_T_UO2
[]
[average_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_UO2
variable = average_T_UO2
[]
[average_T_matrix]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_matrix
variable = average_T_matrix
[]
[average_T_graphite]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = graphite_pebble
postprocessor = average_T
variable = average_T_graphite
[]
[average_T_shell]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_shell
variable = average_T_shell
[]
[]
(pbfhr/mark1/steady/ss3_coarse_pebble_mesh.i)Reflector pebble heat conduction
Reflector pebbles are modeled as homogeneous graphite spherical pebbles. We represent them with a 1D mesh in spherical coordinates.
[Mesh]
coord_type = 'RSPHERICAL'
type = GeneratedMesh
dim = 1
xmin = 0.0
xmax = '${fparse pebble_diameter / 2}'
nx = 20
[]
(pbfhr/mark1/steady/ss4_graphite_pebble.i)The heat conduction equation with no source is described with a time derivative kernel and a diffusion kernel, specialized as HeatConduction kernels in the heat conduction module.
[Kernels]
# inactive = 'time'
[time]
type = ADHeatConductionTimeDerivative
variable = T
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T
thermal_conductivity = 'k_s'
[]
[]
(pbfhr/mark1/steady/ss4_graphite_pebble.i)The center of this spherical pebble is naturally a zero flux symmetry boundary condition. The temperature at the outer surface of the pebble is the temperature of the solid phase. This temperature is received from the main-app in a Receiver postprocessor. It is then used by a PostprocessorDirichletBC to set the boundary condition.
[Postprocessors]
[pebble_surface_T]
type = Receiver
[]
[]
[BCs]
[right]
type = PostprocessorDirichletBC
variable = T
postprocessor = pebble_surface_T
boundary = 'right'
[]
[]
(pbfhr/mark1/steady/ss4_graphite_pebble.i)The pebble conduction simulations are led using a finite element discretization. While the kernels also exist for the finite volume discretization, the finite element discretization will remain for future iterations of the model using Bison.
Fueled pebble heat conduction multiscale simulation
The fueled pebble is modeled using a similar approach, except the sphere is not uniform. Its center is a graphite core, surrounded by a fuel matrix then a graphite shell. We still represent the pebble as a 1D spherical system, with each zone defined as a different subdomain.
[Mesh]
coord_type = 'RSPHERICAL'
[mesh]
type = CartesianMeshGenerator
dim = 1
dx = '${rcore} ${fparse rfuel_matrix - rcore} ${fparse pebble_diameter/2 -
rfuel_matrix} '
ix = '15 20 10'
subdomain_id = '0 1 2'
[]
[left]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_left'
fixed_normal = true
normal = '-1 0 0'
input = mesh
[]
[right]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_right'
fixed_normal = true
normal = '1 0 0'
input = left
[]
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)We use a Heat Source Decomposition approach (Novak et al., 2021) to solve the multiscale heat conduction problem with sources. The heat source is decomposed in its mean and fluctuation (of zero average) terms, corresponding to the meso- and micro-scale. This approach is a decomposition of the heat conduction equations.
The mesoscale equation is written in terms of the mesoscale temperature, which is a slowly varying long-wavelength thermal solution of the problem with the average heat source and averaged (mixed) thermal properties.
The conduction equation on the microscale, the TRISO particles here, is similarly written,
In the microscale, we use the actual material properties of the materials involved, since there is no homogenization of the problem involved. The solid phase temperature is then the superposition of the mesoscale and microscale solutions.
where is the local coordinate and i is the index of the particles or microscale media.
In the fuel matrix, there is heat generation from the fission reactions. We solve the mesoscale conduction equation with the mean heat source.
[Kernels]
[time]
type = ADHeatConductionTimeDerivative
variable = T_fuel_matrix
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T_fuel_matrix
thermal_conductivity = 'k_s'
[]
[heat_source]
type = HeatSrc
variable = T_fuel_matrix
heat_source = fuel_matrix_heat_source
scaling_factor = '${fparse 1.0/fuel_matrix_phase_fraction}'
[]
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)Since there is no fuel in the core and the shell, and we do not model non-fission heating, there is no heat source in those subdomains.
[Kernels]
[time2]
type = ADHeatConductionTimeDerivative
variable = T_shell
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion2]
type = ADHeatConduction
variable = T_shell
thermal_conductivity = 'k_s'
[]
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)The fuel matrix temperature and the graphite temperatures match on their interfaces. We use an interface kernel to impose the equality conditions on both sides of the fuel matrix.
where is the outer boundary of the microscale domain, which will be detailed further in the next section. is obtained from the TRISO scale calculation.
[InterfaceKernels]
[diffusion]
type = HeatDiffusionInterface
variable = T_fuel_matrix
neighbor_var = T_shell
boundary = 'fm_left fm_right'
k = 'k_s'
k_neighbor = 'k_s'
[]
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)The material definitions, and the mixing of material properties from different components of a phase, is covered in the macroscale thermal-hydraulics simulation input.
We solve the microscale equation in the fuel matrix with a separate simulation, using the MultiApp system. We pass the heat source to the microscale simulation, and receive the outer surface temperature of the microscale particle. The maximum and average temperatures reached in the microscale simulations are also passed for postprocessing purposes.
[MultiApps]
[particle]
type = TransientMultiApp
execute_on = 'TIMESTEP_BEGIN'
input_files = 'ss5_fuel_matrix.i'
cli_args = 'Outputs/console=false'
[]
[]
[Transfers]
[particle_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = particle
source_variable = fuel_matrix_heat_source
variable = fuel_matrix_heat_source
[]
[particle_surface_temp]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = surface_T
to_postprocessor = particle_surface_T
reduction_type = average
[]
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)We cover the microscale equation treatment in the fuel matrix microscale simulation.
INL has recently developed a continuous tracking algorithm to assess pebble depletion as they move through the core. This capability will complement this model in the near future, as it is expended to study core depletion.
References
- A.J. Novak, S. Schunert, R.W. Carlsen, P. Balestra, R.N. Slaybaugh, and R.C. Martineau.
Multiscale thermal-hydraulic modeling of the pebble bed fluoride-salt-cooled high-temperature reactor.
Annals of Nuclear Energy, 2021.
doi:10.1016/j.anucene.2020.107968.[BibTeX]
@article{novak2021, author = "Novak, A.J. and Schunert, S. and Carlsen, R.W. and Balestra, P. and Slaybaugh, R.N. and Martineau, R.C.", title = "Multiscale Thermal-Hydraulic Modeling of the Pebble Bed Fluoride-Salt-Cooled High-Temperature Reactor", doi = "10.1016/j.anucene.2020.107968", journal = "Annals of Nuclear Energy", year = "2021", volume = "154" }
(pbfhr/mark1/steady/ss3_coarse_pebble_mesh.i)
# ==============================================================================
# Model description
# Application : any MOOSE application
# ------------------------------------------------------------------------------
# Idaho Falls, INL, August 10, 2020
# Author(s): Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Coarse mesh to run fuel and graphite pebble calculations
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
total_power = 236.0e6 # W, from [2]
model_vol = 10.4 # active fuel region volume, from [2]
power_density = ${fparse total_power / model_vol}
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = RZ
[read_mesh]
type = FileMeshGenerator
file = 'meshes/core_coarse.e'
[]
[delete_1]
type = BlockDeletionGenerator
input = read_mesh
block = '1 2 5 6 7 8 9'
[]
[]
[Problem]
kernel_coverage_check = false
skip_nl_system_check = true
[]
[Debug]
show_material_props = true
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[]
[FVKernels]
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[AuxVariables]
[temp_solid]
order = CONSTANT
family = MONOMIAL
initial_condition = 900.0
fv = true
[]
[power_distribution]
order = CONSTANT
family = MONOMIAL
initial_condition = ${power_density}
fv = true
block = '3'
[]
[max_T_UO2]
block = '3'
[]
[average_T_UO2]
block = '3'
[]
[average_T_matrix]
block = '3'
[]
[average_T_shell]
block = '3'
[]
[average_T_graphite]
block = '4'
[]
[]
# ==============================================================================
# INITIAL CONDITIONS AND FUNCTIONS
# ==============================================================================
[ICs]
[]
[Functions]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[]
[FVBCs]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
# ==============================================================================
# MULTIAPPS FOR PEBBLE MODEL
# ==============================================================================
[MultiApps]
[fuel_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_fuel_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '3'
# Use a lighter application for performance
# app_type = PronghornApp
# library_path = "/Users/giudgl-mac/projects/pronghorn/lib"
max_procs_per_app = 1
[]
[graphite_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_graphite_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '4'
# Use a lighter application for performance
# app_type = HeatConductionApp
# library_path = "/Users/giudgl-mac/projects/moose/modules/heat_conduction/lib"
max_procs_per_app = 1
[]
[]
[Transfers]
[fuel_matrix_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = fuel_pebble
source_variable = power_distribution
variable = fuel_matrix_heat_source
[]
[pebble_surface_temp_1]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = fuel_pebble
source_variable = temp_solid
postprocessor = pebble_surface_T
[]
[pebble_surface_temp_2]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = graphite_pebble
source_variable = temp_solid
postprocessor = pebble_surface_T
[]
# received for visualization purposes only
[max_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = max_T_UO2
variable = max_T_UO2
[]
[average_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_UO2
variable = average_T_UO2
[]
[average_T_matrix]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_matrix
variable = average_T_matrix
[]
[average_T_graphite]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = graphite_pebble
postprocessor = average_T
variable = average_T_graphite
[]
[average_T_shell]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_shell
variable = average_T_shell
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
[max_Ts]
type = ElementExtremeValue
variable = 'temp_solid'
[]
[max_Tuo2]
type = ElementExtremeValue
variable = 'max_T_UO2'
block = '3'
[]
[]
[Outputs]
exodus = true
[]
(pbfhr/mark1/steady/ss3_coarse_pebble_mesh.i)
# ==============================================================================
# Model description
# Application : any MOOSE application
# ------------------------------------------------------------------------------
# Idaho Falls, INL, August 10, 2020
# Author(s): Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Coarse mesh to run fuel and graphite pebble calculations
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
total_power = 236.0e6 # W, from [2]
model_vol = 10.4 # active fuel region volume, from [2]
power_density = ${fparse total_power / model_vol}
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = RZ
[read_mesh]
type = FileMeshGenerator
file = 'meshes/core_coarse.e'
[]
[delete_1]
type = BlockDeletionGenerator
input = read_mesh
block = '1 2 5 6 7 8 9'
[]
[]
[Problem]
kernel_coverage_check = false
skip_nl_system_check = true
[]
[Debug]
show_material_props = true
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[]
[FVKernels]
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[AuxVariables]
[temp_solid]
order = CONSTANT
family = MONOMIAL
initial_condition = 900.0
fv = true
[]
[power_distribution]
order = CONSTANT
family = MONOMIAL
initial_condition = ${power_density}
fv = true
block = '3'
[]
[max_T_UO2]
block = '3'
[]
[average_T_UO2]
block = '3'
[]
[average_T_matrix]
block = '3'
[]
[average_T_shell]
block = '3'
[]
[average_T_graphite]
block = '4'
[]
[]
# ==============================================================================
# INITIAL CONDITIONS AND FUNCTIONS
# ==============================================================================
[ICs]
[]
[Functions]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[]
[FVBCs]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
# ==============================================================================
# MULTIAPPS FOR PEBBLE MODEL
# ==============================================================================
[MultiApps]
[fuel_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_fuel_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '3'
# Use a lighter application for performance
# app_type = PronghornApp
# library_path = "/Users/giudgl-mac/projects/pronghorn/lib"
max_procs_per_app = 1
[]
[graphite_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_graphite_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '4'
# Use a lighter application for performance
# app_type = HeatConductionApp
# library_path = "/Users/giudgl-mac/projects/moose/modules/heat_conduction/lib"
max_procs_per_app = 1
[]
[]
[Transfers]
[fuel_matrix_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = fuel_pebble
source_variable = power_distribution
variable = fuel_matrix_heat_source
[]
[pebble_surface_temp_1]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = fuel_pebble
source_variable = temp_solid
postprocessor = pebble_surface_T
[]
[pebble_surface_temp_2]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = graphite_pebble
source_variable = temp_solid
postprocessor = pebble_surface_T
[]
# received for visualization purposes only
[max_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = max_T_UO2
variable = max_T_UO2
[]
[average_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_UO2
variable = average_T_UO2
[]
[average_T_matrix]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_matrix
variable = average_T_matrix
[]
[average_T_graphite]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = graphite_pebble
postprocessor = average_T
variable = average_T_graphite
[]
[average_T_shell]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_shell
variable = average_T_shell
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
[max_Ts]
type = ElementExtremeValue
variable = 'temp_solid'
[]
[max_Tuo2]
type = ElementExtremeValue
variable = 'max_T_UO2'
block = '3'
[]
[]
[Outputs]
exodus = true
[]
(pbfhr/mark1/steady/ss3_coarse_pebble_mesh.i)
# ==============================================================================
# Model description
# Application : any MOOSE application
# ------------------------------------------------------------------------------
# Idaho Falls, INL, August 10, 2020
# Author(s): Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Coarse mesh to run fuel and graphite pebble calculations
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
total_power = 236.0e6 # W, from [2]
model_vol = 10.4 # active fuel region volume, from [2]
power_density = ${fparse total_power / model_vol}
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = RZ
[read_mesh]
type = FileMeshGenerator
file = 'meshes/core_coarse.e'
[]
[delete_1]
type = BlockDeletionGenerator
input = read_mesh
block = '1 2 5 6 7 8 9'
[]
[]
[Problem]
kernel_coverage_check = false
skip_nl_system_check = true
[]
[Debug]
show_material_props = true
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[]
[FVKernels]
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[AuxVariables]
[temp_solid]
order = CONSTANT
family = MONOMIAL
initial_condition = 900.0
fv = true
[]
[power_distribution]
order = CONSTANT
family = MONOMIAL
initial_condition = ${power_density}
fv = true
block = '3'
[]
[max_T_UO2]
block = '3'
[]
[average_T_UO2]
block = '3'
[]
[average_T_matrix]
block = '3'
[]
[average_T_shell]
block = '3'
[]
[average_T_graphite]
block = '4'
[]
[]
# ==============================================================================
# INITIAL CONDITIONS AND FUNCTIONS
# ==============================================================================
[ICs]
[]
[Functions]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[]
[FVBCs]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
# ==============================================================================
# MULTIAPPS FOR PEBBLE MODEL
# ==============================================================================
[MultiApps]
[fuel_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_fuel_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '3'
# Use a lighter application for performance
# app_type = PronghornApp
# library_path = "/Users/giudgl-mac/projects/pronghorn/lib"
max_procs_per_app = 1
[]
[graphite_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_graphite_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '4'
# Use a lighter application for performance
# app_type = HeatConductionApp
# library_path = "/Users/giudgl-mac/projects/moose/modules/heat_conduction/lib"
max_procs_per_app = 1
[]
[]
[Transfers]
[fuel_matrix_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = fuel_pebble
source_variable = power_distribution
variable = fuel_matrix_heat_source
[]
[pebble_surface_temp_1]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = fuel_pebble
source_variable = temp_solid
postprocessor = pebble_surface_T
[]
[pebble_surface_temp_2]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = graphite_pebble
source_variable = temp_solid
postprocessor = pebble_surface_T
[]
# received for visualization purposes only
[max_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = max_T_UO2
variable = max_T_UO2
[]
[average_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_UO2
variable = average_T_UO2
[]
[average_T_matrix]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_matrix
variable = average_T_matrix
[]
[average_T_graphite]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = graphite_pebble
postprocessor = average_T
variable = average_T_graphite
[]
[average_T_shell]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_shell
variable = average_T_shell
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
[max_Ts]
type = ElementExtremeValue
variable = 'temp_solid'
[]
[max_Tuo2]
type = ElementExtremeValue
variable = 'max_T_UO2'
block = '3'
[]
[]
[Outputs]
exodus = true
[]
(pbfhr/mark1/steady/ss3_coarse_pebble_mesh.i)
# ==============================================================================
# Model description
# Application : any MOOSE application
# ------------------------------------------------------------------------------
# Idaho Falls, INL, August 10, 2020
# Author(s): Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Coarse mesh to run fuel and graphite pebble calculations
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
total_power = 236.0e6 # W, from [2]
model_vol = 10.4 # active fuel region volume, from [2]
power_density = ${fparse total_power / model_vol}
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = RZ
[read_mesh]
type = FileMeshGenerator
file = 'meshes/core_coarse.e'
[]
[delete_1]
type = BlockDeletionGenerator
input = read_mesh
block = '1 2 5 6 7 8 9'
[]
[]
[Problem]
kernel_coverage_check = false
skip_nl_system_check = true
[]
[Debug]
show_material_props = true
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[]
[FVKernels]
[]
# ==============================================================================
# AUXVARIABLES AND AUXKERNELS
# ==============================================================================
[AuxVariables]
[temp_solid]
order = CONSTANT
family = MONOMIAL
initial_condition = 900.0
fv = true
[]
[power_distribution]
order = CONSTANT
family = MONOMIAL
initial_condition = ${power_density}
fv = true
block = '3'
[]
[max_T_UO2]
block = '3'
[]
[average_T_UO2]
block = '3'
[]
[average_T_matrix]
block = '3'
[]
[average_T_shell]
block = '3'
[]
[average_T_graphite]
block = '4'
[]
[]
# ==============================================================================
# INITIAL CONDITIONS AND FUNCTIONS
# ==============================================================================
[ICs]
[]
[Functions]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[]
[FVBCs]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
# ==============================================================================
# MULTIAPPS FOR PEBBLE MODEL
# ==============================================================================
[MultiApps]
[fuel_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_fuel_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '3'
# Use a lighter application for performance
# app_type = PronghornApp
# library_path = "/Users/giudgl-mac/projects/pronghorn/lib"
max_procs_per_app = 1
[]
[graphite_pebble]
type = CentroidMultiApp
execute_on = 'TIMESTEP_END'
input_files = 'ss4_graphite_pebble.i'
cli_args = 'Outputs/console=false'
output_in_position = true
block = '4'
# Use a lighter application for performance
# app_type = HeatConductionApp
# library_path = "/Users/giudgl-mac/projects/moose/modules/heat_conduction/lib"
max_procs_per_app = 1
[]
[]
[Transfers]
[fuel_matrix_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = fuel_pebble
source_variable = power_distribution
variable = fuel_matrix_heat_source
[]
[pebble_surface_temp_1]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = fuel_pebble
source_variable = temp_solid
postprocessor = pebble_surface_T
[]
[pebble_surface_temp_2]
type = MultiAppVariableValueSamplePostprocessorTransfer
to_multi_app = graphite_pebble
source_variable = temp_solid
postprocessor = pebble_surface_T
[]
# received for visualization purposes only
[max_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = max_T_UO2
variable = max_T_UO2
[]
[average_T_UO2]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_UO2
variable = average_T_UO2
[]
[average_T_matrix]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_matrix
variable = average_T_matrix
[]
[average_T_graphite]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = graphite_pebble
postprocessor = average_T
variable = average_T_graphite
[]
[average_T_shell]
type = MultiAppPostprocessorInterpolationTransfer
from_multi_app = fuel_pebble
postprocessor = average_T_shell
variable = average_T_shell
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
[max_Ts]
type = ElementExtremeValue
variable = 'temp_solid'
[]
[max_Tuo2]
type = ElementExtremeValue
variable = 'max_T_UO2'
block = '3'
[]
[]
[Outputs]
exodus = true
[]
(pbfhr/mark1/steady/ss4_graphite_pebble.i)
# ==============================================================================
# Model description
# Application : MOOSE Heat Conduction module
# ------------------------------------------------------------------------------
# Idaho Falls, INL, November 2, 2020
# Author(s): Dr. April Novak, Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Graphite pebble heat conduction model
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
inlet_T_fluid = 8.73150000e+02
pebble_diameter = 0.03
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = 'RSPHERICAL'
type = GeneratedMesh
dim = 1
xmin = 0.0
xmax = ${fparse pebble_diameter / 2}
nx = 20
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T]
initial_condition = ${inlet_T_fluid}
[]
[]
[Kernels]
# inactive = 'time'
[time]
type = ADHeatConductionTimeDerivative
variable = T
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T
thermal_conductivity = 'k_s'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[right]
type = PostprocessorDirichletBC
variable = T
postprocessor = pebble_surface_T
boundary = 'right'
[]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[graphite_matrix]
type = ADGenericConstantMaterial
prop_names = 'rho_s k_s cp_s'
prop_values = '1600 15 1800'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
num_steps = 1
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
solve_type = PJFNK
nl_abs_tol = 1e-6
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
[Preconditioning]
[SMP_Newton]
type = SMP
full = true
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type'
petsc_options_value = ' lu '
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
# receive from macroscale solution
[pebble_surface_T]
type = Receiver
[]
# compute from present solution
[average_T]
type = ElementAverageValue
variable = T
[]
[]
[Outputs]
exodus = false
print_linear_residuals = false
[]
(pbfhr/mark1/steady/ss4_graphite_pebble.i)
# ==============================================================================
# Model description
# Application : MOOSE Heat Conduction module
# ------------------------------------------------------------------------------
# Idaho Falls, INL, November 2, 2020
# Author(s): Dr. April Novak, Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Graphite pebble heat conduction model
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
inlet_T_fluid = 8.73150000e+02
pebble_diameter = 0.03
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = 'RSPHERICAL'
type = GeneratedMesh
dim = 1
xmin = 0.0
xmax = ${fparse pebble_diameter / 2}
nx = 20
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T]
initial_condition = ${inlet_T_fluid}
[]
[]
[Kernels]
# inactive = 'time'
[time]
type = ADHeatConductionTimeDerivative
variable = T
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T
thermal_conductivity = 'k_s'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[right]
type = PostprocessorDirichletBC
variable = T
postprocessor = pebble_surface_T
boundary = 'right'
[]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[graphite_matrix]
type = ADGenericConstantMaterial
prop_names = 'rho_s k_s cp_s'
prop_values = '1600 15 1800'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
num_steps = 1
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
solve_type = PJFNK
nl_abs_tol = 1e-6
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
[Preconditioning]
[SMP_Newton]
type = SMP
full = true
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type'
petsc_options_value = ' lu '
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
# receive from macroscale solution
[pebble_surface_T]
type = Receiver
[]
# compute from present solution
[average_T]
type = ElementAverageValue
variable = T
[]
[]
[Outputs]
exodus = false
print_linear_residuals = false
[]
(pbfhr/mark1/steady/ss4_graphite_pebble.i)
# ==============================================================================
# Model description
# Application : MOOSE Heat Conduction module
# ------------------------------------------------------------------------------
# Idaho Falls, INL, November 2, 2020
# Author(s): Dr. April Novak, Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Graphite pebble heat conduction model
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
inlet_T_fluid = 8.73150000e+02
pebble_diameter = 0.03
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = 'RSPHERICAL'
type = GeneratedMesh
dim = 1
xmin = 0.0
xmax = ${fparse pebble_diameter / 2}
nx = 20
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T]
initial_condition = ${inlet_T_fluid}
[]
[]
[Kernels]
# inactive = 'time'
[time]
type = ADHeatConductionTimeDerivative
variable = T
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T
thermal_conductivity = 'k_s'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[right]
type = PostprocessorDirichletBC
variable = T
postprocessor = pebble_surface_T
boundary = 'right'
[]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[Materials]
[graphite_matrix]
type = ADGenericConstantMaterial
prop_names = 'rho_s k_s cp_s'
prop_values = '1600 15 1800'
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
num_steps = 1
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
solve_type = PJFNK
nl_abs_tol = 1e-6
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
[Preconditioning]
[SMP_Newton]
type = SMP
full = true
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type'
petsc_options_value = ' lu '
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
# receive from macroscale solution
[pebble_surface_T]
type = Receiver
[]
# compute from present solution
[average_T]
type = ElementAverageValue
variable = T
[]
[]
[Outputs]
exodus = false
print_linear_residuals = false
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)
# ==============================================================================
# Model description
# Application : Pronghorn
# ------------------------------------------------------------------------------
# Idaho Falls, INL, November 2, 2020
# Author(s): Dr. April Novak, Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Fuel pebble heat conduction model
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
inlet_T_fluid = 8.73150000e+02
total_power = 236.0e6 # W, from [2]
model_vol = 10.4 # active fuel region volume, from [2]
power_density = ${fparse total_power / model_vol}
# Material phase fractions
UO2_phase_fraction = 1.20427291e-01
buffer_phase_fraction = 2.86014816e-01
ipyc_phase_fraction = 1.59496539e-01
sic_phase_fraction = 1.96561801e-01
opyc_phase_fraction = 2.37499553e-01
# Region phase fractions
TRISO_phase_fraction = 3.09266232e-01
fuel_matrix_phase_fraction = 3.01037037e-01
# Pebble geometry
rcore = 1.20000000e-02
rfuel_matrix = 1.40000000e-02
pebble_diameter = 0.03
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = 'RSPHERICAL'
[mesh]
type = CartesianMeshGenerator
dim = 1
dx = '${rcore} ${fparse rfuel_matrix - rcore} ${fparse pebble_diameter/2 -
rfuel_matrix}'
ix = '15 20 10'
subdomain_id = '0 1 2'
[]
[left]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_left'
fixed_normal = true
normal = '-1 0 0'
input = mesh
[]
[right]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_right'
fixed_normal = true
normal = '1 0 0'
input = left
[]
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_fuel_matrix]
initial_condition = ${inlet_T_fluid}
block = '1'
[]
[T_shell]
initial_condition = ${inlet_T_fluid}
block = '0 2'
[]
[]
[AuxVariables]
[fuel_matrix_heat_source]
initial_condition = ${power_density}
[]
[]
[Kernels]
inactive = 'time time2'
[time]
type = ADHeatConductionTimeDerivative
variable = T_fuel_matrix
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T_fuel_matrix
thermal_conductivity = 'k_s'
[]
[heat_source]
type = HeatSrc
variable = T_fuel_matrix
heat_source = fuel_matrix_heat_source
scaling_factor = ${fparse 1.0/fuel_matrix_phase_fraction}
[]
[time2]
type = ADHeatConductionTimeDerivative
variable = T_shell
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion2]
type = ADHeatConduction
variable = T_shell
thermal_conductivity = 'k_s'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[right]
type = PostprocessorDirichletBC
variable = T_shell
postprocessor = pebble_surface_T
boundary = 'right'
[]
[interface]
type = LinearCombinationMatchedValueBC
variable = T_fuel_matrix
v = T_shell
pp_names = 'particle_surface_T'
pp_coefs = '-1.0'
boundary = 'fm_left fm_right'
[]
[]
[InterfaceKernels]
[diffusion]
type = HeatDiffusionInterface
variable = T_fuel_matrix
neighbor_var = T_shell
boundary = 'fm_left fm_right'
k = 'k_s'
k_neighbor = 'k_s'
[]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[UserObjects]
[pyc]
type = PyroliticGraphite
[]
[buffer]
type = PorousGraphite
[]
[UO2]
type = FunctionSolidProperties
rho_s = 11000.0
cp_s = 400.0
k_s = 3.5
[]
[sic]
type = FunctionSolidProperties
rho_s = 3180.0
cp_s = 1300.0
k_s = 13.9
[]
[pebble_graphite]
type = FunctionSolidProperties
rho_s = 1600.0
cp_s = 1800.0
k_s = 15.0
[]
[triso]
type = CompositeSolidProperties
materials = 'UO2 buffer pyc sic pyc'
fractions = '${UO2_phase_fraction} ${buffer_phase_fraction}
${ipyc_phase_fraction} ${sic_phase_fraction} ${opyc_phase_fraction}'
k_mixing = 'parallel'
rho_mixing = 'parallel'
cp_mixing = 'parallel'
[]
[compact]
type = CompositeSolidProperties
materials = 'triso pebble_graphite'
fractions = '${TRISO_phase_fraction} ${fparse 1.0 - TRISO_phase_fraction}'
k_mixing = 'chiew'
rho_mixing = 'chiew'
cp_mixing = 'chiew'
[]
[pebble_core]
type = FunctionSolidProperties
rho_s = 1450.0
cp_s = 1800.0
k_s = 15.0
[]
[]
[Materials]
[fuel_matrix]
type = PronghornSolidMaterialPT
T_solid = T_fuel_matrix # dummy because all properties are constant
solid = compact
block = '1'
[]
[shell]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_graphite
block = '2'
[]
[core]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_core
block = '0'
[]
[]
# ==============================================================================
# MULTIAPPS FOR TRISO MODEL
# ==============================================================================
[MultiApps]
[particle]
type = TransientMultiApp
execute_on = 'TIMESTEP_BEGIN'
input_files = 'ss5_fuel_matrix.i'
cli_args = 'Outputs/console=false'
[]
[]
[Transfers]
[particle_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = particle
source_variable = fuel_matrix_heat_source
variable = fuel_matrix_heat_source
[]
[particle_surface_temp]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = surface_T
to_postprocessor = particle_surface_T
reduction_type = average
[]
# for visualization
[max_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = max_T_UO2
to_postprocessor = max_T_UO2_microscale
reduction_type = average
[]
[average_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_UO2
to_postprocessor = average_T_UO2_microscale
reduction_type = average
[]
[average_T_matrix]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_matrix
to_postprocessor = average_T_matrix_microscale
reduction_type = average
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
num_steps = 1
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
solve_type = PJFNK
nl_abs_tol = 1e-6
# Fixed point iteration parameters
fixed_point_force_norms = true
fixed_point_abs_tol = 1e-2
fixed_point_max_its = 5
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
[Preconditioning]
[SMP_Newton]
type = SMP
full = true
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type' #-pc_factor_mat_solver_package'
petsc_options_value = ' lu ' # mumps '
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
# receive from macroscale solution
[pebble_surface_T]
type = Receiver
default = ${inlet_T_fluid}
[]
# receive from microscale solution
[particle_surface_T]
type = Receiver
[]
[max_T_UO2_microscale]
type = Receiver
[]
[average_T_UO2_microscale]
type = Receiver
[]
[average_T_matrix_microscale]
type = Receiver
[]
# compute from present solution
[max_T_fuel_matrix_mesoscale]
type = ElementExtremeValue
variable = T_fuel_matrix
value_type = max
block = '1'
[]
[average_T_shell]
type = ElementAverageValue
variable = T_shell
block = '0 2'
[]
[average_T_fuel_matrix]
type = ElementAverageValue
variable = T_fuel_matrix
block = '1'
[]
# summations of mesoscale and microscale solutions
[max_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'max_T_UO2_microscale max_T_fuel_matrix_mesoscale'
pp_coefs = '1.0 1.0'
[]
[average_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'average_T_UO2_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[average_T_matrix]
type = LinearCombinationPostprocessor
pp_names = 'average_T_matrix_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[]
[Outputs]
exodus = false
print_linear_residuals = false
hide = 'max_T_UO2_microscale average_T_UO2_microscale average_T_matrix
average_T_matrix_microscale particle_surface_T pebble_surface_T'
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)
# ==============================================================================
# Model description
# Application : Pronghorn
# ------------------------------------------------------------------------------
# Idaho Falls, INL, November 2, 2020
# Author(s): Dr. April Novak, Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Fuel pebble heat conduction model
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
inlet_T_fluid = 8.73150000e+02
total_power = 236.0e6 # W, from [2]
model_vol = 10.4 # active fuel region volume, from [2]
power_density = ${fparse total_power / model_vol}
# Material phase fractions
UO2_phase_fraction = 1.20427291e-01
buffer_phase_fraction = 2.86014816e-01
ipyc_phase_fraction = 1.59496539e-01
sic_phase_fraction = 1.96561801e-01
opyc_phase_fraction = 2.37499553e-01
# Region phase fractions
TRISO_phase_fraction = 3.09266232e-01
fuel_matrix_phase_fraction = 3.01037037e-01
# Pebble geometry
rcore = 1.20000000e-02
rfuel_matrix = 1.40000000e-02
pebble_diameter = 0.03
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = 'RSPHERICAL'
[mesh]
type = CartesianMeshGenerator
dim = 1
dx = '${rcore} ${fparse rfuel_matrix - rcore} ${fparse pebble_diameter/2 -
rfuel_matrix}'
ix = '15 20 10'
subdomain_id = '0 1 2'
[]
[left]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_left'
fixed_normal = true
normal = '-1 0 0'
input = mesh
[]
[right]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_right'
fixed_normal = true
normal = '1 0 0'
input = left
[]
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_fuel_matrix]
initial_condition = ${inlet_T_fluid}
block = '1'
[]
[T_shell]
initial_condition = ${inlet_T_fluid}
block = '0 2'
[]
[]
[AuxVariables]
[fuel_matrix_heat_source]
initial_condition = ${power_density}
[]
[]
[Kernels]
inactive = 'time time2'
[time]
type = ADHeatConductionTimeDerivative
variable = T_fuel_matrix
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T_fuel_matrix
thermal_conductivity = 'k_s'
[]
[heat_source]
type = HeatSrc
variable = T_fuel_matrix
heat_source = fuel_matrix_heat_source
scaling_factor = ${fparse 1.0/fuel_matrix_phase_fraction}
[]
[time2]
type = ADHeatConductionTimeDerivative
variable = T_shell
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion2]
type = ADHeatConduction
variable = T_shell
thermal_conductivity = 'k_s'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[right]
type = PostprocessorDirichletBC
variable = T_shell
postprocessor = pebble_surface_T
boundary = 'right'
[]
[interface]
type = LinearCombinationMatchedValueBC
variable = T_fuel_matrix
v = T_shell
pp_names = 'particle_surface_T'
pp_coefs = '-1.0'
boundary = 'fm_left fm_right'
[]
[]
[InterfaceKernels]
[diffusion]
type = HeatDiffusionInterface
variable = T_fuel_matrix
neighbor_var = T_shell
boundary = 'fm_left fm_right'
k = 'k_s'
k_neighbor = 'k_s'
[]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[UserObjects]
[pyc]
type = PyroliticGraphite
[]
[buffer]
type = PorousGraphite
[]
[UO2]
type = FunctionSolidProperties
rho_s = 11000.0
cp_s = 400.0
k_s = 3.5
[]
[sic]
type = FunctionSolidProperties
rho_s = 3180.0
cp_s = 1300.0
k_s = 13.9
[]
[pebble_graphite]
type = FunctionSolidProperties
rho_s = 1600.0
cp_s = 1800.0
k_s = 15.0
[]
[triso]
type = CompositeSolidProperties
materials = 'UO2 buffer pyc sic pyc'
fractions = '${UO2_phase_fraction} ${buffer_phase_fraction}
${ipyc_phase_fraction} ${sic_phase_fraction} ${opyc_phase_fraction}'
k_mixing = 'parallel'
rho_mixing = 'parallel'
cp_mixing = 'parallel'
[]
[compact]
type = CompositeSolidProperties
materials = 'triso pebble_graphite'
fractions = '${TRISO_phase_fraction} ${fparse 1.0 - TRISO_phase_fraction}'
k_mixing = 'chiew'
rho_mixing = 'chiew'
cp_mixing = 'chiew'
[]
[pebble_core]
type = FunctionSolidProperties
rho_s = 1450.0
cp_s = 1800.0
k_s = 15.0
[]
[]
[Materials]
[fuel_matrix]
type = PronghornSolidMaterialPT
T_solid = T_fuel_matrix # dummy because all properties are constant
solid = compact
block = '1'
[]
[shell]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_graphite
block = '2'
[]
[core]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_core
block = '0'
[]
[]
# ==============================================================================
# MULTIAPPS FOR TRISO MODEL
# ==============================================================================
[MultiApps]
[particle]
type = TransientMultiApp
execute_on = 'TIMESTEP_BEGIN'
input_files = 'ss5_fuel_matrix.i'
cli_args = 'Outputs/console=false'
[]
[]
[Transfers]
[particle_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = particle
source_variable = fuel_matrix_heat_source
variable = fuel_matrix_heat_source
[]
[particle_surface_temp]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = surface_T
to_postprocessor = particle_surface_T
reduction_type = average
[]
# for visualization
[max_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = max_T_UO2
to_postprocessor = max_T_UO2_microscale
reduction_type = average
[]
[average_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_UO2
to_postprocessor = average_T_UO2_microscale
reduction_type = average
[]
[average_T_matrix]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_matrix
to_postprocessor = average_T_matrix_microscale
reduction_type = average
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
num_steps = 1
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
solve_type = PJFNK
nl_abs_tol = 1e-6
# Fixed point iteration parameters
fixed_point_force_norms = true
fixed_point_abs_tol = 1e-2
fixed_point_max_its = 5
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
[Preconditioning]
[SMP_Newton]
type = SMP
full = true
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type' #-pc_factor_mat_solver_package'
petsc_options_value = ' lu ' # mumps '
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
# receive from macroscale solution
[pebble_surface_T]
type = Receiver
default = ${inlet_T_fluid}
[]
# receive from microscale solution
[particle_surface_T]
type = Receiver
[]
[max_T_UO2_microscale]
type = Receiver
[]
[average_T_UO2_microscale]
type = Receiver
[]
[average_T_matrix_microscale]
type = Receiver
[]
# compute from present solution
[max_T_fuel_matrix_mesoscale]
type = ElementExtremeValue
variable = T_fuel_matrix
value_type = max
block = '1'
[]
[average_T_shell]
type = ElementAverageValue
variable = T_shell
block = '0 2'
[]
[average_T_fuel_matrix]
type = ElementAverageValue
variable = T_fuel_matrix
block = '1'
[]
# summations of mesoscale and microscale solutions
[max_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'max_T_UO2_microscale max_T_fuel_matrix_mesoscale'
pp_coefs = '1.0 1.0'
[]
[average_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'average_T_UO2_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[average_T_matrix]
type = LinearCombinationPostprocessor
pp_names = 'average_T_matrix_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[]
[Outputs]
exodus = false
print_linear_residuals = false
hide = 'max_T_UO2_microscale average_T_UO2_microscale average_T_matrix
average_T_matrix_microscale particle_surface_T pebble_surface_T'
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)
# ==============================================================================
# Model description
# Application : Pronghorn
# ------------------------------------------------------------------------------
# Idaho Falls, INL, November 2, 2020
# Author(s): Dr. April Novak, Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Fuel pebble heat conduction model
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
inlet_T_fluid = 8.73150000e+02
total_power = 236.0e6 # W, from [2]
model_vol = 10.4 # active fuel region volume, from [2]
power_density = ${fparse total_power / model_vol}
# Material phase fractions
UO2_phase_fraction = 1.20427291e-01
buffer_phase_fraction = 2.86014816e-01
ipyc_phase_fraction = 1.59496539e-01
sic_phase_fraction = 1.96561801e-01
opyc_phase_fraction = 2.37499553e-01
# Region phase fractions
TRISO_phase_fraction = 3.09266232e-01
fuel_matrix_phase_fraction = 3.01037037e-01
# Pebble geometry
rcore = 1.20000000e-02
rfuel_matrix = 1.40000000e-02
pebble_diameter = 0.03
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = 'RSPHERICAL'
[mesh]
type = CartesianMeshGenerator
dim = 1
dx = '${rcore} ${fparse rfuel_matrix - rcore} ${fparse pebble_diameter/2 -
rfuel_matrix}'
ix = '15 20 10'
subdomain_id = '0 1 2'
[]
[left]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_left'
fixed_normal = true
normal = '-1 0 0'
input = mesh
[]
[right]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_right'
fixed_normal = true
normal = '1 0 0'
input = left
[]
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_fuel_matrix]
initial_condition = ${inlet_T_fluid}
block = '1'
[]
[T_shell]
initial_condition = ${inlet_T_fluid}
block = '0 2'
[]
[]
[AuxVariables]
[fuel_matrix_heat_source]
initial_condition = ${power_density}
[]
[]
[Kernels]
inactive = 'time time2'
[time]
type = ADHeatConductionTimeDerivative
variable = T_fuel_matrix
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T_fuel_matrix
thermal_conductivity = 'k_s'
[]
[heat_source]
type = HeatSrc
variable = T_fuel_matrix
heat_source = fuel_matrix_heat_source
scaling_factor = ${fparse 1.0/fuel_matrix_phase_fraction}
[]
[time2]
type = ADHeatConductionTimeDerivative
variable = T_shell
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion2]
type = ADHeatConduction
variable = T_shell
thermal_conductivity = 'k_s'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[right]
type = PostprocessorDirichletBC
variable = T_shell
postprocessor = pebble_surface_T
boundary = 'right'
[]
[interface]
type = LinearCombinationMatchedValueBC
variable = T_fuel_matrix
v = T_shell
pp_names = 'particle_surface_T'
pp_coefs = '-1.0'
boundary = 'fm_left fm_right'
[]
[]
[InterfaceKernels]
[diffusion]
type = HeatDiffusionInterface
variable = T_fuel_matrix
neighbor_var = T_shell
boundary = 'fm_left fm_right'
k = 'k_s'
k_neighbor = 'k_s'
[]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[UserObjects]
[pyc]
type = PyroliticGraphite
[]
[buffer]
type = PorousGraphite
[]
[UO2]
type = FunctionSolidProperties
rho_s = 11000.0
cp_s = 400.0
k_s = 3.5
[]
[sic]
type = FunctionSolidProperties
rho_s = 3180.0
cp_s = 1300.0
k_s = 13.9
[]
[pebble_graphite]
type = FunctionSolidProperties
rho_s = 1600.0
cp_s = 1800.0
k_s = 15.0
[]
[triso]
type = CompositeSolidProperties
materials = 'UO2 buffer pyc sic pyc'
fractions = '${UO2_phase_fraction} ${buffer_phase_fraction}
${ipyc_phase_fraction} ${sic_phase_fraction} ${opyc_phase_fraction}'
k_mixing = 'parallel'
rho_mixing = 'parallel'
cp_mixing = 'parallel'
[]
[compact]
type = CompositeSolidProperties
materials = 'triso pebble_graphite'
fractions = '${TRISO_phase_fraction} ${fparse 1.0 - TRISO_phase_fraction}'
k_mixing = 'chiew'
rho_mixing = 'chiew'
cp_mixing = 'chiew'
[]
[pebble_core]
type = FunctionSolidProperties
rho_s = 1450.0
cp_s = 1800.0
k_s = 15.0
[]
[]
[Materials]
[fuel_matrix]
type = PronghornSolidMaterialPT
T_solid = T_fuel_matrix # dummy because all properties are constant
solid = compact
block = '1'
[]
[shell]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_graphite
block = '2'
[]
[core]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_core
block = '0'
[]
[]
# ==============================================================================
# MULTIAPPS FOR TRISO MODEL
# ==============================================================================
[MultiApps]
[particle]
type = TransientMultiApp
execute_on = 'TIMESTEP_BEGIN'
input_files = 'ss5_fuel_matrix.i'
cli_args = 'Outputs/console=false'
[]
[]
[Transfers]
[particle_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = particle
source_variable = fuel_matrix_heat_source
variable = fuel_matrix_heat_source
[]
[particle_surface_temp]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = surface_T
to_postprocessor = particle_surface_T
reduction_type = average
[]
# for visualization
[max_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = max_T_UO2
to_postprocessor = max_T_UO2_microscale
reduction_type = average
[]
[average_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_UO2
to_postprocessor = average_T_UO2_microscale
reduction_type = average
[]
[average_T_matrix]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_matrix
to_postprocessor = average_T_matrix_microscale
reduction_type = average
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
num_steps = 1
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
solve_type = PJFNK
nl_abs_tol = 1e-6
# Fixed point iteration parameters
fixed_point_force_norms = true
fixed_point_abs_tol = 1e-2
fixed_point_max_its = 5
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
[Preconditioning]
[SMP_Newton]
type = SMP
full = true
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type' #-pc_factor_mat_solver_package'
petsc_options_value = ' lu ' # mumps '
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
# receive from macroscale solution
[pebble_surface_T]
type = Receiver
default = ${inlet_T_fluid}
[]
# receive from microscale solution
[particle_surface_T]
type = Receiver
[]
[max_T_UO2_microscale]
type = Receiver
[]
[average_T_UO2_microscale]
type = Receiver
[]
[average_T_matrix_microscale]
type = Receiver
[]
# compute from present solution
[max_T_fuel_matrix_mesoscale]
type = ElementExtremeValue
variable = T_fuel_matrix
value_type = max
block = '1'
[]
[average_T_shell]
type = ElementAverageValue
variable = T_shell
block = '0 2'
[]
[average_T_fuel_matrix]
type = ElementAverageValue
variable = T_fuel_matrix
block = '1'
[]
# summations of mesoscale and microscale solutions
[max_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'max_T_UO2_microscale max_T_fuel_matrix_mesoscale'
pp_coefs = '1.0 1.0'
[]
[average_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'average_T_UO2_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[average_T_matrix]
type = LinearCombinationPostprocessor
pp_names = 'average_T_matrix_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[]
[Outputs]
exodus = false
print_linear_residuals = false
hide = 'max_T_UO2_microscale average_T_UO2_microscale average_T_matrix
average_T_matrix_microscale particle_surface_T pebble_surface_T'
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)
# ==============================================================================
# Model description
# Application : Pronghorn
# ------------------------------------------------------------------------------
# Idaho Falls, INL, November 2, 2020
# Author(s): Dr. April Novak, Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Fuel pebble heat conduction model
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
inlet_T_fluid = 8.73150000e+02
total_power = 236.0e6 # W, from [2]
model_vol = 10.4 # active fuel region volume, from [2]
power_density = ${fparse total_power / model_vol}
# Material phase fractions
UO2_phase_fraction = 1.20427291e-01
buffer_phase_fraction = 2.86014816e-01
ipyc_phase_fraction = 1.59496539e-01
sic_phase_fraction = 1.96561801e-01
opyc_phase_fraction = 2.37499553e-01
# Region phase fractions
TRISO_phase_fraction = 3.09266232e-01
fuel_matrix_phase_fraction = 3.01037037e-01
# Pebble geometry
rcore = 1.20000000e-02
rfuel_matrix = 1.40000000e-02
pebble_diameter = 0.03
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = 'RSPHERICAL'
[mesh]
type = CartesianMeshGenerator
dim = 1
dx = '${rcore} ${fparse rfuel_matrix - rcore} ${fparse pebble_diameter/2 -
rfuel_matrix}'
ix = '15 20 10'
subdomain_id = '0 1 2'
[]
[left]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_left'
fixed_normal = true
normal = '-1 0 0'
input = mesh
[]
[right]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_right'
fixed_normal = true
normal = '1 0 0'
input = left
[]
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_fuel_matrix]
initial_condition = ${inlet_T_fluid}
block = '1'
[]
[T_shell]
initial_condition = ${inlet_T_fluid}
block = '0 2'
[]
[]
[AuxVariables]
[fuel_matrix_heat_source]
initial_condition = ${power_density}
[]
[]
[Kernels]
inactive = 'time time2'
[time]
type = ADHeatConductionTimeDerivative
variable = T_fuel_matrix
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T_fuel_matrix
thermal_conductivity = 'k_s'
[]
[heat_source]
type = HeatSrc
variable = T_fuel_matrix
heat_source = fuel_matrix_heat_source
scaling_factor = ${fparse 1.0/fuel_matrix_phase_fraction}
[]
[time2]
type = ADHeatConductionTimeDerivative
variable = T_shell
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion2]
type = ADHeatConduction
variable = T_shell
thermal_conductivity = 'k_s'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[right]
type = PostprocessorDirichletBC
variable = T_shell
postprocessor = pebble_surface_T
boundary = 'right'
[]
[interface]
type = LinearCombinationMatchedValueBC
variable = T_fuel_matrix
v = T_shell
pp_names = 'particle_surface_T'
pp_coefs = '-1.0'
boundary = 'fm_left fm_right'
[]
[]
[InterfaceKernels]
[diffusion]
type = HeatDiffusionInterface
variable = T_fuel_matrix
neighbor_var = T_shell
boundary = 'fm_left fm_right'
k = 'k_s'
k_neighbor = 'k_s'
[]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[UserObjects]
[pyc]
type = PyroliticGraphite
[]
[buffer]
type = PorousGraphite
[]
[UO2]
type = FunctionSolidProperties
rho_s = 11000.0
cp_s = 400.0
k_s = 3.5
[]
[sic]
type = FunctionSolidProperties
rho_s = 3180.0
cp_s = 1300.0
k_s = 13.9
[]
[pebble_graphite]
type = FunctionSolidProperties
rho_s = 1600.0
cp_s = 1800.0
k_s = 15.0
[]
[triso]
type = CompositeSolidProperties
materials = 'UO2 buffer pyc sic pyc'
fractions = '${UO2_phase_fraction} ${buffer_phase_fraction}
${ipyc_phase_fraction} ${sic_phase_fraction} ${opyc_phase_fraction}'
k_mixing = 'parallel'
rho_mixing = 'parallel'
cp_mixing = 'parallel'
[]
[compact]
type = CompositeSolidProperties
materials = 'triso pebble_graphite'
fractions = '${TRISO_phase_fraction} ${fparse 1.0 - TRISO_phase_fraction}'
k_mixing = 'chiew'
rho_mixing = 'chiew'
cp_mixing = 'chiew'
[]
[pebble_core]
type = FunctionSolidProperties
rho_s = 1450.0
cp_s = 1800.0
k_s = 15.0
[]
[]
[Materials]
[fuel_matrix]
type = PronghornSolidMaterialPT
T_solid = T_fuel_matrix # dummy because all properties are constant
solid = compact
block = '1'
[]
[shell]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_graphite
block = '2'
[]
[core]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_core
block = '0'
[]
[]
# ==============================================================================
# MULTIAPPS FOR TRISO MODEL
# ==============================================================================
[MultiApps]
[particle]
type = TransientMultiApp
execute_on = 'TIMESTEP_BEGIN'
input_files = 'ss5_fuel_matrix.i'
cli_args = 'Outputs/console=false'
[]
[]
[Transfers]
[particle_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = particle
source_variable = fuel_matrix_heat_source
variable = fuel_matrix_heat_source
[]
[particle_surface_temp]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = surface_T
to_postprocessor = particle_surface_T
reduction_type = average
[]
# for visualization
[max_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = max_T_UO2
to_postprocessor = max_T_UO2_microscale
reduction_type = average
[]
[average_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_UO2
to_postprocessor = average_T_UO2_microscale
reduction_type = average
[]
[average_T_matrix]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_matrix
to_postprocessor = average_T_matrix_microscale
reduction_type = average
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
num_steps = 1
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
solve_type = PJFNK
nl_abs_tol = 1e-6
# Fixed point iteration parameters
fixed_point_force_norms = true
fixed_point_abs_tol = 1e-2
fixed_point_max_its = 5
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
[Preconditioning]
[SMP_Newton]
type = SMP
full = true
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type' #-pc_factor_mat_solver_package'
petsc_options_value = ' lu ' # mumps '
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
# receive from macroscale solution
[pebble_surface_T]
type = Receiver
default = ${inlet_T_fluid}
[]
# receive from microscale solution
[particle_surface_T]
type = Receiver
[]
[max_T_UO2_microscale]
type = Receiver
[]
[average_T_UO2_microscale]
type = Receiver
[]
[average_T_matrix_microscale]
type = Receiver
[]
# compute from present solution
[max_T_fuel_matrix_mesoscale]
type = ElementExtremeValue
variable = T_fuel_matrix
value_type = max
block = '1'
[]
[average_T_shell]
type = ElementAverageValue
variable = T_shell
block = '0 2'
[]
[average_T_fuel_matrix]
type = ElementAverageValue
variable = T_fuel_matrix
block = '1'
[]
# summations of mesoscale and microscale solutions
[max_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'max_T_UO2_microscale max_T_fuel_matrix_mesoscale'
pp_coefs = '1.0 1.0'
[]
[average_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'average_T_UO2_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[average_T_matrix]
type = LinearCombinationPostprocessor
pp_names = 'average_T_matrix_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[]
[Outputs]
exodus = false
print_linear_residuals = false
hide = 'max_T_UO2_microscale average_T_UO2_microscale average_T_matrix
average_T_matrix_microscale particle_surface_T pebble_surface_T'
[]
(pbfhr/mark1/steady/ss4_fuel_pebble.i)
# ==============================================================================
# Model description
# Application : Pronghorn
# ------------------------------------------------------------------------------
# Idaho Falls, INL, November 2, 2020
# Author(s): Dr. April Novak, Dr. Guillaume Giudicelli, Dr. Paolo Balestra
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================
# - Fuel pebble heat conduction model
# ==============================================================================
# - The Model has been built based on [1-2].
# ------------------------------------------------------------------------------
# [1] Multiscale Core Thermal Hydraulics Analysis of the Pebble Bed Fluoride
# Salt Cooled High Temperature Reactor (PB-FHR), A. Novak et al.
# [2] Technical Description of the “Mark 1” Pebble-Bed Fluoride-Salt-Cooled
# High-Temperature Reactor (PB-FHR) Power Plant, UC Berkeley report 14-002
# ==============================================================================
# MODEL PARAMETERS
# ==============================================================================
# Problem Parameters -----------------------------------------------------------
inlet_T_fluid = 8.73150000e+02
total_power = 236.0e6 # W, from [2]
model_vol = 10.4 # active fuel region volume, from [2]
power_density = ${fparse total_power / model_vol}
# Material phase fractions
UO2_phase_fraction = 1.20427291e-01
buffer_phase_fraction = 2.86014816e-01
ipyc_phase_fraction = 1.59496539e-01
sic_phase_fraction = 1.96561801e-01
opyc_phase_fraction = 2.37499553e-01
# Region phase fractions
TRISO_phase_fraction = 3.09266232e-01
fuel_matrix_phase_fraction = 3.01037037e-01
# Pebble geometry
rcore = 1.20000000e-02
rfuel_matrix = 1.40000000e-02
pebble_diameter = 0.03
# ==============================================================================
# GEOMETRY AND MESH
# ==============================================================================
[Mesh]
coord_type = 'RSPHERICAL'
[mesh]
type = CartesianMeshGenerator
dim = 1
dx = '${rcore} ${fparse rfuel_matrix - rcore} ${fparse pebble_diameter/2 -
rfuel_matrix}'
ix = '15 20 10'
subdomain_id = '0 1 2'
[]
[left]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_left'
fixed_normal = true
normal = '-1 0 0'
input = mesh
[]
[right]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'fm_right'
fixed_normal = true
normal = '1 0 0'
input = left
[]
[]
# ==============================================================================
# VARIABLES AND KERNELS
# ==============================================================================
[Variables]
[T_fuel_matrix]
initial_condition = ${inlet_T_fluid}
block = '1'
[]
[T_shell]
initial_condition = ${inlet_T_fluid}
block = '0 2'
[]
[]
[AuxVariables]
[fuel_matrix_heat_source]
initial_condition = ${power_density}
[]
[]
[Kernels]
inactive = 'time time2'
[time]
type = ADHeatConductionTimeDerivative
variable = T_fuel_matrix
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion]
type = ADHeatConduction
variable = T_fuel_matrix
thermal_conductivity = 'k_s'
[]
[heat_source]
type = HeatSrc
variable = T_fuel_matrix
heat_source = fuel_matrix_heat_source
scaling_factor = ${fparse 1.0/fuel_matrix_phase_fraction}
[]
[time2]
type = ADHeatConductionTimeDerivative
variable = T_shell
specific_heat = 'cp_s'
density_name = 'rho_s'
[]
[diffusion2]
type = ADHeatConduction
variable = T_shell
thermal_conductivity = 'k_s'
[]
[]
# ==============================================================================
# BOUNDARY CONDITIONS
# ==============================================================================
[BCs]
[right]
type = PostprocessorDirichletBC
variable = T_shell
postprocessor = pebble_surface_T
boundary = 'right'
[]
[interface]
type = LinearCombinationMatchedValueBC
variable = T_fuel_matrix
v = T_shell
pp_names = 'particle_surface_T'
pp_coefs = '-1.0'
boundary = 'fm_left fm_right'
[]
[]
[InterfaceKernels]
[diffusion]
type = HeatDiffusionInterface
variable = T_fuel_matrix
neighbor_var = T_shell
boundary = 'fm_left fm_right'
k = 'k_s'
k_neighbor = 'k_s'
[]
[]
# ==============================================================================
# FLUID PROPERTIES, MATERIALS AND USER OBJECTS
# ==============================================================================
[UserObjects]
[pyc]
type = PyroliticGraphite
[]
[buffer]
type = PorousGraphite
[]
[UO2]
type = FunctionSolidProperties
rho_s = 11000.0
cp_s = 400.0
k_s = 3.5
[]
[sic]
type = FunctionSolidProperties
rho_s = 3180.0
cp_s = 1300.0
k_s = 13.9
[]
[pebble_graphite]
type = FunctionSolidProperties
rho_s = 1600.0
cp_s = 1800.0
k_s = 15.0
[]
[triso]
type = CompositeSolidProperties
materials = 'UO2 buffer pyc sic pyc'
fractions = '${UO2_phase_fraction} ${buffer_phase_fraction}
${ipyc_phase_fraction} ${sic_phase_fraction} ${opyc_phase_fraction}'
k_mixing = 'parallel'
rho_mixing = 'parallel'
cp_mixing = 'parallel'
[]
[compact]
type = CompositeSolidProperties
materials = 'triso pebble_graphite'
fractions = '${TRISO_phase_fraction} ${fparse 1.0 - TRISO_phase_fraction}'
k_mixing = 'chiew'
rho_mixing = 'chiew'
cp_mixing = 'chiew'
[]
[pebble_core]
type = FunctionSolidProperties
rho_s = 1450.0
cp_s = 1800.0
k_s = 15.0
[]
[]
[Materials]
[fuel_matrix]
type = PronghornSolidMaterialPT
T_solid = T_fuel_matrix # dummy because all properties are constant
solid = compact
block = '1'
[]
[shell]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_graphite
block = '2'
[]
[core]
type = PronghornSolidMaterialPT
T_solid = T_shell
solid = pebble_core
block = '0'
[]
[]
# ==============================================================================
# MULTIAPPS FOR TRISO MODEL
# ==============================================================================
[MultiApps]
[particle]
type = TransientMultiApp
execute_on = 'TIMESTEP_BEGIN'
input_files = 'ss5_fuel_matrix.i'
cli_args = 'Outputs/console=false'
[]
[]
[Transfers]
[particle_heat_source]
type = MultiAppVariableValueSampleTransfer
to_multi_app = particle
source_variable = fuel_matrix_heat_source
variable = fuel_matrix_heat_source
[]
[particle_surface_temp]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = surface_T
to_postprocessor = particle_surface_T
reduction_type = average
[]
# for visualization
[max_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = max_T_UO2
to_postprocessor = max_T_UO2_microscale
reduction_type = average
[]
[average_T_UO2]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_UO2
to_postprocessor = average_T_UO2_microscale
reduction_type = average
[]
[average_T_matrix]
type = MultiAppPostprocessorTransfer
from_multi_app = particle
from_postprocessor = average_T_matrix
to_postprocessor = average_T_matrix_microscale
reduction_type = average
[]
[]
# ==============================================================================
# EXECUTION PARAMETERS
# ==============================================================================
[Executioner]
type = Transient
num_steps = 1
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
solve_type = PJFNK
nl_abs_tol = 1e-6
# Fixed point iteration parameters
fixed_point_force_norms = true
fixed_point_abs_tol = 1e-2
fixed_point_max_its = 5
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
cutback_factor = 0.5
growth_factor = 4.0
[]
[]
[Preconditioning]
[SMP_Newton]
type = SMP
full = true
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type' #-pc_factor_mat_solver_package'
petsc_options_value = ' lu ' # mumps '
[]
[]
# ==============================================================================
# POSTPROCESSORS DEBUG AND OUTPUTS
# ==============================================================================
[Postprocessors]
# receive from macroscale solution
[pebble_surface_T]
type = Receiver
default = ${inlet_T_fluid}
[]
# receive from microscale solution
[particle_surface_T]
type = Receiver
[]
[max_T_UO2_microscale]
type = Receiver
[]
[average_T_UO2_microscale]
type = Receiver
[]
[average_T_matrix_microscale]
type = Receiver
[]
# compute from present solution
[max_T_fuel_matrix_mesoscale]
type = ElementExtremeValue
variable = T_fuel_matrix
value_type = max
block = '1'
[]
[average_T_shell]
type = ElementAverageValue
variable = T_shell
block = '0 2'
[]
[average_T_fuel_matrix]
type = ElementAverageValue
variable = T_fuel_matrix
block = '1'
[]
# summations of mesoscale and microscale solutions
[max_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'max_T_UO2_microscale max_T_fuel_matrix_mesoscale'
pp_coefs = '1.0 1.0'
[]
[average_T_UO2]
type = LinearCombinationPostprocessor
pp_names = 'average_T_UO2_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[average_T_matrix]
type = LinearCombinationPostprocessor
pp_names = 'average_T_matrix_microscale average_T_fuel_matrix'
pp_coefs = '1.0 1.0'
[]
[]
[Outputs]
exodus = false
print_linear_residuals = false
hide = 'max_T_UO2_microscale average_T_UO2_microscale average_T_matrix
average_T_matrix_microscale particle_surface_T pebble_surface_T'
[]