Fragility

Calculate the seismic fragility of an SSC by postprocessing the results of a probabilistic or stochastic simulation.

Description

The Fragility VectorPostprocessor computes the seismic fragility of a component given the dynamic properties of the component, capacity distribution of the component, and seismic demands from the probabilistic simulations. Fragility operates in the following steps: 1) calculate the demand distribution for each hazard bin, 2) use demand distribution and capacity distribution and calculate the conditional probability of failure in each bin, and 3) fit a lognormal distribution in the conditional probabilities to calculate a fragility. This kind of fragility is also referred to as 'enhanced fragility'.

Step 1, calculation of the demand distribution, can be executed using two methods. The first method is to provide all the response history files of the demands calculated from MASTODON or other software. In this case MASTODON will perform the full postprocessing and calculate the stochastic demands. However, in most cases, the user would like to calculate the median demands in a different manner, for example, if the demand is a geometric mean of two horizontal spectral accelerations, or an average spectral acceleration in a frequency range (which is common in practice). In these cases, the user can just provide a CSV file with a demand matrix of size M x N, where M is the total number of simulations in each bin (i.e., number of GMs * the number of samples for each bin) and N is the total number of bins. MASTODON will calculate the lognormal distribution parameters for these demand values and use them for enhanced fragility calculation. If the first method is followed, users have to provide ALL of the input parameters, master_file, hazard_multiapp, probabilistic_multiapp, demand_variable, ssc_frequency, ssc_damping_ratio, and dtsim. If any of them is missing, MASTODON will throw an error. If method 2 is followed, just provide the demand_filename parameter.

Fitting a lognormal fragility function to the probabilities of failure requires an optimization algorithm to find the parameters, median and lognormal standard deviation. Two methods are currently available for calculating these fragility parameters: 'brute force' and 'Randomized Gradient Descent (RGD)'. Brute force finds that combination of parameters which maximizes the likelihood by looping over all alternative combinations. RGD finds the parameter combination by running a simple gradient descent (Newton-Raphson type) algorithm with random seed values and finding the values corresponding to the minimum value of the cost function or objective. RGD also requires the additional parameters:

  1. tolerance (To declare convergence of the algorithm. 1e-03 can be optimal.)

  2. gamma (Controls the step size of the algorithm. 0.001 can be optimal.)

  3. numrnd (Number of random seed values. 1000 can be optimal.)

  4. seed (Seed for the random number generator. Currently set to 1028).

Of course, both algorithms have their pros and cons. For example, brute force takes orders of magnitude more time to run. RGD may not guarantee the best fragility fit and users should change the RGD parameters and make sure that the results don't change significantly, to ensure that the best results are calculated.

Assumptions and current limitations

The Fragility VectorPostprocessor is currently limited to calculating the seismic fragilities of individual SSC's (systems, structures and components) and therefore, one VectorPostprocessor should be defined for each SSC. Additionally, Fragility VectorPostprocessor is limited to SSC's that are sensitive to floor spectral acceleration demands at a particular frequency of excitation.

Usage

An example usage of the Fragility VectorPostprocessor is below. For the brute_force option, either true or false can be chosen. Apart from the input file (fragility_brute_force.i), this VectorPostprocessor requires the csv files containing the output data from probabilistic or stochastic simulations. An example output data file (master_out_run_hazard03_sub1.csv) is also shown below. Note that the inputs to the parameters master_file, hazard_multiapp, and probabilistic_multiapp are used to build the filename of the csv files that contain the results of probabilistic simulations. Additionally, the demand_variable input parameter (accel_2x) in this case is identical to the column name in the output data file.

