- variableThe name of the variable that this object applies to
C++ Type:AuxVariableName
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this object applies to
Radius
Computes the radial distance from a cylindrical axis.
Description
Two points and define the cylindrical axis. The shortest distance from that axis to a third point is given as
Example Input Syntax
[AuxKernels<<<{"href": "../../syntax/AuxKernels/index.html"}>>>]
[radius]
type = Radius<<<{"description": "Computes the radial distance from a cylindrical axis.", "href": "Radius.html"}>>>
variable<<<{"description": "The name of the variable that this object applies to"}>>> = radius
point1<<<{"description": "Point one for defining an axis."}>>> = '0 0 0'
point2<<<{"description": "Point two for defining an axis."}>>> = '0 1 0'
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
[]
[](test/tests/radius_aux/radius_2d_axisym.i)Input Parameters
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- boundaryThe list of boundaries (ids or names) from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundaries (ids or names) from the mesh where this object applies
- check_boundary_restrictedTrueWhether to check for multiple element sides on the boundary in the case of a boundary restricted, element aux variable. Setting this to false will allow contribution to a single element's elemental value(s) from multiple boundary sides on the same element (example: when the restricted boundary exists on two or more sides of an element, such as at a corner of a mesh
Default:True
C++ Type:bool
Controllable:No
Description:Whether to check for multiple element sides on the boundary in the case of a boundary restricted, element aux variable. Setting this to false will allow contribution to a single element's elemental value(s) from multiple boundary sides on the same element (example: when the restricted boundary exists on two or more sides of an element, such as at a corner of a mesh
- execute_onLINEAR TIMESTEP_ENDThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:LINEAR TIMESTEP_END
C++ Type:ExecFlagEnum
Options:XFEM_MARK, NONE, INITIAL, LINEAR, NONLINEAR_CONVERGENCE, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, PRE_DISPLACE
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- point10 0 0Point one for defining an axis.
Default:0 0 0
C++ Type:libMesh::Point
Controllable:No
Description:Point one for defining an axis.
- point20 1 0Point two for defining an axis.
Default:0 1 0
C++ Type:libMesh::Point
Controllable:No
Description:Point two for defining an axis.
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshTrueWhether 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:True
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Material Property Retrieval Parameters
Input Files
- (test/tests/axial_relocation/mass_relocation_translated.i)
- (test/tests/axial_relocation/crumbled_thermal_conductivity.i)
- (test/tests/axial_relocation/mass_relocation.i)
- (examples/axial_relocation/layered1D/single_balloon.i)
- (test/tests/radius_aux/radius_2d_axisym.i)
- (examples/axial_relocation/layered1D/twin_balloon.i)
- (test/tests/axial_relocation/axial_relocation_volume_correction.i)
- (test/tests/radius_aux/radius_2d_planestrain.i)
- (test/tests/axial_relocation/packing_fraction.i)
- (test/tests/axial_relocation/axial_relocation_eigenstrain.i)
(test/tests/radius_aux/radius_2d_axisym.i)
#This is a test of the Radius auxkernel on an axisymmetric 2D model.
#This test consisists of a mechanical model of a ring subjected to
#an internal pressure that causes a radial expansion of the ring.
#The test verifies that the radius is correctly computed for both the
#undeformed state and the deformed state of the ring. In the undeformed
#state (step 0), the radius is the distance of the nodes from the
#center of rotation. In the deformed state, it is the distance of the
#displaced nodes from the center of rotation.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[mesh]
type = GeneratedMeshGenerator
dim = 2
nx = 2
ny = 2
xmin = 1.0
xmax = 1.1
ymin = 0.0
ymax = 0.1
elem_type = QUAD4
[]
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[]
[AuxVariables]
[radius]
[]
[]
[Functions]
[pressure_history]
type = PiecewiseLinear
xy_data = '0 0
1 10000'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = false
strain = SMALL
incremental = true
[]
[]
[AuxKernels]
[radius]
type = Radius
variable = radius
point1 = '0 0 0'
point2 = '0 1 0'
execute_on = 'initial timestep_end'
[]
[]
[BCs]
[bot]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0
[]
[top]
type = DirichletBC
variable = disp_y
boundary = top
value = 0
[]
[Pressure]
[pressure]
use_displaced_mesh = true
boundary = left
function = pressure_history
[]
[]
[]
[Materials]
[stiffStuff]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
end_time = 1
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
[]
[]
[Outputs]
exodus = true
[console]
type = Console
output_linear = 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
[]
(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/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
[]
[]
(test/tests/radius_aux/radius_2d_axisym.i)
#This is a test of the Radius auxkernel on an axisymmetric 2D model.
#This test consisists of a mechanical model of a ring subjected to
#an internal pressure that causes a radial expansion of the ring.
#The test verifies that the radius is correctly computed for both the
#undeformed state and the deformed state of the ring. In the undeformed
#state (step 0), the radius is the distance of the nodes from the
#center of rotation. In the deformed state, it is the distance of the
#displaced nodes from the center of rotation.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = 'disp_x disp_y'
[]
[Mesh]
coord_type = RZ
[mesh]
type = GeneratedMeshGenerator
dim = 2
nx = 2
ny = 2
xmin = 1.0
xmax = 1.1
ymin = 0.0
ymax = 0.1
elem_type = QUAD4
[]
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[]
[AuxVariables]
[radius]
[]
[]
[Functions]
[pressure_history]
type = PiecewiseLinear
xy_data = '0 0
1 10000'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = false
strain = SMALL
incremental = true
[]
[]
[AuxKernels]
[radius]
type = Radius
variable = radius
point1 = '0 0 0'
point2 = '0 1 0'
execute_on = 'initial timestep_end'
[]
[]
[BCs]
[bot]
type = DirichletBC
variable = disp_y
boundary = bottom
value = 0
[]
[top]
type = DirichletBC
variable = disp_y
boundary = top
value = 0
[]
[Pressure]
[pressure]
use_displaced_mesh = true
boundary = left
function = pressure_history
[]
[]
[]
[Materials]
[stiffStuff]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
end_time = 1
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
[]
[]
[Outputs]
exodus = true
[console]
type = Console
output_linear = 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
[]
[]
(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
[]
(test/tests/radius_aux/radius_2d_planestrain.i)
#This is a test of the Radius auxkernel on a 2D plane strain model.
#This test consisists of a mechanical model of a ring subjected to
#an internal pressure that causes a radial expansion of the ring.
#The test verifies that the radius is correctly computed for both the
#undeformed state and the deformed state of the ring. In the undeformed
#state (step 0), the radius is the distance of the nodes from the
#center of rotation. In the deformed state, it is the distance of the
#displaced nodes from the center of rotation.
[GlobalParams]
order = FIRST
family = LAGRANGE
displacements = 'disp_x disp_y'
[]
[Mesh]
[mesh]
type = FileMeshGenerator
file = quarter_circ_2d.e
[]
[]
[Variables]
[disp_x]
[]
[disp_y]
[]
[]
[AuxVariables]
[radius]
[]
[]
[Functions]
[pressure_history]
type = PiecewiseLinear
xy_data = '0 0
1 10000'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = false
strain = FINITE
[]
[]
[AuxKernels]
[radius]
type = Radius
variable = radius
point1 = '0 0 0'
point2 = '0 0 1'
execute_on = 'initial timestep_end'
[]
[]
[BCs]
[bot]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0
[]
[left]
type = DirichletBC
variable = disp_x
boundary = 2
value = 0
[]
[Pressure]
[pressure]
boundary = 3
function = pressure_history
[]
[]
[]
[Materials]
[stiffStuff]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e6
poissons_ratio = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[]
[Executioner]
type = Transient
solve_type = PJFNK
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
nl_rel_tol = 1e-12
end_time = 1
[TimeStepper]
type = IterationAdaptiveDT
dt = 1
[]
[]
[Outputs]
exodus = true
[console]
type = Console
output_linear = true
[]
[]
(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
[]
[]