PSS for efficient failure estimation of a 1D TRISO fuel model

Theory of Parallel Subset Simulation (PSS)

The basic theory of the parallel subset simulation (PSS) method is briefly described here. Dhulipala et al. (2022) applies the PSS method for several 1D and 2D tri-structural isotropic (TRISO) models failure analyses.

1D TRISO failure analysis example (SiC cracked IPyC failure)

Input files

The main input file using PSS for TRISO failure analysis is presented below.

[StochasticTools<<<{"href": "../../../syntax/StochasticTools/index.html"}>>>]
[]

[Distributions<<<{"href": "../../../syntax/Distributions/index.html"}>>>]
    [normal_kernel_r]
      type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
      mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 213.35e-6
      standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 4.4e-6
    []
    [normal_buffer_t]
      type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
      mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 98.9e-6
      standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 8.4e-6
    []
    [normal_ipyc_t]
      type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
      mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 40.4e-6
      standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 2.5e-6
    []
    [normal_sic_t]
      type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
      mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 35.2e-6
      standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 1.2e-6
    []
    [normal_opyc_t]
      type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
      mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 43.4e-6
      standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 2.9e-6
    []
    [uniform]
      type = Uniform<<<{"description": "Continuous uniform distribution.", "href": "../../../source/distributions/Uniform.html"}>>>
    []
  []

[Samplers<<<{"href": "../../../syntax/Samplers/index.html"}>>>]
  [sample]
    type = ParallelSubsetSimulation<<<{"description": "Parallel Subset Simulation sampler.", "href": "../../../source/samplers/ParallelSubsetSimulation.html"}>>>
    distributions<<<{"description": "The distribution names to be sampled, the number of distributions provided defines the number of columns per matrix."}>>> = 'normal_kernel_r normal_buffer_t normal_ipyc_t normal_sic_t normal_opyc_t uniform'
    num_samplessub<<<{"description": "Number of samples per subset"}>>> = 4000
    num_subsets<<<{"description": "Number of desired subsets"}>>> = 4
    num_parallel_chains<<<{"description": "Number of Markov chains to run in parallel, default is based on the number of processors used."}>>> = 5
    output_reporter<<<{"description": "Reporter with results of samples created by the SubApp."}>>> = 'constant/reporter_transfer:SiC_crackedIPyC_stressminusstrength:value'
    inputs_reporter<<<{"description": "Reporter with input parameters."}>>> = 'adaptive_MC/inputs'
    seed<<<{"description": "Random number generator initial seed"}>>> = 100
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = PRE_MULTIAPP_SETUP
  []
[]

[MultiApps<<<{"href": "../../../syntax/MultiApps/index.html"}>>>]
    [sub]
        type = SamplerFullSolveMultiApp<<<{"description": "Creates a full-solve type sub-application for each row of each Sampler matrix.", "href": "../../../source/multiapps/SamplerFullSolveMultiApp.html"}>>>
        input_files<<<{"description": "The input file for each App.  If this parameter only contains one input file it will be used for all of the Apps.  When using 'positions_from_file' it is also admissable to provide one input_file per file."}>>> = ../failure_probability_monte_carlo/triso_1d_constant.i
        sampler<<<{"description": "The Sampler object to utilize for creating MultiApps."}>>> = sample
    []
[]

[Transfers<<<{"href": "../../../syntax/Transfers/index.html"}>>>]
    [reporter_transfer]
      type = SamplerReporterTransfer<<<{"description": "Transfers data from Reporters on the sub-application to a StochasticReporter on the main application.", "href": "../../../source/transfers/SamplerReporterTransfer.html"}>>>
      from_reporter<<<{"description": "The name(s) of the Reporter(s) on the sub-app to transfer from."}>>> = 'SiC_crackedIPyC_stressminusstrength/value'
      stochastic_reporter<<<{"description": "The name of the StochasticReporter object to transfer values to."}>>> = 'constant'
      from_multi_app<<<{"description": "The name of the MultiApp to receive data from"}>>> = sub
      sampler<<<{"description": "A the Sampler object that Transfer is associated.."}>>> = sample
    []
[]

[Controls<<<{"href": "../../../syntax/Controls/index.html"}>>>]
    [cmdline]
      type = MultiAppSamplerControl<<<{"description": "Control for modifying the command line arguments of MultiApps.", "href": "../../../source/controls/MultiAppSamplerControl.html"}>>>
      multi_app<<<{"description": "The name of the MultiApp to control."}>>> = sub
      sampler<<<{"description": "The Sampler object to utilize for altering the command line options of the MultiApp."}>>> = sample
      param_names<<<{"description": "The names of the command line parameters to set via the sampled data."}>>> = 'Mesh/gen/kernel_radius Mesh/gen/buffer_thickness Mesh/gen/IPyC_thickness Mesh/gen/SiC_thickness Mesh/gen/OPyC_thickness Postprocessors/actual_strength_SiC_crackedIPyC/quantile'
    []
[]

[Reporters<<<{"href": "../../../syntax/Reporters/index.html"}>>>]
  [constant]
    type = StochasticReporter<<<{"description": "Storage container for stochastic simulation results coming from Reporters.", "href": "../../../source/reporters/StochasticReporter.html"}>>>
    outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
  []
  [adaptive_MC]
    type = AdaptiveMonteCarloDecision<<<{"description": "Generic reporter which decides whether or not to accept a proposed sample in Adaptive Monte Carlo type of algorithms.", "href": "../../../source/reporters/AdaptiveMonteCarloDecision.html"}>>>
    output_value<<<{"description": "Value of the model output from the SubApp."}>>> = constant/reporter_transfer:SiC_crackedIPyC_stressminusstrength:value
    inputs<<<{"description": "Uncertain inputs to the model."}>>> = 'inputs'
    sampler<<<{"description": "The sampler object."}>>> = sample
  []
[]

