NormalFission LWRNuclearMaterials

In working with 'normal' fission operations, it's assumed that there are no unique errors or special conditions to be considered; that is the fission is simply 'normal.' An example case is described in detail below:

schooltip:Try the Action Wizard

There is a recently developed Action Wizard that will create the NuclearMaterials block based on user input. Read through this tutorial, then use it to experiment with the action.

NuclearMaterials Header

As with all NuclearMaterials, building the block for the conditions desired begins by creating the main structure. By default, any input parameters declared here are applied to all sub-blocks under this header (e.g. Fuel, Insulation, and Cladding layers).

[NuclearMaterials]
  generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
  fission_operation = Normal
  physics = 'Mechanics Thermal'
  initial_temperature = 580.0
  strain = FINITE
(examples/NuclearMaterialActions/LWR/Normal/2D_discrete_finiteStrain_nuc_mat_action_integrated/2D_discrete_finiteStrain_nuc_mat_action_integrated.i)

Commonly Applied NuclearMaterial InputParameters

  • fission_operation = Normal should be selected for the reasons described above. Logically, this implies that while only the fissionable fuel experiences a fission process, the accompanying cladding and or insulation layers will partake in the same fission_operation (i.e. They experience the same resulting physics from the type of fission occurring).

  • physics describes the physical modeling aspects that are created and applied to the blocks under the NuclearMaterials being considered. This parameter saves a lot of time and effort in creating blocks for the user behind the scenes. If this parameter is not used within a NuclearMaterial, then the user must create these blocks themselves. In this case, physics = 'Mechanics Thermal' implies that a TensorMechanicsAction and the necessary Kernels (e.g. HeatConduction, HeatConductionTimeDerivative, NeutronHeatSource) and temperature variables are created to be used for all sub-blocks.

  • strain is simply the strain formulation which is applied to the simulation. This can either be SMALL or FINITE and is dependent on the models used as well as the scale.

  • generate_output will automatically create the necessary AuxVariables and AuxKernels necessary for scalar quantity outputs for stresses and/or strains.

  • initial_temperature is the temperature of the system at the beginning time for the simulation. While it is possible to have different initial temperatures for the sub-blocks, usually it makes more physical sense for everything to start at the same temperature. When this is the case, using initial_temperature under the NuclearMaterials header ensures the same temperature is applied across all sub-blocks. When this is not the case, using the input parameter.

  • localized_initial_temperature beneath each sub-block allows unique "local" temperatures for the starting conditions.

  • extra_vector_tags is the names tags for extra vectors that residual data should be saved into.

UO2 Sub-block

This block must have sub-blocks of materials which are composed of UO2. For example, it is possible to have multiple blocks describing different parts of the fuel assembly with slightly different physical aspects such as geometry or ratios of uranium isotopes fall under the UO2 block. The example shown below only has one such block, and as such it is named [fuel] for consistency.

[NuclearMaterials<<<{"href": "../../syntax/NuclearMaterials/index.html"}>>>]
  [UO2<<<{"href": "../../syntax/NuclearMaterials/UO2/index.html"}>>>]
    [fuel]
      block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to"}>>> = pellet_type_1
      uo2_models<<<{"description": "Type(s) of physics models used on this block.   The choices are: Burnup Elastic Creep Relocation Swelling ThermalExpansion HighBurnupStructureFormation"}>>> = 'Burnup Elastic Relocation Swelling ThermalExpansion'
      stress_free_temperature<<<{"description": "Reference temperature for thermal eigenstrain calculation"}>>> = 295.0
      fuel_volume_ratio<<<{"description": "Reduction factor for deviation from right circular cylinder representation of the fuel mesh.  The ratio of actual volume to right circular cylinder volume."}>>> = 0.987787
      burnup_relocation_stop<<<{"description": "Burnup at which relocation strain stops (in FIMA)"}>>> = 0.03
      isotopes<<<{"description": "Fuel isotopes: Gd155 Gd157 U235 U238 Pu239 Pu240 Pu241 Pu242.  Number of entries must match number of entries in isotope_fractions."}>>> = 'U235 U238'
      isotope_fractions<<<{"description": "The isotope fractions associated with the 'isotopes' input line.  Must sum to 1.0."}>>> = '0.05 0.95'
      fuel_pin_geometry<<<{"description": "Name of the UserObject that reads the pin geometry from the mesh."}>>> = pin_geometry
      rod_ave_lin_pow<<<{"description": "The rod power history function."}>>> = power_history
      axial_power_profile<<<{"description": "The axial power peaking function."}>>> = axial_peaking_factors
      extra_vector_tags<<<{"description": "The tag names for extra vectors that residual data should be saved into"}>>> = 'ref'
    []
  []
