GPBR200 Pebble Thermomechanics with Bison

Contact: Zachary M. Prince, [email protected]

Model link: GPBR200 Bison Model

Here the input for the Bison-related physics (Williamson et al., 2021) of the GPBR200 model is presented. These physics include the heat conduction within a representative TRISO particle and a representative pebble matrix. This stand-alone input will be utilized later in Multiphysics Coupling to account for coupling with neutronics and thermal hydraulics. The details of this pebble model is presented in Prince et al. (2024); as such, this exposition will focus on explaining specific aspects of the input file.

Input File Variables

Most of the input file variables in this input are presented in the neutronics model. The two unique ones are the initial_temperature and initial_power, which are used to populate the heat source and BCs of the simulation. Eventually, these values will become irrelevant since the neutronics model with populate these values via coupling.

# Geometry ---------------------------------------------------------------------
pebble_radius = 3.0e-2 # pebble radius (m)
pebble_shell_thickness = 5.0e-03 # pebble fuel free zone thickness (graphite shell) (m)
pebble_volume = '${fparse 4/3*pi*pebble_radius^3}' # volume of the pebble (m3)
pebble_core_volume = '${fparse 4/3*pi*(pebble_radius-pebble_shell_thickness)^3}' # volume of the pebble occupied by TRISO (m3)

kernel_radius = 2.1250e-04 # kernel particle radius (m)
kernel_volume = '${fparse 4/3*pi*kernel_radius^3}' # volume of the kernel (m3)
buffer_thickness = 1.00e-04 # Thickness of buffer (m)
ipyc_thickness = 4.00e-05 # Thickness of IPyC (m)
sic_thickness = 3.50e-05 # Thickness of SiC (m)
opyc_thickness = 4.00e-05 # Thickness of OPyC (m)

triso_radius = '${fparse kernel_radius + buffer_thickness + ipyc_thickness + sic_thickness + opyc_thickness}'
triso_volume = '${fparse 4/3*pi*triso_radius^3}' # volume of the particle (m3)

filling_factor = 0.0934404551647307 # Particle filling factor

# ICs --------------------------------------------------------------------------
initial_temperature = 1000.0 # (K)
initial_power = 10e6 # (W)

# ==============================================================================
(htgr/gpbr200/pebble_thermomechanics/gpbr200_ss_bsht_pebble_triso.i)

Mesh

This input represents a relatively simple 1D R-spherical model of both the pebble matrix and TRISO particle. The input creates a mesh for each of these geometries and combines them to create a single, disjoint mesh.

[Mesh]
  block_id = '     1     2      3      4    5   6    7'
  block_name = 'core shell kernel buffer ipyc sic opyc'
  coord_type = RSPHERICAL
  [pebble_mesh]
    type = CartesianMeshGenerator
    dim = 1
    # Uniform mesh.
    dx = '2.50e-02 5.00e-03'
    ix = '15 3'
    subdomain_id = '1 2'
  []
  [triso_mesh]
    type = CartesianMeshGenerator
    dim = 1
    # Uniform mesh.
    dx = '${kernel_radius} ${buffer_thickness} ${ipyc_thickness} ${sic_thickness} ${opyc_thickness}'
    ix = '21 8 3 3 3'
    subdomain_id = '3 4 5 6 7'
  []
  [mesh_combine]
    type = CombinerGenerator
    inputs = 'pebble_mesh triso_mesh'
  []
  [pebble_surface]
    type = SideSetsAroundSubdomainGenerator
    input = mesh_combine
    block = '2'
    fixed_normal = 1
    normal = '1 0 0'
    new_boundary = pebble_surface
  []
  [triso_surface]
    type = SideSetsAroundSubdomainGenerator
    input = pebble_surface
    block = '7'
    fixed_normal = 1
    normal = '1 0 0'
    new_boundary = triso_surface
  []
[]
(htgr/gpbr200/pebble_thermomechanics/gpbr200_ss_bsht_pebble_triso.i)

Physics

Variables

