- boundaryThe list of boundary IDs from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundary IDs from the mesh where this object applies
- variableThe name of the variable that this boundary condition applies to
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The name of the variable that this boundary condition applies to
SideAverageIncrementTensorComponent
Computes a volume integral increment of a specified tensor component.
Description
SideAverageIncrementTensorComponent computes the average incremental value of a component of a second order tensor (for example creep strain in zz direction: over a user-specified boundary.
Example Input Syntax
[Postprocessors<<<{"href": "../../syntax/Postprocessors/index.html"}>>>]
[incr_cr]
type = SideAverageIncrementTensorComponent<<<{"description": "Computes a volume integral increment of a specified tensor component.", "href": "SideAverageIncrementTensorComponent.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 1
variable<<<{"description": "The name of the variable that this boundary condition applies to"}>>> = creep_strain_zz
[]
[](test/tests/side_ave_incr_tensor_component/side_ave_incr_component.i)Input 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/solid_mechanics/uo2_eigenstrains/uo2_relocation/reloc_recov_escore_mod_rz.i)
- (test/tests/solid_mechanics/uo2_eigenstrains/uo2_relocation/relo_recov_fuel_rod.i)
- (test/tests/side_ave_incr_tensor_component/side_ave_incr_component.i)
- (assessment/LWR/validation/Super_Ramp/analysis/Super_Ramp_Base.i)
- (assessment/LWR/validation/Super_Ramp/analysis/PK62/PK62_weighted_gap_VCP.i)
- (test/tests/solid_mechanics/uo2_eigenstrains/uo2_relocation/relo_recov_uo2.i)
(test/tests/side_ave_incr_tensor_component/side_ave_incr_component.i)
#--------------------------------------------------------------------------------------------------------
# REGRESSION TEST FOR THE POSTPROCESSOR: SideAverageIncrementTensorComponent
# ====================================================
#
# time creep_zz incremental creep incremental creep
# (calculated) (SideAverageIncrementTensorComponent)
# 0 0.00000 0.00000 0.00000
# 100 1.5011e-07 1.5011e-07 1.5011e-07
# 200 3.0022e-07 1.5011e-07 1.5011e-07
# 300 4.5033e-07 1.5011e-07 1.5011e-07
# 400 6.0044e-07 1.5011e-07 1.5011e-07
# 500 7.5055e-07 1.5011e-07 1.5011e-07
# 600 9.0066e-07 1.5011e-07 1.5011e-07
# 700 1.0508e-06 1.5011e-07 1.5011e-07
# 800 1.2009e-06 1.5011e-07 1.5011e-07
# 900 1.3501e-06 1.5011e-07 1.5011e-07
# 1000 1.5011e-06 1.5011e-07 1.5011e-07
#--------------------------------------------------------------------------------------------------------
[GlobalParams]
displacements = 'disp_x disp_y'
temperature = temp
[]
[Mesh]
coord_type = RZ
[mesh]
type = FileMeshGenerator
file = clad_rz.e
[]
[]
[Variables]
[temp]
order = FIRST
family = LAGRANGE
initial_condition = 630.0
[]
[]
[AuxVariables]
[fast_neutron_flux]
order = FIRST
family = LAGRANGE
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[pressure_ramp]
type = PiecewiseConstant
data_file = int_pressure.csv
format = columns
scale_factor = 1.0
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[clad]
block = 1
add_variables = true
strain = FINITE
eigenstrain_names = 'thermal_eigenstrain'
generate_output = 'creep_strain_zz'
decomposition_method = EigenSolution
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temp
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temp
[]
[]
[AuxKernels]
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
factor = 3e17
[]
[]
[BCs]
[Pressure]
[internal_pressure]
boundary = 1
factor = 1.0
function = pressure_ramp
[]
[]
[u_bottom_fix]
type = DirichletBC
variable = disp_y
boundary = 4
value = 0.0
[]
[temp_bc]
type = DirichletBC
variable = temp
boundary = '1 2 3 4'
value = 630.0
[]
[]
[Materials]
[clad_thermal]
type = HeatConductionMaterial
block = 1
thermal_conductivity = 100.0
specific_heat = 1.0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 1
youngs_modulus = 8.0e10
poissons_ratio = 0.3
[]
[clad_creep_model]
type = ZryCreepHayesHoppeUpdate
block = 1
fast_neutron_flux = fast_neutron_flux
zircaloy_material_type = stress_relief_annealed
model_irradiation_creep = true
model_thermal_creep = false
[]
[clad_inelastic_stress]
type = ComputeMultipleInelasticStress
block = 1
tangent_operator = elastic
inelastic_models = 'clad_creep_model'
[]
[clad_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = 1
thermal_expansion_coeff = 5.0e-6
stress_free_temperature = 573.15
eigenstrain_name = 'thermal_eigenstrain'
[]
[density]
type = StrainAdjustedDensity
block = 1
strain_free_density = 6500
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
# petsc_options = '-snes_mf -ksp_monitor -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-6
l_tol = 1e-5
start_time = 0.0
end_time = 1000
dt = 100
[]
[Postprocessors]
[crp_zz]
type = SideAverageValue
boundary = 1
variable = creep_strain_zz
[]
[incr_cr]
type = SideAverageIncrementTensorComponent
boundary = 1
variable = creep_strain_zz
[]
[]
[Outputs]
file_base = out
exodus = true
[]
(test/tests/solid_mechanics/uo2_eigenstrains/uo2_relocation/reloc_recov_escore_mod_rz.i)
#
# Analytical solution for burnup = 0 and varying linear power from 0 to 25 kW/ft
# for GAPCON relocation model
#
# Power (kW/ft) Relocation Strain
# 0 0.00065957
# 1 0.00081745
# 2 0.00097533
# 3 0.00113322
# 4 0.00129110
# 5 0.00144898
# 6 0.00160687
# 7 0.00176475
# 8 0.00192263
# 9 0.00208052
# 10 0.00223840
# 11 0.00239628
# 12 0.00255417
# 13 0.00271205
# 14 0.00286993
# 15 0.00302782
# 16 0.00318570
# 17 0.00334358
# 18 0.00350147
# 19 0.00365935
# 20 0.00381723
# 21 0.00397512
# 22 0.00413300
# 23 0.00429088
# 24 0.00444877
# 25 0.00460665
[Mesh]
coord_type = RZ
displacements = 'disp_x disp_y'
patch_size = 20
[mesh]
type = FileMeshGenerator
file = pellet_clad.e
[]
[]
[GlobalParams]
displacements = 'disp_x disp_y'
[]
[Variables]
[disp_x]
order = FIRST
family = LAGRANGE
[]
[disp_y]
order = FIRST
family = LAGRANGE
[]
[temp]
order = FIRST
family = LAGRANGE
initial_condition = 293.0
[]
[]
[AuxVariables]
[burnup]
order = FIRST
family = LAGRANGE
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[solid_swell]
order = CONSTANT
family = MONOMIAL
[]
[gas_swell]
order = CONSTANT
family = MONOMIAL
[]
[densification]
order = CONSTANT
family = MONOMIAL
[]
[volumetric_strain]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_rr]
order = CONSTANT
family = MONOMIAL
[]
[relocation_strain]
order = CONSTANT
family = MONOMIAL
[]
[total_strain_rr]
order = CONSTANT
family = MONOMIAL
[]
[stress_rr]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[total_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[total_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[volumetric_swelling_strain]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[burnup]
type = PiecewiseLinear
x = '0.0 40.0'
y = '0.0 0.08'
[]
[q]
type = PiecewiseLinear
x = '0.0 40.0'
y = '0.0 20.0'
scale_factor = 3280.8 #convert from kW/ft to W/M
[]
[temp_ramp]
type = PiecewiseLinear
x = '0.0 40.0'
y = '293.0 1000.0'
[]
[dispx_ramp]
type = PiecewiseLinear
x = '0.0 20.0 40.0'
y = '0.0 150e-6 150e-6'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
strain = finite
[fuel]
block = 2
eigenstrain_names = 'relocation_eigenstrain volumetric_swelling fuelthermal_strain'
[]
[clad]
block = 1
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temp
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temp
[]
[]
[AuxKernels]
[burnup]
type = FunctionAux
block = 2
variable = burnup
function = burnup
execute_on = 'initial linear'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
block = 2
variable = layered_average_contact_pressure
execute_on = nonlinear
user_object = layered_average_contact_pressure
[]
[solid_swell]
type = MaterialRealAux
block = 2
variable = solid_swell
property = solid_swelling
execute_on = timestep_end
[]
[gas_swell]
type = MaterialRealAux
block = 2
variable = gas_swell
property = gas_swelling
execute_on = timestep_end
[]
[densification]
type = MaterialRealAux
block = 2
variable = densification
property = densification
execute_on = timestep_end
[]
[volumetric_strain]
type = RankTwoScalarAux
block = 2
rank_two_tensor = total_strain
variable = volumetric_strain
scalar_type = VolumetricStrain
execute_on = timestep_end
[]
[reloc_strain]
type = MaterialRealAux
block = 2
variable = relocation_strain
property = relocation_strain
execute_on = timestep_end
[]
[elastic_strain_rr]
type = RankTwoAux
variable = elastic_strain_rr
rank_two_tensor = elastic_strain
index_i = 0
index_j = 0
execute_on = timestep_end
[]
[total_strain_rr]
type = RankTwoAux
variable = total_strain_rr
rank_two_tensor = total_strain
index_i = 0
index_j = 0
execute_on = timestep_end
[]
[stress_rr]
type = RankTwoAux
variable = stress_rr
rank_two_tensor = stress
index_i = 0
index_j = 0
execute_on = timestep_end
[]
[elastic_strain_yy]
type = RankTwoAux
variable = elastic_strain_yy
rank_two_tensor = elastic_strain
index_i = 2
index_j = 2
execute_on = timestep_end
[]
[total_strain_yy]
type = RankTwoAux
variable = total_strain_yy
rank_two_tensor = total_strain
index_i = 2
index_j = 2
execute_on = timestep_end
[]
[stress_yy]
type = RankTwoAux
variable = stress_yy
rank_two_tensor = stress
index_i = 2
index_j = 2
execute_on = timestep_end
[]
[elastic_strain_zz]
type = RankTwoAux
variable = elastic_strain_zz
rank_two_tensor = elastic_strain
index_i = 1
index_j = 1
execute_on = timestep_end
[]
[total_strain_zz]
type = RankTwoAux
variable = total_strain_zz
rank_two_tensor = total_strain
index_i = 1
index_j = 1
execute_on = timestep_end
[]
[stress_zz]
type = RankTwoAux
variable = stress_zz
rank_two_tensor = stress
index_i = 1
index_j = 1
execute_on = timestep_end
[]
[volumetric_swelling_strain]
type = MaterialRealAux
variable = volumetric_swelling_strain
property = volumetric_swelling_strain
block = 2
execute_on = timestep_end
[]
[]
[Contact]
# Define mechanical contact between the fuel (sideset=7) and the clad (sideset=1)
[pellet_clad_mechanical]
primary = 1
secondary = 7
formulation = kinematic
model = frictionless
penalty = 1e10
[]
[]
[BCs]
[no_y_pellet_clad_bottom]
type = DirichletBC
variable = disp_y
boundary = '2 4 6 8'
value = 0.0
[]
[y_axis]
type = DirichletBC
variable = disp_x
boundary = 5
value = 0.0
[]
[left_temp]
type = FunctionDirichletBC
variable = temp
boundary = '5 6 7 8'
function = temp_ramp
[]
[clad_x_disp]
type = FunctionDirichletBC
variable = disp_x
boundary = '1 2 3 4'
function = dispx_ramp
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 2
youngs_modulus = 1e11
poissons_ratio = 0.0
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = 2
[]
[relocation]
type = UO2RelocationEigenstrain
block = 2
burnup = burnup
diameter = 0.00984
rod_ave_lin_pow = q
diametral_gap =0.00016
burnup_relocation_stop = 1.0e12
model_relocation_recovery = true
max_relocation_recovery_fraction = 0.5
relocation_scaling_factor = 1
layered_average_contact_pressure = layered_average_contact_pressure
volumetric_swelling_increment = vol_swell_increment
outputs = all
output_properties = 'recovered_relocation_strain'
eigenstrain_name = relocation_eigenstrain
relocation_model = ESCORE_modified
[]
[fuel_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = MATPRO
block = 2
temperature = temp
burnup = burnup
complete_burnup = 5
total_densification = 0.0
eigenstrain_name = volumetric_swelling
initial_fuel_density = 10430.0
[]
[fuel_thermal_strain]
type = ComputeThermalExpansionEigenstrain
block = 2
thermal_expansion_coeff = 1.0e-6
temperature = temp
stress_free_temperature = 293.0
eigenstrain_name = fuelthermal_strain
[]
[thermal]
type = UO2Thermal
block = 2
thermal_conductivity_model = FINK_LUCUTA
temperature = temp
burnup = burnup
[]
[density]
type = StrainAdjustedDensity
block = 2
strain_free_density = 10430.0
[]
[clad_elasticity]
type = ComputeIsotropicElasticityTensor
block = 1
youngs_modulus = 7.5e10
poissons_ratio = 0.0
[]
[clad_stress]
type = ComputeFiniteStrainElasticStress
block = 1
[]
[clad_thermal]
type = HeatConductionMaterial
block = 1
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[clad_density]
type = StrainAdjustedDensity
block = 1
strain_free_density = 6551.0
[]
[]
[UserObjects]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
num_layers = 1
execute_on = timestep_end
boundary = 7
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp '
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
l_max_its = 60
nl_max_its = 30
nl_rel_tol = 1e-7
nl_abs_tol = 1e-9
l_tol = 1e-5
start_time = 0.0
dt = 1.0
end_time = 40.0
[]
[Postprocessors]
[ave_burnup]
type = ElementAverageValue
variable = burnup
block = 2
[]
[solid_swelling]
type = ElementAverageValue
variable = solid_swell
block = 2
[]
[gas_swelling]
type = ElementAverageValue
variable = gas_swell
block = 2
[]
[densification]
type = ElementAverageValue
variable = densification
block = 2
[]
[volumetric_strain]
type = ElementAverageValue
variable = volumetric_strain
block = 2
[]
[relocation_strain]
type = ElementAverageValue
variable = relocation_strain
block = 2
[]
[average_contact_pressure]
type = ElementalVariableValue
variable = layered_average_contact_pressure
elementid = 1
execute_on = nonlinear
[]
[contact_pressure]
type = ElementalVariableValue
variable = contact_pressure
elementid = 1
[]
[elastic_strain_rr]
type = ElementAverageValue
variable = elastic_strain_rr
block = 2
[]
[total_strain_rr]
type = ElementAverageValue
variable = total_strain_rr
block = 2
[]
[stress_rr]
type = ElementAverageValue
variable = stress_rr
block = 2
[]
[elastic_strain_yy]
type = ElementAverageValue
variable = elastic_strain_yy
block = 2
[]
[total_strain_yy]
type = ElementAverageValue
variable = total_strain_yy
block = 2
[]
[stress_yy]
type = ElementAverageValue
variable = stress_yy
block = 2
[]
[elastic_strain_zz]
type = ElementAverageValue
variable = elastic_strain_zz
block = 2
[]
[total_strain_zz]
type = ElementAverageValue
variable = total_strain_zz
block = 2
[]
[stress_zz]
type = ElementAverageValue
variable = stress_zz
block = 2
[]
[thermal_strain_rr]
type = DifferencePostprocessor
value1 = total_strain_rr
value2 = elastic_strain_rr
[]
[thermal_strain_yy]
type = DifferencePostprocessor
value1 = total_strain_yy
value2 = elastic_strain_yy
[]
[thermal_strain_zz]
type = DifferencePostprocessor
value1 = total_strain_zz
value2 = elastic_strain_zz
[]
[dispx_outer]
type = NodalVariableValue
variable = disp_x
nodeid = 6
[]
[vol_swell_increment]
type = SideAverageIncrementTensorComponent
boundary = 7
variable = volumetric_swelling_strain
[]
[recov_strain]
type = ElementalVariableValue
variable = recovered_relocation_strain
elementid = 1
[]
[]
[Outputs]
exodus = true
file_base = reloc_recov_escore_mod_rz_0_out
[chkfile]
type = CSV
[]
[]
[Debug]
show_var_residual = 'disp_x disp_y temp'
show_var_residual_norms = true
[]
(test/tests/solid_mechanics/uo2_eigenstrains/uo2_relocation/relo_recov_fuel_rod.i)
#
# Simple fuel rod example for relocation recovery.
#
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 disp_y'
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
coord_type = RZ
[smeared_pellet_mesh]
type = FuelPinMeshGenerator
clad_mesh_density = customize
pellet_mesh_density = customize
ny_p = 1
nx_p = 1
nx_c = 1
ny_cu = 1
ny_c = 1
ny_cl = 1
pellet_quantity = 1
pellet_height = 0.01
pellet_outer_radius = 4.1e-3
clad_gap_width = 160.0e-6
clad_thickness = 0.56e-3
clad_bot_gap_height = 1.0e-3
bottom_clad_height = 2.24e-3
top_clad_height = 2.24e-3
clad_top_gap_height = 1.0e-2
elem_type = QUAD8
[]
patch_update_strategy = auto
partitioner = centroid
centroid_partitioner_direction = y
patch_size = 20
[]
[UserObjects]
[pin_geometry]
type = FuelPinGeometry
[]
[]
[Variables]
[temp]
initial_condition = 293.0
[]
[]
[AuxVariables]
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = pellet
initial_condition = 10e-6
[]
[radial_strain]
order = CONSTANT
family = MONOMIAL
[]
[effective_creep_strain]
block = clad
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[coolant_htc]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[gas_swell]
order = CONSTANT
family = MONOMIAL
[]
[volumetric_strain]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_rr]
order = CONSTANT
family = MONOMIAL
[]
[total_strain_rr]
order = CONSTANT
family = MONOMIAL
[]
[stress_rr]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[total_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[total_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
block = 1
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
block = 1
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
block = 1
[]
[volumetric_swelling_strain]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
x = '0 1.0e4 6.327640e+07 6.33628e7 6.34492e7 1.0e08'
y = '0 2.5e4 2.5e4 0 2.5e4 2.5e4'
scale_factor = 1
[]
[axial_peaking_factors]
type = ParsedFunction
expression = 1
[]
[pressure_ramp]
type = PiecewiseLinear
x = '-200 0'
y = '0 1'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[pellets]
block = pellet
add_variables = true
strain = FINITE
eigenstrain_names = 'fuel_relocation_strain fuel_thermal_strain fuel_volumetric_strain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
extra_vector_tags = 'ref'
[]
[clad]
block = clad
add_variables = true
strain = FINITE
eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_strain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
extra_vector_tags = 'ref'
[]
[]
[Kernels]
[gravity]
type = Gravity
variable = disp_y
value = -9.81
[]
[heat]
type = HeatConduction
variable = temp
extra_vector_tags = 'ref'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temp
extra_vector_tags = 'ref'
[]
[heat_source]
type = NeutronHeatSource
variable = temp
extra_vector_tags = 'ref'
block = pellet
burnup_function = burnup
[]
[]
[Burnup]
[burnup]
block = pellet
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
num_radial = 80
num_axial = 11
RPF = RPF
fuel_volume_ratio = 1
fuel_pin_geometry = pin_geometry
[]
[]
[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 = pellet
variable = grain_radius
temperature = temp
execute_on = linear
[]
[radial_strain]
type = RankTwoAux
rank_two_tensor = total_strain
variable = radial_strain
index_i = 0
index_j = 0
execute_on = timestep_end
[]
[effective_creep_strain]
type = MaterialRealAux
property = effective_creep_strain
variable = effective_creep_strain
block = clad
execute_on = timestep_end
[]
[conductance]
type = MaterialRealAux
property = gap_conductance
variable = gap_cond
boundary = 10
execute_on = 'linear'
[]
[coolant_htc]
type = MaterialRealAux
property = coolant_channel_htc
variable = coolant_htc
boundary = 2
execute_on = 'linear'
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
block = pellet
variable = layered_average_contact_pressure
execute_on = nonlinear
user_object = layered_average_contact_pressure
[]
[gas_swell]
type = MaterialRealAux
block = pellet
variable = gas_swell
property = gas_swelling
execute_on = nonlinear
[]
[volumetric_strain]
type = RankTwoScalarAux
block = pellet
rank_two_tensor = total_strain
variable = volumetric_strain
scalar_type = VolumetricStrain
execute_on = nonlinear
[]
[elastic_strain_rr]
type = RankTwoAux
variable = elastic_strain_rr
rank_two_tensor = elastic_strain
index_i = 0
index_j = 0
execute_on = nonlinear
[]
[total_strain_rr]
type = RankTwoAux
variable = total_strain_rr
rank_two_tensor = total_strain
index_i = 0
index_j = 0
execute_on = nonlinear
[]
[stress_rr]
type = RankTwoAux
variable = stress_rr
rank_two_tensor = stress
index_i = 0
index_j = 0
execute_on = nonlinear
[]
[elastic_strain_yy]
type = RankTwoAux
variable = elastic_strain_yy
rank_two_tensor = elastic_strain
index_i = 2
index_j = 2
execute_on = nonlinear
[]
[total_strain_yy]
type = RankTwoAux
variable = total_strain_yy
rank_two_tensor = total_strain
index_i = 2
index_j = 2
execute_on = nonlinear
[]
[stress_yy]
type = RankTwoAux
variable = stress_yy
rank_two_tensor = stress
index_i = 2
index_j = 2
execute_on = nonlinear
[]
[elastic_strain_zz]
type = RankTwoAux
variable = elastic_strain_zz
rank_two_tensor = elastic_strain
index_i = 1
index_j = 1
execute_on = nonlinear
[]
[total_strain_zz]
type = RankTwoAux
variable = total_strain_zz
rank_two_tensor = total_strain
index_i = 1
index_j = 1
execute_on = nonlinear
[]
[stress_zz]
type = RankTwoAux
variable = stress_zz
rank_two_tensor = stress
index_i = 1
index_j = 1
execute_on = nonlinear
[]
[volumetric_swelling_strain]
type = MaterialRealAux
variable = volumetric_swelling_strain
property = volumetric_swelling_strain
block = pellet
execute_on = nonlinear
[]
[creep_strain_xx]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
block = clad
execute_on = nonlinear
[]
[creep_strain_yy]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
block = clad
execute_on = nonlinear
[]
[creep_strain_zz]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zz
index_i = 2
index_j = 2
block = clad
execute_on = nonlinear
[]
[]
[Contact]
[pellet_clad_mechanical]
primary = 5
secondary = 10
formulation = kinematic
model = frictionless
penalty = 1e7
[]
[]
[ThermalContact]
[thermal_contact]
type = GasGapHeatTransfer
variable = temp
primary = 5
secondary = 10
initial_moles = initial_moles
gas_released = fis_gas_released
contact_pressure = contact_pressure
quadrature = true
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_clad_bottom]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[]
[no_y_fuel_bottom]
type = DirichletBC
variable = disp_y
boundary = 1020
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = '1 2 3'
factor = 15.5e6
function = pressure_ramp
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = 0.5e6
startup_time = 0
R = 8.3143
output_initial_moles = initial_moles
temperature = ave_temp_interior
volume = gas_volume
material_input = fis_gas_released
output = plenum_pressure
[]
[]
[]
[CoolantChannel]
[convective_clad_surface]
boundary = '1 2 3'
variable = temp
inlet_temperature = 580
inlet_pressure = 15.5e6
inlet_massflux = 3800
rod_diameter = 0.948e-2
rod_pitch = 1.26e-2
linear_heat_rate = power_history
axial_power_profile = axial_peaking_factors
[]
[]
[Materials]
[fuel_thermal]
type = UO2Thermal
block = pellet
thermal_conductivity_model = NFIR
temperature = temp
burnup_function = burnup
[]
[fuel_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = pellet
youngs_modulus = 2.0e11
poissons_ratio = 0.345
[]
[elastic_stress]
type = ComputeSmearedCrackingStress
block = pellet
cracking_stress = 1.68e8
inelastic_models = 'fuel_creep'
softening_models = exponential_softening
shear_retention_factor = 0.1
max_stress_correction = 0
cracked_elasticity_type = DIAGONAL
output_properties = crack_damage
outputs = exodus
[]
[exponential_softening]
type = ExponentialSoftening
[]
[fuel_creep]
type = UO2CreepUpdate
block = pellet
temperature = temp
fission_rate = fission_rate
initial_grain_radius = 10e-6
oxygen_to_metal_ratio = 2.0
[]
[fuel_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = pellet
thermal_expansion_coeff = 10.0e-6
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = fuel_thermal_strain
[]
[fuel_relocation]
type = UO2RelocationEigenstrain
block = pellet
burnup_function = burnup
rod_ave_lin_pow = power_history
axial_power_profile = axial_peaking_factors
burnup_relocation_stop = 1e12
relocation_activation1 = 5000
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_strain
fuel_pin_geometry = pin_geometry
model_relocation_recovery = true
max_relocation_recovery_fraction = 0.5
relocation_scaling_factor = 1
volumetric_swelling_increment = vol_swell_increment
layered_average_contact_pressure = layered_average_contact_pressure
outputs = all
output_properties = 'relocation_strain recovered_relocation_strain'
[]
[fuel_volumetric_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = pellet
temperature = temp
burnup_function = burnup
initial_fuel_density = ${initial_fuel_density}
eigenstrain_name = fuel_volumetric_strain
[]
[clad_thermal]
type = HeatConductionMaterial
block = clad
thermal_conductivity = 16.0
specific_heat = 330.0
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = elastic
inelastic_models = 'clad_zrycreep'
block = clad
[]
[clad_zrycreep]
type = ZryCreepLimbackHoppeUpdate
block = clad
temperature = temp
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
[]
[thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
temperature = temp
stress_free_temperature = 295.0
eigenstrain_name = clad_thermal_eigenstrain
[]
[irradiation_swelling]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = stress_relief_annealed
eigenstrain_name = clad_irradiation_strain
[]
[fission_gas_release]
type = UO2Sifgrs
block = pellet
temperature = temp
burnup_function = burnup
grain_radius = grain_radius
gbs_model = true
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = 6551.0
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density}
[]
[]
[Preconditioning]
[SMP]
type = SMP
off_diag_row = 'disp_x disp_y'
off_diag_column = 'disp_y disp_x'
[]
[]
[UserObjects]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
num_layers = 1
execute_on = timestep_end
boundary = 10
[]
# [avg_gap]
# type = LayeredAverage
# block = pellet
# variable= penetration
# direction = y
# num_layers = 1
# execute_on = timestep_end
# []
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
verbose = false
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_rel_tol = 1e-4
nl_abs_tol = 1e-10
start_time = -200
n_startup_steps = 1
end_time = 1.0e8
dtmax = 2e6
dtmin = 1
[TimeStepper]
type = IterationAdaptiveDT
dt = 2e2
optimal_iterations = 10
iteration_window = 2
time_t = '0 1.0e4 6.327640e+07 6.33628e7 6.34492e7 1.0e08'
time_dt = '2e2 1e3 1e3 1e3 1e3 1e3'
linear_iteration_ratio = 100
growth_factor = 2
cutback_factor = .5
[]
[Quadrature]
order = FIFTH
side_order = SEVENTH
[]
[]
[Postprocessors]
[ave_temp_interior]
type = SideAverageValue
boundary = 9
variable = temp
execute_on = 'initial linear'
[]
[clad_inner_vol]
type = InternalVolume
boundary = 7
execute_on = 'initial timestep_end'
[]
[pellet_volume]
type = InternalVolume
boundary = 8
execute_on = 'initial timestep_end'
[]
[avg_clad_temp]
type = SideAverageValue
boundary = 7
variable = temp
execute_on = 'initial timestep_end'
[]
[fis_gas_produced]
type = ElementIntegralFisGasGeneratedSifgrs
block = pellet
execute_on = 'linear'
[]
[fis_gas_released]
type = ElementIntegralFisGasReleasedSifgrs
block = pellet
execute_on = 'linear'
[]
[fis_gas_grain]
type = ElementIntegralFisGasGrainSifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[fis_gas_boundary]
type = ElementIntegralFisGasBoundarySifgrs
block = pellet
outputs = exodus
execute_on = 'linear'
[]
[gas_volume]
type = InternalVolume
boundary = 9
execute_on = 'initial linear'
[]
[flux_from_clad]
type = SideDiffusiveFluxIntegral
variable = temp
boundary = 5
diffusivity = thermal_conductivity
[]
[flux_from_fuel]
type = SideDiffusiveFluxIntegral
variable = temp
boundary = 10
diffusivity = thermal_conductivity
[]
[rod_total_power]
type = ElementIntegralPower
variable = temp
burnup_function = burnup
block = pellet
[]
[rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = 0.1186 # rod height
[]
[average_vonMises_fuel]
type = ElementAverageValue
variable = vonmises_stress
block = pellet
[]
[average_vonMises_clad]
type = ElementAverageValue
variable = vonmises_stress
block = clad
[]
[average_strain_rr_fuel]
type = ElementAverageValue
variable = radial_strain
block = pellet
[]
[average_strain_rr_clad]
type = ElementAverageValue
variable = radial_strain
block = clad
[]
[average_creep_strain_clad]
type = ElementAverageValue
variable = effective_creep_strain
block = clad
[]
[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
[]
[reloc_strain]
type = ElementAverageValue
variable = relocation_strain
block = pellet
execute_on = timestep_end
[]
[contact_pressure]
type = ElementAverageValue
variable = contact_pressure
block = pellet
execute_on = nonlinear
[]
[average_contact_pressure]
type = ElementAverageValue
variable = layered_average_contact_pressure
block = pellet
execute_on = timestep_end
[]
[clad_crp_zz]
type = SideAverageValue
boundary = 5
variable = creep_strain_zz
execute_on = timestep_end
[]
[clad_crp_xx]
type = SideAverageValue
boundary = 5
variable = creep_strain_xx
execute_on = timestep_end
[]
[clad_creep_increment]
type = SideAverageIncrementTensorComponent
boundary = 5
variable = creep_strain_zz
execute_on = timestep_end
[]
[ave_burnup]
type = ElementAverageValue
variable = burnup
block = pellet
execute_on = timestep_end
[]
[gas_swelling]
type = ElementAverageValue
variable = gas_swell
block = pellet
execute_on = timestep_end
[]
[volumetric_strain]
type = ElementAverageValue
variable = volumetric_strain
block = pellet
execute_on = timestep_end
[]
[elastic_strain_rr]
type = ElementAverageValue
variable = elastic_strain_rr
block = pellet
execute_on = nonlinear
[]
[total_strain_rr]
type = ElementAverageValue
variable = total_strain_rr
block = pellet
execute_on = nonlinear
[]
[stress_rr]
type = ElementAverageValue
variable = stress_rr
block = pellet
execute_on = timestep_end
[]
[elastic_strain_yy]
type = ElementAverageValue
variable = elastic_strain_yy
block = pellet
execute_on = nonlinear
[]
[total_strain_yy]
type = ElementAverageValue
variable = total_strain_yy
block = pellet
execute_on = nonlinear
[]
[stress_yy]
type = ElementAverageValue
variable = stress_yy
block = pellet
execute_on = timestep_end
[]
[elastic_strain_zz]
type = ElementAverageValue
variable = elastic_strain_zz
block = pellet
execute_on = nonlinear
[]
[total_strain_zz]
type = ElementAverageValue
variable = total_strain_zz
block = pellet
execute_on = timestep_end
[]
[stress_zz]
type = ElementAverageValue
variable = stress_zz
block = pellet
execute_on = timestep_end
[]
[thermal_strain_rr]
type = DifferencePostprocessor
value1 = total_strain_rr
value2 = elastic_strain_rr
execute_on = timestep_end
[]
[thermal_strain_yy]
type = DifferencePostprocessor
value1 = total_strain_yy
value2 = elastic_strain_yy
execute_on = timestep_end
[]
[thermal_strain_zz]
type = DifferencePostprocessor
value1 = total_strain_zz
value2 = elastic_strain_zz
execute_on = timestep_end
[]
[vol_swell_increment]
type = SideAverageIncrementTensorComponent
boundary = 10
variable = volumetric_swelling_strain
execute_on = nonlinear
[]
[recov_strain]
type = ElementAverageValue
variable = recovered_relocation_strain
block = pellet
execute_on = timestep_end
[]
[]
# [VectorPostprocessors]
# [clad]
# type = NodalValueSampler
# variable = disp_x
# boundary = 2
# sort_by = y
# outputs = 'outfile_clad_radial_displacement'
# []
# [pellet]
# type = NodalValueSampler
# variable = disp_x
# boundary = 10
# sort_by = y
# outputs = 'outfile_fuel_radial_displacement'
# []
# []
[Outputs]
perf_graph = true
exodus = true
color = false
csv = true
[console]
type = Console
max_rows = 25
[]
[chkfile]
type = CSV
show = 'reloc_strain recov_strain'
execute_on = 'FINAL'
[]
# [outfile_clad_radial_displacement]
# type = CSV
# execute_on = 'FINAL'
# []
# [outfile_fuel_radial_displacement]
# type = CSV
# execute_on = 'FINAL'
# []
[]
(test/tests/side_ave_incr_tensor_component/side_ave_incr_component.i)
#--------------------------------------------------------------------------------------------------------
# REGRESSION TEST FOR THE POSTPROCESSOR: SideAverageIncrementTensorComponent
# ====================================================
#
# time creep_zz incremental creep incremental creep
# (calculated) (SideAverageIncrementTensorComponent)
# 0 0.00000 0.00000 0.00000
# 100 1.5011e-07 1.5011e-07 1.5011e-07
# 200 3.0022e-07 1.5011e-07 1.5011e-07
# 300 4.5033e-07 1.5011e-07 1.5011e-07
# 400 6.0044e-07 1.5011e-07 1.5011e-07
# 500 7.5055e-07 1.5011e-07 1.5011e-07
# 600 9.0066e-07 1.5011e-07 1.5011e-07
# 700 1.0508e-06 1.5011e-07 1.5011e-07
# 800 1.2009e-06 1.5011e-07 1.5011e-07
# 900 1.3501e-06 1.5011e-07 1.5011e-07
# 1000 1.5011e-06 1.5011e-07 1.5011e-07
#--------------------------------------------------------------------------------------------------------
[GlobalParams]
displacements = 'disp_x disp_y'
temperature = temp
[]
[Mesh]
coord_type = RZ
[mesh]
type = FileMeshGenerator
file = clad_rz.e
[]
[]
[Variables]
[temp]
order = FIRST
family = LAGRANGE
initial_condition = 630.0
[]
[]
[AuxVariables]
[fast_neutron_flux]
order = FIRST
family = LAGRANGE
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[pressure_ramp]
type = PiecewiseConstant
data_file = int_pressure.csv
format = columns
scale_factor = 1.0
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[clad]
block = 1
add_variables = true
strain = FINITE
eigenstrain_names = 'thermal_eigenstrain'
generate_output = 'creep_strain_zz'
decomposition_method = EigenSolution
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temp
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temp
[]
[]
[AuxKernels]
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
factor = 3e17
[]
[]
[BCs]
[Pressure]
[internal_pressure]
boundary = 1
factor = 1.0
function = pressure_ramp
[]
[]
[u_bottom_fix]
type = DirichletBC
variable = disp_y
boundary = 4
value = 0.0
[]
[temp_bc]
type = DirichletBC
variable = temp
boundary = '1 2 3 4'
value = 630.0
[]
[]
[Materials]
[clad_thermal]
type = HeatConductionMaterial
block = 1
thermal_conductivity = 100.0
specific_heat = 1.0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 1
youngs_modulus = 8.0e10
poissons_ratio = 0.3
[]
[clad_creep_model]
type = ZryCreepHayesHoppeUpdate
block = 1
fast_neutron_flux = fast_neutron_flux
zircaloy_material_type = stress_relief_annealed
model_irradiation_creep = true
model_thermal_creep = false
[]
[clad_inelastic_stress]
type = ComputeMultipleInelasticStress
block = 1
tangent_operator = elastic
inelastic_models = 'clad_creep_model'
[]
[clad_thermal_expansion]
type = ComputeThermalExpansionEigenstrain
block = 1
thermal_expansion_coeff = 5.0e-6
stress_free_temperature = 573.15
eigenstrain_name = 'thermal_eigenstrain'
[]
[density]
type = StrainAdjustedDensity
block = 1
strain_free_density = 6500
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_ksp_ew'
# petsc_options = '-snes_mf -ksp_monitor -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-6
l_tol = 1e-5
start_time = 0.0
end_time = 1000
dt = 100
[]
[Postprocessors]
[crp_zz]
type = SideAverageValue
boundary = 1
variable = creep_strain_zz
[]
[incr_cr]
type = SideAverageIncrementTensorComponent
boundary = 1
variable = creep_strain_zz
[]
[]
[Outputs]
file_base = out
exodus = true
[]
(assessment/LWR/validation/Super_Ramp/analysis/Super_Ramp_Base.i)
#This is a partial input file base with information/features common to several experiments within this assessment
#NOTE: This file will NOT run on its own, it requires a PK#X.params file and a PK##.params file to run
# physical constants
R = 8.3143 # (J/K*mol) -- THIS SHOULD BE EDITED TO USE PHYSICALCONSTANTS' VALUE
# fuel isotope fractions and fission energy
energy_per_fission = 3.28451e-11 # (J/fission)
isotope_fraction_Pu239 = 0.0
isotope_fraction_Pu240 = 0.0
isotope_fraction_Pu241 = 0.0
isotope_fraction_Pu242 = 0.0
# rod geometry
clad_bot_gap_height = 1.0e-3 # (m)
# variable and kernel initial values
initial_temperature = 293.15 # (K)
gravity_constant = -9.81 # (m/s^2)
# fuel/cladding contact
friction_coefficient = 0.4
c_normal = 1e+12
c_tangential = 1e+24
tangential_lm_scaling = 1.0e-16
normal_lm_scaling = 1.0e-10
roughness_secondary = 1.0e-6 # (m)
roughness_primary = 2.0e-6 # (m)
roughness_coef = 3.2
jump_distance_model = LANNING
contact_pressure = mechanical_normal_lm
thermal_lm_scaling = 1.0e-2
# plenum parameters
initial_pressure = 2.25e6 # (Pa)
startup_time = 0 # (s)
# fuel/clad material properties
fuel_cracking_stress = 1.68e8
stress_free_temperature = 293.15 # (K)
clad_density = 6550.0 # (kg/m^3)
# numerical options
l_max_its = 100
l_tol = 1e-4
nl_max_its = 30
start_time = 0.0 # s
dtmin = 1.0 # s
[GlobalParams]
density = ${fuel_density}
displacements = 'disp_x disp_y'
order = SECOND
family = LAGRANGE
energy_per_fission = ${energy_per_fission}
volumetric_locking_correction = false
initial_porosity = ${initial_fuel_porosity}
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
converge_on = 'disp_x disp_y temperature'
[]
[Mesh]
coord_type = RZ
[smeared_pellet_mesh]
type = FuelPinMeshGenerator
pellet_quantity = ${number_pellets}
pellet_height = ${pellet_height}
pellet_outer_radius = ${pellet_outer_radius}
pellet_mesh_density = customize
nx_p = 11
ny_p = 84
clad_mesh_density = customize
nx_c = 4
ny_c = 84
clad_gap_width = ${clad_gap_width}
clad_thickness = ${clad_thickness}
clad_bot_gap_height = ${clad_bot_gap_height}
bottom_clad_height = ${bottom_clad_height}
top_clad_height = ${top_clad_height}
clad_top_gap_height = ${clad_top_gap_height}
ny_cu = 3
ny_cl = 3
elem_type = QUAD8
[]
patch_size = 10
patch_update_strategy = iteration
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
initial_condition = ${initial_temperature}
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = ${power_history_data_file}
format = columns
[]
[axial_power_factors]
type = PiecewiseBilinear
data_file = ${axial_power_factors_data_file}
axis = 1
[]
[clad_out_temp]
type = PiecewiseLinear
data_file = ${clad_out_temp_data_file}
format = columns
[]
[axial_temp_factors]
type = PiecewiseBilinear
data_file = ${axial_temp_factors_data_file}
axis = 1
[]
[clad_temp_bc]
type = CompositeFunction
functions = 'clad_out_temp axial_temp_factors'
[]
[coolant_pressure]
type = PiecewiseLinear
data_file = ${coolant_pressure_data_file}
format = columns
[]
[fast_flux]
type = PiecewiseLinear
data_file = ${fast_neutron_flux_data_file}
format = columns
[]
[]
[AuxVariables]
[gap_conductance]
block = 'mechanical_secondary_subdomain'
[]
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = pellet
initial_condition = ${initial_grain_radius}
[]
[porosity]
order = CONSTANT
family = MONOMIAL
block = pellet
initial_condition = ${initial_fuel_porosity}
[]
[pellet_id]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[oxide_thickness]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
block = clad
[]
[gas_gen_3]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[gas_grn_3]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[gas_bdr_3]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[gas_rel_3]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[bbl_bdr_2]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[prs_bbl_bdr]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[prseq_bbl_bdr]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[rad_bbl_bdr]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[GBCoverage]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[sat_coverage]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[eff_diff_coeff]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[deltav_v0_bd]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[gaseous_porosity]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[thermal_conductivity]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[volumetric_swelling_strain]
order = CONSTANT
family = MONOMIAL
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[pellets]
block = pellet
temperature = temperature
add_variables = true
strain = FINITE
eigenstrain_names = 'fuel_relocation_strain fuel_thermal_strain
fuel_volumetric_strain'
generate_output = 'vonmises_stress hydrostatic_stress stress_xx stress_yy
stress_zz strain_xx strain_yy strain_zz'
extra_vector_tags = 'ref'
[]
[clad]
block = clad
temperature = temperature
add_variables = true
strain = FINITE
cylindrical_axis_point1 = '0 0 0'
cylindrical_axis_point2 = '0 1 0'
eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_strain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz
creep_strain_xx creep_strain_yy creep_strain_xy creep_strain_zz strain_xx
strain_yy strain_zz hoop_stress'
extra_vector_tags = 'ref'
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
block = '1 3'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
block = '1 3'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
block = pellet
burnup_function = burnup
extra_vector_tags = 'ref'
[]
[gravity]
type = Gravity
variable = disp_y
value = ${gravity_constant}
block = '1 3'
[]
[]
[AuxKernels]
[gap_conductance]
type = GapConductanceMortar
primary_boundary = 5
secondary_boundary = 10
primary_subdomain = 'mechanical_primary_subdomain'
secondary_subdomain = 'mechanical_secondary_subdomain'
heat_flux = thermal_contact_thermal_lm
temperature = temperature
variable = gap_conductance
[]
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
block = clad
function = fast_flux
execute_on = timestep_begin
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
variable = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = pellet
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[porosity]
type = PorosityAuxUO2
block = pellet
variable = porosity
execute_on = linear
[]
[pelletid]
type = PelletIdAux
block = pellet
variable = pellet_id
fuel_pin_geometry = pin_geometry
number_pellets = ${number_pellets}
execute_on = initial
[]
[oxi_thickness]
type = MaterialRealAux
variable = oxide_thickness
property = oxide_scale_thickness
boundary = 2
[]
[creep_strain_mag]
type = MaterialRealAux
property = effective_creep_strain
variable = creep_strain_mag
execute_on = timestep_end
[]
[fggen]
type = MaterialRealAux
variable = gas_gen_3
property = gas_concentration_generated_total
[]
[fggrn]
type = MaterialRealAux
variable = gas_grn_3
property = gas_concentration_intra_total
[]
[fgbdr]
type = MaterialRealAux
variable = gas_bdr_3
property = gas_concentration_GB_bubble_volume
[]
[fgrel]
type = MaterialRealAux
variable = gas_rel_3
property = gas_concentration_release_total
[]
[nbbl2]
type = MaterialRealAux
variable = bbl_bdr_2
property = bubble_GB_surface_density
[]
[prsbbl]
type = MaterialRealAux
variable = prs_bbl_bdr
property = bubble_GB_pressure
[]
[prseqbbl]
type = MaterialRealAux
variable = prseq_bbl_bdr
property = bubble_GB_pressure_equilibrium
[]
[radbbl]
type = MaterialRealAux
variable = rad_bbl_bdr
property = bubble_radius_GB
[]
[frcvrg]
type = MaterialRealAux
variable = GBCoverage
property = GBCoverage
[]
[stcvrg]
type = MaterialRealAux
variable = sat_coverage
property = sat_coverage
[]
[diffc]
type = MaterialRealAux
variable = eff_diff_coeff
property = eff_diff_coeff
[]
[dvv0bd]
type = MaterialRealAux
variable = deltav_v0_bd
property = deltav_v0_bubble_GB
[]
[gaspor]
type = MaterialRealAux
variable = gaseous_porosity
property = gaseous_porosity
[]
[fuel_conductivity]
type = MaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
block = pellet
variable = layered_average_contact_pressure
execute_on = nonlinear
user_object = layered_average_contact_pressure
[]
[volumetric_swelling_strain]
type = MaterialRealAux
variable = volumetric_swelling_strain
property = volumetric_swelling_strain
block = pellet
execute_on = nonlinear
[]
[]
[Burnup]
[burnup]
block = pellet
rod_ave_lin_pow = power_history
axial_power_profile = axial_power_factors
num_radial = 80
num_axial = 20
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '${isotope_fraction_U235} ${isotope_fraction_U238} ${isotope_fraction_Pu239} ${isotope_fraction_Pu240} ${isotope_fraction_Pu241} ${isotope_fraction_Pu242}'
RPF = RPF
fuel_pin_geometry = pin_geometry
fuel_volume_ratio = 1.0
[]
[]
[Contact]
[mechanical]
model = coulomb
formulation = mortar
primary = 5
secondary = 10
friction_coefficient = ${friction_coefficient}
c_normal = ${c_normal}
c_tangential = ${c_tangential}
tangential_lm_scaling = ${tangential_lm_scaling}
normal_lm_scaling = ${normal_lm_scaling}
[]
[]
[ThermalContactMortar]
[thermal_contact]
secondary_variable = temperature
primary_boundary = '5'
secondary_boundary = '10'
initial_moles = initial_moles
gas_released = fission_gas_released
roughness_secondary = ${roughness_secondary}
roughness_primary = ${roughness_primary}
roughness_coef = ${roughness_coef}
plenum_pressure = plenum_pressure
jump_distance_model = ${jump_distance_model}
contact_pressure = ${contact_pressure}
thermal_lm_scaling = ${thermal_lm_scaling}
[]
[]
[PlenumTemperature]
[plenum_temp]
boundary = 5
inner_surfaces = 5
outer_surfaces = 10
temperature = temperature
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_clad_bottom]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[]
[no_y_fuel_bottom]
type = DirichletBC
variable = disp_y
boundary = 1020
value = 0.0
[]
[temp]
type = FunctionDirichletBC
boundary = '1 2 3'
variable = temperature
function = clad_temp_bc
[]
[Pressure]
[coolantPressure]
boundary = '1 2 3'
function = coolant_pressure
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = ${initial_pressure}
startup_time = ${startup_time}
R = ${R}
output_initial_moles = initial_moles
temperature = plenum_temp
volume = plenum_volume
material_input = fission_gas_released
output = plenum_pressure
[]
[]
[]
[Materials]
[fuel_thermal]
type = UO2Thermal
block = pellet
thermal_conductivity_model = NFIR
temperature = temperature
burnup_function = burnup
[]
[fuel_volumetric_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = pellet
temperature = temperature
burnup_function = burnup
initial_fuel_density = ${fuel_density}
eigenstrain_name = fuel_volumetric_strain
[]
[fuel_elasticity_tensor]
type = UO2ElasticityTensor
block = pellet
density = ${fuel_density}
temperature = temperature
matpro_youngs_modulus = true
matpro_poissons_ratio = true
[]
[fuel_creep]
type = UO2CreepUpdate
block = pellet
temperature = temperature
burnup_function = burnup
initial_grain_radius = ${initial_grain_radius}
[]
[fuel_stress]
type = ComputeSmearedCrackingStress
block = pellet
cracking_stress = ${fuel_cracking_stress}
inelastic_models = 'fuel_creep'
softening_models = exponential_softening
shear_retention_factor = 0.1
max_stress_correction = 0
cracked_elasticity_type = DIAGONAL
output_properties = crack_damage
outputs = exodus
[]
[exponential_softening]
type = ExponentialSoftening
[]
[fuel_relocation]
type = UO2RelocationEigenstrain
block = pellet
burnup_function = burnup
rod_ave_lin_pow = power_history
axial_power_profile = axial_power_factors
relocation_activation1 = 5000
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_strain
fuel_pin_geometry = pin_geometry
model_relocation_recovery = true
max_relocation_recovery_fraction = 0.5
relocation_scaling_factor = 1
volumetric_swelling_increment = vol_swell_increment
layered_average_contact_pressure = layered_average_contact_pressure
outputs = all
output_properties = 'relocation_strain recovered_relocation_strain'
[]
[fuel_thermal_expansion]
type = UO2ThermalExpansionMATPROEigenstrain
block = pellet
temperature = temperature
stress_free_temperature = ${stress_free_temperature}
eigenstrain_name = fuel_thermal_strain
[]
[fission_gas_release]
type = UO2Sifgrs
block = pellet
hydrostatic_stress = hydrostatic_stress
diff_coeff_option = TURNBULL_D1_4D2_D3
transient_option = MICROCRACKING_BURNUP
res_param_option = HETEROGENEOUS_WHITE
ig_bubble_model = NUCLEATION_RESOLUTION
ig_diff_algorithm = polypole2
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
gbs_model = true
pellet_id = pellet_id
pellet_brittle_zone = pbz
ath_model = true
rod_ave_lin_pow = power_history
axial_power_profile = axial_power_factors
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${fuel_density}
[]
[clad_thermal]
type = ZryThermal
block = clad
temperature = temperature
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
fast_neutron_fluence = fast_neutron_fluence
temperature = temperature
matpro_youngs_modulus = true
matpro_poissons_ratio = true
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'clad_zrycreep'
block = clad
[]
[clad_zrycreep]
type = ZryCreepLimbackHoppeUpdate
block = clad
temperature = temperature
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
[]
[thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
temperature = temperature
stress_free_temperature = ${stress_free_temperature}
eigenstrain_name = clad_thermal_eigenstrain
[]
[irradiation_swelling]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = stress_relief_annealed
eigenstrain_name = clad_irradiation_strain
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = ${clad_density}
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = leistikow
fuel_pin_geometry = pin_geometry
[]
[]
[Preconditioning]
[SMP]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
petsc_options = '-snes_converged_reason -ksp_converged_reason -snes_ksp_ew'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package -mat_mffd_err -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = ${petsc_options_value}
line_search = 'none'
verbose = true
l_max_its = ${l_max_its}
l_tol = ${l_tol}
nl_max_its = ${nl_max_its}
nl_rel_tol = ${nl_rel_tol}
nl_abs_tol = ${nl_abs_tol}
start_time = ${start_time}
n_startup_steps = 1
end_time = ${end_time}
dtmax = ${dtmax}
dtmin = ${dtmin}
[TimeStepper]
type = IterationAdaptiveDT
dt = 100
optimal_iterations = ${optimal_iterations}
iteration_window = ${iteration_window}
timestep_limiting_function = power_history
force_step_every_function_point = true
[]
[]
[Postprocessors]
[avg_gap_conductance]
type = ElementAverageValue
block = 'mechanical_secondary_subdomain'
variable = gap_conductance
execute_on = 'initial timestep_end'
[]
[central_fuel_temp]
type = NodalVariableValue
variable = temperature
nodeid = 3110 #Mesh dependent!
execute_on = 'initial timestep_end'
[]
[max_fuel_temp]
type = NodalExtremeValue
block = pellet
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[max_clad_temp]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[midplane_hoop_strain_inner_clad]
type = ElementalVariableValue
elementid = 209 # Mesh dependent
variable = strain_zz
execute_on = 'initial timestep_end'
[]
[midplane_hoop_stress_inner_clad]
type = ElementalVariableValue
elementid = 209 # Mesh dependent
variable = hoop_stress
execute_on = 'initial timestep_end'
[]
[midplane_contact_pressure]
type = NodalVariableValue
variable = contact_pressure
nodeid = 3141 # Mesh dependent
execute_on = 'initial timestep_end'
[]
[total_rod_integral_power]
type = ElementIntegralPower
variable = temperature
burnup_function = burnup
block = pellet
[]
[total_rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = ${scale_factor}
[]
[vol_swell_increment]
type = SideAverageIncrementTensorComponent
boundary = 10
variable = volumetric_swelling_strain
execute_on = nonlinear
[]
[midplane_clad_outer_temp]
type = NodalVariableValue
nodeid = 757 # Mesh dependent
variable = temperature
[]
[midplane_clad_inner_temp]
type = NodalVariableValue
nodeid = 747 # Mesh dependent
variable = temperature
[]
[]
[StandardLWRFuelRodOutputs]
fuel_pellet_blocks = 3
[]
[PerformanceMetricOutputs]
[]
[Outputs]
perf_graph = true
color = false
[csv]
type = CSV
file_base = '${id}_csv'
[]
[exodus]
type = Exodus
file_base = '${id}_exodus'
[]
[console]
type = Console
max_rows = 25
[]
[chkfile]
type = CSV
file_base = '${id}_chkfile'
show = 'average_burnup fission_gas_released_percentage central_fuel_temp midplane_contact_pressure'
execute_on = 'FINAL'
[]
[]
[UserObjects]
[pin_geometry]
type = FuelPinGeometry
[]
[pbz]
type = PelletBrittleZone
block = pellet
pellet_id = pellet_id
temperature = temperature
fuel_pin_geometry = pin_geometry
number_pellets = ${number_pellets}
execute_on = 'initial linear'
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
num_layers = 1
execute_on = timestep_end
boundary = 10
[]
[]
(assessment/LWR/validation/Super_Ramp/analysis/PK62/PK62_weighted_gap_VCP.i)
# This assessment case requires increasing the default automatic differentiation
# vector (AD size). At the time of writing, the default size is 50. This test
# requires, at least, 56. The minimum size required for a test to run can be
# specified in the 'assesment' file via "min_ad_size". To configure MOOSE
# to increase the AD vector size, one can use the command below in the MOOSE
# folder to expand this size, e.g., to 200:
#
# ./configure --with-derivative-type=sparse --with-ad-indexing-type=global --with-derivative-size=200
# physical constants
R = 8.3143 # J/mol*K -- THIS SHOULD BE EDITED TO USE PHYSICALCONSTANTS' VALUE
# fuel isotope fractions and fission energy
energy_per_fission = 3.28451e-11 # J/fission
isotope_fraction_U235 = 0.02985
isotope_fraction_U238 = 0.97015
isotope_fraction_Pu239 = 0.0
isotope_fraction_Pu240 = 0.0
isotope_fraction_Pu241 = 0.0
isotope_fraction_Pu242 = 0.0
# rod geometry
pellet_quantity = 29 # (-)
pellet_height = 0.010862 # m
pellet_outer_radius = 4.57e-3 # m
clad_gap_width = 75.0e-6 # m
clad_thickness = 0.725e-3 # m
clad_bot_gap_height = 1.0e-3 # m
bottom_clad_height = 15.5e-3 # m
top_clad_height = 15.5e-3 # m
clad_top_gap_height = 32.5e-3 # m
fuel_volume_ratio = 1.0 # (-)
rod_input_power_scale_factor = 0.376004 # m (rod height)
# variable and kernel initial values
initial_temperature = 293.15 # K
gravity_constant = -9.81 # m/s^2
# fuel/cladding contact
c_normal = 1e+05 # (-)
jump_distance_model = 'LANNING'
roughness_primary = 2e-6 # (-)
roughness_secondary = 1e-6 # (-)
roughness_coef = 3.2 # (-)
relocation_activation1 = 5000 # W/m
max_relocation_recovery_fraction = 0.5 # (-)
relocation_scaling_factor = 1 # (-)
# plenum parameters
initial_plenum_pressure = 2.25e6 # Pa
startup_time = 0 # s
# fuel/clad material properties
initial_fuel_density = 10420.0 # kg/m^3
initial_fuel_porosity = 0.049 # (-)
initial_grain_radius = 17.16e-6 # m
fuel_cracking_stress = 1.68e8 # Pa
fuel_shear_retention_factor = 0.1 # (-)
fuel_max_stress_correction = 0 # (-)
stress_free_temperature = 293.15 # K
cladding_density = 6550.0 # kg/m^3
# numerical options
damper_max_temperature_increment = 150.0 # K (was 30 K)
l_max_its = 35
l_tol = 1e-5
nl_max_its = 30
nl_rel_tol = 2e-6
nl_abs_tol = 1e-5
start_time = 0.0 # s
n_startup_steps = 1
dtmax = 1.0e6 # s
dtmin = 1.0 # s
Timestepper_dt = 100 # s
Timestepper_optimal_iterations = 15
Timestepper_iteration_window = 3
# irradiation history
end_time = 76630068.0 # s
# data files
power_history_data_file = 'alhr_history.csv'
axial_power_factors_data_file = 'axial_lhr_factors.csv'
clad_out_temp_data_file = 'temp_outer_clad_history.csv'
axial_temp_factors_data_file = 'axial_temp_factors.csv'
coolant_pressure_data_file = 'pressure_coolant.csv'
fast_neutron_flux_data_file = 'fast_neutron_flux.csv'
[GlobalParams]
density = ${initial_fuel_density}
displacements = 'disp_x disp_y'
order = FIRST
family = LAGRANGE
energy_per_fission = ${energy_per_fission}
volumetric_locking_correction = true
initial_porosity = ${initial_fuel_porosity}
[]
[Problem]
type = ReferenceResidualProblem
reference_vector = 'ref'
extra_tag_vectors = 'ref'
[]
[Mesh]
coord_type = RZ
patch_size = 80
patch_update_strategy = iteration
[smeared_pellet_mesh]
type = FuelPinMeshGenerator
pellet_quantity = ${pellet_quantity}
pellet_height = ${pellet_height}
pellet_outer_radius = ${pellet_outer_radius}
pellet_mesh_density = customize
nx_p = 11
ny_p = 168
clad_mesh_density = customize
nx_c = 4
ny_c = 84
clad_gap_width = ${clad_gap_width}
clad_thickness = ${clad_thickness}
clad_bot_gap_height = ${clad_bot_gap_height}
bottom_clad_height = ${bottom_clad_height}
top_clad_height = ${top_clad_height}
clad_top_gap_height = ${clad_top_gap_height}
ny_cu = 3
ny_cl = 3
elem_type = QUAD4
[]
partitioner = centroid
centroid_partitioner_direction = y
[]
[Variables]
[temperature]
initial_condition = ${initial_temperature}
block = '1 3'
[]
[disp_x]
order = FIRST
family = LAGRANGE
block = '1 3'
scaling = 1.0e3
[]
[disp_y]
order = FIRST
family = LAGRANGE
block = '1 3'
scaling = 1.0e3
[]
[]
[Functions]
[power_history]
type = PiecewiseLinear
data_file = ${power_history_data_file}
format = columns
[]
[axial_power_factors]
type = PiecewiseBilinear
data_file = ${axial_power_factors_data_file}
axis = 1
[]
[clad_out_temp]
type = PiecewiseLinear
data_file = ${clad_out_temp_data_file}
format = columns
[]
[axial_temp_factors]
type = PiecewiseBilinear
data_file = ${axial_temp_factors_data_file}
axis = 1
[]
[clad_temp_bc]
type = CompositeFunction
functions = 'clad_out_temp axial_temp_factors'
[]
[coolant_pressure]
type = PiecewiseLinear
data_file = ${coolant_pressure_data_file}
format = columns
[]
[fast_flux]
type = PiecewiseLinear
data_file = ${fast_neutron_flux_data_file}
format = columns
[]
[axial_power_constant]
type = ConstantFunction
value = 1
[]
[]
[AuxVariables]
[fast_neutron_flux]
block = clad
[]
[fast_neutron_fluence]
block = clad
[]
[grain_radius]
block = pellet
initial_condition = ${initial_grain_radius}
[]
[porosity]
order = CONSTANT
family = MONOMIAL
block = pellet
initial_condition = ${initial_fuel_porosity}
[]
[pellet_id]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[oxide_thickness]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_mag]
order = CONSTANT
family = MONOMIAL
block = clad
[]
[gas_gen_3]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[gas_grn_3]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[gas_bdr_3]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[gas_rel_3]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[bbl_bdr_2]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[prs_bbl_bdr]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[prseq_bbl_bdr]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[rad_bbl_bdr]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[GBCoverage]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[sat_coverage]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[eff_diff_coeff]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[deltav_v0_bd]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[gaseous_porosity]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[thermal_conductivity]
order = CONSTANT
family = MONOMIAL
block = pellet
[]
[gap_cond]
order = CONSTANT
family = MONOMIAL
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[volumetric_swelling_strain]
order = CONSTANT
family = MONOMIAL
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[pellets]
block = pellet
temperature = temperature
strain = FINITE
eigenstrain_names = 'fuel_relocation_strain fuel_thermal_strain
fuel_volumetric_strain'
generate_output = 'vonmises_stress hydrostatic_stress stress_xx stress_yy
stress_zz strain_xx strain_yy strain_zz'
extra_vector_tags = 'ref'
[]
[clad]
block = clad
temperature = temperature
strain = FINITE
cylindrical_axis_point1 = '0 0 0'
cylindrical_axis_point2 = '0 1 0'
eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_strain'
generate_output = 'vonmises_stress stress_xx stress_yy stress_zz
creep_strain_xx creep_strain_yy creep_strain_xy creep_strain_zz strain_xx
strain_yy strain_zz hoop_stress'
extra_vector_tags = 'ref'
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temperature
extra_vector_tags = 'ref'
block = '1 3'
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temperature
extra_vector_tags = 'ref'
block = '1 3'
[]
[heat_source]
type = NeutronHeatSource
variable = temperature
block = pellet
burnup_function = burnup
extra_vector_tags = 'ref'
[]
[gravity]
type = Gravity
variable = disp_y
value = ${gravity_constant}
[]
[]
[AuxKernels]
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
block = clad
function = fast_flux
execute_on = timestep_begin
[]
[fast_neutron_fluence]
block = clad
type = FastNeutronFluenceAux
variable = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
execute_on = timestep_begin
[]
[grain_radius]
type = GrainRadiusAux
block = pellet
variable = grain_radius
temperature = temperature
execute_on = linear
[]
[porosity]
type = PorosityAuxUO2
block = pellet
variable = porosity
execute_on = linear
[]
[pelletid]
type = PelletIdAux
block = pellet
variable = pellet_id
fuel_pin_geometry = pin_geometry
number_pellets = ${pellet_quantity}
execute_on = initial
[]
[oxi_thickness]
type = MaterialRealAux
variable = oxide_thickness
property = oxide_scale_thickness
boundary = 2
[]
[creep_strain_mag]
type = MaterialRealAux
property = effective_creep_strain
variable = creep_strain_mag
execute_on = timestep_end
[]
[fggen]
type = MaterialRealAux
variable = gas_gen_3
property = gas_concentration_generated_total
[]
[fggrn]
type = MaterialRealAux
variable = gas_grn_3
property = gas_concentration_intra_total
[]
[fgbdr]
type = MaterialRealAux
variable = gas_bdr_3
property = gas_concentration_GB_bubble_volume
[]
[fgrel]
type = MaterialRealAux
variable = gas_rel_3
property = gas_concentration_release_total
[]
[nbbl2]
type = MaterialRealAux
variable = bbl_bdr_2
property = bubble_GB_surface_density
[]
[prsbbl]
type = MaterialRealAux
variable = prs_bbl_bdr
property = bubble_GB_pressure
[]
[prseqbbl]
type = MaterialRealAux
variable = prseq_bbl_bdr
property = bubble_GB_pressure_equilibrium
[]
[radbbl]
type = MaterialRealAux
variable = rad_bbl_bdr
property = bubble_radius_GB
[]
[frcvrg]
type = MaterialRealAux
variable = GBCoverage
property = GBCoverage
[]
[stcvrg]
type = MaterialRealAux
variable = sat_coverage
property = sat_coverage
[]
[diffc]
type = MaterialRealAux
variable = eff_diff_coeff
property = eff_diff_coeff
[]
[dvv0bd]
type = MaterialRealAux
variable = deltav_v0_bd
property = deltav_v0_bubble_GB
[]
[gaspor]
type = MaterialRealAux
variable = gaseous_porosity
property = gaseous_porosity
[]
[fuel_conductivity]
type = MaterialRealAux
variable = thermal_conductivity
property = thermal_conductivity
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
block = pellet
variable = layered_average_contact_pressure
execute_on = nonlinear
user_object = layered_average_contact_pressure
[]
[volumetric_swelling_strain]
type = MaterialRealAux
variable = volumetric_swelling_strain
property = volumetric_swelling_strain
block = pellet
execute_on = nonlinear
[]
[]
[Burnup]
[burnup]
block = pellet
fuel_volume_ratio = ${fuel_volume_ratio}
rod_ave_lin_pow = power_history
axial_power_profile = axial_power_factors
num_radial = 80
num_axial = 20
isotopes = 'U235 U238 Pu239 Pu240 Pu241 Pu242'
isotope_fractions = '${isotope_fraction_U235} ${isotope_fraction_U238} ${isotope_fraction_Pu239} ${isotope_fraction_Pu240} ${isotope_fraction_Pu241} ${isotope_fraction_Pu242}'
RPF = RPF
fuel_pin_geometry = pin_geometry
[]
[]
[Contact]
[mechanical]
model = frictionless
formulation = mortar
primary = 5
secondary = 10
c_normal = ${c_normal}
[]
[]
[ThermalContactMortar]
[thermal]
secondary_variable = temperature
primary_boundary = 5
secondary_boundary = 10
initial_moles = initial_moles
gas_released = fission_gas_released
jump_distance_model = ${jump_distance_model}
plenum_pressure = plenum_pressure
roughness_primary = ${roughness_primary}
roughness_secondary = ${roughness_secondary}
roughness_coef = ${roughness_coef}
contact_pressure = mechanical_normal_lm
layer_thickness = layer_thickness_action
[]
[]
[PlenumTemperature]
[plenum_temp]
boundary = 5
inner_surfaces = 5
outer_surfaces = 10
temperature = temperature
[]
[]
[BCs]
[no_x_all]
type = DirichletBC
variable = disp_x
boundary = 12
value = 0.0
[]
[no_y_clad_bottom]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0.0
[]
[no_y_fuel_bottom]
type = DirichletBC
variable = disp_y
boundary = 1020
value = 0.0
[]
[temp]
type = FunctionDirichletBC
boundary = '1 2 3'
variable = temperature
function = clad_temp_bc
[]
[Pressure]
[coolantPressure]
boundary = '1 2 3'
function = coolant_pressure
[]
[]
[PlenumPressure]
[plenumPressure]
boundary = 9
initial_pressure = ${initial_plenum_pressure}
startup_time = ${startup_time}
R = ${R}
output_initial_moles = initial_moles
temperature = plenum_temp
volume = plenum_volume
material_input = fission_gas_released
output = plenum_pressure
[]
[]
[]
[Materials]
[fuel_thermal]
type = UO2Thermal
block = pellet
thermal_conductivity_model = NFIR
temperature = temperature
burnup_function = burnup
[]
[fuel_volumetric_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = SIFGRS
block = pellet
temperature = temperature
burnup_function = burnup
initial_fuel_density = ${initial_fuel_density}
eigenstrain_name = fuel_volumetric_strain
[]
[fuel_elasticity_tensor]
type = UO2ElasticityTensor
block = pellet
density = ${initial_fuel_density}
temperature = temperature
matpro_youngs_modulus = true
matpro_poissons_ratio = true
[]
[fuel_creep]
type = UO2CreepUpdate
block = pellet
temperature = temperature
burnup_function = burnup
initial_grain_radius = ${initial_grain_radius}
[]
[fuel_stress]
type = ComputeSmearedCrackingStress
block = pellet
cracking_stress = ${fuel_cracking_stress}
inelastic_models = 'fuel_creep'
softening_models = exponential_softening
shear_retention_factor = ${fuel_shear_retention_factor}
max_stress_correction = ${fuel_max_stress_correction}
cracked_elasticity_type = DIAGONAL
output_properties = crack_damage
outputs = exodus
[]
[exponential_softening]
type = ExponentialSoftening
[]
[fuel_relocation]
type = UO2RelocationEigenstrain
block = pellet
burnup_function = burnup
rod_ave_lin_pow = power_history
axial_power_profile = axial_power_factors
relocation_activation1 = ${relocation_activation1}
relocation_model = ESCORE_modified
eigenstrain_name = fuel_relocation_strain
fuel_pin_geometry = pin_geometry
model_relocation_recovery = true
max_relocation_recovery_fraction = ${max_relocation_recovery_fraction}
relocation_scaling_factor = ${relocation_scaling_factor}
volumetric_swelling_increment = vol_swell_increment
layered_average_contact_pressure = layered_average_contact_pressure
outputs = all
output_properties = 'relocation_strain recovered_relocation_strain'
[]
[fuel_thermal_expansion]
type = UO2ThermalExpansionMATPROEigenstrain
block = pellet
temperature = temperature
stress_free_temperature = ${stress_free_temperature}
eigenstrain_name = fuel_thermal_strain
[]
[fission_gas_release]
type = UO2Sifgrs
block = pellet
hydrostatic_stress = hydrostatic_stress
diff_coeff_option = TURNBULL_D1_4D2_D3
transient_option = MICROCRACKING_BURNUP
res_param_option = HETEROGENEOUS_WHITE
ig_bubble_model = NUCLEATION_RESOLUTION
ig_diff_algorithm = polypole2
temperature = temperature
burnup_function = burnup
grain_radius = grain_radius
gbs_model = true
pellet_id = pellet_id
pellet_brittle_zone = pbz
ath_model = true
rod_ave_lin_pow = power_history
axial_power_profile = axial_power_factors
[]
[fuel_density]
type = StrainAdjustedDensity
block = pellet
strain_free_density = ${initial_fuel_density}
[]
[clad_thermal]
type = ZryThermal
block = clad
temperature = temperature
[]
[clad_elasticity_tensor]
type = ZryElasticityTensor
block = clad
fast_neutron_fluence = fast_neutron_fluence
temperature = temperature
matpro_youngs_modulus = true
matpro_poissons_ratio = true
[]
[clad_stress]
type = ComputeMultipleInelasticStress
tangent_operator = nonlinear
inelastic_models = 'clad_zrycreep'
block = clad
[]
[clad_zrycreep]
type = ZryCreepLimbackHoppeUpdate
block = clad
temperature = temperature
fast_neutron_flux = fast_neutron_flux
fast_neutron_fluence = fast_neutron_fluence
model_irradiation_creep = true
model_primary_creep = true
model_thermal_creep = true
[]
[thermal_expansion]
type = ZryThermalExpansionMATPROEigenstrain
block = clad
temperature = temperature
stress_free_temperature = ${stress_free_temperature}
eigenstrain_name = clad_thermal_eigenstrain
[]
[irradiation_swelling]
type = ZryIrradiationGrowthEigenstrain
block = clad
fast_neutron_fluence = fast_neutron_fluence
zircaloy_material_type = stress_relief_annealed
eigenstrain_name = clad_irradiation_strain
[]
[clad_density]
type = StrainAdjustedDensity
block = clad
strain_free_density = ${cladding_density}
[]
[clad_oxidation]
type = ZryOxidation
boundary = 2
temperature = temperature
normal_operating_temperature_model = epri_kwu_ce
high_temperature_model = leistikow
fuel_pin_geometry = pin_geometry
[]
[]
#### This is the part where VCP is set up
[Preconditioning]
[vcp]
type = VCP
full = true
# condense out the normal LM from mechanical contact and the LM from thermal contact
lm_variable = 'mechanical_normal_lm thermal_thermal_lm'
primary_variable = 'disp_x temperature'
# we use LU to solve the system after condensation
# AMG and other solver types have shown convergence for simpler mechanical/thermo-mechanical contact problems but has not luck with this one
preconditioner = 'LU'
is_lm_coupling_diagonal = true
adaptive_condensation = true
[]
[]
[Dampers]
[maxincrement]
type = MaxIncrement
max_increment = ${damper_max_temperature_increment}
variable = temperature
[]
[]
[Debug]
show_var_residual_norms = true
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options = '-snes_converged_reason -ksp_converged_reason'
# IMPORTANT: we should not specify the pc_type below, otherwise the VCP setting will be overriden
petsc_options_iname = ' -mat_mffd_err -pc_factor_shift_type -pc_factor_shift_amount'
petsc_options_value = ' 1e-5 NONZERO 1e-15'
snesmf_reuse_base = false
line_search = 'none'
verbose = true
l_max_its = ${l_max_its}
l_tol = ${l_tol}
nl_max_its = ${nl_max_its}
nl_rel_tol = ${nl_rel_tol}
nl_abs_tol = ${nl_abs_tol}
start_time = ${start_time}
n_startup_steps = ${n_startup_steps}
end_time = ${end_time}
dtmax = ${dtmax}
dtmin = ${dtmin}
[TimeStepper]
type = IterationAdaptiveDT
dt = ${Timestepper_dt}
optimal_iterations = ${Timestepper_optimal_iterations}
iteration_window = ${Timestepper_iteration_window}
timestep_limiting_function = power_history
force_step_every_function_point = true
[]
[]
[Postprocessors]
[avg_gap_conductance]
type = SideAverageValue
boundary = 10
variable = gap_cond
execute_on = 'initial timestep_end'
[]
[max_fuel_temp]
type = NodalExtremeValue
block = pellet
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[max_clad_temp]
type = NodalExtremeValue
block = clad
value_type = max
variable = temperature
execute_on = 'initial timestep_end'
[]
[total_rod_integral_power]
type = ElementIntegralPower
variable = temperature
burnup_function = burnup
block = pellet
[]
[total_rod_input_power]
type = FunctionValuePostprocessor
function = power_history
scale_factor = ${rod_input_power_scale_factor}
[]
[vol_swell_increment]
type = SideAverageIncrementTensorComponent
boundary = 10
variable = volumetric_swelling_strain
execute_on = nonlinear
[]
[contact_dof]
type = ContactDOFSetSize
variable = 'mechanical_normal_lm'
subdomain = 'secondary_lower'
execute_on = 'nonlinear timestep_end'
[]
[nl_its]
type = NumNonlinearIterations
[]
[total_nl_its]
type = CumulativeValuePostprocessor
postprocessor = nl_its
[]
[l_its]
type = NumLinearIterations
[]
[total_l_its]
type = CumulativeValuePostprocessor
postprocessor = l_its
[]
[]
[StandardLWRFuelRodOutputs]
fuel_pellet_blocks = 3
[]
[Outputs]
perf_graph = true
csv = true
exodus = true
color = false
[console]
type = Console
max_rows = 25
[]
[chkfile]
type = CSV
show = 'average_burnup fission_gas_released_percentage'
execute_on = 'FINAL'
[]
[]
[VectorPostprocessors]
[temperature_post]
type = NodalValueSampler
variable = temperature
boundary = '10'
sort_by = y
[]
[contact_post]
type = NodalValueSampler
variable = mechanical_normal_lm
boundary = '10'
sort_by = y
[]
[disp_x]
type = NodalValueSampler
variable = disp_x
boundary = '10'
sort_by = y
[]
[disp_y]
type = NodalValueSampler
variable = disp_y
boundary = '10'
sort_by = y
[]
[]
[UserObjects]
[pin_geometry]
type = FuelPinGeometry
[]
[pbz]
type = PelletBrittleZone
block = pellet
pellet_id = pellet_id
temperature = temperature
fuel_pin_geometry = pin_geometry
number_pellets = ${pellet_quantity}
execute_on = 'initial linear'
[]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = mechanical_normal_lm
direction = y
num_layers = 1
execute_on = timestep_end
boundary = 10
[]
[]
(test/tests/solid_mechanics/uo2_eigenstrains/uo2_relocation/relo_recov_uo2.i)
#
# Simple regression test for relocation recovery.
#
[GlobalParams]
displacements = 'disp_x disp_y'
order = FIRST
family = LAGRANGE
[]
[Mesh]
coord_type = RZ
displacements = 'disp_x disp_y'
patch_size = 20
[mesh]
type = FileMeshGenerator
file = pellet_clad.e
[]
[]
# Define dependent variables
[Variables]
[disp_x]
[]
[disp_y]
[]
[temp]
initial_condition = 573.15
[]
[]
# Define auxillary variables
[AuxVariables]
[fast_neutron_flux]
order = FIRST
family = LAGRANGE
block = 1
[]
[fast_neutron_fluence]
order = FIRST
family = LAGRANGE
block = 1
[]
[burnup]
order = FIRST
family = LAGRANGE
[]
[layered_average_contact_pressure]
order = CONSTANT
family = MONOMIAL
[]
[gas_swell]
order = CONSTANT
family = MONOMIAL
[]
[volumetric_strain]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_rr]
order = CONSTANT
family = MONOMIAL
[]
[relocation_strain]
order = CONSTANT
family = MONOMIAL
[]
[total_strain_rr]
order = CONSTANT
family = MONOMIAL
[]
[stress_rr]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[total_strain_yy]
order = CONSTANT
family = MONOMIAL
[]
[stress_yy]
order = CONSTANT
family = MONOMIAL
[]
[elastic_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[total_strain_zz]
order = CONSTANT
family = MONOMIAL
[]
[stress_zz]
order = CONSTANT
family = MONOMIAL
[]
[creep_strain_xx]
order = CONSTANT
family = MONOMIAL
block = 1
[]
[creep_strain_yy]
order = CONSTANT
family = MONOMIAL
block = 1
[]
[creep_strain_zz]
order = CONSTANT
family = MONOMIAL
block = 1
[]
[volumetric_swelling_strain]
order = CONSTANT
family = MONOMIAL
[]
[]
# Define functions to control power and boundary conditions
[Functions]
[pressure_ramp]
type = PiecewiseLinear
x = '0 2880 4320 7920 10080 20000'
y = '1.5 16.0 16.0 5.0 20.0 20.0'
[]
[plenum_pressure]
type = PiecewiseLinear
x = '0 500 2880 4320 7920 10080 20000'
y = '1 1 2 2 12 2 2'
[]
[power_profile]
type = PiecewiseLinear
x = '0 3600 7200'
y = '0 50000 50000'
[]
[axial_peaking_factors]
type = ParsedFunction
expression = '1'
[]
[burnup]
type = PiecewiseLinear
x = '0 50000'
y = '0 0.2'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
strain = finite
[fuel]
block = 2
eigenstrain_names = 'relocation_eigenstrain volumetric_swelling fuelthermal_strain'
[]
[clad]
block = 1
[]
[]
[Kernels]
[heat]
type = HeatConduction
variable = temp
[]
[heat_ie]
type = HeatConductionTimeDerivative
variable = temp
[]
[]
[AuxKernels]
[fast_neutron_flux]
type = FastNeutronFluxAux
variable = fast_neutron_flux
factor = 3e17
block = 1
[]
[fast_neutron_fluence]
type = FastNeutronFluenceAux
variable = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
[]
[burnup]
type = FunctionAux
variable = burnup
function = burnup
execute_on = nonlinear
[]
[layered_average_contact_pressure]
type = SpatialUserObjectAux
block = 2
variable = layered_average_contact_pressure
execute_on = nonlinear
user_object = layered_average_contact_pressure
[]
[gas_swell]
type = MaterialRealAux
block = 2
variable = gas_swell
property = gas_swelling
execute_on = nonlinear
[]
[volumetric_strain]
type = RankTwoScalarAux
block = 2
rank_two_tensor = total_strain
variable = volumetric_strain
scalar_type = VolumetricStrain
execute_on = nonlinear
[]
[reloc_strain]
type = MaterialRealAux
block = 2
variable = relocation_strain
property = relocation_strain
execute_on = nonlinear
[]
[elastic_strain_rr]
type = RankTwoAux
variable = elastic_strain_rr
rank_two_tensor = elastic_strain
index_i = 0
index_j = 0
execute_on = nonlinear
[]
[total_strain_rr]
type = RankTwoAux
variable = total_strain_rr
rank_two_tensor = total_strain
index_i = 0
index_j = 0
execute_on = nonlinear
[]
[stress_rr]
type = RankTwoAux
variable = stress_rr
rank_two_tensor = stress
index_i = 0
index_j = 0
execute_on = nonlinear
[]
[elastic_strain_yy]
type = RankTwoAux
variable = elastic_strain_yy
rank_two_tensor = elastic_strain
index_i = 2
index_j = 2
execute_on = nonlinear
[]
[total_strain_yy]
type = RankTwoAux
variable = total_strain_yy
rank_two_tensor = total_strain
index_i = 2
index_j = 2
execute_on = nonlinear
[]
[stress_yy]
type = RankTwoAux
variable = stress_yy
rank_two_tensor = stress
index_i = 2
index_j = 2
execute_on = nonlinear
[]
[elastic_strain_zz]
type = RankTwoAux
variable = elastic_strain_zz
rank_two_tensor = elastic_strain
index_i = 1
index_j = 1
execute_on = nonlinear
[]
[total_strain_zz]
type = RankTwoAux
variable = total_strain_zz
rank_two_tensor = total_strain
index_i = 1
index_j = 1
execute_on = nonlinear
[]
[stress_zz]
type = RankTwoAux
variable = stress_zz
rank_two_tensor = stress
index_i = 1
index_j = 1
execute_on = nonlinear
[]
[volumetric_swelling_strain]
type = MaterialRealAux
variable = volumetric_swelling_strain
property = volumetric_swelling_strain
block = 2
execute_on = nonlinear
[]
[creep_strain_xx]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_xx
index_i = 0
index_j = 0
block = 1
execute_on = nonlinear
[]
[creep_strain_yy]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_yy
index_i = 1
index_j = 1
block = 1
execute_on = nonlinear
[]
[creep_strain_zz]
type = RankTwoAux
rank_two_tensor = creep_strain
variable = creep_strain_zz
index_i = 2
index_j = 2
block = 1
execute_on = nonlinear
[]
[]
[Contact]
# Define mechanical contact between the fuel (sideset=10) and the clad (sideset=5)
[pellet_clad_mechanical]
primary = 1
secondary = 7
formulation = kinematic
model = frictionless
penalty = 1e10
[]
[]
# Define boundary conditions
[BCs]
[no_y_clad_bottom]
type = DirichletBC
variable = disp_y
boundary = '2 4 6 8'
value = 0.0
[]
[Pressure]
[coolantPressure]
boundary = 3
factor = 1.0e6
function = pressure_ramp # use the pressure_ramp function defined above
[]
[plenum1]
boundary = 1
factor = 1.0e6
function = plenum_pressure
[]
[plenum2]
boundary = 7
factor = 0
function = plenum_pressure
[]
[]
[temp_bc]
type = DirichletBC
variable = temp
boundary = '1 2 3 4'
value = 750.0
preset = false
[]
[]
# Define material behavior models and input material property data
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 2
youngs_modulus = 1e11
poissons_ratio = 0.0
[]
[stress]
type = ComputeFiniteStrainElasticStress
block = 2
[]
[fuel_swelling]
type = UO2VolumetricSwellingEigenstrain
gas_swelling_model_type = MATPRO
block = 2
temperature = temp
burnup = burnup
total_densification = 0.01
eigenstrain_name = volumetric_swelling
initial_fuel_density = 10430.0
[]
[fuel_thermal_strain]
type = ComputeThermalExpansionEigenstrain
block = 2
thermal_expansion_coeff = 1.0e-6
temperature = temp
stress_free_temperature = 293.0
eigenstrain_name = fuelthermal_strain
[]
[thermal]
type = UO2Thermal
block = 2
thermal_conductivity_model = NFIR
temperature = temp
burnup = burnup
initial_porosity = 0.05
[]
[density]
type = StrainAdjustedDensity
block = 2
strain_free_density = 10430.0
[]
[relocation]
type = UO2RelocationEigenstrain
block = 2
burnup = burnup
diameter = 0.00984
rod_ave_lin_pow = power_profile
axial_power_profile = axial_peaking_factors
diametral_gap =0.00016
burnup_relocation_stop = 1.0e12
model_relocation_recovery = true
max_relocation_recovery_fraction = 1.0
relocation_scaling_factor = 1
volumetric_swelling_increment = vol_swell_increment
layered_average_contact_pressure = layered_average_contact_pressure
outputs = all
output_properties = 'recovered_relocation_strain'
eigenstrain_name = relocation_eigenstrain
relocation_model = ESCORE_modified
[]
[clad_thermal]
type = HeatConductionMaterial
block = 1
thermal_conductivity = 100.0
specific_heat = 1.0
[]
[clad_density]
type = StrainAdjustedDensity
block = 1
strain_free_density = 6551.0
[]
[clad_elasticity_tensor]
type = ComputeIsotropicElasticityTensor
block = 1
youngs_modulus = 1.0e11
poissons_ratio = 0.3
[]
[clad_stress]
type = ComputeMultipleInelasticStress
block = 1
tangent_operator = elastic
inelastic_models = 'zry_creep'
[]
[zry_creep]
type = ZryCreepLimbackHoppeUpdate
block = 1
temperature = temp
fast_neutron_fluence = fast_neutron_fluence
fast_neutron_flux = fast_neutron_flux
model_primary_creep = true
[]
[]
[UserObjects]
[layered_average_contact_pressure]
type = LayeredSideAverage
variable = contact_pressure
direction = y
num_layers = 1
execute_on = timestep_end
boundary = 7
force_postaux = true
[]
[]
[Executioner]
type = Transient
# PETSC options
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
# controls for linear iterations
l_max_its = 100
l_tol = 1e-3
# controls for nonlinear iterations
nl_max_its = 50
nl_rel_tol = 1e-7
nl_abs_tol = 1e-9
# time control
# Time steps set up to match halden data
start_time = 0
end_time = 20000
num_steps = 1000
# control for adaptive time steping
dt = 720
dtmax = 900
dtmin = 10
[Quadrature]
order = fifth
side_order = seventh
[]
[]
# Define postprocessors (some are required as specified above; others are optional; many others are available)
[Postprocessors]
[_dt] # time step
type = TimestepSize
[]
[rod_power]
type = FunctionValuePostprocessor
function = power_profile
scale_factor = 0.001
execute_on = timestep_end
[]
[reloc_strain]
type = ElementalVariableValue
variable = relocation_strain
elementid = 1
execute_on = timestep_end
[]
[contact_pressure]
type = ElementalVariableValue
variable = contact_pressure
elementid = 1
execute_on = nonlinear
[]
[average_contact_pressure]
type = ElementalVariableValue
variable = layered_average_contact_pressure
elementid = 1
execute_on = timestep_end
[]
[disp_x]
type = NodalVariableValue
nodeid = 2
variable = disp_x
execute_on = nonlinear
[]
[disp_y]
type = NodalVariableValue
nodeid = 2
variable = disp_y
execute_on = timestep_end
[]
[clad_crp_zz]
type = SideAverageValue
boundary = 1
variable = creep_strain_zz
execute_on = timestep_end
[]
[clad_crp_xx]
type = SideAverageValue
boundary = 1
variable = creep_strain_xx
execute_on = timestep_end
[]
[clad_creep_increment]
type = SideAverageIncrementTensorComponent
boundary = 1
variable = creep_strain_zz
execute_on = timestep_end
[]
[ave_burnup]
type = ElementAverageValue
variable = burnup
block = 2
execute_on = timestep_end
[]
[gas_swelling]
type = ElementAverageValue
variable = gas_swell
block = 2
execute_on = timestep_end
[]
[volumetric_strain]
type = ElementAverageValue
variable = volumetric_strain
block = 2
execute_on = timestep_end
[]
[elastic_strain_rr]
type = ElementAverageValue
variable = elastic_strain_rr
block = 2
execute_on = nonlinear
[]
[total_strain_rr]
type = ElementAverageValue
variable = total_strain_rr
block = 2
execute_on = nonlinear
[]
[stress_rr]
type = ElementAverageValue
variable = stress_rr
block = 2
execute_on = timestep_end
[]
[elastic_strain_yy]
type = ElementAverageValue
variable = elastic_strain_yy
block = 2
execute_on = nonlinear
[]
[total_strain_yy]
type = ElementAverageValue
variable = total_strain_yy
block = 2
execute_on = nonlinear
[]
[stress_yy]
type = ElementAverageValue
variable = stress_yy
block = 2
execute_on = timestep_end
[]
[elastic_strain_zz]
type = ElementAverageValue
variable = elastic_strain_zz
block = 2
execute_on = nonlinear
[]
[total_strain_zz]
type = ElementAverageValue
variable = total_strain_zz
block = 2
execute_on = timestep_end
[]
[stress_zz]
type = ElementAverageValue
variable = stress_zz
block = 2
execute_on = timestep_end
[]
[thermal_strain_rr]
type = DifferencePostprocessor
value1 = total_strain_rr
value2 = elastic_strain_rr
execute_on = timestep_end
[]
[thermal_strain_yy]
type = DifferencePostprocessor
value1 = total_strain_yy
value2 = elastic_strain_yy
execute_on = timestep_end
[]
[thermal_strain_zz]
type = DifferencePostprocessor
value1 = total_strain_zz
value2 = elastic_strain_zz
execute_on = timestep_end
[]
[dispx_outer]
type = NodalVariableValue
variable = disp_x
nodeid = 6
execute_on = nonlinear
[]
[vol_swell_increment]
type = SideAverageIncrementTensorComponent
boundary = 7
variable = volumetric_swelling_strain
execute_on = nonlinear
[]
[recov_strain]
type = ElementalVariableValue
variable = recovered_relocation_strain
elementid = 1
execute_on = timestep_end
[]
[]
# Define output file(s)
[Outputs]
exodus = true
csv = true
color = false
[console]
type = Console
max_rows = 25
[]
[]
[Debug]
show_var_residual = 'disp_x disp_y temp'
show_var_residual_norms = true
[]