Axial Relocation Action System

Description

The AxialRelocation action simplifies the input file of a LWR simulation that includes axial relocation by creating the necessary AuxVariables, AuxKernels, Materials, UserObjects, and Postprocessors required for the Axial Relocation Model.

warningwarning:For LWR Use Only

This action is designed for use with only Light Water Reactor simulations run with a mesh generated by Layered1DMeshGenerator or Layered2DMeshGenerator.

Constructed Objects

The objects constructed by the AxialRelocation action are summarized in Table 1. The Generated Name column refers to the name of the object constructed by the action. Depending on the functionality of the object, the name could represent an aux variable, material, postprocessor or userobject.

Table 1: Correspondence Among Action Functionality and Moose/BISON Objects for the AxialRelocation Action

FunctionalityGenerated NameCreated ClassesAssociated Parameters
Inner clad radius aux variableinner_clad_radiusRadius
Outer fuel radius aux variableouter_fuel_radiusRadius
Pulverized aux variablepulverizedMaterialRealAux
Axial relocation strain aux variableaxial_relocation_strainMaterialRealAux
Gap conductivity aux variablegap_conductivityMaterialRealAux
Axial relocation output aux variableslayered_ + settings of axial_relocation_output_options parameterAxialRelocationOutputAuxaxial_relocation_output_options: the properties to output from the axial_relocation userobject
UserObject output aux variableslayered_average_contact_pressureSpatialUserObjectAuxoutput_userobjects: whether or not to create aux variables for the properties calculated in the user objects used in the axial relocation calculation
layered_pulverized_fuel_volumeSpatialUserObjectAux
layered_average_burnupSpatialUserObjectAux
layered_maximum_clad_radiusSpatialUserObjectAux
layered_average_gap_conductivitySpatialUserObjectAux
UO pulverization material modelUO2Pulverization or UO2PulverizationMesoscaleburnup_variable: the burnup variable
temperature_variable: the temperature variable
UO axial relocation eigenstrain material modelUO2AxialRelocationEigenstrain
Linear heat rate postprocessorrod_input_powerFunctionValuePostprocessorrod_ave_lin_pow: function containing the linear heat generation rate
Maximum linear heat rate as a function of time postprocessormaximum_powerTimeExtremeValue
Clad internal volume postprocessorclad_volumeLayeredInternalVolumePostprocessorout_of_plane_strain_variable: the out-of-plane strain variable
clad_inner_volume_addition: addition to the internal clad volume. Typically used for refabricated rods.
Fuel volume postprocessorpellet_volumeLayeredCrumbledInternalVolumePostprocessorout_of_plane_strain_variable: the out-of-plane strain variable
Gas volume postprocessorgas_volumeLinearCombinationPostprocessor
Fuel pin geometry user objectfuel_pin_geometryLayered1DFuelPinGeometry or Layered2DFuelPinGeometryformulation: the type of layered mesh being used in the analysis
Layered average contact pressure user objectlayered_average_contact_pressureLayeredSideAveragecontact_pressure_variable: the contact pressure variable (default name of contact_pressure comes from the contact modules)
axial_direction: the axial direction of the layers
num_layers: the number of layers
Layered axial relocation eigenstrain user objectlayered_eigenstrainLayeredAxialRelocationEigenstrainUserObjectpenetration_variable: the penetration variable (default name of penetration comes from the contact module)
axial_direction: the axial direction of the layers
num_layers: the number of layers
Layered pulverized volume user objectlayered_pulverized_fuel_volumeLayeredVariableIntegralaxial_direction: the axial direction of the layers
num_layers: the number of layers
Layered average burnup user objectlayered_average_burnupLayeredAverageaxial_direction: the axial direction of the layers
num_layers: the number of layers
Layered maximum inner cladding radius user objectlayered_maximum_clad_radiusLayeredNodalExtremeValueaxial_direction: the axial direction of the layers
num_layers: the number of layers
Layered clad internal volume user objectlayered_clad_internal_volumeLayeredInternalVolumeout_of_plane_strain_variable: the out-of-plane strain variable
axial_direction: the axial direction of the layers
num_layers: the number of layers
Layered average gap conductivity user objectlayered_average_gap_conductivityLayeredNodalExtremeValueaxial_direction: the axial direction of the layers
num_layers: the number of layers
Axial relocation user objectaxial_relocationAxialRelocationUserObjectaxial_direction: the axial direction of the layers
fragmentation_model: the fragmentation model to use
num_layers: the number of layers
density: as-fabricated fuel density
gap_thickness_threshold: the threshold gap thickness required for axial relocation
nonrelocatable_fuel_fraction: the fraction of the initial fuel in a layer that cannot relocate
fragment_packing_fraction: the packing fraction of large fragments of fuel
pulver_packing_fraction: the packing fraction of the smaller pulvers of fuel
pulver_characteristic_length: the characteristic length of the pulvers
tolerance: the tolerance used in the sub-newton iteration loop for determining the packing fraction
| maximum_iterations: the maximum number of sub-newton iterations allowed when determining the packing fraction
output_iteration_info: whether or not to output sub-newton iteration information