A temperature variable is defined on each of the two domains, one for the pebble temperature and TRISO temperature.

[Variables]
  [T_pebble]
    block = '1 2'
    initial_condition = ${initial_temperature}
  []
  [T_triso]
    block = '3 4 5 6 7'
    initial_condition = ${initial_temperature}
  []
[]
(htgr/gpbr200/pebble_thermomechanics/gpbr200_ss_bsht_pebble_triso.i)

Kernels

This steady-state heat conduction input defines a heat diffusion and source kernel for each variable. The source for the pebble domain occurs in the "core" region of the pebble, i.e. where the TRISO particles are embedded. The source for the TRISO domain occurs in the fuel kernel. For both of the sources, the power density comes from the porous_media_power_density postprocessor. The postprocessor is a constant value for now, but will eventually be populated by the neutronics model. The power density is scaled such that integration over just the fueled regions obtains the full power.

[Kernels]
  # Pebble
  [pebble_diffusion]
    type = ADHeatConduction
    variable = T_pebble
    block = '1 2'
  []
  [pebble_core_heat_source]
    type = BodyForce
    variable = T_pebble
    postprocessor = porous_media_power_density
    value = '${fparse pebble_volume/pebble_core_volume}'
    block = '1'
  []
  # TRISO
  [triso_diffusion]
    type = ADHeatConduction
    variable = T_triso
    block = '3 4 5 6 7'
  []
  [kernel_heat_source]
    type = BodyForce
    variable = T_triso
    postprocessor = porous_media_power_density
    value = '${fparse pebble_volume*triso_volume/filling_factor/pebble_core_volume/kernel_volume}'
    block = '3'
  []
[]

[Postprocessors]
  [porous_media_power_density]
    type = Receiver
    default = ${initial_power}
  []
[]
(htgr/gpbr200/pebble_thermomechanics/gpbr200_ss_bsht_pebble_triso.i)

Boundary Conditions

The surface temperature for the pebble is defined by the pebble_surface_temp postprocessor, which is constant for this exposition, but will eventually come from Pronghorn solid heat conduction solve.

[BCs]
  [pebble_surface_temp]
    type = PostprocessorDirichletBC
    variable = T_pebble
    postprocessor = pebble_surface_temp
    boundary = 'pebble_surface'
  []
[]

[Postprocessors]
  [pebble_surface_temp]
    type = Receiver
    default = ${initial_temperature}
  []
[]
(htgr/gpbr200/pebble_thermomechanics/gpbr200_ss_bsht_pebble_triso.i)

The pebble and kernel temperatures are coupled via the boundary condition on the surface of the kernel. This temperature is defined as the average temperature of the fueled region of the pebble; evaluated by the pebble_core_average_temp postprocessor.

[BCs]
  [triso_surface_temp]
    type = PostprocessorDirichletBC
    variable = T_triso
    postprocessor = pebble_core_average_temp
    boundary = 'triso_surface'
  []
[]

[Postprocessors]
  [pebble_core_average_temp]
    type = ElementAverageValue
    variable = T_pebble
    block = '1'
    execute_on = 'LINEAR'
  []
[]
(htgr/gpbr200/pebble_thermomechanics/gpbr200_ss_bsht_pebble_triso.i)

Materials

This input employs materials commonly used for TRISO compacts. Some of the parameters are not relevant to this model, but are required by the objects. This includes parameters related to specific heat, density, and neutron damage.