[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
  type = Transient
[]

[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
  perf_graph<<<{"description": "Enable printing of the performance graph to the screen (Console)"}>>> = true
  [out]
    type = JSON<<<{"description": "Output for Reporter values using JSON format.", "href": "../../../source/outputs/JSONOutput.html"}>>>
    execute_system_information_on<<<{"description": "Control when the output of the simulation information occurs"}>>> = NONE
  []
[]
(examples/TRISO/failure_probability_variance_reduction/Main_PSS.i)

The main input is the driver for performing the randomization of the TRISO input parameters. It relies on a sub application input file which is the 1D TRISO model. This sub application input file is presented below.

initial_fuel_density = 5

[GlobalParams<<<{"href": "../../../syntax/GlobalParams/index.html"}>>>]
  order = FIRST
  family = LAGRANGE
  displacements = 'disp_x'
  initial_enrichment = 0.14029 # [wt-]
  flux_conversion_factor = 1.0 # convert E>0.10 to E>0.18 MeV
  stress_free_temperature = 481 # used for thermal expansion
  energy_per_fission = 3.204e-11 # [J/fission]
  O_U = 1.428 # Initial Oxygen to Uranium atom ratio
  C_U = 0.392 # Initial Carbon to Uranium atom ratio
[]

[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
  coord_type = RSPHERICAL
  [gen]
    type = TRISO1DFiveLayerMeshGenerator<<<{"description": "Creates a 1D mesh for use with five-layer TRISO analysis.", "href": "../../../source/meshgenerators/TRISO1DFiveLayerMeshGenerator.html"}>>>
    elem_type<<<{"description": "The type of element from libMesh to generate"}>>> = EDGE3
    kernel_radius<<<{"description": "Radius of fuel kernel."}>>> = 213.35e-6
    buffer_thickness<<<{"description": "Thickness of buffer layer."}>>> = 98.9e-6
    IPyC_thickness<<<{"description": "Thickness of IPyC layer."}>>> = 40.4e-6
    SiC_thickness<<<{"description": "Thickness of SiC layer."}>>> = 35.2e-6
    OPyC_thickness<<<{"description": "Thickness of OPyC layer."}>>> = 43.4e-6
    kernel_mesh_density<<<{"description": "Number of elements in the kernel mesh."}>>> = ${initial_fuel_density}
    buffer_mesh_density<<<{"description": "Number of elements in the buffer mesh."}>>> = 3
    IPyC_mesh_density<<<{"description": "Number of elements in the IPyC mesh."}>>> = 5
    SiC_mesh_density<<<{"description": "Number of elements in the SiC mesh."}>>> = 3
    OPyC_mesh_density<<<{"description": "Number of elements in the OPyC mesh."}>>> = 4
  []
[]

[Problem<<<{"href": "../../../syntax/Problem/index.html"}>>>]
  type = ReferenceResidualProblem
  reference_vector = 'ref'
  extra_tag_vectors = 'ref'
[]

[UserObjects<<<{"href": "../../../syntax/UserObjects/index.html"}>>>]
  [particle_geometry]
    type = TRISOGeometry<<<{"description": "Computes TRISO Geometry.", "href": "../../../source/userobject/TRISOGeometry.html"}>>>
    outer_OPyC<<<{"description": "Sideset for outer OPyC"}>>> = OPyC_outer_boundary
    outer_SiC<<<{"description": "Sideset for outer SiC"}>>> = SiC_outer_boundary
    outer_IPyC<<<{"description": "Sideset for outer IPyC"}>>> = IPyC_outer_boundary
    inner_IPyC<<<{"description": "Sideset for inner IPyC"}>>> = IPyC_inner_boundary
    outer_buffer<<<{"description": "Sideset for outer buffer"}>>> = buffer_outer_boundary
    outer_kernel<<<{"description": "Sideset for outer kernel"}>>> = fuel_outer_boundary
    include_particle<<<{"description": "Set as true to output particle geometry."}>>> = true
    include_pebble<<<{"description": "Set as true to output pebble geometry."}>>> = false
    IPyC_thickness_mean<<<{"description": "IPyC thickness mean value."}>>> = 40.4e-6
    SiC_thickness_mean<<<{"description": "SiC thickness mean value."}>>> = 35.2e-6
    OPyC_thickness_mean<<<{"description": "OPyC thickness mean value."}>>> = 43.4e-6
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'INITIAL TIMESTEP_END'
  []
  [sic_failure_terminator]
    type = Terminator<<<{"description": "Requests termination of the current solve based on the evaluation of a parsed logical expression of the Postprocessor value(s).", "href": "../../../source/userobjects/Terminator.html"}>>>
    expression<<<{"description": "FParser expression to process Postprocessor values into a boolean value. Termination of the simulation occurs when this returns true."}>>> = 'sic_failure_overall > 0'
  []
[]

[Variables<<<{"href": "../../../syntax/Variables/index.html"}>>>]
  [temperature]
    initial_condition<<<{"description": "Specifies a constant initial condition for this variable"}>>> = 481
  []
[]

[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
  [fission_rate]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  []
  [burnup]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  []
  [fast_neutron_flux]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  []
  [fast_neutron_fluence]
    order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
    family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
  []
[]

[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
  [temp_bc]
    type = PiecewiseLinear<<<{"description": "Linearly interpolates between pairs of x-y data", "href": "../../../source/functions/PiecewiseLinear.html"}>>>
    data_file<<<{"description": "File holding CSV data"}>>> = outer_temp.csv
    x_index_in_file<<<{"description": "The abscissa index in the data file"}>>> = 0
    y_index_in_file<<<{"description": "The ordinate index in the data file"}>>> = 1
    format<<<{"description": "Format of csv data file that is in either in columns or rows"}>>> = columns
  []
  [fission_rate]
    type = ConstantFunction<<<{"description": "A function that returns a constant value as defined by an input parameter.", "href": "../../../source/functions/ConstantFunction.html"}>>>
    value<<<{"description": "The constant value"}>>> = 5.75e19
  []
  [high_fidelity_strength_crackedIPyC]
    type = ConstantFunction<<<{"description": "A function that returns a constant value as defined by an input parameter.", "href": "../../../source/functions/ConstantFunction.html"}>>>
    value<<<{"description": "The constant value"}>>> = '1403604095.5707'
  []
  [stress_correlation_crackedIPyC]
    type = TRISOStressCorrelationFunction<<<{"description": "Computes the stress correlation function.", "href": "../../../source/functions/TRISOStressCorrelationFunction.html"}>>>
    triso_geometry<<<{"description": "Name of the UserObject that computes TRISO geometry."}>>> = particle_geometry
    polynomial_coefficients_IPyC<<<{"description": "Fitted polynomial function's coefficents for IPyC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    polynomial_coefficients_SiC<<<{"description": "Fitted polynomial function's coefficents for SiC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    polynomial_coefficients_OPyC<<<{"description": "Fitted polynomial function's coefficents for OPyC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    correlation_factor<<<{"description": "The correlation factor."}>>> = -1.2447543103484047
  []
  [high_fidelity_strength_debonding]
    type = ConstantFunction<<<{"description": "A function that returns a constant value as defined by an input parameter.", "href": "../../../source/functions/ConstantFunction.html"}>>>
    value<<<{"description": "The constant value"}>>> = '1705800293.3578'
  []
  [stress_correlation_debonding]
    type = TRISOStressCorrelationFunction<<<{"description": "Computes the stress correlation function.", "href": "../../../source/functions/TRISOStressCorrelationFunction.html"}>>>
    triso_geometry<<<{"description": "Name of the UserObject that computes TRISO geometry."}>>> = particle_geometry
    polynomial_coefficients_IPyC<<<{"description": "Fitted polynomial function's coefficents for IPyC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    polynomial_coefficients_SiC<<<{"description": "Fitted polynomial function's coefficents for SiC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    polynomial_coefficients_OPyC<<<{"description": "Fitted polynomial function's coefficents for OPyC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    correlation_factor<<<{"description": "The correlation factor."}>>> = -0.14916368684964607
  []
  [high_fidelity_strength_asphericity]
    type = ConstantFunction<<<{"description": "A function that returns a constant value as defined by an input parameter.", "href": "../../../source/functions/ConstantFunction.html"}>>>
    value<<<{"description": "The constant value"}>>> = '1371700766.8875'
  []
  [stress_correlation_asphericity]
    type = TRISOStressCorrelationFunction<<<{"description": "Computes the stress correlation function.", "href": "../../../source/functions/TRISOStressCorrelationFunction.html"}>>>
    triso_geometry<<<{"description": "Name of the UserObject that computes TRISO geometry."}>>> = particle_geometry
    polynomial_coefficients_IPyC<<<{"description": "Fitted polynomial function's coefficents for IPyC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    polynomial_coefficients_SiC<<<{"description": "Fitted polynomial function's coefficents for SiC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    polynomial_coefficients_OPyC<<<{"description": "Fitted polynomial function's coefficents for OPyC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    correlation_factor<<<{"description": "The correlation factor."}>>> = 1.5191967987843993
  []
  [stress_change_correlation_asphericity]
    type = TRISOStressCorrelationFunction<<<{"description": "Computes the stress correlation function.", "href": "../../../source/functions/TRISOStressCorrelationFunction.html"}>>>
    triso_geometry<<<{"description": "Name of the UserObject that computes TRISO geometry."}>>> = particle_geometry
    polynomial_coefficients_IPyC<<<{"description": "Fitted polynomial function's coefficents for IPyC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    polynomial_coefficients_SiC<<<{"description": "Fitted polynomial function's coefficents for SiC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    polynomial_coefficients_OPyC<<<{"description": "Fitted polynomial function's coefficents for OPyC thickness that correspond to constant, linear and quadratic terms."}>>> = '1 0 0'
    correlation_factor<<<{"description": "The correlation factor."}>>> = 1.391516859626456
  []
  [sic_crackedipyc_stress_strength]
    type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../../source/functions/MooseParsedFunction.html"}>>>
    expression<<<{"description": "The user defined function."}>>> = 'a-b'
    symbol_names<<<{"description": "Symbols (excluding t,x,y,z) that are bound to the values provided by the corresponding items in the vals vector."}>>> = 'a b'
    symbol_values<<<{"description": "Constant numeric values, postprocessor names, function names, and scalar variables corresponding to the symbols in symbol_names."}>>> = 'stress_SiC_crackedIPyC actual_strength_SiC_crackedIPyC'
  []
[]

[Physics<<<{"href": "../../../syntax/Physics/index.html"}>>>/SolidMechanics<<<{"href": "../../../syntax/Physics/SolidMechanics/index.html"}>>>/QuasiStatic<<<{"href": "../../../syntax/Physics/SolidMechanics/QuasiStatic/index.html"}>>>]
  generate_output<<<{"description": "Add scalar quantity output for stress and/or strain"}>>> = 'stress_xx stress_yy stress_zz strain_xx strain_yy strain_zz max_principal_stress'
  add_variables<<<{"description": "Add the displacement variables"}>>> = true
  strain<<<{"description": "Strain formulation"}>>> = FINITE
  incremental<<<{"description": "Use incremental or total strain (if not explicitly specified this defaults to incremental for finite strain and total for small strain)"}>>> = true
  [fuel]
    block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to"}>>> = fuel
    eigenstrain_names<<<{"description": "List of eigenstrains to be applied in this strain calculation"}>>> = 'UCO_swelling_eigenstrain UCO_TE_strain'
    extra_vector_tags<<<{"description": "The tag names for extra vectors that residual data should be saved into"}>>> = 'ref'
  []
  [buffer]
    block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to"}>>> = buffer
    eigenstrain_names<<<{"description": "List of eigenstrains to be applied in this strain calculation"}>>> = 'Buffer_IIDC_strain Buffer_TE_strain'
    extra_vector_tags<<<{"description": "The tag names for extra vectors that residual data should be saved into"}>>> = 'ref'
  []
  [IPyC]
    block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to"}>>> = IPyC
    eigenstrain_names<<<{"description": "List of eigenstrains to be applied in this strain calculation"}>>> = 'IPyC_IIDC_strain IPyC_TE_strain'
    extra_vector_tags<<<{"description": "The tag names for extra vectors that residual data should be saved into"}>>> = 'ref'
  []
  [SiC]
    block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to"}>>> = SiC
    eigenstrain_names<<<{"description": "List of eigenstrains to be applied in this strain calculation"}>>> = 'SiC_thermal_eigenstrain'
    extra_vector_tags<<<{"description": "The tag names for extra vectors that residual data should be saved into"}>>> = 'ref'
  []
  [OPyC]
    block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to"}>>> = OPyC
    eigenstrain_names<<<{"description": "List of eigenstrains to be applied in this strain calculation"}>>> = 'OPyC_IIDC_strain OPyC_TE_strain'
    extra_vector_tags<<<{"description": "The tag names for extra vectors that residual data should be saved into"}>>> = 'ref'
  []
[]

[Kernels<<<{"href": "../../../syntax/Kernels/index.html"}>>>]
  [heat_ie]
    type = HeatConductionTimeDerivative<<<{"description": "Time derivative term $\\rho c_p \\frac{\\partial T}{\\partial t}$ of the thermal energy conservation equation.", "href": "../../../source/kernels/HeatConductionTimeDerivative.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
  []
  [heat]
    type = HeatConduction<<<{"description": "Diffusive heat conduction term $-\\nabla\\cdot(k\\nabla T)$ of the thermal energy conservation equation", "href": "../../../source/kernels/HeatConduction.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
  []
  [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
    fission_rate<<<{"description": "Coupled Fission Rate"}>>> = fission_rate
    extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'ref'
  []
[]

[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
  [fissionrate]
    type = MaterialRealAux<<<{"description": "Outputs element volume-averaged material properties", "href": "../../../source/auxkernels/MaterialRealAux.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = fission_rate
    property<<<{"description": "The material property name."}>>> = fission_rate
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_begin
  []
  [burnup]
    type = MaterialRealAux<<<{"description": "Outputs element volume-averaged material properties", "href": "../../../source/auxkernels/MaterialRealAux.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = burnup
    property<<<{"description": "The material property name."}>>> = burnup
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_begin
  []
  [fast_neutron_flux]
    type = MaterialRealAux<<<{"description": "Outputs element volume-averaged material properties", "href": "../../../source/auxkernels/MaterialRealAux.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = fast_neutron_flux
    property<<<{"description": "The material property name."}>>> = fast_neutron_flux
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_begin
  []
  [fast_neutron_fluence]
    type = MaterialRealAux<<<{"description": "Outputs element volume-averaged material properties", "href": "../../../source/auxkernels/MaterialRealAux.html"}>>>
    variable<<<{"description": "The name of the variable that this object applies to"}>>> = fast_neutron_fluence
    property<<<{"description": "The material property name."}>>> = fast_neutron_fluence
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = timestep_begin
  []
[]

[ThermalContact<<<{"href": "../../../syntax/Modules/HeatTransfer/ThermalContact/index.html"}>>>]
  [thermal_contact]
    type = GasGapHeatTransfer
    variable = temperature
    primary = IPyC_inner_boundary
    secondary = buffer_outer_boundary
    initial_moles = initial_moles
    gas_released = 'fis_gas_released'
    released_gas_types = 'Kr Xe'
    released_fractions = '0.185 0.815'
    tangential_tolerance = 1e-6
    quadrature = false
    min_gap = 1e-7
    max_gap = 50e-6
    gap_geometry_type = sphere
  []
[]

[BCs<<<{"href": "../../../syntax/NuclearMaterials/BCs/index.html"}>>>]
  [no_disp_x]
    type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = xzero
    value<<<{"description": "Value of the BC"}>>> = 0.0
  []
  [freesurf_temp]
    type = FunctionDirichletBC<<<{"description": "Imposes the essential boundary condition $u=g(t,\\vec{x})$, where $g$ is a (possibly) time and space-dependent MOOSE Function.", "href": "../../../source/bcs/FunctionDirichletBC.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
    function<<<{"description": "The forcing function."}>>> = temp_bc
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = exterior
  []
  [exterior_pressure_x]
    type = Pressure<<<{"description": "Applies a pressure on a given boundary in a given direction", "href": "../../../source/bcs/Pressure.html"}>>>
    variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = exterior
    factor<<<{"description": "The magnitude to use in computing the pressure"}>>> = 0.1e6
  []
  [PlenumPressure<<<{"href": "../../../syntax/BCs/PlenumPressure/index.html"}>>>]
    [plenumPressure]
      boundary<<<{"description": "The list of boundary IDs from the mesh where the pressure will be applied"}>>> = buffer_IPyC_boundary
      startup_time<<<{"description": "The amount of time during which the pressure will ramp from zero to its true value."}>>> = 1e4
      initial_pressure<<<{"description": "The initial pressure in the cavity.  If not given, a zero initial pressure will be used."}>>> = 0
      R<<<{"description": "The universal gas constant for the units used."}>>> = 8.3145
      output_initial_moles<<<{"description": "The name to use when reporting the initial moles of gas"}>>> = initial_moles
      temperature<<<{"description": "The name of the average temperature postprocessor value."}>>> = ave_gas_temp
      volume<<<{"description": "The name of the postprocessor(s) that holds the value of the internal volume in the cavity"}>>> = 'gap_volume buffer_void_volume kernel_void_volume'
      material_input<<<{"description": "The name of the postprocessor(s) that holds the amount of material injected into the plenum."}>>> = 'fis_gas_released'
      output<<<{"description": "The name to use for the cavity pressure value"}>>> = gas_pressure
    []
  []
[]

[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
  [radial_stress]
    type = RankTwoCylindricalComponent<<<{"description": "Compute components of a rank-2 tensor in a cylindrical coordinate system", "href": "../../../source/materials/RankTwoCylindricalComponent.html"}>>>
    rank_two_tensor<<<{"description": "The rank two material property tensor name"}>>> = stress
    cylindrical_axis_point1<<<{"description": "Start point for determining axis of rotation for cylindrical stress/strain components"}>>> = '0 0 0'
    cylindrical_axis_point2<<<{"description": "End point for determining axis of rotation for cylindrical stress/strain components"}>>> = '0 0 1'
    cylindrical_component<<<{"description": "Type of cylindrical scalar output"}>>> = RadialStress
    property_name<<<{"description": "Name of the material property computed by this model"}>>> = radial_stress
    outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = all
  []
  [fission_rate]
    type = GenericFunctionMaterial<<<{"description": "Material object for declaring properties that are populated by evaluation of Function object.", "href": "../../../source/materials/GenericFunctionMaterial.html"}>>>
    prop_names<<<{"description": "The names of the properties this material will have"}>>> = fission_rate
    prop_values<<<{"description": "The corresponding names of the functions that are going to provide the values for the variables"}>>> = fission_rate
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
  []
  [fast_neutron_flux]
    type = FastNeutronFlux<<<{"description": "Computes fast neutron flux.", "href": "../../../source/materials/FastNeutronFlux.html"}>>>
    calculate_fluence<<<{"description": "Flag to calculate fluence from the flux."}>>> = true
    factor<<<{"description": "Constant multiplied against the function, rod average linear power, or q_variable."}>>> = 6.2425e+17
  []
  [UCO_burnup]
    type = TRISOBurnup<<<{"description": "Computes burnup given fission rate density and initial density, initial enrichment, and molar mass of the kernel.", "href": "../../../source/materials/TRISOBurnup.html"}>>>
    initial_density<<<{"description": "initial density of the kernel (kg/m^3)"}>>> = 10966
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
  []
  [UCO_thermal]
    type = UCOThermal<<<{"description": "Computes thermal conductivity (W/m-K) and specific heat capacity (J/kg-K) for UCO.", "href": "../../../source/materials/UCOThermal.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []
  [UCO_elasticity_tensor]
    type = UCOElasticityTensor<<<{"description": "Computes the Young's modulus (Pa) and elastic Poisson's ratio (dimensionless) for UCO.", "href": "../../../source/materials/solid_mechanics/UCOElasticityTensor.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []
  [UCO_stress]
    type = ComputeFiniteStrainElasticStress<<<{"description": "Compute stress using elasticity for finite strains", "href": "../../../source/materials/ComputeFiniteStrainElasticStress.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
  []
  [UCO_VolumetricSwellingEigenstrain]
    type = UCOVolumetricSwellingEigenstrain<<<{"description": "Computes fission-induced swelling (percent per percent FIMA) for UCO.", "href": "../../../source/materials/solid_mechanics/UCOVolumetricSwellingEigenstrain.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = UCO_swelling_eigenstrain
  []
  [fuel_thermal_expansion]
    type = ComputeThermalExpansionEigenstrain<<<{"description": "Computes eigenstrain due to thermal expansion with a constant coefficient", "href": "../../../source/materials/ComputeThermalExpansionEigenstrain.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    thermal_expansion_coeff<<<{"description": "Thermal expansion coefficient"}>>> = 10.0e-6
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
    eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = UCO_TE_strain
  []
  [UCO_density]
    type = StrainAdjustedDensity<<<{"description": "Creates density material property", "href": "../../../source/materials/StrainAdjustedDensity.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    strain_free_density<<<{"description": "Material property for strain-free density"}>>> = 10966
  []
  [fission_gas_release]
    type = UCOFGR<<<{"description": "Fission gas release model for UCO", "href": "../../../source/materials/UCOFGR.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    average_grain_radius<<<{"description": "Average grain radius (m)"}>>> = 10e-6
    temperature<<<{"description": "Coupled temperature (K)"}>>> = temperature
    triso_geometry<<<{"description": "TRISOGeometry user object name"}>>> = particle_geometry
    cutoff_neutron_flux<<<{"description": "The cutoff fast neutron flux for enabling the Booth fractional release calculations during accident simulation conditions."}>>> = 0.0
  []
  [normal_vectors_triso]
    type = NormalVectorsTRISO<<<{"description": "Computes the normal vectors for TRISO layers.", "href": "../../../source/materials/NormalVectorsTRISO.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'buffer IPyC OPyC'
  []
  [BAF_IPyC]
    type = BaconAnisotropyFactor<<<{"description": "Computes the bacon anistropy factor.", "href": "../../../source/materials/BaconAnisotropyFactor.html"}>>>
    initial_BAF<<<{"description": "Initial Bacon Anisotropy Factor (BAF) must be greater than 1.0."}>>> = 1.0465
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
  []
  [BAF_OPyC]
    type = BaconAnisotropyFactor<<<{"description": "Computes the bacon anistropy factor.", "href": "../../../source/materials/BaconAnisotropyFactor.html"}>>>
    initial_BAF<<<{"description": "Initial Bacon Anisotropy Factor (BAF) must be greater than 1.0."}>>> = 1.0429
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = OPyC
  []
  [buffer_elasticity_tensor]
    type = BufferElasticityTensor<<<{"description": "Computes Young's modulus (Pa) and elastic Poisson's ratio (dimensionless) for the buffer layer in TRISO fuels.", "href": "../../../source/materials/solid_mechanics/BufferElasticityTensor.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = buffer
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []
  [buffer_stress]
    type = BufferCEGACreep<<<{"description": "Computes irradiation-induced creep ((MPa-n/m^2)^-1) for Buffer.", "href": "../../../source/materials/solid_mechanics/BufferCEGACreep.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = buffer
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []
  [buffer_thermal]
    type = BufferThermal<<<{"description": "Computes thermal conductivity (W/m-K) and specific heat capacity (J/kg-K) for Buffer.", "href": "../../../source/materials/BufferThermal.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = buffer
    initial_density<<<{"description": "Initial density for Buffer."}>>> = 1050.0
  []
  [buffer_density]
    type = StrainAdjustedDensity<<<{"description": "Creates density material property", "href": "../../../source/materials/StrainAdjustedDensity.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = buffer
    strain_free_density<<<{"description": "Material property for strain-free density"}>>> = 1050.0
  []
  [buffer_TE]
    type = BufferThermalExpansionEigenstrain<<<{"description": "Computes thermal expansion (/K) and associated eigenstrain (dimensionless) for Buffer.", "href": "../../../source/materials/solid_mechanics/BufferThermalExpansionEigenstrain.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = buffer
    eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = Buffer_TE_strain
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []
  [buffer_IIDC]
    type = BufferCEGAIrradiationEigenstrain<<<{"description": "Irradiation eigenstrain for Buffer", "href": "../../../source/materials/solid_mechanics/BufferCEGAIrradiationEigenstrain.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = buffer
    eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = Buffer_IIDC_strain
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []
  [IPyC_elasticity_tensor]
    type = PyCElasticityTensor<<<{"description": "Computes PyC elasticity tensor", "href": "../../../source/materials/solid_mechanics/PyCElasticityTensor.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    temperature<<<{"description": "Coupled temperature (K)"}>>> = temperature
  []
  [IPyC_stress]
    type = PyCCEGACreep<<<{"description": "Computes the irradiation creep (Miller's model) for PyC in an implicit manner.", "href": "../../../source/materials/solid_mechanics/PyCCEGACreep.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    creep_rate_scale_factor<<<{"description": "Scale factor to be applied on the creep rate."}>>> = 1
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []

  [IPyC_thermal]
    type = HeatConductionMaterial<<<{"description": "General-purpose material model for heat conduction", "href": "../../../source/materials/HeatConductionMaterial.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    thermal_conductivity<<<{"description": "The thermal conductivity value"}>>> = 4.0
    specific_heat<<<{"description": "The specific heat value"}>>> = 720.0
  []
  [IPyC_density]
    type = GenericConstantMaterial<<<{"description": "Declares material properties based on names and values prescribed by input parameters.", "href": "../../../source/materials/GenericConstantMaterial.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    prop_names<<<{"description": "The names of the properties this material will have"}>>> = 'density'
    prop_values<<<{"description": "The values associated with the named properties"}>>> = 1890
  []
  [IPyC_IIDC]
    type = PyCCEGAIrradiationEigenstrain<<<{"description": "Computes irradiation-induced dimensional changes (IIDC) for PyC.", "href": "../../../source/materials/solid_mechanics/PyCCEGAIrradiationEigenstrain.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = IPyC_IIDC_strain
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
    irradiation_eigenstrain_scale_factor<<<{"description": "Scale factor for PyC IIDC"}>>> = 1
  []
  [IPyC_TE]
    type = PyCThermalExpansionEigenstrain<<<{"description": "Computes the thermal expansion (per K) and associated eigenstrain (dimensionless) for PyC.", "href": "../../../source/materials/solid_mechanics/PyCThermalExpansionEigenstrain.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = IPyC_TE_strain
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []
  [SiC_elasticity_tensor]
    type = MonolithicSiCElasticityTensor<<<{"description": "Computes the Young's modulus and Poisson's ratio for monolithic silicon carbide (CVD) cladding using relations as a function of temperature.", "href": "../../../source/materials/solid_mechanics/MonolithicSiCElasticityTensor.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
    elastic_modulus_model<<<{"description": "Options for the correlation used to calculate the Young's modulus."}>>> = miller
  []
  [SiC_stress]
    type = ComputeFiniteStrainElasticStress<<<{"description": "Compute stress using elasticity for finite strains", "href": "../../../source/materials/ComputeFiniteStrainElasticStress.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
  []
  [SiC_thermal]
    type = MonolithicSiCThermal<<<{"description": "Computes thermal conductivity and specific heat of monolithic silicon carbide.", "href": "../../../source/materials/MonolithicSiCThermal.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    temperature<<<{"description": "Coupled Temperature"}>>> = temperature
    thermal_conductivity_model<<<{"description": "Options for the correlation used to calculate thermal conductivity"}>>> = miller
  []
  [SiC_density]
    type = StrainAdjustedDensity<<<{"description": "Creates density material property", "href": "../../../source/materials/StrainAdjustedDensity.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    strain_free_density<<<{"description": "Material property for strain-free density"}>>> = 3200.0
  []
  [SiC_thermal_expansion]
    type = ComputeThermalExpansionEigenstrain<<<{"description": "Computes eigenstrain due to thermal expansion with a constant coefficient", "href": "../../../source/materials/ComputeThermalExpansionEigenstrain.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    thermal_expansion_coeff<<<{"description": "Thermal expansion coefficient"}>>> = 4.9e-6
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
    eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = SiC_thermal_eigenstrain
  []
  [OPyC_elasticity_tensor]
    type = PyCElasticityTensor<<<{"description": "Computes PyC elasticity tensor", "href": "../../../source/materials/solid_mechanics/PyCElasticityTensor.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = OPyC
    temperature<<<{"description": "Coupled temperature (K)"}>>> = temperature
    initial_BAF<<<{"description": "Initial Bacon Anisotropy Factor (BAF) must be greater than or equal to 1.0."}>>> = 1.0
  []
  [OPyC_stress]
    type = PyCCEGACreep<<<{"description": "Computes the irradiation creep (Miller's model) for PyC in an implicit manner.", "href": "../../../source/materials/solid_mechanics/PyCCEGACreep.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = OPyC
    creep_rate_scale_factor<<<{"description": "Scale factor to be applied on the creep rate."}>>> = 1
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []
  [OPyC_thermal_conductivity]
    type = HeatConductionMaterial<<<{"description": "General-purpose material model for heat conduction", "href": "../../../source/materials/HeatConductionMaterial.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = OPyC
    thermal_conductivity<<<{"description": "The thermal conductivity value"}>>> = 4.0
    specific_heat<<<{"description": "The specific heat value"}>>> = 720.0
  []
  [OPyC_density]
    type = GenericConstantMaterial<<<{"description": "Declares material properties based on names and values prescribed by input parameters.", "href": "../../../source/materials/GenericConstantMaterial.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = OPyC
    prop_names<<<{"description": "The names of the properties this material will have"}>>> = 'density'
    prop_values<<<{"description": "The values associated with the named properties"}>>> = 1900
  []
  [OPyC_IIDC]
    type = PyCCEGAIrradiationEigenstrain<<<{"description": "Computes irradiation-induced dimensional changes (IIDC) for PyC.", "href": "../../../source/materials/solid_mechanics/PyCCEGAIrradiationEigenstrain.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = OPyC
    eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = OPyC_IIDC_strain
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
    irradiation_eigenstrain_scale_factor<<<{"description": "Scale factor for PyC IIDC"}>>> = 1
  []
  [OPyC_TE]
    type = PyCThermalExpansionEigenstrain<<<{"description": "Computes the thermal expansion (per K) and associated eigenstrain (dimensionless) for PyC.", "href": "../../../source/materials/solid_mechanics/PyCThermalExpansionEigenstrain.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = OPyC
    eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = OPyC_TE_strain
    temperature<<<{"description": "Coupled temperature"}>>> = temperature
  []
  [characteristic_strength_SiC]
    type = GenericConstantMaterial<<<{"description": "Declares material properties based on names and values prescribed by input parameters.", "href": "../../../source/materials/GenericConstantMaterial.html"}>>>
    prop_values<<<{"description": "The values associated with the named properties"}>>> = '9640000'
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    prop_names<<<{"description": "The names of the properties this material will have"}>>> = 'characteristic_strength'
  []
  [characteristic_strength_PyC]
    type = PyCCharacteristicStrength<<<{"description": "Computes characteristic strength of pyrocarbons: Pa-m^(3/modulus).", "href": "../../../source/materials/PyCCharacteristicStrength.html"}>>>
    temperature<<<{"description": "Coupled temperature (K)"}>>> = temperature
    X<<<{"description": "Fitting parameter."}>>> = 1.02
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'IPyC OPyC'
  []
[]

[Dampers<<<{"href": "../../../syntax/Dampers/index.html"}>>>]
  [temp]
    type = MaxIncrement<<<{"description": "Limits a variable's update by some max fraction", "href": "../../../source/dampers/MaxIncrement.html"}>>>
    variable<<<{"description": "The name of the variable that this damper operates on"}>>> = temperature
    max_increment<<<{"description": "The maximum newton increment for the variable."}>>> = 100
  []
[]

[Preconditioning<<<{"href": "../../../syntax/Preconditioning/index.html"}>>>]
  [smp]
    type = SMP<<<{"description": "Single matrix preconditioner (SMP) builds a preconditioner using user defined off-diagonal parts of the Jacobian.", "href": "../../../source/preconditioners/SingleMatrixPreconditioner.html"}>>>
    full<<<{"description": "Set to true if you want the full set of couplings between variables simply for convenience so you don't have to set every off_diag_row and off_diag_column combination."}>>> = true
  []
[]

[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
  type = Transient
  solve_type = 'PJFNK'

  petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
  petsc_options_value = 'lu superlu_dist'

  line_search = 'none'

  nl_rel_tol = 5e-6
  nl_abs_tol = 1e-8
  nl_max_its = 20

  l_tol = 1e-4
  l_max_its = 50

  start_time = 0.0
  end_time = 4.831315e7

  dtmin = 1e-4
  dt = 5e5
[]

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [ave_gas_temp]
    type = ElementAverageValue<<<{"description": "Computes the volumetric average of a variable", "href": "../../../source/postprocessors/ElementAverageValue.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = buffer
    variable<<<{"description": "The name of the variable that this object operates on"}>>> = temperature
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
  []
  [fis_gas_released]
    type = ElementIntegralMaterialProperty<<<{"description": "Compute the integral of the material property over the domain", "href": "../../../source/postprocessors/ElementIntegralMaterialProperty.html"}>>>
    mat_prop<<<{"description": "The name of the material property"}>>> = fis_gas_released
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    use_displaced_mesh<<<{"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."}>>> = false
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
  []
  [gap_volume]
    type = InternalVolume<<<{"description": "Computes the volume of an enclosed area by performing an integral over a user-supplied boundary.", "href": "../../../source/postprocessors/InternalVolume.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = buffer_IPyC_boundary
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial linear'
    use_displaced_mesh<<<{"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."}>>> = true
  []
  [buffer_void_volume]
    type = VoidVolume<<<{"description": "Computes void volume based on actual and theoretical density.", "href": "../../../source/postprocessors/VoidVolume.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = buffer
    theoretical_density<<<{"description": "Theoretical density of the material (Postprocessor)."}>>> = 2250
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
    use_displaced_mesh<<<{"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."}>>> = true
  []
  [kernel_th_density]
    type = UCOTheoreticalDensity<<<{"description": "Computes UCO theoretical density.", "href": "../../../source/postprocessors/UCOTheoreticalDensity.html"}>>>
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = initial
  []
  [kernel_void_volume]
    type = VoidVolume<<<{"description": "Computes void volume based on actual and theoretical density.", "href": "../../../source/postprocessors/VoidVolume.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    theoretical_density<<<{"description": "Theoretical density of the material (Postprocessor)."}>>> = kernel_th_density
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
    use_displaced_mesh<<<{"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."}>>> = true
  []
  [particle_power]
    type = ElementIntegralPower<<<{"description": "Computes the power given the fission rate and energy per fission.", "href": "../../../source/postprocessors/ElementIntegralPower.html"}>>>
    variable<<<{"description": "The name of the variable that this object operates on"}>>> = temperature
    use_material_fission_rate<<<{"description": "Flag to use the material 'fission_rate_material' instead of variable fission rate"}>>> = true
    fission_rate_material<<<{"description": "Fission rate material property name"}>>> = fission_rate
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
  []
  [max_fluence]
    type = ElementExtremeValue<<<{"description": "Finds either the min or max elemental value of a variable over the domain.", "href": "../../../source/postprocessors/ElementExtremeValue.html"}>>>
    variable<<<{"description": "The name of the variable that this postprocessor operates on"}>>> = fast_neutron_fluence
    value_type<<<{"description": "Type of extreme value to return. 'max' returns the maximum value. 'min' returns the minimum value. 'max_abs' returns the maximum of the absolute value."}>>> = 'max'
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
  []
  [max_burnup]
    type = ElementExtremeValue<<<{"description": "Finds either the min or max elemental value of a variable over the domain.", "href": "../../../source/postprocessors/ElementExtremeValue.html"}>>>
    variable<<<{"description": "The name of the variable that this postprocessor operates on"}>>> = burnup
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    value_type<<<{"description": "Type of extreme value to return. 'max' returns the maximum value. 'min' returns the minimum value. 'max_abs' returns the maximum of the absolute value."}>>> = 'max'
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
  []
  [SiC_stress]
    type = ElementExtremeMaterialProperty<<<{"description": "Determines the minimum or maximum of a material property over a volume.", "href": "../../../source/postprocessors/ElementExtremeMaterialProperty.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    value_type<<<{"description": "Type of extreme value to return: 'max' returns the maximum value and 'min' returns the minimum value."}>>> = min
    mat_prop<<<{"description": "Material property for which to find the extreme"}>>> = stress_yy
  []
  [strength_SiC]
    type = WeibullEffectiveMeanStrength<<<{"description": "Computes Weibull effective mean strength, which is used by the WeibullFailureOutputUsingCorrelation Postprocessor.", "href": "../../../source/postprocessors/WeibullEffectiveMeanStrength.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
  []
  [failure_indicator_SiC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "../../../source/postprocessors/WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    stress_name<<<{"description": "Name of the stress property."}>>> = stress_yy
    high_fidelity_analysis_strength<<<{"description": "The effective mean strength obtained from a high-fidelity analysis."}>>> = 'high_fidelity_strength_asphericity'
    stress_correlation_function<<<{"description": "The stress correlation function obtained from a high-fidelity analysis."}>>> = 'stress_correlation_asphericity'
    stress_change_correlation_function<<<{"description": "Correlation function of stress change from minumum to maximum during the irradiation history obtained from a high-fidelity analysis."}>>> = 'stress_change_correlation_asphericity'
  []
  [strength_IPyC]
    type = WeibullEffectiveMeanStrength<<<{"description": "Computes Weibull effective mean strength, which is used by the WeibullFailureOutputUsingCorrelation Postprocessor.", "href": "../../../source/postprocessors/WeibullEffectiveMeanStrength.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 9.5
  []
  [failure_indicator_IPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "../../../source/postprocessors/WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 9.5
    stress_name<<<{"description": "Name of the stress property."}>>> = max_principal_stress
    effective_mean_strength<<<{"description": "The name of the postprocessor calculating the effective mean strength."}>>> = strength_IPyC
  []
  [failure_indicator_SiC_crackedIPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "../../../source/postprocessors/WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    stress_name<<<{"description": "Name of the stress property."}>>> = stress_yy
    high_fidelity_analysis_strength<<<{"description": "The effective mean strength obtained from a high-fidelity analysis."}>>> = 'high_fidelity_strength_crackedIPyC'
    stress_correlation_function<<<{"description": "The stress correlation function obtained from a high-fidelity analysis."}>>> = 'stress_correlation_crackedIPyC'
  []
  [failure_indicator_debonding]
    type = TRISODebondingFailureIndicator<<<{"description": "Computes debonding failure indicator of TRISO layers.", "href": "../../../source/postprocessors/TRISODebondingFailureIndicator.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = IPyC_outer_boundary
    bond_strength<<<{"description": "bond strength is treated as a parameter having a Gaussian distribution with a specific mean value and standard deviation."}>>> = 10e6
    stress_name<<<{"description": "Name of the stress property."}>>> = radial_stress
  []
  [failure_indicator_SiC_debonding]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "../../../source/postprocessors/WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    stress_name<<<{"description": "Name of the stress property."}>>> = stress_yy
    high_fidelity_analysis_strength<<<{"description": "The effective mean strength obtained from a high-fidelity analysis."}>>> = 'high_fidelity_strength_debonding'
    stress_correlation_function<<<{"description": "The stress correlation function obtained from a high-fidelity analysis."}>>> = 'stress_correlation_debonding'
  []
  [sic_failure_overall]
    type = TRISOFailureEvaluation<<<{"description": "Computes particle failure based on Weibull statistical theory. It returns either 1 or 0, indicating fails or not fail.", "href": "../../../source/postprocessors/TRISOFailureEvaluation.html"}>>>
    IPyC_failure<<<{"description": "The name of the postprocessor calculating the IPyC failure."}>>> = failure_indicator_IPyC
    SiC_failure_crackedIPyC<<<{"description": "The name of the postprocessor calculating the SiC failure due to cracked IPyC."}>>> = failure_indicator_SiC_crackedIPyC
    SiC_failure<<<{"description": "The name of the postprocessor calculating the SiC failure."}>>> = failure_indicator_SiC
    SiC_failure_pd_penetration<<<{"description": "The name of the postprocessor calculating the SiC failure due to palladium penetration."}>>> = failure_indicator_pd_penetration
    SiC_failure_kernel_migration<<<{"description": "The name of the postprocessor calculating the SiC failure due to kernel migration."}>>> = failure_indicator_kernel_migration
    failure_type<<<{"description": "The TRISO failure type"}>>> = SIC_FAILURE_OVERALL
  []
  [ipyc_cracking]
    type = TRISOFailureEvaluation<<<{"description": "Computes particle failure based on Weibull statistical theory. It returns either 1 or 0, indicating fails or not fail.", "href": "../../../source/postprocessors/TRISOFailureEvaluation.html"}>>>
    IPyC_failure<<<{"description": "The name of the postprocessor calculating the IPyC failure."}>>> = failure_indicator_IPyC
    SiC_failure_crackedIPyC<<<{"description": "The name of the postprocessor calculating the SiC failure due to cracked IPyC."}>>> = failure_indicator_SiC_crackedIPyC
    SiC_failure<<<{"description": "The name of the postprocessor calculating the SiC failure."}>>> = failure_indicator_SiC
    failure_type<<<{"description": "The TRISO failure type"}>>> = IPYC_CRACKING
  []
  [sic_failure_due_to_pressure]
    type = TRISOFailureEvaluation<<<{"description": "Computes particle failure based on Weibull statistical theory. It returns either 1 or 0, indicating fails or not fail.", "href": "../../../source/postprocessors/TRISOFailureEvaluation.html"}>>>
    IPyC_failure<<<{"description": "The name of the postprocessor calculating the IPyC failure."}>>> = failure_indicator_IPyC
    SiC_failure_crackedIPyC<<<{"description": "The name of the postprocessor calculating the SiC failure due to cracked IPyC."}>>> = failure_indicator_SiC_crackedIPyC
    SiC_failure<<<{"description": "The name of the postprocessor calculating the SiC failure."}>>> = failure_indicator_SiC
    failure_type<<<{"description": "The TRISO failure type"}>>> = SIC_FAILURE_DUE_TO_PRESSURE
  []
  [sic_failure_due_to_ipyc_cracking]
    type = TRISOFailureEvaluation<<<{"description": "Computes particle failure based on Weibull statistical theory. It returns either 1 or 0, indicating fails or not fail.", "href": "../../../source/postprocessors/TRISOFailureEvaluation.html"}>>>
    IPyC_failure<<<{"description": "The name of the postprocessor calculating the IPyC failure."}>>> = failure_indicator_IPyC
    SiC_failure_crackedIPyC<<<{"description": "The name of the postprocessor calculating the SiC failure due to cracked IPyC."}>>> = failure_indicator_SiC_crackedIPyC
    SiC_failure<<<{"description": "The name of the postprocessor calculating the SiC failure."}>>> = failure_indicator_SiC
    failure_type<<<{"description": "The TRISO failure type"}>>> = SIC_FAILURE_DUE_TO_IPYC_CRACKING
  []
  [stress_SiC_crackedIPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "../../../source/postprocessors/WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    stress_name<<<{"description": "Name of the stress property."}>>> = stress_yy
    high_fidelity_analysis_strength<<<{"description": "The effective mean strength obtained from a high-fidelity analysis."}>>> = 'high_fidelity_strength_crackedIPyC'
    stress_correlation_function<<<{"description": "The stress correlation function obtained from a high-fidelity analysis."}>>> = 'stress_correlation_crackedIPyC'
    output_type<<<{"description": "Choose between failure indicator (default), stress, or strength outputs."}>>> = 'stress'
  []
  [actual_strength_SiC_crackedIPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "../../../source/postprocessors/WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    stress_name<<<{"description": "Name of the stress property."}>>> = stress_yy
    high_fidelity_analysis_strength<<<{"description": "The effective mean strength obtained from a high-fidelity analysis."}>>> = 'high_fidelity_strength_crackedIPyC'
    stress_correlation_function<<<{"description": "The stress correlation function obtained from a high-fidelity analysis."}>>> = 'stress_correlation_crackedIPyC'
    output_type<<<{"description": "Choose between failure indicator (default), stress, or strength outputs."}>>> = 'strength'
  []
  [SiC_crackedIPyC_stressminusstrength]
    type = FunctionValuePostprocessor<<<{"description": "Computes the value of a supplied function at a single point (scalable)", "href": "../../../source/postprocessors/FunctionValuePostprocessor.html"}>>>
    function<<<{"description": "The function which supplies the postprocessor value."}>>> = 'sic_crackedipyc_stress_strength'
  []
  [debonding]
    type = TRISOFailureEvaluation<<<{"description": "Computes particle failure based on Weibull statistical theory. It returns either 1 or 0, indicating fails or not fail.", "href": "../../../source/postprocessors/TRISOFailureEvaluation.html"}>>>
    IPyC_failure<<<{"description": "The name of the postprocessor calculating the IPyC failure."}>>> = failure_indicator_IPyC
    SiC_failure_crackedIPyC<<<{"description": "The name of the postprocessor calculating the SiC failure due to cracked IPyC."}>>> = failure_indicator_SiC_crackedIPyC
    SiC_failure<<<{"description": "The name of the postprocessor calculating the SiC failure."}>>> = failure_indicator_SiC
    IPyC_SiC_debonding<<<{"description": "The name of the postprocessor calculating the IPyC-SiC debonding."}>>> = failure_indicator_debonding
    SiC_failure_debonding<<<{"description": "The name of the postprocessor calculating the SiC failure due to IPyC-SiC debonding."}>>> = failure_indicator_SiC_debonding
    failure_type<<<{"description": "The TRISO failure type"}>>> = IPYC_SIC_DEBONDING
  []
  [fluence_at_failure]
    type = TRISOFailureOccurrenceStatus<<<{"description": "This postprocessor returns the status at the time when a specified failure occurs.", "href": "../../../source/postprocessors/TRISOFailureOccurrenceStatus.html"}>>>
    failure_evaluation<<<{"description": "The name of the postprocessor calculating the failure evaluation."}>>> = ipyc_cracking
    failure_information<<<{"description": "The name of the postprocessor calculating failure information."}>>> = max_fluence
  []
  [weibull_failure_probability_IPyC]
    type = WeibullFailureProbability<<<{"description": "Computes Weibull failure probability using principle of independent action (PIA) model.", "href": "../../../source/postprocessors/WeibullFailureProbability.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 9.5
    characteristic_strength<<<{"description": "The material name of characteristic strength."}>>> = characteristic_strength
  []
  [weibull_failure_probability_SiC]
    type = WeibullFailureProbability<<<{"description": "Computes Weibull failure probability using principle of independent action (PIA) model.", "href": "../../../source/postprocessors/WeibullFailureProbability.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    characteristic_strength<<<{"description": "The material name of characteristic strength."}>>> = characteristic_strength
  []
  [pd_penetration]
    type = PdPenetration<<<{"description": "Penetration depth of palladium into the SiC layer of TRISO fuel particles", "href": "../../../source/postprocessors/PdPenetration.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = SiC_inner_boundary
    variable<<<{"description": "The name of the variable which this postprocessor integrates"}>>> = temperature
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'initial timestep_end'
  []
  [failure_indicator_pd_penetration]
    type = PdPenetrationFailureIndicator<<<{"description": "Determines whether the SiC layer fails based on palladium penetration depth.", "href": "../../../source/postprocessors/PdPenetrationFailureIndicator.html"}>>>
    triso_geometry<<<{"description": "User object containing the TrisoGeometry"}>>> = particle_geometry
    pd_penetration<<<{"description": "The name of the postprocessor that computes palladium penetration depth."}>>> = pd_penetration
  []
  [kernel_migration_distance]
    type = KernelMigrationDistance<<<{"description": "Calculates the kernel migration distance.", "href": "../../../source/postprocessors/KernelMigrationDistance.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 'fuel buffer IPyC SiC OPyC'
    variable<<<{"description": "The name of the variable that this object operates on"}>>> = temperature
    temperature_gradient<<<{"description": "The Postprocessor that will give the temperature gradient across the particle."}>>> = 15000
    kernel_type<<<{"description": "Kernel type"}>>> = UCO
  []
  [failure_indicator_kernel_migration]
    type = KernelMigrationFailureIndicator<<<{"description": "Determines whether the SiC layer fails based on kernel migration distance.", "href": "../../../source/postprocessors/KernelMigrationFailureIndicator.html"}>>>
    kernel_migration_distance<<<{"description": "The name of the postprocessor that computes kernel migration distance."}>>> = kernel_migration_distance
    triso_geometry<<<{"description": "User object containing the TrisoGeometry"}>>> = particle_geometry
  []
[]

[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
  print_linear_residuals<<<{"description": "Enable printing of linear residuals to the screen (Console)"}>>> = false
  time_step_interval<<<{"description": "The interval (number of time steps) at which output occurs"}>>> =  1
  csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = false
  exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = false
  perf_graph<<<{"description": "Enable printing of the performance graph to the screen (Console)"}>>> = true
  print_linear_converged_reason<<<{"description": "Enable/disable printing of the linear solver convergence reason to the screen. This parameter only affects the output of the third-party solver (e.g. PETSc), not MOOSE itself."}>>> = false
  print_nonlinear_converged_reason<<<{"description": "Enable/disable printing of the nonlinear solver convergence reason to the screen. This parameter only affects the output of the third-party solver (e.g. PETSc), not MOOSE itself."}>>> = false
[]
(examples/TRISO/failure_probability_monte_carlo/triso_1d_constant.i)

Failure criterion

In this example, we are interested in characterizing the SiC layer failure probability given that the inner pyrolytic carbon (IPyC) layer has cracked. As such, the failure criterion is the SiC maximum stress exceeding its strength conditional on IPyC layer has failed. That is, failure occurs when (maximum stress - strength) in SiC is greater than zero. The postprocessor blocks that monitor the SiC cracked IPyC layer failure are presented below.

The following postprocessor returns the maximum stress in the SiC layer given that the IPyC layer has cracked.

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [stress_SiC_crackedIPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "../../../source/postprocessors/WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    stress_name<<<{"description": "Name of the stress property."}>>> = stress_yy
    high_fidelity_analysis_strength<<<{"description": "The effective mean strength obtained from a high-fidelity analysis."}>>> = 'high_fidelity_strength_crackedIPyC'
    stress_correlation_function<<<{"description": "The stress correlation function obtained from a high-fidelity analysis."}>>> = 'stress_correlation_crackedIPyC'
    output_type<<<{"description": "Choose between failure indicator (default), stress, or strength outputs."}>>> = 'stress'
  []
[]
(examples/TRISO/failure_probability_monte_carlo/triso_1d_constant.i)

The following postprocessor returns the strength of the SiC layer.

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [actual_strength_SiC_crackedIPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "../../../source/postprocessors/WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = SiC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    stress_name<<<{"description": "Name of the stress property."}>>> = stress_yy
    high_fidelity_analysis_strength<<<{"description": "The effective mean strength obtained from a high-fidelity analysis."}>>> = 'high_fidelity_strength_crackedIPyC'
    stress_correlation_function<<<{"description": "The stress correlation function obtained from a high-fidelity analysis."}>>> = 'stress_correlation_crackedIPyC'
    output_type<<<{"description": "Choose between failure indicator (default), stress, or strength outputs."}>>> = 'strength'
  []
[]
(examples/TRISO/failure_probability_monte_carlo/triso_1d_constant.i)

Finally, a FunctionValuePostprocessor is defined to return the SiC stress and strength difference to the main input file that drives the PSS. This postprocessor takes an input function which in-turn takes as inputs the SiC stress and strength to compute their difference.

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [SiC_crackedIPyC_stressminusstrength]
    type = FunctionValuePostprocessor<<<{"description": "Computes the value of a supplied function at a single point (scalable)", "href": "../../../source/postprocessors/FunctionValuePostprocessor.html"}>>>
    function<<<{"description": "The function which supplies the postprocessor value."}>>> = 'sic_crackedipyc_stress_strength'
  []
[]
(examples/TRISO/failure_probability_monte_carlo/triso_1d_constant.i)

Random input parameters to the TRISO model

There are six random parameters to the considered TRISO model. These parameters are kernel radius, buffer thickness, IPyC thickness, SiC thickness, OPyC thickness, and IPyC or SiC strength. The corresponding probability distributions are specified in the main input file as presented below.

[Distributions<<<{"href": "../../../syntax/Distributions/index.html"}>>>]
  [normal_kernel_r]
    type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
    mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 213.35e-6
    standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 4.4e-6
  []
  [normal_buffer_t]
    type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
    mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 98.9e-6
    standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 8.4e-6
  []
  [normal_ipyc_t]
    type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
    mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 40.4e-6
    standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 2.5e-6
  []
  [normal_sic_t]
    type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
    mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 35.2e-6
    standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 1.2e-6
  []
  [normal_opyc_t]
    type = Normal<<<{"description": "Normal distribution", "href": "../../../source/distributions/Normal.html"}>>>
    mean<<<{"description": "Mean (or expectation) of the distribution."}>>> = 43.4e-6
    standard_deviation<<<{"description": "Standard deviation of the distribution "}>>> = 2.9e-6
  []
  [uniform]
    type = Uniform<<<{"description": "Continuous uniform distribution.", "href": "../../../source/distributions/Uniform.html"}>>>
  []
[]
(examples/TRISO/failure_probability_variance_reduction/Main_PSS.i)

ParallelSubsetSimulation Sampler

As described here, the PSS sampler works by expressing a small failure probability as a product of larger and easy to estimate intermediate failure probabilities. In doing so, PSS creates intermediate failure thresholds before the required failure threshold. For estimating each intermediate failure probability, PSS simulates a set of samples which is referred to as a subset. The samples in the first subset are simulated using regular Monte Carlo procedure. The samples in the subsequent subsets are simulated using Markov chain Monte Carlo (MCMC). PSS uses tens or even hundreds of Markov Chains in each subset after the first one to simulate the samples. As such, these Markov Chains and the associated model runs can be parallelized. It is to be noted that parallelization can only be achieved across the Markov Chains and not within a chain because samples within a chain are history dependent. With each subset, it is noticed that PSS will get closer to the failure region of the model.

To give more information about the parallelization capability of PSS, consider that we have four subsets each with 4000 samples. By default, Bison/MOOSE simulates 10 samples per Markov chain. Therefore, each subset will have 400 (i.e., 4000/10) independent Markov chains which can be parallized. This means, if we select 5 processors for evaluation, each processor will run 800 (i.e., 400/5 * 10 samples per chain) samples per subset. Since we have four subsets, each processor will run 3200 samples and model evaluations in total.

commentnote:Markov chain proposals in Bison/MOOSE

In Bison/MOOSE, currently, Markov chain proposals are made by transforming all the inputs into a standard Normal space and then adding a Gaussian noise to a previously accepted sample with a unit standard deviation (default behavior). Expanding this proposal scheme to incorporate other MCMC algorithms is possible and would be of interest in the future.

Below, the PSS sampler block is presented. distributions are the distributions of the input parameters. num_samplessub is the number of samples per subset. num_parallel_chains is the number of Markov chains to be executed in parallel inputs_reporter and output_reporter are the inputs and output values returned to the Sampler class from the Reporter class to facilitate the proposal of the next samples in the Markov chains.

[Samplers<<<{"href": "../../../syntax/Samplers/index.html"}>>>]
  [sample]
    type = ParallelSubsetSimulation<<<{"description": "Parallel Subset Simulation sampler.", "href": "../../../source/samplers/ParallelSubsetSimulation.html"}>>>
    distributions<<<{"description": "The distribution names to be sampled, the number of distributions provided defines the number of columns per matrix."}>>> = 'normal_kernel_r normal_buffer_t normal_ipyc_t normal_sic_t normal_opyc_t uniform'
    num_samplessub<<<{"description": "Number of samples per subset"}>>> = 4000
    num_subsets<<<{"description": "Number of desired subsets"}>>> = 4
    num_parallel_chains<<<{"description": "Number of Markov chains to run in parallel, default is based on the number of processors used."}>>> = 5
    output_reporter<<<{"description": "Reporter with results of samples created by the SubApp."}>>> = 'constant/reporter_transfer:SiC_crackedIPyC_stressminusstrength:value'
    inputs_reporter<<<{"description": "Reporter with input parameters."}>>> = 'adaptive_MC/inputs'
    seed<<<{"description": "Random number generator initial seed"}>>> = 100
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = PRE_MULTIAPP_SETUP
  []
[]
(examples/TRISO/failure_probability_variance_reduction/Main_PSS.i)

AdaptiveMonteCarloDecision Reporter

As explained in AdaptiveMonteCarloDecision, when simulating a Markov chain, there is a proposal step and an acceptance/rejection step to simulate samples that result in model failure. The AdaptiveMonteCarloDecision class is a reporter class which makes the accept/reject decision based on the model output corresponding to the sample proposed by the ParallelSubsetSimulation class.

Below, the Reporters block is presented. The first reporter is of type StochasticReporter that stores sub application output. The second reporter is a AdaptiveMonteCarloDecision reporter. It takes the output_value from the StochasticReporter reporter and defines a new vector reporter called inputs. In addition, it also requires the sampler.

[Reporters<<<{"href": "../../../syntax/Reporters/index.html"}>>>]
  [constant]
    type = StochasticReporter<<<{"description": "Storage container for stochastic simulation results coming from Reporters.", "href": "../../../source/reporters/StochasticReporter.html"}>>>
    outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
  []
  [adaptive_MC]
    type = AdaptiveMonteCarloDecision<<<{"description": "Generic reporter which decides whether or not to accept a proposed sample in Adaptive Monte Carlo type of algorithms.", "href": "../../../source/reporters/AdaptiveMonteCarloDecision.html"}>>>
    output_value<<<{"description": "Value of the model output from the SubApp."}>>> = constant/reporter_transfer:SiC_crackedIPyC_stressminusstrength:value
    inputs<<<{"description": "Uncertain inputs to the model."}>>> = 'inputs'
    sampler<<<{"description": "The sampler object."}>>> = sample
  []
[]
(examples/TRISO/failure_probability_variance_reduction/Main_PSS.i)

Executioner

A Transient executioner should be used. The number of time steps is automatically determined based on num_samplessub, num_subsets and the number of processors used.

[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
  type = Transient
[]
(examples/TRISO/failure_probability_variance_reduction/Main_PSS.i)

Output JSON file

The PSS sampler outputs the results in a json file. The json file consists of "inputs" and "output_required" corresponding to each "time_step". "inputs" are the uncertain input parameters to the model, "output_required" is the model quantity of interest. When the PSS sampler is run with multiple processors, the number of quantities for each field in the json file will be equal to the number of processors (or the num_parallel_chains in the Samplers block). If all the outputs are collected into an array in Python and plotted, we should see that as the sample index increases, the model output should reach closer to the failure threshold.

commentnote:Plotting the results

A python file titled PSS_Plotting.py is provided in the examples folder for plotting all the results presented below.

Results

For computing the SiC cracked IPyC failure probability, the following four modifications need to be made to the input file: (1) num_samplessub, num_parallel_chains, output_reporter, and inputs_reporter in the Samplers/sample block; (2) from_reporter in the Transfers/reporter_transfer block; and (3) output_value in the Reporters/adaptive_MC block. These changes are already provided in the input file in comments. Once these changes are made, the input file is run to produce the SiC cracked IPyC failure probability results. The number of samples per subset is 4,000 with 4 subsets. The example is run using 5 processors with 5 parallel Markov chains. Figure 1 presents the evolution of SiC cracked IPyC stress and strength differences with the sample index in each subset. It is noted that as the subset value increases, this output value appraoches closer to the failure threshold (i.e., 0.0) and in the fourth subset we have many samples crossing the failure threshold.

Figure 1: Evolution of SiC cracked IPyC stress and strength differences with the sample index in each subset.

Table 1 presents the summary of the SiC cracked IPyC failure probability results. The final estimated SiC cracked IPyC failure probability using PSS is with a coefficient of variation of . This failure probability is close to the reference value of obtained using regular Monte Carlo simulation. While PSS uses TRISO model evaluations per processor to estimate this failure probability on 5 processors, Monte Carlo would require simulations per processor, leading to substantial computational savings. Obviously, as the number of samples in each subset are increased in PSS, the failure probability estimate would be more robust.

Table 1: Summary of the SiC cracked IPyC failure probability results

Quantity of interestValue
Failure probability using PSS
Coefficient of variation using PSS
Number of model evaluations per proc using PSS
Reference failure probability using Monte Carlo
Equivalent number of model evaluations per proc using Monte Carlo

Scalability of PSS with the number of processors

While 5 processors are used for simulating the above results, it is possible to use hundreds or even thousands of processors to significantly accelerate the TRISO failure evaluation. For example, consider that the actual TRISO failure probability is 1E-4 and we want to estimate it with a coefficient of variation of around 0.05. This means for four subsets, each subset should have 10,000 sample evaluations. If we use 1000 processors to perform the analysis, each processor runs 10 evaluations per subset. In total, each processor runs only 40 evaluations for estimating the failure probability. If standard Monte Carlo is used to perform this analysis, for the same coefficient of variation and number of processors, each processor should run 4000 model evaluations. If the failure probability is smaller than 1E-4, the number of model evaluations per processor run by Monte Carlo increases exponentially while that run by PSS is almost a constant in comparison. For example if the failure probability is 1E-6, standard Monte Carlo should run 400,000 model evaluations, whereas, PSS runs only 120 model evaluations per processor. Figure 2 presents the scalability of PSS for estimating failure probabilities of the order 1E-4 and 1E-6 with the number of processors compared to standard Monte Carlo.

Figure 2: Scalability of PSS for estimating failure probabilities of the order 1E-4 and 1E-6 with the number of processors compared to standard Monte Carlo for a coefficient of variation of 0.05.

Feasibility of using 2D TRISO models

Traditionally, 1D TRISO models are used for performing the failure probability analysis owing to the large computational expense of using 2D TRISO models in a regular Monte Carlo simulation. With PSS, it is feasible to conduct failure probability assessments of TRISO fuel using 2D models, which can lead to better accuracy in characterizing failures compared to the 1D model. For example, from the previous discussion, it is noted that even if the failure probability is of the order 1E-6, PSS requires only 120 model calls per processor which makes it feasible to run 2D TRISO model evaluations directly. Dhulipala et al. (2022) present more details and results on performing TRISO failure analysis using 2D models.

References

  1. S.L.N. Dhulipala, W. Jiang, B. W. Spencer, J. D. Hales, M. D. Shields, A. E. Slaughter, Z. M. Prince, V. M. Labouré, C. Bolisetti, and P. Chakroborty. Accelerated statistical failure analysis of multifidelity triso fuel models. Journal of Nuclear Materials, 563:153604, 2022. doi:10.1016/j.jnucmat.2022.153604.[BibTeX]