AxialGasCommunication

Computes the axial transport of gas inside a fuel rod post rupture.

Description

AxialGasCommunication calculates movement of the fill gas from the plenum to the ballooned area of the fuel rod under Loss of Coolant Accident (LOCA) conditions after cladding rupture. As the gas moves the local gas pressure varies. The rate at which the gas is able to flow depends upon the state of the fuel between the plenum and ballooned regions. The implementation of the axial gas communication model currently makes use of the Layered1DAction capabilities in BISON. The model is based off of Khvostov et al. (2011).

The gas flow through a junction is given by

where is the dynamic viscosity Lemmon et al. (2025) of the gas in the rod, is the effective local hydraulic diameter of the rod at axial co-ordinate and is the gas volume at that co-ordinate. Using the ideal gas law and separation of variables one arrives at:

where is the number of moles passing through length , is the ideal gas constant (8.3145 J/mol-K) and is the local gas temperature. Upon integration:

where is the pressure in the plenum and is the pressure in the ballooned region

where is the rupture location and is the effective length between the plenum and the rupture location.

Since the implementation in BISON uses the Layered1D framework, the calculation is completed by computing for each layer from the plenum to the the rupture coordinate. The effective hydraulic diameter is computed based upon the state of the fuel. It is a function of the initial hydraulic diameter between the fuel and cladding starting from the base irradiation of the fuel as well as the additional pathways that form within the fuel during cladding ballooning. Parallel connection of the initial and emergent paths sum to allow for a combined total hydraulic diameter:

where is the initial gap path and is the hydraulic diameter that evolves with the fuel during the transient.

For the initial gap path:

where is the inner diameter of the deforming cladding and is the pellet diameter. For the evolving fuel component, this follows the relation:

where is the average particle size of the fragmented fuel, is the effective packing fraction of the fuel, is the initial fuel outer diameter, and is the current pellet diameter. Once the rate of moles leaving the plenum into the balloon is known, the updated local pressure can be computed using the new amount of moles.

Immediately upon rupture, the pressure in the balloon region is set to the external pressure of the rod.

Example Input Syntax

[UserObjects<<<{"href": "../../syntax/UserObjects/index.html"}>>>]
  [axial_gas_communication]
    type = AxialGasCommunication<<<{"description": "Computes the axial transport of gas inside a fuel rod post rupture.", "href": "AxialGasCommunication.html"}>>>
    direction<<<{"description": "The direction of the layers."}>>> = y
    num_layers<<<{"description": "The number of layers."}>>> = 33
    fuel_pin_geometry<<<{"description": "Name of Layered1DFuelPinGeometry or Layered2DFuelPinGeometry UserObject"}>>> = fuel_pin_geometry
    out_of_plane_strain_fuel<<<{"description": "Name of the UserObject that contains the layered average out_of_plane_strain in the fuel."}>>> = fuel_strain_yy
    out_of_plane_strain_cladding<<<{"description": "Name of the UserObject that contains the layered average out_of_plane_strain in the cladding."}>>> = cladding_strain_yy
    layered_clad_internal_volume<<<{"description": "Name of the UserObject that contains the layered internal volume."}>>> = layered_clad_internal_volume
    layered_maximum_clad_radius<<<{"description": "Name of the UserObject that contains the layered maximum cladding inner radius."}>>> = layered_maximum_clad_radius
    layered_maximum_fuel_radius<<<{"description": "Name of the UserObject that contains the layered maximum fuel outer radius."}>>> = layered_maximum_fuel_radius
    layered_fuel_temperature<<<{"description": "The name of the  UserObject that contains the layered average temperature for the fuel."}>>> = layered_fuel_average
    layered_gas_gap_temperature<<<{"description": "Name of the UserObject that contains the layered plenum temperature."}>>> = gap_layer_temperature
    gas_mixture<<<{"description": "Calculates the gas mixture in the void space of a fuel element."}>>> = gas_mixture_thermal_contact
    axial_relocation_object<<<{"description": "Name of the AxialRelocationUserObject that determines whether the fuel has crumbled."}>>> = axial_relocation
    cladding_failure_status<<<{"description": "Name of the UserObject that contains the failure status in each layer."}>>> = cladding_failure_status
    initial_pressure<<<{"description": "The initial pressure in the rod."}>>> = 4.0e6
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial TIMESTEP_END'
    #debug_output = true
  []
[]
(test/tests/axial_gas_communication/clad_displacement_only.i)

