def vulnerability_process(an_type, T, Gamma, w, EDPlim, dcroof, EDPvec, RDvec, SPO, bUthd, noBlg, g, MC, Sa_ratios, plot_feature, N, Tc, Td): plotflag,linew,fontsize,units,iml = plot_feature[0:5] LR50s = [] bLRs = [] for blg in range(0,noBlg): LRs = [] # Vamvatsikos and Cornell's method if np.array(bUthd[blg]).any()>0: # If some damage criteria have uncertainty # Monte Carlo realisations of damage criteria e derivation of fragility curves # for each sample, mean loss ratios are computed at each IML from all samples for i in range (0,MC): dc_sample = np.zeros_like(dcroof[blg]) EDP_sample = np.zeros(len(dcroof[blg])+1) for j in range(0,len(dcroof[blg])): if bUthd[blg][j]>0: EDP_sample[j+1] = np.random.lognormal(np.log(EDPlim[blg][j]),bUthd[blg][j],1) while (EDP_sample[j+1]<=EDP_sample[j]): EDP_sample[j+1] = np.random.lognormal(np.log(EDPlim[blg][j]),bUthd[blg][j],1) else: EDP_sample[j+1] = EDPlim[blg][j] dc_sample[j] = np.interp(EDP_sample[j+1],EDPvec[blg],RDvec[blg]); EDP_sample = EDP_sample[1::] if an_type == 0: [SaT50, bTSa] = simplified_bilinear(T[blg], Gamma[blg], EDP_sample, dc_sample, EDPvec[blg], RDvec[blg], SPO[blg], np.zeros_like(bUthd[blg]), g, MC) elif an_type==2: # Dolsek and Fajfar's method [mc,a,ac,r,mf] = get_spo2ida_parameters(SPO[blg], T[blg], Gamma[blg]) # Convert MDoF into SDoF [SaT50,bTSa] = DFfragility(T[blg], Gamma[blg], EDP_sample, dc_sample, EDPvec[blg], RDvec[blg], SPO[blg], np.zeros_like(bUthd[blg]), mc, r, g, Tc, Td, MC) else: [mc,a,ac,r,mf] = get_spo2ida_parameters(SPO[blg], T[blg], Gamma[blg]) [idacm, idacr] = spo2ida_allT(mc,a,ac,r,mf,T[blg],pw,[0],filletstyle,N,linew,fontsize) [SaT50,bTSa] = spo2ida(idacm, idacr, mf, T[blg], Gamma[blg], g, EDP_sample, dc_sample, EDPvec[blg], RDvec[blg], SPO[blg], np.zeros_like(bUthd[blg]), MC) # Conversions SaTlogmean_av, bTSa_av = np.log(SaT50)*Sa_ratios[blg], np.array(bTSa)*Sa_ratios[blg] LRs.append(damage_to_loss(SaTlogmean_av,bTSa_av,iml,cd+'/NSP/inputs')) else: # If any damage criteria have uncertainty if an_type == 0: # Ruiz-Garcia Miranda's method the uncertainty in the damage criteria is already included in the total dispersion in a simplified way [SaT50, bTSa] = simplified_bilinear(T[blg], Gamma[blg], EDPlim[blg], dcroof[blg], EDPvec[blg], RDvec[blg], SPO[blg], bUthd[blg], g, MC) elif an_type == 2: [mc,a,ac,r,mf] = get_spo2ida_parameters(SPO[blg], T[blg], Gamma[blg]) # Convert MDoF into SDoF [SaT50,bTSa] = DFfragility(T[blg], Gamma[blg], EDPlim[blg], dcroof[blg], EDPvec[blg], RDvec[blg], SPO[blg], bUthd[blg], mc, r, g, Tc, Td, MC) else: [mc,a,ac,r,mf] = get_spo2ida_parameters(SPO[blg], T[blg], Gamma[blg]) [idacm, idacr] = spo2ida_allT(mc,a,ac,r,mf,T[blg],pw,[0],filletstyle,N,linew,fontsize) [SaT50,bTSa] = spo2ida(idacm, idacr, mf, T[blg], Gamma[blg], g, EDPlim[blg], dcroof[blg], EDPvec[blg], RDvec[blg], SPO[blg], bUthd[blg], MC) # Conversions SaTlogmean_av, bTSa_av = np.log(SaT50)*Sa_ratios[blg], np.array(bTSa)*Sa_ratios[blg] LR50 = damage_to_loss(SaTlogmean_av,bTSa_av,iml,cd+'/NSP/inputs') LRs.append(LR50) # Define Vulnerability curve for each building LR50s.append(np.mean(LRs,axis = 0)) bLRs.append(np.std(LRs, axis = 0)) # Combine the Loss Ratios of each building in a single LR for each iml, # with mean = mean(LRs) and std = std(LRs) lr = np.array(LR50s) bLRs = np.array(bLRs) LR50 = np.average(lr, axis=0, weights=w) # weighted mean w2 = np.array([np.repeat(ele,len(iml)) for ele in w]) bLR = np.sqrt(np.sum(np.multiply(np.power(bLRs,2)+np.power(lr-LR50,2),w2),axis=0)) return [LR50, bLR]
all = [var for var in globals() if var[0] != "_"] for var in all: del globals()[var] clearall() from rmtk.vulnerability.common.damage_to_loss import damage_to_loss import numpy as np import os # <codecell> iml = np.linspace(0.1,1,10) theta = np.array([0.30359629923905929, 0.61648687596347196, 0.90233055223871583, 1.1590608046681703, 1.1590608046681703]) beta = np.array([0.0, 0.1343651091408001, 0.22569253428542574, 0.28024503952191621, 0.28024503952191621]) path = os.getcwd() # <codecell> #SaT = [np.log(ele) for ele in theta] #bTSa = beta SaT = np.log(theta) LR = damage_to_loss(SaT,beta,iml,path) # <codecell> print LR # <codecell>
def vulnerability_process(vuln, iml, log_meanSa, log_stSa): if vuln == 1: LR50 = damage_to_loss(log_meanSa, log_stSa, iml, cd + '/inputs/') else: LR50 = [] return LR50
from rmtk.vulnerability.common.damage_to_loss import damage_to_loss import numpy as np import os # <codecell> iml = np.linspace(0.1, 1, 10) theta = np.array([ 0.30359629923905929, 0.61648687596347196, 0.90233055223871583, 1.1590608046681703, 1.1590608046681703 ]) beta = np.array([ 0.0, 0.1343651091408001, 0.22569253428542574, 0.28024503952191621, 0.28024503952191621 ]) path = os.getcwd() # <codecell> #SaT = [np.log(ele) for ele in theta] #bTSa = beta SaT = np.log(theta) LR = damage_to_loss(SaT, beta, iml, path) # <codecell> print LR # <codecell>
def vulnerability_process(an_type, T, Gamma, w, EDPlim, dcroof, EDPvec, RDvec, SPO, bUthd, noBlg, g, MC, Sa_ratios, plot_feature, N, Tc, Td): plotflag, linew, fontsize, units, iml = plot_feature[0:5] LR50s = [] bLRs = [] for blg in range(0, noBlg): LRs = [] # Vamvatsikos and Cornell's method if np.array(bUthd[blg]).any() > 0: # If some damage criteria have uncertainty # Monte Carlo realisations of damage criteria e derivation of fragility curves # for each sample, mean loss ratios are computed at each IML from all samples for i in range(0, MC): dc_sample = np.zeros_like(dcroof[blg]) EDP_sample = np.zeros(len(dcroof[blg]) + 1) for j in range(0, len(dcroof[blg])): if bUthd[blg][j] > 0: EDP_sample[j + 1] = np.random.lognormal( np.log(EDPlim[blg][j]), bUthd[blg][j], 1) while (EDP_sample[j + 1] <= EDP_sample[j]): EDP_sample[j + 1] = np.random.lognormal( np.log(EDPlim[blg][j]), bUthd[blg][j], 1) else: EDP_sample[j + 1] = EDPlim[blg][j] dc_sample[j] = np.interp(EDP_sample[j + 1], EDPvec[blg], RDvec[blg]) EDP_sample = EDP_sample[1::] if an_type == 0: [SaT50, bTSa ] = simplified_bilinear(T[blg], Gamma[blg], EDP_sample, dc_sample, EDPvec[blg], RDvec[blg], SPO[blg], np.zeros_like(bUthd[blg]), g, MC) elif an_type == 2: # Dolsek and Fajfar's method [mc, a, ac, r, mf] = get_spo2ida_parameters( SPO[blg], T[blg], Gamma[blg]) # Convert MDoF into SDoF [SaT50, bTSa] = DFfragility(T[blg], Gamma[blg], EDP_sample, dc_sample, EDPvec[blg], RDvec[blg], SPO[blg], np.zeros_like(bUthd[blg]), mc, r, g, Tc, Td, MC) else: [mc, a, ac, r, mf] = get_spo2ida_parameters(SPO[blg], T[blg], Gamma[blg]) [idacm, idacr] = spo2ida_allT(mc, a, ac, r, mf, T[blg], pw, [0], filletstyle, N, linew, fontsize) [SaT50, bTSa] = spo2ida(idacm, idacr, mf, T[blg], Gamma[blg], g, EDP_sample, dc_sample, EDPvec[blg], RDvec[blg], SPO[blg], np.zeros_like(bUthd[blg]), MC) # Conversions SaTlogmean_av, bTSa_av = np.log( SaT50) * Sa_ratios[blg], np.array(bTSa) * Sa_ratios[blg] LRs.append( damage_to_loss(SaTlogmean_av, bTSa_av, iml, cd + '/NSP/inputs')) else: # If any damage criteria have uncertainty if an_type == 0: # Ruiz-Garcia Miranda's method the uncertainty in the damage criteria is already included in the total dispersion in a simplified way [SaT50, bTSa] = simplified_bilinear(T[blg], Gamma[blg], EDPlim[blg], dcroof[blg], EDPvec[blg], RDvec[blg], SPO[blg], bUthd[blg], g, MC) elif an_type == 2: [mc, a, ac, r, mf] = get_spo2ida_parameters( SPO[blg], T[blg], Gamma[blg]) # Convert MDoF into SDoF [SaT50, bTSa] = DFfragility(T[blg], Gamma[blg], EDPlim[blg], dcroof[blg], EDPvec[blg], RDvec[blg], SPO[blg], bUthd[blg], mc, r, g, Tc, Td, MC) else: [mc, a, ac, r, mf] = get_spo2ida_parameters(SPO[blg], T[blg], Gamma[blg]) [idacm, idacr] = spo2ida_allT(mc, a, ac, r, mf, T[blg], pw, [0], filletstyle, N, linew, fontsize) [SaT50, bTSa] = spo2ida(idacm, idacr, mf, T[blg], Gamma[blg], g, EDPlim[blg], dcroof[blg], EDPvec[blg], RDvec[blg], SPO[blg], bUthd[blg], MC) # Conversions SaTlogmean_av, bTSa_av = np.log(SaT50) * Sa_ratios[blg], np.array( bTSa) * Sa_ratios[blg] LR50 = damage_to_loss(SaTlogmean_av, bTSa_av, iml, cd + '/NSP/inputs') LRs.append(LR50) # Define Vulnerability curve for each building LR50s.append(np.mean(LRs, axis=0)) bLRs.append(np.std(LRs, axis=0)) # Combine the Loss Ratios of each building in a single LR for each iml, # with mean = mean(LRs) and std = std(LRs) lr = np.array(LR50s) bLRs = np.array(bLRs) LR50 = np.average(lr, axis=0, weights=w) # weighted mean w2 = np.array([np.repeat(ele, len(iml)) for ele in w]) bLR = np.sqrt( np.sum(np.multiply(np.power(bLRs, 2) + np.power(lr - LR50, 2), w2), axis=0)) return [LR50, bLR]
def vulnerability_process(vuln,iml,log_meanSa,log_stSa): if vuln == 1: LR50 = damage_to_loss(log_meanSa, log_stSa, iml, cd+'/inputs/') else: LR50 = [] return LR50