HydrogenPickup

Hydrogen flux BC for various zirconium alloys. Units for H concentration is wt.ppm.

Description

The HydrogenPickup BC is used to model the flux of hydrogen into the clad that is caused by oxide growth. The flux is approximated as a constant fraction of the hydrogen liberated by oxide growth at the interface between the coolant water and the clad.

commentnote:Coupling to Oxide Thickness Variable

This BC must be coupled to an AuxVariable that gives the thickness of the oxide over time when the Zircaloy material type is Zircaloy-4, M5, Zirlo, Optimized Zirlo, or Zircaloy-2 with the model based on linear power. For this to work properly, the AuxKernel must be set to execute on linear.

commentnote:Coupling to Axial Averaged Burnup Variable

This BC must be coupled to an AuxVariable that holds the local axial averaged burnup in the fuel at the corresponding cladding height over time when the Zircaloy material type is Zircaloy-2 and the model based on burnup is being used. For this to work properly, the AuxKernel must be set to execute on linear.

The waterside corrosion reaction of the zirconium alloy cladding generates hydrogen at the water-oxide interface: Some of the hydrogen migrates through the oxide layer and dissolves in the cladding, where it is slightly soluble. The fraction of the hydrogen produced by the corrosion reaction that ends up in the cladding is termed the hydrogen pickup fraction. Although the mechanism for hydrogen migration through the oxide layer is a topic of active research, the pickup fraction has been well characterized for various zirconium alloys. For example, Couet et al. (2014) found the instantaneous hydrogen pickup fraction to be a strong function of alloying elements and to be a complex function of the exposure time. To enable a wide variety of modeling approaches, there are several available options to specifying the pickup fraction in BISON.

Hydrogen pick up fraction models for Zircaloy-4, M5, Zirlo, and Optimized Zirlo

For Zircaloy-4, M5, Zirlo, and Optimized Zirlo, the average total concentration of hydrogen (including dissolved hydrogen and hydrogen as ZrH) in the cladding is roughly proportional to the thickness of the oxide layer (Courty et al., 2014): (1) where is the hydrogen pickup fraction (unitless), is the Pilling-Bedworth ratio for ZrO and is equal to 1.56 (unitless), is the volume of the oxide thickness (m), is the initial volume of the cladding (m), is the molecular weight of hydrogen (g/mol), and is the molecular weight of zirconium (g/mol). The factor of is to convert the concentration to wt. parts per million (ppm). For the case of a plate geometry the following holds: where is the the oxide thickness (m), and is the initial cladding thickness (m). For cylindrical geometries, like nuclear fuel cladding, the following is true: where and . This convention corresponds the volume of the oxide consuming some of the initial cladding volume.

To introduce the appropriate amount of hydrogen in the simulated domain, the HydrogenPickup BC introduces a flux on the desired surface of the domain. The flux is defined as (2) where is the volume of the domain, and the oxidized surface of the cladding. For a plate geometry, with the thickness of the plate. However, for a cylindrical cladding with an outer radius and a thickness , assuming that oxidation happens only on the outer surface of the cladding, then (3)

The rate of change of total hydrogen concentration in plate geometries was derived by (Courty et al., 2014), (4) which results in a hydrogen flux of (5) in wt.ppm-m / s. For a cylindrical geometry the hydrogen flux is given by (6)

To minimize timestep dependence of the oxide thickness on the calculated flux of hydrogen, is used in the preceding equations in BISON. Where: and .

The first approach to specifying the pickup fraction is through a user specified constant value. The second allows the user to select the zirconium alloy of interest and the hydrogen pickup fraction is then computed based upon the recommendations of Clifford (2020). For

  1. Zircaloy-4(zircaloy_material_type = STRESS_RELIEF_ANNEALED)

  2. ZIRLO® (zircaloy_material_type = ZIRLO)

  3. Optimized ZIRLO™ (zircaloy_material_type = PARTIAL_RECRYSTALLIZATION_ANNEALED)

  4. M5® (zircaloy_material_type = M5) .

Hydrogen pick up fraction models for Zircaloy-2

For Zircaloy-2 (zircaloy_material_type = RECRYSTALLIZATION_ANNEALED), primarily used in a boiling water reactor (BWR), there are two distinct options.

Hydrogen pick up model for Zircaloy-2 based on fuel burnup

In one option (BURNUP_MODEL), the hydrogen concentration is a function of local axial burnup of the fuel adjacent to the cladding (Clifford, 2020): where is the local axial burnup (GWd/tU). Since is not a function of oxide thickness in the case of Zircaloy-2, the flux is obtained by taking the time derivative of where the local axial burnup is time dependent and using the same ratios for plate and cylindrical geometries as the for the other alloys. No conversion factor is necessary for this correlation as the correlation returns a value in ppm. Thus, for the Zircaloy-2 hydrogen model the flux boundary condition for cylindrical geometries is given by: and for plate specimens:

As before, with the oxide thickness, the average burnup is used to minimize timestep dependence. Therefore: and .