Input Parameters

  • axial_relocation_objectName of the AxialRelocationUserObject that determines whether the fuel has crumbled.

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of the AxialRelocationUserObject that determines whether the fuel has crumbled.

  • cladding_failure_statusName of the UserObject that contains the failure status in each layer.

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of the UserObject that contains the failure status in each layer.

  • fuel_pin_geometryName of Layered1DFuelPinGeometry or Layered2DFuelPinGeometry UserObject

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of Layered1DFuelPinGeometry or Layered2DFuelPinGeometry UserObject

  • gas_mixtureCalculates the gas mixture in the void space of a fuel element.

    C++ Type:VectorPostprocessorName

    Unit:(no unit assumed)

    Controllable:No

    Description:Calculates the gas mixture in the void space of a fuel element.

  • layered_clad_internal_volumeName of the UserObject that contains the layered internal volume.

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of the UserObject that contains the layered internal volume.

  • layered_fuel_temperatureThe name of the UserObject that contains the layered average temperature for the fuel.

    C++ Type:UserObjectName

    Controllable:No

    Description:The name of the UserObject that contains the layered average temperature for the fuel.

  • layered_gas_gap_temperatureName of the UserObject that contains the layered plenum temperature.

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of the UserObject that contains the layered plenum temperature.

  • layered_maximum_clad_radiusName of the UserObject that contains the layered maximum cladding inner radius.

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of the UserObject that contains the layered maximum cladding inner radius.

  • layered_maximum_fuel_radiusName of the UserObject that contains the layered maximum fuel outer radius.

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of the UserObject that contains the layered maximum fuel outer radius.

  • out_of_plane_strain_claddingName of the UserObject that contains the layered average out_of_plane_strain in the cladding.

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of the UserObject that contains the layered average out_of_plane_strain in the cladding.

  • out_of_plane_strain_fuelName of the UserObject that contains the layered average out_of_plane_strain in the fuel.

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of the UserObject that contains the layered average out_of_plane_strain in the fuel.

Required Parameters

  • absolute_tolerance1e-13Absolute convergence tolerance for Newton iteration

    Default:1e-13

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Absolute convergence tolerance for Newton iteration

  • acceptable_multiplier10Factor applied to relative and absolute tolerance for acceptable nonlinear convergence if iterations are no longer making progress

    Default:10

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Factor applied to relative and absolute tolerance for acceptable nonlinear convergence if iterations are no longer making progress

  • blockThe list of block ids (SubdomainID) that this object will be applied

    C++ Type:std::vector<SubdomainName>

    Controllable:No

    Description:The list of block ids (SubdomainID) that this object will be applied

  • damping_factor0.8Factor applied to step size if guess does not satisfy damping criteria

    Default:0.8

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Factor applied to step size if guess does not satisfy damping criteria

  • debug_outputFalseDisplays in-depth information on gas flow, moles, and Ideal Gas Law quantities for each layer.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Displays in-depth information on gas flow, moles, and Ideal Gas Law quantities for each layer.

  • distanceThe gap distance variable name

    C++ Type:std::vector<VariableName>

    Unit:(no unit assumed)

    Controllable:No

    Description:The gap distance variable name

  • equilibrium_pressure101325The pressure outside the pellet. Atomospheric pressure of 101325 Pascals is default.

    Default:101325

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The pressure outside the pellet. Atomospheric pressure of 101325 Pascals is default.

  • fluid_properties_mixName of the UserObject that calculates the fluid(gas) properties within the pellet.

    C++ Type:UserObjectName

    Controllable:No

    Description:Name of the UserObject that calculates the fluid(gas) properties within the pellet.

  • initial_pressureThe initial pressure in the rod.

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The initial pressure in the rod.

  • layer_bounding_blockList of block ids (SubdomainID) that are used to determine the upper and lower geometric bounds for all layers. If this is not specified, the ids specified in 'block' are used for this purpose.

    C++ Type:std::vector<SubdomainName>

    Controllable:No

    Description:List of block ids (SubdomainID) that are used to determine the upper and lower geometric bounds for all layers. If this is not specified, the ids specified in 'block' are used for this purpose.

  • material_inputThe name of the postprocessor(s) that holds the amount of material injected into the plenum.

    C++ Type:std::vector<PostprocessorName>

    Unit:(no unit assumed)

    Controllable:No

    Description:The name of the postprocessor(s) that holds the amount of material injected into the plenum.

  • material_input_typeFISSION_GAS_RELEASESelect type of method material is added or subtracted from gas. The choices are: FISSION_GAS_RELEASE OTHER. NOTE: Currently only fission gas is valid.

    Default:FISSION_GAS_RELEASE

    C++ Type:MultiMooseEnum

    Options:FISSION_GAS_RELEASE, OTHER

    Controllable:No

    Description:Select type of method material is added or subtracted from gas. The choices are: FISSION_GAS_RELEASE OTHER. NOTE: Currently only fission gas is valid.

  • max_damping_iterations100Maximum number of damping steps per linear iteration of nested solve

    Default:100

    C++ Type:unsigned int

    Controllable:No

    Description:Maximum number of damping steps per linear iteration of nested solve

  • max_iterations1000Maximum number of nonlinear iterations

    Default:1000

    C++ Type:unsigned int

    Controllable:No

    Description:Maximum number of nonlinear iterations

  • min_iterations3Minimum number of nonlinear iterations to execute before accepting convergence

    Default:3

    C++ Type:unsigned int

    Controllable:No

    Description:Minimum number of nonlinear iterations to execute before accepting convergence

  • refab_pressureThe pressure of fill gas at refabrication.

    C++ Type:std::vector<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:The pressure of fill gas at refabrication.

  • refab_temperatureThe temperature at refabrication.

    C++ Type:std::vector<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:The temperature at refabrication.

  • refab_timeThe time at which the plenum pressure must be reinitialized due to fuel rod refabrication.

    C++ Type:std::vector<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:The time at which the plenum pressure must be reinitialized due to fuel rod refabrication.

  • refab_typeThe type of refabrication. 0 for instantaneous reset of gas, 1 for reset with constant fraction until next refabrication

    C++ Type:std::vector<unsigned int>

    Controllable:No

    Description:The type of refabrication. 0 for instantaneous reset of gas, 1 for reset with constant fraction until next refabrication

  • refab_volumeThe gas volume at refabrication.

    C++ Type:std::vector<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:The gas volume at refabrication.

  • relative_tolerance1e-08Relative convergence tolerance for Newton iteration

    Default:1e-08

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Relative convergence tolerance for Newton iteration

  • step_size_tolerance1e-15Minimum step size of linear iterations relative to value of the solution

    Default:1e-15

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Minimum step size of linear iterations relative to value of the solution

