- eigenstrain_nameMaterial property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator.
C++ Type:std::string
Controllable:No
Description:Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator.
- stress_free_temperatureReference temperature at which there is no thermal expansion for thermal eigenstrain calculation
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Reference temperature at which there is no thermal expansion for thermal eigenstrain calculation
D9ThermalExpansionEigenstrain
Computes an eigenstrain due to thermal expansion for D9 using a function that describes the thermal strain as a function of temperature.
Description
D9ThermalExpansionEigenstrain calculates the thermal expansion for D9 alloys as a function of temperature as given in Hofman et al. (2019): (1) where is defined as the fraction length change from room temperature (293 K) to T (K). Eq. (1) has a standard deviation of 1.2% (Hofman et al., 2019), and is valid between 293 to 1200 K.
An automatic differentiation version of this class is available as ADD9ThermalExpansionEigenstrain.
Example Input Syntax
[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
[thexp]
type = D9ThermalExpansionEigenstrain<<<{"description": "Computes an eigenstrain due to thermal expansion for D9 using a function that describes the thermal strain as a function of temperature.", "href": "D9ThermalExpansionEigenstrain.html"}>>>
eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = thexp
stress_free_temperature<<<{"description": "Reference temperature at which there is no thermal expansion for thermal eigenstrain calculation"}>>> = 420
temperature<<<{"description": "Coupled temperature"}>>> = temp
[]
[](test/tests/solid_mechanics/d9_thermal_expansion/coupled.i)The eigenstrain name must also be passed to the strain calculator as shown below:
[Physics<<<{"href": "../../../syntax/Physics/index.html"}>>>]
[SolidMechanics<<<{"href": "../../../syntax/Physics/SolidMechanics/index.html"}>>>]
[QuasiStatic<<<{"href": "../../../syntax/Physics/SolidMechanics/QuasiStatic/index.html"}>>>]
[all]
strain<<<{"description": "Strain formulation"}>>> = SMALL
decomposition_method<<<{"description": "Methods to calculate the finite strain and rotation increments"}>>> = EigenSolution
add_variables<<<{"description": "Add the displacement variables"}>>> = true
eigenstrain_names<<<{"description": "List of eigenstrains to be applied in this strain calculation"}>>> = thexp
temperature<<<{"description": "The temperature"}>>> = temp
[]
[]
[]
[](test/tests/solid_mechanics/d9_thermal_expansion/coupled.i)Input Parameters
- base_nameOptional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases
C++ Type:std::string
Controllable:No
Description:Optional parameter that allows the user to define multiple mechanics material systems on the same block, i.e. for multiple phases
- 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
- computeTrueWhen false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
Default:True
C++ Type:bool
Controllable:No
Description:When false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.
- constant_onNONEWhen ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
Default:NONE
C++ Type:MooseEnum
Options:NONE, ELEMENT, SUBDOMAIN
Controllable:No
Description:When ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped
- declare_suffixAn optional suffix parameter that can be appended to any declared 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 declared properties. The suffix will be prepended with a '_' character.
- mean_thermal_expansion_coefficient_nameName of the mean coefficient of thermal expansion.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:Name of the mean coefficient of thermal expansion.
- temperatureCoupled temperature
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled temperature
- use_old_temperatureFalseFlag to optionally use the temperature value from the previous timestep.
Default:False
C++ Type:bool
Controllable:No
Description:Flag to optionally use the temperature value from the previous timestep.
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.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- 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
- cte_scale_factor1Scale factor to be applied to the thermal expansion coefficient. Used for calibration and sensitivity studies
Default:1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Scale factor to be applied to the thermal expansion coefficient. Used for calibration and sensitivity studies
Advanced: Scaling Factors Parameters
- output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)
C++ Type:std::vector<std::string>
Controllable:No
Description:List of material properties, from this material, to output (outputs must also be defined to an output type)
- outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object
Default:none
C++ Type:std::vector<OutputName>
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object
Outputs 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
- (assessment/metallic_fuel/FBTA/analysis/steady_state/common_inputs/d9_clad_base.i)
- (test/tests/solid_mechanics/ad_d9_thermal_expansion/exact.i)
- (assessment/metallic_fuel/FFTF/IFR1/analysis/IFR1_base.i)
- (assessment/metallic_fuel/EBRII/X423/analysis/x423_vp_base.i)
- (test/tests/solid_mechanics/d9_thermal_expansion/coupled.i)
- (test/tests/solid_mechanics/d9_thermal_expansion/exact.i)
- (examples/thor_capsule_transfer/pin_with_heat_sink.i)
- (test/tests/solid_mechanics/ad_d9_thermal_expansion/coupled.i)
References
- 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, and A. E. Wright.
Metallic fuels handbook.
Technical Report ANL-NSE-3, Argonne National Laboratory, 2019.[BibTeX]
@TECHREPORT{mfh1988, author = "Hofman, G. L. and Billone, M. C. and Koenig, J. F. and Kramer, J. M. and Lambert, J. D. B. and Leibowitz, L. and Orechwa, Y. and Pedersen, D. R. and Porter, D. L. and Tsai, H. and Wright, A. E.", institution = "Argonne National Laboratory", number = "ANL-NSE-3", title = "Metallic Fuels Handbook", year = "2019" }
(test/tests/solid_mechanics/d9_thermal_expansion/coupled.i)
# This tests the formation of the HT9ElasticityTensor due to changing temperature. Exact solution is calculated as a function
# in associated excel file.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
use_displaced_mesh = false
[mesh]
type = ExamplePatchMeshGenerator
dim = 3
[]
[]
[Variables]
[temp]
initial_condition = 300
[]
[]
[Kernels]
[diffusion]
type = Diffusion
variable = temp
[]
[dt]
type = TimeDerivative
variable = temp
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = SMALL
decomposition_method = EigenSolution
add_variables = true
eigenstrain_names = thexp
temperature = temp
[]
[]
[BCs]
[left]
type = DirichletBC
variable = disp_x
value = 0
boundary = left
[]
[bottom]
type = DirichletBC
variable = disp_y
value = 0
boundary = bottom
[]
[back]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[]
[temp_left]
type = DirichletBC
variable = temp
value = 500
boundary = left
[]
[right_temp]
type = CoupledConvectiveHeatFluxBC
T_infinity = 300
boundary = right
htc = 1
variable = temp
alpha = disp_x
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1
poissons_ratio = 0.3
[]
[thexp]
type = D9ThermalExpansionEigenstrain
eigenstrain_name = thexp
stress_free_temperature = 420
temperature = temp
[]
[stress]
type = ComputeLinearElasticStress
[]
[]
[Executioner]
type = Transient
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
num_steps = 10
dt = 1
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
[]
[disp_x_right]
type = SideAverageValue
variable = disp_x
boundary = right
[]
[]
[Outputs]
exodus = true
[]
(test/tests/solid_mechanics/d9_thermal_expansion/coupled.i)
# This tests the formation of the HT9ElasticityTensor due to changing temperature. Exact solution is calculated as a function
# in associated excel file.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
use_displaced_mesh = false
[mesh]
type = ExamplePatchMeshGenerator
dim = 3
[]
[]
[Variables]
[temp]
initial_condition = 300
[]
[]
[Kernels]
[diffusion]
type = Diffusion
variable = temp
[]
[dt]
type = TimeDerivative
variable = temp
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = SMALL
decomposition_method = EigenSolution
add_variables = true
eigenstrain_names = thexp
temperature = temp
[]
[]
[BCs]
[left]
type = DirichletBC
variable = disp_x
value = 0
boundary = left
[]
[bottom]
type = DirichletBC
variable = disp_y
value = 0
boundary = bottom
[]
[back]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[]
[temp_left]
type = DirichletBC
variable = temp
value = 500
boundary = left
[]
[right_temp]
type = CoupledConvectiveHeatFluxBC
T_infinity = 300
boundary = right
htc = 1
variable = temp
alpha = disp_x
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1
poissons_ratio = 0.3
[]
[thexp]
type = D9ThermalExpansionEigenstrain
eigenstrain_name = thexp
stress_free_temperature = 420
temperature = temp
[]
[stress]
type = ComputeLinearElasticStress
[]
[]
[Executioner]
type = Transient
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
num_steps = 10
dt = 1
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
[]
[disp_x_right]
type = SideAverageValue
variable = disp_x
boundary = right
[]
[]
[Outputs]
exodus = true
[]
(assessment/metallic_fuel/FBTA/analysis/steady_state/common_inputs/d9_clad_base.i)
# D9 Cladding
clad_density = 7980.0 # D9 RT Density MFH
[Physics/SolidMechanics/QuasiStatic]
[cladding]
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'
extra_vector_tags = 'ref'
block = '${cladding_block}'
eigenstrain_names = 'cladding_thermal_eigenstrain clad_swelling'
use_automatic_differentiation = true
volumetric_locking_correction = true
[]
[]
[Materials]
[clad_elasticity_tensor]
type = ADD9ElasticityTensor
temperature = temp
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
block = ${cladding_block}
[]
[clad_stress]
type = ADComputeMultipleInelasticStress
# tangent_operator = nonlinear
inelastic_models = 'clad_creep'
block = ${cladding_block}
[]
[clad_creep]
type = ADD9CreepUpdate
block = ${cladding_block}
temperature = temp
fast_neutron_flux = fast_neutron_flux
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
[]
[thermal_expansion]
type = ADD9ThermalExpansionEigenstrain
block = ${cladding_block}
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = cladding_thermal_eigenstrain
outputs = all
[]
[clad_swelling]
type = ADD9VolumetricSwellingEigenstrain
eigenstrain_name = clad_swelling
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
outputs = all
block = ${cladding_block}
[]
[clad_thermal]
type = ADD9Thermal
block = ${cladding_block}
temperature = temp
[]
[clad_density]
type = ADStrainAdjustedDensity
block = ${cladding_block}
strain_free_density = ${clad_density}
[]
[clad_failure]
type = D9FailureClad
block = ${cladding_block}
method = steady_state
temperature = temp
outputs = all
hoop_stress = stress_zz # Since 2D-RZ
[]
[wastage_thickness]
type = ADMetallicFuelWastage
method = flux_ss316
temperature = temp
scale_factor = 1
boundary = cladding_inside_right
outputs = all
[]
[cc_wastage_thickness]
type = ADMetallicFuelCoolantWastage
clad_material = SS316
use_effective_method = true
temperature = temp
scale_factor = 1
boundary = cladding_outside_right
outputs = all
[]
[]
(test/tests/solid_mechanics/ad_d9_thermal_expansion/exact.i)
# This tests the formation of the HT9ElasticityTensor due to changing temperature. Exact solution is calculated as a function
# in associated excel file.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
use_displaced_mesh = false
[mesh]
type = ExamplePatchMeshGenerator
dim = 3
[]
[]
[AuxVariables]
[temp]
[]
[]
[Functions]
[temp_ramp]
type = PiecewiseLinear
x = '0 100'
y = '300 900'
[]
[thexp_at_ref]
type = ParsedFunction
symbol_names = T
symbol_values = 420
expression = '0.1 * (7.2549e-3 - 1.2875e-3 * T^(0.5) + 5.189e-5 * T - 5.0431e-9 * T^2)'
[]
[thexp_at_temp]
type = ParsedFunction
symbol_names = T
symbol_values = temp
expression = '0.1 * (7.2549e-3 - 1.2875e-3 * T^(0.5) + 5.189e-5 * T - 5.0431e-9 * T^2)'
[]
[thexp_exact]
type = ParsedFunction
symbol_names = 'thexp_at_ref thexp_at_temp'
symbol_values = 'thexp_at_ref thexp_at_temp'
expression = 'thexp_at_temp - thexp_at_ref'
[]
[]
[AuxKernels]
[temp_aux]
type = FunctionAux
variable = temp
function = temp_ramp
[]
[]
[Physics]
[SolidMechanics]
[QuasiStatic]
[all]
strain = SMALL
decomposition_method = EigenSolution
add_variables = true
eigenstrain_names = thexp
use_automatic_differentiation = true
[]
[]
[]
[]
[BCs]
[left]
type = ADDirichletBC
variable = disp_x
value = 0
boundary = left
[]
[bottom]
type = ADDirichletBC
variable = disp_y
value = 0
boundary = bottom
[]
[back]
type = ADDirichletBC
variable = disp_z
value = 0
boundary = back
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 1
poissons_ratio = 0.3
[]
[thexp]
type = ADD9ThermalExpansionEigenstrain
eigenstrain_name = thexp
stress_free_temperature = 420
temperature = temp
cte_scale_factor = 0.1
[]
[stress]
type = ADComputeLinearElasticStress
[]
[]
[Executioner]
type = Transient
num_steps = 10
dt = 10
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
[]
[disp_x_right]
type = SideAverageValue
variable = disp_x
boundary = right
[]
[thexp_exact]
type = FunctionValuePostprocessor
function = thexp_exact
[]
[thexp_diff]
type = DifferencePostprocessor
value1 = disp_x_right
value2 = thexp_exact
outputs = none
[]
[thexp_max_diff]
type = TimeExtremeValue
postprocessor = thexp_diff
value_type = abs_max
[]
[]
[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/X423/analysis/x423_vp_base.i)
[GlobalParams]
density = ${fuel_density}
order = FIRST
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
X_Pu = ${fuel_pu}
X_Zr = ${fuel_zr}
[]
[Problem]
type = ReferenceResidualProblem
extra_tag_vectors = 'ref'
reference_vector = 'ref'
group_variables = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[gen]
type = FIPDRodletMeshGenerator
fipd_geom_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} / ${pin_id} _design.csv'}
fipd_as_fabricated_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} / ${pin_id} _as_fabricated.csv'}
gap_bottom_length = 0.31e-3 # arbitrary
cladding_bottom_plug_length = 2.24e-3 # arbitrary
cladding_top_plug_length = 2.24e-3 # arbitrary
cladding_sidewall_radial_elements = 10
cladding_sidewall_axial_element_numbers = '2 150 150'
cladding_top_plug_radial_elements = 10
cladding_top_plug_axial_elements = 5
cladding_bottom_plug_radial_elements = 10
cladding_bottom_plug_axial_elements = 5
fuel_radial_elements = 6
fuel_axial_element_intervals = '0 1'
fuel_axial_element_numbers = '150'
use_default_cladding_sidewall_axial_element_intervals = true
elem_type = QUAD4
[]
[]
[Variables]
[temp]
initial_condition = 298
[]
[]
[AuxVariables]
# Aux variables for output
[porosity]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[coolant_htc]
order = CONSTANT
family = MONOMIAL
[]
[cumulative_damage_index]
order = CONSTANT
family = MONOMIAL
[]
[element_failed]
order = CONSTANT
family = MONOMIAL
[]
[volumetric_strain]
block = fuel
order = CONSTANT
family = MONOMIAL
[]
[hoop_stress]
order = CONSTANT
family = MONOMIAL
[]
[hoop_creep_strain]
order = CONSTANT
family = MONOMIAL
[]
[hoop_elastic_strain]
order = CONSTANT
family = MONOMIAL
[]
[total_hoop_strain]
order = CONSTANT
family = MONOMIAL
[]
[func_val1]
[]
[func_val2]
[]
# AuxVariables used for thermal expansion correction
[fuel_thermal_strain_xx]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[fuel_thermal_strain_yy]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[fuel_thm_exp]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[clad_thermal_eigenstrain_xx]
order = CONSTANT
family = MONOMIAL
block = cladding
[]
[clad_thm_exp]
order = CONSTANT
family = MONOMIAL
block = cladding
[]
[]
[Functions] #copied from fipd-tdep
[clad_od_temp]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /clad_od_temp_history_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
[]
[power_history]
type = PiecewiseLinear
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /power_history_ ${pin_id} .csv'}
[]
[pwr_axial_peaking_factors]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_power_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
[]
[pwr_axial_peaking_factors_elongate]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_power_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
fuel_elongation_pp = max_fuel_elongation
[]
[fflux_axial_peaking_factors]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_flux_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
extrapolate_to_zero = true
[]
[fflux_axial_peaking_factors_elongate]
type = FIPDAxialProfileFunction
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /peakingfactor_flux_relative_ ${pin_id} .csv'}
use_metadata = true
mesh_generator = gen
zero_ends = true
data_shift_type = peaking
extrapolate_to_zero = true
fuel_elongation_pp = max_fuel_elongation
[]
[flux_history]
type = PiecewiseLinear
data_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /flux_history_ ${pin_id} .csv'}
[]
[coolant_press_ramp]
type = PiecewiseLinear
x = '0 56465640'
y = '0.151e6 0.151e6'
[]
[id_vpp_func]
type = MetallicFuelWastageDegradationFunction
vectorpostprocessor_name = id_wastage
argument_column = y
wastage_type = ID
value_column = wastage_thickness
use_metadata = true
degradation_factor = 0.001
mesh_generator = 'gen'
transition_width = 1E-4
[]
[od_vpp_func]
type = MetallicFuelWastageDegradationFunction
vectorpostprocessor_name = od_wastage
argument_column = y
wastage_type = OD
value_column = cc_wastage_thickness
use_metadata = true
degradation_factor = 0.001
mesh_generator = 'gen'
transition_width = 1E-4
[]
[ci_temp]
type = PiecewiseLinearFromVectorPostprocessor
argument_column = y
component = y
value_column = temp
vectorpostprocessor_name = clad_inn_temp
[]
[na_vol]
type = MeshPropertyFunction
mesh_generator = gen
mesh_property_name = sodium_volume
scale_factor = -1.0
[]
[fuel_height]
type = MeshPropertyFunction
mesh_generator = gen
mesh_property_name = fuel_height
[]
[fuel_radius]
type = MeshPropertyFunction
mesh_generator = gen
mesh_property_name = fuel_radius
[]
[pore_volume_fcn]
type = ParsedFunction
symbol_names = 'volume_fuel interconnected_porosity_fuel_avg'
symbol_values = 'volume_fuel interconnected_porosity_fuel_avg'
expression = '-volume_fuel * interconnected_porosity_fuel_avg'
[]
[anisotropic_swelling_factor]
type = ParsedFunction
symbol_names = 'disp_x_fuel_radial_surface_avg disp_y_fuel_top_surface_avg fuel_height fuel_radius'
symbol_values = 'disp_x_fuel_radial_surface_avg disp_y_fuel_top_surface_avg fuel_height fuel_radius'
expression = '(disp_x_fuel_radial_surface_avg / fuel_radius) / (disp_y_fuel_top_surface_avg / fuel_height)'
[]
[]
# From Topher
[Physics/SolidMechanics/QuasiStatic]
[fuel]
strain = FINITE
add_variables = true
generate_output = 'firstinv_strain 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'
extra_vector_tags = 'ref'
block = fuel
eigenstrain_names = 'fuel_thermal_strain solid_swelling_eigenstrain'
use_automatic_differentiation = true
[]
[clad]
strain = FINITE
add_variables = true
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'
extra_vector_tags = 'ref'
block = cladding
eigenstrain_names = 'clad_swelling clad_thermal_eigenstrain'
use_automatic_differentiation = true
[]
[]
[Kernels]
# Define kernels for the various terms in the PDE system
[gravity]
type = ADGravity
variable = disp_y
value = -9.81
extra_vector_tags = 'ref'
[]
[heat]
type = ADHeatConduction
variable = temp
extra_vector_tags = 'ref'
[]
[heat_ie_f]
type = ADHeatConductionTimeDerivative
variable = temp
extra_vector_tags = 'ref'
block = fuel
density_name = density
[]
[heat_ie_c]
type = ADHeatConductionTimeDerivative
variable = temp
extra_vector_tags = 'ref'
block = cladding
density_name = density
[]
[heat_source]
type = ADFissionRateHeatSource
variable = temp
fission_rate = fission_rate
block = fuel
extra_vector_tags = 'ref'
[]
[]
[AuxKernels]
[porosity]
type = ADMaterialRealAux
property = porosity
variable = porosity
block = fuel
[]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = fuel_outer_radial_surface
[]
[cdf_amount]
block = cladding
type = MaterialRealAux
property = cdf_failure
variable = cumulative_damage_index
[]
[failed_element]
boundary = 'cladding_outside_right'
type = MaterialRealAux
property = failed
variable = element_failed
[]
[volumetric_strain]
type = ADRankTwoScalarAux
rank_two_tensor = total_strain
variable = volumetric_strain
scalar_type = VolumetricStrain
execute_on = timestep_end
block = fuel
[]
[hoop_stress]
type = ADRankTwoAux
rank_two_tensor = stress
variable = hoop_stress
index_j = 2
index_i = 2
execute_on = timestep_end
[]
[hoop_creep_strain]
type = ADRankTwoAux
rank_two_tensor = creep_strain
variable = hoop_creep_strain
index_j = 2
index_i = 2
execute_on = timestep_end
block = cladding
[]
[hoop_elastic_strain]
type = ADRankTwoAux
rank_two_tensor = elastic_strain
variable = hoop_elastic_strain
index_j = 2
index_i = 2
execute_on = timestep_end
block = cladding
[]
[total_hoop_strain]
type = ADRankTwoAux
rank_two_tensor = total_strain
variable = total_hoop_strain
index_j = 2
index_i = 2
execute_on = timestep_end
block = cladding
[]
[func_val1]
type = FunctionAux
function = id_vpp_func
variable = func_val1
block = cladding
[]
[func_val2]
type = FunctionAux
function = od_vpp_func
variable = func_val2
block = cladding
[]
[fuel_thermal_strain_xx]
type = ADRankTwoAux
rank_two_tensor = fuel_thermal_strain
variable = fuel_thermal_strain_xx
index_j = 0
index_i = 0
execute_on = 'initial timestep_end'
block = fuel
[]
[fuel_thermal_strain_yy]
type = ADRankTwoAux
rank_two_tensor = fuel_thermal_strain
variable = fuel_thermal_strain_yy
index_j = 1
index_i = 1
execute_on = 'initial timestep_end'
block = fuel
[]
[fuel_thm_exp]
type = SpatialUserObjectAux
variable = fuel_thm_exp
execute_on = 'initial timestep_end'
user_object = fuel_thm_exp
block = fuel
[]
[clad_thermal_eigenstrain_xx]
type = ADRankTwoAux
rank_two_tensor = clad_thermal_eigenstrain
variable = clad_thermal_eigenstrain_xx
index_j = 0
index_i = 0
execute_on = 'initial timestep_end'
block = cladding
[]
[clad_thm_exp]
type = SpatialUserObjectAux
variable = clad_thm_exp
execute_on = 'initial timestep_end'
user_object = clad_thm_exp
block = cladding
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = cladding_inside_right
secondary = fuel_outer_radial_surface
penalty = 1e12
model = frictionless
#system = constraint
normalize_penalty = true
tangential_tolerance = 1e-3
normal_smoothing_distance = 0.1
[]
[]
[ThermalContact]
[thermal_contact]
type = GapHeatTransfer
variable = temp
primary = cladding_inside_right
secondary = fuel_outer_radial_surface
quadrature = true
gap_conductivity = 61.0
min_gap = 0.5e-03
[]
[]
[BCs]
[no_x_all]
type = ADDirichletBC
variable = disp_x
boundary = centerline
value = 0.0
[]
[no_y_fuel]
type = ADDirichletBC
variable = disp_y
boundary = fuel_bottom
value = 0.0
[]
[no_y_clad]
type = ADDirichletBC
variable = disp_y
boundary = cladding_outside_bottom
value = 0.0
[]
[fuel_top_temp]
type = ADFunctionDirichletBC
boundary = fuel_top
variable = temp
function = ci_temp
[]
[surf] #copied from fipd-tdep
type = ADFunctionDirichletBC
variable = temp
boundary = 'cladding_outside_bottom cladding_outside_right cladding_outside_top'
function = clad_od_temp
[]
[Pressure]
[coolantPressure]
boundary = 'cladding_outside_bottom cladding_outside_right cladding_outside_top'
function = coolant_press_ramp
use_automatic_differentiation = true
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 'fuel_outside_all cladding_inside_all'
initial_pressure = 0.084e6 # Pa
startup_time = 0
R = 8.3143
temperature = ave_temp_interior
volume = gas_volume
output = plenum_pressure
material_input = fg_released
additional_volumes = volume_pore
temperature_of_additional_volumes = temp_fuel_avg
use_automatic_differentiation = true
[]
[]
[]
[Materials]
[interconnected_porosity] # Topher
type = ADParsedMaterial
property_name = interconnected_porosity
material_property_names = 'porosity interconnectivity'
expression = 'porosity * interconnectivity'
outputs = all
block = fuel
[]
[porosity] # Topher
type = ADPorosityFromStrain
block = fuel
initial_porosity = 1e-10
inelastic_strain = 'combined_inelastic_strain'
outputs = none
[]
[gas_swelling] # Topher
type = ADSimpleFissionGasViscoplasticityStressUpdate
temperature = temp
outputs = all
block = fuel
bubble_concentration = 1e15
initial_bubble_concentration = 1e15
compute_interconnectivity = true
fission_gas_yield = 0.3017
fission_rate = fission_rate
initial_atoms_per_bubble = 1e-05
initial_bubble_radius = 1e-15
initial_fgm_dissolved = 0
interconnection_cutoff = 0.999
interconnection_initiating_porosity = 0.26
interconnection_terminating_porosity = 0.28
max_inelastic_increment = 0.001
retained_gas_fraction = 0.25
interconnection_dependent_retained_gas_fraction = 0.5
surface_energy = 1.6
anisotropic_factor = 0.26
initial_porosity = 1e-10
[]
[solid_swelling] # Topher
type = ADBurnupDependentEigenstrain
eigenstrain_name = solid_swelling_eigenstrain
block = fuel
swelling_name = 'solid_swelling'
outputs = all
anisotropic_factor = 0.26
[]
[sodium_logging]
type = ADUPuZrSodiumLogging
block = fuel
porosity = porosity
interconnectivity = interconnectivity
sodium_infiltration_fraction = 0.08
outputs = all
[]
[fission_rate]
type = ADUPuZrFissionRate
block = fuel
rod_linear_power = power_history
axial_power_profile = pwr_axial_peaking_factors
use_metadata = true
mesh_generator = gen
outputs = all
[]
[fission_rate_elongate]
type = ADUPuZrFissionRate
block = cladding
fission_rate_name = fission_rate
rod_linear_power = power_history
axial_power_profile = pwr_axial_peaking_factors_elongate
use_metadata = true
mesh_generator = gen
outputs = all
[]
[burnup]
type = ADUPuZrBurnup
initial_X_Pu = ${fuel_pu}
initial_X_Zr = ${fuel_zr}
density = ${fuel_density}
outputs = all
block = fuel
[]
[burnup_elongate]
type = ADUPuZrBurnup
initial_X_Pu = ${fuel_pu}
initial_X_Zr = ${fuel_zr}
density = ${fuel_density}
outputs = all
block = cladding
burnup_name = burnup
[]
[fast_neutron_flux]
type = ADFastNeutronFlux
calculate_fluence = true
rod_ave_lin_pow = flux_history
axial_power_profile = fflux_axial_peaking_factors
block = fuel
factor = 1.0
outputs = all
[]
[fast_neutron_flux_elongate]
type = ADFastNeutronFlux
calculate_fluence = true
rod_ave_lin_pow = flux_history
axial_power_profile = fflux_axial_peaking_factors_elongate
block = cladding
factor = 1.0
outputs = all
[]
[fuel_elasticity_tensor]
type = ADUPuZrElasticityTensor
block = fuel
temperature = temp
use_old_porosity = true
[]
[fuel_elastic_stress]
type = ADComputeMultipleInelasticStress
# tangent_operator = nonlinear
inelastic_models = 'fuel_upuzrcreep gas_swelling'
block = fuel
outputs = all
[]
[fuel_upuzrcreep]
type = ADUPuZrCreepUpdate
block = fuel
temperature = temp
porosity = porosity
max_inelastic_increment = 2e-3
use_old_porosity = true
[]
[fuel_thermal_expansion]
type = ADComputeThermalExpansionEigenstrain
block = fuel
thermal_expansion_coeff = 1.18e-5
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_strain
outputs = all
[]
[metal_fuel_thermal]
type = ADUPuZrThermal
block = fuel
spheat_model = savage
thcond_model = lanl
porosity = porosity
temperature = temp
[]
[fuel_density]
type = ADStrainAdjustedDensity
displacements = 'disp_x disp_y'
block = fuel
strain_free_density = ${fuel_density}
[]
[clad_elasticity_tensor]
type = ADD9ElasticityTensor
temperature = temp
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
block = cladding
[]
[clad_stress]
type = ADComputeMultipleInelasticStress
# tangent_operator = nonlinear
inelastic_models = 'clad_ss316creep'
block = cladding
[]
[clad_ss316creep]
type = ADD9CreepUpdate
block = cladding
temperature = temp
fast_neutron_flux = fast_neutron_flux
id_wastage_degradation_function = id_vpp_func
od_wastage_degradation_function = od_vpp_func
[]
[clad_swelling]
type = ADSS316VolumetricSwellingEigenstrain
eigenstrain_name = clad_swelling
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = temp
outputs = all
[]
[thermal_expansion]
type = ADD9ThermalExpansionEigenstrain
block = cladding
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
outputs = all
[]
[clad_thermal]
type = ADD9Thermal
block = cladding
temperature = temp
[]
[clad_density]
type = ADStrainAdjustedDensity
block = cladding
strain_free_density = 7874.0
[]
[longSS316_failure]
type = D9FailureClad
block = cladding
method = steady_state
temperature = temp
outputs = all
hoop_stress = stress_zz # Since 2D-RZ
[]
[wastage_thickness]
type = ADMetallicFuelWastage
method = flux_ss316
temperature = temp
scale_factor = 1
boundary = cladding_inside_right
outputs = all
[]
[cc_wastage_thickness]
type = ADMetallicFuelCoolantWastage
clad_material = SS316
use_effective_method = true
temperature = temp
scale_factor = 1
boundary = cladding_outside_right
outputs = all
[]
[]
[Dampers]
[disp_x]
type = MaxIncrement
variable = disp_x
max_increment = 1e-3
[]
[disp_y]
type = MaxIncrement
variable = disp_y
max_increment = 1e-3
[]
[temp]
type = MaxIncrement
variable = temp
max_increment = 50
[]
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
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 = 100
l_tol = 1e-3
nl_max_its = 50
nl_rel_tol = 1e-5
nl_abs_tol = 1e-7
end_time = ${time_last}
dtmin = 1
dtmax = ${max_dt}
automatic_scaling = true
compute_scaling_once = false
[Quadrature]
order = fifth
side_order = seventh
[]
[TimeStepper]
type = IterationAdaptiveDT
timestep_limiting_function = power_history
#max_function_change = 300 # Removed to decrease run time
timestep_limiting_postprocessor = creep_timestep
dt = 100
iteration_window = 2
optimal_iterations = 10
force_step_every_function_point = true
[]
[]
[Postprocessors]
[_dt]
type = TimestepSize
outputs = 'csv_general console'
[]
[num_lin_it]
type = NumLinearIterations
outputs = csv_general
[]
[num_nonlin_it]
type = NumNonlinearIterations
outputs = csv_general
[]
[tot_lin_it]
type = CumulativeValuePostprocessor
postprocessor = num_lin_it
outputs = csv_general
[]
[tot_nonlin_it]
type = CumulativeValuePostprocessor
postprocessor = num_nonlin_it
outputs = csv_general
[]
[alive_time]
type = PerfGraphData
section_name = Root
data_type = TOTAL
outputs = csv_general
[]
[ave_temp_interior]
type = SideAverageValue
boundary = cladding_inside_top
variable = temp
execute_on = 'initial linear'
outputs = csv_general
[]
[approx_FCT]
type = AverageNodalVariableValue
boundary = centerline
variable = temp
outputs = csv_general
[]
[max_approx_FCT]
type = TimeExtremeValue
value_type = max
postprocessor = approx_FCT
outputs = csv_general
[]
[ave_FST]
type = SideAverageValue
boundary = fuel_outer_radial_surface
variable = temp
outputs = csv_general
[]
[max_ave_FST]
type = TimeExtremeValue
value_type = max
postprocessor = ave_FST
outputs = csv_general
[]
[ave_CIT]
type = SideAverageValue
boundary = cladding_inside_right
variable = temp
outputs = csv_general
[]
[max_ave_CIT]
type = TimeExtremeValue
value_type = max
postprocessor = ave_CIT
outputs = csv_general
[]
[avg_clad_temp]
type = ElementAverageValue
variable = temp
block = cladding
outputs = csv_general
[]
[peak_clad_temp]
type = ElementExtremeValue
variable = temp
value_type = max
block = cladding
outputs = csv_general
[]
[peak_fuel_temp]
type = ElementExtremeValue
variable = temp
value_type = max
block = fuel
outputs = csv_general
[]
[max_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = max
block = fuel
outputs = csv_general
[]
[min_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = min
block = fuel
outputs = csv_general
[]
[avg_hydro]
type = ElementAverageValue
variable = hydrostatic_stress
block = fuel
outputs = csv_general
[]
[peak_porosity]
type = ElementExtremeValue
variable = porosity
value_type = max
block = fuel
outputs = csv_general
[]
[clad_inner_vol]
type = InternalVolume
boundary = cladding_inside_all
outputs = csv_general
[]
[pellet_volume]
type = InternalVolume
boundary = fuel_outside_all
outputs = csv_general
[]
[gas_volume]
type = InternalVolume
boundary = 'fuel_outside_all cladding_inside_all'
execute_on = 'initial timestep_end'
addition = na_vol
outputs = csv_general
[]
[clad_fuel_gap]
type = NodalExtremeValue
variable = penetration
boundary = fuel_outer_radial_surface
outputs = csv_general
[]
[max_cont_press]
type = NodalExtremeValue
variable = contact_pressure
boundary = fuel_outer_radial_surface
outputs = csv_general
[]
[flux_from_clad]
type = ADSideDiffusiveFluxIntegral
variable = temp
boundary = cladding_inside_right
diffusivity = thermal_conductivity
outputs = csv_general
[]
[flux_from_fuel]
type = ADSideDiffusiveFluxIntegral
variable = temp
boundary = fuel_outer_radial_surface
diffusivity = thermal_conductivity
outputs = csv_general
[]
[rod_total_power]
type = ADElementIntegralPower
variable = temp
use_material_fission_rate = true
fission_rate_material = fission_rate
block = fuel
outputs = csv_general
[]
[LHGR_W_per_cm]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.01
outputs = csv_general
[]
[average_burnup]
type = ElementAverageValue
block = fuel
variable = burnup
outputs = csv_general
[]
[max_cdf]
type = ElementExtremeValue
value_type = max
variable = cumulative_damage_index
outputs = csv_general
[]
# fission gas information (Topher)
[fg_produced]
type = ADElementIntegralMaterialProperty
mat_prop = fgm_produced
block = fuel
outputs = csv_general
[]
[fg_released]
type = ADElementIntegralMaterialProperty
mat_prop = fgm_released
block = fuel
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[fg_percent]
type = FGRPercent
fission_gas_released = fg_released
fission_gas_generated = fg_produced
outputs = csv_general
[]
[interconnected_porosity_fuel_avg]
type = ElementAverageValue
variable = interconnected_porosity
block = fuel
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[porosity_fuel_avg]
type = ElementAverageValue
variable = porosity
block = fuel
outputs = csv_general
[]
[porosity_fuel_max]
type = ElementExtremeValue
variable = porosity
block = fuel
outputs = csv_general
[]
[porosity_fuel_min]
type = ElementExtremeValue
variable = porosity
value_type = min
block = fuel
outputs = csv_general
[]
[creep_timestep]
type = MaterialTimeStepPostprocessor
block = fuel
outputs = 'csv_general console'
[]
[hydrostatic_stress]
type = ElementAverageValue
variable = hydrostatic_stress
execute_on = 'initial timestep_end'
block = fuel
outputs = csv_general
[]
[volumetric_strain]
type = ElementAverageValue
variable = volumetric_strain
block = fuel
outputs = csv_general
[]
[fission_rate]
type = ElementAverageValue
variable = fission_rate
block = fuel
outputs = csv_general
[]
[porosity]
type = ElementAverageValue
variable = porosity
block = fuel
outputs = csv_general
[]
[max_clad_hoop_creep]
type = ElementExtremeValue
value_type = max
block = cladding
variable = hoop_creep_strain
outputs = csv_general
[]
[max_clad_creep_strain_mag]
type = ElementExtremeValue
value_type = max
block = cladding
variable = creep_strain_mag
outputs = csv_general
[]
[max_total_hoop_strain]
type = ElementExtremeValue
value_type = max
block = cladding
variable = total_hoop_strain
outputs = csv_general
[]
[max_fuel_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = fuel_outside_all
outputs = csv_general
[]
[avg_fuel_ax_thm_str]
type = AxisymmetricCenterlineAverageValue
variable = fuel_thermal_strain_yy
boundary = fuel_inner_radial_surface
outputs = csv_general
[]
[max_clad_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = 'cladding_outside_top cladding_outside_right'
outputs = csv_general
[]
[max_wastagethickness]
type = ElementExtremeValue
value_type = max
variable = wastage_thickness
outputs = 'console'
[]
[avg_fuel_temp]
type = ElementAverageValue
variable = temp
block = fuel
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = csv_general
[]
# Fuel strain information (Topher)
[strain_solid_swelling_fuel_avg]
type = ElementAverageValue
variable = solid_swelling
block = fuel
outputs = csv_general
[]
[strain_gas_swelling_fuel_avg]
type = ElementAverageValue
variable = effective_fission_gas_strain
block = fuel
outputs = csv_general
[]
[strain_volumetric_fuel_avg]
type = ElementAverageValue
variable = firstinv_strain
block = fuel
outputs = csv_general
[]
[volume_fuel]
type = InternalVolume
boundary = 'fuel_outside_all'
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[disp_x_fuel_radial_surface_avg]
type = SideAverageValue
variable = disp_x
boundary = 'fuel_outside_all'
outputs = csv_general
[]
[disp_y_fuel_top_surface_avg]
type = SideAverageValue
variable = disp_y
boundary = 'fuel_top'
outputs = csv_general
[]
[temp_fuel_avg]
type = ElementAverageValue
variable = temp
block = fuel
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[volume_pore]
type = FunctionValuePostprocessor
function = pore_volume_fcn
execute_on = 'initial timestep_end'
outputs = csv_general
[]
[]
[VectorPostprocessors]
[clad_x_disp]
type = NodalValueSampler
variable = disp_x
boundary = cladding_outside_right
sort_by = y
outputs = none
[]
[fuel_cl_temp]
type = NodalValueSampler
variable = temp
boundary = centerline
sort_by = y
outputs = none
[]
[fuel_surf_temp]
type = NodalValueSampler
variable = temp
boundary = fuel_outer_radial_surface
sort_by = y
outputs = none
[]
[clad_inn_temp]
type = NodalValueSampler
variable = temp
boundary = cladding_inside_right
sort_by = y
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = none
[]
[clad_out_temp]
type = NodalValueSampler
variable = temp
boundary = cladding_outside_right
sort_by = y
outputs = none
[]
[id_wastage]
type = FuelRodLineValueSampler
variable = wastage_thickness
material = 'clad'
fraction = 0.0
num_points = 600
orientation = 'vertical'
fuel_pin_geometry = 'pin_geometry'
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = none
[]
[od_wastage]
type = FuelRodLineValueSampler
variable = cc_wastage_thickness
material = 'clad'
fraction = 1.0
num_points = 600
orientation = 'vertical'
fuel_pin_geometry = 'pin_geometry'
execute_on = 'initial timestep_end'
allow_duplicate_execution_on_initial = true
outputs = none
[]
# PIE Comparison VPPs
[nrad_comparison_0]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_0
enable = ${enable_0}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_0'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = strain_gas_swelling_fuel_avg
solid_swelling_pp_name = strain_solid_swelling_fuel_avg
[]
[nrad_comparison_a]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423A_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_a
enable = ${enable_a}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_a'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = strain_gas_swelling_fuel_avg
solid_swelling_pp_name = strain_solid_swelling_fuel_avg
[]
[nrad_comparison_b]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423B_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_b
enable = ${enable_b}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_b'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = strain_gas_swelling_fuel_avg
solid_swelling_pp_name = strain_solid_swelling_fuel_avg
[]
[nrad_comparison_c]
type = FIPDAxialPIEComparison
boundary = fuel_outer_radial_surface
sort_by = y
csv_file = ${raw '../../../../../../fipd-bison-integration-data/X423/ ${pin_id} /X423C_ ${pin_id} _NRAD.csv'}
variable = disp_x
thermal_strain_variable = fuel_thm_exp
involved_component = fuel
mesh_generator = gen
series_type_to_read = 'Fuel O.D. (mils)'
outputs = csv_vpp_c
enable = ${enable_c}
execute_on = 'initial timestep_end'
extra_pp_output_name = 'extra_csv extra_csv_c'
max_fuel_elongation_pp_name = max_fuel_elongation
avg_fuel_ax_thm_str_pp_name = avg_fuel_ax_thm_str
gas_swelling_pp_name = strain_gas_swelling_fuel_avg
solid_swelling_pp_name = strain_solid_swelling_fuel_avg
[]
[]
[UserObjects]
[pin_geometry]
type = FuelPinGeometry
clad_bottom = cladding_outside_bottom
clad_inner_wall = cladding_inside_right
clad_outer_wall = cladding_outside_right
clad_top = cladding_outside_top
pellet_exteriors = fuel_outside_all
[]
[fuel_thm_exp]
type = LayeredAverage
variable = fuel_thermal_strain_xx
direction = y
num_layers = 1000
block = fuel
[]
[clad_thm_exp]
type = LayeredAverage
variable = clad_thermal_eigenstrain_xx
direction = y
num_layers = 1000
block = cladding
[]
[]
[Outputs]
perf_graph = true
color = false
[console]
type = Console
max_rows = 25
time_step_interval = 1
output_linear = true
sync_times = ${time_spots}
[]
[csv_vpp_0]
type = CSV
sync_only = true
sync_times = ${time_spots_0}
enable = ${enable_0}
create_latest_symlink = true
[]
[csv_vpp_a]
type = CSV
sync_only = true
sync_times = ${time_spots_a}
enable = ${enable_a}
create_latest_symlink = true
[]
[csv_vpp_b]
type = CSV
sync_only = true
sync_times = ${time_spots_b}
enable = ${enable_b}
create_latest_symlink = true
[]
[csv_vpp_c]
type = CSV
sync_only = true
sync_times = ${time_spots_c}
enable = ${enable_c}
create_latest_symlink = true
[]
[csv_general]
type = CSV
sync_times = ${time_spots}
[]
[extra_csv]
type = CSV
sync_only = true
sync_times = ${time_spots_extra}
[]
[extra_csv_0]
type = CSV
sync_only = true
sync_times = ${time_spots_0}
enable = ${enable_0}
[]
[extra_csv_a]
type = CSV
sync_only = true
sync_times = ${time_spots_a}
enable = ${enable_a}
[]
[extra_csv_b]
type = CSV
sync_only = true
sync_times = ${time_spots_b}
enable = ${enable_b}
[]
[extra_csv_c]
type = CSV
sync_only = true
sync_times = ${time_spots_c}
enable = ${enable_c}
[]
[exodus]
type = Exodus
sync_only = true
sync_times = ${time_spots}
[]
[]
(test/tests/solid_mechanics/d9_thermal_expansion/coupled.i)
# This tests the formation of the HT9ElasticityTensor due to changing temperature. Exact solution is calculated as a function
# in associated excel file.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
use_displaced_mesh = false
[mesh]
type = ExamplePatchMeshGenerator
dim = 3
[]
[]
[Variables]
[temp]
initial_condition = 300
[]
[]
[Kernels]
[diffusion]
type = Diffusion
variable = temp
[]
[dt]
type = TimeDerivative
variable = temp
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
strain = SMALL
decomposition_method = EigenSolution
add_variables = true
eigenstrain_names = thexp
temperature = temp
[]
[]
[BCs]
[left]
type = DirichletBC
variable = disp_x
value = 0
boundary = left
[]
[bottom]
type = DirichletBC
variable = disp_y
value = 0
boundary = bottom
[]
[back]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[]
[temp_left]
type = DirichletBC
variable = temp
value = 500
boundary = left
[]
[right_temp]
type = CoupledConvectiveHeatFluxBC
T_infinity = 300
boundary = right
htc = 1
variable = temp
alpha = disp_x
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1
poissons_ratio = 0.3
[]
[thexp]
type = D9ThermalExpansionEigenstrain
eigenstrain_name = thexp
stress_free_temperature = 420
temperature = temp
[]
[stress]
type = ComputeLinearElasticStress
[]
[]
[Executioner]
type = Transient
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
num_steps = 10
dt = 1
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
[]
[disp_x_right]
type = SideAverageValue
variable = disp_x
boundary = right
[]
[]
[Outputs]
exodus = true
[]
(test/tests/solid_mechanics/d9_thermal_expansion/exact.i)
# This tests the formation of the HT9ElasticityTensor due to changing temperature. Exact solution is calculated as a function
# in associated excel file.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
use_displaced_mesh = false
[mesh]
type = ExamplePatchMeshGenerator
dim = 3
[]
[]
[AuxVariables]
[temp]
[]
[]
[Functions]
[temp_ramp]
type = PiecewiseLinear
x = '0 100'
y = '300 900'
[]
[thexp_at_ref]
type = ParsedFunction
symbol_names = T
symbol_values = 420
expression = '0.1 * (7.2549e-3 - 1.2875e-3 * T^(0.5) + 5.189e-5 * T - 5.0431e-9 * T^2)'
[]
[thexp_at_temp]
type = ParsedFunction
symbol_names = T
symbol_values = temp
expression = '0.1 * (7.2549e-3 - 1.2875e-3 * T^(0.5) + 5.189e-5 * T - 5.0431e-9 * T^2)'
[]
[thexp_exact]
type = ParsedFunction
symbol_names = 'thexp_at_ref thexp_at_temp'
symbol_values = 'thexp_at_ref thexp_at_temp'
expression = 'thexp_at_temp - thexp_at_ref'
[]
[]
[AuxKernels]
[temp_aux]
type = FunctionAux
variable = temp
function = temp_ramp
[]
[]
[Physics]
[SolidMechanics]
[QuasiStatic]
[all]
strain = SMALL
decomposition_method = EigenSolution
add_variables = true
eigenstrain_names = thexp
[]
[]
[]
[]
[BCs]
[left]
type = DirichletBC
variable = disp_x
value = 0
boundary = left
[]
[bottom]
type = DirichletBC
variable = disp_y
value = 0
boundary = bottom
[]
[back]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1
poissons_ratio = 0.3
[]
[thexp]
type = D9ThermalExpansionEigenstrain
eigenstrain_name = thexp
stress_free_temperature = 420
temperature = temp
cte_scale_factor = 0.1
[]
[stress]
type = ComputeLinearElasticStress
[]
[]
[Executioner]
type = Transient
num_steps = 10
dt = 10
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
[]
[disp_x_right]
type = SideAverageValue
variable = disp_x
boundary = right
[]
[thexp_exact]
type = FunctionValuePostprocessor
function = thexp_exact
[]
[thexp_diff]
type = DifferencePostprocessor
value1 = disp_x_right
value2 = thexp_exact
outputs = none
[]
[thexp_max_diff]
type = TimeExtremeValue
postprocessor = thexp_diff
value_type = abs_max
[]
[]
[Outputs]
csv = true
[]
(examples/thor_capsule_transfer/pin_with_heat_sink.i)
# Example of adding a heat sink outside of an already irradiated pin.
# An example of using a base irradiation's output exodus file to initialize a
# pin with a heat sink next to it (like in THOR). This is useful for taking
# an EBR-II pin and putting it in TREAT in THOR.
initial_fuel_density = 15800.0
[GlobalParams]
order = SECOND
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
displacements = 'disp_x disp_y'
X_Pu = 0.16029880703609925
X_Zr = 0.22566146557004974
[]
[Problem]
type = AugmentedLagrangianContactProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
coord_type = RZ
# mesh options
patch_size = 50
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
# These are the setting from the base irradiation for your information
#[smear_2drz]
# type = FuelPinMeshGenerator
# clad_thickness = 0.000381
# pellet_outer_radius = 0.0021971
# pellet_height = 0.342646
# clad_top_gap_height = 0.2620678
# clad_gap_width = 0.0003429
# bottom_clad_height = 0.0127
# top_clad_height = 0.0127
# clad_bot_gap_height = 0.001 # arbitrary
# # meshing parameters
# clad_mesh_density = customize
# pellet_mesh_density = customize
# nx_p = 5
# ny_p = 150
# nx_c = 4
# ny_c = 150
# ny_cu = 3
# ny_cl = 3
# pellet_quantity = 1
# elem_type = QUAD8
#[]
[file] # This is the pin's output exodus
type = FileMeshGenerator
file = base_irradiation_out.e
use_for_exodus_restart = true
[]
[sink] # Generic sink dimensions
type = GeneratedMeshGenerator
dim = 2
xmin = 0.0032639
xmax = 0.005461
nx = 5
ymin = 0.0
ymax = 0.6311138
ny = 100
elem_type = QUAD8
boundary_id_offset = 50
[]
[combine]
type = CombinerGenerator
inputs = 'file sink'
[]
[name_sink]
type = SubdomainBoundingBoxGenerator
input = 'combine'
bottom_left = '0.0032638 -0.00001 0'
top_right = '0.005462 0.6311139 0'
block_id = 5
block_name = 'heat_sink'
[]
[]
[Variables]
[T]
initial_from_file_var = T
[]
[disp_x]
initial_from_file_var = disp_x
[]
[disp_y]
initial_from_file_var = disp_y
[]
[]
[ICs]
[sink_T]
type = ConstantIC
block = heat_sink
variable = T
value = 298 # K
[]
[]
[Problem]
# initial condition is overriding the restarted T variable
allow_initial_conditions_with_restart = true
[]
[AuxVariables]
[solid_swell]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[gas_swell]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[volumetric_strain]
block = pellet
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[]
[AuxKernels]
[solid_swell]
type = MaterialRealAux
variable = solid_swell
property = solid_swelling
execute_on = timestep_end
[]
[gas_swell]
type = MaterialRealAux
variable = gas_swell
property = gas_swelling
execute_on = timestep_end
[]
[volumetric_strain]
type = RankTwoScalarAux
rank_two_tensor = total_strain
variable = volumetric_strain
scalar_type = VolumetricStrain
execute_on = timestep_end
block = pellet
[]
[creep_strain_mag]
type = MaterialRealAux
property = effective_creep_strain
variable = creep_strain_mag
block = clad
execute_on = timestep_end
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
x = '0 360'
y = '23500 30000'
[]
[axial_peaking_factors]
type = PowerPeakingFunction
fit = custom
custom_params = '0.88416801 1.07334286 -1.26837226 0.00726538'
pellet_length = 0.342646
pellet_y_start = 0.0137
[]
[axial_flux_peaking_factors]
type = PowerPeakingFunction
fit = custom
custom_params = '0.78912541 1.7214792 -2.09297848 0.19040197'
pellet_length = 0.342646
pellet_y_start = 0.0137
zero_beyond_top_and_bottom = False
[]
[flux_history]
type = PiecewiseLinear
x = '0 86400 31536000' # 1 year
y = '1 2.0e19 1.0e19'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
strain = FINITE
generate_output = 'stress_xx stress_yy stress_zz hydrostatic_stress elastic_strain_xx
elastic_strain_yy elastic_strain_zz strain_xx strain_yy strain_zz'
[fuel]
additional_generate_output = 'creep_strain_xx creep_strain_yy creep_strain_zz'
extra_vector_tags = 'ref'
block = pellet
eigenstrain_names = 'fuel_thermal_strain gas_swelling_eigenstrain solid_swelling_eigenstrain'
[]
[clad]
additional_generate_output = 'creep_strain_xx creep_strain_yy creep_strain_zz'
extra_vector_tags = 'ref'
block = 1
eigenstrain_names = 'clad_thermal_eigenstrain clad_volume_eigenstrain'
[]
[sink]
extra_vector_tags = 'ref'
block = heat_sink
eigenstrain_names = 'sink_thermal_eigenstrain'
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
extra_vector_tags = 'ref'
[]
[heat]
type = HeatConduction
variable = T
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = T
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = T
block = pellet
fission_rate = fission_rate
extra_vector_tags = 'ref'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e12
model = coulomb
formulation = augmented_lagrange
friction_coefficient = 0.2
normalize_penalty = true
tangential_tolerance = 0.4
normal_smoothing_distance = 0.1
al_penetration_tolerance = 1e-6
al_incremental_slip_tolerance = 0.8
al_frictional_force_tolerance = 0.8
[]
[clad_sink_mechanical]
primary = 53
secondary = 2
penalty = 1e12
model = coulomb
formulation = augmented_lagrange
friction_coefficient = 0.2
normalize_penalty = true
tangential_tolerance = 0.4
normal_smoothing_distance = 0.1
al_penetration_tolerance = 1e-6
al_incremental_slip_tolerance = 0.8
al_frictional_force_tolerance = 0.8
[]
[]
[ThermalContact]
[thermal_contact]
type = GapHeatTransfer
variable = T
primary = 5
secondary = 10
quadrature = true
gap_conductivity = 75.0
tangential_tolerance = 1e-4
min_gap = 0.0003429
[]
[thermal_sink]
type = GapHeatTransfer
variable = T
primary = 53
secondary = 2
quadrature = true
gap_conductivity = 75.0
tangential_tolerance = 1e-4
min_gap = 0.0003429
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_fuel]
type = DirichletBC
variable = disp_y
boundary = 20
value = 0.0
[]
[no_y_clad]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[]
[no_y_sink]
type = DirichletBC
variable = disp_y
boundary = 50
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = 51
factor = 151000.0
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 0.084e6
startup_time = 0
R = 8.3143
temperature = ave_temp_plenum
volume = gas_volume
output = plenum_pressure
material_input = fis_gas_released
execute_on = timestep_end
[]
[]
[]
[Materials]
[phase]
type = PhaseUPuZr
block = pellet
AB_temp = 965.15
CD_temp = 995.15
outputs = all
calc_H = false
temperature = T
[]
[fission_rate]
type = UPuZrFissionRate
rod_linear_power = power_history
axial_power_profile = axial_peaking_factors
pellet_radius = 0.0021971
block = pellet
outputs = all
[]
[burnup]
type = UPuZrBurnup
initial_X_Zr = 0.22566146557004974
density = ${initial_fuel_density}
block = pellet
outputs = all
[]
[fuel_elasticity_tensor]
type = UPuZrElasticityTensor
block = pellet
temperature = T
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'fuel_upuzrcreep'
block = pellet
[]
[fuel_upuzrcreep]
type = UPuZrCreepUpdate
block = pellet
temperature = T
porosity = porosity
max_inelastic_increment = 2e-3
fission_rate = fission_rate
[]
[fuel_thermal_expansion]
type = UPuZrThermalExpansionEigenstrain
block = pellet
temperature = T
stress_free_temperature = 298.0
eigenstrain_name = fuel_thermal_strain
[]
[gas_swelling]
type = UPuZrGaseousEigenstrain
eigenstrain_name = gas_swelling_eigenstrain
temperature = T
initial_porosity = 0.0
bubble_number_density = 5e17
interconnection_initiating_porosity = 0.16
interconnection_terminating_porosity = 0.18
outputs = all
output_properties = 'porosity gaseous_porosity'
block = pellet
anisotropic_factor = 0.5
[]
[solid_swelling]
type = BurnupDependentEigenstrain
eigenstrain_name = solid_swelling_eigenstrain
block = pellet
swelling_factor = 1.5
swelling_name = 'solid_swelling'
[]
[metal_fuel_thermal]
type = UPuZrThermal
block = pellet
spheat_model = savage
thcond_model = billone
porosity = porosity
temperature = T
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density}
[]
[fission_gas_behavior]
type = UPuZrFissionGasRelease
block = pellet
fractional_yield = 0.25
critical_porosity = 0.17
fractional_fgr_initial = 0.4
fractional_fgr_post = 0.7354
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1.88e11
poissons_ratio = 0.236
block = clad
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'clad_creep'
block = clad
[]
[fast_neutron_flux]
type = FastNeutronFlux
calculate_fluence = true
block = clad
factor = 1
axial_power_profile = axial_flux_peaking_factors
rod_ave_lin_pow = flux_history
outputs = all
[]
[clad_creep]
type = D9CreepUpdate
fast_neutron_flux = fast_neutron_flux
block = clad
temperature = T
youngs_modulus = 1.88e11
[]
[thermal_expansion]
type = D9ThermalExpansionEigenstrain
block = clad
temperature = T
stress_free_temperature = 298.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_thermal]
type = D9Thermal
block = clad
temperature = T
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 7874.0
[]
[clad_volumetric_swelling]
type = D9VolumetricSwellingEigenstrain
eigenstrain_name = clad_volume_eigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
temperature = T
[]
[sink_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 100e9
poissons_ratio = 0.35
block = heat_sink
[]
[sink_stress]
type = ComputeFiniteStrainElasticStress
block = heat_sink
[]
[sink_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = heat_sink
temperature = T
stress_free_temperature = 298.0
eigenstrain_name = sink_thermal_eigenstrain
thermal_expansion_coeff = 8.5e-6
[]
[sink_thermal]
type = HeatConductionMaterial
block = heat_sink
specific_heat = 540
thermal_conductivity = 17
[]
[sink_density]
type = StrainAdjustedDensity
block = heat_sink
strain_free_density = 4.51e3
[]
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
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 = 60
l_tol = 8e-3
nl_max_its = 25
nl_rel_tol = 5e-3
nl_abs_tol = 1e-5
end_time = 9
dtmin = 0.01
dtmax = 3
[Quadrature]
order = fifth
side_order = seventh
[]
[TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
growth_factor = 2
cutback_factor = 0.1
iteration_window = 5
optimal_iterations = 20
force_step_every_function_point = true
timestep_limiting_function = power_history
[]
[]
[Postprocessors]
[_dt]
type = TimestepSize
[]
[num_lin_it]
type = NumLinearIterations
[]
[num_nonlin_it]
type = NumNonlinearIterations
[]
[tot_lin_it]
type = CumulativeValuePostprocessor
postprocessor = num_lin_it
[]
[tot_nonlin_it]
type = CumulativeValuePostprocessor
postprocessor = num_nonlin_it
[]
[ave_temp_interior]
type = SideAverageValue
boundary = 9
variable = T
execute_on = 'initial linear'
[]
[ave_temp_plenum]
type = SideAverageValue
boundary = 6
variable = T
execute_on = 'initial linear'
[]
[approx_FCT]
type = AverageNodalVariableValue
boundary = 12
variable = T
[]
[ave_FST]
type = SideAverageValue
boundary = 10
variable = T
[]
[avg_clad_temp]
type = ElementAverageValue
variable = T
block = clad
[]
[peak_clad_temp]
type = ElementExtremeValue
variable = T
value_type = max
block = clad
[]
[peak_fuel_temp]
type = ElementExtremeValue
variable = T
value_type = max
block = pellet
[]
[avg_sink_temp]
type = ElementAverageValue
variable = T
block = heat_sink
[]
[peak_sink_temp]
type = ElementExtremeValue
variable = T
value_type = max
block = heat_sink
[]
[max_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = max
block = pellet
[]
[min_hydro]
type = ElementExtremeValue
variable = hydrostatic_stress
value_type = min
block = pellet
[]
[peak_porosity]
type = ElementExtremeValue
variable = porosity
value_type = max
block = pellet
[]
[clad_inner_vol]
type = InternalVolume
boundary = 7
[]
[pellet_volume]
type = InternalVolume
boundary = 8
[]
[gas_volume]
type = InternalVolume
boundary = 9
execute_on = 'initial timestep_end'
[]
[clad_fuel_gap]
type = NodalExtremeValue
variable = penetration
boundary = 10
[]
[flux_from_clad]
type = SideDiffusiveFluxIntegral
variable = T
boundary = 5
diffusivity = thermal_conductivity
[]
[flux_from_fuel]
type = SideDiffusiveFluxIntegral
variable = T
boundary = 10
diffusivity = thermal_conductivity
[]
[rod_integral_power]
type = ElementIntegralPower
variable = T
use_material_fission_rate = true
fission_rate_material = fission_rate
block = pellet
[]
[rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.343
[]
[average_burnup]
type = ElementAverageValue
block = pellet
variable = burnup
[]
[peak_burnup]
type = ElementExtremeValue
block = pellet
variable = burnup
[]
[fis_gas_produced]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_prod
block = pellet
[]
[fis_gas_released]
type = ElementIntegralMaterialProperty
mat_prop = fis_gas_rel
block = pellet
execute_on = 'initial timestep_end'
[]
[creep_timestep]
type = MaterialTimeStepPostprocessor
block = pellet
[]
[disp_x_max]
type = NodalExtremeValue
variable = disp_x
block = clad
[]
[disp_y_max]
type = NodalExtremeValue
variable = disp_y
block = pellet
[]
[hydrostatic_stress]
type = ElementAverageValue
variable = hydrostatic_stress
execute_on = 'initial timestep_end'
block = pellet
[]
[solid_swelling]
type = ElementAverageValue
variable = solid_swell
block = pellet
[]
[gas_swelling]
type = ElementAverageValue
variable = gas_swell
block = pellet
[]
[volumetric_strain]
type = ElementAverageValue
variable = volumetric_strain
block = pellet
[]
[porosity]
type = ElementAverageValue
variable = porosity
block = pellet
[]
[fis_gas_percent]
type = FGRPercent
fission_gas_released = fis_gas_released
fission_gas_generated = fis_gas_produced
[]
[max_cladding_creep_strain]
type = ElementExtremeValue
variable = creep_strain_mag
block = clad
[]
[max_fuel_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = 'all_pellet_exterior'
[]
[max_clad_elongation]
type = NodalExtremeValue
variable = disp_y
boundary = 'clad_outside_top clad_outside_right'
[]
[]
[Outputs]
color = true
exodus = true
perf_graph = true
csv = true
[console]
type = Console
max_rows = 25
time_step_interval = 1
output_linear = true
[]
[]
[Debug]
show_var_residual = 'disp_x disp_y T'
show_var_residual_norms = true
[]
[Dampers]
[max_inc_damp_x]
type = MaxIncrement
max_increment = 3e-4
variable = disp_x
[]
[max_inc_damp_y]
type = MaxIncrement
max_increment = 3e-4
variable = disp_y
[]
[max_inc_temp]
type = MaxIncrement
max_increment = 25
variable = T
[]
[]
(test/tests/solid_mechanics/ad_d9_thermal_expansion/coupled.i)
# This tests the formation of the HT9ElasticityTensor due to changing temperature. Exact solution is calculated as a function
# in associated excel file.
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Mesh]
use_displaced_mesh = false
[mesh]
type = ExamplePatchMeshGenerator
dim = 3
[]
[]
[Variables]
[temp]
initial_condition = 300
[]
[]
[Kernels]
[diffusion]
type = ADDiffusion
variable = temp
[]
[dt]
type = ADTimeDerivative
variable = temp
[]
[]
[Physics]
[SolidMechanics]
[QuasiStatic]
[all]
strain = SMALL
decomposition_method = EigenSolution
add_variables = true
eigenstrain_names = thexp
use_automatic_differentiation = true
[]
[]
[]
[]
[BCs]
[left]
type = DirichletBC
variable = disp_x
value = 0
boundary = left
[]
[bottom]
type = DirichletBC
variable = disp_y
value = 0
boundary = bottom
[]
[back]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[]
[temp_left]
type = DirichletBC
variable = temp
value = 500
boundary = left
[]
[right_temp]
type = CoupledConvectiveHeatFluxBC
T_infinity = 300
boundary = right
htc = 1
variable = temp
alpha = disp_x
[]
[]
[Materials]
[elasticity_tensor]
type = ADComputeIsotropicElasticityTensor
youngs_modulus = 1
poissons_ratio = 0.3
[]
[thexp]
type = ADD9ThermalExpansionEigenstrain
eigenstrain_name = thexp
stress_free_temperature = 420
temperature = temp
[]
[stress]
type = ADComputeLinearElasticStress
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
num_steps = 10
dt = 1
[]
[Postprocessors]
[temp]
type = ElementAverageValue
variable = temp
[]
[disp_x_right]
type = SideAverageValue
variable = disp_x
boundary = right
[]
[]
[Outputs]
exodus = true
[]