commentnote:Initial hydrogen content for Zircaloy-2 in a BWR environment

Because the equations in Ref. (Clifford, 2020) states that the amount of hydrogen is equal to wt.ppm at 0 burnup (and not 0 wt.ppm), 18.238 wt.ppm of hydrogen should be initially added to the cladding for the simulation to match the equation provided by Ref. (Clifford, 2020).

Hydrogen pick up model for Zircaloy-2 based on linear heat rate

For Zircaloy-2 in BWR, it is also possible to use a model based on LHR, or linear power (Nissen et al., 2014). When using option LINEAR_POWER_MODEL the hydrogen flux is computed just as in Eq. (5) and Eq. (6) depending on the sample geometry, but with the hydrogen pick up fraction defined as (7) where is the hydrogen pick up fraction for Zircaloy-2 in BWR at high LHR, is the enhancement multiplier for the hydrogen pick up fraction low LHR values, and LHR is the LHR threshold value. Since Ref. (Nissen et al., 2014) does not provide quantitative values for this model, , , and LHGR are user defined parameters and the current default values should not be granted meaning. This model is an alternative to the empirical bunrup-dependent approach. Since LHR is proportional to the heat flux on the cladding outer surface, it relates to temperature gradient within the cladding and can be used a proxy variable for the corrosion environment. Since hydrogen tends to diffuse down temperature gradients, a lower LHR might encourage hydrogen diffusion within the cladding thickness and further hydrogen pick up (Nissen et al., 2014).

commentnote:Coupling with oxyde growth models

The hydrogen pickup model for options others than using the burnup-based model for Zircaloy-2 in a BWR environment can be coupled to any of the oxide growth models described in the Cladding and Corrosion Page.

Example Input Syntax

Using the default zirconium alloy of Zircaloy-4:

[BCs<<<{"href": "../../syntax/NuclearMaterials/BCs/index.html"}>>>]
  [hydrogen_pickup]
    type = HydrogenPickup<<<{"description": "Hydrogen flux BC for various zirconium alloys. Units for H concentration is wt.ppm.", "href": "HydrogenPickup.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = hydrogen_in_solution_ppm
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
    oxide_thickness<<<{"description": "Coupled oxide thickness."}>>> = oxide_thickness
    clad_thickness<<<{"description": "Initial thickness of clad."}>>> = 660e-6
    clad_outer_radius<<<{"description": "Initial outer radius of the clad."}>>> = 660e-6
  []
[]
(test/tests/hydrogen/hydrogen_pickup.i)

Using a user supplied hydrogen pickup fraction:

[BCs<<<{"href": "../../syntax/NuclearMaterials/BCs/index.html"}>>>]
  [hydrogen_pickup]
    type = HydrogenPickup<<<{"description": "Hydrogen flux BC for various zirconium alloys. Units for H concentration is wt.ppm.", "href": "HydrogenPickup.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = hydrogen_in_solution_ppm
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = left
    oxide_thickness<<<{"description": "Coupled oxide thickness."}>>> = oxide_thickness
    input_pickup_fraction<<<{"description": "The hydrogen pickup fraction if specified by the user."}>>> = 0.15
    clad_thickness<<<{"description": "Initial thickness of clad."}>>> = 660e-6
  []
[]
(examples/hydride_rim/hydride_rim.i)

Input Parameters

  • boundaryThe list of boundary IDs from the mesh where this object applies

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

    Controllable:No

    Description:The list of boundary IDs from the mesh where this object applies

  • variableThe name of the variable that this residual object operates on

    C++ Type:NonlinearVariableName

    Unit:(no unit assumed)

    Controllable:No

    Description:The name of the variable that this residual object operates on

Required Parameters

  • axial_power_profileaxial power peaking function. Relevant to Zr-2 with linear power model.

    C++ Type:FunctionName

    Unit:(no unit assumed)

    Controllable:No

    Description:axial power peaking function. Relevant to Zr-2 with linear power model.

  • clad_outer_radius0.00418Initial outer radius of the clad.

    Default:0.00418

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Initial outer radius of the clad.

  • clad_thickness0.00066Initial thickness of clad.

    Default:0.00066

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Initial thickness of clad.

  • displacementsThe displacements

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

    Unit:(no unit assumed)

    Controllable:No

    Description:The displacements

  • 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.

  • hydrogen_pickup_model_Zr2The hydrogen pickup model for Zr-2, either based on burnup or linear power. Relevant to Zr-2, i.e., RECRYSTALLIZATION_ANNEALED

    C++ Type:MooseEnum

    Options:BURNUP_MODEL, LINEAR_POWER_MODEL

    Controllable:No

    Description:The hydrogen pickup model for Zr-2, either based on burnup or linear power. Relevant to Zr-2, i.e., RECRYSTALLIZATION_ANNEALED

  • input_linear_power_threshold10000The linear power threshold value if specified by the user. Relevant to Zr-2 with linear power model.

    Default:10000

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The linear power threshold value if specified by the user. Relevant to Zr-2 with linear power model.

  • input_pickup_fractionThe hydrogen pickup fraction if specified by the user.

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The hydrogen pickup fraction if specified by the user.

  • input_pickup_fraction_multiplier1.5The hydrogen pickup fraction multiplier if specified by the user. Relevant to Zr-2 with linear power model.

    Default:1.5

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:The hydrogen pickup fraction multiplier if specified by the user. Relevant to Zr-2 with linear power model.

  • linear_heat_rate_variableVariable holding the average linear heating rate in pellet in W/m

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Variable holding the average linear heating rate in pellet in W/m

  • local_axial_burnupCoupled local axial burnup.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Coupled local axial burnup.

  • oxide_thicknessCoupled oxide thickness.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Coupled oxide thickness.

  • rod_ave_lin_powlinear power function. Relevant to Zr-2 with linear power model.

    C++ Type:FunctionName

    Unit:(no unit assumed)

    Controllable:No

    Description:linear power function. Relevant to Zr-2 with linear power model.

  • zircaloy_material_typeSTRESS_RELIEF_ANNEALEDType of zircaloy material properties to use in calculating creep. Note: ESCORE_IRRADIATIONGROWTHZR4 is not valid.

    Default:STRESS_RELIEF_ANNEALED

    C++ Type:MooseEnum

    Options:STRESS_RELIEF_ANNEALED, RECRYSTALLIZATION_ANNEALED, PARTIAL_RECRYSTALLIZATION_ANNEALED, ZIRLO, M5, ESCORE_IRRADIATIONGROWTHZR4

    Controllable:No

    Description:Type of zircaloy material properties to use in calculating creep. Note: ESCORE_IRRADIATIONGROWTHZR4 is not valid.

Optional Parameters

  • absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution

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

    Controllable:No

    Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution

  • extra_matrix_tagsThe extra tags for the matrices this Kernel should fill

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

    Controllable:No

    Description:The extra tags for the matrices this Kernel should fill

  • extra_vector_tagsThe extra tags for the vectors this Kernel should fill

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

    Controllable:No

    Description:The extra tags for the vectors this Kernel should fill

  • matrix_tagssystemThe tag for the matrices this Kernel should fill

    Default:system

    C++ Type:MultiMooseEnum

    Options:nontime, system

    Controllable:No

    Description:The tag for the matrices this Kernel should fill

  • vector_tagsnontimeThe tag for the vectors this Kernel should fill

    Default:nontime

    C++ Type:MultiMooseEnum

    Options:nontime, time

    Controllable:No

    Description:The tag for the vectors this Kernel should fill

Contribution To Tagged Field Data 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.

  • diag_save_inThe name of auxiliary variables to save this BC's diagonal jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)

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

    Unit:(no unit assumed)

    Controllable:No

    Description:The name of auxiliary variables to save this BC's diagonal jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)

  • 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

  • save_inThe name of auxiliary variables to save this BC's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)

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

    Unit:(no unit assumed)

    Controllable:No

    Description:The name of auxiliary variables to save this BC's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)

  • 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

  • skip_execution_outside_variable_domainFalseWhether to skip execution of this boundary condition when the variable it applies to is not defined on the boundary. This can facilitate setups with moving variable domains and fixed boundaries. Note that the FEProblem boundary-restricted integrity checks will also need to be turned off if using this option

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to skip execution of this boundary condition when the variable it applies to is not defined on the boundary. This can facilitate setups with moving variable domains and fixed boundaries. Note that the FEProblem boundary-restricted integrity checks will also need to be turned off if using this option

  • 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

  • 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. Paul Clifford. Pressurized-water reactor control rod ejection and boiling-water reactor control rod drop accidents. Technical Report Regulatory Guide RG 1.236, United States Nuclear Regulatory Commission, 2020.[BibTeX]
  2. Adrien Couet, Arthur T. Motta, and Robert J. Comstock. Hydrogen pickup measurements in zirconium alloys: relation to oxidation kinetics. Journal of Nuclear Materials, 451(1 - 3):1 – 13, 2014. URL: http://www.sciencedirect.com/science/article/pii/S0022311514001081, doi:http://dx.doi.org/10.1016/j.jnucmat.2014.03.001.[BibTeX]
  3. Olivier Courty, Arthur T. Motta, and Jason D. Hales. Modeling and simulation of hydrogen behavior in Zircaloy-4 fuel cladding. Journal of Nuclear Materials, 452(1):311–320, 2014. doi:10.1016/j.jnucmat.2014.05.013.[BibTeX]
  4. K. L. Nissen, W. Goll, V. I. Arimescu, G. Ledergerber, and C. Hellwig. Hydrogen uptake of BWR fuel rods. Power history effects at long irradiation times. In Proceedings of the Water Reactor Fuel Performance Meeting (WRFPM) 2014, Tokyo, Japan. Framatome, 9 2014.[BibTeX]