Optional Parameters

  • allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).

    Default:False

    C++ Type:bool

    Controllable:No

    Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).

  • execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.

    Default:TIMESTEP_END

    C++ Type:ExecFlagEnum

    Options:XFEM_MARK, NONE, INITIAL, LINEAR, NONLINEAR_CONVERGENCE, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM

    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

  • average_radius1When using 'average' sampling this is how the number of values both above and below the layer that will be averaged.

    Default:1

    C++ Type:unsigned int

    Controllable:No

    Description:When using 'average' sampling this is how the number of values both above and below the layer that will be averaged.

  • cumulativeFalseWhen true the value in each layer is the sum of the values up to and including that layer

    Default:False

    C++ Type:bool

    Controllable:No

    Description:When true the value in each layer is the sum of the values up to and including that layer

  • positive_cumulative_directionTrueWhen 'cumulative' is true, whether the direction for summing the cumulative value is the positive direction or negative direction

    Default:True

    C++ Type:bool

    Controllable:No

    Description:When 'cumulative' is true, whether the direction for summing the cumulative value is the positive direction or negative direction

  • sample_typedirectHow to sample the layers. 'direct' means get the value of the layer the point falls in directly (or average if that layer has no value). 'interpolate' does a linear interpolation between the two closest layers. 'average' averages the two closest layers.

    Default:direct

    C++ Type:MooseEnum

    Options:direct, interpolate, average

    Controllable:No

    Description:How to sample the layers. 'direct' means get the value of the layer the point falls in directly (or average if that layer has no value). 'interpolate' does a linear interpolation between the two closest layers. 'average' averages the two closest layers.

Value Sampling / Aggregating Parameters

  • boundsThe 'bounding' positions of the layers i.e.: '0, 1.2, 3.7, 4.2' will mean 3 layers between those positions.

    C++ Type:std::vector<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:The 'bounding' positions of the layers i.e.: '0, 1.2, 3.7, 4.2' will mean 3 layers between those positions.

  • directionThe direction of the layers.

    C++ Type:MooseEnum

    Options:x, y, z

    Controllable:No

    Description:The direction of the layers.

  • direction_maxMaximum coordinate along 'direction' that bounds the layers

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Maximum coordinate along 'direction' that bounds the layers

  • direction_minMinimum coordinate along 'direction' that bounds the layers

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Minimum coordinate along 'direction' that bounds the layers

  • num_layersThe number of layers.

    C++ Type:unsigned int

    Controllable:No

    Description:The number of layers.

Layers Extent And Definition 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.

  • use_displaced_meshTrueWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.

Advanced Parameters

  • prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

  • use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

Material Property Retrieval Parameters

Input Files

References

  1. G. Khvostov, Wiesenack W., Zimmermann, M.A., and G. Ledergerber. Some insights into the role of axial gas flow in fuel rod behaviour during the loca based on halden tests and calculations with the FALCON-PSI code. Nuclear Engineering and Design, 241:1500–1507, 2011.[BibTeX]
  2. E. W. Lemmon, I. H. Bell, M. L. Huber, and M. O. McLinden. NIST Chemistry WebBook, NIST Standard Reference Database. Volume 69. National Institute of Standards and Technology, 2025. doi:https://doi.org/10.18434/T4D303.[BibTeX]