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
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
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]
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