- fuel_pin_geometryName of Layered1DFuelPinGeometry or Layered2DFuelPinGeometry UserObject
C++ Type:UserObjectName
Controllable:No
Description:Name of Layered1DFuelPinGeometry or Layered2DFuelPinGeometry UserObject
LayeredElongation
Computes the fuel or cladding elongation for Layered1D or Layered2D geometries.
Description
LayeredElongation computes the total axial elongation of either the fuel or cladding in Layered1D or Layered2D geometries. The scalar out-of-plane strains are used to determine the current fuel or cladding height and subtracts that from the initial height. This object requires two UserObjects that extracts the strain_yy in each layer. These UserObjects are automatically created if the LayeredPlenumTemperatureAction is included in the analysis. Otherwise, UserObjects of the LayeredAverage type are required using the same number of layers that are in the mesh for the fuel and cladding, respectively. The slice_height for each layer fetched from the Layered1DFuelPinGeometry or Layered2DFuelPinGeometry object is also required.
Example Input Syntax
[Postprocessors<<<{"href": "../../syntax/Postprocessors/index.html"}>>>]
[fuel_elongation]
type = LayeredElongation<<<{"description": "Computes the fuel or cladding elongation for Layered1D or Layered2D geometries.", "href": "LayeredElongation.html"}>>>
fuel_pin_geometry<<<{"description": "Name of Layered1DFuelPinGeometry or Layered2DFuelPinGeometry UserObject"}>>> = pin_geometry
out_of_plane_strain_fuel<<<{"description": "Name of the UserObject that contains the layered average out_of_plane_strain in the fuel."}>>> = fuel_strain_yy
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/layered_1D/elongation.i)Input Parameters
- omit_plenum_layerFalseOmit last layer of the cladding block. This option is added for debugging purposes, particularly when analyzing the effect of friction on rod elongation
Default:False
C++ Type:bool
Controllable:No
Description:Omit last layer of the cladding block. This option is added for debugging purposes, particularly when analyzing the effect of friction on rod elongation
- out_of_plane_strain_claddingName of the UserObject that contains the layered average out_of_plane_strain in the cladding.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that contains the layered average out_of_plane_strain in the cladding.
- out_of_plane_strain_fuelName of the UserObject that contains the layered average out_of_plane_strain in the fuel.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that contains the layered average out_of_plane_strain in the fuel.
Optional Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- execute_onTIMESTEP_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: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, TRANSFER
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.
- execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
Default:0
C++ Type:int
Controllable:No
Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
Execution Scheduling 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.
- outputsVector of output names where you would like to restrict the output of variables(s) associated with this object
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
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Unit:(no unit assumed)
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Material Property Retrieval Parameters
Input Files
(test/tests/layered_1D/elongation.i)
#
# This test checks the LayeredElongation Postprocessor.
# The mesh is one line of fuel and two of cladding. The dimensions are typical
# of a PWR fuel pellet and clad, with the exception of the plenum.
#
# A temperature ramp over 700 K from 300 to 1000 K is applied to both the fuel
# and cladding, which induces a thermal expansion strain. The instantaneous
# coefficients of thermal expansion are set to 10e-6 and 5e-6 for the fuel and
# cladding, respectively.
#
# The thermal expansion strain, which is the only out-of-plane strain induced
# is equal to the elongation of the respective fuel rod components.
#
# Therefore, for the fuel:
# elongation = 10e-6 * 700 * 10e-3 = 7e-5 m (70 microns)
#
# And for the cladding:
# elongation = 5e-6 * 700 * 10.1e-3 = 3.535e-5 m (35.35 microns)
#
# These analytical answers are correctly calculated by Bison as seen in the
# postprocessor values.
[GlobalParams]
order = SECOND
family = LAGRANGE
displacements = disp_x
[]
[Mesh]
coord_type = RZ
use_displaced_mesh = false
[layered1D_mesh]
type = Layered1DMeshGenerator
fuel_height = 10e-3
plenum_height = 0.1e-3 # 1 / pi
slices_per_block = 1
pellet_outer_radius = 4.1e-3
clad_gap_width = 80e-6
clad_thickness = 0.57e-3
pellet_bottom_coor = 0
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 5
nx_c = 3
[]
[]
[Variables]
[disp_x]
[]
[]
[AuxVariables]
[disp_y]
[]
[temperature]
[]
[]
[Functions]
[temperature_function]
type = PiecewiseLinear
x = '0 2'
y = '300 1000'
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[fuel]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
temperature = temperature
fuel_pin_geometry = pin_geometry
eigenstrain_names = 'fuel_thermal_strain'
block = fuel
strain = small
mesh_generator = layered1D_mesh
[]
[clad]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
temperature = temperature
fuel_pin_geometry = pin_geometry
eigenstrain_names = 'clad_thermal_strain'
block = clad
strain = small
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[temperature]
type = FunctionAux
function = temperature_function
variable = temperature
[]
[]
[BCs]
[disp_x]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 10
poissons_ratio = 0
[]
[stress]
type = ComputeStrainIncrementBasedStress
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 10e-6
temperature = temperature
stress_free_temperature = 300
block = fuel
eigenstrain_name = fuel_thermal_strain
[]
[clad_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 5e-6
temperature = temperature
stress_free_temperature = 300
block = clad
eigenstrain_name = clad_thermal_strain
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 2
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 1
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[]
[Postprocessors]
[fuel_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
execute_on = 'initial timestep_end'
[]
[clad_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_cladding = cladding_strain_yy
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
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_abs_tol = 1e-10
end_time = 2
dt = 1
[]
[Outputs]
csv = true
[]
(test/tests/layered_1D/elongation_friction_rr.i)
#
# This test checks friction is applied to a one-dimensional,
# layered simulations. In this simulation, fuel and cladding
# arrive at a stick state, which constraints out of plane strain
# increments in both blocks to be equal.
[GlobalParams]
order = SECOND
family = LAGRANGE
displacements = disp_x
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
fuel_height = 10e-3
plenum_height = 0.1e-3 # 1 / pi
slices_per_block = 1
pellet_outer_radius = 4.1e-3
clad_gap_width = 80e-6
clad_thickness = 0.57e-3
pellet_bottom_coor = 0
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 5
nx_c = 3
[]
[]
[Variables]
[disp_x]
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[temperature]
[]
[tangential_contact_pressure_aux]
block = fuel
[]
[]
[Functions]
[temperature_function]
type = PiecewiseLinear
x = '0 8'
y = '300 2000'
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[fuel]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
temperature = temperature
fuel_pin_geometry = pin_geometry
eigenstrain_names = 'fuel_thermal_strain'
block = fuel
strain = finite
group_scalar_vars_in_reference_residual = true
extra_vector_tags = 'ref'
mesh_generator = layered1D_mesh
layer_friction_user_object = 1DFriction_secondary
[]
[clad]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
temperature = temperature
fuel_pin_geometry = pin_geometry
eigenstrain_names = 'clad_thermal_strain'
block = clad
strain = finite
mesh_generator = layered1D_mesh
layer_friction_user_object = 1DFriction_primary
[]
[]
[]
[]
[AuxKernels]
[temperature]
type = FunctionAux
function = temperature_function
variable = temperature
[]
[tangential_contact_pressure_aux]
type = SpatialUserObjectAux
variable = tangential_contact_pressure_aux
user_object = 1DFriction_secondary
block = fuel
execute_on = 'LINEAR NONLINEAR TIMESTEP_END'
[]
[]
[BCs]
[disp_x]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 200e9
poissons_ratio = 0
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 40e-6
temperature = temperature
stress_free_temperature = 300
block = fuel
eigenstrain_name = fuel_thermal_strain
[]
[clad_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 3e-6
temperature = temperature
stress_free_temperature = 300
block = clad
eigenstrain_name = clad_thermal_strain
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = clad_inside_right
secondary = pellet_outer_radial_surface
formulation = kinematic
model = frictionless
penalty = 1e7
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 2
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 1
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[1DContactStressOOP_fuel]
type = Layered1DContactInterfaceStress
direction = y
stress_name = stress
num_layers = 1
# 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.0045
direction_max = 0.0055
block = fuel
execute_on = 'LINEAR NONLINEAR'
[]
[1DContactStressOOP_cladding]
type = Layered1DContactInterfaceStress
direction = y
stress_name = stress
num_layers = 1
# 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.0045
direction_max = 0.0055
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 = 1
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.01
thickness = 0.01
# 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.0045
direction_max = 0.0055
scalar_var_name_base_fuel = scalar_strain_yy_fuel
scalar_num_variable_fuel = 1
scalar_var_name_base_cladding = scalar_strain_yy_clad
scalar_num_variable_cladding = 1
execute_on = 'LINEAR NONLINEAR'
[]
[1DFriction_primary]
type = Layered1DFrictionalForce
force_postaux = true
contact_pressure = contact_pressure
direction = y
boundary = clad_inside_right
num_layers = 1
# 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.0045
direction_max = 0.0055
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.01
thickness = 0.01
scalar_var_name_base_fuel = scalar_strain_yy_fuel
scalar_num_variable_fuel = 1
scalar_var_name_base_cladding = scalar_strain_yy_clad
scalar_num_variable_cladding = 1
execute_on = 'LINEAR NONLINEAR'
[]
[]
[Postprocessors]
[fuel_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
execute_on = 'initial timestep_end'
[]
[clad_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_cladding = cladding_strain_yy
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
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_abs_tol = 1e-5
end_time = 8
dt = 1
[]
[Outputs]
csv = true
exodus = true
[]
(test/tests/layered_1D/elongation_friction.i)
#
# This test checks friction is applied to a one-dimensional,
# layered simulation. In this simulation, fuel and cladding
# arrive at a stick state, which constraints out of plane strain
# increments in both blocks to be equal.
[GlobalParams]
order = SECOND
family = LAGRANGE
displacements = disp_x
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
fuel_height = 10e-3
plenum_height = 0.1e-3 # 1 / pi
slices_per_block = 1
pellet_outer_radius = 4.1e-3
clad_gap_width = 80e-6
clad_thickness = 0.57e-3
pellet_bottom_coor = 0
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 5
nx_c = 3
[]
[]
[Variables]
[disp_x]
[]
[]
[AuxVariables]
[disp_y]
[]
[disp_z]
[]
[temperature]
[]
[tangential_contact_pressure_aux]
block = fuel
[]
[]
[Functions]
[temperature_function]
type = PiecewiseLinear
x = '0 8'
y = '300 2000'
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[fuel]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
temperature = temperature
fuel_pin_geometry = pin_geometry
eigenstrain_names = 'fuel_thermal_strain'
block = fuel
strain = finite
mesh_generator = layered1D_mesh
layer_friction_user_object = 1DFriction_secondary
[]
[clad]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
temperature = temperature
fuel_pin_geometry = pin_geometry
eigenstrain_names = 'clad_thermal_strain'
block = clad
strain = finite
mesh_generator = layered1D_mesh
layer_friction_user_object = 1DFriction_primary
[]
[]
[]
[]
[AuxKernels]
[temperature]
type = FunctionAux
function = temperature_function
variable = temperature
[]
[tangential_contact_pressure_aux]
type = SpatialUserObjectAux
variable = tangential_contact_pressure_aux
user_object = 1DFriction_secondary
block = fuel
execute_on = 'TIMESTEP_END'
[]
[]
[BCs]
[disp_x]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 200e9
poissons_ratio = 0
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 40e-6
temperature = temperature
stress_free_temperature = 300
block = fuel
eigenstrain_name = fuel_thermal_strain
[]
[clad_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 3e-6
temperature = temperature
stress_free_temperature = 300
block = clad
eigenstrain_name = clad_thermal_strain
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = clad_inside_right
secondary = pellet_outer_radial_surface
formulation = kinematic
model = frictionless
penalty = 1e7
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 2
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 1
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[1DContactStressOOP_fuel]
type = Layered1DContactInterfaceStress
direction = y
stress_name = stress
num_layers = 1
block = fuel
direction_min = 0.0045
direction_max = 0.0055
execute_on = 'LINEAR NONLINEAR'
[]
[1DContactStressOOP_cladding]
type = Layered1DContactInterfaceStress
direction = y
stress_name = stress
num_layers = 1
block = clad
direction_min = 0.0045
direction_max = 0.0055
execute_on = 'LINEAR NONLINEAR'
[]
[1DFriction_secondary]
type = Layered1DFrictionalForce
# Search for input files
force_postaux = true
contact_pressure = contact_pressure
direction = y
boundary = pellet_outer_radial_surface
num_layers = 1
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.6
thickness = 0.01
# 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.0045
direction_max = 0.0055
scalar_var_name_base_fuel = scalar_strain_yy_fuel
scalar_num_variable_fuel = 1
scalar_var_name_base_cladding = scalar_strain_yy_clad
scalar_num_variable_cladding = 1
execute_on = 'LINEAR NONLINEAR'
[]
[1DFriction_primary]
type = Layered1DFrictionalForce
# Search for input files
force_postaux = true
contact_pressure = contact_pressure
direction = y
boundary = clad_inside_right
num_layers = 1
direction_min = 0.0045
direction_max = 0.0055
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.6
thickness = 0.01
scalar_var_name_base_fuel = scalar_strain_yy_fuel
scalar_num_variable_fuel = 1
scalar_var_name_base_cladding = scalar_strain_yy_clad
scalar_num_variable_cladding = 1
execute_on = 'LINEAR NONLINEAR'
[]
[]
[Postprocessors]
[fuel_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
execute_on = 'initial timestep_end'
[]
[clad_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_cladding = cladding_strain_yy
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
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_abs_tol = 1e-10
end_time = 8
dt = 1
[]
[Outputs]
csv = true
exodus = true
[]
(test/tests/layered_1D/elongation.i)
#
# This test checks the LayeredElongation Postprocessor.
# The mesh is one line of fuel and two of cladding. The dimensions are typical
# of a PWR fuel pellet and clad, with the exception of the plenum.
#
# A temperature ramp over 700 K from 300 to 1000 K is applied to both the fuel
# and cladding, which induces a thermal expansion strain. The instantaneous
# coefficients of thermal expansion are set to 10e-6 and 5e-6 for the fuel and
# cladding, respectively.
#
# The thermal expansion strain, which is the only out-of-plane strain induced
# is equal to the elongation of the respective fuel rod components.
#
# Therefore, for the fuel:
# elongation = 10e-6 * 700 * 10e-3 = 7e-5 m (70 microns)
#
# And for the cladding:
# elongation = 5e-6 * 700 * 10.1e-3 = 3.535e-5 m (35.35 microns)
#
# These analytical answers are correctly calculated by Bison as seen in the
# postprocessor values.
[GlobalParams]
order = SECOND
family = LAGRANGE
displacements = disp_x
[]
[Mesh]
coord_type = RZ
use_displaced_mesh = false
[layered1D_mesh]
type = Layered1DMeshGenerator
fuel_height = 10e-3
plenum_height = 0.1e-3 # 1 / pi
slices_per_block = 1
pellet_outer_radius = 4.1e-3
clad_gap_width = 80e-6
clad_thickness = 0.57e-3
pellet_bottom_coor = 0
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 5
nx_c = 3
[]
[]
[Variables]
[disp_x]
[]
[]
[AuxVariables]
[disp_y]
[]
[temperature]
[]
[]
[Functions]
[temperature_function]
type = PiecewiseLinear
x = '0 2'
y = '300 1000'
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[fuel]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
temperature = temperature
fuel_pin_geometry = pin_geometry
eigenstrain_names = 'fuel_thermal_strain'
block = fuel
strain = small
mesh_generator = layered1D_mesh
[]
[clad]
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
temperature = temperature
fuel_pin_geometry = pin_geometry
eigenstrain_names = 'clad_thermal_strain'
block = clad
strain = small
mesh_generator = layered1D_mesh
[]
[]
[]
[]
[AuxKernels]
[temperature]
type = FunctionAux
function = temperature_function
variable = temperature
[]
[]
[BCs]
[disp_x]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 10
poissons_ratio = 0
[]
[stress]
type = ComputeStrainIncrementBasedStress
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 10e-6
temperature = temperature
stress_free_temperature = 300
block = fuel
eigenstrain_name = fuel_thermal_strain
[]
[clad_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
thermal_expansion_coeff = 5e-6
temperature = temperature
stress_free_temperature = 300
block = clad
eigenstrain_name = clad_thermal_strain
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[cladding_strain_yy]
type = LayeredAverage
block = clad
num_layers = 2
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[fuel_strain_yy]
type = LayeredAverage
block = fuel
num_layers = 1
direction = y
variable = strain_yy
execute_on = 'initial timestep_end'
[]
[]
[Postprocessors]
[fuel_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
execute_on = 'initial timestep_end'
[]
[clad_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_cladding = cladding_strain_yy
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
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_abs_tol = 1e-10
end_time = 2
dt = 1
[]
[Outputs]
csv = true
[]
(examples/1.5D_rodlet_10pellets/1_5D_friction.i)
# Model is of a 10 pellet stack of fuel modeled in 1.5d
pressure_test = 2.0e6
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
displacements = disp_x
temperature = temperature
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
# Specify coordinate system type
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
slices_per_block = 10
clad_gap_width = 8.0e-5
clad_thickness = 0.00056
fuel_height = 0.1186
plenum_height = 0.027
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
[]
[AuxVariables]
[tangential_contact_pressure_aux]
block = fuel
[]
[]
[AuxKernels]
[tangential_contact_pressure_aux]
type = SpatialUserObjectAux
variable = tangential_contact_pressure_aux
user_object = 1DFriction_secondary
block = fuel
execute_on = 'TIMESTEP_END'
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[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'
[]
# 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.00917
direction_max = 0.11591
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.00917
direction_max = 0.11591
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.01
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.00917
direction_max = 0.11591
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.00917
direction_max = 0.11591
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.01
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'
[]
[]
[Variables]
[temperature]
initial_condition = 580.0 # set initial temperature to coolant inlet
[]
[]
[AuxVariables]
[disp_y] ## Required for easier visualization in Paraview
[]
[disp_z] ## Required for easier visualization in Paraview
[]
[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
block = clad
[]
[creep_strain]
order = CONSTANT
family = MONOMIAL
block = clad
[]
[solid_swell]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[gas_swell]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[densification]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[volumetric_swelling_strain]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[relocation]
order = CONSTANT
family = MONOMIAL
block = fuel
[]
[discrete_contact_pressure]
order = FIRST
family = LAGRANGE
block = fuel
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear # reads and interpolates an input file containing rod average linear power vs time
data_file = powerhistory.csv
scale_factor = 1
[]
[axial_peaking_factors] # reads and interpolates an input file containing the axial power profile vs time
type = PiecewiseBilinear
data_file = peakingfactors.csv
scale_factor = 1
axis = 1 # (0,1,2) => (x,y,z)
[]
[pressure_ramp] # reads and interpolates input data defining amplitude curve for fill gas pressure
type = PiecewiseLinear
x = '-200 0'
y = '0 1'
[]
[clad_axial_pressure]
type = CladdingAxialPressureFunction
plenum_pressure = plenum_pressure
coolant_pressure = pressure_ramp
coolant_pressure_scaling_factor = 15.5e6
fuel_pin_geometry = pin_geometry
[]
[fuel_axial_pressure]
type = ParsedFunction
expression = plenum_pressure
symbol_names = plenum_pressure
symbol_values = plenum_pressure
[]
[]
[Kernels]
[heat] # gradient term in heat conduction equation
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_ie] # time term in heat conduction equation
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
[]
[heat_source] # source term in heat conduction equation
type = NeutronHeatSource
variable = temperature
block = fuel # fission rate applied to the fuel (block 2) only
burnup_function = burnup
extra_vector_tags = 'ref'
[]
[]
[Physics]
[SolidMechanics]
[Layered1D]
[fuel]
block = fuel
add_variables = true
strain = FINITE
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
out_of_plane_pressure_function = fuel_axial_pressure
eigenstrain_names = 'fuelthermal_strain swelling_strain fuel_relocation_strain'
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress strain_xx'
extra_vector_tags = 'ref'
outputs = none
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
layer_friction_user_object = 1DFriction_secondary
[]
[clad]
block = clad
add_variables = true
strain = FINITE
add_scalar_variables = true
out_of_plane_strain_name = strain_yy
fuel_pin_geometry = pin_geometry
out_of_plane_pressure_function = clad_axial_pressure
eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_strain'
generate_output = 'stress_xx stress_yy stress_zz vonmises_stress strain_xx'
extra_vector_tags = 'ref'
outputs = none
group_scalar_vars_in_reference_residual = true
mesh_generator = layered1D_mesh
layer_friction_user_object = 1DFriction_primary
[]
[]
[]
[]
[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
order = CONSTANT
family = MONOMIAL
fuel_pin_geometry = pin_geometry
fuel_volume_ratio = 1.0 # for use with dished pellets (ratio of actual volume to cylinder volume)
RPF = RPF
isotopes = 'U235 U238'
isotope_fractions = '0.05 0.95'
[]
[]
[AuxKernels]
[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]
type = MaterialRealAux
property = effective_creep_strain
variable = creep_strain
block = clad
execute_on = timestep_end
[]
[creep_strain_rate]
type = MaterialRealAux
property = creep_rate
variable = creep_strain_rate
block = clad
[]
[solid_swell]
type = MaterialRealAux
variable = solid_swell
property = solid_swelling
execute_on = timestep_end
block = fuel
[]
[gas_swell]
type = MaterialRealAux
variable = gas_swell
property = gas_swelling
execute_on = timestep_end
block = fuel
[]
[densification]
type = MaterialRealAux
variable = densification
property = densification
execute_on = timestep_end
block = fuel
[]
[volumetric_swelling_strain]
type = MaterialRealAux
variable = volumetric_swelling_strain
property = volumetric_swelling_strain
execute_on = timestep_end
block = fuel
[]
[relocation_strain]
type = MaterialRealAux
variable = relocation
property = relocation_strain
execute_on = timestep_end
block = fuel
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = clad_inside_right
secondary = pellet_outer_radial_surface
formulation = kinematic
model = frictionless
penalty = 1e7
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temperature
primary = clad_inside_right
secondary = pellet_outer_radial_surface
initial_moles = initial_moles # coupling to a postprocessor which supplies the initial plenum/gap gas mass
gas_released = fis_gas_released # coupling to a postprocessor which supplies the fission gas addition
contact_pressure = contact_pressure
quadrature = true
[]
[]
[BCs]
[no_x_all] # pin pellets and clad along axis of symmetry (y)
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[Pressure] # apply coolant pressure on clad outer walls
[coolantPressure]
boundary = 2
function = pressure_ramp # use the pressure_ramp function defined above
factor = 15.5e6
[]
[]
[PlenumPressure] # apply plenum pressure on clad inner walls and pellet surfaces
[plenumPressure]
boundary = 9
initial_pressure = ${pressure_test}
startup_time = 0
R = 8.314
output_initial_moles = initial_moles # coupling to post processor to get initial fill gas mass
temperature = ave_temp_interior # coupling to post processor to get gas temperature approximation
volume = gas_volume # coupling to post processor to get gas volume
material_input = fis_gas_released # coupling to post processor to get fission gas added
output = plenum_pressure # coupling to post processor to output plenum/gap pressure
[]
[]
[]
[CoolantChannel]
[convective_clad_surface] # apply convective boundary to clad outer surface
variable = temperature
boundary = 2
inlet_temperature = 580 # K
inlet_pressure = 15.5e6 # Pa
inlet_massflux = 3800 # kg/m^2-sec
rod_diameter = 0.948e-2 # m
rod_pitch = 1.26e-2 # m
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
[]
[]
[Materials]
[fuel_thermal]
type = UO2Thermal
block = fuel
thermal_conductivity_model = NFIR
temperature = temperature
burnup_function = burnup
[]
[fuel_density]
type = StrainAdjustedDensity
block = fuel
strain_free_density = ${initial_fuel_density}
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = fuel
youngs_modulus = 2.0e11
poissons_ratio = 0.345
[]
[fuel_stress]
type = ComputeFiniteStrainElasticStress
block = fuel
[]
[fuel_thermal_strain]
type = ComputeThermalExpansionEigenstrain
block = fuel
thermal_expansion_coeff = 10.0e-6
stress_free_temperature = 295.0
eigenstrain_name = fuelthermal_strain
[]
[fuel_swelling]
type = UO2VolumetricSwellingEigenstrain
block = fuel
gas_swelling_model_type = SIFGRS
burnup_function = burnup
initial_fuel_density = 10431.0
eigenstrain_name = swelling_strain
[]
[fuel_relocation]
type = UO2RelocationEigenstrain
block = fuel
burnup_function = burnup
fuel_pin_geometry = pin_geometry
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
relocation_activation1 = 5000.0
burnup_relocation_stop = 0.024
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_strain
[]
[fission_gas_release]
type = UO2Sifgrs
block = fuel
temperature = temperature
burnup_function = burnup
gbs_model = true
grain_radius = grain_radius
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6551.0
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
[]
[clad_stress]
type = ComputeMultipleInelasticStress
block = clad
tangent_operator = elastic
inelastic_models = 'zrycreep'
[]
[zrycreep]
type = ZryCreepLimbackHoppeUpdate
block = clad
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
zircaloy_material_type = stress_relief_annealed
[]
[clad_thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[clad_irradiation_swelling]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = stress_relief_annealed
eigenstrain_name = clad_irradiation_strain
[]
[]
[Dampers]
[limitT]
type = MaxIncrement
max_increment = 100.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 = 25
nl_rel_tol = 1e-5
nl_abs_tol = 1e-7
start_time = -200
n_startup_steps = 1
end_time = 8.0e7
dtmax = 2e6
dtmin = 1
[TimeStepper]
type = IterationAdaptiveDT
dt = 2e2
optimal_iterations = 18
iteration_window = 2
growth_factor = 2
cutback_factor = .5
[]
[]
[Postprocessors]
### Nodal contact pressure
[top_contact_pressure_fuel]
type = NodalVariableValue
variable = discrete_contact_pressure
nodeid = 361 # mesh dependent, at (0.0041, 0.09219)
[]
[center_contact_pressure_fuel]
type = NodalVariableValue
variable = discrete_contact_pressure
nodeid = 262 # mesh dependent, at (0.0041, 0.05661)
[]
[bottom_contact_pressure_fuel]
type = NodalVariableValue
variable = discrete_contact_pressure
nodeid = 163 # mesh dependent, at (0.0041, 0.02103)
[]
[ave_temp_interior] # average temperature of the cladding interior and all pellet exteriors
type = LayeredSideAverageValuePostprocessor
boundary = 9
variable = temperature
execute_on = 'initial linear'
fuel_pin_geometry = pin_geometry
[]
[clad_inner_vol] # volume inside of cladding
type = LayeredInternalVolumePostprocessor
boundary = 7
component = 0
fuel_pin_geometry = pin_geometry
out_of_plane_strain = strain_yy
execute_on = 'initial linear'
#outputs = exodus
[]
[pellet_volume] # fuel pellet total volume
type = LayeredInternalVolumePostprocessor
boundary = 8
# scale_factor = -1
component = 0
fuel_pin_geometry = pin_geometry
out_of_plane_strain = strain_yy
execute_on = 'initial linear'
#outputs = exodus
[]
[fis_gas_produced] # fission gas produced (moles)
type = LayeredElementIntegralFisGasGeneratedSifgrsPostprocessor
block = fuel
fuel_pin_geometry = pin_geometry
[]
[fis_gas_released] # fission gas released to plenum (moles)
type = LayeredElementIntegralFisGasReleasedSifgrsPostprocessor
block = fuel
fuel_pin_geometry = pin_geometry
[]
[fis_gas_grain]
type = LayeredElementIntegralFisGasGrainSifgrsPostprocessor
block = fuel
outputs = exodus
fuel_pin_geometry = pin_geometry
[]
[fis_gas_boundary]
type = LayeredElementIntegralFisGasBoundarySifgrsPostprocessor
block = fuel
outputs = exodus
fuel_pin_geometry = pin_geometry
[]
[fission_gas_release]
type = FGRPercent
fission_gas_released = fis_gas_released
fission_gas_generated = fis_gas_produced
[]
[gas_volume]
type = LayeredInternalVolumePostprocessor
boundary = 9
execute_on = 'initial linear'
component = 0
out_of_plane_strain = strain_yy
fuel_pin_geometry = pin_geometry
[]
[flux_from_clad] # area integrated heat flux from the cladding
type = LayeredSideFluxIntegralPostprocessor
variable = temperature
boundary = 5
diffusivity = thermal_conductivity
fuel_pin_geometry = pin_geometry
[]
[flux_from_fuel] # area integrated heat flux from the fuel
type = LayeredSideFluxIntegralPostprocessor
variable = temperature
boundary = 10
diffusivity = thermal_conductivity
fuel_pin_geometry = pin_geometry
[]
[rod_total_power]
type = LayeredElementIntegralPowerPostprocessor
variable = temperature
burnup_function = burnup
block = fuel
fuel_pin_geometry = pin_geometry
[]
[rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.1186 # rod height
[]
[ave_fuel_temp]
type = ElementAverageValue
block = fuel
variable = temperature
[]
[central_fuel_temp]
type = NodalVariableValue
nodeid = 262 #Mesh dependent (0.0041, 0.05661)
variable = temperature
[]
[max_fuel_temp]
type = NodalExtremeValue
block = fuel
value_type = max
variable = temperature
[]
[max_clad_temp]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
[]
### Comparisons for 1.5D work, mesh specific #################### # von Mises Stress
[top_vonMises_fuel]
type = ElementalVariableValue
elementid = 171 # mesh dependent (contains pt. 0.0041, 0.09219)
variable = vonmises_stress
[]
[center_vonMises_fuel]
type = ElementalVariableValue
elementid = 123 # mesh dependent (contains pt. 0.0041, 0.05661)
variable = vonmises_stress
[]
[bottom_vonMises_fuel]
type = ElementalVariableValue
elementid = 75 # mesh dependent (contains pt. 0.0041, 0.02103)
variable = vonmises_stress
[]
[average_vonMises_fuel]
type = ElementAverageValue
variable = vonmises_stress
block = fuel
[]
[top_vonMises_clad_inner]
type = ElementalVariableValue
elementid = 28 # mesh dependent (contains pt. 0.00418, 0.09219)
variable = vonmises_stress
[]
[top_vonMises_clad_outer]
type = ElementalVariableValue
elementid = 31 # mesh dependent (contains pt. 0.00474, 0.09219)
variable = vonmises_stress
[]
[center_vonMises_clad_inner]
type = ElementalVariableValue
elementid = 16 # mesh dependent (contains pt. 0.00418, 0.05661)
variable = vonmises_stress
[]
[center_vonMises_clad_outer]
type = ElementalVariableValue
elementid = 19 # mesh dependent (contains pt. 0.00474, 0.05661)
variable = vonmises_stress
[]
[bottom_vonMises_clad_inner]
type = ElementalVariableValue
elementid = 4 # mesh dependent (contains pt. 0.00418, 0.02103)
variable = vonmises_stress
[]
[bottom_vonMises_clad_outer]
type = ElementalVariableValue
elementid = 7 # mesh dependent (contains pt. 0.00474, 0.02103)
variable = vonmises_stress
[]
[average_vonMises_clad]
type = ElementAverageValue
variable = vonmises_stress
block = clad
[]
### End of 1.5D comparisons
[fuel_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_fuel = fuel_strain_yy
execute_on = 'initial timestep_end'
[]
[clad_elongation]
type = LayeredElongation
fuel_pin_geometry = pin_geometry
out_of_plane_strain_cladding = cladding_strain_yy
execute_on = 'initial timestep_end'
[]
[]
[VectorPostprocessors]
[clad]
type = NodalValueSampler
variable = disp_x
boundary = 2
sort_by = y
outputs = 'clad_radial_displacement'
[]
[pellet]
type = NodalValueSampler
variable = disp_x
boundary = 10
sort_by = y
outputs = 'fuel_radial_displacement'
[]
[contact_pressure_output]
type = NodalValueSampler
variable = contact_pressure
boundary = 10
sort_by = y
outputs = 'contact_pressure_output'
[]
[tangential_pressure_output]
type = NodalValueSampler
variable = tangential_contact_pressure_aux
boundary = 10
sort_by = y
outputs = 'tangential_pressure_output'
[]
[]
[Outputs]
perf_graph = true
exodus = true
csv = true
color = false
[clad_radial_displacement]
type = CSV
execute_on = 'FINAL'
[]
[fuel_radial_displacement]
type = CSV
execute_on = 'FINAL'
[]
[contact_pressure_output]
type = CSV
execute_on = 'TIMESTEP_END'
[]
[tangential_pressure_output]
type = CSV
execute_on = 'TIMESTEP_END'
[]
[]