[]
(examples/NuclearMaterialActions/LWR/Normal/2D_discrete_finiteStrain_nuc_mat_action_integrated/2D_discrete_finiteStrain_nuc_mat_action_integrated.i)

UO2 Input parameters

  • block The list of ids of the blocks (subdomain) that the models and kernels will be applied to.

  • uo2_models The current models available for UO2 blocks within NuclearMaterials are:

    • Burnup creates the set of auxvariable, auxkernels, and BurnupFunction required to collect the radial average burnup and heavy metal isotope concentrations as calculated by the BurnupFunction.

    • Elastic Either provides the correct elasticty constants for UO2 fuel or calculates the Young's modulus and/or the Poisson's ratio for UO2 fuel using Matpro relations as a function of temperature, burnup, and fuel composition depending on the fission_operation and other models used.

    • Creep Computes the secondary thermal and irradiation creep for UO2 LWR fuel.

    • Relocation Accounts for cracking and relocation of fuel pellet fragments in the radial direction and is necessary for accurate modeling of LWR fuel.

    • Swelling Computes and sums the change in fuel pellet volume due to densification and fission product release.

    • ThermalExpansion Computes an eigenstrain due to thermal expansion for UO2 using the proper thermal expansion coefficients dependent on the type of fission operation.

    • HighBurnupStructureFormation Computes the local volume fraction of high burnup structure (HBS) as a function of burnup and temperature.

  • stress_free_temperature Reference temperature for thermal eigenstrain calculation.

  • fuel_volume_ratio Reduction factor for deviation from right circular cylinder representation of the fuel mesh. The ratio of actual volume to right circular cylinder volume.

  • isotopes Describes the fuel isotope enrichment.

  • isotope_fractions Relative ratio of isotope percentages.

  • fuel_pin_geometry Name of the UserObject that reads the pin geometry from the mesh.

  • rod_ave_lin_pow The rod power history function.

  • axial_power_profile The axial power peaking function.

  • burnup_relocation_stop Burnup at which relocation strain stops (in FIMA).

ZirconiumAlloy Sub-block

This block must have sub-blocks of materials which are composed of ZirconiumAlloy. For example, it is possible to have multiple blocks describing different parts of the cladding assembly with slightly different physical aspects such as geometry or modeling strains fall under the ZirconiumAlloy block. The example shown below only has one such block, and as such it is named [clad] for consistency.

  • block The list of ids of the blocks (subdomain) that the models and kernels will be applied to.

  • cladding_models The current models available for ZirconiumAlloy blocks within NuclearMaterials are:

    • Creep Computes the secondary, thermal secondary, and the irradiation creep for Zircaloy cladding.

    • Elastic Either provides constant elasticity constants for Zircaloy cladding or calculates the Young's modulus and Poisson's ratio for Zircaloy cladding using MATPRO relations as a function of temperature and fast neutron fluence.

    • Plasticity Computes the plastic strain as a function of strain rate for Zircaloy cladding.

    • ZryOxidation Incorporates correlations for Zircaloy cladding oxidation through metal-water reactions. Calculated processes include outer oxide scale thickness growth and oxygen mass gain; the model is to be applied to the cladding waterside boundary. Current version covers LWR Zircaloy cladding only.

    • IrradiationGrowth Computes eigenstrain from irradiation growth in Zircaloy cladding using either the Franklin or ESCORE models.

    • ThermalExpansion Computes an eigenstrain due to thermal expansion for UO2 using the proper thermal expansion coefficients dependent on the type of fission operation.

    • ZrPhase Computes the volume fraction of beta phase for Zr-based cladding materials as a function of temperature and time.

    • ZryCladdingFailure models the failure of Zircaloy-4 cladding due to burst under LOCA conditions.

  • stress_free_temperature Reference temperature for thermal eigenstrain calculation.

