- layered_average_contact_pressureCoupled layer averaged contact pressure
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled layer averaged contact pressure
- temperatureCoupled temperature
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled temperature
UO2Pulverization
Determines whether or not the fuel has pulverized into small fragments during a Loss of Coolant Accident.
Description
The UO2Pulverization material computes whether or not the UO2 fuel has disintegrated into small fragments. The empirical threshold that determines whether or not pulverization occurs is illustrated in the figure below.

Figure 1: Empirical threshold for fuel pulverization.
It is observed that a minimum local burnup of 71 MWd/kgU is required for pulverization. At this burnup the temperature threshold is 1193.15 K. The threshold decreases linearly with increasing burnup to a value of 913.15 K at a burnup of 94 MWd/kgU, after which it is constant. It should be noted that despite the temperature threshold being exceeded, pulverization will be prevented if the pellet-to-cladding contact pressure at a particular axial location is greater than 50 MPa. Reproduced from Jernkvist and Massih (2015) and Turnbull et al. (2015).
Example Input Syntax
[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
[uo2pulverization]
type = UO2Pulverization<<<{"description": "Determines whether or not the fuel has pulverized into small fragments during a Loss of Coolant Accident.", "href": "UO2Pulverization.html"}>>>
block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
layered_average_contact_pressure<<<{"description": "Coupled layer averaged contact pressure"}>>> = layered_average_contact_pressure
temperature<<<{"description": "Coupled temperature"}>>> = temperature
[]
[](test/tests/axial_relocation/uo2_pulverization.i)Input Parameters
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- burnupCoupled Burnup
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:Coupled Burnup
- burnup_functionBurnup function
C++ Type:FunctionName
Unit:(no unit assumed)
Controllable:No
Description:Burnup function
- 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.
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
- 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
- (test/tests/axial_relocation/mass_relocation_translated.i)
- (assessment/LWR/validation/LOCA_Studsvik/analysis/rod_196/Studsvik_196_part1.i)
- (test/tests/axial_relocation/crumbled_thermal_conductivity.i)
- (test/tests/axial_relocation/uo2_pulverization.i)
- (assessment/LWR/validation/LOCA_Studsvik/analysis/rod_191/Studsvik_191_part1.i)
- (test/tests/axial_relocation/ad_uo2_pulverization.i)
- (test/tests/axial_relocation/mass_relocation.i)
- (examples/axial_relocation/layered1D/single_balloon.i)
- (examples/axial_relocation/layered1D/twin_balloon.i)
- (assessment/LWR/validation/LOCA_Studsvik/analysis/rod_196/Studsvik_196_part2.i)
- (test/tests/axial_relocation/axial_relocation_volume_correction.i)
- (assessment/LWR/validation/LOCA_Studsvik/analysis/rod_191/Studsvik_191_part2.i)
- (assessment/LWR/validation/LOCA_Studsvik/analysis/rod_196/Studsvik_196_part1_1p5d_fr_ffrd.i)
- (test/tests/axial_relocation/packing_fraction.i)
- (test/tests/axial_relocation/axial_relocation_eigenstrain.i)
References
- L. O. Jernkvist and A. Massih.
Model for axial relocation of fragmented and pulverized fuel pellets in distending fuel rods and its effects on fuel rod heat load.
Technical Report SSM-2015:37, Strål säkerhets myndigheten, 2015.[BibTeX]
@TECHREPORT{jernkvist2015, author = "Jernkvist, L. O. and Massih, A.", title = "Model for axial relocation of fragmented and pulverized fuel pellets in distending fuel rods and its effects on fuel rod heat load", year = "2015", number = "SSM-2015:37", institution = {Str\r{a}l s\"{a}kerhets myndigheten} } - J. A. Turnbull, S. K. Yagnik, M. Hirai, D. M. Staicu, and C. T. Walker.
An assessment of the fuel pulverization threshold during loca-type temperature transients.
Nuclear Science and Engineering, 179:477–485, 2015.[BibTeX]
@article{turnbull2015, author = "Turnbull, J. A. and Yagnik, S. K. and Hirai, M. and Staicu, D. M. and Walker, C. T.", title = "An Assessment of the Fuel Pulverization Threshold During LOCA-Type Temperature Transients", journal = "Nuclear Science and Engineering", volume = "179", year = "2015", pages = "477-485" }
(test/tests/axial_relocation/uo2_pulverization.i)
# The purpose of this test is to calculate the amount of pulverization in
# a high burnup fuel as part of the axial relocation algorithm. In the test 5
# axial fuel slices are modeled without cladding with an outer fuel radius of 4.5 mm
# and slice height of 0.1 m. Ten radial finite elements are used. The burnup
# increases linearly from the fuel centerline to the fuel surface. The burnup also
# increases as a function of time from 0 to 100 MWd/kgU on the fuel surface over 100 seconds.
#
# The fuel temperature is held constant at 1200 K. And a constant contact pressure
# is applied to the fuel surface of 40 MPa.
#
# The threshold for pulverization is given by an empirical temperature threshold
# as a function of burnup. A local burnup of 71 MWd/kgU is required for pulverization
# to begin. At this burnup the temperature threshold is 1193.15 K. The temperature
# threshold linearly decreases to a value of 913.15 K at 94 MWd/kgU after which
# it is constant.
#
# Based upon the conditions and threshold given above at t = 100 s the outer three
# elements should be completely pulverized. The inner radius of the third element
# is at a radius of 3.150 mm. Therefore the layered averaged pulverized fuel volume
# (in each layer in this case) is analytically determined by:
#
# V_p = pi * L * (R_o^2 - R_p^2)
#
# where L is the slice height (0.1 m), R_o is the outer fuel radius, and R_p is the
# radius into the fuel at which pulverization ends. Therefore:
#
# V_p = pi * (0.1) * (4.5e-3^2 - 3.150e-3^2)
# V_p = 3.24448e-6 m^3 in each layer.
#
# The layered_pulverized_fuel_volume AuxVariable computed by BISON gives
# a layered volume of pulverized fuel as 3.24448e-6 m^3.
#
# Using command line arguments another test is run where the contact pressure is
# changed to 60 MPa which precludes pulverization for the duration of that test.
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 5
pellet_outer_radius = 4.5e-3
include_clad = false
fuel_height = 0.5
include_plenum = false
nx_p = 10
pellet_mesh_density = customize
pellet_bottom_coor = 0.0
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxVariables]
[burnup]
order = FIRST
family = LAGRANGE
[]
[contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 'x*t/4.275'
[]
[contact_pressure_function]
type = ConstantFunction
value = 40.0e6
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[contact_pressure]
type = FunctionAux
variable = contact_pressure
boundary = 10
function = contact_pressure_function
execute_on = 'initial timestep_end'
[]
[pulverized]
type = MaterialRealAux
block = fuel
variable = pulverized
property = pulverized
execute_on = 'initial timestep_end'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = layered_average_contact_pressure
[]
[layered_pulverized_fuel_volume]
type = SpatialUserObjectAux
variable = layered_pulverized_fuel_volume
execute_on = timestep_end
block = fuel
user_object = layered_pulverized_fuel_volume
[]
[layered_average_burnup]
type = SpatialUserObjectAux
variable = layered_average_burnup
execute_on = timestep_end
block = fuel
user_object = layered_average_burnup
[]
[]
[BCs]
[temperature]
type = DirichletBC
boundary = '10 12'
variable = temperature
value = 1200
[]
[]
[Materials]
[uo2pulverization]
type = UO2Pulverization
block = fuel
layered_average_contact_pressure = layered_average_contact_pressure
temperature = temperature
[]
[thermal]
type = HeatConductionMaterial
thermal_conductivity = 1.0
specific_heat = 1.0
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = Layered1DFuelPinGeometry
include_clad = false
mesh_generator = layered1D_mesh
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = 'initial timestep_end'
boundary = 10
num_layers = 5
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
variable = pulverized
fuel_pin_geometry = fuel_pin_geometry
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-8
nl_abs_tol = 1e-10
l_tol = 1e-5
start_time = 0.0
num_steps = 100
dt = 1
[]
[Outputs]
exodus = true
[]
(test/tests/axial_relocation/mass_relocation_translated.i)
# The purpose of this test is to verify the internal loops of the AxialRelocationUserObject
# that keeps track of the mass relocation. A linearly varying burnup is applied through
# the radius of 5 axial fuel slices which are modeled with cladding of 0.56 mm with an outer
# fuel radius of 4.5 mm and slice height of 0.1 m. Ten radial finite elements are used.
# The burnup increases linearly from the fuel centerline to the fuel surface but is
# constant in time. The fuel temperature is held constant at 1200 K and a constant
# contact pressure is applied to the fuel surface of 40 MPa.
#
# The above conditions correspond to the conditions used in the regression test
# packing_fraction.i which verified that an effective packing fraction of 0.828912
# is obtained. Using this packing fraction and applying an axially varying displacement
# on the inner cladding surface in the radial direction described by:
#
# disp_x = 2.0e-5 * t * cos(pi * y / 0.5)
#
# the mass relocation loops are verified. At 24 seconds axial relocation begins.
# The updated mass fraction relative to the initial mass calculated by BISON
# is tabulated below for each of the layers (0, 1, 2, 3, 4) for a total of 5 layers
# for the end of the time step at 26 seconds.
#
# Layer Initial Mass Current Mass Mass Fraction
# (-) (kg) (kg) (-)
# 4 0.066299 0.066299 1.0
# 3 0.066299 0.064207 0.96845
# 2 0.066299 0.068391 1.03155
# 1 0.066299 0.066299 1.0
# 0 0.066299 0.066299 1.0
#
# Using an independent calculation in Microsoft Excel for Mac (included in this
# testing directory) the updated mass fractions are verified to match the results
# of the layered_mass_fraction AuxVariable results at the end of the simulation.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = disp_x
temperature = temperature
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 5
pellet_outer_radius = 4.5e-3
fuel_height = 0.5
include_plenum = false
nx_p = 10
clad_gap_width = 0.0
pellet_mesh_density = customize
pellet_bottom_coor = -0.25
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[layered_mass_fraction]
order = CONSTANT
family = MONOMIAL
[]
[inner_clad_radius]
order = FIRST
family = LAGRANGE
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 'x*100.0/4.275'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[clad_displacement_function]
type = ParsedFunction
expression = '2.0e-5 * t * cos(pi * y / 0.5)'
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[gps_fuel]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = fuel
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[gps_clad]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = clad
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[pulverized]
type = MaterialRealAux
block = fuel
variable = pulverized
property = pulverized
execute_on = 'initial nonlinear'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = layered_average_contact_pressure
[]
[layered_pulverized_fuel_volume]
type = SpatialUserObjectAux
variable = layered_pulverized_fuel_volume
execute_on = timestep_end
block = fuel
user_object = layered_pulverized_fuel_volume
[]
[layered_average_burnup]
type = SpatialUserObjectAux
variable = layered_average_burnup
execute_on = timestep_end
block = fuel
user_object = layered_average_burnup
[]
[layered_mass_fraction]
type = AxialRelocationOutputAux
variable = layered_mass_fraction
execute_on = timestep_end
block = fuel
axial_relocation_user_object = axial_relocation
output_option = MASS_FRACTION
[]
[inner_clad_radius]
type = Radius
boundary = 5
variable = inner_clad_radius
execute_on = 'initial nonlinear'
[]
[layered_maximum_clad_radius]
type = SpatialUserObjectAux
variable = layered_maximum_clad_radius
execute_on = timestep_end
block = fuel
user_object = layered_maximum_clad_radius
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[BCs]
[temperature]
type = DirichletBC
boundary = '10 12 5 2'
variable = temperature
value = 1200
[]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[]
[Materials]
[uo2pulverization]
type = UO2Pulverization
block = fuel
burnup = burnup
layered_average_contact_pressure = layered_average_contact_pressure
temperature = temperature
[]
[fuel_thermal]
type = HeatConductionMaterial
block = fuel
thermal_conductivity = 1.0
specific_heat = 1.0
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = .345
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0.3
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = clad
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = 'initial timestep_end'
boundary = 10
num_layers = 5
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
variable = pulverized
fuel_pin_geometry = fuel_pin_geometry
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_maximum_clad_radius]
type = LayeredNodalExtremeValue
variable = inner_clad_radius
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[layered_clad_internal_volume]
type = LayeredInternalVolume
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = 0
direction = y
execute_on = 'initial timestep_end'
layer_bounding_block = fuel
boundary = 5
num_layers = 5
[]
[axial_relocation]
type = AxialRelocationUserObject
block = fuel
direction = y
num_layers = 5
layered_average_burnup = layered_average_burnup
layered_pulverized_fuel_volume = layered_pulverized_fuel_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_clad_internal_volume = layered_clad_internal_volume
max_linear_heat_generation_rate = maximum_power
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Postprocessors]
[rod_input_power]
type = FunctionValuePostprocessor
function = power
execute_on = timestep_end
[]
[maximum_power]
type = TimeExtremeValue
postprocessor = rod_input_power
value_type = max
execute_on = timestep_end
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-8
nl_abs_tol = 1e-10
l_tol = 1e-5
start_time = 0.0
num_steps = 14
dt = 2
[]
[Outputs]
exodus = true
[]
(assessment/LWR/validation/LOCA_Studsvik/analysis/rod_196/Studsvik_196_part1.i)
initial_fuel_density = 10431.0
[GlobalParams]
density = ${initial_fuel_density}
initial_porosity = 0.05
order = SECOND
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
volumetric_locking_correction = false
displacements = 'disp_x disp_y'
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
coord_type = RZ
[smeared_mesh]
type = FuelPinMeshGenerator
clad_top_gap_height = 0.0248576
pellet_height = 0.2606424
pellet_quantity = 1
clad_bot_gap_height = 0.0145
pellet_outer_radius = 3.92e-3
clad_gap_width = 80e-6
clad_thickness = 0.57e-3
clad_mesh_density = customize
pellet_mesh_density = customize
nx_c = 5
ny_c = 50
nx_p = 11
ny_p = 60
elem_type = QUAD8
[]
patch_update_strategy = auto
patch_size = 10 # For contact algorithm
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
# Define dependent variables and initial conditions
[temperature]
initial_condition = 295.0 # set initial temp to coolant inlet
[]
[]
[AuxVariables]
# Define auxilary variables
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = pellet
initial_condition = 10e-6
[]
[creep_strain_rate]
order = CONSTANT
family = MONOMIAL
[]
[effective_creep_strain]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[hoop_strain]
order = CONSTANT
family = MONOMIAL
[]
[fract_beta_phase] # Fraction of beta phase in Zry
order = CONSTANT
family = MONOMIAL
[]
[scale_thickness] # ZrO2 scale thickness (m)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfract_total] # Current oxigen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfgain_total] # Gained oxygen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[burst_stress] # Hoop stress at cladding burst
order = CONSTANT
family = MONOMIAL
[]
[burst] # Did cladding burst occur?
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = power_history.csv
format = columns
scale_factor = 1
[]
[axial_peaking_factors]
type = ParsedFunction
expression = 1
[]
[pressure_ramp] # reads and interpolates input data defining amplitude curve for fill gas pressure
type = PiecewiseLinear
x = '-200 0 86400 47386400 47472800 47559200 47645600 94945600 95032000'
y = '0.0065371 1 1 1 1 1 1 1 0.0065371'
scale_factor = 15.5e6
[]
[forced_times]
type = PiecewiseLinear
data_file = timestep_limiting.csv
scale_factor = 1
format = columns
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[fuel]
block = pellet
add_variables = true
strain = FINITE
eigenstrain_names = 'fuel_thermal_eigenstrain fuel_relocation_eigenstrain fuel_volumetric_eigenstrain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
decomposition_method = EigenSolution
extra_vector_tags = 'ref'
temperature = temperature
[]
[clad]
block = clad
add_variables = true
strain = FINITE
eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_eigenstrain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz creep_strain_zz strain_zz'
extra_vector_tags = 'ref'
decomposition_method = EigenSolution
temperature = temperature
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
[]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
extra_vector_tags = 'ref'
block = pellet
burnup_function = burnup
[]
[]
[Burnup]
[burnup]
block = pellet
rod_ave_lin_pow = power_history # using the power function defined above
axial_power_profile = axial_peaking_factors # using the axial power profile function defined above
num_radial = 80
num_axial = 11
fuel_pin_geometry = fuel_pin_geometry
fuel_volume_ratio = 1.0 # for use with dished pellets (ratio of actual volume to cylinder volume)
order = CONSTANT
family = MONOMIAL
RPF = RPF
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '0.05 0.95 0 0 0 0'
[]
[]
[AuxKernels]
# Define auxilliary kernels for each of the aux variables
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
block = clad
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
factor = 3e13
execute_on = timestep_begin
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
variable = fast_neutron_fluence
block = clad
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = pellet
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[creep_strain_rate]
type = MaterialRealAux
property = creep_rate
variable = creep_strain_rate
block = clad
[]
[effective_creep_strain]
type = MaterialRealAux
property = effective_creep_strain
variable = effective_creep_strain
block = clad
execute_on = timestep_end
[]
[fract_bphase]
type = MaterialRealAux
block = clad
variable = fract_beta_phase
property = fract_beta_phase
[]
[scl_thickness]
type = MaterialRealAux
boundary = 2
variable = scale_thickness
property = oxide_scale_thickness
[]
[ofract_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfract_total
property = current_oxygen_weight_frac_total
[]
[ofgain_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfgain_total
property = oxygen_weight_frac_gained_total
[]
[sigmaburst]
type = MaterialRealAux
boundary = 2
variable = burst_stress
property = burst_stress
[]
[hasburst]
type = MaterialRealAux
boundary = 2
variable = burst
property = failed
execute_on = timestep_end
[]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = 10
execute_on = 'linear'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
formulation = kinematic
model = frictionless
penalty = 1e7
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
initial_moles = initial_moles
gas_released = 'fission_gas_released he_prod'
released_gas_types = 'Kr Xe;
He'
released_fractions = '0.153 0.847;
1'
quadrature = true
contact_pressure = contact_pressure
refab_gas_types = He
refab_fractions = 1
refab_time = 95032000
refab_type = 0
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_clad_bottom]
type = DirichletBC
variable = disp_y
boundary = '1'
value = 0.0
[]
[no_y_fuel_bottom]
type = DirichletBC
variable = disp_y
boundary = '1020'
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = '1 2 3'
function = pressure_ramp
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 3.44738e6
startup_time = 0
R = 8.3143
output_initial_moles = initial_moles
temperature = plenum_temp
volume = plenum_volume
material_input = 'fission_gas_released he_prod'
output = plenum_pressure
refab_time = 95032000
refab_pressure = 8.2e6
refab_temperature = 295.0
refab_volume = 1.04e-05
cladding_failure_status = burst
equilibrium_pressure = equilibrium_pressure
additional_volumes = additional_volume
temperature_of_additional_volumes = addition_temperature
[]
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = FuelPinGeometry
[]
[terminator]
type = Terminator
expression = 'burst > 0'
[]
[]
[PlenumTemperature]
[plenum_temp]
boundary = 5
inner_surfaces = '5'
outer_surfaces = '10'
temperature = temperature
[]
[]
[CoolantChannel]
[convective_clad_surface] # apply convective boundary to clad outer surface
boundary = 2
variable = temperature
inlet_temperature = 580
inlet_pressure = 15.5e6 # Pa
inlet_massflux = 3800 # kg/m^2-sec
rod_diameter = 0.00914 # m
rod_pitch = 1.26e-2 # m
compute_enthalpy = false
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
output_properties = 'coolant_channel_htype coolant_channel_hmode'
[]
[]
[Materials]
[uo2_pulverization]
type = UO2Pulverization
block = pellet
layered_average_contact_pressure = contact_pressure
temperature = temperature
burnup_function = burnup
output_properties = pulverized
outputs = all
[]
# Define material behavior models and input material property data
[fuel_thermal] # temperature and burnup dependent thermal properties of UO2 (BISON kernel)
type = UO2Thermal
block = pellet
thermal_conductivity_model = NFIR
temperature = temperature
burnup_function = burnup
[]
[fuel_elasticity_tensor]
type = UO2IsotropicDamageElasticityTensor
block = pellet
fragmentation_model = BARANI
temperature = temperature
rod_ave_lin_pow = power_history
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'fuel_creep'
block = pellet
[]
[fuel_creep]
type = UO2CreepUpdate
block = pellet
temperature = temperature
fission_rate = fission_rate
initial_grain_radius = 10.0e-6
oxygen_to_metal_ratio = 2.0
[]
[fuel_relocation]
type = UO2RelocationEigenstrain
block = pellet
burnup_function = burnup
fuel_pin_geometry = fuel_pin_geometry
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
burnup_relocation_stop = 0.024
relocation_activation1 = 5000
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_eigenstrain
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = pellet
thermal_expansion_coeff = 10.0e-6
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_eigenstrain
[]
[fuel_volumetric_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = pellet
temperature = temperature
burnup_function = burnup
initial_fuel_density = 10431.0
eigenstrain_name = fuel_volumetric_eigenstrain
[]
[fission_gas_release]
type = UO2Sifgrs
block = pellet
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
gbs_model = true
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6550.
[]
[clad_thermal]
block = clad
type = ZryThermal
temperature = temperature
[]
[clad_thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
temperature = temperature
[]
[zry_thermal_creep]
type = ZryCreepLOCAUpdate
block = clad
temperature = temperature
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
max_inelastic_increment = 5e-4
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'zry_thermal_creep'
block = clad
[]
[clad_irradiation_growth]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
eigenstrain_name = clad_irradiation_eigenstrain
[]
[clad_phase]
type = ZrPhase
block = clad
temperature = temperature
numerical_method = 2
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
clad_inner_radius = 4.18e-03
clad_outer_radius = 4.75e-03
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = leistikow
[]
[clad_failure_criterion]
type = ZryCladdingFailure
boundary = 2
failure_criterion = overstrain
# effective_strain_rate_creep = creep_strain_rate
# failure_criterion = combined_overstress_and_plastic_instability
hoop_stress = stress_zz
hoop_creep_strain = creep_strain_zz
fraction_beta_phase = fract_beta_phase
fraction_oxygen_gain = oxywtfract_total
temperature = temperature
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density}
[]
[]
[Dampers]
[limitT]
type = BoundingValueElementDamper
min_value = 290.0
max_value = 3000.0
variable = temperature
[]
[limitX]
type = MaxIncrement
max_increment = 1e-5
variable = disp_x
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_rel_tol = 1e-4
nl_abs_tol = 1e-8
start_time = -10
n_startup_steps = 1
end_time = 95032000
dtmax = 1e6
dtmin = 1e-6
[TimeStepper]
type = IterationAdaptiveDT
timestep_limiting_postprocessor = material_timestep
dt = 10
optimal_iterations = 20
iteration_window = 4
linear_iteration_ratio = 100
growth_factor = 2
cutback_factor = .5
timestep_limiting_function = forced_times
force_step_every_function_point = true
[]
[Quadrature]
order = FIFTH
side_order = SEVENTH
[]
[]
[Postprocessors]
[ave_temp_interior]
type = SideAverageValue
boundary = 9
variable = temperature
execute_on = 'initial linear'
[]
[clad_inner_vol]
type = InternalVolume
boundary = 7
#outputs = exodus
execute_on = 'initial timestep_end'
[]
[fission_gas_produced] # fission gas produced (moles)
type = ElementIntegralFisGasGeneratedSifgrs
block = pellet
execute_on = 'linear'
[]
[fission_gas_grain]
type = ElementIntegralFisGasGrainSifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[fission_gas_boundary]
type = ElementIntegralFisGasBoundarySifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[flux_from_clad] # area integrated heat flux from the cladding
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 5
diffusivity = thermal_conductivity
[]
[flux_from_fuel] # area integrated heat flux from the fuel
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 10
diffusivity = thermal_conductivity
[]
[rod_total_power]
type = ElementIntegralPower
variable = temperature
burnup_function = burnup
block = pellet
[]
[rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.1186 # rod height
[]
[max_fuel_temp]
type = NodalExtremeValue
block = pellet
value_type = max
variable = temperature
[]
[max_clad_temp]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
[]
[max_clad_hoop_strain]
type = ElementExtremeValue
block = clad
value_type = max
variable = strain_zz
[]
[material_timestep]
type = MaterialTimeStepPostprocessor
block = clad
[]
[burst]
type = ElementExtremeValue
value_type = max
variable = burst
block = clad
execute_on = 'initial timestep_end'
[]
[he_prod]
type = IFBAHeProduction
b10_load = 9.27165354e-5
b10_enrich = 0.5
burnup = average_burnup
zrb2_thick = 10e-6
fuel_out_rad = 9.32e-3
ifba_len = 0.3
u235_enrich = 0.05
[]
[volume_pulverized]
type = ElementIntegralMaterialProperty
mat_prop = pulverized
block = pellet
[]
[max_fuel_temp_periphery]
type = NodalExtremeValue
value_type = max
variable = temperature
boundary = 10
[]
[additional_volume]
type = FunctionValuePostprocessor
function = 8.5e-6
execute_on = 'initial linear'
[]
[addition_temperature]
type = FunctionValuePostprocessor
function = 300.0
execute_on = 'initial linear'
[]
[equilibrium_pressure]
type = FunctionValuePostprocessor
function = 101325.0
execute_on = 'initial linear'
[]
[]
[PerformanceMetricOutputs]
[]
[StandardLWRFuelRodOutputs]
temperature = temperature
fuel_pellet_blocks = 3
[]
[Outputs]
perf_graph = true
exodus = true
color = false
csv = true
[checkpoint]
type = Checkpoint
num_files = 2
[]
[chkfile]
type = CSV
execute_on = FINAL
show = 'volume_pulverized'
[]
[]
(test/tests/axial_relocation/crumbled_thermal_conductivity.i)
# The purpose of this test is to verify that the thermal conductivity of the fuel
# is properly scaled in regions that have crumbled due to axial relocation. In this
# test at the end of the simulation the middle layer of the 5 (indexed as layer 2)
# has been found to have crumbled (accommodated additional mass). Using the NFIR
# thermal conductivity as the underlying model for the thermal conductivity of the
# fuel which has been verified elsewhere the scaling factor for crumbled fuel is
# calculated.
#
# A constant burnup of 0.07 % FIMA and a constant temperature of 1200 K is applied
# to the fuel. These conditions result in no pulverization of the fuel. For
# simplicity the packing fraction of both fragments and pulvers are set to 0.828912
# To be consistent with the other tests in this directory. The use of a constant
# burnup is to ensure that the thermal conductivity is constant radially. Before
# crumbling the thermal conductivity calculated by the NFIR model is 2.023185.
#
# By examining the thermal_conductivity AuxVariable, and looking at the thermal
# conductivity of the middle layer it is listed as 1.588923 W/m-K. This value
# is obtained by an analytical calculation for the same conditions in the Excel
# spreadsheet included in this directory.
#
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = disp_x
temperature = temperature
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 5
pellet_outer_radius = 4.5e-3
fuel_height = 0.5
include_plenum = false
nx_p = 10
clad_gap_width = 0.0
pellet_mesh_density = customize
pellet_bottom_coor = 0.0
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[layered_mass_fraction]
order = CONSTANT
family = MONOMIAL
[]
[inner_clad_radius]
order = FIRST
family = LAGRANGE
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[gas_conductivity]
order = FIRST
family = LAGRANGE
[]
[thermal_conductivity]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = '0.07'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[clad_displacement_function]
type = ParsedFunction
expression = '2.0e-5 * t * sin(pi * y / 0.5)'
[]
[gas_conductivity_function]
type = ConstantFunction
value = 0.15
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[gps_fuel]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = fuel
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[gps_clad]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = clad
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[pulverized]
type = MaterialRealAux
block = fuel
variable = pulverized
property = pulverized
execute_on = 'initial nonlinear'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = layered_average_contact_pressure
[]
[layered_pulverized_fuel_volume]
type = SpatialUserObjectAux
variable = layered_pulverized_fuel_volume
execute_on = timestep_end
block = fuel
user_object = layered_pulverized_fuel_volume
[]
[layered_average_burnup]
type = SpatialUserObjectAux
variable = layered_average_burnup
execute_on = timestep_end
block = fuel
user_object = layered_average_burnup
[]
[layered_mass_fraction]
type = AxialRelocationOutputAux
variable = layered_mass_fraction
execute_on = timestep_end
block = fuel
axial_relocation_user_object = axial_relocation
output_option = MASS_FRACTION
[]
[inner_clad_radius]
type = Radius
boundary = 5
variable = inner_clad_radius
execute_on = 'initial nonlinear'
[]
[layered_maximum_clad_radius]
type = SpatialUserObjectAux
variable = layered_maximum_clad_radius
execute_on = timestep_end
block = fuel
user_object = layered_maximum_clad_radius
[]
[gas_conductivity]
type = FunctionAux
function = gas_conductivity_function
variable = gas_conductivity
execute_on = 'initial linear'
[]
[th_cond]
type = MaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
block = fuel
execute_on = 'initial linear'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[BCs]
[temperature]
type = DirichletBC
boundary = '10 12 5 2'
variable = temperature
value = 1200
[]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[]
[Materials]
[uo2pulverization]
type = UO2Pulverization
block = fuel
burnup = burnup
layered_average_contact_pressure = layered_average_contact_pressure
temperature = temperature
[]
[fuel_thermal_crumbled]
type = UO2Thermal
Gd_content = 0.0
block = fuel
burnup = burnup
initial_porosity = 0.05
thermal_conductivity_model = NFIR # NFIR k for UO2
oxy_to_metal_ratio = 2.0
temperature = temperature
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = .345
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0.3
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = clad
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = 'initial timestep_end'
boundary = 10
num_layers = 5
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
variable = pulverized
fuel_pin_geometry = fuel_pin_geometry
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_maximum_clad_radius]
type = LayeredNodalExtremeValue
variable = inner_clad_radius
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[layered_clad_internal_volume]
type = LayeredInternalVolume
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = 0
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[axial_relocation]
type = AxialRelocationUserObject
block = fuel
direction = y
num_layers = 5
layered_average_burnup = layered_average_burnup
layered_pulverized_fuel_volume = layered_pulverized_fuel_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_clad_internal_volume = layered_clad_internal_volume
max_linear_heat_generation_rate = maximum_power
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial timestep_end'
fragment_packing_fraction = 0.828912
pulver_packing_fraction = 0.828912
[]
[]
[Postprocessors]
[rod_input_power]
type = FunctionValuePostprocessor
function = power
execute_on = timestep_end
[]
[maximum_power]
type = TimeExtremeValue
postprocessor = rod_input_power
value_type = max
execute_on = timestep_end
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-8
nl_abs_tol = 1e-10
l_tol = 1e-5
start_time = 0.0
num_steps = 14
dt = 2
[]
[Outputs]
exodus = true
[]
(test/tests/axial_relocation/uo2_pulverization.i)
# The purpose of this test is to calculate the amount of pulverization in
# a high burnup fuel as part of the axial relocation algorithm. In the test 5
# axial fuel slices are modeled without cladding with an outer fuel radius of 4.5 mm
# and slice height of 0.1 m. Ten radial finite elements are used. The burnup
# increases linearly from the fuel centerline to the fuel surface. The burnup also
# increases as a function of time from 0 to 100 MWd/kgU on the fuel surface over 100 seconds.
#
# The fuel temperature is held constant at 1200 K. And a constant contact pressure
# is applied to the fuel surface of 40 MPa.
#
# The threshold for pulverization is given by an empirical temperature threshold
# as a function of burnup. A local burnup of 71 MWd/kgU is required for pulverization
# to begin. At this burnup the temperature threshold is 1193.15 K. The temperature
# threshold linearly decreases to a value of 913.15 K at 94 MWd/kgU after which
# it is constant.
#
# Based upon the conditions and threshold given above at t = 100 s the outer three
# elements should be completely pulverized. The inner radius of the third element
# is at a radius of 3.150 mm. Therefore the layered averaged pulverized fuel volume
# (in each layer in this case) is analytically determined by:
#
# V_p = pi * L * (R_o^2 - R_p^2)
#
# where L is the slice height (0.1 m), R_o is the outer fuel radius, and R_p is the
# radius into the fuel at which pulverization ends. Therefore:
#
# V_p = pi * (0.1) * (4.5e-3^2 - 3.150e-3^2)
# V_p = 3.24448e-6 m^3 in each layer.
#
# The layered_pulverized_fuel_volume AuxVariable computed by BISON gives
# a layered volume of pulverized fuel as 3.24448e-6 m^3.
#
# Using command line arguments another test is run where the contact pressure is
# changed to 60 MPa which precludes pulverization for the duration of that test.
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 5
pellet_outer_radius = 4.5e-3
include_clad = false
fuel_height = 0.5
include_plenum = false
nx_p = 10
pellet_mesh_density = customize
pellet_bottom_coor = 0.0
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxVariables]
[burnup]
order = FIRST
family = LAGRANGE
[]
[contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 'x*t/4.275'
[]
[contact_pressure_function]
type = ConstantFunction
value = 40.0e6
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[contact_pressure]
type = FunctionAux
variable = contact_pressure
boundary = 10
function = contact_pressure_function
execute_on = 'initial timestep_end'
[]
[pulverized]
type = MaterialRealAux
block = fuel
variable = pulverized
property = pulverized
execute_on = 'initial timestep_end'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = layered_average_contact_pressure
[]
[layered_pulverized_fuel_volume]
type = SpatialUserObjectAux
variable = layered_pulverized_fuel_volume
execute_on = timestep_end
block = fuel
user_object = layered_pulverized_fuel_volume
[]
[layered_average_burnup]
type = SpatialUserObjectAux
variable = layered_average_burnup
execute_on = timestep_end
block = fuel
user_object = layered_average_burnup
[]
[]
[BCs]
[temperature]
type = DirichletBC
boundary = '10 12'
variable = temperature
value = 1200
[]
[]
[Materials]
[uo2pulverization]
type = UO2Pulverization
block = fuel
layered_average_contact_pressure = layered_average_contact_pressure
temperature = temperature
[]
[thermal]
type = HeatConductionMaterial
thermal_conductivity = 1.0
specific_heat = 1.0
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = Layered1DFuelPinGeometry
include_clad = false
mesh_generator = layered1D_mesh
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = 'initial timestep_end'
boundary = 10
num_layers = 5
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
variable = pulverized
fuel_pin_geometry = fuel_pin_geometry
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-8
nl_abs_tol = 1e-10
l_tol = 1e-5
start_time = 0.0
num_steps = 100
dt = 1
[]
[Outputs]
exodus = true
[]
(assessment/LWR/validation/LOCA_Studsvik/analysis/rod_191/Studsvik_191_part1.i)
initial_fuel_density = 10431.0
[GlobalParams]
density = ${initial_fuel_density}
initial_porosity = 0.05
order = SECOND
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
volumetric_locking_correction = false
displacements = 'disp_x disp_y'
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
coord_type = RZ
[smeared_mesh]
type = FuelPinMeshGenerator
clad_top_gap_height = 0.021861442
pellet_height = 0.265388558
pellet_quantity = 1
clad_bot_gap_height = 0.01275
pellet_outer_radius = 4.1e-3
clad_gap_width = 80e-6
clad_thickness = 0.57e-3
clad_mesh_density = customize
pellet_mesh_density = customize
nx_c = 5
ny_c = 50
nx_p = 11
ny_p = 60
elem_type = QUAD8
[]
patch_update_strategy = auto
patch_size = 10 # For contact algorithm
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
# Define dependent variables and initial conditions
[temperature]
initial_condition = 295.0 # set initial temp to coolant inlet
[]
[]
[AuxVariables]
# Define auxilary variables
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = pellet
initial_condition = 10e-6
[]
[creep_strain_rate]
order = CONSTANT
family = MONOMIAL
[]
[effective_creep_strain]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[hoop_strain]
order = CONSTANT
family = MONOMIAL
[]
[fract_beta_phase] # Fraction of beta phase in Zry
order = CONSTANT
family = MONOMIAL
[]
[scale_thickness] # ZrO2 scale thickness (m)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfract_total] # Current oxigen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfgain_total] # Gained oxygen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[burst_stress] # Hoop stress at cladding burst
order = CONSTANT
family = MONOMIAL
[]
[burst] # Did cladding burst occur?
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = power_history.csv
format = columns
scale_factor = 1
[]
[axial_peaking_factors]
type = ParsedFunction
expression = 1
[]
[pressure_ramp] # reads and interpolates input data defining amplitude curve for fill gas pressure
type = PiecewiseLinear
x = '-200 0 166755600 166842000'
y = '0.006537 1 1 0.006537'
scale_factor = 15.5e6
[]
[forced_times]
type = PiecewiseLinear
data_file = timestep_limiting.csv
scale_factor = 1
format = columns
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[fuel]
block = pellet
add_variables = true
strain = FINITE
eigenstrain_names = 'fuel_thermal_eigenstrain fuel_relocation_eigenstrain fuel_volumetric_eigenstrain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
decomposition_method = EigenSolution
extra_vector_tags = 'ref'
temperature = temperature
[]
[clad]
block = clad
add_variables = true
strain = FINITE
eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_eigenstrain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz creep_strain_zz strain_zz'
extra_vector_tags = 'ref'
decomposition_method = EigenSolution
temperature = temperature
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
[]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
extra_vector_tags = 'ref'
block = pellet
burnup_function = burnup
[]
[]
[Burnup]
[burnup]
block = pellet
rod_ave_lin_pow = power_history # using the power function defined above
axial_power_profile = axial_peaking_factors # using the axial power profile function defined above
num_radial = 80
num_axial = 11
fuel_pin_geometry = fuel_pin_geometry
fuel_volume_ratio = 1.0 # for use with dished pellets (ratio of actual volume to cylinder volume)
order = CONSTANT
family = MONOMIAL
RPF = RPF
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '0.05 0.95 0 0 0 0'
[]
[]
[AuxKernels]
# Define auxilliary kernels for each of the aux variables
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
block = clad
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
factor = 3e13
execute_on = timestep_begin
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
variable = fast_neutron_fluence
block = clad
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = pellet
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[creep_strain_rate]
type = MaterialRealAux
property = creep_rate
variable = creep_strain_rate
block = clad
[]
[effective_creep_strain]
type = MaterialRealAux
property = effective_creep_strain
variable = effective_creep_strain
block = clad
execute_on = timestep_end
[]
[fract_bphase]
type = MaterialRealAux
block = clad
variable = fract_beta_phase
property = fract_beta_phase
[]
[scl_thickness]
type = MaterialRealAux
boundary = 2
variable = scale_thickness
property = oxide_scale_thickness
[]
[ofract_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfract_total
property = current_oxygen_weight_frac_total
[]
[ofgain_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfgain_total
property = oxygen_weight_frac_gained_total
[]
[sigmaburst]
type = MaterialRealAux
boundary = 2
variable = burst_stress
property = burst_stress
[]
[hasburst]
type = MaterialRealAux
boundary = 2
variable = burst
property = failed
execute_on = timestep_end
[]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = 10
execute_on = 'linear'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
formulation = kinematic
model = frictionless
penalty = 1e7
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
initial_moles = initial_moles
gas_released = fission_gas_released
quadrature = true
contact_pressure = contact_pressure
refab_gas_types = He
refab_fractions = 1
refab_time = 166842000
refab_type = 0
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_clad_bottom]
type = DirichletBC
variable = disp_y
boundary = '1'
value = 0.0
[]
[no_y_fuel_bottom]
type = DirichletBC
variable = disp_y
boundary = '1020'
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = '1 2 3'
function = pressure_ramp
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 3.44738e6
startup_time = 0
R = 8.3143
output_initial_moles = initial_moles
temperature = plenum_temp
volume = plenum_volume
material_input = fission_gas_released
output = plenum_pressure
refab_time = 166842000
refab_pressure = 11e6
refab_temperature = 295.0
refab_volume = 1.04e-05
cladding_failure_status = burst
equilibrium_pressure = equilibrium_pressure
additional_volumes = additional_volume
temperature_of_additional_volumes = addition_temperature
[]
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = FuelPinGeometry
[]
[terminator]
type = Terminator
expression = 'burst > 0'
[]
[]
[PlenumTemperature]
[plenum_temp]
boundary = 5
inner_surfaces = '5'
outer_surfaces = '10'
temperature = temperature
[]
[]
[CoolantChannel]
[convective_clad_surface] # apply convective boundary to clad outer surface
boundary = 2
variable = temperature
inlet_temperature = 580
inlet_pressure = 15.5e6 # Pa
inlet_massflux = 3800 # kg/m^2-sec
rod_diameter = 0.0095 # m
rod_pitch = 1.26e-2 # m
compute_enthalpy = false
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
output_properties = 'coolant_channel_htype coolant_channel_hmode'
[]
[]
[Materials]
[uo2_pulverization]
type = UO2Pulverization
block = pellet
layered_average_contact_pressure = contact_pressure
temperature = temperature
burnup_function = burnup
output_properties = pulverized
outputs = all
[]
# Define material behavior models and input material property data
[fuel_thermal] # temperature and burnup dependent thermal properties of UO2 (BISON kernel)
type = UO2Thermal
block = pellet
thermal_conductivity_model = NFIR
temperature = temperature
burnup_function = burnup
[]
[fuel_elasticity_tensor]
type = UO2IsotropicDamageElasticityTensor
block = pellet
fragmentation_model = BARANI
temperature = temperature
rod_ave_lin_pow = power_history
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'fuel_creep'
block = pellet
[]
[fuel_creep]
type = UO2CreepUpdate
block = pellet
temperature = temperature
fission_rate = fission_rate
initial_grain_radius = 10.0e-6
oxygen_to_metal_ratio = 2.0
[]
[fuel_relocation]
type = UO2RelocationEigenstrain
block = pellet
burnup_function = burnup
fuel_pin_geometry = fuel_pin_geometry
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
burnup_relocation_stop = 0.024
relocation_activation1 = 5000
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_eigenstrain
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = pellet
thermal_expansion_coeff = 10.0e-6
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_eigenstrain
[]
[fuel_volumetric_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = pellet
temperature = temperature
burnup_function = burnup
initial_fuel_density = 10431.0
eigenstrain_name = fuel_volumetric_eigenstrain
[]
[fission_gas_release]
type = UO2Sifgrs
block = pellet
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
gbs_model = true
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6550.
[]
[clad_thermal]
block = clad
type = ZryThermal
temperature = temperature
[]
[clad_thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
temperature = temperature
[]
[zry_thermal_creep]
type = ZryCreepLOCAUpdate
block = clad
temperature = temperature
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
max_inelastic_increment = 5e-4
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'zry_thermal_creep'
block = clad
[]
[clad_irradiation_growth]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
eigenstrain_name = clad_irradiation_eigenstrain
[]
[clad_phase]
type = ZrPhase
block = clad
temperature = temperature
numerical_method = 2
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
clad_inner_radius = 4.18e-03
clad_outer_radius = 4.75e-03
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = leistikow
[]
[clad_failure_criterion]
type = ZryCladdingFailure
boundary = 2
failure_criterion = overstrain
# effective_strain_rate_creep = creep_strain_rate
# failure_criterion = combined_overstress_and_plastic_instability
hoop_stress = stress_zz
hoop_creep_strain = creep_strain_zz
fraction_beta_phase = fract_beta_phase
fraction_oxygen_gain = oxywtfract_total
temperature = temperature
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density}
[]
[]
[Dampers]
[limitT]
type = BoundingValueElementDamper
min_value = 290.0
max_value = 3000.0
variable = temperature
[]
[limitX]
type = MaxIncrement
max_increment = 1e-5
variable = disp_x
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_rel_tol = 1e-4
nl_abs_tol = 1e-8
start_time = -10
n_startup_steps = 1
end_time = 166842000
dtmax = 1e6
dtmin = 1e-6
[TimeStepper]
type = IterationAdaptiveDT
timestep_limiting_postprocessor = material_timestep
dt = 10
optimal_iterations = 20
iteration_window = 4
linear_iteration_ratio = 100
growth_factor = 2
cutback_factor = .5
timestep_limiting_function = forced_times
force_step_every_function_point = true
[]
[Quadrature]
order = FIFTH
side_order = SEVENTH
[]
[]
[Postprocessors]
[ave_temp_interior]
type = SideAverageValue
boundary = 9
variable = temperature
execute_on = 'initial linear'
[]
[clad_inner_vol]
type = InternalVolume
boundary = 7
#outputs = exodus
execute_on = 'initial timestep_end'
[]
[fission_gas_produced] # fission gas produced (moles)
type = ElementIntegralFisGasGeneratedSifgrs
block = pellet
execute_on = 'linear'
[]
[fission_gas_grain]
type = ElementIntegralFisGasGrainSifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[fission_gas_boundary]
type = ElementIntegralFisGasBoundarySifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[flux_from_clad] # area integrated heat flux from the cladding
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 5
diffusivity = thermal_conductivity
[]
[flux_from_fuel] # area integrated heat flux from the fuel
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 10
diffusivity = thermal_conductivity
[]
[rod_total_power]
type = ElementIntegralPower
variable = temperature
burnup_function = burnup
block = pellet
[]
[rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.1186 # rod height
[]
[max_fuel_temp]
type = NodalExtremeValue
block = pellet
value_type = max
variable = temperature
[]
[max_clad_temp]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
[]
[max_clad_hoop_strain]
type = ElementExtremeValue
block = clad
value_type = max
variable = strain_zz
[]
[material_timestep]
type = MaterialTimeStepPostprocessor
block = clad
[]
[burst]
type = ElementExtremeValue
value_type = max
variable = burst
block = clad
execute_on = 'initial timestep_end'
[]
[volume_pulverized]
type = ElementIntegralMaterialProperty
mat_prop = pulverized
block = pellet
[]
[max_fuel_temp_periphery]
type = NodalExtremeValue
value_type = max
variable = temperature
boundary = 10
[]
[additional_volume]
type = FunctionValuePostprocessor
function = 8.5e-6
execute_on = 'initial linear'
[]
[addition_temperature]
type = FunctionValuePostprocessor
function = 300.0
execute_on = 'initial linear'
[]
[equilibrium_pressure]
type = FunctionValuePostprocessor
function = 101325.0
execute_on = 'initial linear'
[]
[]
[PerformanceMetricOutputs]
[]
[StandardLWRFuelRodOutputs]
temperature = temperature
fuel_pellet_blocks = 3
[]
[Outputs]
perf_graph = true
exodus = true
color = false
csv = true
[checkpoint]
type = Checkpoint
num_files = 2
[]
[chkfile]
type = CSV
execute_on = FINAL
show = 'volume_pulverized'
[]
[]
(test/tests/axial_relocation/ad_uo2_pulverization.i)
# The purpose of this test is to calculate the amount of pulverization in
# a high burnup fuel as part of the axial relocation algorithm. In the test 5
# axial fuel slices are modeled without cladding with an outer fuel radius of 4.5 mm
# and slice height of 0.1 m. Ten radial finite elements are used. The burnup
# increases linearly from the fuel centerline to the fuel surface. The burnup also
# increases as a function of time from 0 to 100 MWd/kgU on the fuel surface over 100 seconds.
#
# The fuel temperature is held constant at 1200 K. And a constant contact pressure
# is applied to the fuel surface of 40 MPa.
#
# The threshold for pulverization is given by an empirical temperature threshold
# as a function of burnup. A local burnup of 71 MWd/kgU is required for pulverization
# to begin. At this burnup the temperature threshold is 1193.15 K. The temperature
# threshold linearly decreases to a value of 913.15 K at 94 MWd/kgU after which
# it is constant.
#
# Based upon the conditions and threshold given above at t = 100 s the outer three
# elements should be completely pulverized. The inner radius of the third element
# is at a radius of 3.150 mm. Therefore the layered averaged pulverized fuel volume
# (in each layer in this case) is analytically determined by:
#
# V_p = pi * L * (R_o^2 - R_p^2)
#
# where L is the slice height (0.1 m), R_o is the outer fuel radius, and R_p is the
# radius into the fuel at which pulverization ends. Therefore:
#
# V_p = pi * (0.1) * (4.5e-3^2 - 3.150e-3^2)
# V_p = 3.24448e-6 m^3 in each layer.
#
# The layered_pulverized_fuel_volume AuxVariable computed by BISON gives
# a layered volume of pulverized fuel as 3.24448e-6 m^3.
#
# Using command line arguments another test is run where the contact pressure is
# changed to 60 MPa which precludes pulverization for the duration of that test.
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 5
pellet_outer_radius = 4.5e-3
include_clad = false
fuel_height = 0.5
include_plenum = false
nx_p = 10
pellet_mesh_density = customize
pellet_bottom_coor = 0.0
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxVariables]
[burnup]
order = FIRST
family = LAGRANGE
[]
[contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 'x*t/4.275'
[]
[contact_pressure_function]
type = ConstantFunction
value = 40.0e6
[]
[]
[Kernels]
[heat]
type = ADHeatConduction
variable = temperature
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[contact_pressure]
type = FunctionAux
variable = contact_pressure
boundary = 10
function = contact_pressure_function
execute_on = 'initial timestep_end'
[]
[pulverized]
type = ADMaterialRealAux
block = fuel
variable = pulverized
property = pulverized
execute_on = 'initial timestep_end'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = layered_average_contact_pressure
[]
[layered_pulverized_fuel_volume]
type = SpatialUserObjectAux
variable = layered_pulverized_fuel_volume
execute_on = timestep_end
block = fuel
user_object = layered_pulverized_fuel_volume
[]
[layered_average_burnup]
type = SpatialUserObjectAux
variable = layered_average_burnup
execute_on = timestep_end
block = fuel
user_object = layered_average_burnup
[]
[]
[BCs]
[temperature]
type = ADDirichletBC
boundary = '10 12'
variable = temperature
value = 1200
[]
[]
[Materials]
[uo2pulverization]
type = ADUO2Pulverization
block = fuel
layered_average_contact_pressure = layered_average_contact_pressure
temperature = temperature
[]
[thermal]
type = ADHeatConductionMaterial
thermal_conductivity = 1.0
specific_heat = 1.0
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = Layered1DFuelPinGeometry
include_clad = false
mesh_generator = layered1D_mesh
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = 'initial timestep_end'
boundary = 10
num_layers = 5
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
variable = pulverized
fuel_pin_geometry = fuel_pin_geometry
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-8
nl_abs_tol = 1e-10
l_tol = 1e-5
start_time = 0.0
num_steps = 100
dt = 1
[]
[Outputs]
exodus = true
[]
(test/tests/axial_relocation/mass_relocation.i)
# The purpose of this test is to verify the internal loops of the AxialRelocationUserObject
# that keeps track of the mass relocation. A linearly varying burnup is applied through
# the radius of 5 axial fuel slices which are modeled with cladding of 0.56 mm with an outer
# fuel radius of 4.5 mm and slice height of 0.1 m. Ten radial finite elements are used.
# The burnup increases linearly from the fuel centerline to the fuel surface but is
# constant in time. The fuel temperature is held constant at 1200 K and a constant
# contact pressure is applied to the fuel surface of 40 MPa.
#
# The above conditions correspond to the conditions used in the regression test
# packing_fraction.i which verified that an effective packing fraction of 0.828912
# is obtained. Using this packing fraction and applying an axially varying displacement
# on the inner cladding surface in the radial direction described by:
#
# disp_x = 2.0e-5 * t * sin(pi * y / 0.5)
#
# the mass relocation loops are verified. At 24 seconds axial relocation begins.
# The updated mass fraction relative to the initial mass calculated by BISON
# is tabulated below for each of the layers (0, 1, 2, 3, 4) for a total of 5 layers
# for the end of the time step at 26 seconds.
#
# Layer Initial Mass Current Mass Mass Fraction
# (-) (kg) (kg) (-)
# 4 0.066299 0.066299 1.0
# 3 0.066299 0.064207 0.96845
# 2 0.066299 0.068391 1.03155
# 1 0.066299 0.066299 1.0
# 0 0.066299 0.066299 1.0
#
# Using an independent calculation in Microsoft Excel for Mac (included in this
# testing directory) the updated mass fractions are verified to match the results
# of the layered_mass_fraction AuxVariable results at the end of the simulation.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = disp_x
temperature = temperature
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 5
pellet_outer_radius = 4.5e-3
fuel_height = 0.5
include_plenum = false
nx_p = 10
clad_gap_width = 0.0
pellet_mesh_density = customize
pellet_bottom_coor = 0.0
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[layered_mass_fraction]
order = CONSTANT
family = MONOMIAL
[]
[inner_clad_radius]
order = FIRST
family = LAGRANGE
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 'x*100.0/4.275'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[clad_displacement_function]
type = ParsedFunction
expression = '2.0e-5 * t * sin(pi * y / 0.5)'
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[gps_fuel]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = fuel
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[gps_clad]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = clad
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[pulverized]
type = MaterialRealAux
block = fuel
variable = pulverized
property = pulverized
execute_on = 'initial nonlinear'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = layered_average_contact_pressure
[]
[layered_pulverized_fuel_volume]
type = SpatialUserObjectAux
variable = layered_pulverized_fuel_volume
execute_on = timestep_end
block = fuel
user_object = layered_pulverized_fuel_volume
[]
[layered_average_burnup]
type = SpatialUserObjectAux
variable = layered_average_burnup
execute_on = timestep_end
block = fuel
user_object = layered_average_burnup
[]
[layered_mass_fraction]
type = AxialRelocationOutputAux
variable = layered_mass_fraction
execute_on = timestep_end
block = fuel
axial_relocation_user_object = axial_relocation
output_option = MASS_FRACTION
[]
[inner_clad_radius]
type = Radius
boundary = 5
variable = inner_clad_radius
execute_on = 'initial nonlinear'
[]
[layered_maximum_clad_radius]
type = SpatialUserObjectAux
variable = layered_maximum_clad_radius
execute_on = timestep_end
block = fuel
user_object = layered_maximum_clad_radius
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[BCs]
[temperature]
type = DirichletBC
boundary = '10 12 5 2'
variable = temperature
value = 1200
[]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[]
[Materials]
[uo2pulverization]
type = UO2Pulverization
block = fuel
burnup = burnup
layered_average_contact_pressure = layered_average_contact_pressure
temperature = temperature
[]
[fuel_thermal]
type = HeatConductionMaterial
block = fuel
thermal_conductivity = 1.0
specific_heat = 1.0
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = .345
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0.3
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = clad
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = 'initial timestep_end'
boundary = 10
num_layers = 5
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
variable = pulverized
fuel_pin_geometry = fuel_pin_geometry
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_maximum_clad_radius]
type = LayeredNodalExtremeValue
variable = inner_clad_radius
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[layered_clad_internal_volume]
type = LayeredInternalVolume
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = 0.0
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[axial_relocation]
type = AxialRelocationUserObject
direction = y
block = fuel
num_layers = 5
layered_average_burnup = layered_average_burnup
layered_pulverized_fuel_volume = layered_pulverized_fuel_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_clad_internal_volume = layered_clad_internal_volume
max_linear_heat_generation_rate = maximum_power
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Postprocessors]
[rod_input_power]
type = FunctionValuePostprocessor
function = power
execute_on = timestep_end
[]
[maximum_power]
type = TimeExtremeValue
postprocessor = rod_input_power
value_type = max
execute_on = timestep_end
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-8
nl_abs_tol = 1e-10
l_tol = 1e-5
start_time = 0.0
num_steps = 14
dt = 2
[]
[Outputs]
exodus = true
[]
(examples/axial_relocation/layered1D/single_balloon.i)
initial_fuel_density = 10431.0
[GlobalParams]
density = ${initial_fuel_density}
order = FIRST
family = LAGRANGE
displacements = disp_x
temperature = temp
[]
[Mesh]
coord_type = RZ
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 36
pellet_outer_radius = 4.5e-3
clad_gap_width = 0.0
clad_thickness = 0.56e-3
fuel_height = 3.6
include_plenum = false
pellet_bottom_coor = 0.0
[]
[]
[Variables]
[temp]
initial_condition = 300.0
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 0.07
[]
[clad_displacement_function]
type = ParsedFunction
expression = '2.0e-5 * t * sin(pi * y / 3.6)'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '0 15000'
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[layered_mass_fraction]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[inner_clad_radius]
order = FIRST
family = LAGRANGE
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[outer_fuel_radius]
order = FIRST
family = LAGRANGE
[]
[axial_relocation_strain]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temp
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[gps_fuel]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
strain = finite
block = fuel
eigenstrain_names = 'axial_relocation'
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[gps_clad]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
strain = finite
block = clad
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[layered_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = average_contact_pressure
[]
[layered_mass_fraction]
type = AxialRelocationOutputAux
variable = layered_mass_fraction
execute_on = timestep_end
block = fuel
axial_relocation_user_object = axial_relocation
output_option = MASS_FRACTION
[]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = nonlinear
block = fuel
[]
[pulverized]
type = MaterialRealAux
property = pulverized
variable = pulverized
execute_on = 'initial timestep_end'
block = fuel
[]
[inner_clad_radius]
type = Radius
boundary = 5
variable = inner_clad_radius
execute_on = 'initial nonlinear'
[]
[outer_fuel_radius]
type = Radius
boundary = 10
variable = outer_fuel_radius
execute_on = 'initial nonlinear'
[]
[layered_maximum_clad_radius]
type = SpatialUserObjectAux
variable = layered_maximum_clad_radius
execute_on = timestep_end
block = fuel
user_object = layered_maximum_clad_radius
[]
[axial_relocation_strain]
type = MaterialRealAux
variable = axial_relocation_strain
block = fuel
property = axial_relocation_strain
execute_on = 'timestep_end'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[center]
type = DirichletBC
variable = temp
boundary = 12
value = 300
[]
[clad_inner_surface]
type = DirichletBC
variable = temp
boundary = 5
value = 300
[]
[clad_outer_surface]
type = DirichletBC
variable = temp
boundary = 2
value = 300
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = 'initial nonlinear'
boundary = 10
num_layers = 36
[]
[layered_eigenstrain]
type = LayeredAxialRelocationEigenstrainUserObject
pellet_outer_radius = outer_fuel_radius
axial_relocation_object = axial_relocation
penetration = penetration
direction = y
execute_on = 'initial nonlinear'
boundary = 10
layer_bounding_block = fuel
num_layers = 36
[]
[layered_maximum_clad_radius]
type = LayeredNodalExtremeValue
variable = inner_clad_radius
direction = y
execute_on = 'initial nonlinear'
boundary = 5
layer_bounding_block = fuel
num_layers = 36
[]
[layered_clad_internal_volume]
type = LayeredInternalVolume
fuel_pin_geometry = pin_geometry
out_of_plane_strain = 0
direction = y
execute_on = 'initial nonlinear'
boundary = 5
layer_bounding_block = fuel
num_layers = 36
[]
[average_outer_fuel_radius]
type = LayeredSideAverage
variable = outer_fuel_radius
direction = y
execute_on = 'initial nonlinear'
boundary = 10
num_layers = 36
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial nonlinear'
block = fuel
num_layers = 36
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
fuel_pin_geometry = pin_geometry
variable = pulverized
direction = y
execute_on = 'initial nonlinear'
block = fuel
num_layers = 36
[]
[axial_relocation]
type = AxialRelocationUserObject
direction = y
num_layers = 36
layered_average_burnup = layered_average_burnup
layered_pulverized_fuel_volume = layered_pulverized_fuel_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_clad_internal_volume = layered_clad_internal_volume
max_linear_heat_generation_rate = maximum_power
fuel_pin_geometry = pin_geometry
fragment_packing_fraction = 0.75 # Set to force overall packing fraction to be 0.75
pulver_packing_fraction = 0.75 # Set to force overall packing fraction to be 0.75
pulver_characteristic_length = 0.0001
nonrelocatable_fuel_fraction = 0.01
execute_on = 'initial nonlinear'
[]
[]
[Materials]
[fuel_pulverization]
type = UO2Pulverization
burnup = burnup
block = fuel
temperature = temp
layered_average_contact_pressure = layered_average_contact_pressure
[]
[fuel_thermal]
type = HeatConductionMaterial
block = fuel
thermal_conductivity = 3.0
specific_heat = 260.0
[]
[axial_relocation_strain]
type = UO2AxialRelocationEigenstrain
block = fuel
axial_relocation_eigenstrain_object = layered_eigenstrain
eigenstrain_name = axial_relocation
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = .345
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0.3
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = clad
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[fuel_density]
type = StrainAdjustedDensity
block = fuel
strain_free_density = ${initial_fuel_density}
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6551.0
[]
[]
[Postprocessors]
[rod_input_power]
type = FunctionValuePostprocessor
function = power
execute_on = 'timestep_end'
[]
[maximum_power]
type = TimeExtremeValue
postprocessor = rod_input_power
value_type = max
execute_on = 'timestep_end'
[]
[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
[]
[alive_time]
type = PerfGraphData
section_name = Root
data_type = TOTAL
[]
[]
[VectorPostprocessors]
[mass_fraction]
type = LineValueSampler
start_point = '0 0.05 0'
end_point = '0 3.55 0'
num_points = 36
sort_by = y
variable = layered_mass_fraction
outputs = mass_fraction
[]
[]
[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'
l_max_its = 60
nl_rel_tol = 1e-8
nl_abs_tol = 1e-10
l_tol = 1e-5
dt = 2
start_time = 0.0
end_time = 100
[]
[Outputs]
perf_graph = true
exodus = true
[mass_fraction]
type = CSV
execute_on = 'final'
create_final_symlink = true
[]
[]
(examples/axial_relocation/layered1D/twin_balloon.i)
initial_fuel_density = 10431.0
[GlobalParams]
density = ${initial_fuel_density}
order = FIRST
family = LAGRANGE
displacements = disp_x
temperature = temp
[]
[Mesh]
coord_type = RZ
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 36
pellet_outer_radius = 4.5e-3
clad_gap_width = 0.0
clad_thickness = 0.56e-3
fuel_height = 3.6
include_plenum = false
pellet_bottom_coor = 0.0
[]
[]
[Variables]
[temp]
initial_condition = 300.0
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 0.07
[]
[clad_displacement_function]
type = ParsedFunction
expression = '2.0e-5 * t * abs(sin(2*pi * y / 3.6))'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '0 15000'
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[layered_mass_fraction]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[inner_clad_radius]
order = FIRST
family = LAGRANGE
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[outer_fuel_radius]
order = FIRST
family = LAGRANGE
[]
[axial_relocation_strain]
order = CONSTANT
family = MONOMIAL
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temp
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[gps_fuel]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
strain = finite
block = fuel
eigenstrain_names = 'axial_relocation'
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[gps_clad]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
strain = finite
block = clad
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[layered_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = average_contact_pressure
[]
[layered_mass_fraction]
type = AxialRelocationOutputAux
variable = layered_mass_fraction
execute_on = timestep_end
block = fuel
axial_relocation_user_object = axial_relocation
output_option = MASS_FRACTION
[]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = nonlinear
block = fuel
[]
[pulverized]
type = MaterialRealAux
property = pulverized
variable = pulverized
execute_on = timestep_end
block = fuel
[]
[inner_clad_radius]
type = Radius
boundary = 5
variable = inner_clad_radius
execute_on = 'initial nonlinear'
[]
[outer_fuel_radius]
type = Radius
boundary = 10
variable = outer_fuel_radius
execute_on = 'initial nonlinear'
[]
[layered_maximum_clad_radius]
type = SpatialUserObjectAux
variable = layered_maximum_clad_radius
execute_on = timestep_end
block = fuel
user_object = layered_maximum_clad_radius
[]
[axial_relocation_strain]
type = MaterialRealAux
variable = axial_relocation_strain
block = fuel
property = axial_relocation_strain
execute_on = 'timestep_end'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[center]
type = DirichletBC
variable = temp
boundary = 12
value = 300
[]
[clad_inner_surface]
type = DirichletBC
variable = temp
boundary = 5
value = 300
[]
[clad_outer_surface]
type = DirichletBC
variable = temp
boundary = 2
value = 300
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = timestep_end
boundary = 10
num_layers = 36
[]
[layered_eigenstrain]
type = LayeredAxialRelocationEigenstrainUserObject
pellet_outer_radius = outer_fuel_radius
axial_relocation_object = axial_relocation
penetration = penetration
direction = y
execute_on = 'initial nonlinear'
boundary = 10
layer_bounding_block = fuel
num_layers = 36
[]
[layered_maximum_clad_radius]
type = LayeredNodalExtremeValue
variable = inner_clad_radius
direction = y
execute_on = 'initial nonlinear'
boundary = 5
layer_bounding_block = fuel
num_layers = 36
[]
[layered_clad_internal_volume]
type = LayeredInternalVolume
fuel_pin_geometry = pin_geometry
out_of_plane_strain = 0
direction = y
execute_on = 'initial nonlinear'
boundary = 5
layer_bounding_block = fuel
num_layers = 36
[]
[average_outer_fuel_radius]
type = LayeredSideAverage
variable = outer_fuel_radius
direction = y
execute_on = 'initial nonlinear'
boundary = 10
num_layers = 36
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial nonlinear'
block = fuel
num_layers = 36
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
fuel_pin_geometry = pin_geometry
variable = pulverized
direction = y
execute_on = 'initial nonlinear'
block = fuel
num_layers = 36
[]
[axial_relocation]
type = AxialRelocationUserObject
direction = y
num_layers = 36
layered_average_burnup = layered_average_burnup
layered_pulverized_fuel_volume = layered_pulverized_fuel_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_clad_internal_volume = layered_clad_internal_volume
max_linear_heat_generation_rate = maximum_power
fuel_pin_geometry = pin_geometry
fragment_packing_fraction = 0.75 # Set to force overall packing fraction to be 0.75
pulver_packing_fraction = 0.75 # Set to force overall packing fraction to be 0.75
pulver_characteristic_length = 0.0001
nonrelocatable_fuel_fraction = 0.01
execute_on = 'initial nonlinear'
[]
[]
[Materials]
[fuel_pulverization]
type = UO2Pulverization
burnup = burnup
block = fuel
temperature = temp
layered_average_contact_pressure = layered_average_contact_pressure
[]
[fuel_thermal]
type = HeatConductionMaterial
block = fuel
thermal_conductivity = 3.0
specific_heat = 260.0
[]
[axial_relocation_strain]
type = UO2AxialRelocationEigenstrain
block = fuel
axial_relocation_eigenstrain_object = layered_eigenstrain
eigenstrain_name = axial_relocation
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = .345
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0.3
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = clad
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[fuel_density]
type = StrainAdjustedDensity
block = fuel
strain_free_density = ${initial_fuel_density}
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6551.0
[]
[]
[Postprocessors]
[rod_input_power]
type = FunctionValuePostprocessor
function = power
execute_on = timestep_end
[]
[maximum_power]
type = TimeExtremeValue
postprocessor = rod_input_power
value_type = max
execute_on = timestep_end
[]
[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
[]
[alive_time]
type = PerfGraphData
section_name = Root
data_type = TOTAL
[]
[]
[VectorPostprocessors]
[mass_fraction]
type = LineValueSampler
start_point = '0 0.05 0'
end_point = '0 3.55 0'
num_points = 36
sort_by = y
variable = layered_mass_fraction
outputs = mass_fraction
[]
[]
[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'
l_max_its = 60
nl_rel_tol = 1e-8
nl_abs_tol = 1e-10
l_tol = 1e-5
dt = 2
start_time = 0.0
end_time = 100
[]
[Outputs]
perf_graph = true
exodus = true
[mass_fraction]
type = CSV
execute_on = 'final'
create_final_symlink = true
[]
[]
(assessment/LWR/validation/LOCA_Studsvik/analysis/rod_196/Studsvik_196_part2.i)
initial_fuel_density = 10431.0
[GlobalParams]
density = ${initial_fuel_density}
initial_porosity = 0.05
order = SECOND
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
volumetric_locking_correction = false
displacements = 'disp_x disp_y'
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
restart_file_base = 'Studsvik_196_part1_checkpoint_cp/LATEST'
[]
[Mesh]
coord_type = RZ
[smeared_mesh]
type = FuelPinMeshGenerator
clad_top_gap_height = 0.0248576
pellet_height = 0.2606424
pellet_quantity = 1
clad_bot_gap_height = 0.0145
pellet_outer_radius = 3.92e-3
clad_gap_width = 80e-6
clad_thickness = 0.57e-3
clad_mesh_density = customize
pellet_mesh_density = customize
nx_c = 5
ny_c = 50
nx_p = 11
ny_p = 60
elem_type = QUAD8
[]
patch_update_strategy = auto
patch_size = 10 # For contact algorithm
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
[]
[]
[AuxVariables]
# Define auxilary variables
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = pellet
[]
[creep_strain_rate]
order = CONSTANT
family = MONOMIAL
[]
[effective_creep_strain]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[hoop_strain]
order = CONSTANT
family = MONOMIAL
[]
[fract_beta_phase] # Fraction of beta phase in Zry
order = CONSTANT
family = MONOMIAL
[]
[scale_thickness] # ZrO2 scale thickness (m)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfract_total] # Current oxigen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfgain_total] # Gained oxygen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[burst_stress] # Hoop stress at cladding burst
order = CONSTANT
family = MONOMIAL
[]
[burst] # Did cladding burst occur?
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = power_history.csv
format = columns
scale_factor = 1
[]
[axial_peaking_factors]
type = ParsedFunction
expression = 1
[]
[pressure_ramp] # reads and interpolates input data defining amplitude curve for fill gas pressure
type = PiecewiseLinear
x = '-200 0 86400 47386400 47472800 47559200 47645600 94945600 95032000'
y = '0.0065371 1 1 1 1 1 1 1 0.0065371'
scale_factor = 15.5e6
[]
[clad_surface_temperature]
type = PiecewiseBilinear
axis = 1
data_file = clad_temperature.csv
[]
[forced_times]
type = PiecewiseLinear
data_file = timestep_limiting.csv
scale_factor = 1
format = columns
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[fuel]
block = pellet
add_variables = true
strain = FINITE
eigenstrain_names = 'fuel_thermal_eigenstrain fuel_relocation_eigenstrain fuel_volumetric_eigenstrain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
decomposition_method = EigenSolution
extra_vector_tags = 'ref'
temperature = temperature
[]
[clad]
block = clad
add_variables = true
strain = FINITE
eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_eigenstrain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz creep_strain_zz strain_zz'
extra_vector_tags = 'ref'
decomposition_method = EigenSolution
temperature = temperature
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
[]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
extra_vector_tags = 'ref'
block = pellet
burnup_function = burnup
[]
[]
[Burnup]
[burnup]
block = pellet
rod_ave_lin_pow = power_history # using the power function defined above
axial_power_profile = axial_peaking_factors # using the axial power profile function defined above
num_radial = 80
num_axial = 11
fuel_pin_geometry = fuel_pin_geometry
fuel_volume_ratio = 1.0 # for use with dished pellets (ratio of actual volume to cylinder volume)
order = CONSTANT
family = MONOMIAL
RPF = RPF
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '0.05 0.95 0 0 0 0'
[]
[]
[AuxKernels]
# Define auxilliary kernels for each of the aux variables
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
block = clad
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
factor = 3e13
execute_on = timestep_begin
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
variable = fast_neutron_fluence
block = clad
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = pellet
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[creep_strain_rate]
type = MaterialRealAux
property = creep_rate
variable = creep_strain_rate
block = clad
[]
[effective_creep_strain]
type = MaterialRealAux
property = effective_creep_strain
variable = effective_creep_strain
block = clad
execute_on = timestep_end
[]
[fract_bphase]
type = MaterialRealAux
block = clad
variable = fract_beta_phase
property = fract_beta_phase
[]
[scl_thickness]
type = MaterialRealAux
boundary = 2
variable = scale_thickness
property = oxide_scale_thickness
[]
[ofract_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfract_total
property = current_oxygen_weight_frac_total
[]
[ofgain_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfgain_total
property = oxygen_weight_frac_gained_total
[]
[sigmaburst]
type = MaterialRealAux
boundary = 2
variable = burst_stress
property = burst_stress
[]
[hasburst]
type = MaterialRealAux
boundary = 2
variable = burst
property = failed
execute_on = timestep_end
[]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = 10
execute_on = 'linear'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
formulation = kinematic
model = frictionless
penalty = 1e7
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
initial_moles = initial_moles
gas_released = 'fission_gas_released he_prod'
released_gas_types = 'Kr Xe;
He'
released_fractions = '0.153 0.847;
1'
quadrature = true
contact_pressure = contact_pressure
refab_gas_types = He
refab_fractions = 1
refab_time = 95032000
refab_type = 0
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_clad_bottom]
type = DirichletBC
variable = disp_y
boundary = '1'
value = 0.0
[]
[no_y_fuel_bottom]
type = DirichletBC
variable = disp_y
boundary = '1020'
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = '1 2 3'
function = pressure_ramp
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 3.44738e6
startup_time = 0
R = 8.3143
output_initial_moles = initial_moles
temperature = plenum_temp
volume = plenum_volume
material_input = 'fission_gas_released he_prod'
output = plenum_pressure
refab_time = 95032000
refab_pressure = 8.2e6
refab_temperature = 295.0
refab_volume = 1.04e-05
cladding_failure_status = burst
equilibrium_pressure = equilibrium_pressure
additional_volumes = additional_volume
temperature_of_additional_volumes = addition_temperature
[]
[]
[clad_temp]
type = FunctionDirichletBC
function = clad_surface_temperature
variable = temperature
boundary = 2
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = FuelPinGeometry
[]
# [terminator]
# type = Terminator
# expression = 'burst > 0'
# []
[]
[PlenumTemperature]
[plenum_temp]
boundary = 5
inner_surfaces = '5'
outer_surfaces = '10'
temperature = temperature
[]
[]
[CoolantChannel]
[convective_clad_surface] # apply convective boundary to clad outer surface
boundary = 2
variable = temperature
inlet_temperature = 580
inlet_pressure = 15.5e6 # Pa
inlet_massflux = 3800 # kg/m^2-sec
rod_diameter = 0.00914 # m
rod_pitch = 1.26e-2 # m
compute_enthalpy = false
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
output_properties = 'coolant_channel_htype coolant_channel_hmode'
[]
[]
[Materials]
[uo2_pulverization]
type = UO2Pulverization
block = pellet
layered_average_contact_pressure = contact_pressure
temperature = temperature
burnup_function = burnup
output_properties = pulverized
outputs = all
[]
# Define material behavior models and input material property data
[fuel_thermal] # temperature and burnup dependent thermal properties of UO2 (BISON kernel)
type = UO2Thermal
block = pellet
thermal_conductivity_model = NFIR
temperature = temperature
burnup_function = burnup
[]
[fuel_elasticity_tensor]
type = UO2IsotropicDamageElasticityTensor
block = pellet
fragmentation_model = BARANI
rod_ave_lin_pow = power_history
temperature = temperature
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'fuel_creep'
block = pellet
[]
[fuel_creep]
type = UO2CreepUpdate
block = pellet
temperature = temperature
fission_rate = fission_rate
initial_grain_radius = 10.0e-6
oxygen_to_metal_ratio = 2.0
[]
[fuel_relocation]
type = UO2RelocationEigenstrain
block = pellet
burnup_function = burnup
fuel_pin_geometry = fuel_pin_geometry
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
burnup_relocation_stop = 0.024
relocation_activation1 = 5000
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_eigenstrain
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = pellet
thermal_expansion_coeff = 10.0e-6
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_eigenstrain
[]
[fuel_volumetric_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = pellet
temperature = temperature
burnup_function = burnup
initial_fuel_density = 10431.0
eigenstrain_name = fuel_volumetric_eigenstrain
[]
[fission_gas_release]
type = UO2Sifgrs
block = pellet
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
gbs_model = true
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6550.
[]
[clad_thermal]
block = clad
type = ZryThermal
temperature = temperature
[]
[clad_thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
temperature = temperature
[]
[zry_thermal_creep]
type = ZryCreepLOCAUpdate
block = clad
temperature = temperature
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
max_inelastic_increment = 5e-4
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'zry_thermal_creep'
block = clad
[]
[clad_irradiation_growth]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
eigenstrain_name = clad_irradiation_eigenstrain
[]
[clad_phase]
type = ZrPhase
block = clad
temperature = temperature
numerical_method = 2
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
clad_inner_radius = 4.18e-03
clad_outer_radius = 4.75e-03
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = leistikow
[]
[clad_failure_criterion]
type = ZryCladdingFailure
boundary = 2
failure_criterion = overstrain
# effective_strain_rate_creep = creep_strain_rate
# failure_criterion = combined_overstress_and_plastic_instability
hoop_stress = stress_zz
hoop_creep_strain = creep_strain_zz
fraction_beta_phase = fract_beta_phase
fraction_oxygen_gain = oxywtfract_total
temperature = temperature
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density}
[]
[]
[Dampers]
[limitT]
type = BoundingValueElementDamper
min_value = 290.0
max_value = 3000.0
variable = temperature
[]
[limitX]
type = MaxIncrement
max_increment = 1e-5
variable = disp_x
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_rel_tol = 1e-4
nl_abs_tol = 1e-8
# n_startup_steps = 1
end_time = 95033429.6
dtmax = 20
dtmin = 1e-6
[TimeStepper]
type = IterationAdaptiveDT
timestep_limiting_postprocessor = material_timestep
dt = 10
optimal_iterations = 20
iteration_window = 4
linear_iteration_ratio = 100
growth_factor = 2
cutback_factor = .5
timestep_limiting_function = forced_times
force_step_every_function_point = true
[]
[Quadrature]
order = FIFTH
side_order = SEVENTH
[]
[]
[Postprocessors]
[ave_temp_interior]
type = SideAverageValue
boundary = 9
variable = temperature
execute_on = 'initial linear'
[]
[clad_inner_vol]
type = InternalVolume
boundary = 7
#outputs = exodus
execute_on = 'initial timestep_end'
[]
[fission_gas_produced] # fission gas produced (moles)
type = ElementIntegralFisGasGeneratedSifgrs
block = pellet
execute_on = 'linear'
[]
[fission_gas_grain]
type = ElementIntegralFisGasGrainSifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[fission_gas_boundary]
type = ElementIntegralFisGasBoundarySifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[flux_from_clad] # area integrated heat flux from the cladding
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 5
diffusivity = thermal_conductivity
[]
[flux_from_fuel] # area integrated heat flux from the fuel
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 10
diffusivity = thermal_conductivity
[]
[rod_total_power]
type = ElementIntegralPower
variable = temperature
burnup_function = burnup
block = pellet
[]
[rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.1186 # rod height
[]
[max_fuel_temp]
type = NodalExtremeValue
block = pellet
value_type = max
variable = temperature
[]
[max_clad_temp]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
[]
[max_clad_hoop_strain]
type = ElementExtremeValue
block = clad
value_type = max
variable = strain_zz
[]
[material_timestep]
type = MaterialTimeStepPostprocessor
block = clad
[]
[burst]
type = ElementExtremeValue
value_type = max
variable = burst
block = clad
execute_on = 'initial timestep_end'
[]
[he_prod]
type = IFBAHeProduction
b10_load = 9.27165354e-5
b10_enrich = 0.5
burnup = average_burnup
zrb2_thick = 10e-6
fuel_out_rad = 9.32e-3
ifba_len = 0.3
u235_enrich = 0.05
[]
[volume_pulverized]
type = ElementIntegralMaterialProperty
mat_prop = pulverized
block = pellet
[]
[max_fuel_temp_periphery]
type = NodalExtremeValue
value_type = max
variable = temperature
boundary = 10
[]
[additional_volume]
type = FunctionValuePostprocessor
function = 8.5e-6
execute_on = 'initial linear'
[]
[addition_temperature]
type = FunctionValuePostprocessor
function = 300.0
execute_on = 'initial linear'
[]
[equilibrium_pressure]
type = FunctionValuePostprocessor
function = 101325.0
execute_on = 'initial linear'
[]
[]
[PerformanceMetricOutputs]
[]
[StandardLWRFuelRodOutputs]
temperature = temperature
fuel_pellet_blocks = 3
[]
[Outputs]
perf_graph = true
exodus = true
color = false
csv = true
[chkfile]
type = CSV
execute_on = FINAL
show = 'volume_pulverized'
[]
[]
(test/tests/axial_relocation/axial_relocation_volume_correction.i)
# The purpose of this test is to verify the calculation of the internal gas volume
# in the rod when one or more axial layers have crumbled (accommodated
# additional mass) during axial relocation. This internal volume calculation
# takes into account that in crumbled layers the gas volume is intermixed with
# the porous bed of fuel fragments after the eigenstrain is applied to move the
# mesh to within a small residual gap size fo the inside surface of the cladding.
# In addition, in layers that have lost mass the packing fraction is calculated
# based upon the current mass in the layer via:
#
# phi = (m_frac * m_i) / (rho_f * V_c)
#
# where m_frac is the mass fraction in the layer, m_i is the initial mass in
# the layer, rho_f is the fuel density, and V_c is the internal volume of the
# cladding in the layer.
#
# In order to get the internal gas volume correct the volume of the pellet in
# the layers that have crumbled must be scaled by the packing fraction of that
# layer. This test consists of 5 layers and only the middle layer crumbles and
# experiences relocation. At the end of the simulation the inner cladding radius
# is calculated ot be 4.5e-3 + 0.00052 = 5.02e-3 m. Assuming a residual gap of
# 2.0e-6 m the fuel radius in this layer is 5.02e-3 - 2.0e-6 = 5.018e-3m. In all
# other layers the fuel radius remains as the as fabricated fuel radius (4.5e-3 m).
#
# Equal slice heights of 0.1 m are used giving a total pellet volume without the
# correction of:
#
# V_p = (0.1 * pi) * (4 * 4.5e-3^2 + 5.018e-3^2) = 3.335753e-5 m^3
#
# which is the value reported by the pellet_volume1 postprocessor (the postprocessor
# actually reports the negative of this value because of the direction of the normal
# of the pellet exterior). Adding the clad_volume and pellet_volume1 postprocessors
# give the value of postprocessor gas_volume1.
#
# However, the layer with a fuel radius of 5.018e-3 m must be multiplied by the
# packing fraction of 0.828912. In the layer that has lost mass the new packing
# fraction is given by:
#
# phi = (0.968449 * 0.0663592) / (10431.0 * 0.1 * pi * 4.92069e-3^2) = 0.80993
#
# These two corrections give a total pellet volume of:
#
# V_p = (0.1 * pi) * (3 * 4.5e-3^2 + 0.80993 * 4.5e-3^2 + 0.828912 * 5.018e-3^2)
# = 3.079497e-05 m^3
#
# which is verified to be the negative of the value given by postprocessor
# pellet_volume2. Adding the clad_volume and pellet_volum2 postprocessors gives
# the corrected gas volume given by the gas_volume2 postprocessor.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = disp_x
temperature = temperature
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 5
pellet_outer_radius = 4.5e-3
fuel_height = 0.5
include_plenum = false
nx_p = 10
clad_gap_width = 0.0
pellet_mesh_density = customize
pellet_bottom_coor = 0.0
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[layered_mass_fraction]
order = CONSTANT
family = MONOMIAL
[]
[inner_clad_radius]
order = FIRST
family = LAGRANGE
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[outer_fuel_radius]
order = FIRST
family = LAGRANGE
[]
[axial_relocation_strain]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 'x*100.0/4.275'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[clad_displacement_function]
type = ParsedFunction
expression = '2.0e-5 * t * sin(pi * y / 0.5)'
[]
[gas_volume2]
type = ParsedFunction
expression = 'clad_volume + pellet_volume2'
symbol_names = 'clad_volume pellet_volume2'
symbol_values = 'clad_volume pellet_volume2'
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[gps_fuel]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = fuel
eigenstrain_names = 'axial_relocation'
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[gps_clad]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = clad
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[pulverized]
type = MaterialRealAux
block = fuel
variable = pulverized
property = pulverized
execute_on = 'initial nonlinear'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = layered_average_contact_pressure
[]
[layered_pulverized_fuel_volume]
type = SpatialUserObjectAux
variable = layered_pulverized_fuel_volume
execute_on = timestep_end
block = fuel
user_object = layered_pulverized_fuel_volume
[]
[layered_average_burnup]
type = SpatialUserObjectAux
variable = layered_average_burnup
execute_on = timestep_end
block = fuel
user_object = layered_average_burnup
[]
[layered_mass_fraction]
type = AxialRelocationOutputAux
variable = layered_mass_fraction
execute_on = timestep_end
block = fuel
axial_relocation_user_object = axial_relocation
output_option = MASS_FRACTION
[]
[inner_clad_radius]
type = Radius
boundary = 5
variable = inner_clad_radius
execute_on = 'initial nonlinear'
[]
[outer_fuel_radius]
type = Radius
boundary = 10
variable = outer_fuel_radius
execute_on = 'initial nonlinear'
[]
[layered_maximum_clad_radius]
type = SpatialUserObjectAux
variable = layered_maximum_clad_radius
execute_on = timestep_end
block = fuel
user_object = layered_maximum_clad_radius
[]
[axial_relocation_strain]
type = MaterialRealAux
variable = axial_relocation_strain
block = fuel
property = axial_relocation_strain
execute_on = 'nonlinear timestep_end'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[BCs]
[temperature]
type = DirichletBC
boundary = '10 12 5 2'
variable = temperature
value = 1200
[]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[]
[Materials]
[uo2pulverization]
type = UO2Pulverization
block = fuel
burnup = burnup
layered_average_contact_pressure = layered_average_contact_pressure
temperature = temperature
[]
[fuel_thermal]
type = HeatConductionMaterial
block = fuel
thermal_conductivity = 1.0
specific_heat = 1.0
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = .345
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[axial_relocation_strain]
type = UO2AxialRelocationEigenstrain
block = fuel
axial_relocation_eigenstrain_object = layered_eigenstrain
eigenstrain_name = axial_relocation
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0.3
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = clad
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[layered_eigenstrain]
type = LayeredAxialRelocationEigenstrainUserObject
pellet_outer_radius = outer_fuel_radius
axial_relocation_object = axial_relocation
penetration = penetration
direction = y
execute_on = 'initial timestep_end'
boundary = 10
layer_bounding_block = fuel
num_layers = 5
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = timestep_end
boundary = 10
num_layers = 5
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
variable = pulverized
fuel_pin_geometry = fuel_pin_geometry
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_maximum_clad_radius]
type = LayeredNodalExtremeValue
variable = inner_clad_radius
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[layered_clad_internal_volume]
type = LayeredInternalVolume
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = 0
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[axial_relocation]
type = AxialRelocationUserObject
block = fuel
direction = y
num_layers = 5
layered_average_burnup = layered_average_burnup
layered_pulverized_fuel_volume = layered_pulverized_fuel_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_clad_internal_volume = layered_clad_internal_volume
max_linear_heat_generation_rate = maximum_power
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Postprocessors]
[rod_input_power]
type = FunctionValuePostprocessor
function = power
execute_on = timestep_end
[]
[maximum_power]
type = TimeExtremeValue
postprocessor = rod_input_power
value_type = max
execute_on = timestep_end
[]
[pellet_volume1]
type = LayeredInternalVolumePostprocessor
boundary = 10
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
execute_on = 'initial timestep_end'
[]
[pellet_volume2]
type = LayeredCrumbledInternalVolumePostprocessor
boundary = 10
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
axial_relocation_object = axial_relocation
execute_on = 'initial timestep_end'
[]
[clad_volume]
type = LayeredInternalVolumePostprocessor
boundary = 5
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
execute_on = 'initial timestep_end'
[]
[gas_volume]
type = LayeredInternalVolumePostprocessor
boundary = 9
component = 0
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy
execute_on = 'initial timestep_end'
[]
[gas_volume2]
type = FunctionValuePostprocessor
function = gas_volume2
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-10
nl_abs_tol = 1e-10
l_tol = 1e-5
start_time = 0.0
num_steps = 14
dt = 2
[]
[Outputs]
exodus = true
hide = penetration
[]
(assessment/LWR/validation/LOCA_Studsvik/analysis/rod_191/Studsvik_191_part2.i)
initial_fuel_density = 10431.0
[GlobalParams]
density = ${initial_fuel_density}
initial_porosity = 0.05
order = SECOND
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
volumetric_locking_correction = false
displacements = 'disp_x disp_y'
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
restart_file_base = 'Studsvik_191_part1_checkpoint_cp/LATEST'
[]
[Mesh]
coord_type = RZ
[smeared_mesh]
type = FuelPinMeshGenerator
clad_top_gap_height = 0.021861442
pellet_height = 0.265388558
pellet_quantity = 1
clad_bot_gap_height = 0.01275
pellet_outer_radius = 4.1e-3
clad_gap_width = 80e-6
clad_thickness = 0.57e-3
clad_mesh_density = customize
pellet_mesh_density = customize
nx_c = 5
ny_c = 50
nx_p = 11
ny_p = 60
elem_type = QUAD8
[]
patch_update_strategy = auto
patch_size = 10 # For contact algorithm
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
[]
[]
[AuxVariables]
# Define auxilary variables
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = pellet
[]
[creep_strain_rate]
order = CONSTANT
family = MONOMIAL
[]
[effective_creep_strain]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[hoop_strain]
order = CONSTANT
family = MONOMIAL
[]
[fract_beta_phase] # Fraction of beta phase in Zry
order = CONSTANT
family = MONOMIAL
[]
[scale_thickness] # ZrO2 scale thickness (m)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfract_total] # Current oxigen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfgain_total] # Gained oxygen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[burst_stress] # Hoop stress at cladding burst
order = CONSTANT
family = MONOMIAL
[]
[burst] # Did cladding burst occur?
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = power_history.csv
format = columns
scale_factor = 1
[]
[axial_peaking_factors]
type = ParsedFunction
expression = 1
[]
[pressure_ramp] # reads and interpolates input data defining amplitude curve for fill gas pressure
type = PiecewiseLinear
x = '-200 0 166755600 166842000'
y = '0.006537 1 1 0.006537'
scale_factor = 15.5e6
[]
[clad_surface_temperature]
type = PiecewiseBilinear
axis = 1
data_file = clad_temperature.csv
[]
[forced_times]
type = PiecewiseLinear
data_file = timestep_limiting.csv
scale_factor = 1
format = columns
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[fuel]
block = pellet
add_variables = true
strain = FINITE
eigenstrain_names = 'fuel_thermal_eigenstrain fuel_relocation_eigenstrain fuel_volumetric_eigenstrain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
decomposition_method = EigenSolution
extra_vector_tags = 'ref'
temperature = temperature
[]
[clad]
block = clad
add_variables = true
strain = FINITE
eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_eigenstrain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz creep_strain_zz strain_zz'
extra_vector_tags = 'ref'
decomposition_method = EigenSolution
temperature = temperature
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
[]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
extra_vector_tags = 'ref'
block = pellet
burnup_function = burnup
[]
[]
[Burnup]
[burnup]
block = pellet
rod_ave_lin_pow = power_history # using the power function defined above
axial_power_profile = axial_peaking_factors # using the axial power profile function defined above
num_radial = 80
num_axial = 11
fuel_pin_geometry = fuel_pin_geometry
fuel_volume_ratio = 1.0 # for use with dished pellets (ratio of actual volume to cylinder volume)
order = CONSTANT
family = MONOMIAL
RPF = RPF
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '0.05 0.95 0 0 0 0'
[]
[]
[AuxKernels]
# Define auxilliary kernels for each of the aux variables
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
block = clad
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
factor = 3e13
execute_on = timestep_begin
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
variable = fast_neutron_fluence
block = clad
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = pellet
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[creep_strain_rate]
type = MaterialRealAux
property = creep_rate
variable = creep_strain_rate
block = clad
[]
[effective_creep_strain]
type = MaterialRealAux
property = effective_creep_strain
variable = effective_creep_strain
block = clad
execute_on = timestep_end
[]
[fract_bphase]
type = MaterialRealAux
block = clad
variable = fract_beta_phase
property = fract_beta_phase
[]
[scl_thickness]
type = MaterialRealAux
boundary = 2
variable = scale_thickness
property = oxide_scale_thickness
[]
[ofract_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfract_total
property = current_oxygen_weight_frac_total
[]
[ofgain_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfgain_total
property = oxygen_weight_frac_gained_total
[]
[sigmaburst]
type = MaterialRealAux
boundary = 2
variable = burst_stress
property = burst_stress
[]
[hasburst]
type = MaterialRealAux
boundary = 2
variable = burst
property = failed
execute_on = timestep_end
[]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = 10
execute_on = 'linear'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
formulation = kinematic
model = frictionless
penalty = 1e7
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
initial_moles = initial_moles
gas_released = fission_gas_released
quadrature = true
contact_pressure = contact_pressure
refab_gas_types = He
refab_fractions = 1
refab_time = 166842000
refab_type = 0
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_clad_bottom]
type = DirichletBC
variable = disp_y
boundary = '1'
value = 0.0
[]
[no_y_fuel_bottom]
type = DirichletBC
variable = disp_y
boundary = '1020'
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = '1 2 3'
function = pressure_ramp
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 3.44738e6
startup_time = 0
R = 8.3143
output_initial_moles = initial_moles
temperature = plenum_temp
volume = plenum_volume
material_input = fission_gas_released
output = plenum_pressure
refab_time = 166842000
refab_pressure = 11e6
refab_temperature = 295.0
refab_volume = 1.04e-05
cladding_failure_status = burst
equilibrium_pressure = equilibrium_pressure
additional_volumes = additional_volume
temperature_of_additional_volumes = addition_temperature
[]
[]
[clad_temp]
type = FunctionDirichletBC
function = clad_surface_temperature
variable = temperature
boundary = 2
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = FuelPinGeometry
[]
# [terminator]
# type = Terminator
# expression = 'burst > 0'
# []
[]
[PlenumTemperature]
[plenum_temp]
boundary = 5
inner_surfaces = '5'
outer_surfaces = '10'
temperature = temperature
[]
[]
[CoolantChannel]
[convective_clad_surface] # apply convective boundary to clad outer surface
boundary = 2
variable = temperature
inlet_temperature = 580
inlet_pressure = 15.5e6 # Pa
inlet_massflux = 3800 # kg/m^2-sec
rod_diameter = 0.0095 # m
rod_pitch = 1.26e-2 # m
compute_enthalpy = false
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
output_properties = 'coolant_channel_htype coolant_channel_hmode'
[]
[]
[Materials]
[uo2_pulverization]
type = UO2Pulverization
block = pellet
layered_average_contact_pressure = contact_pressure
temperature = temperature
burnup_function = burnup
output_properties = pulverized
outputs = all
[]
# Define material behavior models and input material property data
[fuel_thermal] # temperature and burnup dependent thermal properties of UO2 (BISON kernel)
type = UO2Thermal
block = pellet
thermal_conductivity_model = NFIR
temperature = temperature
burnup_function = burnup
[]
[fuel_elasticity_tensor]
type = UO2IsotropicDamageElasticityTensor
block = pellet
fragmentation_model = BARANI
rod_ave_lin_pow = power_history
temperature = temperature
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'fuel_creep'
block = pellet
[]
[fuel_creep]
type = UO2CreepUpdate
block = pellet
temperature = temperature
fission_rate = fission_rate
initial_grain_radius = 10.0e-6
oxygen_to_metal_ratio = 2.0
[]
[fuel_relocation]
type = UO2RelocationEigenstrain
block = pellet
burnup_function = burnup
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
fuel_pin_geometry = fuel_pin_geometry
burnup_relocation_stop = 0.024
relocation_activation1 = 5000
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_eigenstrain
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = pellet
thermal_expansion_coeff = 10.0e-6
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_eigenstrain
[]
[fuel_volumetric_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = pellet
temperature = temperature
burnup_function = burnup
initial_fuel_density = 10431.0
eigenstrain_name = fuel_volumetric_eigenstrain
[]
[fission_gas_release]
type = UO2Sifgrs
block = pellet
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
gbs_model = true
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6550.
[]
[clad_thermal]
block = clad
type = ZryThermal
temperature = temperature
[]
[clad_thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
temperature = temperature
[]
[zry_thermal_creep]
type = ZryCreepLOCAUpdate
block = clad
temperature = temperature
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
max_inelastic_increment = 5e-4
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'zry_thermal_creep'
block = clad
[]
[clad_irradiation_growth]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
eigenstrain_name = clad_irradiation_eigenstrain
[]
[clad_phase]
type = ZrPhase
block = clad
temperature = temperature
numerical_method = 2
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
clad_inner_radius = 4.18e-03
clad_outer_radius = 4.75e-03
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = leistikow
[]
[clad_failure_criterion]
type = ZryCladdingFailure
boundary = 2
failure_criterion = overstrain
# effective_strain_rate_creep = creep_strain_rate
# failure_criterion = combined_overstress_and_plastic_instability
hoop_stress = stress_zz
hoop_creep_strain = creep_strain_zz
fraction_beta_phase = fract_beta_phase
fraction_oxygen_gain = oxywtfract_total
temperature = temperature
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density}
[]
[]
[Dampers]
[limitT]
type = MaxIncrement
max_increment = 100
variable = temperature
[]
[limitX]
type = MaxIncrement
max_increment = 1e-5
variable = disp_x
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_rel_tol = 1e-4
nl_abs_tol = 1e-8
# n_startup_steps = 1
end_time = 166843509.6
dtmax = 20
dtmin = 1e-6
[TimeStepper]
type = IterationAdaptiveDT
timestep_limiting_postprocessor = material_timestep
dt = 10
optimal_iterations = 20
iteration_window = 4
linear_iteration_ratio = 100
growth_factor = 2
cutback_factor = .5
timestep_limiting_function = forced_times
force_step_every_function_point = true
[]
[Quadrature]
order = FIFTH
side_order = SEVENTH
[]
[]
[Postprocessors]
[ave_temp_interior]
type = SideAverageValue
boundary = 9
variable = temperature
execute_on = 'initial linear'
[]
[clad_inner_vol]
type = InternalVolume
boundary = 7
#outputs = exodus
execute_on = 'initial timestep_end'
[]
[fission_gas_produced] # fission gas produced (moles)
type = ElementIntegralFisGasGeneratedSifgrs
block = pellet
execute_on = 'linear'
[]
[fission_gas_grain]
type = ElementIntegralFisGasGrainSifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[fission_gas_boundary]
type = ElementIntegralFisGasBoundarySifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[flux_from_clad] # area integrated heat flux from the cladding
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 5
diffusivity = thermal_conductivity
[]
[flux_from_fuel] # area integrated heat flux from the fuel
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 10
diffusivity = thermal_conductivity
[]
[rod_total_power]
type = ElementIntegralPower
variable = temperature
burnup_function = burnup
block = pellet
[]
[rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.1186 # rod height
[]
[max_fuel_temp]
type = NodalExtremeValue
block = pellet
value_type = max
variable = temperature
[]
[max_clad_temp]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
[]
[max_clad_hoop_strain]
type = ElementExtremeValue
block = clad
value_type = max
variable = strain_zz
[]
[material_timestep]
type = MaterialTimeStepPostprocessor
block = clad
[]
[burst]
type = ElementExtremeValue
value_type = max
variable = burst
block = clad
execute_on = 'initial timestep_end'
[]
[volume_pulverized]
type = ElementIntegralMaterialProperty
mat_prop = pulverized
block = pellet
[]
[max_fuel_temp_periphery]
type = NodalExtremeValue
value_type = max
variable = temperature
boundary = 10
[]
[additional_volume]
type = FunctionValuePostprocessor
function = 8.5e-6
execute_on = 'initial linear'
[]
[addition_temperature]
type = FunctionValuePostprocessor
function = 300.0
execute_on = 'initial linear'
[]
[equilibrium_pressure]
type = FunctionValuePostprocessor
function = 101325.0
execute_on = 'initial linear'
[]
[]
[PerformanceMetricOutputs]
[]
[StandardLWRFuelRodOutputs]
temperature = temperature
fuel_pellet_blocks = 3
[]
[Outputs]
perf_graph = true
exodus = true
color = false
csv = true
[chkfile]
type = CSV
execute_on = FINAL
show = 'volume_pulverized'
[]
[]
(assessment/LWR/validation/LOCA_Studsvik/analysis/rod_196/Studsvik_196_part1_1p5d_fr_ffrd.i)
initial_fuel_density = 10431.0
[GlobalParams]
density = ${initial_fuel_density}
initial_porosity = 0.05
order = SECOND
family = LAGRANGE
energy_per_fission = 3.2e-11 # J/fission
volumetric_locking_correction = false
displacements = 'disp_x'
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
slices_per_block = 10
clad_gap_width = 80e-6
plenum_height = 0.0393576
pellet_outer_radius = 3.92e-3
clad_thickness = 0.57e-3
fuel_height = 0.2606424
# nx_c = 2
# nx_p = 11
elem_type = EDGE3
[]
patch_update_strategy = auto
patch_size = 10 # For contact algorithm
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
# Define dependent variables and initial conditions
[temperature]
initial_condition = 295.0 # set initial temp to coolant inlet
[]
[]
[AuxVariables]
# Define auxilary variables
[strain_yy_0]
order = CONSTANT
family = MONOMIAL
[]
[tangential_contact_pressure_aux]
block = fuel
[]
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = fuel
initial_condition = 10e-6
[]
[creep_strain_rate]
order = CONSTANT
family = MONOMIAL
[]
[effective_creep_strain]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
[]
[hoop_strain]
order = CONSTANT
family = MONOMIAL
[]
[fract_beta_phase] # Fraction of beta phase in Zry
order = CONSTANT
family = MONOMIAL
[]
[scale_thickness] # ZrO2 scale thickness (m)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfract_total] # Current oxigen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[oxywtfgain_total] # Gained oxygen weight fraction (oxide+metal) (/)
order = CONSTANT
family = MONOMIAL
[]
[burst_stress] # Hoop stress at cladding burst
order = CONSTANT
family = MONOMIAL
[]
[burst] # Did cladding burst occur?
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = power_history.csv
format = columns
scale_factor = 1
[]
[axial_peaking_factors]
type = ParsedFunction
expression = 1
[]
[pressure_ramp] # reads and interpolates input data defining amplitude curve for fill gas pressure
type = PiecewiseLinear
x = '-200 0 86400 47386400 47472800 47559200 47645600 94945600 95032000'
y = '0.0065371 1 1 1 1 1 1 1 0.0065371'
scale_factor = 15.5e6
[]
[forced_times]
type = PiecewiseLinear
data_file = timestep_limiting.csv
scale_factor = 1
format = columns
[]
[clad_axial_pressure]
type = CladdingAxialPressureFunction
plenum_pressure = plenum_pressure
coolant_pressure = pressure_ramp
coolant_pressure_scaling_factor = 1.0
fuel_pin_geometry = fuel_pin_geometry
[]
[fuel_axial_pressure]
type = ParsedFunction
expression = plenum_pressure
symbol_names = plenum_pressure
symbol_values = plenum_pressure
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[fuel]
block = fuel
add_variables = true
add_scalar_variables = true
strain = FINITE
out_of_plane_strain_name = strain_yy
eigenstrain_names = 'fuel_thermal_eigenstrain fuel_volumetric_eigenstrain axial_relocation_eigenstrain'
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress strain_xx hoop_stress creep_strain_zz strain_zz'
extra_vector_tags = 'ref'
fuel_pin_geometry = fuel_pin_geometry
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
decomposition_method = EigenSolution
temperature = temperature
out_of_plane_pressure_function = fuel_axial_pressure
layer_friction_user_object = 1DFriction_secondary
[]
[clad]
block = clad
add_variables = true
add_scalar_variables = true
strain = FINITE
out_of_plane_strain_name = strain_yy
eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_eigenstrain'
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress strain_xx hoop_stress creep_strain_zz strain_zz'
extra_vector_tags = 'ref'
fuel_pin_geometry = fuel_pin_geometry
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
decomposition_method = EigenSolution
temperature = temperature
out_of_plane_pressure_function = clad_axial_pressure
layer_friction_user_object = 1DFriction_primary
[]
[]
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
extra_vector_tags = 'ref'
block = fuel
burnup_function = burnup
axial_relocation_object = axial_relocation
[]
[]
[Burnup]
[burnup]
block = fuel
rod_ave_lin_pow = power_history # using the power function defined above
axial_power_profile = axial_peaking_factors # using the axial power profile function defined above
num_radial = 80
num_axial = 11
fuel_pin_geometry = fuel_pin_geometry
fuel_volume_ratio = 1.0 # for use with dished fuels (ratio of actual volume to cylinder volume)
order = CONSTANT
family = MONOMIAL
RPF = RPF
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '0.05 0.95 0 0 0 0'
[]
[]
[AuxKernels]
# Define auxilliary kernels for each of the aux variables
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
block = clad
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
factor = 3e13
execute_on = timestep_begin
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
variable = fast_neutron_fluence
block = clad
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = fuel
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[creep_strain_rate]
type = MaterialRealAux
property = creep_rate
variable = creep_strain_rate
block = clad
[]
[effective_creep_strain]
type = MaterialRealAux
property = effective_creep_strain
variable = effective_creep_strain
block = clad
execute_on = timestep_end
[]
[fract_bphase]
type = MaterialRealAux
block = clad
variable = fract_beta_phase
property = fract_beta_phase
[]
[scl_thickness]
type = MaterialRealAux
boundary = 2
variable = scale_thickness
property = oxide_scale_thickness
[]
[ofract_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfract_total
property = current_oxygen_weight_frac_total
[]
[ofgain_total]
type = MaterialRealAux
boundary = 2
variable = oxywtfgain_total
property = oxygen_weight_frac_gained_total
[]
[sigmaburst]
type = MaterialRealAux
boundary = 2
variable = burst_stress
property = burst_stress
[]
[hasburst]
type = MaterialRealAux
boundary = 2
variable = burst
property = failed
execute_on = timestep_end
[]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = 10
execute_on = 'linear'
[]
[tangential_contact_pressure_aux]
type = SpatialUserObjectAux
variable = tangential_contact_pressure_aux
user_object = 1DFriction_secondary
block = fuel
execute_on = 'TIMESTEP_END'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
formulation = kinematic
model = frictionless
penalty = 1e7
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
initial_moles = initial_moles
gas_released = 'fission_gas_released he_prod'
released_gas_types = 'Kr Xe;
He'
released_fractions = '0.153 0.847;
1'
quadrature = true
contact_pressure = contact_pressure
refab_gas_types = He
refab_fractions = 1
refab_time = 95032000
refab_type = 0
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = '2'
function = pressure_ramp
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 3.44738e6
startup_time = 0
R = 8.3143
output_initial_moles = initial_moles
temperature = plenum_temp
volume = plenum_volume
material_input = 'fission_gas_released he_prod'
output = plenum_pressure
refab_time = 95032000
refab_pressure = 8.2e6
refab_temperature = 295.0
refab_volume = 1.04e-05
cladding_failure_status = burst
equilibrium_pressure = equilibrium_pressure
additional_volumes = additional_volume
temperature_of_additional_volumes = addition_temperature
[]
[]
[]
[UserObjects]
[layered_average_hoop_strain]
type = LayeredAverage
block = clad
num_layers = 10
direction = y
variable = strain_zz
[]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 11
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 10
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
# [fuel_pin_geometry]
# type = Layered1DFuelPinGeometry
# mesh_generator = layered1D_mesh
# []
[terminator]
type = Terminator
expression = 'burst > 0'
[]
# We could have two element UOs to obtain interface stress
[1DContactStressOOP_fuel]
type = Layered1DContactInterfaceStress
direction = y
stress_name = stress
num_layers = 10
# If we do not provide the numbers below, it will look at the mesh, in all blocks to set the layer number. Then, it will
# be wrong because the cladding has more height and won't be able to identify layers in the fuel.
direction_min = 0.01306
direction_max = 0.24761028
block = fuel
execute_on = 'LINEAR NONLINEAR'
[]
[1DContactStressOOP_cladding]
type = Layered1DContactInterfaceStress
direction = y
stress_name = stress
num_layers = 10
# If we do not provide the numbers below, it will look at the mesh, in all blocks to set the layer number. Then, it will
# be wrong because the cladding has more height and won't be able to identify layers in the fuel.
direction_min = 0.01306
direction_max = 0.24761028
block = clad
execute_on = 'LINEAR NONLINEAR'
[]
[1DFriction_secondary]
type = Layered1DFrictionalForce
force_postaux = true
contact_pressure = contact_pressure
direction = y
boundary = pellet_outer_radial_surface
num_layers = 10
interface_oop_stress_provider_fuel = 1DContactStressOOP_fuel
interface_oop_stress_provider_cladding = 1DContactStressOOP_cladding
is_secondary_side = true
tangential_pressure = tangential_contact_pressure_aux
friction_coefficient = 0.2
thickness = 0.02606424
penalty_factor = 1.0e13
# If we do not provide the numbers below, it will look at the mesh, in all blocks to set the layer number. Then, it will
# be wrong because the cladding has more height and won't be able to identify layers in the fuel.
direction_min = 0.01306
direction_max = 0.24761028
scalar_var_name_base_fuel = scalar_strain_yy_fuel
scalar_num_variable_fuel = 10
scalar_var_name_base_cladding = scalar_strain_yy_clad
scalar_num_variable_cladding = 10
execute_on = 'LINEAR NONLINEAR'
[]
[1DFriction_primary]
type = Layered1DFrictionalForce
force_postaux = true
contact_pressure = contact_pressure
direction = y
boundary = clad_inside_right
num_layers = 10
# If we do not provide the numbers below, it will look at the mesh, in all blocks to set the layer number. Then, it will
# be wrong because the cladding has more height and won't be able to identify layers in the fuel.
direction_min = 0.0165094
direction_max = 0.24761028
interface_oop_stress_provider_fuel = 1DContactStressOOP_fuel
interface_oop_stress_provider_cladding = 1DContactStressOOP_cladding
is_secondary_side = false
secondary_side_frictional_user_object = 1DFriction_secondary
friction_coefficient = 0.2
thickness = 0.02606424
penalty_factor = 1.0e13
scalar_var_name_base_fuel = scalar_strain_yy_fuel
scalar_num_variable_fuel = 10
scalar_var_name_base_cladding = scalar_strain_yy_clad
scalar_num_variable_cladding = 10
execute_on = 'LINEAR NONLINEAR'
[]
[]
[PlenumTemperature]
[plenum_temp]
boundary = 5
inner_surfaces = '5'
outer_surfaces = '10'
temperature = temperature
[]
[]
[CoolantChannel]
[convective_clad_surface] # apply convective boundary to clad outer surface
boundary = 2
variable = temperature
inlet_temperature = 580
inlet_pressure = 15.5e6 # Pa
inlet_massflux = 3800 # kg/m^2-sec
rod_diameter = 0.00914 # m
rod_pitch = 1.26e-2 # m
compute_enthalpy = false
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
output_properties = 'coolant_channel_htype coolant_channel_hmode'
[]
[]
[Materials]
# [uo2_pulverization]
# type = UO2Pulverization
# block = fuel
# layered_average_contact_pressure = contact_pressure
# temperature = temperature
# burnup_function = burnup
# output_properties = pulverized
# outputs = all
# []
[fuel_dispersal]
type = UO2Dispersal
block = fuel
axial_relocation_object = axial_relocation
layered_average_burnup = layered_average_burnup
layered_average_hoop_strain = layered_average_hoop_strain
dispersal_model = ONE_MM_TWO_PERCENT_STRAIN
[]
# Define material behavior models and input material property data
[fuel_thermal] # temperature and burnup dependent thermal properties of UO2 (BISON kernel)
type = UO2Thermal
block = fuel
thermal_conductivity_model = NFIR
temperature = temperature
burnup_function = burnup
axial_relocation_object = axial_relocation
gap_thermal_conductivity = layered_average_gap_conductivity
[]
[fuel_elasticity_tensor]
type = UO2IsotropicDamageElasticityTensor
block = fuel
fragmentation_model = BARANI
temperature = temperature
rod_ave_lin_pow = power_history
axial_relocation_object = axial_relocation
[]
[fuel_elastic_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'fuel_creep'
block = fuel
[]
[fuel_creep]
type = UO2CreepUpdate
block = fuel
temperature = temperature
fission_rate = fission_rate
initial_grain_radius = 10.0e-6
oxygen_to_metal_ratio = 2.0
[]
# [fuel_relocation]
# type = UO2RelocationEigenstrain
# block = fuel
# burnup_function = burnup
# fuel_pin_geometry = fuel_pin_geometry
# rod_ave_lin_pow = power_history
# axial_power_profile = axial_peaking_factors
# burnup_relocation_stop = 0.024
# relocation_activation1 = 5000
# relocation_model = ESCORE_modified
# eigenstrain_name = fuel_relocation_eigenstrain
# []
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = fuel
thermal_expansion_coeff = 10.0e-6
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_eigenstrain
[]
[fuel_volumetric_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = fuel
temperature = temperature
burnup_function = burnup
initial_fuel_density = 10431.0
eigenstrain_name = fuel_volumetric_eigenstrain
[]
[fission_gas_release]
type = UO2Sifgrs
block = fuel
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
gbs_model = true
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6550.
[]
[clad_thermal]
block = clad
type = ZryThermal
temperature = temperature
[]
[clad_thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
temperature = temperature
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
temperature = temperature
[]
[zry_thermal_creep]
type = ZryCreepLOCAUpdate
block = clad
temperature = temperature
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
max_inelastic_increment = 5e-4
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'zry_thermal_creep'
block = clad
[]
[clad_irradiation_growth]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = zirlo
eigenstrain_name = clad_irradiation_eigenstrain
[]
[clad_phase]
type = ZrPhase
block = clad
temperature = temperature
numerical_method = 2
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
clad_inner_radius = 4.18e-03
clad_outer_radius = 4.75e-03
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = leistikow
[]
[clad_failure_criterion]
type = ZryCladdingFailure
boundary = 2
failure_criterion = overstrain
# effective_strain_rate_creep = creep_strain_rate
# failure_criterion = combined_overstress_and_plastic_instability
hoop_stress = hoop_stress
hoop_creep_strain = creep_strain_zz
fraction_beta_phase = fract_beta_phase
fraction_oxygen_gain = oxywtfract_total
temperature = temperature
[]
[fuel_density]
type = StrainAdjustedDensity
block = fuel
strain_free_density = ${initial_fuel_density}
[]
[]
[VectorPostprocessors]
[cladding_outer]
type = NodalValueSampler
boundary = 5
variable = disp_x
sort_by = y
[]
[]
[AxialRelocation]
[relocation]
rod_ave_lin_pow = power_history
axial_direction = y
fuel_blocks = fuel
clad_blocks = clad
contact_pressure_variable = contact_pressure
out_of_plane_strain_variable = strain_yy_0
penetration_variable = penetration
clad_inner_volume_addition = 0
burnup_variable = burnup
temperature = temperature
axial_relocation_output_options = MASS_FRACTION
mesh_generator = layered1D_mesh
# CHANGE
gap_thickness_threshold = 0.000050
[]
[]
[Postprocessors]
[volume_fuel_dispersed]
type = LayeredElementIntegralMaterialProperty
block = fuel
mat_prop = dispersed
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial timestep_end'
[]
[mass_fuel_dispersed]
type = ParsedPostprocessor
pp_names = volume_fuel_dispersed
expression = '10431 * volume_fuel_dispersed'
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_rel_tol = 1e-4
nl_abs_tol = 1e-8
start_time = -10
n_startup_steps = 1
end_time = 95032000
dtmax = 1e6
dtmin = 1e-6
[TimeStepper]
type = IterationAdaptiveDT
timestep_limiting_postprocessor = material_timestep
dt = 10
optimal_iterations = 20
iteration_window = 4
linear_iteration_ratio = 100
growth_factor = 2
cutback_factor = .5
timestep_limiting_function = forced_times
force_step_every_function_point = true
[]
[Quadrature]
order = FIFTH
side_order = SEVENTH
[]
[]
[Postprocessors]
[ave_temp_interior]
type = SideAverageValue
boundary = 9
variable = temperature
execute_on = 'initial linear'
[]
[clad_inner_vol]
type = InternalVolume
boundary = 7
#outputs = exodus
execute_on = 'initial timestep_end'
[]
[fission_gas_produced] # fission gas produced (moles)
type = ElementIntegralFisGasGeneratedSifgrs
block = fuel
execute_on = 'linear'
[]
[fission_gas_grain]
type = ElementIntegralFisGasGrainSifgrs
block = fuel
outputs = exodus
execute_on = 'linear'
[]
[fission_gas_boundary]
type = ElementIntegralFisGasBoundarySifgrs
block = fuel
outputs = exodus
execute_on = 'linear'
[]
[flux_from_clad] # area integrated heat flux from the cladding
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 5
diffusivity = thermal_conductivity
[]
[flux_from_fuel] # area integrated heat flux from the fuel
type = SideDiffusiveFluxIntegral
variable = temperature
boundary = 10
diffusivity = thermal_conductivity
[]
[rod_total_power]
type = ElementIntegralPower
variable = temperature
burnup_function = burnup
block = fuel
[]
[max_fuel_temp]
type = NodalExtremeValue
block = fuel
value_type = max
variable = temperature
[]
[max_clad_temp]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
[]
[max_clad_hoop_strain]
type = ElementExtremeValue
block = clad
value_type = max
variable = strain_zz
[]
[material_timestep]
type = MaterialTimeStepPostprocessor
block = clad
[]
[burst]
type = ElementExtremeValue
value_type = max
variable = burst
block = clad
execute_on = 'initial timestep_end'
[]
[he_prod]
type = IFBAHeProduction
b10_load = 9.27165354e-5
b10_enrich = 0.5
burnup = average_burnup
zrb2_thick = 10e-6
fuel_out_rad = 9.32e-3
ifba_len = 0.3
u235_enrich = 0.05
[]
[volume_pulverized]
type = ElementIntegralMaterialProperty
mat_prop = pulverized
block = fuel
[]
[max_fuel_temp_periphery]
type = NodalExtremeValue
value_type = max
variable = temperature
boundary = 10
[]
[additional_volume]
type = FunctionValuePostprocessor
function = 8.5e-6
execute_on = 'initial linear'
[]
[addition_temperature]
type = FunctionValuePostprocessor
function = 300.0
execute_on = 'initial linear'
[]
[equilibrium_pressure]
type = FunctionValuePostprocessor
function = 101325.0
execute_on = 'initial linear'
[]
[]
[PerformanceMetricOutputs]
[]
[StandardLWRFuelRodOutputs]
layered = true
fuel_pin_geometry = fuel_pin_geometry
fuel_pellet_blocks = 'fuel'
[]
[Outputs]
perf_graph = true
exodus = true
color = false
csv = true
[checkpoint]
type = Checkpoint
num_files = 2
[]
[chkfile]
type = CSV
execute_on = FINAL
show = 'volume_pulverized'
[]
[]
(test/tests/axial_relocation/packing_fraction.i)
# The purpose of this test is to calculate the effective packing fraction of crumbled
# fuel that is a mixture of larger fragments and smaller pulvers. A linearly varying
# burnup is applied through the radius of 5 axial fuel slices which are modeled with
# cladding of 0.56 mm with an outer fuel radius of 4.5 mm and slice height of 0.1 m.
# Ten radial finite elements are used. The burnup increases linearly from the fuel
# centerline to the fuel surface but is constant in time.
#
# The fuel temperature is held constant at 1200 K. The burnup function applied corresponds
# to the pulverization profile observed at the end of the uo2_pulverization.i test.
# This yielded a layered pulverized fuel volume of 3.24448e-6 m^3 in each layer.
#
# Given this layered average pulverized fuel volume and using the defaults of the
# AxialRelocationUserObject the effective fuel packing fraction can then be calculated
# by solving the following equation using a Newton iteration scheme:
#
# a^2 + 2Gab + b^2 = 1
#
# where a, b, and G are complex functions of the pulver_packing_fraction,
# fragment_packing_fraction, pulver_characteristic_length, calculated fragment
# characteristic length, pulver mass fraction and fragment mass fraction and
# packing fraction of the mixture. These functions are defined in the theory
# documentation of the AxialRelocationUserObject. A maximum power of 15000 W/m
# is applied to determine the fragment characteristic length.
#
# Using an independent calculation in Microsoft Excel for Mac (included in this
# testing directory) the packing fraction is determined to be 0.828912 for the
# Coindreau model, 0.831398 for the Walton model, and 0.833519 for the Barani model.
# In layers that have not gained or lost mass the the packing fraction is
# changed to 1.0. In layers that have lost mass the packing fraction is
# recalculated based upon the current mass. The verification of packing fraction in
# the layers that have lost mass is completed in the volume correction test.
#
# Examining the output of the layered_packing_fraction AuxVariable confirms
# the result.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = disp_x
temperature = temperature
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 5
pellet_outer_radius = 4.5e-3
fuel_height = 0.5
include_plenum = false
nx_p = 10
clad_gap_width = 0.0
pellet_mesh_density = customize
pellet_bottom_coor = 0.0
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[layered_packing_fraction]
order = CONSTANT
family = MONOMIAL
[]
[inner_clad_radius]
order = FIRST
family = LAGRANGE
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 'x*100.0/4.275'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[clad_displacement_function]
type = ParsedFunction
expression = '2.0e-5 * t * sin(pi * y / 0.5)'
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[gps_fuel]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = fuel
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[gps_clad]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = clad
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[pulverized]
type = MaterialRealAux
block = fuel
variable = pulverized
property = pulverized
execute_on = 'initial nonlinear'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = layered_average_contact_pressure
[]
[layered_pulverized_fuel_volume]
type = SpatialUserObjectAux
variable = layered_pulverized_fuel_volume
execute_on = timestep_end
block = fuel
user_object = layered_pulverized_fuel_volume
[]
[layered_average_burnup]
type = SpatialUserObjectAux
variable = layered_average_burnup
execute_on = timestep_end
block = fuel
user_object = layered_average_burnup
[]
[layered_packing_fraction]
type = AxialRelocationOutputAux
variable = layered_packing_fraction
execute_on = timestep_end
block = fuel
axial_relocation_user_object = axial_relocation
output_option = PACKING_FRACTION
[]
[inner_clad_radius]
type = Radius
boundary = 5
variable = inner_clad_radius
execute_on = 'initial nonlinear'
[]
[layered_maximum_clad_radius]
type = SpatialUserObjectAux
variable = layered_maximum_clad_radius
execute_on = timestep_end
block = fuel
user_object = layered_maximum_clad_radius
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[BCs]
[temperature]
type = DirichletBC
boundary = '10 12 5 2'
variable = temperature
value = 1200
[]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[]
[Materials]
[uo2pulverization]
type = UO2Pulverization
block = fuel
burnup = burnup
layered_average_contact_pressure = layered_average_contact_pressure
temperature = temperature
[]
[fuel_thermal]
type = HeatConductionMaterial
block = fuel
thermal_conductivity = 1.0
specific_heat = 1.0
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = .345
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0.3
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = clad
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = 'initial timestep_end'
boundary = 10
num_layers = 5
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
variable = pulverized
fuel_pin_geometry = fuel_pin_geometry
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_maximum_clad_radius]
type = LayeredNodalExtremeValue
variable = inner_clad_radius
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[layered_clad_internal_volume]
type = LayeredInternalVolume
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = 0
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[axial_relocation]
type = AxialRelocationUserObject
block = fuel
direction = y
num_layers = 5
layered_average_burnup = layered_average_burnup
layered_pulverized_fuel_volume = layered_pulverized_fuel_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_clad_internal_volume = layered_clad_internal_volume
max_linear_heat_generation_rate = maximum_power
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Postprocessors]
[rod_input_power]
type = FunctionValuePostprocessor
function = power
execute_on = timestep_end
[]
[maximum_power]
type = TimeExtremeValue
postprocessor = rod_input_power
value_type = max
execute_on = timestep_end
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-8
nl_abs_tol = 1e-10
l_tol = 1e-5
start_time = 0.0
num_steps = 14
dt = 2
[]
[Outputs]
exodus = true
[]
(test/tests/axial_relocation/axial_relocation_eigenstrain.i)
# The purpose of this test is to verify the calculation of the eigenstrain
# applied to the fuel in the event that an axial layer has crumbled (accommodated
# additional mass) during axial relocation in Layered 1D. This eigenstrain is used
# to move the outer radius of the fuel to within a small residual gap size of the
# inside surface of the cladding.
#
# The eigenstrain is calculated as:
#
# epsilon = ln(1.0 + (R_fcurr + g_width - R_fo - g^r) / R_fo)
#
# where R_fcurr is the current outer radius of the pellet in the layer,
# g_width is the current fuel-to-clad gap width, g^r is the residual gap size
# (default of 2.0e-6 m), and R_fo is the fuel radius at the time the fuel begins
# to move to that layer. In this test case since there is no thermal expansion
# or other radial displacements of the fuel, R_fo is the as-fabricated fuel radius.
#
# In this test crumbling of the middle layer of 5 (layer 2 since indexing of
# the layers begins at zero) occurs at the end of the simulation. Since only this
# layer is deemed crumbled it is only this layer to which the eigenstrain is applied.
# At this time the inner cladding radius is calculated to be 4.5e-3 + 0.00052 =
# 5.02e-3 m. Therefore, the axial relocation eigenstrain is calculated to be:
#
# epsilon = ln(1.0 + (5.02e-3 - 4.5e-3 - 2.0e-6) / 4.5e-3)
#
# epsilon = 0.108954
#
# This is verified by checking the value of the axial_relocation_strain column in the
# outputs vector postprocessor.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = disp_x
temperature = temperature
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
elem_type = EDGE2
slices_per_block = 5
pellet_outer_radius = 4.5e-3
fuel_height = 0.5
include_plenum = false
nx_p = 10
clad_gap_width = 0.0
pellet_mesh_density = customize
pellet_bottom_coor = 0.0
[]
patch_update_strategy = auto
[]
[Variables]
[temperature]
order = FIRST
family = LAGRANGE
initial_condition = 1200
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[pulverized]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[layered_pulverized_fuel_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_burnup]
order = CONSTANT
family = MONOMIAL
[]
[layered_mass_fraction]
order = CONSTANT
family = MONOMIAL
[]
[layered_packing_fraction]
order = CONSTANT
family = MONOMIAL
[]
[inner_clad_radius]
order = FIRST
family = LAGRANGE
[]
[layered_maximum_clad_radius]
order = CONSTANT
family = MONOMIAL
[]
[layered_clad_internal_volume]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_gap_conductivity]
order = CONSTANT
family = MONOMIAL
[]
[outer_fuel_radius]
order = FIRST
family = LAGRANGE
[]
[axial_relocation_strain]
order = CONSTANT
family = MONOMIAL
[]
[gap_thermal_conductivity]
order = CONSTANT
family = MONOMIAL
[]
[strain_yy_0]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup_function]
type = ParsedFunction
expression = 'x*100.0/4.275'
[]
[power]
type = PiecewiseLinear
x = '0 100'
y = '15000 15000'
[]
[clad_displacement_function]
type = ParsedFunction
expression = '2.0e-5 * t * sin(pi * y / 0.5)'
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[gps_fuel]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = fuel
eigenstrain_names = 'axial_relocation'
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[gps_clad]
add_scalar_variables = true
add_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = fuel_pin_geometry
strain = finite
block = clad
decomposition_method = EigenSolution
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
variable = burnup
function = burnup_function
execute_on = 'initial linear'
[]
[pulverized]
type = MaterialRealAux
block = fuel
variable = pulverized
property = pulverized
execute_on = 'initial nonlinear'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
variable = layered_average_contact_pressure
execute_on = timestep_end
block = fuel
user_object = layered_average_contact_pressure
[]
[layered_pulverized_fuel_volume]
type = SpatialUserObjectAux
variable = layered_pulverized_fuel_volume
execute_on = timestep_end
block = fuel
user_object = layered_pulverized_fuel_volume
[]
[layered_average_burnup]
type = SpatialUserObjectAux
variable = layered_average_burnup
execute_on = timestep_end
block = fuel
user_object = layered_average_burnup
[]
[layered_mass_fraction]
type = AxialRelocationOutputAux
variable = layered_mass_fraction
execute_on = timestep_end
block = fuel
axial_relocation_user_object = axial_relocation
output_option = MASS_FRACTION
[]
[layered_packing_fraction]
type = AxialRelocationOutputAux
variable = layered_packing_fraction
execute_on = timestep_end
block = fuel
axial_relocation_user_object = axial_relocation
output_option = PACKING_FRACTION
[]
[inner_clad_radius]
type = Radius
boundary = 5
variable = inner_clad_radius
execute_on = 'initial nonlinear'
[]
[outer_fuel_radius]
type = Radius
boundary = 10
variable = outer_fuel_radius
execute_on = 'initial nonlinear'
[]
[layered_maximum_clad_radius]
type = SpatialUserObjectAux
variable = layered_maximum_clad_radius
execute_on = timestep_end
block = fuel
user_object = layered_maximum_clad_radius
[]
[layered_clad_internal_volume]
type = SpatialUserObjectAux
variable = layered_clad_internal_volume
execute_on = timestep_end
block = fuel
user_object = layered_clad_internal_volume
[]
[layered_average_gap_conductivity]
type = SpatialUserObjectAux
variable = layered_average_gap_conductivity
execute_on = timestep_end
block = fuel
user_object = layered_average_gap_conductivity
[]
[axial_relocation_strain]
type = MaterialRealAux
variable = axial_relocation_strain
block = fuel
property = axial_relocation_strain
execute_on = 'nonlinear timestep_end'
[]
[gap_thermal_conductivity]
type = MaterialRealAux
variable = gap_thermal_conductivity
property = gap_conductivity
boundary = 10
execute_on = 'initial linear'
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
penalty = 1e7
formulation = kinematic
model = frictionless
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = 5
secondary = 10
gap_conductivity = 1
[]
[]
[BCs]
[temperature]
type = DirichletBC
boundary = '10 12 5 2'
variable = temperature
value = 1200
[]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[inner_clad_displacement]
type = FunctionDirichletBC
variable = disp_x
boundary = '5'
function = clad_displacement_function
[]
[]
[Materials]
[uo2pulverization]
type = UO2Pulverization
block = fuel
burnup = burnup
layered_average_contact_pressure = layered_average_contact_pressure
temperature = temperature
[]
[fuel_thermal]
type = HeatConductionMaterial
block = fuel
thermal_conductivity = 1.0
specific_heat = 1.0
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.e11
poissons_ratio = .345
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[axial_relocation_strain]
type = UO2AxialRelocationEigenstrain
block = fuel
axial_relocation_eigenstrain_object = layered_eigenstrain
eigenstrain_name = axial_relocation
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = clad
youngs_modulus = 7.5e10
poissons_ratio = 0.3
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = clad
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[]
[UserObjects]
[fuel_pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
execute_on = timestep_end
boundary = 10
num_layers = 5
[]
[layered_average_gap_conductivity]
type = LayeredSideAverage
variable = gap_thermal_conductivity
direction = y
execute_on = timestep_end
boundary = 10
num_layers = 5
[]
[layered_eigenstrain]
type = LayeredAxialRelocationEigenstrainUserObject
pellet_outer_radius = outer_fuel_radius
axial_relocation_object = axial_relocation
penetration = penetration
direction = y
execute_on = 'initial timestep_end'
boundary = 10
layer_bounding_block = fuel
num_layers = 5
[]
[layered_pulverized_fuel_volume]
type = LayeredVariableIntegral
variable = pulverized
fuel_pin_geometry = fuel_pin_geometry
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_average_burnup]
type = LayeredAverage
variable = burnup
direction = y
execute_on = 'initial timestep_end'
block = fuel
num_layers = 5
[]
[layered_maximum_clad_radius]
type = LayeredNodalExtremeValue
variable = inner_clad_radius
direction = y
execute_on = 'initial timestep_end'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[layered_clad_internal_volume]
type = LayeredInternalVolume
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = 0
direction = y
execute_on = 'timestep_begin final'
boundary = 5
layer_bounding_block = fuel
num_layers = 5
[]
[axial_relocation]
type = AxialRelocationUserObject
block = fuel
direction = y
num_layers = 5
layered_average_burnup = layered_average_burnup
layered_pulverized_fuel_volume = layered_pulverized_fuel_volume
layered_maximum_clad_radius = layered_maximum_clad_radius
layered_clad_internal_volume = layered_clad_internal_volume
max_linear_heat_generation_rate = maximum_power
fuel_pin_geometry = fuel_pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Postprocessors]
[rod_input_power]
type = FunctionValuePostprocessor
function = power
execute_on = timestep_end
[]
[maximum_power]
type = TimeExtremeValue
postprocessor = rod_input_power
value_type = max
execute_on = timestep_end
[]
[clad_volume]
type = LayeredInternalVolumePostprocessor
addition = 0
boundary = 5
component = 0
execute_on = 'INITIAL LINEAR'
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy_0
use_displaced_mesh = true
[]
[pellet_volume]
type = LayeredCrumbledInternalVolumePostprocessor
axial_relocation_object = axial_relocation
boundary = 10
component = 0
execute_on = 'INITIAL LINEAR'
fuel_pin_geometry = fuel_pin_geometry
out_of_plane_strain = strain_yy_0
use_displaced_mesh = true
[]
[gas_volume]
type = LinearCombinationPostprocessor
execute_on = 'INITIAL LINEAR'
pp_coefs = '1 1'
pp_names = 'clad_volume pellet_volume'
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart'
petsc_options_value = '101'
line_search = 'none'
l_max_its = 100
nl_max_its = 100
nl_rel_tol = 1e-10
nl_abs_tol = 1e-10
l_tol = 1e-5
start_time = 0.0
num_steps = 14
dt = 2
[]
[VectorPostprocessors]
[vpp]
type = LineValueSampler
start_point = '2.25e-3 0.05 0'
end_point = '2.25e-3 0.45 0'
num_points = 5
sort_by = y
variable = 'axial_relocation_strain layered_packing_fraction'
outputs = results
[]
[]
[Outputs]
hide = penetration
[results]
type = CSV
execute_on = final
create_final_symlink = true
[]
[]