Baseline simulation

This study analyzes the stress induced by temperature and radiation effects over a prolonged period. The model assumes steady-state temperature and neutron flux distributions. Radiation effects manifest as irradiation-induced dimensional changes and irradiation creep.

Computational Model Description

Figure 1 shows the mesh of the unit cell of the MSRE graphite stringer.

Finite element mesh of a reflector block.

Figure 1: Finite element mesh of a reflector block.

Files used by this model include:

  • MOOSE input file: baseline.i

  • Exodus mesh file: baseline.e

This document reviews the important elements of the input file that were not covered in previous models Infiltration effects on graphite

# ==============================================================================
# 3D stress analysis of a graphite reflector block with radiation effects
# Application : Grizzly
# ------------------------------------------------------------------------------
# Idaho Falls, INL, 2024
# Author(s): Ben Spencer, Will Hoffman
# If using or referring to this model, please cite as explained on
# https://mooseframework.inl.gov/virtual_test_bed/citing.html
# ==============================================================================

# endtime = 1892160000 #s
dt_max = 5e6 #s

# Parameters for temperature distribution
Tmax_A1 = -36.406902443685375
Tmax_B1 = 899.4907346560636
Tmax_z01 = 0.5788213284387279
Tmin_A2 = -30.744024831884484
Tmin_B2 = 899.8512009151575
Tmin_z02 = 0.591661495195294
x0c = 1.2 #m
thickness = 0.6 #m

# Parameters for neutron flux distribution
B_flux = -11.7708550271939
x0v = 1.26
Fmax_a = 1.264e+15
Fmax_b = -1.260e+16
Fmax_c = 3.202e+16
Fmax_d = -1.887e+15

[GlobalParams]
  displacements = 'disp_x disp_y disp_z'
[]

[Mesh]
  type = FileMesh
  file = baseline.e
[]

[Physics]

  [SolidMechanics]

    [QuasiStatic]
      [all]
        add_variables = true
        strain = FINITE
        automatic_eigenstrain_names = true
        generate_output = 'stress_xx stress_xy stress_xz stress_yy stress_yx stress_yz stress_zz stress_zx stress_zy
                      vonmises_stress max_principal_stress mid_principal_stress min_principal_stress
                      strain_xx strain_yy strain_zz elastic_strain_xx elastic_strain_yy elastic_strain_zz'
      []
    []
  []
[]

# Functions for temperature and fluence (flux * t)
[Functions]
  # Parsed function for temperature
  [T_func]
    type = ParsedFunction
    expression = 'r := (x^2 + y^2)^0.5;
             Tmax := ${Tmax_A1}*cos(z-${Tmax_z01}) + ${Tmax_B1};
             Tmin := ${Tmin_A2}*cos(z-${Tmin_z02}) + ${Tmin_B2};
             Tmax - (Tmax-Tmin)*(r-${x0c})/${thickness}'
  []

  # Fluence function (flux * time) #n/m^2
  [fluence_func]
    type = ParsedFunction
    expression = 'r := (x^2 + y^2)^0.5;
             Fmax := ${Fmax_a}*z^3 + ${Fmax_b}*z^2 + ${Fmax_c}*z + ${Fmax_d};
             Fmax*exp(${B_flux}*(r-${x0v}))*t'
  []
[]

# AuxVariables for temperature and fluence
[AuxVariables]
  [temperature]
  []
  [volume]
    order = CONSTANT
    family = MONOMIAL
  []
[]

# AuxKernels to assign the temperature and fluence functions
[AuxKernels]
  [T_aux]
    type = FunctionAux
    variable = temperature
    function = T_func
    execute_on = initial
  []
  [volume_aux]
    type = VolumeAux
    variable = volume
  []
[]

# Materials
[Materials]
  [neutron_fluence]
    type = GenericFunctionMaterial
    prop_names = fast_neutron_fluence
    prop_values = fluence_func
    # outputs = exodus
  []

  [thermal]
    type = HeatConductionMaterial
    thermal_conductivity = 63 #W/mk
    specific_heat = 1502      #J/KgK
  []
  [density]
    type = GenericConstantMaterial
    prop_names = 'density'
    prop_values = 1774.0 #Kg/m^3
  []
  [elasticity]
    type = ComputeIsotropicElasticityTensor
    youngs_modulus = 10.3e9 #Pa
    poissons_ratio = 0.14
  []
  [thermal_expansion]
    type = StructuralGraphiteThermalExpansionEigenstrain
    eigenstrain_name = thermal_expansion
    graphite_grade = IG_110
    stress_free_temperature = 300.0 #K
    fluence_conversion_factor = 1.0
    temperature = temperature
    # outputs = exodus
  []
  [GraphiteGrade_creep]
    type = StructuralGraphiteCreepUpdate
    fluence_conversion_factor = 1.0
    graphite_grade = IG_110
    temperature = temperature
    creep_scale_factor = 1.0
    # outputs = exodus
  []
  [graphite_irrad_strain]
    type = StructuralGraphiteIrradiationEigenstrain
    temperature = temperature
    graphite_grade = IG_110
    fluence_conversion_factor = 1.0
    eigenstrain_name = irrad_strain
    # outputs = exodus
  []

  [stress]
    type = ComputeMultipleInelasticStress
    inelastic_models = 'GraphiteGrade_creep'
  []