[VectorPostprocessors<<<{"href": "../../syntax/VectorPostprocessors/index.html"}>>>]
  [./fragility_pump]
    type = Fragility<<<{"description": "Calculate the seismic fragility of an SSC by postprocessing the results of a probabilistic or stochastic simulation.", "href": "Fragility.html"}>>>
    master_file<<<{"description": "Name of the master file without extension."}>>> = 'master' # name of the master file in this case is 'master.i'
    hazard_multiapp<<<{"description": "Name of the multiapp corresponding to ground motion sampling."}>>> = 'run_hazard'
    probabilistic_multiapp<<<{"description": "Name of the multiapp corresponding to the probabilistic simulations."}>>> = 'sub'
    num_gms<<<{"description": "Number of ground motions used in each intensity bin."}>>> = 3
    demand_variable<<<{"description": "Demand variable for the SSC that is also column name in the output csv file. Acceleration variable only."}>>> = 'accel_2x'
    ssc_frequency<<<{"description": "Frequency at which the spectral demand of the SSC is calculated."}>>> = 4
    ssc_damping_ratio<<<{"description": "Damping ratio at which the spectral demand of the SSC is calculated."}>>> = 0.05
    dtsim<<<{"description": "dt for response spectra calculation."}>>> = 0.005
    median_capacity<<<{"description": "Median capacity of the SSC in terms of local demand at the SSC location."}>>> = 0.01
    beta_capacity<<<{"description": "Uncertainty in the capacity of the SSC."}>>> = 1.3
    num_samples<<<{"description": "Number of probabilistic simulations for each bin."}>>> = 3
    num_bins<<<{"description": "Number of bins in the hazard curve where the risk calculation is performed."}>>> = 4
    im_values<<<{"description": "IM values used in the bins."}>>> = '0.3 0.5 0.7 0.9'
    median_fragility_limits<<<{"description": "Limits for median fragility of the component."}>>> = '3.0 8.0'
    beta_fragility_limits<<<{"description": "Limits for the lognormal standard deviation of the component fragility."}>>> = '1.0 3.0'
    brute_force<<<{"description": "Optimization method for fragility fitting. The following methods are available: brute force or Randomized Gradient Descent."}>>> = true
    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_END
  [../]
[]
(test/tests/vectorpostprocessors/fragility/fragility_brute_force.i)
time,_dt,accel_2x,accel_2y,accel_2z
0,0,0,0,0
0.005,0.005,0.001740501125,0,0
0.01,0.005,0.001725061625,0,0
0.015,0.005,0.001697151875,0,0
0.02,0.005,0.001679337125,0,0
0.025,0.005,0.001641926125,0,0
0.03,0.005,0.0016407385,0,0
0.035,0.005,0.001610453375,0,0
0.04,0.005,0.001639550875,0,0
0.045,0.005,0.001639550875,0,0
0.05,0.005,0.0016395508749999,0,0
(test/tests/vectorpostprocessors/fragility/master_out_run_hazard03_sub1.csv)

The output file of the Fragility VectorPostprocessor is shown below. This file presents the following parameters for each hazard bin of the probabilistic simulations:

  1. intensity (from the hazard curve, same as the input, im_values)

  2. median demand of the demand distribution

  3. lognormal standard deviation of the demand distribution

  4. conditional probability of failure of the component

Since the analysis corresponding to this example involves 4 bins (num_bins = 4), the output file contains four rows for the first four columns. The last two columns are the final results, namely, the median and lognormal standard deviation of the seismic fragility distribution calculated for this SSC. This fragility distribution is calculated by fitting a lognormal distribution into the 'intensity' and 'conditional_pf' data using the Maximum Likelihood Estimate (MLE) fitting procedure described in Baker (2014). As mentioned previously, MLE is performed using an optimization algorithm. Two algorithms are currently available: brute force and stochastic gradient descent.

conditional_pf,demand_beta,demand_median,fragility_beta,fragility_median,intensity,loglikelihood
0.090309026830639,1.4904453117463,0.0007079998639055,1.97,4.24,0.3,-5.1910531572075
0.13994510992204,1.4904453117463,0.0011799997731758,0,0,0.5,0
0.18129638637501,1.4904453117463,0.0016519996824462,0,0,0.7,0
0.21670677445392,1.4904453117463,0.0021239995917165,0,0,0.9,0
(test/tests/vectorpostprocessors/fragility/gold/fragility_brute_force_out_fragility_pump_0002.csv)

Input Parameters

  • beta_capacityUncertainty in the capacity of the SSC.

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Uncertainty in the capacity of the SSC.

  • beta_fragility_limitsLimits for the lognormal standard deviation of the component fragility.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Limits for the lognormal standard deviation of the component fragility.

  • im_valuesIM values used in the bins.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:IM values used in the bins.

  • median_capacityMedian capacity of the SSC in terms of local demand at the SSC location.

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Median capacity of the SSC in terms of local demand at the SSC location.

  • median_fragility_limitsLimits for median fragility of the component.

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

    Unit:(no unit assumed)

    Controllable:No

    Description:Limits for median fragility of the component.

  • num_binsNumber of bins in the hazard curve where the risk calculation is performed.

    C++ Type:unsigned int

    Controllable:No

    Description:Number of bins in the hazard curve where the risk calculation is performed.

  • num_gmsNumber of ground motions used in each intensity bin.

    C++ Type:unsigned int

    Controllable:No

    Description:Number of ground motions used in each intensity bin.

  • num_samplesNumber of probabilistic simulations for each bin.

    C++ Type:unsigned int

    Controllable:No

    Description:Number of probabilistic simulations for each bin.

