UPuZr Lanthanide Wastage

Calculates wastage thickness due to reactions between lanthanides and stainless steel cladding materials.

Description

The UPuZrLanthanideWastage class is used to calculate the wastage thickness due to reactions between lanthanides and stainless steel cladding materials. It is part of a mechanistic fuel-cladding chemical interaction (FCCI) modeling framework. See UPuZrLanthanideDiffusivity and UPuZrLanthanideFlux for more information.

The wastage layer velocity is taken from Hirschhorn et al. (2025) and is given by: (1)

where is the stoichiometry factor, is the molar volume of the unreacted cladding, is the geometry factor, is the thickness variability factor, and is the lanthanide flux normal to the fuel surface. The model was derived for and is intended to be applied in 2D axisymmetric simulations only. The stoichiometry factor is derived by assuming that the wastage layer is composed of an intermetallic phase with the form (Fe,Cr,Ni)Ln, where Ln denotes lanthanides.

The geometry factor is applied to account for the reduction in lanthanide flux between the outer surface of the fuel and the outer surface of the wastage layer on the undeformed mesh. It is given by: (2)

where is the initial radius of the fuel, is the initial gap thickness, and is the wastage layer thickness.

The thickness variability factor is applied to account for azimuthal variations in the thickness of the wastage layer at a given height in a fuel rod. It is given by: (3)

where is the maximum wastage layer thickness observed at a given fuel rod height, and is the thickness of an azimuthally uniform wastage layer that could form at that height.

Finally, wastage accumulates incrementally with each time step , spanned by according to: (4)

See Hirschhorn et al. (2025) for more information.

FCCI Modeling Example

An example of the full mechanistic FCCI modeling framework is provided below. Lanthanide conservation, including production due to fission, transport through the fuel, and optional radioactive decay is described by: (5)

where is the fission rate density, is the effective lanthanide fission yield, and is the effective lanthanide decay constant. These physics can be modeled using existing BISON classes:

[Kernels<<<{"href": "../../syntax/Kernels/index.html"}>>>]
  [c_dt]
    type = TimeDerivative<<<{"description": "The time derivative operator with the weak form of $(\\psi_i, \\frac{\\partial u_h}{\\partial t})$.", "href": "../kernels/TimeDerivative.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = c
  []
[]
(examples/metal_fuel/mechanistic_fcci/fcci.i)
[Kernels<<<{"href": "../../syntax/Kernels/index.html"}>>>]
  [c_source]
    type = NeutronHeatSource<<<{"description": "Compute heat generation due to fission.", "href": "../kernels/NeutronHeatSource.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = ${fuel_block_name}
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = c
    fission_rate<<<{"description": "Coupled Fission Rate"}>>> = fission_rate # fission/m^3-s
    energy_per_fission<<<{"description": "Energy Released per Fission"}>>> = ${production_constant} # mol/fission giving mol/m^3-s
  []
[]
(examples/metal_fuel/mechanistic_fcci/fcci.i)
[Kernels<<<{"href": "../../syntax/Kernels/index.html"}>>>]
  [c_diffusion]
    type = MatDiffusion<<<{"description": "Diffusion equation Kernel that takes an isotropic Diffusivity from a material property", "href": "../kernels/MatDiffusion.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = ${fuel_block_name}
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = c
    diffusivity<<<{"description": "The diffusivity value or material property"}>>> = D
    args<<<{"description": "Optional vector of arguments for the diffusivity. If provided and diffusivity is a derivative parsed material, Jacobian contributions from the diffusivity will be automatically computed"}>>> = 'c T'
  []
[]
(examples/metal_fuel/mechanistic_fcci/fcci.i)
[Kernels<<<{"href": "../../syntax/Kernels/index.html"}>>>]
  [c_decay]
    type = Decay<<<{"description": "Computes changing concentration due to radioactive decay.", "href": "../kernels/Decay.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = ${fuel_block_name}
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = c
    radioactive_decay_constant<<<{"description": "Radioactive decay constant"}>>> = ${decay_constant} # 1/s
  []
[]
(examples/metal_fuel/mechanistic_fcci/fcci.i)

The lanthanide diffusivity in the fuel is modeled using UPuZrLanthanideDiffusivity:

[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
  [diffusivity]
    # informed by lower length scale simulations
    type = UPuZrLanthanideDiffusivity<<<{"description": "Calculates lanthanide diffusivity in U-Zr and U-Pu-Zr fuel.", "href": "UPuZrLanthanideDiffusivity.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = ${fuel_block_name}
    property_name<<<{"description": "Name of the parsed material property"}>>> = D
    temperature<<<{"description": "The temperature"}>>> = T
    porosity_name<<<{"description": "Name of the material property storing the porosity"}>>> = porosity
    sodium_logged_porosity_name<<<{"description": "Name of the material property storing the sodium-logged porosity"}>>> = sodium_logged_porosity
    outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = exodus
    output_properties<<<{"description": "List of material properties, from this material, to output (outputs must also be defined to an output type)"}>>> = D
  []
[]
(examples/metal_fuel/mechanistic_fcci/fcci.i)

The lanthanide flux from the surface of the fuel into the cladding is modeled using UPuZrLanthanideFlux:

[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
  [flux]
    # informed by lower length scale simulations
    type = UPuZrLanthanideFlux<<<{"description": "Calculates the flux of lanthanides from the surface of U-Zr/U-Pu-Zr fuels into stainless steel cladding materials.", "href": "UPuZrLanthanideFlux.html"}>>>
    boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = ${fuel_surface_name}
    property_name<<<{"description": "Name of the parsed material property"}>>> = F
    temperature<<<{"description": "The temperature of the fuel"}>>> = T
    concentration<<<{"description": "The lanthanide concentration in the fuel"}>>> = c
    outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = exodus
    output_properties<<<{"description": "List of material properties, from this material, to output (outputs must also be defined to an output type)"}>>> = F
  []
[]
(examples/metal_fuel/mechanistic_fcci/fcci.i)

The calculated flux is used to create a sink term to consume reacted lanthanides via a boundary condition imposed on the surface of the fuel using MatNeumannBC:

[BCs<<<{"href": "../../syntax/NuclearMaterials/BCs/index.html"}>>>]
  [c_right]
    type = MatNeumannBC<<<{"description": "Imposes the integrated boundary condition $\\frac{C \\partial u}{\\partial n}=M*h$, where $h$ is a constant, $M$ is a material property, and $C$ is a coefficient defined by the kernel for $u$.", "href": "../bcs/MatNeumannBC.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = ${fuel_surface_name}
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = c
    boundary_material<<<{"description": "Material property multiplying the constant that will be enforced by the BC"}>>> = F
    value<<<{"description": "For a Laplacian problem, the value of the gradient dotted with the normals on the boundary."}>>> = -1
  []
[]
(examples/metal_fuel/mechanistic_fcci/fcci.i)

Finally, UPuZrLanthanideWastage is used to calculate the wastage thickness due lanthanides removed by the boundary condition:

[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
  [wastage_thickness]
    # informed by lower length scale simulations
    type = UPuZrLanthanideWastage<<<{"description": "Calculates wastage thickness due to reactions between lanthanides and stainless steel cladding materials.", "href": "UPuZrLanthanideWastage.html"}>>>
    boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = ${fuel_surface_name}
    cladding_density<<<{"description": "The initial density of the cladding in kg/m^3"}>>> = ${cladding_density}
    fuel_outer_radius<<<{"description": "The initial outer fuel radius in meters"}>>> = ${fuel_outer_radius}
    gap_thickness<<<{"description": "The initial gap thickness in meters"}>>> = ${gap_thickness}
    lanthanide_flux<<<{"description": "The lanthanide flux in mol/m^2-s"}>>> = F
    outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = exodus
  []
[]
(examples/metal_fuel/mechanistic_fcci/fcci.i)

The calculated wastage thickness can be coupled into the cladding thermomechanics solve using methods previously developed for empirically calculated wastage thicknesses (e.g., see HT9ElasticityTensor, MetallicFuelWastageDamage, and associated classes). The example presented above is setup using MultiApp functionality for compatibility with a variety of different manually-developed and FIPD-powered metallic fuel assessment cases, but it can also be fully coupled with thermomechanics solves if desired. See Hirschhorn et al. (2025) for more information.

Example Input Syntax

[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
  [wastage_thickness]
    type = UPuZrLanthanideWastage<<<{"description": "Calculates wastage thickness due to reactions between lanthanides and stainless steel cladding materials.", "href": "UPuZrLanthanideWastage.html"}>>>
    cladding_stoichiometry<<<{"description": "The stoichiometry of (iron,chromium,nickel) in the wastage layer"}>>> = ${cladding_stoichiometry}
    lanthanide_stoichiometry<<<{"description": "The stoichiometry of lanthanides in the wastage layer"}>>> = ${lanthanide_stoichiometry}
    cladding_molar_mass<<<{"description": "The molar mass of the cladding in kg/mol (defaults to that of pure iron)"}>>> = ${cladding_molar_mass}
    cladding_density<<<{"description": "The initial density of the cladding in kg/m^3"}>>> = ${cladding_density}
    fuel_outer_radius<<<{"description": "The initial outer fuel radius in meters"}>>> = ${fuel_outer_radius}
    gap_thickness<<<{"description": "The initial gap thickness in meters"}>>> = ${gap_thickness}
    thickness_variability_factor<<<{"description": "The ratio of maximum to uniform wastage thickness"}>>> = ${thickness_variability_factor}
    lanthanide_flux<<<{"description": "The lanthanide flux in mol/m^2-s"}>>> = lanthanide_flux
    outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = exodus
  []
[]
(test/tests/upuzr_lanthanide_wastage/test.i)

Input Parameters

  • cladding_densityThe initial density of the cladding in kg/m^3

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The initial density of the cladding in kg/m^3

  • fuel_outer_radiusThe initial outer fuel radius in meters

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The initial outer fuel radius in meters

  • gap_thicknessThe initial gap thickness in meters

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The initial gap thickness in meters

Required Parameters

  • blockThe list of blocks (ids or names) that this object will be applied

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

    Controllable:No

    Description:The list of blocks (ids or names) that this object will be applied

  • boundaryThe list of boundaries (ids or names) from the mesh where this object applies

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

    Controllable:No

    Description:The list of boundaries (ids or names) from the mesh where this object applies

  • cladding_molar_mass0.0558The molar mass of the cladding in kg/mol (defaults to that of pure iron)

    Default:0.0558

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The molar mass of the cladding in kg/mol (defaults to that of pure iron)

  • cladding_stoichiometry17The stoichiometry of (iron,chromium,nickel) in the wastage layer

    Default:17

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The stoichiometry of (iron,chromium,nickel) in the wastage layer

  • computeTrueWhen false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:When false, MOOSE will not call compute methods on this material. The user must call computeProperties() after retrieving the MaterialBase via MaterialBasePropertyInterface::getMaterialBase(). Non-computed MaterialBases are not sorted for dependencies.

  • constant_onNONEWhen ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped

    Default:NONE

    C++ Type:MooseEnum

    Options:NONE, ELEMENT, SUBDOMAIN

    Controllable:No

    Description:When ELEMENT, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps.When SUBDOMAIN, MOOSE will only call computeQpProperties() for the 0th quadrature point, and then copy that value to the other qps. Evaluations on element qps will be skipped

  • declare_suffixAn optional suffix parameter that can be appended to any declared 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 declared properties. The suffix will be prepended with a '_' character.

  • lanthanide_fluxFThe lanthanide flux in mol/m^2-s

    Default:F

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:The lanthanide flux in mol/m^2-s

  • lanthanide_stoichiometry2The stoichiometry of lanthanides in the wastage layer

    Default:2

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The stoichiometry of lanthanides in the wastage layer

  • thickness_variability_factor2The ratio of maximum to uniform wastage thickness

    Default:2

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The ratio of maximum to uniform wastage thickness

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:Yes

    Description:Set the enabled status of the MooseObject.

  • implicitTrueDetermines whether this object is calculated using an implicit or explicit form

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Determines whether this object is calculated using an implicit or explicit form

  • seed0The seed for the master random number generator

    Default:0

    C++ Type:unsigned int

    Controllable:No

    Description:The seed for the master random number generator

  • 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

  • output_propertiesList of material properties, from this material, to output (outputs must also be defined to an output type)

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

    Controllable:No

    Description:List of material properties, from this material, to output (outputs must also be defined to an output type)

  • outputsnone Vector of output names where you would like to restrict the output of variables(s) associated with this object

    Default:none

    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

Outputs 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. J.A. Hirschhorn, L.K. Aagesen, C. Jiang, and G.L. Beausoleil. Development and preliminary validation of a mechanistic multiscale model for fuel-cladding chemical interaction in metallic nuclear fuels. Nuclear Engineering and Design, 432:113811, 2025. doi:10.1016/j.nucengdes.2024.113811.[BibTeX]