WeibullFailureOutputUsingCorrelation

Computes failure indicator of a TRISO layer using a correlation function.

Description

WeibullFailureOutputUsingCorrelation can be used to determine the failure indicator of a TRISO layer. By default, this Postprocessor returns a value of 1 if individual layer fails, and 0 if it does not. If the new value computed from current time step exceeds the old value from previous time step, the new value will be returned. Otherwise, the old value will be returned. In general, the indicator failure mode will be used in Monte Carlo approach. Users also have the option of retreiving the layer stress or strength using the output_type parameter. With output_type = stress the layer stress will be output, with output_type = strength the layer strength will be output, and by default (i.e., no specification of output_type in the input file) or with output_type = failure_indicator the indicator function will be output.

This postprocessor can be used in conjunction with AD variables through using ADWeibullFailureOutputUsingCorrelation.

One-dimensional analysis

The maximum stress is compared to a strength that is sampled from a Weibull distribution having a mean strength to determine whether or not failure occurs. If neither of the inner PyC or outer PyC layers are cracked, a one-dimensional analysis is used to determine whether the silicon carbide (SiC) layer fails. For a one-dimensional analysis, the mean strength is given by WeibullEffectiveMeanStrength and the maximum stress is obtained from a 1D simulation.

Stress adjustment from high fidelity analysis

Figure 1: Flow diagram for general statistical approach.

The methodology used by Miller et al. (2018) in Figure 1 is implemented to model the effects of multi-dimensional behavior, such as cracking of the IPyC and asphericity. A statistical approach is used to correlate one-dimensional analysis and high-fidelity analysis. The high-fidelity strength and stress correlation factor are calculated prior to statistical modeling and then used as a function in WeibullFailureOutputUsingCorrelation to determine failure.

IPyC cracking

During irradiation, shrinkage of the initially intact IPyC layer induces a significant tensile stress in that layer. If the stress exceeds the tensile strength of the IPyC layer, then a radial crack develops in the IPyC. The radial crack creates local tensile stress in the SiC layer that could lead to particle failure. The maximum principal stress histories in SiC layer for a cracked particle (near crack tip) and intact particle are shown in Figure 2. The maximum SiC stress in a cracked particle is approximated as

where and are the maximum stress calculated in the high-fidelity and one-dimensional analysis at the mean values for a specified batch of particles, respectively. Upon varying statistical parameters, the maximum stress in the SiC layer is determined from the one dimensional finite element solution for .

Figure 2: Maximum principal stress histories in SiC layer for a cracked particle (near crack tip) and intact particle.

Asphericity

Geometric defects (a single flat facet on one side) created during fabrication are a common cause of aspherical behavior in particle fuel. During irradiation, the faceted portion of the particle acts as a flat plate that retains the internal gas pressure. If the pressure builds up high enough, this results in a local region of tensile stress in the central portion of the plate, which can contribute to particle failures. The stress histories for representative faceted and spherical fuel particles are shown in Figure 3. In evaluating asphericity, a second term is added to correctly estimate the maximum stress for an aspherical particle:

where , and are changes in the stresses , and going from the minimum to the end of irradiation. If a second extremum (or maximum) occurs before the end of irradiation, then , and are taken as changes in these stress going from the minimum to the maximum. The additional term is needed for asphericity evaluations because failures due to asphericity occur after the first extremum for has been reached, when shrinkage effects from the pyrocarbons are diminishing.

Figure 3: Stress histories for a faceted and spherical fuel particles.

Example Input Syntax