[NuclearMaterials<<<{"href": "../../syntax/NuclearMaterials/index.html"}>>>]
  [ZirconiumAlloy<<<{"href": "../../syntax/NuclearMaterials/ZirconiumAlloy/index.html"}>>>]
    [clad]
      block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to"}>>> = clad
      cladding_models<<<{"description": "Type(s) of physics models used on this block.   The choices are: Creep Elastic Plasticity ZryOxidation IrradiationGrowth ThermalExpansion ZrPhase ZryCladdingFailure"}>>> = 'Elastic Creep IrradiationGrowth ThermalExpansion'
      stress_free_temperature<<<{"description": "Reference temperature for thermal eigenstrain calculation"}>>> = 295.0
      extra_vector_tags<<<{"description": "The tag names for extra vectors that residual data should be saved into"}>>> = 'ref'
    []
  []
[]
(examples/NuclearMaterialActions/LWR/Normal/2D_discrete_finiteStrain_nuc_mat_action_integrated/2D_discrete_finiteStrain_nuc_mat_action_integrated.i)

Complete NuclearMaterial Block

An example assessment case already using the methods described can be found in NuclearMaterials. The difference in overall length and complexity reduction is highlighted below.

Complete NuclearMaterials Input File Block


[NuclearMaterials]
  fission_operation = Normal
  physics = 'Mechanics Thermal'
  strain = FINITE
  generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
  initial_temperature = 580.0
  extra_vector_tags = 'ref'
  [UO2]
    [fuel]
      block = pellet_type_1
      uo2_models = 'Burnup Elastic Relocation Swelling ThermalExpansion'
      stress_free_temperature = 580.0
      fuel_volume_ratio = 0.987787
      isotopes = 'U235 U238'
      isotope_fractions = '0.05 0.95'
      fuel_pin_geometry = pin_geometry
      rod_ave_lin_pow = power_history
      axial_power_profile = axial_peaking_factors
      burnup_relocation_stop = 0.03
    []
  []
  [ZirconiumAlloy]
    [clad]
      block = clad
      cladding_models = 'Elastic Creep IrradiationGrowth ThermalExpansion'
      stress_free_temperature = 295.0
    []
  []
[]

Complete Set Replaced Blocks from NuclearMaterials


[Variables]
  [temp]
    initial_condition = 580.0
  []
[]
[AuxVariables]
  [fast_neutron_flux]
    block = clad
  []
  [fast_neutron_fluence]
    block = clad
  []
  [grain_radius]
    block = pellet_type_1
    initial_condition = 10e-6
  []
[]
[Physics/SolidMechanics/QuasiStatic]
  [pellets]
    block = pellet_type_1
    add_variables = true
    strain = FINITE
    eigenstrain_names = 'fuel_relocation_strain fuel_thermal_strain fuel_volumetric_strain'
    generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
    extra_vector_tags = 'ref'
  []
  [clad]
    block = clad
    add_variables = true
    strain = FINITE
    eigenstrain_names = 'clad_thermal_eigenstrain clad_irradiation_strain'
    generate_output = 'vonmises_stress stress_xx stress_yy stress_zz'
    extra_vector_tags = 'ref'
  []
[]
[Kernels]
  [heat]
    type = HeatConduction
    variable = temp
    extra_vector_tags = 'ref'
  []
  [heat_ie]
    type = HeatConductionTimeDerivative
    variable = temp
    extra_vector_tags = 'ref'
  []
  [heat_source]
    type = NeutronHeatSource
    variable = temp
    extra_vector_tags = 'ref'
    block = pellet_type_1
    burnup_function = burnup
  []
[]
[Burnup]
  [burnup]
    block = pellet_type_1
    rod_ave_lin_pow = power_history
    axial_power_profile = axial_peaking_factors
    num_radial = 80
    num_axial = 11
    a_lower = 0.00324
    a_upper = 0.12184
    fuel_inner_radius = 0
    fuel_outer_radius = .0041
    fuel_volume_ratio = 0.987775
    order = CONSTANT
    family = MONOMIAL
    RPF = RPF
    i_enrich = '0.05 0.95 0 0 0 0'
  []