Required Parameters

  • brute_forceFalseOptimization method for fragility fitting. The following methods are available: brute force or Randomized Gradient Descent.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Optimization method for fragility fitting. The following methods are available: brute force or Randomized Gradient Descent.

  • contains_complete_historyFalseSet this flag to indicate that the values in all vectors declared by this VPP represent a time history (e.g. with each invocation, new values are added and old values are never removed). This changes the output so that only a single file is output and updated with each invocation

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Set this flag to indicate that the values in all vectors declared by this VPP represent a time history (e.g. with each invocation, new values are added and old values are never removed). This changes the output so that only a single file is output and updated with each invocation

  • demand_filenameFile name that contains stochastic demand matrix. Has m x n values where m is number of GMs in each bin and n is num bins.

    C++ Type:std::string

    Controllable:No

    Description:File name that contains stochastic demand matrix. Has m x n values where m is number of GMs in each bin and n is num bins.

  • demand_variableDemand variable for the SSC that is also column name in the output csv file. Acceleration variable only.

    C++ Type:std::string

    Controllable:No

    Description:Demand variable for the SSC that is also column name in the output csv file. Acceleration variable only.

  • dtsimdt for response spectra calculation.

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:dt for response spectra calculation.

  • hazard_multiappName of the multiapp corresponding to ground motion sampling.

    C++ Type:std::string

    Controllable:No

    Description:Name of the multiapp corresponding to ground motion sampling.

  • master_fileName of the master file without extension.

    C++ Type:std::string

    Controllable:No

    Description:Name of the master file without extension.

  • num_collapses500Number of collapses required to calculate likelihood when using Baker's MLE.

    Default:500

    C++ Type:unsigned int

    Controllable:No

    Description:Number of collapses required to calculate likelihood when using Baker's MLE.

  • parallel_typeREPLICATEDSet how the data is represented within the VectorPostprocessor (VPP); 'distributed' indicates that data within the VPP is distributed and no auto communication is performed, this setting will result in parallel output within the CSV output; 'replicated' indicates that the data within the VPP is correct on processor 0, the data will automatically be broadcast to all processors unless the '_auto_broadcast' param is set to false within the validParams function.

    Default:REPLICATED

    C++ Type:MooseEnum

    Options:DISTRIBUTED, REPLICATED

    Controllable:No

    Description:Set how the data is represented within the VectorPostprocessor (VPP); 'distributed' indicates that data within the VPP is distributed and no auto communication is performed, this setting will result in parallel output within the CSV output; 'replicated' indicates that the data within the VPP is correct on processor 0, the data will automatically be broadcast to all processors unless the '_auto_broadcast' param is set to false within the validParams function.

  • probabilistic_multiappName of the multiapp corresponding to the probabilistic simulations.

    C++ Type:std::string

    Controllable:No

    Description:Name of the multiapp corresponding to the probabilistic simulations.

  • rgd_gamma0.001Parameter controlling the step size of the Randomized Gradient Descent algorithm.

    Default:0.001

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Parameter controlling the step size of the Randomized Gradient Descent algorithm.

  • rgd_numrnd1000Number of random initializations in the Randomized Gradient Descent algorithm.

    Default:1000

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Number of random initializations in the Randomized Gradient Descent algorithm.

  • rgd_seed1028Seed for random number generator in the Randomized Gradient Descent algorithm.

    Default:1028

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Seed for random number generator in the Randomized Gradient Descent algorithm.

  • rgd_tolerance0.001Tolerance for declaring convergence of the Randomized Gradient Descent algorithm.

    Default:0.001

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Tolerance for declaring convergence of the Randomized Gradient Descent algorithm.

  • ssc_damping_ratioDamping ratio at which the spectral demand of the SSC is calculated.

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Damping ratio at which the spectral demand of the SSC is calculated.

  • ssc_frequencyFrequency at which the spectral demand of the SSC is calculated.

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Frequency at which the spectral demand of the SSC is calculated.

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, LINEAR_CONVERGENCE, NONLINEAR, NONLINEAR_CONVERGENCE, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, MULTIAPP_FIXED_POINT_CONVERGENCE, FINAL, CUSTOM

    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.

  • 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

  • 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. J. W. Baker. Efficient analytical fragility function fitting using dynamic structural analysis. Technical Note, Earthquake Spectra, 2014.[BibTeX]