- temperatureCoupled temperature of the boundary.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled temperature of the boundary.
- variableThe name of the variable that this object applies to
C++ Type:AuxVariableName
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this object applies to
DiffusionalEutecticThicknessFCCI
Computes diffusion-controlled eutectic penetration thickness with a boundary temperature.
Description
The DiffusionalEutecticThicknessFCCI AuxKernel is used to calculate the eutectic penetration thickness via a diffusional model for Fuel-Clad Chemical Interation (FCCI) of metal fuels when the temperature is above the eutectic melting temperature. The model is developed for the uranium-iron system, the two major elements impacting FCCI. The penetration thickness refers to the thickness of the liquid layer that forms. This layer may only grow or remain the same. The DiffusionalEutecticThicknessFCCI model is similar to the EutecticThicknessFCCI model, but provides diffusion-based kinetics instead of linear kinetics.
For a temperature, , greater than the U-Fe eutectic temperature, K, the new eutectic thickness model predicts a penetration depth, , of eutectic liquid as a result of fuel-cladding chemical interaction as
where is time and is a constant for a given temperature in Kelvin. Note that this model assumes a constant temperature.
The BISON implementation must handle non-constant temperature histories. For example, the local temperature may be less than for some time before increasing above ; or the local temperature may decrease below after some time above . The temperature may also vary while . To handle these cases, the BISON model transforms the above equation into an incremental form. The equation for the penetration depth is discretized as
where is the current time step, is the previous time step, is the time step increment, and is the rate of change of the layer thickness. The equation for is given as
where is the amount of time that , found by summing the time step increments over which is continuously greater than or equal to , unless the time step is the first in which . In that case, . If the temperature has been above and then drops below , it is assumed that solidification occurs instantaneously and the layer thickness and are both returned to zero. The value of is calculated for the given temperature at the current time step, the details of which are described in the companion lower length scale milestone document Jiang et al. (2019). In the BISON implementation, it is assumed that this will not affect the correctness of the results.
Example Input Syntax
[AuxKernels<<<{"href": "../../syntax/AuxKernels/index.html"}>>>]
[fcci_eutectic]
boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = right
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_end
type = DiffusionalEutecticThicknessFCCI<<<{"description": "Computes diffusion-controlled eutectic penetration thickness with a boundary temperature.", "href": "DiffusionalEutecticThicknessFCCI.html"}>>>
temperature<<<{"description": "Coupled temperature of the boundary."}>>> = temperature
variable<<<{"description": "The name of the variable that this object applies to"}>>> = thickness
[]
[](test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_1000K.i)Input Parameters
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- check_boundary_restrictedTrueWhether to check for multiple element sides on the boundary in the case of a boundary restricted, element aux variable. Setting this to false will allow contribution to a single element's elemental value(s) from multiple boundary sides on the same element (example: when the restricted boundary exists on two or more sides of an element, such as at a corner of a mesh
Default:True
C++ Type:bool
Controllable:No
Description:Whether to check for multiple element sides on the boundary in the case of a boundary restricted, element aux variable. Setting this to false will allow contribution to a single element's elemental value(s) from multiple boundary sides on the same element (example: when the restricted boundary exists on two or more sides of an element, such as at a corner of a mesh
- eutectic_melt998Temperature at which the eutectic will melt.
Default:998
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Temperature at which the eutectic will melt.
- execute_onLINEAR TIMESTEP_ENDThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:LINEAR TIMESTEP_END
C++ Type:ExecFlagEnum
Options:XFEM_MARK, NONE, INITIAL, LINEAR, NONLINEAR_CONVERGENCE, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, PRE_DISPLACE
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- unit_factor1Multiply to convert correlation from meters/sec.
Default:1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Multiply to convert correlation from meters/sec.
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Material Property Retrieval Parameters
Input Files
- (test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_1000K.i)
- (test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_cool.i)
- (assessment/metallic_fuel/FFTF/IFR1/analysis/IFR1_base.i)
- (assessment/metallic_fuel/EBRII/X430/analysis/template.i)
- (test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_cool_heat.i)
- (test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_1400K.i)
- (test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_heat.i)
References
References
- Chao Jiang, Stephen R Novascone, Andrea M Jokisaari, and Larry K Aagesen.
Calphad calculations of lanthanide and element inter-diffusion between U-Zr fuel and steel cladding.
Technical Report INL/EXT-19-55929 Rev. 0, Idaho National Laboratory, 2019.[BibTeX]
@techreport{jiang2019_55929, author = "Jiang, Chao and Novascone, Stephen R and Jokisaari, Andrea M and Aagesen, Larry K", institution = "Idaho National Laboratory", number = "INL/EXT-19-55929 Rev. 0", title = "CALPHAD calculations of lanthanide and element inter-diffusion between {U-Zr} fuel and steel cladding", year = "2019" }
(test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_1000K.i)
# This test calculates the thickness layer of the liquid penetration
# at 1000 K. The exact solution is:
# Time (s) Thickness (m)
# 1 3.8603e-7
# 5 8.6319e-7
# 10 1.2207e-6
# 20 1.7264e-6
# 30 2.1144e-6
# 40 2.4416e-6
# 50 2.7296e-6
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 1
nx = 3
[]
[]
[AuxVariables]
[thickness]
order = CONSTANT
family = MONOMIAL
[]
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1000
[]
[]
[AuxKernels]
[fcci_eutectic]
boundary = right
execute_on = timestep_end
type = DiffusionalEutecticThicknessFCCI
temperature = temperature
variable = thickness
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
[]
[]
[Functions]
[temp_bound]
type = PiecewiseLinear
x = '0 50'
y = '1000 1000'
[]
[]
[BCs]
[left]
type = FunctionDirichletBC
variable = temperature
boundary = left
function = temp_bound
[]
[]
[Materials]
[density]
type = ParsedMaterial
property_name = density
expression = 1
[]
[heatcond]
type = HeatConductionMaterial
specific_heat = 1
thermal_conductivity = 1
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
start_time = 0.0
end_time = 50.0
nl_abs_tol = 1e-12
[TimeStepper]
type = ConstantDT
dt = 1
[]
[]
[Postprocessors]
[right_thickness]
type = SideAverageValue
variable = thickness
boundary = right
[]
[right_value]
type = AverageNodalVariableValue
boundary = right
variable = temperature
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
csv = true
[]
(test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_1000K.i)
# This test calculates the thickness layer of the liquid penetration
# at 1000 K. The exact solution is:
# Time (s) Thickness (m)
# 1 3.8603e-7
# 5 8.6319e-7
# 10 1.2207e-6
# 20 1.7264e-6
# 30 2.1144e-6
# 40 2.4416e-6
# 50 2.7296e-6
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 1
nx = 3
[]
[]
[AuxVariables]
[thickness]
order = CONSTANT
family = MONOMIAL
[]
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1000
[]
[]
[AuxKernels]
[fcci_eutectic]
boundary = right
execute_on = timestep_end
type = DiffusionalEutecticThicknessFCCI
temperature = temperature
variable = thickness
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
[]
[]
[Functions]
[temp_bound]
type = PiecewiseLinear
x = '0 50'
y = '1000 1000'
[]
[]
[BCs]
[left]
type = FunctionDirichletBC
variable = temperature
boundary = left
function = temp_bound
[]
[]
[Materials]
[density]
type = ParsedMaterial
property_name = density
expression = 1
[]
[heatcond]
type = HeatConductionMaterial
specific_heat = 1
thermal_conductivity = 1
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
start_time = 0.0
end_time = 50.0
nl_abs_tol = 1e-12
[TimeStepper]
type = ConstantDT
dt = 1
[]
[]
[Postprocessors]
[right_thickness]
type = SideAverageValue
variable = thickness
boundary = right
[]
[right_value]
type = AverageNodalVariableValue
boundary = right
variable = temperature
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
csv = true
[]
(test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_cool.i)
# This test calculates the thickness layer of the liquid penetration
# by cooling from 1400 K to 800 K.
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 1
nx = 3
[]
[]
[AuxVariables]
[thickness]
order = CONSTANT
family = MONOMIAL
[]
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1400
[]
[]
[AuxKernels]
[fcci_eutectic]
boundary = right
execute_on = timestep_end
type = DiffusionalEutecticThicknessFCCI
temperature = temperature
variable = thickness
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
[]
[]
[Functions]
[temp_bound]
type = PiecewiseLinear
x = '0 50'
y = '1400 800'
[]
[]
[BCs]
[left]
type = FunctionDirichletBC
variable = temperature
boundary = left
function = temp_bound
[]
[]
[Materials]
[density]
type = ParsedMaterial
property_name = density
expression = 1
[]
[heatcond]
type = HeatConductionMaterial
specific_heat = 1
thermal_conductivity = 1
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
start_time = 0.0
end_time = 50.0
[TimeStepper]
type = ConstantDT
dt = 1
[]
[]
[Postprocessors]
[right_thickness]
type = SideAverageValue
variable = thickness
boundary = right
[]
[right_value]
type = AverageNodalVariableValue
boundary = right
variable = temperature
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
csv = true
[]
(assessment/metallic_fuel/FFTF/IFR1/analysis/IFR1_base.i)
# IFR-1 ASSESSMENT CASE
# BISON recreation of the 169-pin IFR-1 experiment, which was irradiated in the
# FFTF from 9/1986 to 10/1988 to a peak burnup of about 10 at%. The assessment
# consists of three generic pins (U-10Zr, U-8Pu-10Zr, and U-19Pu-10Zr) which
# are compared against all available legacy calculations and PIE measurements
# for all 169 pins in the experiment. Composition-specific values are stored in
# three '.params' files. Units are in standard SI: J, K, kg, m, Pa, s.
# For a more complete description of the experiment, see [Dodds, 1986-1],
# [Dodds, 1986-2], [Porter and Tsai, 2011], and [Tsai et al., 1986]. For a more
# complete description of development and results of this assessment, see
# [Greenquist et al., 2021].
#
# To simulate one of the cases, use the combined input file option
# with one of the '.params' files. For example:
# mpiexec -n 4 ../../../../../bison-opt -i 'IFR1_base.i U-10Zr.params'
initial_fuel_density = 15800
[GlobalParams]
dim = 2
order = SECOND
family = LAGRANGE
elem_type = QUAD8
energy_per_fission = 3.2e-11 # [Shultis and Faw, 2008]
volumetric_locking_correction = false
displacements = 'disp_x disp_y'
temperature = T
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = ref
extra_tag_vectors = ref
[]
[Mesh]
coord_type = RZ
# Mesh includes a fuel slug, top and bottom blanket slugs, and cladding. All
# dimensions are in meters (m). Nominal dimensions come from [Dodds, 1986-2].
type = MeshGeneratorMesh
patch_size = 30
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
# build cladding
[bottom_plug]
type = GeneratedMeshGenerator
xmin = 0.0
xmax = 0.00287
nx = 3
ymin = 0.0
ymax = 0.015
ny = 5
[]
[bottom_corner]
type = GeneratedMeshGenerator
xmin = 0.00287
xmax = 0.00343
nx = 4
ymin = 0.0
ymax = 0.015
ny = 5
[]
[bottom_corner_rename_side]
type = SideSetsFromNormalsGenerator
input = bottom_corner
normals = '0 1 0'
new_boundary = new_side
[]
[combine_bottom_and_bottom_corner]
type = StitchedMeshGenerator
inputs = 'bottom_plug bottom_corner_rename_side'
stitch_boundaries_pairs = 'right left'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
[cladding_wall]
type = GeneratedMeshGenerator
xmin = 0.00287
xmax = 0.00343
nx = 4
ymin = 0.015
ymax = 2.239
ny = 400
[]
[cladding_wall_rename_side]
type = SideSetsFromNormalsGenerator
input = cladding_wall
normals = '0 1 0'
new_boundary = new_side
[]
[combine_bottom_and_wall]
type = StitchedMeshGenerator
inputs = 'combine_bottom_and_bottom_corner cladding_wall_rename_side'
stitch_boundaries_pairs = '4 bottom'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
[top_corner]
type = GeneratedMeshGenerator
xmin = 0.00287
xmax = 0.00343
nx = 4
ymin = 2.239
ymax = 2.254
ny = 5
[]
[top_corner_rename_side]
type = SideSetsFromNormalsGenerator
input = top_corner
normals = '-1 0 0'
new_boundary = new_side
[]
[combine_wall_and_top_corner]
type = StitchedMeshGenerator
inputs = 'combine_bottom_and_wall top_corner_rename_side'
stitch_boundaries_pairs = '4 bottom'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
[top_plug]
type = GeneratedMeshGenerator
xmin = 0.0
xmax = 0.00287
nx = 3
ymin = 2.239
ymax = 2.254
ny = 5
[]
[cladding_all]
type = StitchedMeshGenerator
inputs = 'combine_wall_and_top_corner top_plug'
stitch_boundaries_pairs = '4 right'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
# build fuel and blanket
[bottom_blanket]
type = GeneratedMeshGenerator
xmin = 0.0
xmax = 0.00249
nx = 6
ymin = 0.0162
ymax = 0.1812
ny = 40
[]
[fuel_slug]
type = GeneratedMeshGenerator
xmin = 0.0
xmax = 0.00249
nx = 6
ymin = 0.1812
ymax = 1.0956
ny = 300
[]
[top_blanket]
type = GeneratedMeshGenerator
xmin = 0.0
xmax = 0.00249
nx = 6
ymin = 1.0956
ymax = 1.2606
ny = 40
[]
[fuel_two]
type = StitchedMeshGenerator
inputs = 'bottom_blanket fuel_slug'
stitch_boundaries_pairs = 'top bottom'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
[fuel_all]
type = StitchedMeshGenerator
inputs = 'fuel_two top_blanket'
stitch_boundaries_pairs = 'top bottom'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
# combine and name subdomains
[combine_fuel_cladding]
type = CombinerGenerator
inputs = 'cladding_all fuel_all'
[]
[name_cladding]
type = SubdomainBoundingBoxGenerator
input = combine_fuel_cladding
bottom_left = '0.0 0.0 0.0'
top_right = '0.00343 2.254 0'
location = INSIDE
block_id = 0
block_name = clad
[]
[name_blanket]
type = SubdomainBoundingBoxGenerator
input = name_cladding
bottom_left = '0.0 0.0162 0.0'
top_right = '0.00249 1.2606 0.0'
location = INSIDE
block_id = 1
block_name = blanket
[]
[name_fuel]
type = SubdomainBoundingBoxGenerator
input = name_blanket
bottom_left = '0.0 0.1812 0.0'
top_right = '0.00249 1.0956 0.0'
location = INSIDE
block_id = 2
block_name = pellet
[]
# name boundaries
[name_centerline]
type = SideSetsFromNormalsGenerator
input = name_fuel
normals = '-1 0 0'
new_boundary = centerline
replace = true
[]
[name_slug_outer_surface]
type = SideSetsFromNormalsGenerator
input = name_centerline
normals = '1 0 0'
new_boundary = pellet_outer_radial_surface
replace = true
[]
[name_slug_ends]
type = SideSetsFromPointsGenerator
input = name_slug_outer_surface
points = '0.50e-3 0.0162 0.0
0.50e-3 1.2606 0.0'
new_boundary = 'bottom_of_bottom_pellet top_of_top_pellet'
replace = true
[]
[name_cladding_inside]
type = SideSetsFromPointsGenerator
input = name_slug_ends
points = '0.50e-3 0.015 0.0
0.00287 1.0956 0.0
0.50e-3 2.239 0.0'
new_boundary = 'clad_inside_bottom clad_inside_right clad_inside_top'
replace = true
[]
[name_cladding_outer_surface]
type = SideSetsFromPointsGenerator
input = name_cladding_inside
points = '0.00343 1.0956 0.0
0.50e-3 0.0 0.0
0.50e-3 2.254 0.0'
new_boundary = 'clad_outside_right clad_outside_bottom clad_outside_top'
replace = true
[]
[]
[Variables]
[T] # Temperature (K)
initial_condition = 298
[]
[]
[AuxVariables]
[gap_conductance]
order = CONSTANT
family = MONOMIAL
[]
[fuel_clad_gap_width]
order = FIRST
family = LAGRANGE
[]
[element_failed]
order = CONSTANT
family = MONOMIAL
[]
[fuel_volumetric_strain]
block = 'pellet blanket'
order = CONSTANT
family = MONOMIAL
[]
[clad_hoop_stress]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[clad_hoop_creep_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[clad_hoop_elastic_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[clad_hoop_total_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[local_power]
block = 'pellet blanket'
order = CONSTANT
family = MONOMIAL
[]
[T_coolant]
order = CONSTANT
family = MONOMIAL
[]
[pin_lhr]
block = 'pellet blanket'
order = CONSTANT
family = MONOMIAL
[]
[eutectic_thickness]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[assembly_lhr_avg_function]
# Subassembly average power as a function of time. x: time (s), y: Average
# LHGR (W/m). See [Greenquist et al., 2021].
type = PiecewiseLinear
x = '0 3600 11900880 11904480 21097440 21101040 29542320 29545920
35274240 35277840 42665040 42668640 53615520 53619120 53705520 53791920'
y = '0 38276 36089 33902 31988 33355 31988 30074
29254 27614 25153 26520 26247 26.2 26.2 26.2'
[]
[lhr_peaking_factor_function]
# Axial variation from the average LHGR. See [Porter and Tsai, 2011] and
# [Greenquist et al., 2021].
type = ParsedFunction
symbol_names = 'a0 a1 a2 a3 a4 mb bb mt bt
z_bot z_top bu_final bu_now'
symbol_values = '0.68687 2.6352 -3.20026 1.35e-5 2.69e-5 0.279 0.084 -0.301 0.416
0.1812 1.0956 0.05 burnup_max'
expression = 'bu_frac := bu_now / bu_final;
p_bot := (mb * y + bb) * bu_frac;
p_top := (mt * y + bt) * bu_frac;
z_bbot := 0.0162; p_b := if(y < z_bbot, 0, p_bot);
z_btop := 1.2606; p_t := if(y > z_btop, 0, p_top);
z1 := y - z_bot;
p_mid := a0 + a1 * z1 + a2 * z1^2 + a3 * z1^3 + a4 * z1^4;
if(y < z_bot, p_b, if(y > z_top, p_t, p_mid))'
[]
[pin_lhr_function]
type = CompositeFunction
functions = 'assembly_lhr_avg_function lhr_peaking_factor_function'
[]
[coolant_flux_function]
# Subassembly coolant mass flux. x: time (s), y: flux (kg m^-2 s^-1). See
# [Porter and Tsai, 2011].
type = PiecewiseLinear
x = '0 3600 11900880 11904480 21097440 21101040 29542320 29545920
42665040 42668640 53615520 53619120 53791920'
y = '5690 5740 5740 5900 5900 5930 5930 6040
6040 6090 6090 5690 5690'
[]
[coolant_pressure_function]
# Constant coolant inlet pressure (Pa) taken from [Cabell, 1980].
type = ConstantFunction
value = 1018327
[]
[coolant_T_in_function]
# Sodium coolant inlet temperature (K). See [Porter and Tsai, 2011] and
# [Greenquist et al., 2021].
type = PiecewiseLinear
x = '0 3600 53619120 53705520 53791920'
y = '298.0 633.15 633.15 305.0 305.0'
[]
[sodium_volume_function]
# The initial sodium height is assumed to be equal to the initial fuel
# height and sodium infiltration is ignored.
type = ParsedFunction
symbol_names = 'pellet_outer_radius cladding_gap_width blanket_top blanket_bottom'
symbol_values = '0.00249 0.00038 1.2606 0.0162'
expression = 'pi * ((pellet_outer_radius + cladding_gap_width)^2 -
pellet_outer_radius^2) * (blanket_top - blanket_bottom)'
[]
[gas_volume_function]
type = ParsedFunction
symbol_names = 'clad_internal_volume fuel_volume sodium_volume'
symbol_values = 'clad_internal_volume fuel_volume sodium_volume'
expression = 'abs(clad_internal_volume) - abs(fuel_volume) - abs(sodium_volume)'
[]
[sodium_conductivity_function]
# Thermal conductivity (W m^-1 K^-1) of the pin gap sodium according to
# [Fink and Leibowitz, 1995]
type = ParsedFunction
symbol_names = 'A B C D'
symbol_values = '124.67 -0.11381 5.5226e-5 -1.1842e-8'
expression = 'A + B * t + C * t^2 + D * t^3'
[]
[creep_timestep_min_function]
type = ParsedFunction
symbol_names = 'creep_timestep_fuel creep_timestep_blanket creep_timestep_clad'
symbol_values = 'creep_timestep_fuel creep_timestep_blanket creep_timestep_clad'
expression = 'min(min(creep_timestep_fuel, creep_timestep_blanket),
creep_timestep_clad)'
[]
[fuel_axial_elongation_max_pct_function]
type = ParsedFunction
symbol_names = 'fuel_axial_elongation_min fuel_axial_elongation_max pellet_height'
symbol_values = 'fuel_axial_elongation_min fuel_axial_elongation_max 0.9144'
expression = '(fuel_axial_elongation_max - fuel_axial_elongation_min) /
pellet_height * 100'
[]
[fuel_radial_dilation_max_pct_function]
type = ParsedFunction
symbol_names = 'fuel_radial_dilation_max pellet_outer_radius'
symbol_values = 'fuel_radial_dilation_max 0.00249'
expression = 'fuel_radial_dilation_max / pellet_outer_radius * 100'
[]
[clad_axial_elongation_max_pct_function]
type = ParsedFunction
symbol_names = 'clad_axial_elongation_max plug_height cladding_total_height'
symbol_values = 'clad_axial_elongation_max 0.015 2.254'
expression = 'clad_axial_elongation_max / (plug_height + cladding_total_height) *
100'
[]
[clad_radial_dilation_max_pct_function]
type = ParsedFunction
symbol_names = 'clad_radial_dilation_max cladding_outer_radius'
symbol_values = 'clad_radial_dilation_max 0.00343'
expression = 'clad_radial_dilation_max / cladding_outer_radius * 100'
[]
[plenum_compressibility_function]
# Accounts for nonideality in fission gas [Hobbs and Charboneau, 2020].
type = ParsedFunction
symbol_names = 'plenum_pressure A B C'
symbol_values = 'plenum_pressure 1.002 -3.4e-8 -1.9e-15'
expression = 'A + B * plenum_pressure + C * plenum_pressure^2'
[]
[compressibility_times_temperature_function]
type = ParsedFunction
symbol_names = 'plenum_temperature plenum_compressibility'
symbol_values = 'plenum_temperature plenum_compressibility'
expression = 'plenum_temperature * plenum_compressibility'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
add_variables = true
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress
hydrostatic_stress creep_strain_xx creep_strain_yy
creep_strain_zz elastic_strain_xx elastic_strain_yy
elastic_strain_zz strain_xx strain_yy strain_zz'
[fuel_mechanics]
block = 'pellet blanket'
eigenstrain_names = 'fuel_thermal_strain fuel_gaseous_strain
fuel_solid_strain'
extra_vector_tags = ref
[]
[clad_mechanics]
block = clad
eigenstrain_names = 'clad_thermal_strain clad_gaseous_strain'
extra_vector_tags = ref
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
extra_vector_tags = ref
[]
[heat_conduction_time_derivative]
type = HeatConductionTimeDerivative
variable = T
extra_vector_tags = ref
[]
[heat_conduction]
type = HeatConduction
variable = T
extra_vector_tags = ref
[]
[heat_source]
type = FissionRateHeatSource
block = 'pellet blanket'
variable = T
fission_rate = fission_rate
extra_vector_tags = ref
[]
[]
[AuxKernels]
[gap_conductance]
type = MaterialRealAux
variable = gap_conductance
property = gap_conductance
boundary = pellet_outer_radial_surface
[]
[fuel_clad_gap_width]
type = ParsedAux
variable = fuel_clad_gap_width
coupled_variables = penetration
expression = '-penetration'
[]
[failed_element]
type = MaterialRealAux
variable = element_failed
property = failed
boundary = clad_outside_right
[]
[fuel_volumetric_strain]
type = RankTwoScalarAux
block = 'pellet blanket'
variable = fuel_volumetric_strain
rank_two_tensor = total_strain
scalar_type = VolumetricStrain
[]
[clad_hoop_stress]
type = RankTwoAux
block = clad
variable = clad_hoop_stress
rank_two_tensor = stress
index_i = 2
index_j = 2
[]
[clad_hoop_creep_strain]
type = RankTwoAux
block = clad
variable = clad_hoop_creep_strain
rank_two_tensor = creep_strain
index_i = 2
index_j = 2
[]
[clad_hoop_elastic_strain]
type = RankTwoAux
block = clad
variable = clad_hoop_elastic_strain
rank_two_tensor = elastic_strain
index_i = 2
index_j = 2
[]
[clad_hoop_total_strain]
type = RankTwoAux
block = clad
variable = clad_hoop_total_strain
rank_two_tensor = total_strain
index_i = 2
index_j = 2
[]
[local_power]
type = FunctionAux
block = 'pellet blanket'
variable = local_power
function = lhr_peaking_factor_function
[]
[T_coolant]
type = MaterialRealAux
variable = T_coolant
property = coolant_temperature
boundary = clad_outside_right
[]
[pin_lhr]
type = FunctionAux
block = 'pellet blanket'
variable = pin_lhr
function = pin_lhr_function
[]
[eutectic_thickness]
type = DiffusionalEutecticThicknessFCCI
block = clad
variable = eutectic_thickness
temperature = T
boundary = clad_inside_right
execute_on = TIMESTEP_END
[]
[]
[Contact]
# Assessment uses frictionless contact. See [Greenquist et al., 2021] for
# a study comparing the various contact models.
[frictionless_fuel_clad_mechanical]
primary = clad_inside_right
secondary = pellet_outer_radial_surface
model = frictionless
formulation = kinematic
tangential_tolerance = 1e-3
normal_smoothing_distance = 0.1
[]
[]
[ThermalContact]
[thermal_contact]
type = GapHeatTransfer
variable = T
primary = clad_inside_right
secondary = pellet_outer_radial_surface
gap_geometry_type = CYLINDER
gap_conductivity_function = sodium_conductivity_function
gap_conductivity_function_variable = T
quadrature = true
min_gap = 0.00038 # Set to the initial gap width.
tangential_tolerance = 1e-4
[]
[]
[BCs]
[fix_disp_x_all]
type = DirichletBC
variable = disp_x
value = 0.0
boundary = centerline
[]
[fix_disp_y_all]
type = DirichletBC
variable = disp_y
value = 0.0
boundary = 'clad_outside_bottom bottom_of_bottom_pellet'
[]
[Pressure]
[coolant_pressure]
function = coolant_pressure_function
boundary = 'clad_outside_bottom clad_outside_right clad_outside_top'
[]
[]
[PlenumPressure]
[plenum_pressure]
boundary = 'clad_inside_bottom clad_inside_right clad_inside_top'
startup_time = 0
initial_pressure = 101325 # 1 atm [Greenquist et al., 2021]
volume = gas_volume
material_input = fission_gas_released
R = 8.3143
temperature = plenum_temperature
output = plenum_pressure
[]
[]
[]
[PlenumTemperature]
[plenum_temperature]
temperature = T
boundary = 'bottom_of_bottom_pellet pellet_outer_radial_surface
top_of_top_pellet clad_inside_bottom clad_inside_right
clad_inside_top'
inner_surfaces = 'bottom_of_bottom_pellet pellet_outer_radial_surface
top_of_top_pellet'
outer_surfaces = 'clad_inside_bottom clad_inside_right clad_inside_top'
[]
[]
[CoolantChannel]
[convective_clad_surface]
variable = T
inlet_temperature = coolant_T_in_function
inlet_pressure = coolant_pressure_function
inlet_massflux = coolant_flux_function
coolant_material = sodium
rod_diameter = 0.00686 # [Dodds, 1986-2]
rod_pitch = 0.00823 # [Greenquist et al., 2021]
linear_heat_rate = assembly_lhr_avg_function
axial_power_profile = lhr_peaking_factor_function
subchannel_geometry = triangular
boundary = 'clad_outside_bottom clad_outside_right clad_outside_top'
[]
[]
[Materials]
###### FUEL ######
[fuel_fission_rate]
type = UPuZrFissionRate
block = pellet
rod_linear_power = assembly_lhr_avg_function
axial_power_profile = lhr_peaking_factor_function
pellet_radius = 0.00249 # [Dodds, 1986-2]
initial_X_Zr = 0.224 # [Dodds, 1986-2]
X_Zr = 0.224
outputs = exodus
output_properties = fission_rate
[]
[fuel_burnup]
type = UPuZrBurnup
block = pellet
density = ${initial_fuel_density} # [Dodds, 1986-2]
initial_X_Pu = ${initial_X_Pu} # [Dodds, 1986-2]
initial_X_Zr = 0.224 # [Dodds, 1986-2]
outputs = exodus
output_properties = burnup
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density} # [Dodds, 1986-2]
[]
[fuel_sodium_logging]
type = UPuZrSodiumLogging
block = pellet
porosity = porosity
sodium_infiltration_fraction = ${Na_infiltration_fraction} # [Bauer and Holland, 1995]
outputs = exodus
output_properties = sodium_logged_porosity
[]
[fuel_thermal_properties]
type = UPuZrThermal
block = pellet
X_Pu = ${initial_X_Pu} # [Dodds, 1986-2]
X_Zr = 0.224 # [Dodds, 1986-2]
spheat_model = savage
thcond_model = lanl
porosity_model = logged
porosity = porosity
sodium_logged_porosity = sodium_logged_porosity
[]
[fuel_elasticity_tensor]
type = UPuZrElasticityTensor
block = pellet
X_Pu = ${initial_X_Pu} # [Dodds, 1986-2]
X_Zr = 0.224 # [Dodds, 1986-2]
porosity = porosity
[]
[fuel_creep]
type = UPuZrCreepUpdate
block = pellet
porosity = porosity
max_inelastic_increment = 3e-3
effective_inelastic_strain_name = fuel_effective_creep_strain
[]
[fuel_gaseous_swelling]
type = UPuZrGaseousEigenstrain
block = pellet
fission_rate = fission_rate
anisotropic_factor = 0.5 # [Pahl et al., 1990]
bubble_number_density = 5e17 # [Casagranda et al., 2020]
interconnection_initiating_porosity = ${interconnection_init_porosity} # [Casagranda et al., 2020]
interconnection_terminating_porosity = ${interconnection_term_porosity} # [Casagranda et al., 2020]
eigenstrain_name = fuel_gaseous_strain
outputs = exodus
output_properties = 'gas_swelling porosity interconnectivity'
[]
[fuel_solid_swelling]
type = BurnupDependentEigenstrain
block = pellet
eigenstrain_name = fuel_solid_strain
swelling_name = solid_swelling
outputs = exodus
output_properties = solid_swelling
swelling_factor = 0 # Solid swelling is negligible below 10% burnup
[]
[fuel_fission_gas_release]
type = UPuZrFissionGasRelease
block = pellet
fission_rate = fission_rate
porosity = porosity
critical_porosity = ${critical_porosity} # [Casagranda et al., 2020]
fractional_fgr_initial = ${fgr_init} # [Casagranda et al., 2020]
fractional_fgr_post = ${fgr_post} # [Casagranda et al., 2020]
[]
[fuel_thermal_expansion]
type = UPuZrThermalExpansionEigenstrain
block = pellet
stress_free_temperature = 298
eigenstrain_name = fuel_thermal_strain
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
block = pellet
inelastic_models = fuel_creep
[]
###### BLANKET ######
[blanket_fission_rate]
type = UPuZrFissionRate
block = blanket
rod_linear_power = assembly_lhr_avg_function
axial_power_profile = lhr_peaking_factor_function
pellet_radius = 0.00249
initial_X_Zr = 0.224 # 10 wt% [Dodds, 1986-2]
X_Zr = 0.224
outputs = exodus
output_properties = fission_rate
[]
[blanket_burnup]
type = UPuZrBurnup
block = blanket
density = 15800 # [Dodds, 1986-2]
initial_X_Pu = 0 # [Dodds, 1986-2]
initial_X_Zr = 0.224 # [Dodds, 1986-2]
outputs = exodus
output_properties = burnup
[]
[blanket_density]
type = StrainAdjustedDensity
block = blanket
strain_free_density = 15800 # [Dodds, 1986-2]
[]
[blanket_sodium_logging]
type = UPuZrSodiumLogging
block = blanket
porosity = porosity
sodium_infiltration_fraction = 0.08 # [Bauer and Holland, 1995]
outputs = exodus
output_properties = sodium_logged_porosity
[]
[blanket_thermal_properties]
type = UPuZrThermal
block = blanket
X_Pu = 0 # [Dodds, 1986-2]
X_Zr = 0.224 # [Dodds, 1986-2]
spheat_model = savage
thcond_model = lanl
porosity_model = logged
porosity = porosity
sodium_logged_porosity = sodium_logged_porosity
[]
[blanket_elasticity_tensor]
type = UPuZrElasticityTensor
block = blanket
X_Pu = 0 # [Dodds, 1986-2]
X_Zr = 0.224 # [Dodds, 1986-2]
porosity = porosity
[]
[blanket_creep]
type = UPuZrCreepUpdate
block = blanket
porosity = porosity
max_inelastic_increment = 3e-3
effective_inelastic_strain_name = blanket_effective_creep_strain
[]
[blanket_gaseous_swelling]
type = UPuZrGaseousEigenstrain
block = blanket
fission_rate = fission_rate
anisotropic_factor = 0.5 # [Pahl et al., 1990]
bubble_number_density = 5e17 # [Casagranda et al., 2020]
interconnection_initiating_porosity = 0.25 # [Casagranda et al., 2020]
interconnection_terminating_porosity = 0.27 # [Casagranda et al., 2020]
eigenstrain_name = fuel_gaseous_strain
outputs = exodus
output_properties = 'gas_swelling porosity interconnectivity'
[]
[blanket_solid_swelling]
type = BurnupDependentEigenstrain
block = blanket
eigenstrain_name = fuel_solid_strain
swelling_name = solid_swelling
outputs = exodus
output_properties = solid_swelling
swelling_factor = 0 # Solid swelling is negligible below 10% burnup
[]
[blanket_fission_gas_release]
type = UPuZrFissionGasRelease
block = blanket
fission_rate = fission_rate
porosity = porosity
critical_porosity = 0.26 # [Casagranda et al., 2020]
fractional_fgr_initial = 0.454 # [Casagranda et al., 2020]
fractional_fgr_post = 0.714 # [Casagranda et al., 2020]
[]
[blanket_thermal_expansion]
type = UPuZrThermalExpansionEigenstrain
block = blanket
stress_free_temperature = 298
eigenstrain_name = fuel_thermal_strain
[]
[blanket_elastic_stress]
type = ComputeMultipleInelasticStress
block = blanket
inelastic_models = blanket_creep
[]
###### CLADDING ######
[fast_neutron_flux]
type = UPuZrFastNeutronFlux
pellet_radius = 0.00249
axial_power_profile = lhr_peaking_factor_function
rod_linear_power = assembly_lhr_avg_function
initial_density = 15800 # [Dodds, 1986-2]
initial_X_Pu = ${initial_X_Pu} # [Dodds, 1986-2]
initial_X_Zr = 0.224 # [Dodds, 1986-2]
enrichment_U235 = ${enrichment_U235} # [Dodds, 1986-2]
enrichment_Pu240 = 0.061 # [Dodds, 1986-2]
calculate_fluence = true
outputs = exodus
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 7761 # [Hofman et al., 1989]
[]
[clad_thermal_properties]
type = D9Thermal
block = clad
[]
[clad_gaseous_swelling]
type = D9VolumetricSwellingEigenstrain
block = clad
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
eigenstrain_name = clad_gaseous_strain
[]
[clad_thermal_expansion]
type = D9ThermalExpansionEigenstrain
block = clad
eigenstrain_name = clad_thermal_strain
stress_free_temperature = 298
[]
[clad_elasticity_tensor]
type = D9ElasticityTensor
block = clad
[]
[clad_creep]
type = D9CreepUpdate
block = clad
max_inelastic_increment = 3e-3 # 1e-2
effective_inelastic_strain_name = clad_effective_creep_strain
[]
[clad_failure]
type = D9FailureClad
method = steady_state
hoop_stress = stress_zz
boundary = clad_outside_right
outputs = exodus
output_properties = cdf_failure
[]
[inner_clad_wastage]
type = MetallicFuelWastage
block = clad
method = flux_d9
burnup = 0 # not used but must be specified
outputs = exodus
output_properties = wastage_thickness
[]
[outer_clad_wastage]
type = MetallicFuelCoolantWastage
block = clad
clad_material = SS316 # does not have D9
use_effective_method = true
outputs = exodus
[]
[clad_wastage_fraction]
type = MetallicFuelWastageDamage
block = clad
wastage_thickness = wastage_thickness
pellet_length = 0.9144
pellet_y_start = 0.1812
cladding_thickness = 0.00056
outputs = exodus
[]
[clad_damage_fraction]
type = ScalarMaterialDamage
block = clad
damage_index = thinning_fraction
outputs = exodus
[]
[clad_elastic_stress]
type = ComputeMultipleInelasticStress
block = clad
inelastic_models = clad_creep
[]
[]
[Dampers]
[T_damper]
type = MaxIncrement
variable = T
max_increment = 25
[]
[disp_x_damper]
type = MaxIncrement
variable = disp_x
max_increment = 3.00E-04
[]
[disp_y_damper]
type = MaxIncrement
variable = disp_y
max_increment = 3.00E-04
[]
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
automatic_scaling = true
compute_scaling_once = false
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package
-ksp_gmres_restart'
petsc_options_value = 'lu superlu_dist
51'
line_search = NONE
l_max_its = 30
l_tol = 1e-3
nl_max_its = 30
nl_rel_tol = 1e-4
nl_abs_tol = 5e-7
start_time = 0
end_time = 53791920
dtmin = 1e-2
dtmax = 1e6
verbose = true
[Quadrature]
order = FIFTH
side_order = SEVENTH
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 100
optimal_iterations = 10
iteration_window = 4
growth_factor = 1.25
cutback_factor = 0.512
linear_iteration_ratio = 100
force_step_every_function_point = true
timestep_limiting_function = assembly_lhr_avg_function
timestep_limiting_postprocessor = creep_timestep_min
[]
[]
[Postprocessors]
###### POWER ######
[fission_rate_density_avg]
type = ElementAverageValue
block = 'pellet blanket'
variable = fission_rate
outputs = csv
[]
[fast_neutron_fluence_avg]
type = ElementAverageValue
variable = fast_neutron_fluence
outputs = 'csv chkfile'
[]
[fast_neutron_fluence_max]
type = ElementExtremeValue
variable = fast_neutron_fluence
value_type = max
outputs = 'csv chkfile'
[]
[pin_hr_tot]
type = ElementIntegralPower
block = 'pellet blanket'
variable = T # required but not actually used
use_material_fission_rate = true
fission_rate_material = fission_rate
outputs = csv
[]
[pin_lhr_avg]
type = FunctionValuePostprocessor
function = assembly_lhr_avg_function
outputs = csv
[]
###### HEAT TRANSFER ######
[radial_heat_flux_from_fuel]
type = SideDiffusiveFluxIntegral
variable = T
boundary = pellet_outer_radial_surface
diffusivity = thermal_conductivity
outputs = csv
[]
[radial_heat_flux_from_clad]
type = SideDiffusiveFluxIntegral
variable = T
boundary = clad_outside_right
diffusivity = thermal_conductivity
outputs = csv
[]
###### FISSION GAS ###### (needed for simulation to run)
[fission_gas_produced]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_prod
block = 'pellet blanket'
outputs = 'csv chkfile'
[]
[fission_gas_released]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_rel
block = 'pellet blanket'
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[fission_gas_released_pct]
type = FGRPercent
fission_gas_generated = fission_gas_produced
fission_gas_released = fission_gas_released
outputs = 'console csv chkfile'
[]
[clad_internal_volume]
type = InternalVolume
boundary = 'clad_inside_bottom clad_inside_right clad_inside_top'
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[fuel_volume]
type = InternalVolume
boundary = 'bottom_of_bottom_pellet pellet_outer_radial_surface
top_of_top_pellet'
scale_factor = -1 # makes the fuel volume positive
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[sodium_volume]
type = FunctionValuePostprocessor
function = sodium_volume_function
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[gas_volume]
type = FunctionValuePostprocessor
function = gas_volume_function
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[plenum_compressibility]
type = FunctionValuePostprocessor
function = plenum_compressibility_function
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[compressibility_times_temperature]
type = FunctionValuePostprocessor
function = compressibility_times_temperature_function
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
###### BURNUP ######
[burnup_max]
type = ElementExtremeValue
block = pellet
variable = burnup
value_type = max
outputs = csv
[]
[burnup_max_pct]
type = LinearCombinationPostprocessor
pp_names = burnup_max
pp_coefs = 100
outputs = 'csv chkfile'
[]
[burnup_avg]
type = ElementAverageValue
block = pellet
variable = burnup
outputs = csv
[]
[burnup_avg_pct]
type = LinearCombinationPostprocessor
pp_names = burnup_avg
pp_coefs = 100
outputs = 'console csv chkfile'
[]
###### FUEL TEMPERATURE ######
[fuel_T_max]
type = ElementExtremeValue
block = pellet
variable = T
value_type = max
outputs = csv
[]
[fuel_T_max_peak]
type = TimeExtremeValue
postprocessor = fuel_T_max
value_type = max
outputs = 'csv chkfile'
[]
[fuel_T_surface_max]
type = NodalExtremeValue
boundary = pellet_outer_radial_surface
variable = T
value_type = max
outputs = csv
[]
[fuel_T_surface_max_peak]
type = TimeExtremeValue
postprocessor = fuel_T_surface_max
value_type = max
outputs = 'csv chkfile'
[]
###### CLADDING TEMPERATURE ######
[clad_T_max]
type = ElementExtremeValue
block = clad
variable = T
value_type = max
outputs = csv
[]
[clad_T_max_peak]
type = TimeExtremeValue
postprocessor = clad_T_max
value_type = max
outputs = csv
[]
[clad_T_inner_surface_max]
type = NodalExtremeValue
boundary = clad_inside_right
variable = T
value_type = max
outputs = csv
[]
[clad_T_inner_surface_max_peak]
type = TimeExtremeValue
postprocessor = clad_T_inner_surface_max
value_type = max
outputs = 'csv chkfile'
[]
[clad_T_outer_surface_max]
type = NodalExtremeValue
boundary = clad_outside_right
variable = T
value_type = max
outputs = csv
[]
[clad_T_outer_surface_max_peak]
type = TimeExtremeValue
postprocessor = clad_T_outer_surface_max
value_type = max
outputs = 'csv chkfile'
[]
###### COOLANT PARAMETERS ######
[T_coolant_in]
type = FunctionValuePostprocessor
function = coolant_T_in_function
outputs = csv
[]
[T_coolant_out]
type = ElementExtremeValue
block = clad
variable = T_coolant
value_type = max
outputs = csv
[]
[coolant_flux]
type = FunctionValuePostprocessor
function = coolant_flux_function
outputs = csv
[]
###### FUEL DEFORMATION ######
[fuel_axial_elongation_min]
type = NodalExtremeValue
block = pellet
variable = disp_y
value_type = min
outputs = csv
[]
[fuel_axial_elongation_max]
type = NodalExtremeValue
block = pellet
variable = disp_y
value_type = max
outputs = csv
[]
[fuel_axial_elongation_max_pct]
type = FunctionValuePostprocessor
function = fuel_axial_elongation_max_pct_function
outputs = 'console csv chkfile'
[]
[fuel_radial_dilation_max]
type = NodalExtremeValue
variable = disp_x
boundary = pellet_outer_radial_surface
value_type = max
outputs = csv
[]
[fuel_radial_dilation_max_pct]
type = FunctionValuePostprocessor
function = fuel_radial_dilation_max_pct_function
outputs = csv
[]
###### CLADDING DEFORMATION ######
[clad_axial_elongation_max]
type = NodalExtremeValue
block = clad
variable = disp_y
value_type = max
outputs = csv
[]
[clad_axial_elongation_max_pct]
type = FunctionValuePostprocessor
function = clad_axial_elongation_max_pct_function
outputs = 'csv chkfile'
[]
[clad_radial_dilation_max]
type = NodalExtremeValue
variable = disp_x
boundary = clad_outside_right
value_type = max
outputs = csv
[]
[clad_radial_dilation_max_pct]
type = FunctionValuePostprocessor
function = clad_radial_dilation_max_pct_function
outputs = 'console csv chkfile'
[]
###### GAP DEFORMATION AND MECHANICS ######
[gap_width_min]
type = NodalExtremeValue
variable = fuel_clad_gap_width
boundary = pellet_outer_radial_surface
value_type = min
outputs = csv
[]
[gap_width_max]
type = NodalExtremeValue
variable = fuel_clad_gap_width
boundary = pellet_outer_radial_surface
value_type = max
outputs = csv
[]
[gap_width_avg]
type = SideAverageValue
variable = fuel_clad_gap_width
boundary = pellet_outer_radial_surface
outputs = csv
[]
[contact_pressure_max]
type = NodalExtremeValue
variable = contact_pressure
boundary = pellet_outer_radial_surface
value_type = max
outputs = csv
[]
###### FUEL MECHANICS ######
[fuel_hydrostatic_stress_min]
type = ElementExtremeValue
block = 'pellet blanket'
variable = hydrostatic_stress
value_type = min
outputs = csv
[]
[fuel_hydrostatic_stress_max]
type = ElementExtremeValue
block = 'pellet blanket'
variable = hydrostatic_stress
value_type = max
outputs = csv
[]
[fuel_hydrostatic_stress_avg]
type = ElementAverageValue
block = 'pellet blanket'
variable = hydrostatic_stress
outputs = csv
[]
[fuel_volumetric_strain_avg]
type = ElementAverageValue
block = 'pellet blanket'
variable = fuel_volumetric_strain
outputs = 'csv chkfile'
[]
###### CLADDING MECHANICS ######
[clad_hoop_stress_max]
type = ElementExtremeValue
block = clad
variable = clad_hoop_stress
value_type = max
outputs = csv
[]
[clad_hoop_creep_strain_max]
type = ElementExtremeValue
block = clad
variable = clad_hoop_creep_strain
value_type = max
outputs = 'csv chkfile'
[]
[clad_hoop_elastic_strain_max]
type = ElementExtremeValue
block = clad
variable = clad_hoop_elastic_strain
value_type = max
outputs = 'csv chkfile'
[]
[clad_hoop_total_strain_max]
type = ElementExtremeValue
block = clad
variable = clad_hoop_total_strain
value_type = max
outputs = 'csv chkfile'
[]
[cdf_max]
type = ElementExtremeValue
variable = cdf_failure
value_type = max
outputs = 'console csv'
[]
###### PERFORMANCE ######
[creep_timestep_fuel]
type = MaterialTimeStepPostprocessor
block = pellet
outputs = csv
[]
[creep_timestep_blanket]
type = MaterialTimeStepPostprocessor
block = blanket
outputs = csv
[]
[creep_timestep_clad]
type = MaterialTimeStepPostprocessor
block = clad
outputs = csv
[]
[creep_timestep_min]
type = FunctionValuePostprocessor
function = creep_timestep_min_function
outputs = csv
[]
###### SWELLING ######
[solid_swelling_avg]
type = ElementAverageValue
block = pellet
variable = solid_swelling
outputs = 'csv chkfile'
[]
[gas_swelling_avg]
type = ElementAverageValue
block = pellet
variable = gas_swelling
outputs = 'csv chkfile'
[]
[porosity_avg]
type = ElementAverageValue
block = pellet
variable = porosity
outputs = 'csv chkfile'
[]
[sodium_logged_porosity_avg]
type = ElementAverageValue
block = pellet
variable = sodium_logged_porosity
outputs = 'csv chkfile'
[]
###### CLADDING WASTAGE ######
[wastage_max]
type = ElementExtremeValue
block = clad
variable = wastage_thickness
value_type = max
outputs = 'csv chkfile'
[]
[wastage_min]
type = ElementExtremeValue
block = clad
variable = wastage_thickness
value_type = min
outputs = csv
[]
[wastage_avg]
type = ElementAverageValue
block = clad
variable = wastage_thickness
outputs = csv
[]
[eutectic_max]
type = ElementExtremeValue
block = clad
variable = eutectic_thickness
value_type = max
outputs = csv
[]
[eutectic_min]
type = ElementExtremeValue
block = clad
variable = eutectic_thickness
value_type = min
outputs = csv
[]
[eutectic_avg]
type = ElementAverageValue
block = clad
variable = eutectic_thickness
outputs = csv
[]
[]
[VectorPostprocessors]
[fuel_centerline]
type = SideValueSampler
variable = 'T disp_x disp_y'
boundary = centerline
sort_by = y
outputs = csv
[]
[fuel_surface]
type = SideValueSampler
variable = 'T disp_x disp_y'
boundary = pellet_outer_radial_surface
sort_by = y
outputs = csv
[]
[clad_inner_surface]
type = SideValueSampler
variable = 'T disp_x disp_y'
boundary = clad_inside_right
sort_by = y
outputs = csv
[]
[clad_outer_surface]
type = SideValueSampler
variable = 'T disp_x disp_y'
boundary = clad_outside_right
sort_by = y
outputs = csv
[]
[]
[PerformanceMetricOutputs]
outputs = 'csv performance'
[]
[Outputs]
color = true
perf_graph = true
file_base = '${composition}'
[console]
type = Console
output_screen = true
[]
[exodus]
type = Exodus
execute_on = 'INITIAL TIMESTEP_END FINAL'
time_step_interval = 50
file_base = '${composition}_exodus'
[]
[csv]
type = CSV
execute_postprocessors_on = 'INITIAL TIMESTEP_END'
execute_vector_postprocessors_on = FINAL
file_base = '${composition}_csv'
[]
[chkfile]
type = CSV
execute_postprocessors_on = FINAL
file_base = '${composition}_chkfile'
[]
[performance]
type = CSV
hide = 'plenum_pressure plenum_temperature'
execute_postprocessors_on = FINAL
file_base = '${composition}_performance'
[]
[]
# REFERENCES
# [Bauer and Holland, 1995]
# T.H. Bauer, J.W. Holland "In-Pile Measurement of the Thermal Conductivity
# of Irradiated Metallic Fuel" Nuclear Technology Vol 110 Issue 3, 407-421,
# (1995)
# [Cabell, 1980]
# C.P. Cabell "A Summary Description of the Fast Flux Test Facility"
# Westinghouse Hanford Company HEDL-400, Hanford, Washington (1980)
# [Casagranda et al., 2020]
# A. Casagranda, S. Novascone, L. Aagesen, W. Jiang, J.H. Ke, D. Stafford,
# C. Matthews, A. Toptan, K. Gamble, J. Hales, "Summary of BISON Milestones:
# NEAMS FY-20 Report" Idaho National Laboratory INL/EXT-20-60002-Rev000,
# 1768565, Idaho Falls, Idaho (2020)
# [Dodds, 1986-1]
# N.E. Dodds, "Test design description. Volumne 1B. IFR-1 metal fuel
# irradiation (AK-181)" Argonne National Laboratory ANL-iFR-43, Argonne,
# Illinois, (1986)
# [Dodds, 1986-2]
# N.E. Dodds, "Test design description Volume 2, Part 1. IFR-1 metal fuel
# irradiation test (AK-181) element as-built data" Argonne National
# Laboratory ANL-IFR-44, Argonne, Illinois (1986)
# [Fink and Leibowitz, 1995]
# J. K. Fink and L. Leibowitz, "Thermodynamic and transport properties of
# sodium liquid and vapor", Argonne National Laboratory ANL/RE--95/2, 94649,
# Argonne, Illinois (1995)
# [Greenquist et al., 2021]
# I. Greenquist, K.M. Cunningham, J. Hu, J.J. Powers, D.C. Crawford,
# "Development of a U-19Pu-10Zr fuel performance benchmark case based on the
# IFR-1 experiment" Journal of Nuclear Materials Vol. 553, 152997 (2021)
# [Hirschhorn and Powers, 2021]
# J. Hirschhorn, J. Powers "Assessment of the BISON Metallic Fuel
# Performance Models", Oak Ridge National Laboratory ORNLTM-2020/1824,
# 1763469, Oak Ridge, Tennessee (2021)
# [Hobbs and Charboneau, 2020]
# I.M. Hobbs, J.A. Charboneau "Compressibility of gas mixtures pertaining to
# nuclear fuel rods" Journal of Physics Comminications Vol. 4, Iss. 9,
# 095008 (2020)
# [Hofman et al., 1989]
# G. L. Hofman, M. C. Billone, J. F. Koenig, J. M. Kramer, J. D. B. Lambert,
# L. Leibowitz, Y. Orechwa, D. R. Pedersen, D. L. Porter, H. Tsai, A. E.
# Wright, "Metallic Fuels Handbook", Argonne National Laboratory ANL-NSE-3,
# Argonne, Illinois (1989)
# [Janney, 2018]
# Dawn E. Janney, "Metallic Fuels Handbook, Part 1: Alloys Based on U-Zr,
# Pu-Zr, U-Pu, or U-Pu-Zr, Including Those with Minor Actinides (Np, Am,
# Cm), Rare-earth Elements (La, Ce, Pr, Nd, Gd), and Y", Idaho National
# Laboratory INL/EXT-15-36520, Idaho Falls, Idaho (2018)
# [Pahl et al., 1990]
# R.G. Pahl, D.L. Porter, C.E. Lahm, G.L. Hofman "Experimental studies of
# U-Pu-Zr fast reactor fuel pins in the Experimental Breeder Reactor-II"
# Metallurgic Transactions A Vol 21A, 1863-1870, (1990)
# [Porter and Tsai, 2011]
# D. L. Porter and H. Tsai, "Full-Length Metallic Fast Reactor Fuel Pin Test
# in FFTF (IFR-1)"", Idaho National Laboratory INL/LTD-11-21062, Idaho
# Falls, Idaho (2011)
# [Shultis and Faw, 2008]
# J.K. Shultis, R.E. Faw "Fundamentals of Nuclear Science and Engineering
# Second Edition" CRC Press, Boca Raton, Florida (2008)
# [Tsai et al., 1986]
# H. Tsai, L.A. Neimark, M.C. Billone, R.M. Fryer, J.F. Koenig, W.K. Lehto,
# D.J. Malloy, "Test Design Description (TDD). Volume 1A. Design description
# and safety analysis for IFR-1 metal fuels irradiation test in FFTF"
# Argonne National Laboratory ANL-IFR-33, Argonne, Illinois (1986)
(assessment/metallic_fuel/EBRII/X430/analysis/template.i)
# TEMPLATE FILE
# This is not an input file. It is a template used to populate the input files.
# Changes made to this file will be applied to all 25 X430 input files.
# Values used for individual pins are stored in pin_inputs.csv. Input files are
# generated using the Python script generate_input_files.py.
# X430 ASSESSMENT CASE
# BISON recreation of the 52-pin X430 experiment series, which was irradiated in
# EBR-II from 1987-88 to a peak burnup of about 10 at%. The subassembly
# contained 37 pins and was irradiated in three experiments: X430, X430A, and
# X430B. After each experiment, pins were removed, examined, replaced as
# necessary, and the subassembly was reconstructed. BISON simulations were
# developed for 25 of the pins, of which 2 are
# assessments. Legacy calculations and PIE measurements are available for all 25
# pins. Units are in standard SI: J, K, kg, m, Pa, s.
# For a more complete description of the experiments, see [Hayes et al., 1994].
# For a more complete description of the development and results of this
# assessment, see [Greenquist and Powers, 2021].
# This file simulates pin %{pin} with a composition of %{composition}.
[GlobalParams]
dim = 2
order = SECOND
family = LAGRANGE
elem_type = QUAD8
energy_per_fission = 3.2e-11 # [Shultis and Faw, 2008]
volumetric_locking_correction = false
displacements = 'disp_x disp_y'
temperature = T
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = ref
extra_tag_vectors = ref
[]
[Mesh]
coord_type = RZ
# Mesh includes a fuel slug and cladding. All dimensions are in meters. See
# [Hayes et al., 1994] and [Greenquist and Powers, 2021] for more complete
# descriptions.
type = MeshGeneratorMesh
patch_size = 30
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
# build cladding
[bottom_plug]
type = GeneratedMeshGenerator
xmin = 0.0
xmax = 0.0032786
nx = 5
ymin = 0.0
ymax = 0.015
ny = 4
[]
[bottom_corner]
type = GeneratedMeshGenerator
xmin = 0.0032786
xmax = 0.003685
nx = 8
ymin = 0.0
ymax = 0.015
ny = 4
[]
[bottom_corner_rename_side]
type = SideSetsFromNormalsGenerator
input = bottom_corner
normals = '0 1 0'
new_boundary = new_side
[]
[combine_bottom_and_bottom_corner]
type = StitchedMeshGenerator
inputs = 'bottom_plug bottom_corner_rename_side'
stitch_boundaries_pairs = 'right left'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
[cladding_wall]
type = GeneratedMeshGenerator
xmin = 0.0032786
xmax = 0.003685
nx = 8
ymin = 0.015
ymax = 0.72565
ny = 120
[]
[cladding_wall_rename_side]
type = SideSetsFromNormalsGenerator
input = cladding_wall
normals = '0 1 0'
new_boundary = new_side
[]
[combine_bottom_and_wall]
type = StitchedMeshGenerator
inputs = 'combine_bottom_and_bottom_corner cladding_wall_rename_side'
stitch_boundaries_pairs = '4 bottom'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
[top_corner]
type = GeneratedMeshGenerator
xmin = 0.0032786
xmax = 0.003685
nx = 8
ymin = 0.72565
ymax = 0.74065
ny = 4
[]
[top_corner_rename_side]
type = SideSetsFromNormalsGenerator
input = top_corner
normals = '-1 0 0'
new_boundary = new_side
[]
[combine_wall_and_top_corner]
type = StitchedMeshGenerator
inputs = 'combine_bottom_and_wall top_corner_rename_side'
stitch_boundaries_pairs = '4 bottom'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
[top_plug]
type = GeneratedMeshGenerator
xmin = 0.0
xmax = 0.0032786
nx = 5
ymin = 0.72565
ymax = 0.74065
ny = 4
[]
[cladding_all]
type = StitchedMeshGenerator
inputs = 'combine_wall_and_top_corner top_plug'
stitch_boundaries_pairs = '4 right'
clear_stitched_boundary_ids = true
prevent_boundary_ids_overlap = false
[]
# build fuel
[fuel_slug]
type = GeneratedMeshGenerator
xmin = 0.0
xmax = %{fuel_r}
nx = 5
ymin = 0.019
ymax = %{fuel_top}
ny = 250
[]
# combine and name subdomains
[combine_fuel_cladding]
type = CombinerGenerator
inputs = 'cladding_all fuel_slug'
[]
[name_cladding]
type = SubdomainBoundingBoxGenerator
input = combine_fuel_cladding
bottom_left = '0.0 0.0 0.0'
top_right = '0.003685 0.74065 0.0'
location = INSIDE
block_id = 0
block_name = clad
[]
[name_fuel]
type = SubdomainBoundingBoxGenerator
input = name_cladding
bottom_left = '0.0 0.019 0.0'
top_right = '%{fuel_r} %{fuel_top} 0.0'
location = INSIDE
block_id = 1
block_name = pellet
[]
# name boundaries
[name_centerline]
type = SideSetsFromNormalsGenerator
input = name_fuel
normals = '-1 0 0'
new_boundary = centerline
replace = true
[]
[name_slug_outer_surface]
type = SideSetsFromNormalsGenerator
input = name_centerline
normals = '1 0 0'
new_boundary = pellet_outer_radial_surface
replace = true
[]
[name_slug_ends]
type = SideSetsFromPointsGenerator
input = name_slug_outer_surface
points = '0.50e-3 0.019 0.0
0.50e-3 %{fuel_top} 0.0'
new_boundary = 'bottom_of_bottom_pellet top_of_top_pellet'
replace = true
[]
[name_cladding_inside]
type = SideSetsFromPointsGenerator
input = name_slug_ends
points = '0.50e-3 0.015 0.0
0.0032786 0.36 0.0
0.50e-3 0.72565 0.0'
new_boundary = 'clad_inside_bottom clad_inside_right clad_inside_top'
replace = true
[]
[name_cladding_outer_surface]
type = SideSetsFromPointsGenerator
input = name_cladding_inside
points = '0.003685 0.36 0.0
0.50e-3 0.0 0.0
0.50e-3 0.74065 0.0'
new_boundary = 'clad_outside_right clad_outside_bottom clad_outside_top'
replace = true
[]
[]
[Variables]
[T]
initial_condition = 298
[]
[]
[AuxVariables]
[gap_conductance]
order = CONSTANT
family = MONOMIAL
[]
[fuel_clad_gap_width]
order = FIRST
family = LAGRANGE
[]
[element_failed]
order = CONSTANT
family = MONOMIAL
[]
[fuel_volumetric_strain]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[clad_hoop_stress]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[clad_hoop_creep_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[clad_hoop_elastic_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[clad_hoop_total_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[local_power]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[T_coolant]
order = CONSTANT
family = MONOMIAL
[]
[pin_lhr]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[eutectic_thickness]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[assembly_lhr_avg_function]
# Subassembly average LHR as a function of time. x: time (s), y: average
# LHGR (W/m). See [Greenquist and Powers, 2021].
type = PiecewiseLinear
x = ' 0 3600 8203212 8206812 13814423 13818023 14428975 14432575
21312419 21316019 25596874 25600474 26261755 26265355 32714598 32718198
32721798 32725398 32728998 32896765 32900365 39574695 39578295 42194062
42197662 43820808 43824408 43895709 43899309 44401212 44404812 47385472
47389072 48198548 48202148 48205748 48209348 48212948 52079977 52083577
53874489 53878089 62125235 62128835 62256058 62259658 62620357 62623957
64516928 64520528 64766586 64770186 67535546 67539146 72155534 72159134
72185697 72189297 76833647 76837247 77340548 77344148 77738400 77742000
80444447 80448047 80451647 80455247'
y = ' 0.0 44225.3 44225.3 43106.1 43106.1 41403.6 41403.6 41119.9
41119.9 38881.4 38881.4 38353.3 38353.3 39472.5 39472.5 0.0
0.0 0.0 33490.2 33490.2 36863.6 36863.6 37123.7 37123.7
32717.8 32717.8 38534.6 38534.6 38432.1 38432.1 36784.8 36784.8
36036.0 36036.0 0.0 0.0 0.0 35153.3 35153.3 35153.3
35153.3 35271.5 35271.5 33663.6 33663.6 34459.7 34459.7 34640.9
34640.9 34428.1 34428.1 34026.2 34026.2 33624.2 33624.2 33624.2
33624.2 33718.8 33718.8 34057.7 34057.7 34057.7 34057.7 34215.3
34215.3 0.0 0.0 0.0'
[]
[radial_peaking_factor_function]
# Adjusts the pin's average LHR based on its location in the subassembly.
# x: time [s], y: relative LHR change. See [Greenquist and Powers, 2021].
type = PiecewiseLinear
x = ' 0 32718198
32725398 48202148
48209348 80455247'
y = '%{rad_LHR_X430} %{rad_LHR_X430}
%{rad_LHR_X430a} %{rad_LHR_X430a}
%{rad_LHR_X430b} %{rad_LHR_X430b}'
[]
[lhr_peaking_factor_function]
# Axial variation from the average LHR. x: axial position (m), y: time (s),
# z: peaking factor. See [Hayes et al., 1994] and
# [Greenquist and Powers, 2021].
#
type = PiecewiseBilinear
xaxis = 1
yaxis = 0
y = '0 32725398 48209348 80455247'
x = '0.018 0.019 %{z01} %{z02} %{z03} %{z04}
%{z05} %{z06} %{z07} %{z08} %{z09}
%{fuel_top} %{z11}'
z = '0.0000 %{pX430_00} %{pX430_01} %{pX430_02} %{pX430_03} %{pX430_04}
%{pX430_05} %{pX430_06} %{pX430_07} %{pX430_08} %{pX430_09}
%{pX430_10} 0.0000
0.0000 %{pX430a_00} %{pX430a_01} %{pX430a_02} %{pX430a_03} %{pX430a_04}
%{pX430a_05} %{pX430a_06} %{pX430a_07} %{pX430a_08} %{pX430a_09}
%{pX430a_10} 0.0000
0.0000 %{pX430b_00} %{pX430b_01} %{pX430b_02} %{pX430b_03} %{pX430b_04}
%{pX430b_05} %{pX430b_06} %{pX430b_07} %{pX430b_08} %{pX430b_09}
%{pX430b_10} 0.0000
0.0000 %{pEOL_00} %{pEOL_01} %{pEOL_02} %{pEOL_03} %{pEOL_04}
%{pEOL_05} %{pEOL_06} %{pEOL_07} %{pEOL_08} %{pEOL_09}
%{pEOL_10} 0.0000'
[]
[coolant_flux_function]
# Subassembly coolant mass flux. x: time (s), y: flux (kg m^-2 s^-1). See
# [Hayes et al., 1994] and [Greenquist and Powers, 2021].
type = PiecewiseLinear
x = ' 0 3600 8203212 8206812 13814423 13818023 14428975 14432575
21312419 21316019 25596874 25600474 26261755 26265355 32714598 32718198
32721798 32725398 32728998 32896765 32900365 39574695 39578295 42194062
42197662 43820808 43824408 43895709 43899309 44401212 44404812 47385472
47389072 48198548 48202148 48205748 48209348 48212948 52079977 52083577
53874489 53878089 62125235 62128835 62256058 62259658 62620357 62623957
64516928 64520528 64766586 64770186 67535546 67539146 72155534 72159134
72185697 72189297 76833647 76837247 77340548 77344148 77738400 77742000
80444447 80448047 80451647 80455247'
y = ' 2699.1 2699.1 2699.1 2724.0 2724.0 2697.2 2697.2 2781.0
2781.0 2721.1 2721.1 2696.9 2696.9 2785.4 2785.4 2785.4
2785.4 2785.4 2793.7 2793.7 2803.5 2803.5 2814.2 2814.2
2799.6 2799.6 2840.1 2840.1 2839.6 2839.6 2873.7 2873.7
2855.7 2855.7 2855.7 2855.7 2855.7 2826.4 2826.4 2826.4
2826.4 2788.4 2788.4 2780.6 2780.6 2771.8 2771.8 2781.5
2781.5 2817.1 2817.1 2807.4 2807.4 2777.1 2777.1 2777.1
2777.1 2746.4 2746.4 2765.9 2765.9 2765.9 2765.9 2777.1
2777.1 2777.1 2777.1 2777.1'
[]
[pin_lhr_avg_function]
type = CompositeFunction
functions = 'assembly_lhr_avg_function radial_peaking_factor_function'
[]
[pin_lhr_function]
type = CompositeFunction
functions = 'pin_lhr_avg_function lhr_peaking_factor_function'
[]
[coolant_pressure_function]
type = ConstantFunction
value = 347702.6 # [Snyder, 1988]
[]
[T_coolant_in_function]
# Sodium coolant inlet temperature. x: time (s), y: temperature (K). See
# [Hayes et al., 1994].
type = PiecewiseLinear
x = ' 0 3600 32718198 32721798 32725398 32728998 48202148 48205748
48209348 48212948 80448047 80451647 80455247'
y = ' 298.00 644.15 644.15 305.00 305.00 644.15 644.15 305.00
305.00 644.15 644.15 305.00 305.00'
[]
[sodium_volume_function]
# the initial sodium height is assumed to be equal to the initial fuel
# height and sodium infiltration is ignored.
type = ParsedFunction
symbol_names = 'pellet_outer_radius cladding_gap_width pellet_height'
symbol_values = '%{fuel_r} %{gap_width} %{fuel_h}'
expression = 'pi * ((pellet_outer_radius + cladding_gap_width)^2 -
pellet_outer_radius^2) * pellet_height'
[]
[gas_volume_function]
type = ParsedFunction
symbol_names = 'clad_internal_volume fuel_volume sodium_volume'
symbol_values = 'clad_internal_volume fuel_volume sodium_volume'
expression = 'abs(clad_internal_volume) - abs(fuel_volume) - abs(sodium_volume)'
[]
[sodium_conductivity_function]
# Thermal conductivity (W m^-1 K^-1) of the pin gap sodium according to
# [Fink and Leibowitz, 1995]. t: temperature (K).
type = ParsedFunction
symbol_names = 'A B C D'
symbol_values = '124.67 -0.11381 5.5226e-5 -1.1842e-8'
expression = 'A + B * t + C * t^2 + D * t^3'
[]
[creep_timestep_min_function]
type = ParsedFunction
symbol_names = 'creep_timestep_fuel creep_timestep_clad'
symbol_values = 'creep_timestep_fuel creep_timestep_clad'
expression = 'min(creep_timestep_fuel, creep_timestep_clad)'
[]
[fuel_axial_elongation_max_pct_function]
type = ParsedFunction
symbol_names = 'fuel_axial_elongation_min fuel_axial_elongation_max pellet_height'
symbol_values = 'fuel_axial_elongation_min fuel_axial_elongation_max %{fuel_h}'
expression = '(fuel_axial_elongation_max - fuel_axial_elongation_min) /
pellet_height * 100'
[]
[fuel_radial_dilation_max_pct_function]
type = ParsedFunction
symbol_names = 'fuel_radial_dilation_max pellet_outer_radius'
symbol_values = 'fuel_radial_dilation_max %{fuel_r}'
expression = 'fuel_radial_dilation_max / pellet_outer_radius * 100'
[]
[clad_axial_elongation_max_pct_function]
type = ParsedFunction
symbol_names = 'clad_axial_elongation_max plug_height cladding_total_height'
symbol_values = 'clad_axial_elongation_max 0.015 0.74065'
expression = 'clad_axial_elongation_max /
(plug_height + cladding_total_height) * 100'
[]
[clad_radial_dilation_max_pct_function]
type = ParsedFunction
symbol_names = 'clad_radial_dilation_max cladding_outer_radius'
symbol_values = 'clad_radial_dilation_max 0.003685'
expression = 'clad_radial_dilation_max / cladding_outer_radius * 100'
[]
[plenum_compressibility_function]
# Accounts for nonideality in fission gas [Hobbs and Charboneau, 2020]
type = ParsedFunction
symbol_names = 'plenum_pressure A B C'
symbol_values = 'plenum_pressure 1.002 -3.4e-8 -1.9e-15'
expression = 'A + B * plenum_pressure + C * plenum_pressure^2'
[]
[compressibility_times_temperature_function]
type = ParsedFunction
symbol_names = 'plenum_temperature plenum_compressibility'
symbol_values = 'plenum_temperature plenum_compressibility'
expression = 'plenum_temperature * plenum_compressibility'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
add_variables = true
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress
hydrostatic_stress creep_strain_xx creep_strain_yy
creep_strain_zz elastic_strain_xx elastic_strain_yy
elastic_strain_zz strain_xx strain_yy strain_zz'
[fuel_mechanics]
block = pellet
eigenstrain_names = 'fuel_thermal_strain fuel_gaseous_strain
fuel_solid_strain'
extra_vector_tags = ref
[]
[clad_mechanics]
block = clad
eigenstrain_names = 'clad_thermal_strain clad_gaseous_strain'
extra_vector_tags = ref
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
extra_vector_tags = ref
[]
[heat_conduction_time_derivative]
type = HeatConductionTimeDerivative
variable = T
extra_vector_tags = ref
[]
[heat_conduction]
type = HeatConduction
variable = T
extra_vector_tags = ref
[]
[heat_source]
type = FissionRateHeatSource
block = pellet
variable = T
fission_rate = fission_rate
extra_vector_tags = ref
[]
[]
[AuxKernels]
[gap_conductance]
type = MaterialRealAux
variable = gap_conductance
property = gap_conductance
boundary = pellet_outer_radial_surface
[]
[fuel_clad_gap_width]
type = ParsedAux
variable = fuel_clad_gap_width
coupled_variables = penetration
expression = '-penetration'
[]
[failed_element]
type = MaterialRealAux
variable = element_failed
property = failed
boundary = clad_outside_right
[]
[fuel_volumetric_strain]
type = RankTwoScalarAux
block = pellet
variable = fuel_volumetric_strain
rank_two_tensor = total_strain
scalar_type = VolumetricStrain
[]
[clad_hoop_stress]
type = RankTwoAux
block = clad
variable = clad_hoop_stress
rank_two_tensor = stress
index_i = 2
index_j = 2
[]
[clad_hoop_creep_strain]
type = RankTwoAux
block = clad
variable = clad_hoop_creep_strain
rank_two_tensor = creep_strain
index_i = 2
index_j = 2
[]
[clad_hoop_elastic_strain]
type = RankTwoAux
block = clad
variable = clad_hoop_elastic_strain
rank_two_tensor = elastic_strain
index_i = 2
index_j = 2
[]
[clad_hoop_total_strain]
type = RankTwoAux
block = clad
variable = clad_hoop_total_strain
rank_two_tensor = total_strain
index_i = 2
index_j = 2
[]
[local_power]
type = FunctionAux
block = pellet
variable = local_power
function = lhr_peaking_factor_function
[]
[T_coolant]
type = MaterialRealAux
variable = T_coolant
property = coolant_temperature
boundary = clad_outside_right
[]
[pin_lhr]
type = FunctionAux
block = pellet
variable = pin_lhr
function = pin_lhr_function
[]
[eutectic_thickness]
type = DiffusionalEutecticThicknessFCCI
block = clad
variable = eutectic_thickness
temperature = T
boundary = clad_inside_right
execute_on = TIMESTEP_END
[]
[]
[Contact]
[frictionless_fuel_clad_mechanical]
primary = clad_inside_right
secondary = pellet_outer_radial_surface
model = frictionless
formulation = kinematic
tangential_tolerance = 1e-3
normal_smoothing_distance = 0.1
[]
[]
[ThermalContact]
[thermal_contact]
type = GapHeatTransfer
variable = T
primary = clad_inside_right
secondary = pellet_outer_radial_surface
gap_geometry_type = CYLINDER
gap_conductivity_function = sodium_conductivity_function
gap_conductivity_function_variable = T
quadrature = true
min_gap = %{gap_width} # Initial gap thickness according to dimensions.
tangential_tolerance = 1e-4
[]
[]
[BCs]
[fix_disp_x_all]
type = DirichletBC
variable = disp_x
value = 0.0
boundary = centerline
[]
[fix_disp_y_all]
type = DirichletBC
variable = disp_y
value = 0.0
boundary = 'clad_outside_bottom bottom_of_bottom_pellet'
[]
[Pressure]
[coolant_pressure]
function = coolant_pressure_function
boundary = 'clad_outside_bottom clad_outside_right clad_outside_top'
[]
[]
[PlenumPressure]
[plenum_pressure]
boundary = 'clad_inside_bottom clad_inside_right clad_inside_top'
startup_time = 0
initial_pressure = 84000 # [Hayes et al., 1994]
volume = gas_volume
material_input = fission_gas_released
R = 8.3143
temperature = plenum_temperature
output = plenum_pressure
[]
[]
[]
[PlenumTemperature]
[plenum_temperature]
temperature = T
boundary = 'bottom_of_bottom_pellet pellet_outer_radial_surface
top_of_top_pellet clad_inside_bottom clad_inside_right
clad_inside_top'
inner_surfaces = 'bottom_of_bottom_pellet pellet_outer_radial_surface
top_of_top_pellet'
outer_surfaces = 'clad_inside_bottom clad_inside_right clad_inside_top'
[]
[]
[CoolantChannel]
[convective_clad_surface]
variable = T
inlet_temperature = T_coolant_in_function
inlet_pressure = coolant_pressure_function
inlet_massflux = coolant_flux_function
coolant_material = sodium
rod_diameter = 0.00737 # [Hayes et al., 1994]
rod_pitch = %{pin_pitch}
linear_heat_rate = pin_lhr_avg_function
axial_power_profile = lhr_peaking_factor_function
subchannel_geometry = triangular
boundary = 'clad_outside_bottom clad_outside_right clad_outside_top'
[]
[]
[Materials]
###### FUEL ######
[fuel_fission_rate]
type = UPuZrFissionRate
block = pellet
rod_linear_power = pin_lhr_avg_function
axial_power_profile = lhr_peaking_factor_function
pellet_radius = %{fuel_r}
initial_X_Zr = %{x_Zr}
X_Zr = %{x_Zr}
outputs = exodus
output_properties = fission_rate
[]
[fuel_burnup]
type = UPuZrBurnup
block = pellet
density = %{fuel_density}
initial_X_Pu = %{x_Pu}
initial_X_Zr = %{x_Zr}
outputs = exodus
output_properties = burnup
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = %{fuel_density}
[]
[fuel_sodium_logging]
type = UPuZrSodiumLogging
block = pellet
porosity = porosity
sodium_infiltration_fraction = %{na_infiltration}
outputs = exodus
output_properties = sodium_logged_porosity
[]
[fuel_thermal_properties]
type = UPuZrThermal
block = pellet
X_Pu = %{x_Pu}
X_Zr = %{x_Zr}
spheat_model = savage
thcond_model = lanl
porosity_model = logged
porosity = porosity
sodium_logged_porosity = sodium_logged_porosity
[]
[fuel_elasticity_tensor]
type = UPuZrElasticityTensor
block = pellet
X_Pu = %{x_Pu}
X_Zr = %{x_Zr}
porosity = porosity
[]
[fuel_creep]
type = UPuZrCreepUpdate
block = pellet
porosity = porosity
max_inelastic_increment = 3e-3
effective_inelastic_strain_name = fuel_effective_creep_strain
[]
[fuel_gaseous_swelling]
type = UPuZrGaseousEigenstrain
block = pellet
fission_rate = fission_rate
anisotropic_factor = 0.5
bubble_number_density = 5e17
interconnection_initiating_porosity = %{fgr_initiating_porosity}
interconnection_terminating_porosity = %{fgr_terminating_porosity}
eigenstrain_name = fuel_gaseous_strain
outputs = exodus
output_properties = 'gas_swelling porosity interconnectivity'
[]
[fuel_solid_swelling]
type = BurnupDependentEigenstrain
block = pellet
eigenstrain_name = fuel_solid_strain
swelling_name = solid_swelling
swelling_factor = 0 # Solid swelling is negligible below 10% burnup
outputs = exodus
output_properties = solid_swelling
[]
[fuel_fission_gas_release]
type = UPuZrFissionGasRelease
block = pellet
fission_rate = fission_rate
porosity = porosity
critical_porosity = %{critical_porosity}
fractional_fgr_initial = %{fgr_initial}
fractional_fgr_post = %{fgr_post}
[]
[fuel_thermal_expansion]
type = UPuZrThermalExpansionEigenstrain
block = pellet
stress_free_temperature = 298
eigenstrain_name = fuel_thermal_strain
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
block = pellet
inelastic_models = fuel_creep
[]
###### CLADDING ######
[fast_neutron_flux]
type = UPuZrFastNeutronFlux
pellet_radius = %{fuel_r}
axial_power_profile = lhr_peaking_factor_function
rod_linear_power = pin_lhr_avg_function
initial_density = %{fuel_density}
initial_X_Pu = %{x_Pu}
initial_X_Zr = %{x_Zr}
enrichment_U235 = %{enrichment_U}
enrichment_Pu240 = %{enrichment_Pu}
calculate_fluence = true
outputs = exodus
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 7771
[]
[clad_thermal_properties]
type = HT9Thermal
block = clad
[]
[clad_gaseous_swelling]
type = HT9VolumetricSwellingEigenstrain
block = clad
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
eigenstrain_name = clad_gaseous_strain
[]
[clad_thermal_expansion]
type = HT9ThermalExpansionEigenstrain
block = clad
eigenstrain_name = clad_thermal_strain
stress_free_temperature = 298
[]
[clad_elasticity_tensor]
type = HT9ElasticityTensor
block = clad
[]
[clad_creep]
type = HT9CreepUpdate
block = clad
first_thermal_scalar = 1
second_thermal_scalar = 1
irradiation_scalar = 1
max_inelastic_increment = 3e-3 # 1e-2
effective_inelastic_strain_name = clad_effective_creep_strain
[]
[clad_failure]
type = HT9FailureClad
method = cdf_long
hoop_stress = stress_zz
boundary = clad_outside_right
outputs = exodus
output_properties = cdf_failure
[]
[inner_clad_wastage]
type = MetallicFuelWastage
block = clad
method = flux_ht9
burnup = 0 # not used but must be specified
outputs = exodus
output_properties = wastage_thickness
[]
[outer_clad_wastage]
type = MetallicFuelCoolantWastage
block = clad
clad_material = HT9
use_effective_method = true
outputs = exodus
[]
[clad_wastage_fraction]
type = MetallicFuelWastageDamage
block = clad
wastage_thickness = wastage_thickness
pellet_length = %{fuel_h}
pellet_y_start = 0.019
cladding_thickness = 0.0004064
outputs = exodus
[]
[clad_damage_fraction]
type = ScalarMaterialDamage
block = clad
damage_index = thinning_fraction
outputs = exodus
[]
[clad_elastic_stress]
type = ComputeMultipleInelasticStress
block = clad
inelastic_models = clad_creep
[]
[]
[Dampers]
[T_damper]
type = MaxIncrement
variable = T
max_increment = 25
[]
[disp_x_damper]
type = MaxIncrement
variable = disp_x
max_increment = 3.00E-04
[]
[disp_y_damper]
type = MaxIncrement
variable = disp_y
max_increment = 3.00E-04
[]
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
automatic_scaling = true
compute_scaling_once = false
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package
-ksp_gmres_restart'
petsc_options_value = 'lu superlu_dist
51'
line_search = NONE
l_max_its = 30
l_tol = 1e-3
nl_max_its = 30
nl_rel_tol = 1e-4
nl_abs_tol = 5e-7
start_time = %{t_start}
end_time = %{t_end}
dtmin = 1e-2
dtmax = 1e6
verbose = true
[Quadrature]
order = FIFTH
side_order = SEVENTH
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
optimal_iterations = 10
iteration_window = 4
growth_factor = 1.25
cutback_factor = 0.512
linear_iteration_ratio = 100
force_step_every_function_point = true
timestep_limiting_function = assembly_lhr_avg_function
timestep_limiting_postprocessor = creep_timestep_min
[]
[]
[Postprocessors]
###### POWER ######
[fission_rate_density_avg]
type = ElementAverageValue
block = pellet
variable = fission_rate
outputs = csv
[]
[fast_neutron_fluence_avg]
type = ElementAverageValue
variable = fast_neutron_fluence
outputs = 'csv chkfile'
[]
[fast_neutron_fluence_max]
type = ElementExtremeValue
variable = fast_neutron_fluence
value_type = max
outputs = 'csv chkfile'
[]
[pin_hr_tot]
type = ElementIntegralPower
block = pellet
variable = T # required but not actually used
use_material_fission_rate = true
fission_rate_material = fission_rate
outputs = csv
[]
[pin_lhr_avg]
type = FunctionValuePostprocessor
function = pin_lhr_avg_function
outputs = csv
[]
###### HEAT TRANSFER ######
[radial_heat_flux_from_fuel]
type = SideDiffusiveFluxIntegral
variable = T
boundary = pellet_outer_radial_surface
diffusivity = thermal_conductivity
outputs = csv
[]
[radial_heat_flux_from_clad]
type = SideDiffusiveFluxIntegral
variable = T
boundary = clad_outside_right
diffusivity = thermal_conductivity
outputs = csv
[]
###### FISSION GAS ###### (needed for simulation to run)
[fission_gas_produced]
type = ElementIntegralMaterialProperty
block = pellet
mat_prop = fis_gas_prod
outputs = 'csv chkfile'
[]
[fission_gas_released]
type = ElementIntegralMaterialProperty
block = pellet
mat_prop = fis_gas_rel
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[fission_gas_released_pct]
type = FGRPercent
fission_gas_generated = fission_gas_produced
fission_gas_released = fission_gas_released
outputs = 'console csv chkfile'
[]
[clad_internal_volume]
type = InternalVolume
boundary = 'clad_inside_bottom clad_inside_right clad_inside_top'
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[fuel_volume]
type = InternalVolume
boundary = 'bottom_of_bottom_pellet pellet_outer_radial_surface
top_of_top_pellet'
scale_factor = -1 # makes the fuel volume positive
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[sodium_volume]
type = FunctionValuePostprocessor
function = sodium_volume_function
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[gas_volume]
type = FunctionValuePostprocessor
function = gas_volume_function
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[plenum_compressibility]
type = FunctionValuePostprocessor
function = plenum_compressibility_function
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
[compressibility_times_temperature]
type = FunctionValuePostprocessor
function = compressibility_times_temperature_function
execute_on = 'INITIAL LINEAR TIMESTEP_END'
outputs = csv
[]
###### BURNUP ######
[burnup_max]
type = ElementExtremeValue
block = pellet
variable = burnup
value_type = max
outputs = csv
[]
[burnup_max_pct]
type = LinearCombinationPostprocessor
pp_names = burnup_max
pp_coefs = 100
outputs = 'csv chkfile'
[]
[burnup_avg]
type = ElementAverageValue
block = pellet
variable = burnup
outputs = csv
[]
[burnup_avg_pct]
type = LinearCombinationPostprocessor
pp_names = burnup_avg
pp_coefs = 100
outputs = 'console csv chkfile'
[]
###### FUEL TEMPERATURE ######
[fuel_T_max]
type = ElementExtremeValue
block = pellet
variable = T
value_type = max
outputs = csv
[]
[fuel_T_max_peak]
type = TimeExtremeValue
postprocessor = fuel_T_max
value_type = max
outputs = 'csv chkfile'
[]
[fuel_T_surface_max]
type = NodalExtremeValue
boundary = pellet_outer_radial_surface
variable = T
value_type = max
outputs = csv
[]
[fuel_T_surface_max_peak]
type = TimeExtremeValue
postprocessor = fuel_T_surface_max
value_type = max
outputs = 'csv chkfile'
[]
###### CLADDING TEMPERATURE ######
[clad_T_max]
type = ElementExtremeValue
block = clad
variable = T
value_type = max
outputs = csv
[]
[clad_T_max_peak]
type = TimeExtremeValue
postprocessor = clad_T_max
value_type = max
outputs = csv
[]
[clad_T_inner_surface_max]
type = NodalExtremeValue
boundary = clad_inside_right
variable = T
value_type = max
outputs = csv
[]
[clad_T_inner_surface_max_peak]
type = TimeExtremeValue
postprocessor = clad_T_inner_surface_max
value_type = max
outputs = 'csv chkfile'
[]
[clad_T_outer_surface_max]
type = NodalExtremeValue
boundary = clad_outside_right
variable = T
value_type = max
outputs = csv
[]
[clad_T_outer_surface_max_peak]
type = TimeExtremeValue
postprocessor = clad_T_outer_surface_max
value_type = max
outputs = 'csv chkfile'
[]
###### COOLANT PARAMETERS ######
[T_coolant_in]
type = FunctionValuePostprocessor
function = T_coolant_in_function
outputs = csv
[]
[T_coolant_out]
type = ElementExtremeValue
block = clad
variable = T_coolant
value_type = max
outputs = csv
[]
[coolant_flux]
type = FunctionValuePostprocessor
function = coolant_flux_function
outputs = csv
[]
###### FUEL DEFORMATION ######
[fuel_axial_elongation_min]
type = NodalExtremeValue
block = pellet
variable = disp_y
value_type = min
outputs = csv
[]
[fuel_axial_elongation_max]
type = NodalExtremeValue
block = pellet
variable = disp_y
value_type = max
outputs = csv
[]
[fuel_axial_elongation_max_pct]
type = FunctionValuePostprocessor
function = fuel_axial_elongation_max_pct_function
outputs = 'console csv chkfile'
[]
[fuel_radial_dilation_max]
type = NodalExtremeValue
variable = disp_x
boundary = pellet_outer_radial_surface
value_type = max
outputs = csv
[]
[fuel_radial_dilation_max_pct]
type = FunctionValuePostprocessor
function = fuel_radial_dilation_max_pct_function
outputs = csv
[]
###### CLADDING DEFORMATION ######
[clad_axial_elongation_max]
type = NodalExtremeValue
block = clad
variable = disp_y
value_type = max
outputs = csv
[]
[clad_axial_elongation_max_pct]
type = FunctionValuePostprocessor
function = clad_axial_elongation_max_pct_function
outputs = 'csv chkfile'
[]
[clad_radial_dilation_max]
type = NodalExtremeValue
variable = disp_x
boundary = clad_outside_right
value_type = max
outputs = csv
[]
[clad_radial_dilation_max_pct]
type = FunctionValuePostprocessor
function = clad_radial_dilation_max_pct_function
outputs = 'console csv chkfile'
[]
###### GAP DEFORMATION AND MECHANICS ######
[gap_width_min]
type = NodalExtremeValue
variable = fuel_clad_gap_width
boundary = pellet_outer_radial_surface
value_type = min
outputs = csv
[]
[gap_width_max]
type = NodalExtremeValue
variable = fuel_clad_gap_width
boundary = pellet_outer_radial_surface
value_type = max
outputs = csv
[]
[gap_width_avg]
type = SideAverageValue
variable = fuel_clad_gap_width
boundary = pellet_outer_radial_surface
outputs = csv
[]
[contact_pressure_max]
type = NodalExtremeValue
variable = contact_pressure
boundary = pellet_outer_radial_surface
value_type = max
outputs = csv
[]
###### FUEL MECHANICS ######
[fuel_hydrostatic_stress_min]
type = ElementExtremeValue
block = pellet
variable = hydrostatic_stress
value_type = min
outputs = csv
[]
[fuel_hydrostatic_stress_max]
type = ElementExtremeValue
block = pellet
variable = hydrostatic_stress
value_type = max
outputs = csv
[]
[fuel_hydrostatic_stress_avg]
type = ElementAverageValue
block = pellet
variable = hydrostatic_stress
outputs = csv
[]
[fuel_volumetric_strain_avg]
type = ElementAverageValue
block = pellet
variable = fuel_volumetric_strain
outputs = 'csv chkfile'
[]
###### CLADDING MECHANICS ######
[clad_hoop_stress_max]
type = ElementExtremeValue
block = clad
variable = clad_hoop_stress
value_type = max
outputs = csv
[]
[clad_hoop_creep_strain_max]
type = ElementExtremeValue
block = clad
variable = clad_hoop_creep_strain
value_type = max
outputs = 'csv chkfile'
[]
[clad_hoop_elastic_strain_max]
type = ElementExtremeValue
block = clad
variable = clad_hoop_elastic_strain
value_type = max
outputs = 'csv chkfile'
[]
[clad_hoop_total_strain_max]
type = ElementExtremeValue
block = clad
variable = clad_hoop_total_strain
value_type = max
outputs = 'csv chkfile'
[]
[cdf_max]
type = ElementExtremeValue
variable = cdf_failure
value_type = max
outputs = 'console csv'
[]
###### PERFORMANCE ######
[creep_timestep_fuel]
type = MaterialTimeStepPostprocessor
block = pellet
outputs = csv
[]
[creep_timestep_clad]
type = MaterialTimeStepPostprocessor
block = clad
outputs = csv
[]
[creep_timestep_min]
type = FunctionValuePostprocessor
function = creep_timestep_min_function
outputs = csv
[]
###### SWELLING ######
[solid_swelling_avg]
type = ElementAverageValue
block = pellet
variable = solid_swelling
outputs = 'csv chkfile'
[]
[gas_swelling_avg]
type = ElementAverageValue
block = pellet
variable = gas_swelling
outputs = 'csv chkfile'
[]
[porosity_avg]
type = ElementAverageValue
block = pellet
variable = porosity
outputs = 'csv chkfile'
[]
[sodium_logged_porosity_avg]
type = ElementAverageValue
block = pellet
variable = sodium_logged_porosity
outputs = 'csv chkfile'
[]
###### CLADDING WASTAGE ######
[wastage_max]
type = ElementExtremeValue
block = clad
variable = wastage_thickness
value_type = max
outputs = 'csv chkfile'
[]
[wastage_min]
type = ElementExtremeValue
block = clad
variable = wastage_thickness
value_type = min
outputs = csv
[]
[wastage_avg]
type = ElementAverageValue
block = clad
variable = wastage_thickness
outputs = csv
[]
[eutectic_max]
type = ElementExtremeValue
block = clad
variable = eutectic_thickness
value_type = max
outputs = csv
[]
[eutectic_min]
type = ElementExtremeValue
block = clad
variable = eutectic_thickness
value_type = min
outputs = csv
[]
[eutectic_avg]
type = ElementAverageValue
block = clad
variable = eutectic_thickness
outputs = csv
[]
[]
[VectorPostprocessors]
[fuel_centerline]
type = SideValueSampler
variable = 'T disp_x disp_y'
boundary = centerline
sort_by = y
outputs = csv
[]
[fuel_surface]
type = SideValueSampler
variable = 'T disp_x disp_y'
boundary = pellet_outer_radial_surface
sort_by = y
outputs = csv
[]
[clad_inner_surface]
type = SideValueSampler
variable = 'T disp_x disp_y'
boundary = clad_inside_right
sort_by = y
outputs = csv
[]
[clad_outer_surface]
type = SideValueSampler
variable = 'T disp_x disp_y'
boundary = clad_outside_right
sort_by = y
outputs = csv
[]
[]
[PerformanceMetricOutputs]
outputs = 'csv performance'
[]
[Outputs]
color = false
perf_graph = true
[console]
type = Console
output_screen = true
[]
[exodus]
type = Exodus
execute_on = 'INITIAL TIMESTEP_END FINAL'
time_step_interval = 50
[]
[csv]
type = CSV
execute_postprocessors_on = 'INITIAL TIMESTEP_END'
execute_vector_postprocessors_on = FINAL
[]
[chkfile]
type = CSV
execute_postprocessors_on = FINAL
[]
[performance]
type = CSV
hide = 'plenum_pressure plenum_temperature'
execute_postprocessors_on = FINAL
[]
[]
# REFERENCES
# [Fink and Leibowitz, 1995]
# J. K. Fink and L. Leibowitz, "Thermodynamic and transport properties of
# sodium liquid and vapor", Argonne National Laboratory ANL/RE--95/2, 94649,
# Argonne, Illinois (1995)
# [Greenquist and Powers, 2021]
# I. Greenquist, J.J. Powers "25-Pin metallic fuel performance benchmark
# case based on the EBR-II X430 experiment series" Journal of Nuclear
# Materials Vol 556, 153211 (2021)
# [Hayes et al., 1994]
# S.L. Hayes, D.C. Crawford, R.G. Phal "Test Design and Postirradiation
# Examination of the HT9 Advanced Driver Fuel Test (X430)" Argonne National
# Laboratory ANL-IFR-225, Idaho Falls, Idaho (1994)
# [Hobbs and Charboneau, 2020]
# I.M. Hobbs, J.A. Charboneau "Compressibility of gas mixtures pertaining to
# nuclear fuel rods" Journal of Physics Comminications Vol. 4, Iss. 9,
# 095008 (2020)
# [Shultis and Faw, 2008]
# J.K. Shultis, R.E. Faw "Fundamentals of Nuclear Science and Engineering
# Second Edition" CRC Press, Boca Raton, Florida (2008)
# [Snyder, 1988]
# E. Snyder "Report of EBR-II Operations: Run 146 and 147", Argonne National
# Laboratory ANLEBR.R146 ANLEBR.R147, Idaho Falls, Idaho (1988)
(test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_cool_heat.i)
# This test calculates the thickness layer of the liquid penetration
# by heating from 1200 K, cooling to 900 K, and heating back to 1200 K.
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 1
nx = 3
[]
[]
[AuxVariables]
[thickness]
order = CONSTANT
family = MONOMIAL
[]
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxKernels]
[fcci_eutectic]
boundary = right
execute_on = timestep_end
type = DiffusionalEutecticThicknessFCCI
temperature = temperature
variable = thickness
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
[]
[]
[Functions]
[temp_bound]
type = PiecewiseLinear
x = '0 25 50'
y = '1200 900 1200'
[]
[]
[BCs]
[left]
type = FunctionDirichletBC
variable = temperature
boundary = left
function = temp_bound
[]
[]
[Materials]
[density]
type = ParsedMaterial
property_name = density
expression = 1
[]
[heatcond]
type = HeatConductionMaterial
specific_heat = 1
thermal_conductivity = 1
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
start_time = 0.0
end_time = 50.0
[TimeStepper]
type = ConstantDT
dt = 1
[]
[]
[Postprocessors]
[right_thickness]
type = SideAverageValue
variable = thickness
boundary = right
[]
[right_value]
type = AverageNodalVariableValue
boundary = right
variable = temperature
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
csv = true
[]
(test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_1400K.i)
# This test calculates the thickness layer of the liquid penetration
# at 1400 K. The exact solution is:
# Time (s) Thickness (m)
# 1 1.0772e-4
# 5 2.4087e-4
# 10 3.4064e-4
# 20 4.8173e-4
# 30 5.9000e-4
# 40 6.8127e-4
# 50 7.6168e-4
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 1
nx = 3
[]
[]
[AuxVariables]
[thickness]
order = CONSTANT
family = MONOMIAL
[]
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1400
[]
[]
[AuxKernels]
[fcci_eutectic]
boundary = right
execute_on = timestep_end
type = DiffusionalEutecticThicknessFCCI
temperature = temperature
variable = thickness
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
[]
[]
[Functions]
[temp_bound]
type = PiecewiseLinear
x = '0 50'
y = '1400 1400'
[]
[]
[BCs]
[left]
type = FunctionDirichletBC
variable = temperature
boundary = left
function = temp_bound
[]
[]
[Materials]
[density]
type = ParsedMaterial
property_name = density
expression = 1
[]
[heatcond]
type = HeatConductionMaterial
specific_heat = 1
thermal_conductivity = 1
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
start_time = 0.0
end_time = 50.0
nl_abs_tol = 1e-12
[TimeStepper]
type = ConstantDT
dt = 1
[]
[]
[Postprocessors]
[right_thickness]
type = SideAverageValue
variable = thickness
boundary = right
[]
[right_value]
type = AverageNodalVariableValue
boundary = right
variable = temperature
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
csv = true
[]
(test/tests/fcci_ht9/diffusional_eutectic_thickness/fcci_heat.i)
# This test calculates the thickness layer of the liquid penetration
# by heating from 800 K to 1400 K.
[Mesh]
[mesh]
type = GeneratedMeshGenerator
dim = 1
nx = 3
[]
[]
[AuxVariables]
[thickness]
order = CONSTANT
family = MONOMIAL
[]
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 800
[]
[]
[AuxKernels]
[fcci_eutectic]
boundary = right
execute_on = timestep_end
type = DiffusionalEutecticThicknessFCCI
temperature = temperature
variable = thickness
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
[]
[]
[Functions]
[temp_bound]
type = PiecewiseLinear
x = '0 50'
y = '800 1400'
[]
[]
[BCs]
[left]
type = FunctionDirichletBC
variable = temperature
boundary = left
function = temp_bound
[]
[]
[Materials]
[density]
type = ParsedMaterial
property_name = density
expression = 1
[]
[heatcond]
type = HeatConductionMaterial
specific_heat = 1
thermal_conductivity = 1
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
start_time = 0.0
end_time = 50.0
[TimeStepper]
type = ConstantDT
dt = 1
[]
[]
[Postprocessors]
[right_thickness]
type = SideAverageValue
variable = thickness
boundary = right
[]
[right_value]
type = AverageNodalVariableValue
boundary = right
variable = temperature
execute_on = 'initial timestep_end'
[]
[]
[Outputs]
csv = true
[]