Exemple #1
0
def calculate_fragility(capacity_curves, idealised_capacity, damage_model, MC,
                        Sa_ratios):

    allSa, allbTSa, allLR50, allbLR = [], [], [], []
    no_capacity_curves = len(capacity_curves['Vb'])
    g = 9.81
    w = capacity_curves['weights']
    Tav = capacity_curves['mean_period']

    for icc in range(0, no_capacity_curves):
        # Derive median Sa value (median of Sa) of capacity for each Limit State and corresponding overall dispersion std(log(Sa))
        T = capacity_curves['periods'][icc]
        Gamma = capacity_curves['gamma'][icc]
        if len(damage_model['median']) < no_capacity_curves:
            EDPlim = damage_model['median'][0]
            bUthd = damage_model['dispersion'][0]
        else:
            EDPlim = damage_model['median'][icc]
            bUthd = damage_model['dispersion'][icc]
        SPO = idealised_capacity[icc]

        [ISDvec, Sdvec] = sdof_utils.from_ISD_to_Sd(capacity_curves, icc)
        RDvec = Sdvec * Gamma

        [SaT50, bTSa] = simplified_bilinear(T, Gamma, EDPlim, ISDvec, RDvec,
                                            SPO, bUthd, g, MC)

        # Converting the Sa(T1) to Sa(Tav), the common IM
        SaTlogmean_av, bTSa_av = np.log(SaT50) * Sa_ratios[icc], np.array(
            bTSa) * Sa_ratios[icc]
        allSa.append(SaTlogmean_av)
        allbTSa.append(bTSa_av)

    # Combine the fragility of each building in a single lognormal curve with
    # mean = weighted_mean(means) and std = SRSS(weighted_std(means),weighted_mean(stds))
    logmeans, logstddev = [], []
    for i in range(0, len(EDPlim)):
        SaLS = [ele[i] for ele in allSa]
        StdSaLS = [ele[i] for ele in allbTSa]
        #log_meanSa.append(np.average(SaLS,weights = w)) # weighted log-mean mean(log(Sa))
        log_m = np.average(SaLS, weights=w)
        #log_stSa.append(np.sqrt(np.sum(w*(np.power((SaLS-log_meanSa[i]),2)+np.power(StdSaLS,2))))) # weighted log-std (dispersion)
        log_s = np.sqrt(
            np.sum(w * (np.power((SaLS - log_m), 2) + np.power(StdSaLS, 2))))
        logmeans.append(log_m)
        logstddev.append(log_s)

    fragility_model = {
        'damage_states': None,
        'logmean': None,
        'logstddev': None,
        'IMT': None
    }
    fragility_model['damage_states'] = damage_model['damage_states']
    fragility_model['logmean'] = logmeans
    fragility_model['logstddev'] = logstddev
    fragility_model['IMT'] = 'Sa(' + str(Tav) + ')'

    return fragility_model
Exemple #2
0
def calculate_fragility(capacity_curves, idealised_capacity, damage_model, MC, Sa_ratios, corner_periods):
    Tc, Td = corner_periods
    allSa, allbTSa, allLR50, allbLR = [],[],[],[]
    no_capacity_curves = len(capacity_curves['Vb'])
    g = 9.81
    w = capacity_curves['weights']
    Tav = capacity_curves['mean_period']
    
    for icc in range(0,no_capacity_curves):
        # Derive median Sa value (median of Sa) of capacity for each Limit State and corresponding overall dispersion std(log(Sa))
        T = capacity_curves['periods'][icc]
        Gamma = capacity_curves['gamma'][icc]
        if len(damage_model['median'])<no_capacity_curves:
            EDPlim = damage_model['median'][0]
            bUthd = damage_model['dispersion'][0]
        else:
            EDPlim = damage_model['median'][icc]
            bUthd = damage_model['dispersion'][icc]
        SPO = idealised_capacity[icc]
        if len(SPO) == 3:
            SPO.insert(2,SPO[1])
            SPO.insert(3,SPO[1])
            SPO.insert(-1,SPO[-1])
            SPO.insert(-1,SPO[-1])

        [ISDvec, Sdvec] = sdof_utils.from_ISD_to_Sd(capacity_curves,icc)
        RDvec = Sdvec*Gamma

        [mc,a,ac,r,mf] = get_spo2ida_parameters(SPO, T, Gamma) # Convert MDoF into SDoF
        [SaT50,bTSa] = DFfragility(T, Gamma, EDPlim, ISDvec, RDvec, SPO, bUthd, mc, r, g, Tc, Td, MC)

        # Converting the Sa(T1) to Sa(Tav), the common IM
        SaTlogmean_av, bTSa_av = np.log(SaT50)*Sa_ratios[icc], np.array(bTSa)*Sa_ratios[icc]
        allSa.append(SaTlogmean_av)
        allbTSa.append(bTSa_av)

    # Combine the fragility of each building in a single lognormal curve with
    # mean = weighted_mean(means) and std = SRSS(weighted_std(means),weighted_mean(stds))
    fragility_model = []
    logmeans, logstddev = [],[]
    for i in range(0,len(EDPlim)):
        SaLS = [ele[i] for ele in allSa]
        StdSaLS = [ele[i] for ele in allbTSa]
        log_m = np.average(SaLS,weights = w)
        log_s = np.sqrt(np.sum(w*(np.power((SaLS-log_m),2)+np.power(StdSaLS,2))))
        logmeans.append(log_m)
        logstddev.append(log_s)

    fragility_model = {'damage_states': None, 'logmean': None, 'logstddev': None,
    'IMT': None}
    fragility_model['damage_states'] = damage_model['damage_states']
    fragility_model['logmean'] = logmeans
    fragility_model['logstddev'] = logstddev
    fragility_model['IMT'] = 'Sa('+str(Tav)+')'

    return fragility_model