[]

# BCs
[BCs]
  [x_fixed]
    type = DirichletBC
    preset = true
    variable = disp_x
    value = 0
    boundary = 'fixed'
  []
  [y_fixed]
    type = DirichletBC
    preset = true
    variable = disp_y
    value = 0
    boundary = 'fixed y_z_roller y_roller'
  []
  [z_fixed]
    type = DirichletBC
    preset = true
    variable = disp_z
    value = 0
    boundary = 'fixed y_z_roller'
  []
[]

[VectorPostprocessors]
  # [auxvars]
  #   type = ElementValueSampler
  #   sort_by = id
  #   variable = 'volume max_principal_stress mid_principal_stress min_principal_stress'
  #   execute_on = TIMESTEP_END
  # []
  [line]
    type = LineValueSampler
    start_point = '1.0914 0.5215 1.76'
    end_point = '1.6146 0.7715 1.76'
    num_points = 100
    sort_by = 'x'
    variable = 'disp_x disp_y disp_z temperature'
    execute_on = timestep_end
  []
[]

# Executioner
[Executioner]
  type = Transient
  solve_type = 'NEWTON'
  petsc_options_iname = '-pc_type -pc_hypre_type -pc_hypre_boomeramg_strong_threshold'
  petsc_options_value = 'hypre    boomeramg      0.6'
  line_search = 'none'
  # end_time = ${endtime}
  num_steps = 10
  dtmax = ${dt_max}
  nl_abs_tol = 1.0e-08
  nl_rel_tol = 1.0e-04
  nl_max_its = 15
  l_max_its = 50
  [TimeStepper]
    type = IterationAdaptiveDT
    dt = 100 #s
    growth_factor = 3.0
    cutback_factor = 0.5
  []
  [Predictor]
    type = SimplePredictor
    scale = 1.0
  []
[]

# Outputs
[Outputs]
  sync_times = '0 315360000 630720000 946080000 1261440000 1576800000 1892160000'

  # [exodus]
  #   type = Exodus
  #   sync_only = true
  # []

  [csv]
    type = CSV
    execute_vector_postprocessors_on = FINAL
    # sync_only = true
  []
  checkpoint = false
[]
(msr/graphite_model/wear/1_baseline/baseline.i)

Temperature and neutron flux distributions

Steady-state temperature and neutron flux are critical inputs to these simulations, and these are generally obtained from Neutronics simulations. Both of these functions are defined as a ParsedFunction object as shown below:

[Functions]
  # Parsed function for temperature
  [T_func]
    type = ParsedFunction
    expression = 'r := (x^2 + y^2)^0.5;
             Tmax := ${Tmax_A1}*cos(z-${Tmax_z01}) + ${Tmax_B1};
             Tmin := ${Tmin_A2}*cos(z-${Tmin_z02}) + ${Tmin_B2};
             Tmax - (Tmax-Tmin)*(r-${x0c})/${thickness}'
  []

  # Fluence function (flux * time) #n/m^2
  [fluence_func]
    type = ParsedFunction
    expression = 'r := (x^2 + y^2)^0.5;
             Fmax := ${Fmax_a}*z^3 + ${Fmax_b}*z^2 + ${Fmax_c}*z + ${Fmax_d};
             Fmax*exp(${B_flux}*(r-${x0v}))*t'
  []
[]
(msr/graphite_model/wear/1_baseline/baseline.i)

Radiation effects

Irradiation in graphite leads to irradiation-induced dimensional changes and irradiation creep. Built-in empirical models within Grizzly for IG110 is used as shown.

[Materials]
  [GraphiteGrade_creep]
    type = StructuralGraphiteCreepUpdate
    fluence_conversion_factor = 1.0
    graphite_grade = IG_110
    temperature = temperature
    creep_scale_factor = 1.0
    # outputs = exodus
  []

  [graphite_irrad_strain]
    type = StructuralGraphiteIrradiationEigenstrain
    temperature = temperature
    graphite_grade = IG_110
    fluence_conversion_factor = 1.0
    eigenstrain_name = irrad_strain
    # outputs = exodus
  []
[]
(msr/graphite_model/wear/1_baseline/baseline.i)

Running the model

To run this model using the Grizzly executable, run the following command:


mpiexec -n 300 /path/to/app/grizzly-opt -i baseline.i

Note: HPC resources (300 cores) were used to perform this simulation

The following Exodus results file will be produced: baseline_exodus.e

The Exodus output file can be visualized with Paraview.

Results

Figure 2 shows the distribution of maximum principal stress for a reflector block with dimensions 0.6 m (radial), 0.305 m (axial), and 1.55 m (azimuthal span at 51°), evaluated at 40 years. The stress distribution indicates that the highest stresses occur at the edges of the graphite reflector block, while stresses near the inner surface remain lower than the overall maximum. This baseline case, modeled under irradiation and thermal loading without surface wear, provides the reference condition for subsequent analyses that include pit and groove defect configurations.

Distribution of Maximum Principal Stress for a reflector block of dimensions 0.6 m (radial), 0.305 m (axial), and 1.55 m (azimuthal span at 51°), taken at 40 years.

Figure 2: Distribution of Maximum Principal Stress for a reflector block of dimensions 0.6 m (radial), 0.305 m (axial), and 1.55 m (azimuthal span at 51°), taken at 40 years.