- axial_power_profileAxial power peaking function.
C++ Type:FunctionName
Unit:(no unit assumed)
Controllable:No
Description:Axial power peaking function.
LayeredAxialPowerProfile
Computes an axial power profile that is insensitive to the number of layers of fuel.
Description
The axial power profile is generally nonlinear, and the positions and thicknesses of fuel slices in a layered 1D analysis may vary considerably. This being the case, a simple approach of retrieving the power profile only at the slice centroids can potentially introduce unacceptable error into the calculation of rod power.
The LayeredAxialPowerProfile function reduces this error considerably by integrating the axial power function at each slice accurately. The resulting value for a given slice is supplied when other models in BISON require the axial power factor at that slice.
Example Input Syntax
[Functions<<<{"href": "../../syntax/Functions/index.html"}>>>]
[axial_profile]
type = LayeredAxialPowerProfile<<<{"description": "Computes an axial power profile that is insensitive to the number of layers of fuel.", "href": "LayeredAxialPowerProfile.html"}>>>
axial_power_profile<<<{"description": "Axial power peaking function."}>>> = raw_axial_profile
fuel_pin_geometry<<<{"description": "Name of the UserObject that reads the pin geometry from the mesh."}>>> = pin_geometry
[]
[](test/tests/layered_1D/layered_axial_profile.i)Input Parameters
- fuel_pin_geometryName of the UserObject that reads the pin geometry from the mesh.
C++ Type:UserObjectName
Controllable:No
Description:Name of the UserObject that reads the pin geometry from the mesh.
- maximum_increment0.02Maximum height of subdivision in each slice.
Default:0.02
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:Maximum height of subdivision in each slice.
- minimum_number_increments10Minimum number of subdivisions in each slice.
Default:10
C++ Type:unsigned int
Controllable:No
Description:Minimum number of subdivisions in each slice.
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:No
Description:Set the enabled status of the MooseObject.
Advanced Parameters
Input Files
(test/tests/layered_1D/layered_axial_profile.i)
#
# This test compares the integrated axial profile using the LayeredAxialPowerProfile
# function and the raw axial profile function. The LayeredAxialPowerProfile
# function returns values very close to 1.0 in every case, whereas the raw data may
# not be integrated accurately.
#
[GlobalParams]
order = SECOND
family = LAGRANGE
displacements = disp_x
out_of_plane_strain = strain_yy
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
fuel_height = 4.0
plenum_height = 0.2
slices_per_block = 2
pellet_outer_radius = 0.2
clad_gap_width = 0.2
clad_thickness = 0.2
pellet_bottom_coor = 0
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 2
nx_c = 1
bx_p = 2
[]
[]
[Variables]
[disp_x]
[]
[]
[AuxVariables]
[strain_yy]
[]
[axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[raw_axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[disp_x_fuel]
type = ParsedFunction
expression = t*0.01
[]
[zero]
type = ParsedFunction
expression = '0'
[]
[raw_axial_profile]
type = ParsedFunction
expression = 'if(t<=1.0, 1.0,
if(t<=2.0, 1.0+0.05*(y-2.0),
if(t<=3.0, 1.0+0.1*cos(pi/2.0*(y-1.0)),
if(t<=4.0, 1.0+0.01*if(y<3,8*y-15,9.0),
if(t<=5.0, 1.0-0.2*cos(2.5*(y-2.0))+0.5*(y-2.0)+0.04*sin(5.0),
0)))))'
[]
[axial_profile]
type = LayeredAxialPowerProfile
axial_power_profile = raw_axial_profile
fuel_pin_geometry = pin_geometry
[]
[]
[Kernels]
[rz]
type = StressDivergenceRZTensors
variable = disp_x
component = 0
[]
[]
[AuxKernels]
[strain_yy]
type = FunctionAux
variable = strain_yy
function = zero
[]
[axial_profile]
type = FunctionAux
variable = axial_profile
function = axial_profile
[]
[raw_axial_profile]
type = FunctionAux
variable = raw_axial_profile
function = raw_axial_profile
[]
[]
[BCs]
[zero_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 12
function = zero
[]
[clad]
type = DirichletBC
variable = disp_x
boundary = 5
value = 0
[]
[fuel]
type = FunctionDirichletBC
variable = disp_x
boundary = 10
function = disp_x_fuel
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 10
poissons_ratio = 0
[]
[strain]
type = ComputeAxisymmetric1DIncrementalStrain
[]
[stress]
type = ComputeStrainIncrementBasedStress
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[]
[Postprocessors]
[integrated_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[integrated_raw_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = raw_axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_abs_tol = 1e-8
end_time = 5
dt = 1
[]
[Outputs]
exodus = true
[]
(test/tests/layered2D/layered_axial_profile.i)
#
# This test compares the integrated axial profile using the LayeredAxialPowerProfile
# function and the raw axial profile function. The LayeredAxialPowerProfile
# function returns values very close to 1.0 in every case, whereas the raw data may
# not be integrated accurately.
#
[GlobalParams]
order = SECOND
family = LAGRANGE
displacements = 'disp_x disp_y disp_z'
out_of_plane_strain = strain_yy
[]
[Mesh]
[layered2D_mesh]
type = Layered2DMeshGenerator
axial_direction = y
num_sectors = 10
fuel_height = 4.0
plenum_height = 0.2
slices_per_block = 2
pellet_outer_radius = 0.2
clad_gap_width = 0.2
clad_thickness = 0.2
pellet_bottom_coor = 0
pellet_mesh_density = customize
clad_mesh_density = customize
nr_p = 2
nr_c = 1
[]
[]
[Variables]
[disp_x]
[]
[disp_z]
[]
[]
[AuxVariables]
[disp_y]
[]
[strain_yy]
[]
[axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[raw_axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[disp_fuel]
type = ParsedFunction
expression = t*0.01
[]
[zero]
type = ParsedFunction
expression = '0'
[]
[raw_axial_profile]
type = ParsedFunction
expression = 'if(t<=1.0, 1.0,
if(t<=2.0, 1.0+0.05*(y-2.0),
if(t<=3.0, 1.0+0.1*cos(pi/2.0*(y-1.0)),
if(t<=4.0, 1.0+0.01*if(y<3,8*y-15,9.0),
if(t<=5.0, 1.0-0.2*cos(2.5*(y-2.0))+0.5*(y-2.0)+0.04*sin(5.0),
0)))))'
[]
[axial_profile]
type = LayeredAxialPowerProfile
axial_power_profile = raw_axial_profile
fuel_pin_geometry = pin_geometry
[]
[]
[Kernels]
[disp_x]
type = StressDivergenceTensors
out_of_plane_direction = y
variable = disp_x
component = 0
[]
[disp_z]
type = StressDivergenceTensors
out_of_plane_direction = y
variable = disp_z
component = 2
[]
[]
[AuxKernels]
[strain_yy]
type = FunctionAux
variable = strain_yy
function = zero
[]
[axial_profile]
type = FunctionAux
variable = axial_profile
function = axial_profile
[]
[raw_axial_profile]
type = FunctionAux
variable = raw_axial_profile
function = raw_axial_profile
[]
[]
[BCs]
[zero_x]
type = FunctionDirichletBC
variable = disp_x
boundary = bottom
function = zero
[]
[zero_z]
type = FunctionDirichletBC
variable = disp_z
boundary = bottom
function = zero
[]
[clad_x]
type = DirichletBC
variable = disp_x
boundary = 5
value = 0
[]
[clad_z]
type = DirichletBC
variable = disp_z
boundary = 5
value = 0
[]
[fuel_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 10
function = disp_fuel
[]
[fuel_z]
type = FunctionDirichletBC
variable = disp_z
boundary = 10
function = disp_fuel
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 10
poissons_ratio = 0
[]
[strain]
type = ComputePlaneIncrementalStrain
out_of_plane_direction = y
[]
[stress]
type = ComputeStrainIncrementBasedStress
[]
[]
[UserObjects]
[pin_geometry]
type = Layered2DFuelPinGeometry
mesh_generator = layered2D_mesh
[]
[]
[Postprocessors]
[integrated_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[integrated_raw_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = raw_axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_abs_tol = 1e-8
end_time = 5
dt = 1
[]
[Outputs]
exodus = true
[]
(test/tests/layered2D/layered_axial_profile_nonuniform.i)
#
# This test compares the integrated axial profile using the LayeredAxialPowerProfile
# function and the raw axial profile function. The LayeredAxialPowerProfile
# function returns values very close to 1.0 in every case, whereas the raw data may
# not be integrated accurately.
#
[GlobalParams]
order = SECOND
family = LAGRANGE
displacements = 'disp_x disp_y disp_z'
out_of_plane_strain = strain_yy
[]
[Mesh]
[layered2D_mesh]
type = Layered2DMeshGenerator
axial_direction = y
uniform_slice_heights = false
slice_heights = '0.25 0.5 1.25 2.0 0.2'
slices_per_block = 4
num_sectors = 10
plenum_height = 0.2
pellet_outer_radius = 0.2
clad_gap_width = 0.2
clad_thickness = 0.2
pellet_bottom_coor = 0
pellet_mesh_density = customize
clad_mesh_density = customize
nr_p = 2
nr_c = 1
[]
[]
[Variables]
[disp_x]
[]
[disp_z]
[]
[]
[AuxVariables]
[disp_y]
[]
[strain_yy]
[]
[axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[raw_axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[disp_fuel]
type = ParsedFunction
expression = t*0.01
[]
[zero]
type = ParsedFunction
expression = '0'
[]
[raw_axial_profile]
type = ParsedFunction
expression = 'if(t<=1.0, 1.0,
if(t<=2.0, 1.0+0.05*(y-2.0),
if(t<=3.0, 1.0+0.1*cos(pi/2.0*(y-1.0)),
if(t<=4.0, 1.0+0.01*if(y<3,8*y-15,9.0),
if(t<=5.0, 1.0-0.2*cos(2.5*(y-2.0))+0.5*(y-2.0)+0.04*sin(5.0),
0)))))'
[]
[axial_profile]
type = LayeredAxialPowerProfile
axial_power_profile = raw_axial_profile
fuel_pin_geometry = pin_geometry
[]
[]
[Kernels]
[disp_x]
type = StressDivergenceTensors
out_of_plane_direction = y
variable = disp_x
component = 0
[]
[disp_z]
type = StressDivergenceTensors
out_of_plane_direction = y
variable = disp_z
component = 2
[]
[]
[AuxKernels]
[strain_yy]
type = FunctionAux
variable = strain_yy
function = zero
[]
[axial_profile]
type = FunctionAux
variable = axial_profile
function = axial_profile
[]
[raw_axial_profile]
type = FunctionAux
variable = raw_axial_profile
function = raw_axial_profile
[]
[]
[BCs]
[zero_x]
type = FunctionDirichletBC
variable = disp_x
boundary = bottom
function = zero
[]
[zero_z]
type = FunctionDirichletBC
variable = disp_z
boundary = bottom
function = zero
[]
[clad_x]
type = DirichletBC
variable = disp_x
boundary = 5
value = 0
[]
[clad_z]
type = DirichletBC
variable = disp_z
boundary = 5
value = 0
[]
[fuel_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 10
function = disp_fuel
[]
[fuel_z]
type = FunctionDirichletBC
variable = disp_z
boundary = 10
function = disp_fuel
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 10
poissons_ratio = 0
[]
[strain]
type = ComputePlaneIncrementalStrain
out_of_plane_direction = y
[]
[stress]
type = ComputeStrainIncrementBasedStress
[]
[]
[UserObjects]
[pin_geometry]
type = Layered2DFuelPinGeometry
mesh_generator = layered2D_mesh
[]
[]
[Postprocessors]
[integrated_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[integrated_raw_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = raw_axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_abs_tol = 1e-8
end_time = 5
dt = 1
[]
[Outputs]
exodus = true
[]
(test/tests/layered_1D/layered_axial_profile_nonuniform.i)
#
# This test compares the integrated axial profile using the LayeredAxialPowerProfile
# function and the raw axial profile function. The LayeredAxialPowerProfile
# function returns values very close to 1.0 in every case, whereas the raw data may
# not be integrated accurately.
#
[GlobalParams]
order = SECOND
family = LAGRANGE
displacements = disp_x
out_of_plane_strain = strain_yy
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
uniform_slice_heights = false
slice_heights = '0.25 0.5 1.25 2.0 0.2'
slices_per_block = 4
pellet_outer_radius = 0.2
clad_gap_width = 0.2
clad_thickness = 0.2
pellet_bottom_coor = 0
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 2
nx_c = 1
bx_p = 2
[]
[]
[Variables]
[disp_x]
[]
[]
[AuxVariables]
[strain_yy]
[]
[axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[raw_axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[disp_x_fuel]
type = ParsedFunction
expression = t*0.01
[]
[zero]
type = ParsedFunction
expression = '0'
[]
[raw_axial_profile]
type = ParsedFunction
expression = 'if(t<=1.0, 1.0,
if(t<=2.0, 1.0+0.05*(y-2.0),
if(t<=3.0, 1.0+0.1*cos(pi/2.0*(y-1.0)),
if(t<=4.0, 1.0+0.01*if(y<3,8*y-15,9.0),
if(t<=5.0, 1.0-0.2*cos(2.5*(y-2.0))+0.5*(y-2.0)+0.04*sin(5.0),
0)))))'
[]
[axial_profile]
type = LayeredAxialPowerProfile
axial_power_profile = raw_axial_profile
fuel_pin_geometry = pin_geometry
[]
[]
[Kernels]
[rz]
type = StressDivergenceRZTensors
variable = disp_x
component = 0
[]
[]
[AuxKernels]
[strain_yy]
type = FunctionAux
variable = strain_yy
function = zero
[]
[axial_profile]
type = FunctionAux
variable = axial_profile
function = axial_profile
[]
[raw_axial_profile]
type = FunctionAux
variable = raw_axial_profile
function = raw_axial_profile
[]
[]
[BCs]
[zero_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 12
function = zero
[]
[clad]
type = DirichletBC
variable = disp_x
boundary = 5
value = 0
[]
[fuel]
type = FunctionDirichletBC
variable = disp_x
boundary = 10
function = disp_x_fuel
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 10
poissons_ratio = 0
[]
[strain]
type = ComputeAxisymmetric1DIncrementalStrain
[]
[stress]
type = ComputeStrainIncrementBasedStress
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[]
[Postprocessors]
[integrated_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[integrated_raw_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = raw_axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_abs_tol = 1e-8
end_time = 5
dt = 1
[]
[Outputs]
exodus = true
[]
(test/tests/layered_1D/layered_axial_profile.i)
#
# This test compares the integrated axial profile using the LayeredAxialPowerProfile
# function and the raw axial profile function. The LayeredAxialPowerProfile
# function returns values very close to 1.0 in every case, whereas the raw data may
# not be integrated accurately.
#
[GlobalParams]
order = SECOND
family = LAGRANGE
displacements = disp_x
out_of_plane_strain = strain_yy
[]
[Mesh]
coord_type = RZ
[layered1D_mesh]
type = Layered1DMeshGenerator
fuel_height = 4.0
plenum_height = 0.2
slices_per_block = 2
pellet_outer_radius = 0.2
clad_gap_width = 0.2
clad_thickness = 0.2
pellet_bottom_coor = 0
pellet_mesh_density = customize
clad_mesh_density = customize
nx_p = 2
nx_c = 1
bx_p = 2
[]
[]
[Variables]
[disp_x]
[]
[]
[AuxVariables]
[strain_yy]
[]
[axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[raw_axial_profile]
order = CONSTANT
family = MONOMIAL
[]
[]
[Functions]
[disp_x_fuel]
type = ParsedFunction
expression = t*0.01
[]
[zero]
type = ParsedFunction
expression = '0'
[]
[raw_axial_profile]
type = ParsedFunction
expression = 'if(t<=1.0, 1.0,
if(t<=2.0, 1.0+0.05*(y-2.0),
if(t<=3.0, 1.0+0.1*cos(pi/2.0*(y-1.0)),
if(t<=4.0, 1.0+0.01*if(y<3,8*y-15,9.0),
if(t<=5.0, 1.0-0.2*cos(2.5*(y-2.0))+0.5*(y-2.0)+0.04*sin(5.0),
0)))))'
[]
[axial_profile]
type = LayeredAxialPowerProfile
axial_power_profile = raw_axial_profile
fuel_pin_geometry = pin_geometry
[]
[]
[Kernels]
[rz]
type = StressDivergenceRZTensors
variable = disp_x
component = 0
[]
[]
[AuxKernels]
[strain_yy]
type = FunctionAux
variable = strain_yy
function = zero
[]
[axial_profile]
type = FunctionAux
variable = axial_profile
function = axial_profile
[]
[raw_axial_profile]
type = FunctionAux
variable = raw_axial_profile
function = raw_axial_profile
[]
[]
[BCs]
[zero_x]
type = FunctionDirichletBC
variable = disp_x
boundary = 12
function = zero
[]
[clad]
type = DirichletBC
variable = disp_x
boundary = 5
value = 0
[]
[fuel]
type = FunctionDirichletBC
variable = disp_x
boundary = 10
function = disp_x_fuel
[]
[]
[Materials]
[elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 10
poissons_ratio = 0
[]
[strain]
type = ComputeAxisymmetric1DIncrementalStrain
[]
[stress]
type = ComputeStrainIncrementBasedStress
[]
[]
[UserObjects]
[pin_geometry]
type = Layered1DFuelPinGeometry
mesh_generator = layered1D_mesh
[]
[]
[Postprocessors]
[integrated_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[integrated_raw_axial_profile]
type = LayeredSideAverageValuePostprocessor
boundary = 8
variable = raw_axial_profile
fuel_pin_geometry = pin_geometry
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = 'lu superlu_dist'
line_search = 'none'
l_max_its = 50
l_tol = 8e-3
nl_max_its = 15
nl_abs_tol = 1e-8
end_time = 5
dt = 1
[]
[Outputs]
exodus = true
[]