[Materials]
  # Pebble.
  [pebble_core]
    type = ADGraphiteMatrixThermal
    block = '1'
    temperature = T_pebble
    graphite_grade = A3_3_1800
    packing_fraction = ${filling_factor}
    flux_conversion_factor = 1.0 # Only used for irradiation correction
    fast_neutron_fluence = 10e25
  []
  [pebble_shell]
    type = ADGraphiteMatrixThermal
    block = '2'
    temperature = T_pebble
    graphite_grade = A3_3_1800
    packing_fraction = 0
    flux_conversion_factor = 0.8 # Only used for irradiation correction
    fast_neutron_fluence = 10e25
  []

  # TRISO.
  [kernel]
    type = ADUCOThermal
    block = '3'
    temperature = T_triso
    # These do not matter since they are only relevant to heat capacity
    initial_enrichment = 0.155
    O_U = 1.5
    C_U = 0.4
  []
  [buffer]
    type = ADBufferThermal
    block = '4'
    initial_density = 1050.0
  []
  [ipyc]
    type = ADHeatConductionMaterial
    block = '5'
    thermal_conductivity = 4.0
    specific_heat = 1900.0
  []
  [sic]
    type = ADMonolithicSiCThermal
    block = '6'
    temperature = T_triso
    thermal_conductivity_model = MILLER
  []
  [opyc]
    type = ADHeatConductionMaterial
    block = '7'
    thermal_conductivity = 4.0
    specific_heat = 1900.0
  []

  # Density
  [density]
    type = ADPiecewiseConstantByBlockMaterial
    prop_name = 'density'
    subdomain_to_prop_value = '1 1740.0
                               2 1740.0
                               3 10500.0
                               4 1050.0
                               5 1900.0
                               6 3180.0
                               7 1900.0'
  []
[]
(htgr/gpbr200/pebble_thermomechanics/gpbr200_ss_bsht_pebble_triso.i)

Executioner

Since this model involves a steady-state equilibrium core, the input uses the Steady executioner. The solver options shown are typical for nonlinear heat conduction problems. The input focuses on the absolute tolerance for convergence since the simulation gets rerun many times in the coupled simulation with marginally different power density, where relying on a relative tolerance could make the solver run into issues with round-off error.

[Executioner]
  type = Steady
  petsc_options_iname = '-pc_type -pc_hypre_type'
  petsc_options_value = 'hypre boomeramg'
  line_search = 'l2'

  # Linear/nonlinear iterations.
  nl_rel_tol = 1e-40
  nl_abs_tol = 1e-9
[]
(htgr/gpbr200/pebble_thermomechanics/gpbr200_ss_bsht_pebble_triso.i)

Postprocessing

There are two postprocessors computed in the simulation, used later for cross-section evaluation.

[Postprocessors]
  [fuel_average_temp]
    type = ElementAverageValue
    variable = T_triso
    block = ' 3 '
  []

  [moderator_average_temp]
    type = ElementAverageValue
    variable = T_pebble
    block = ' 1 2 '
  []
[]
(htgr/gpbr200/pebble_thermomechanics/gpbr200_ss_bsht_pebble_triso.i)

Results

The input can be run using a bison-opt or blue_crab-opt executable on a single processor; the execution time is essentially instantaneous.


blue_crab-opt -i gpbr200_ss_bsht_pebble_triso.i

The resulting fuel and moderator average temperatures for this stand-alone model are 1156 K and 1091 K, respectively.

References

  1. Zachary M. Prince, Paolo Balestra, Javier Ortensi, Sebastian Schunert, Olin Calvin, Joshua T. Hanophy, Kun Mo, and Gerhard Strydom. Sensitivity analysis, surrogate modeling, and optimization of pebble-bed reactors considering normal and accident conditions. Nuclear Engineering and Design, 428:113466, 2024. doi:https://doi.org/10.1016/j.nucengdes.2024.113466.[BibTeX]
  2. Richard L. Williamson, Jason D. Hales, Stephen R. Novascone, Giovanni Pastore, Kyle A. Gamble, Benjamin W. Spencer, Wen Jiang, Stephanie A. Pitts, Albert Casagranda, Daniel Schwen, Adam X. Zabriskie, Aysenur Toptan, Russell Gardner, Christoper Matthews, Wenfeng Liu, and Hailong Chen. Bison: a flexible code for advanced simulation of the performance of multiple nuclear fuel forms. Nuclear Technology, 207(7):1–27, 2021. URL: https://doi.org/10.1080/00295450.2020.1836940, doi:10.1080/00295450.2020.1836940.[BibTeX]