[]
[AuxKernels]
  [fast_neutron_flux]
    type = FastNeutronFluxAux
    variable = fast_neutron_flux
    block = clad
    rod_ave_lin_pow = power_history
    axial_power_profile = axial_peaking_factors
    factor = 3e13
    execute_on = timestep_begin
  []
  [fast_neutron_fluence]
    type = FastNeutronFluenceAux
    variable = fast_neutron_fluence
    block = clad
    fast_neutron_flux = fast_neutron_flux
    execute_on = timestep_begin
  []
  [grain_radius]
    type = GrainRadiusAux
    block = pellet_type_1
    variable = grain_radius
    temperature = temp
    execute_on = linear
  []
[]
[Materials]
  [fuel_thermal]
    type = UO2Thermal
    block = pellet_type_1
    thermal_conductivity_model = NFIR
    temperature = temp
    burnup_function = burnup
  []
  [fuel_elasticity_tensor]
    type = ComputeIsotropicElasticityTensor
    block = pellet_type_1
    youngs_modulus = 2.0e11
    poissons_ratio = 0.345
  []
  [fuel_elastic_stress]
    type = ComputeFiniteStrainElasticStress
    block = pellet_type_1
  []
  [fuel_thermal_expansion]
    type = ComputeThermalExpansionEigenstrain
    block = pellet_type_1
    thermal_expansion_coeff = 10.0e-6
    temperature = temp
    stress_free_temperature = 295.0
    eigenstrain_name = fuel_thermal_strain
  []
  [fuel_relocation]
    type = UO2RelocationEigenstrain
    block = pellet_type_1
    burnup_function = burnup
    diameter = 0.0082
    rod_ave_lin_pow = power_history
    axial_power_profile = axial_peaking_factors
    gap = 160.0e-6 #diametral gap
    burnup_relocation_stop = 0.03
    relocation_activation1 = 5000
    relocation_model = ESCORE_modified
    eigenstrain_name = fuel_relocation_strain
  []
  [fuel_volumetric_swelling]
    type = UO2VolumetricSwellingEigenstrain
    gas_swelling_model_type = SIFGRS
    block = pellet_type_1
    temperature = temp
    burnup_function = burnup
    initial_fuel_density = 10431.0
    eigenstrain_name = fuel_volumetric_strain
  []
  [fission_gas_release]
    type = Sifgrs
    block = pellet_type_1
    temperature = temp
    burnup_function = burnup
    grain_radius = grain_radius
    gbs_model = true
  []

  [clad_thermal]
    type = HeatConductionMaterial
    block = clad
    thermal_conductivity = 16.0
    specific_heat = 330.0
  []
  [clad_elasticity_tensor]
    type = ZryElasticityTensor
    block = clad
  []
  [clad_stress]
    type = ComputeMultipleInelasticStress
    tangent_operator = elastic
    inelastic_models = 'clad_zrycreep'
    block = clad
  []
  [clad_zrycreep]
    type = ZryCreepLimbackHoppeUpdate
    block = clad
    temperature = temp
    fast_neutron_flux = fast_neutron_flux
    fast_neutron_fluence = fast_neutron_fluence
    model_irradiation_creep = true
    model_primary_creep = true
    model_thermal_creep = true
  []
  [thermal_expansion]
    type = ZryThermalExpansionMATPROEigenstrain
    block = clad
    temperature = temp
    stress_free_temperature = 295.0
    eigenstrain_name = clad_thermal_eigenstrain
  []
  [irradiation_swelling]
    type = ZryIrradiationGrowthEigenstrain
    block = clad
    fast_neutron_fluence = fast_neutron_fluence
    zircaloy_material_type = stress_relief_annealed
    eigenstrain_name = clad_irradiation_strain
  []
  [clad_density]
    type = StrainAdjustedDensity
    block = clad
    strain_free_density = 6551.0
  []
  [fuel_density]
    type = StrainAdjustedDensity
    block = pellet_type_1
    strain_free_density = 10431.0
  []
[]