Example #1
0
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]
Example #2
0
    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>


Example #3
0
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
Example #4
0
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>
Example #5
0
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]
Example #6
0
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