If the full thermo-mechanical coupling during axial relocation is desired, the axial_relocation_object parameter must be set equal to axial_relocation in NeutronHeatSource, UO2Thermal, and UO2ElasticityTensor. The gap_thermal_conductivity parameter in UO2Thermal must also be set to layered_average_gap_conductivity.

Figure 1 provides an illustration on how all of the different components (AuxKernels, Materials, and UserObjects) of the axial relocation system created by the AxialRelocationAction interact to predict the redistribution of fuel during Loss of Coolant Accidents.

Figure 1: A flowchart that illustrates how the different components created by the AxialRelocationAction interact with one another.

Example Input File Syntax

An example of using the AxialRelocationAction is given by:

[AxialRelocation<<<{"href": "index.html"}>>>]
  [relocation]
    rod_ave_lin_pow<<<{"description": "Rod average linear power function."}>>> = power
    axial_direction<<<{"description": "The axial direction of the model."}>>> = y
    fuel_blocks<<<{"description": "The list of names of the blocks (subdomains) for the fuel pellets."}>>> = fuel
    clad_blocks<<<{"description": "The list of names of the block (subdomain) for the cladding."}>>> = clad
    contact_pressure_variable<<<{"description": "The contact pressure variable."}>>> = contact_pressure
    out_of_plane_strain_variable<<<{"description": "The out-of-plane strain nodal variable."}>>> = strain_yy_0
    penetration_variable<<<{"description": "The penetration variable."}>>> = penetration
    clad_inner_volume_addition<<<{"description": "An additional volume to be included in the internal volume calculation. A time-dependent function is expected."}>>> = 0
    burnup_variable<<<{"description": "The burnup variable."}>>> = burnup
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
    axial_relocation_output_options<<<{"description": "The layered quantities to be output from the axial relocation userobject."}>>> = 'MASS_FRACTION PACKING_FRACTION'
    mesh_generator<<<{"description": "The name of the generator to use as the prefix for mesh meta data properties."}>>> = layered1D_mesh
  []
[]
(test/tests/axial_relocation/axial_relocation_eigenstrain_action.i)

An example of NeutronHeatSource when using full thermo-mechanical coupling is given by:

[Kernels<<<{"href": "../Kernels/index.html"}>>>]
  [heat_source]
    type = NeutronHeatSource<<<{"description": "Compute heat generation due to fission.", "href": "../../source/kernels/NeutronHeatSource.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    burnup_function<<<{"description": "Burnup function"}>>> = burnup
    axial_relocation_object<<<{"description": "Name of the AxialRelocationUserObject that determines whether the fuel has crumbled."}>>> = axial_relocation
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
  []
[]
(assessment/LWR/validation/LOCA_IFA_650/analysis/IFA_650_9/IFA_650_9_part1.i)

An example of UO2Thermal when using full thermo-mechanical coupling is given by:

[Materials<<<{"href": "../Materials/index.html"}>>>]
  [fuel_thermal]
    type = UO2Thermal<<<{"description": "Computes thermal conductivity and specific heat capacity of uranium dioxide fuel.", "href": "../../source/materials/UO2Thermal.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    thermal_conductivity_model<<<{"description": "The thermal conductivity model."}>>> = STAICU
    hbs_porosity_correction<<<{"description": "The porosity correction method for the thermal conductivity model in the high burnup structure."}>>> = KAMPF
    model_hbs_formation<<<{"description": "Flag on whether to take into account the volume fraction of high burnup structure that has formed on the thermal conductivity calculation."}>>> = true
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
    burnup_function<<<{"description": "Burnup function"}>>> = burnup
    axial_relocation_object<<<{"description": "Name of the AxialRelocationUserObject that determines whether the fuel has crumbled."}>>> = axial_relocation
    gap_thermal_conductivity<<<{"description": "The layered average thermal conductivity across the gas gap."}>>> = layered_average_gap_conductivity
  []
[]
(assessment/LWR/validation/LOCA_IFA_650/analysis/IFA_650_9/IFA_650_9_part1.i)

An example of UO2ElasticityTensor when using full thermo-mechanical coupling is given by:

[Materials<<<{"href": "../Materials/index.html"}>>>]
  [fuel_elasticity_tensor]
    type = UO2IsotropicDamageElasticityTensor<<<{"description": "Computes the isotropic elastic constants for UO2 fuel as a scaled function of the number of cracks in the fuel.", "href": "../../source/materials/solid_mechanics/UO2IsotropicDamageElasticityTensor.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    fragmentation_model<<<{"description": "The model used to calculate the number of cracks in the fuel."}>>> = BARANI
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
    rod_ave_lin_pow<<<{"description": "Average linear power function"}>>> = power_history
    axial_relocation_object<<<{"description": "Name of the AxialRelocationUserObject that determines whether the fuel has crumbled."}>>> = axial_relocation
    crumbling_scale_factor<<<{"description": "Scaling factor to apply to the Young's modulus in layers that have crumbled during axial relocation."}>>> = 0.0001
  []
[]
(assessment/LWR/validation/LOCA_IFA_650/analysis/IFA_650_9/IFA_650_9_part1.i)

Input Parameters

  • axial_directionThe axial direction of the model.

    C++ Type:MooseEnum

    Options:x, y, z

    Controllable:No

    Description:The axial direction of the model.

  • axial_relocation_output_optionsThe layered quantities to be output from the axial relocation userobject.

    C++ Type:MultiMooseEnum

    Options:MASS_FRACTION, MASS, PULVER_MASS_FRACTION, PACKING_FRACTION, RELOCATABLE_MASS, CRUMBLED_MASS, LOWER_MASS_CONSTRAINT, UPPER_MASS_CONSTRAINT, CRUMBLED_STATUS

    Controllable:No

    Description:The layered quantities to be output from the axial relocation userobject.

  • contact_pressure_variableThe contact pressure variable.

    C++ Type:VariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The contact pressure variable.

  • fragmentation_modelCOINDREAUThe model used to calculate the number of large fragments.

    Default:COINDREAU

    C++ Type:MooseEnum

    Options:COINDREAU, WALTON, BARANI

    Controllable:No

    Description:The model used to calculate the number of large fragments.

  • mesh_generatorThe name of the generator to use as the prefix for mesh meta data properties.

    C++ Type:MeshGeneratorName

    Controllable:No

    Description:The name of the generator to use as the prefix for mesh meta data properties.

  • out_of_plane_strain_variableThe out-of-plane strain nodal variable.

    C++ Type:VariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The out-of-plane strain nodal variable.

  • penetration_variableThe penetration variable.

    C++ Type:VariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The penetration variable.

  • rod_ave_lin_powRod average linear power function.

    C++ Type:FunctionName

    Unit:(no unit assumed)

    Controllable:No

    Description:Rod average linear power function.

  • temperatureCoupled temperature

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Coupled temperature

Required Parameters

  • active__all__ If specified only the blocks named will be visited and made active

    Default:__all__

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

    Controllable:No

    Description:If specified only the blocks named will be visited and made active

  • burnup_functionBurnup function

    C++ Type:FunctionName

    Unit:(no unit assumed)

    Controllable:No

    Description:Burnup function

  • burnup_variableThe burnup variable.

    C++ Type:VariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The burnup variable.

  • clad_blocksThe list of names of the block (subdomain) for the cladding.

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

    Controllable:No

    Description:The list of names of the block (subdomain) for the cladding.

  • clad_inner_volume_addition0An additional volume to be included in the internal volume calculation. A time-dependent function is expected.

    Default:0

    C++ Type:FunctionName

    Unit:(no unit assumed)

    Controllable:No

    Description:An additional volume to be included in the internal volume calculation. A time-dependent function is expected.

  • critical_gb_stress1.3e+08Critical stress at which a grain boundary fractures for the pulverization model

    Default:1.3e+08

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Critical stress at which a grain boundary fractures for the pulverization model

  • density10431As-fabricated fuel pellet density.

    Default:10431

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:As-fabricated fuel pellet density.

  • evolve_bubble_pressure_hbsTrueAllow bubble pressure to evolve from initial conditions based on evolution equations.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Allow bubble pressure to evolve from initial conditions based on evolution equations.

  • fission_rateCoupled fission rate

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Coupled fission rate

  • formulationLayered1DThe layered formulation being used in the simulation.

    Default:Layered1D

    C++ Type:MooseEnum

    Options:Layered1D, Layered2D

    Controllable:No

    Description:The layered formulation being used in the simulation.

  • fragment_packing_fraction0.69The packing fraction of large fragments of fuel.

    Default:0.69

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The packing fraction of large fragments of fuel.

  • fragment_particle_shapeTriangular_PrismThe larger particle shape used to calculate the pulverized binary packing fraction: Sphere Cube Octahedron Ideal_Cylinder Triangular_Prism

    Default:Triangular_Prism

    C++ Type:MooseEnum

    Options:Sphere, Cube, Octahedron, Ideal_Cylinder, Triangular_Prism

    Controllable:No

    Description:The larger particle shape used to calculate the pulverized binary packing fraction: Sphere Cube Octahedron Ideal_Cylinder Triangular_Prism

  • fuel_blocksThe list of names of the blocks (subdomains) for the fuel pellets.

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

    Controllable:No

    Description:The list of names of the blocks (subdomains) for the fuel pellets.

  • gap_thickness_threshold0.0002The threshold gap thickness required for axial relocation.

    Default:0.0002

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The threshold gap thickness required for axial relocation.

  • hbs_materialhbs_formationName of the HighBurnupStructureFormation block.

    Default:hbs_formation

    C++ Type:MaterialName

    Controllable:No

    Description:Name of the HighBurnupStructureFormation block.

  • id_offset0This offset is added to the generated boundary IDs

    Default:0

    C++ Type:short

    Controllable:No

    Description:This offset is added to the generated boundary IDs

  • inactiveIf specified blocks matching these identifiers will be skipped.

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

    Controllable:No

    Description:If specified blocks matching these identifiers will be skipped.

  • maximum_iterations10Maximum number of sub-newton iterations allowed when calculating the packing fraction.

    Default:10

    C++ Type:unsigned int

    Controllable:No

    Description:Maximum number of sub-newton iterations allowed when calculating the packing fraction.

  • name_prefixIf provided, prefix the built in boundary names with this string

    C++ Type:std::string

    Controllable:No

    Description:If provided, prefix the built in boundary names with this string

  • nonrelocatable_fuel_fraction0.01The fraction of the initial fuel in a layer that cannot relocate.

    Default:0.01

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The fraction of the initial fuel in a layer that cannot relocate.

  • output_iteration_infoFalseSet true to output sub-newton iteration information when calculating the packing fraction.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Set true to output sub-newton iteration information when calculating the packing fraction.

  • output_userobjectsTrueWhether or not to create AuxVariables and AuxKernels to output the results of the userobjects used in the axial relocation calculation.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Whether or not to create AuxVariables and AuxKernels to output the results of the userobjects used in the axial relocation calculation.

  • pulver_characteristic_length0.0001The characteristic length of the pulvers.

    Default:0.0001

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The characteristic length of the pulvers.

  • pulver_packing_fraction0.72The packing fraction of the smaller pulvers of fuel.

    Default:0.72

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The packing fraction of the smaller pulvers of fuel.

  • pulver_particle_shapeOctahedronThe smaller particle shape used to calculate the pulverized binary packing fraction: Sphere Cube Octahedron Ideal_Cylinder Triangular_Prism

    Default:Octahedron

    C++ Type:MooseEnum

    Options:Sphere, Cube, Octahedron, Ideal_Cylinder, Triangular_Prism

    Controllable:No

    Description:The smaller particle shape used to calculate the pulverized binary packing fraction: Sphere Cube Octahedron Ideal_Cylinder Triangular_Prism

  • pulverization_thresholdTURNBULLThe model to use for the pulverization threshold.

    Default:TURNBULL

    C++ Type:MooseEnum

    Options:TURNBULL, ANALYTICAL, PHASE_FIELD_2D, PHASE_FIELD_3D, PHASE_FIELD_2D_MULTISCALE

    Controllable:No

    Description:The model to use for the pulverization threshold.

  • residual_gap_size2e-06The residual gap remaining in layers that have crumbled.

    Default:2e-06

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The residual gap remaining in layers that have crumbled.

  • scalar_critical_pressure1Multiplicative scalar to adjust the value of the critical fragmentation pressure in the pulverization model

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Multiplicative scalar to adjust the value of the critical fragmentation pressure in the pulverization model

  • tolerance1e-10Absolute convergence tolerance for the sub-newton iteration used to calculate the packing fraction.

    Default:1e-10

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Absolute convergence tolerance for the sub-newton iteration used to calculate the packing fraction.

  • translation_vector0 0 0The value to use for the translation. The xyz coordinates are applied in each direction respectively.

    Default:0 0 0

    C++ Type:libMesh::VectorValue<double>

    Unit:(no unit assumed)

    Controllable:No

    Description:The value to use for the translation. The xyz coordinates are applied in each direction respectively.

  • use_automatic_differentiationFalseFlag to use automatic differentiation (AD) objects when possible

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Flag to use automatic differentiation (AD) objects when possible

  • use_axial_gas_communicationFalseUsed when the axial gas communication model is run with relocation.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Used when the axial gas communication model is run with relocation.

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.

Advanced Parameters

Associated Actions

Available Actions

  • Bison App
  • AxialRelocationActionSets up AuxVariables, AuxKernels, Materials, Postprocessors, and Userobjects for simulations containing axial fuel relocation.