Plenum Pressure
Overview
An important feature in a fuel performance code is the ability to compute an internal gas pressure. This is necessary for computing the plenum pressure, for example.
Starting with the ideal gas law, the procedure is as follows. where is the pressure (Pa), is volume (m), is the amount of material in the volume (moles), is the universal gas constant (8.314472 J/K/mol), and is temperature (K).
Demonstration
As a demonstration, we take an axisymmetric mesh composed of two blocks. One block has an interior cavity of volume 8 m. A second block is inside with a volume of 1 m, giving a net volume of 7 m. Temperature is defined as Also,
K
Pa
This gives
At = 1 s, = 200 Pa. Bison computes this value exactly.
Input Syntax
#
# Cavity Pressure Test
#
# This test is designed to compute an internal pressure based on
# p = n * R * T / V
# where
# p is the pressure
# n is the amount of material in the volume (moles)
# R is the universal gas constant
# T is the temperature
# V is the volume
#
# The mesh is composed of one block (2) with an interior cavity of volume 8.
# Block 1 sits in the cavity and has a volume of 1. Thus, the total
# initial volume is 7.
# The test adjusts T in the following way:
# T => T0 + beta * t
# with
# beta = T0
# T0 = 240.54443866068704
# V0 = 7
# n0 = f(p0)
# p0 = 100
# R = 8.314472 J * K^(-1) * mol^(-1)
#
# So, n0 = p0 * V0 / R / T0 = 100 * 7 / 8.314472 / 240.544439
# = 0.35
#
# At t = 1, p = 200.
#
[GlobalParams<<<{"href": "../../../syntax/GlobalParams/index.html"}>>>]
displacements = 'disp_r disp_z'
[]
[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
coord_type = RZ
[mesh]
type = FuelPinMeshGenerator<<<{"description": "Creates a 2D-RZ axisymmetric mesh of a fuel rod.", "href": "../../../source/meshgenerators/FuelPinMeshGenerator.html"}>>>
pellet_quantity<<<{"description": "Number of pellets in smeared mesh"}>>> = 1
pellet_outer_radius<<<{"description": "Pellet outer radius"}>>> = 0.5
pellet_height<<<{"description": "Pellet height"}>>> = 1.2732395447351628
clad_gap_width<<<{"description": "Gap between outer radius of pellet and inside surface of cladding"}>>> = 0.5
clad_thickness<<<{"description": "Thickness of cladding side wall"}>>> = 0.5
bottom_clad_height<<<{"description": "Height of bottom cladding wall."}>>> = 0.5
top_clad_height<<<{"description": "Height of top cladding wall."}>>> = 0.5
clad_top_gap_height<<<{"description": "Gap between top of pellet and inside top surface of cladding"}>>> = 0.6366197723675814
clad_bot_gap_height<<<{"description": "Gap between bottom of pellet and inside bottom surface of cladding"}>>> = 0.6366197723675814
nx_p<<<{"description": "number of fuel elements in radial direction"}>>> = 1
ny_p<<<{"description": "Number of fuel elements in axial direction"}>>> = 1
nx_c<<<{"description": "Number of cladding elements in radial direction."}>>> = 1
ny_c<<<{"description": "Number of cladding elements in axial direction."}>>> = 1
ny_cu<<<{"description": "Number of cladding elements in upper plug in axial direction."}>>> = 1
ny_cl<<<{"description": "Number of cladding elements in lower plug in axial direction."}>>> = 1
pellet_mesh_density<<<{"description": "Sets the mesh density of the pellet (really_coarse coarse medium fine customize)."}>>> = customize
clad_mesh_density<<<{"description": "Sets the mesh density of the cladding (coarse, medium, fine)"}>>> = customize
[]
[]
[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
[temperature]
type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../source/functions/PiecewiseLinear.html"}>>>
x<<<{"description": "The abscissa values"}>>> = '0 1'
y<<<{"description": "The ordinate values"}>>> = '1 2'
scale_factor<<<{"description": "Scale factor to be applied to the ordinate values"}>>> = 240.54443866068704
[]
[]
[Variables<<<{"href": "../../../syntax/Variables/index.html"}>>>]
[disp_r]
[]
[disp_z]
[]
[temp]
initial_condition<<<{"description": "Specifies a constant initial condition for this variable"}>>> = 240.54443866068704
[]
[]
[Physics<<<{"href": "../../../syntax/Physics/index.html"}>>>/SolidMechanics<<<{"href": "../../../syntax/Physics/SolidMechanics/index.html"}>>>/QuasiStatic<<<{"href": "../../../syntax/Physics/SolidMechanics/QuasiStatic/index.html"}>>>]
[all]
strain<<<{"description": "Strain formulation"}>>> = finite
[]
[]
[Kernels<<<{"href": "../../../syntax/Kernels/index.html"}>>>]
[heat]
type = Diffusion<<<{"description": "The Laplacian operator ($-\\nabla \\cdot \\nabla u$), with the weak form of $(\\nabla \\phi_i, \\nabla u_h)$.", "href": "../../../source/kernels/Diffusion.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temp
use_displaced_mesh<<<{"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."}>>> = true
[]
[]
[BCs<<<{"href": "../../../syntax/NuclearMaterials/BCs/index.html"}>>>]
[no_x]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_r
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = '9 12'
value<<<{"description": "Value of the BC"}>>> = 0.0
[]
[no_y]
type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_z
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = '9 12'
value<<<{"description": "Value of the BC"}>>> = 0.0
[]
[temperatureInterior]
type = FunctionDirichletBC<<<{"description": "Imposes the essential boundary condition $u=g(t,\\vec{x})$, where $g$ is a (possibly) time and space-dependent MOOSE Function.", "href": "../../../source/bcs/FunctionDirichletBC.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 9
function<<<{"description": "The forcing function."}>>> = temperature
variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temp
[]
[CavityPressure<<<{"href": "../../../syntax/BCs/CavityPressure/index.html"}>>>]
[1]
boundary<<<{"description": "The list of boundary IDs from the mesh where the pressure will be applied"}>>> = 9
initial_pressure<<<{"description": "The initial pressure in the cavity. If not given, a zero initial pressure will be used."}>>> = 100
R<<<{"description": "The universal gas constant for the units used."}>>> = 8.314472
temperature<<<{"description": "The name of the average temperature postprocessor value."}>>> = aveTempInterior
volume<<<{"description": "The name of the postprocessor(s) that holds the value of the internal volume in the cavity"}>>> = internalVolume
startup_time<<<{"description": "The amount of time during which the pressure will ramp from zero to its true value."}>>> = 0.5
output<<<{"description": "The name to use for the cavity pressure value"}>>> = bison_ppress
[]
[]
[]
[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
[elastic_tensor1]
type = ComputeIsotropicElasticityTensor<<<{"description": "Compute a constant isotropic elasticity tensor.", "href": "../../../source/materials/ComputeIsotropicElasticityTensor.html"}>>>
youngs_modulus<<<{"description": "Young's modulus of the material."}>>> = 1e6
poissons_ratio<<<{"description": "Poisson's ratio for the material."}>>> = 0.3
[]
[stress]
type = ComputeFiniteStrainElasticStress<<<{"description": "Compute stress using elasticity for finite strains", "href": "../../../source/materials/ComputeFiniteStrainElasticStress.html"}>>>
[]
[]
[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
type = Transient
petsc_options_iname = '-pc_type -sub_pc_type'
petsc_options_value = 'asm lu'
nl_abs_tol = 1e-10
l_max_its = 20
dt = 1.0
end_time = 1.0
[]
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
[internalVolume]
type = InternalVolume<<<{"description": "Computes the volume of an enclosed area by performing an integral over a user-supplied boundary.", "href": "../../../source/postprocessors/InternalVolume.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 9
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial linear'
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[aveTempInterior]
type = SideAverageValue<<<{"description": "Computes the average value of a variable on a sideset. Note that this cannot be used on the centerline of an axisymmetric model.", "href": "../../../source/postprocessors/SideAverageValue.html"}>>>
boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 9
variable<<<{"description": "The name of the variable which this postprocessor integrates"}>>> = temp
execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial linear'
outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
[]
[analytical_ppress]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
pp_names<<<{"description": "Post-processors arguments"}>>> = ''
constant_names<<<{"description": "Vector of constants used in the parsed function (use this for kB etc.)"}>>> = 'n0 T0 R V'
constant_expressions<<<{"description": "Vector of values for the constants in constant_names (can be an FParser expression)"}>>> = '0.35 240.54443866068704 8.314472 7'
expression<<<{"description": "function expression"}>>> = 'T := 2*T0;
n0*R*T/V'
[]
[error]
type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
expression<<<{"description": "function expression"}>>> = '(bison_ppress-analytical_ppress)/analytical_ppress*100'
pp_names<<<{"description": "Post-processors arguments"}>>> = 'bison_ppress analytical_ppress'
[]
[]
[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
[](assessment/verification/Other/plenum_pressure/rz.i)