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

Theory of Adaptive Importance Sampling (AIS)

The basic theory of the adaptive importance sampling (AIS) method is briefly described here. Au and Beck (1999) discusses the AIS method in greater detail. Dhulipala et al. (2022) applies the AIS method for several 1D tri-structural isotropic (TRISO) models failure analyses.

TRISO failure analysis example (IPyC and SiC cracked IPyC failure)

Input files

The main input file using AIS 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 = AdaptiveImportance<<<{"description": "Adaptive Importance Sampler.", "href": "../../../source/samplers/AdaptiveImportanceSampler.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'
    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
    proposal_std<<<{"description": "Standard deviations of the proposal distributions"}>>> = '1.0 1.0 1.0 1.0 1.0 1.0'
    output_limit<<<{"description": "Limiting values of the VPPs"}>>> = 0.999
    num_samples_train<<<{"description": "Number of samples to learn the importance distribution"}>>> = 500
    num_importance_sampling_steps<<<{"description": "Number of importance sampling steps (after the importance distribution has been trained)"}>>> = 1000
    std_factor<<<{"description": "Factor to be multiplied to the standard deviation of the importance samples"}>>> = 0.9
    seed<<<{"description": "Random number generator initial seed"}>>> = 100
    # IPyC failure:
    initial_values<<<{"description": "Initial input values to get the importance sampler started"}>>> = '2.1793e-04 9.42e-05 4.07e-05 3.69e-05 4.71e-05 0.05'
    # SiC cracked IPyC failure:
    # initial_values = '0.00022037925793227898 9.796957949991696e-05 4.608583870089675e-05 3.7752632994271156e-05 5.2783532547565914e-05 0.00001'
    inputs_reporter<<<{"description": "Reporter with input parameters."}>>> = 'adaptive_MC/inputs'
  []
[]

[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"}>>>
    # IPyC failure:
    from_reporter<<<{"description": "The name(s) of the Reporter(s) on the sub-app to transfer from."}>>> = 'failure_indicator_IPyC/value'
    # SiC cracked IPyC failure:
    # from_reporter = 'failure_indicator_SiC_crackedIPyC/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/failure_indicator_IPyC/quantile' # Postprocessors/failure_indicator_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"}>>>
  []
  [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"}>>>
    # IPyC failure:
    output_value<<<{"description": "Value of the model output from the SubApp."}>>> = constant/reporter_transfer:failure_indicator_IPyC:value
    # SiC cracked IPyC failure:
    # output_value = constant/reporter_transfer:failure_indicator_SiC_crackedIPyC:value
    inputs<<<{"description": "Uncertain inputs to the model."}>>> = 'inputs'
    sampler<<<{"description": "The sampler object."}>>> = sample
  []
  [ais_stats]
    type = AdaptiveImportanceStats<<<{"description": "Reporter to compute statistics corresponding to the AdaptiveImportanceSampler.", "href": "../../../source/reporters/AdaptiveImportanceStats.html"}>>>
    # IPyC failure:
    output_value<<<{"description": "Value of the model output from the SubApp."}>>> = constant/reporter_transfer:failure_indicator_IPyC:value
    # SiC cracked IPyC failure:
    # output_value = constant/reporter_transfer:failure_indicator_SiC_crackedIPyC:value
    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_AIS.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 inner pyrolytic carbon (IPyC) and silicon carbide (SiC) layers failure probability. As such, the failure criterion is the IPyC or SiC maximum principal stress exceeding the strength. That is, failure occurs when (maximum principal stress - strength) is greater than zero. The postprocessor block that monitors the IPyC or SiC cracked IPyC layer failure is presented below.

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [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
  []
[]
(examples/TRISO/failure_probability_monte_carlo/triso_1d_constant.i)
[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
  [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'
  []
[]
(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_AIS.i)

AdaptiveImportance Sampler

As described here, the AIS sampler has a training phase and an evaluation phase. During the training phase, a Markov chain is simulated such that the IPyC layer always fails. For initiating the Markov chain, an input sample should be specified such that it causes IPyC layer failure. In addition, for simulating additional Markov chain samples, a proposal standard deviation is specified for each random input parameter. As a thumb rule, a proposal standard deviation about 1.0 should be adequate for most cases. Note that the proposal standard deviation specified should correspond to a standard Normal space. This is because, although each input parameter may follow an arbitrary probability distribution, it is transformed into a standard Normal variable using a one-to-one mapping by the AdaptiveImportanceSampler class in Bison/MOOSE. The Markov chain simulates the required number of training samples.

The required number of Markov chain samples all result in IPyC layer failure (or model failure, generally speaking). Then starts the evaluation phase. For this phase, the samples from the training phase are used to construct an importance density for each input parameter. It is assumed that the importance density is a Gaussian distribution with a specified mean and standard deviation. The means and standard deviations are computed from the training phase samples for all the input parameters to construct the importance densities. Then, random samples for each input parameter are drawn from the constructed importance densities. These samples drawn from the importance densities are used for failure probability estimation.

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 user-specified standard deviation. Expanding this proposal scheme to incorporate other MCMC algorithms is possible and would be of interest in the future.

Below, the AIS sampler block is presented. distributions are the distributions of the input parameters. proposal_std contain the proposal standard deviations for the Markov chain for each input parameter. output_limit is the threshold for model failure; herein, the IPyC layer fails when its stress and strength difference exceeds zero. num_samples_train is the number of Markov chain samples during the training phase of AIS. std_factor is a factor multiplied to the standard deviation of the importance density to ensure that most samples during the evaluation phase result in model failure. A value of 0.9 is recommended. initial_values are the starting values for the Markov chain which should result in model failure. inputs_reporter is explained subsequently.

[Samplers<<<{"href": "../../../syntax/Samplers/index.html"}>>>]
  [sample]
    type = AdaptiveImportance<<<{"description": "Adaptive Importance Sampler.", "href": "../../../source/samplers/AdaptiveImportanceSampler.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'
    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
    proposal_std<<<{"description": "Standard deviations of the proposal distributions"}>>> = '1.0 1.0 1.0 1.0 1.0 1.0'
    output_limit<<<{"description": "Limiting values of the VPPs"}>>> = 0.999
    num_samples_train<<<{"description": "Number of samples to learn the importance distribution"}>>> = 500
    num_importance_sampling_steps<<<{"description": "Number of importance sampling steps (after the importance distribution has been trained)"}>>> = 1000
    std_factor<<<{"description": "Factor to be multiplied to the standard deviation of the importance samples"}>>> = 0.9
    seed<<<{"description": "Random number generator initial seed"}>>> = 100
    # IPyC failure:
    initial_values<<<{"description": "Initial input values to get the importance sampler started"}>>> = '2.1793e-04 9.42e-05 4.07e-05 3.69e-05 4.71e-05 0.05'
    # SiC cracked IPyC failure:
    # initial_values = '0.00022037925793227898 9.796957949991696e-05 4.608583870089675e-05 3.7752632994271156e-05 5.2783532547565914e-05 0.00001'
    inputs_reporter<<<{"description": "Reporter with input parameters."}>>> = 'adaptive_MC/inputs'
  []
[]
(examples/TRISO/failure_probability_variance_reduction/Main_AIS.i)

AdaptiveMonteCarloDecision and AdaptiveImportanceStats 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 AdaptiveImportance 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. The final reporter is of type AdaptiveImportanceStats which computes statistics of interest such as the failure probability , coefficient of variation , and the moments of the importance distributions (e.g., mean and standard deviation). More information can be found in AdaptiveImportanceStats

[Reporters<<<{"href": "../../../syntax/Reporters/index.html"}>>>]
  [constant]
    type = StochasticReporter<<<{"description": "Storage container for stochastic simulation results coming from Reporters.", "href": "../../../source/reporters/StochasticReporter.html"}>>>
  []
  [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"}>>>
    # IPyC failure:
    output_value<<<{"description": "Value of the model output from the SubApp."}>>> = constant/reporter_transfer:failure_indicator_IPyC:value
    # SiC cracked IPyC failure:
    # output_value = constant/reporter_transfer:failure_indicator_SiC_crackedIPyC:value
    inputs<<<{"description": "Uncertain inputs to the model."}>>> = 'inputs'
    sampler<<<{"description": "The sampler object."}>>> = sample
  []
  [ais_stats]
    type = AdaptiveImportanceStats<<<{"description": "Reporter to compute statistics corresponding to the AdaptiveImportanceSampler.", "href": "../../../source/reporters/AdaptiveImportanceStats.html"}>>>
    # IPyC failure:
    output_value<<<{"description": "Value of the model output from the SubApp."}>>> = constant/reporter_transfer:failure_indicator_IPyC:value
    # SiC cracked IPyC failure:
    # output_value = constant/reporter_transfer:failure_indicator_SiC_crackedIPyC:value
    sampler<<<{"description": "The sampler object."}>>> = sample
  []
[]
(examples/TRISO/failure_probability_variance_reduction/Main_AIS.i)

Executioner

A Transient executioner should be used. The number of time steps is automatically determined based on num_samples_train and num_importance_sampling_steps.

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

Output JSON file

The AIS 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 an indicator function on whether or not the model output exceeded output_limit, and "time_step" is the sample index. The first num_samples_train time steps are the samples during the learning phase and should not be used for estimating the failure probability. The next num_steps - num_samples_train are the required importance samples used for estimating the failure probability. After the first num_samples_train time steps, the failure probability (pf), coefficient of variation (cov), and the mean and standard deviation of the importance distributions (mu_imp an std_imp) are also reported.

commentnote:Plotting the results

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

Importance versus nominal parameter densities for IPyC failure

Figure Figure 1 presents the nominal and importance densities of the six input parameters. The nominal densities are the ones provided by the user as inputs. The importance densities are the ones inferred by the AIS algorithm which result in a substantial amount of TRISO model failures. It is noted from figure Figure 1 that parameter 6, which governs the IPyC layer strength, has the largest influence on TRISO model failure as evidenced from the significant differences between its nominal and importance densities.

Figure 1: Comparison between the nominal and importance distributions of the six input parameters.

IPyC failure probability and coefficient of variation estimation

Figure Figure 2 presents the IPyC failure probability evolution with the number of evaluation samples. Also shown are the +/-1 standard deviations computed using the coefficient of variation estimate. Recall that standard deviation of failure probability is coefficient of variation times the failure probability estimate. From Figure 2, it is noticed that as the number of evaluation samples increase, the failure probability estimate becomes more stable. Moreover, the number of training samples in AIS can also have an impact on the failure probability estimate in that larger training samples will characterize the importance densities more accurately and lead to faster converging failure probability with the evaluation samples.

Figure 2: Mean failure probability estimate and +/-1 standard deviation as a function of sample index during the evaluation phase.

Table Table 1 presents the summary of the IPyC failure probability results. The final estimated IPyC failure probability using AIS is with a coefficient of variation of . This failure probability is close to the reference value of obtained using regular Monte Carlo simulation. The IPyC failure probability is not small enough so as to discuss the computational gains provided by AIS relative to regular Monte Carlo simulation. Therefore, results of SiC cracked IPyC failure probability are next discussed.

Table 1: Summary of the IPyC failure probability results

Quantity of interestValue
Failure probability using AIS
Coefficient of variation using AIS
Reference failure probability using Monte Carlo

SiC cracked IPyC failure probability

For computing the SiC cracked IPyC failure probability, the following four modifications need to be made to the input file: (1) initial_values in the Samplers/sample block; (2) from_reporter in the Transfers/reporter_transfer block; (3) output_value in the Reporters/adaptive_MC block; and (4) 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 training and evaluation samples are 500 and 1000, respectively. Figure Figure 3 presents the evolution of SiC cracked IPyC failure probability with the number of evaluation samples.

Figure 3: Mean failure probability estimate and +/-1 standard deviation as a function of sample index during the evaluation phase.

Table Table 2 presents the summary of the SiC cracked IPyC failure probability results. The final estimated SiC cracked IPyC failure probability using AIS is with a coefficient of variation of . This failure probability is close to the reference value of obtained using regular Monte Carlo simulation. While AIS uses TRISO model evaluations to estimate this failure probability, Monte Carlo would require simulations, leading to substantial computational savings. Obviously, as the number of training and evaluation samples are increased in AIS, the failure probability estimate would be more robust and would converge more rapidly with the evaluation samples.

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

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

References

  1. S. K. Au and J. L. Beck. A new adaptive importance sampling scheme for reliability calculations. Structural safety, 21(2):135–158, 1999. URL: https://doi.org/10.1016/S0167-4730(99)00014-4.[BibTeX]
  2. 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]