Exemple #3
0
def define_deformed_shape(capacity_curves, filename):
    
    ISD_vectors, Sd_vectors = [],[]
    for icc in range(len(capacity_curves['no_storeys'])):
        [ISDvec, Sdvec] = sdof_utils.from_ISD_to_Sd(capacity_curves, icc)
        ISD_vectors.append(ISDvec)
        Sd_vectors.append(Sdvec)
        
    sdof_utils.save_deformed_shape(ISD_vectors,Sd_vectors,filename)
    
    return [ISD_vectors, Sd_vectors]
Exemple #4
0
def calculate_fragility(capacity_curves, idealised_capacity, damage_model, MC,
                        Sa_ratios, plotflag):
    pw = 1
    filletstyle = 3
    linew = 1
    fontsize = 11
    N = 10

    allSa, allbTSa, allLR50, allbLR = [], [], [], []
    no_capacity_curves = len(capacity_curves['Vb'])
    g = 9.81
    w = capacity_curves['weights']
    Tav = capacity_curves['mean_period']

    for icc in range(0, no_capacity_curves):
        # Derive median Sa value (median of Sa) of capacity for each Limit State and corresponding overall dispersion std(log(Sa))
        T = capacity_curves['periods'][icc]
        Gamma = capacity_curves['gamma'][icc]
        if len(damage_model['median']) < no_capacity_curves:
            EDPlim = damage_model['median'][0]
            bUthd = damage_model['dispersion'][0]
        else:
            EDPlim = damage_model['median'][icc]
            bUthd = damage_model['dispersion'][icc]
        SPO = idealised_capacity[icc]
        if len(SPO) == 3:
            SPO.insert(2, SPO[1])
            SPO.insert(3, SPO[1])
            SPO.insert(-1, SPO[-1])
            SPO.insert(-1, SPO[-1])

        [ISDvec, Sdvec] = sdof_utils.from_ISD_to_Sd(capacity_curves, icc)
        RDvec = Sdvec * Gamma

        [mc, a, ac, r,
         mf] = get_spo2ida_parameters(SPO, T, Gamma)  # Convert MDoF into SDoF
        [idacm,
         idacr] = spo2ida_allT(mc, a, ac, r, mf, T, pw, plotflag, filletstyle,
                               N, linew, fontsize)  # apply SPO2IDA procedure
        [SaT50, bTSa] = spo2ida_method(idacm, idacr, mf, T, Gamma, g, EDPlim,
                                       ISDvec, RDvec, SPO, bUthd, MC)

        # Converting the Sa(T1) to Sa(Tav), the common IM
        SaTlogmean_av, bTSa_av = np.log(SaT50) * Sa_ratios[icc], np.array(
            bTSa) * Sa_ratios[icc]
        allSa.append(SaTlogmean_av)
        allbTSa.append(bTSa_av)

    # Combine the fragility of each building in a single lognormal curve with
    # mean = weighted_mean(means) and std = SRSS(weighted_std(means),weighted_mean(stds))
    logmeans, logstddev = [], []
    for i in range(0, len(EDPlim)):
        SaLS = [ele[i] for ele in allSa]
        StdSaLS = [ele[i] for ele in allbTSa]
        #log_meanSa.append(np.average(SaLS,weights = w)) # weighted log-mean mean(log(Sa))
        log_m = np.average(SaLS, weights=w)
        #log_stSa.append(np.sqrt(np.sum(w*(np.power((SaLS-log_meanSa[i]),2)+np.power(StdSaLS,2))))) # weighted log-std (dispersion)
        log_s = np.sqrt(
            np.sum(w * (np.power((SaLS - log_m), 2) + np.power(StdSaLS, 2))))
        logmeans.append(log_m)
        logstddev.append(log_s)

    fragility_model = {
        'damage_states': None,
        'logmean': None,
        'logstddev': None,
        'IMT': None
    }
    fragility_model['damage_states'] = damage_model['damage_states']
    fragility_model['logmean'] = logmeans
    fragility_model['logstddev'] = logstddev
    fragility_model['IMT'] = 'Sa(' + str(Tav) + ')'

    return fragility_model