[Postprocessors<<<{"href": "../../syntax/Postprocessors/index.html"}>>>]
  [dt]
    type = TimestepSize<<<{"description": "Reports the timestep size", "href": "TimestepSize.html"}>>>
  []
  [burnup]
    type = ElementExtremeValue<<<{"description": "Finds either the min or max elemental value of a variable over the domain.", "href": "ElementExtremeValue.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    variable<<<{"description": "The name of the variable that this postprocessor operates on"}>>> = burnup
  []
  [fis_gas_produced]
    type = ElementIntegralFisGasGeneratedSifgrs<<<{"description": "Reports the fission gas that is produced in moles.  To be used in combination with the Sifgrs model.", "href": "ElementIntegralFisGasGeneratedSifgrs.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
  []
  [fis_gas_released]
    type = ElementIntegralFisGasReleasedSifgrs<<<{"description": "Reports the fission gas that is released to the plenum in moles.  To be used in combination with the Sifgrs model.", "href": "ElementIntegralFisGasReleasedSifgrs.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
  []
  [volumeTotal]
    type = InternalVolume<<<{"description": "Computes the volume of an enclosed area by performing an integral over a user-supplied boundary.", "href": "InternalVolume.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = exterior
  []
  [volumeFuel]
    type = InternalVolume<<<{"description": "Computes the volume of an enclosed area by performing an integral over a user-supplied boundary.", "href": "InternalVolume.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = fuel_outer_boundary
  []
  [volumeGas]
    type = InternalVolume<<<{"description": "Computes the volume of an enclosed area by performing an integral over a user-supplied boundary.", "href": "InternalVolume.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'fuel_outer_boundary IPyC_inner_boundary'
    addition<<<{"description": "An additional volume to be included in the internal volume calculation. A time-dependent function is expected."}>>> = -5.53e-11
    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'
  []
  [volumeBufferShell]
    type = InternalVolume<<<{"description": "Computes the volume of an enclosed area by performing an integral over a user-supplied boundary.", "href": "InternalVolume.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = buffer_IPyC_boundary
  []
  [ave_temp_interior]
    type = SideAverageValue<<<{"description": "Computes the average value of a variable on a sideset. Note that this cannot be used on the centerline of an axisymmetric model.", "href": "SideAverageValue.html"}>>>
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = buffer_IPyC_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'
  []
  # Postprocessors for CO production
  [total_fission_rate]
    type = ElementIntegralPower<<<{"description": "Computes the power given the fission rate and energy per fission.", "href": "ElementIntegralPower.html"}>>>
    variable<<<{"description": "The name of the variable that this object operates on"}>>> = temperature
    fission_rate<<<{"description": "Coupled fission rate"}>>> = fission_rate
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = fuel
    energy_per_fission<<<{"description": "Energy released per fission (J/fission)"}>>> = 1.0
  []
  [total_fissions]
    type = TimeIntegratedPostprocessor<<<{"description": "Integrate a Postprocessor value over time using trapezoidal rule.", "href": "TimeIntegratedPostprocessor.html"}>>>
    value<<<{"description": "The name of the postprocessor"}>>> = total_fission_rate
  []
  [avg_surface_temperature]
    type = SideAverageValue<<<{"description": "Computes the average value of a variable on a sideset. Note that this cannot be used on the centerline of an axisymmetric model.", "href": "SideAverageValue.html"}>>>
    variable<<<{"description": "The name of the variable which this postprocessor integrates"}>>> = temperature
    boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = exterior
  []
  [time_int_surf_temperature]
    type = TimeIntegratedPostprocessor<<<{"description": "Integrate a Postprocessor value over time using trapezoidal rule.", "href": "TimeIntegratedPostprocessor.html"}>>>
    value<<<{"description": "The name of the postprocessor"}>>> = avg_surface_temperature
  []
  [co_production]
    type = CarbonMonoxideProduction<<<{"description": "Computes CO production in oxide fuel based on the Proksch or GA correlation.", "href": "CarbonMonoxideProduction.html"}>>>
    total_fissions<<<{"description": "The name of the postprocessor containing the total fissions."}>>> = total_fissions
    time_integrated_triso_temperature<<<{"description": "The name of the postprocessor containing the time integrated TRISO surface temperature (for Proksch)."}>>> = time_int_surf_temperature
    initial_enrichment<<<{"description": "initial enrichment fraction of U235 (wt%)"}>>> = 0.14029
  []
  [tang_SiC]
    type = ElementalVariableValue<<<{"description": "Outputs an elemental variable value at a particular location", "href": "ElementalVariableValue.html"}>>>
    variable<<<{"description": "The variable to be monitored"}>>> = stress_yy
    elementid<<<{"description": "The ID of the element where we monitor"}>>> = 18
  []
  [strength_SiC]
    type = WeibullEffectiveMeanStrength<<<{"description": "Computes Weibull effective mean strength, which is used by the WeibullFailureOutputUsingCorrelation Postprocessor.", "href": "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": "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."}>>> = max_principal_stress
    effective_mean_strength<<<{"description": "The name of the postprocessor calculating the effective mean strength."}>>> = strength_SiC
  []
  [strength_IPyC]
    type = WeibullEffectiveMeanStrength<<<{"description": "Computes Weibull effective mean strength, which is used by the WeibullFailureOutputUsingCorrelation Postprocessor.", "href": "WeibullEffectiveMeanStrength.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
  []
  [failure_indicator_IPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = IPyC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    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_debonding]
    type = TRISODebondingFailureIndicator<<<{"description": "Computes debonding failure indicator of TRISO layers.", "href": "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."}>>> = 1e5
    stress_name<<<{"description": "Name of the stress property."}>>> = radial_stress
  []
  [strength_OPyC]
    type = WeibullEffectiveMeanStrength<<<{"description": "Computes Weibull effective mean strength, which is used by the WeibullFailureOutputUsingCorrelation Postprocessor.", "href": "WeibullEffectiveMeanStrength.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = OPyC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
  []
  [failure_indicator_OPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "WeibullFailureOutputUsingCorrelation.html"}>>>
    block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = OPyC
    weibull_modulus<<<{"description": ",Weibull modulus"}>>> = 6
    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_OPyC
  []
  [failure_indicator_SiC_crackedIPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "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."}>>> = max_principal_stress
    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_SiC_crackedOPyC]
    type = WeibullFailureOutputUsingCorrelation<<<{"description": "Computes failure indicator of a TRISO layer using a correlation function.", "href": "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."}>>> = max_principal_stress
    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_crackedOPyC'
  []
  [triso_failure]
    type = TRISOFailureEvaluation<<<{"description": "Computes particle failure based on Weibull statistical theory. It returns either 1 or 0, indicating fails or not fail.", "href": "TRISOFailureEvaluation.html"}>>>
    IPyC_failure<<<{"description": "The name of the postprocessor calculating the IPyC failure."}>>> = failure_indicator_IPyC
    OPyC_failure<<<{"description": "The name of the postprocessor calculating the OPyC failure."}>>> = failure_indicator_OPyC
    SiC_failure<<<{"description": "The name of the postprocessor calculating the SiC failure."}>>> = failure_indicator_SiC
    SiC_failure_crackedIPyC<<<{"description": "The name of the postprocessor calculating the SiC failure due to cracked IPyC."}>>> = failure_indicator_SiC_crackedIPyC
    SiC_failure_crackedOPyC<<<{"description": "The name of the postprocessor calculating the SiC failure due to cracked OPyC."}>>> = failure_indicator_SiC_crackedOPyC
    SiC_failure_debonding<<<{"description": "The name of the postprocessor calculating the SiC failure due to IPyC-SiC debonding."}>>> = failure_indicator_debonding
  []
[]
(test/tests/triso_failure/triso_1d_failure.i)

Input Parameters

  • stress_nameName of the stress property.

    C++ Type:std::string

    Controllable:No

    Description:Name of the stress property.

  • weibull_modulus,Weibull modulus

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:,Weibull modulus

Required Parameters

  • blockThe list of blocks (ids or names) that this object will be applied

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

    Controllable:No

    Description:The list of blocks (ids or names) that this object will be applied

  • effective_mean_strengthThe name of the postprocessor calculating the effective mean strength.

    C++ Type:PostprocessorName

    Unit:(no unit assumed)

    Controllable:No

    Description:The name of the postprocessor calculating the effective mean strength.

  • high_fidelity_analysis_strengthThe effective mean strength obtained from a high-fidelity analysis.

    C++ Type:FunctionName

    Unit:(no unit assumed)

    Controllable:No

    Description:The effective mean strength obtained from a high-fidelity analysis.

  • output_typefailure_indicatorChoose between failure indicator (default), stress, or strength outputs.

    Default:failure_indicator

    C++ Type:MooseEnum

    Options:failure_indicator, stress, strength

    Controllable:No

    Description:Choose between failure indicator (default), stress, or strength outputs.

  • quantile0.5Quantile (ranging from 0 to 1) used to define likelihood of strength evaluated from Weibull distribution

    Default:0.5

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Quantile (ranging from 0 to 1) used to define likelihood of strength evaluated from Weibull distribution

  • stress_change_correlation_functionCorrelation function of stress change from minumum to maximum during the irradiation history obtained from a high-fidelity analysis.

    C++ Type:FunctionName

    Unit:(no unit assumed)

    Controllable:No

    Description:Correlation function of stress change from minumum to maximum during the irradiation history obtained from a high-fidelity analysis.

  • stress_correlation_functionThe stress correlation function obtained from a high-fidelity analysis.

    C++ Type:FunctionName

    Unit:(no unit assumed)

    Controllable:No

    Description:The stress correlation function obtained from a high-fidelity analysis.

Optional Parameters

  • allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).

    Default:False

    C++ Type:bool

    Controllable:No

    Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).

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

    Default:TIMESTEP_END

    C++ Type:ExecFlagEnum

    Options:XFEM_MARK, NONE, INITIAL, LINEAR, NONLINEAR_CONVERGENCE, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, TRANSFER

    Controllable:No

    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.

  • execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.

    Default:0

    C++ Type:int

    Controllable:No

    Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.

  • force_postauxFalseForces the UserObject to be executed in POSTAUX

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Forces the UserObject to be executed in POSTAUX

  • force_preauxFalseForces the UserObject to be executed in PREAUX

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Forces the UserObject to be executed in PREAUX

  • force_preicFalseForces the UserObject to be executed in PREIC during initial setup

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Forces the UserObject to be executed in PREIC during initial setup

Execution Scheduling Parameters

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

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

    Controllable:No

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Controllable:Yes

    Description:Set the enabled status of the MooseObject.

  • implicitTrueDetermines whether this object is calculated using an implicit or explicit form

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Determines whether this object is calculated using an implicit or explicit form

  • outputsVector of output names where you would like to restrict the output of variables(s) associated with this object

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

    Controllable:No

    Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object

  • seed0The seed for the master random number generator

    Default:0

    C++ Type:unsigned int

    Controllable:No

    Description:The seed for the master random number generator

  • use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.

Advanced Parameters

  • prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

    C++ Type:MaterialPropertyName

    Unit:(no unit assumed)

    Controllable:No

    Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.

  • use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.

Material Property Retrieval Parameters

Input Files

References

  1. G.K. Miller, D.A. Petti, J.T. Maki, D.L. Knudson, and W.F. Skerjanc. PARFUME Theory and Model Basis Report. Report INL/EXT-08-14497 (Rev.1), Idaho National Laboratory, September 2018.[BibTeX]