An example of the applied OpenSees script is added to this document, starting at the next page.
Using the script, the OOP behavior of the URM walls on both BL1 and BL2 can be assessed for structure A, B or C. Besides, the third and fourth sensitivity study can be performed using the added script. The boundary condition type that applies to the analyzed wall can be overruled by BC0. Also, elastic properties can be assigned to the springs that represent the lateral behavior of the building layers, instead of the usual nonlinear hysteretic material model. The execution of the script yields results concerning the location Overschild and five PGA values: 0.05, 0.10, 0.15, 0.20 and 0.25 g.
OpenSees script page 138
In [12]: # =======================================================================================
# Assessment of URM walls in terms of their OOP behavior
# ======================================================================================= from scipy import linalg as la import openseespy.opensees as op
# damping damp_ratio = 0.05 damp_ratiow = 0.05
# shown GM record GMrecord = 1
# Overschild, v6, T4, 2475 years, horizontal (NPR webtool data) location_name = 'Overschild'
PGA_list = [0.05, 0.10, 0.15, 0.20, 0.25]
# analyzed situation
name_folder = 'Results_loop_structure' + str(structure) + '_1811' data_folder_comparison = name_folder + '\Comparison_UC_PGA'
data_folder = name_folder + '\Data_' + str(location_name) + '_PGA_' + str(round(PGA*1000)) else:
data_folder = name_folder + '\Data_' + str(location_name) + '_PGA_' + str(round(PGA*100)) data_folder_defw = data_folder + '\Defw'
if not os.path.exists(data_folder_defw):
os.makedirs(data_folder_defw)
for loop_wall in range(n_walls):
if structure == 'A':
elif loop_wall == 1:
print(colored('START OF NEW FOR-LOOP','grey',attrs=['bold']))
print(colored('========================================================================================
print('Typology: structure ' + str(typology_type_name[typology_type-1])) print('Wall located at: ' + str(level_wall_name[level_wall]))
print('')
T[i] = Tstep*i plt.title('Displacement Response Spectrum') plt.grid(True)
plt.title('Elastic Acceleration Displacement Response Spectrum') plt.grid(True)
hn = h1+h2
# option 2) eP = 0
f_BL1, d_BL1, f_BL2, d_BL2 = load_EUC1_combined_dataset(BBC_type = 3, cutoff_freq = 50.0)[8:]
### 1.3. Construction of hysteretic material models representing building layers
# =======================================================================================
# =======================================================================================
op.fix(fl1, 0, 1, 1)
op.uniaxialMaterial('Hysteretic', MatTag_BL1, *p1_BL1, *p2_BL1, *p3_BL1, *n1_BL1, *n2_BL1, *n3_BL1, elif L_NL_behavior_BLs == 1:
op.uniaxialMaterial('Hysteretic', MatTag_BL2, *p1_BL2, *p2_BL2, *p3_BL2, *n1_BL2, *n2_BL2, *n3_BL2, elif L_NL_behavior_BLs == 1:
Kinitial = p1_BL1[0]/p1_BL1[1]
op.uniaxialMaterial('Elastic', MatTag_BL2, Kinitial) # spring 1 + 2: two node link elements
op.element('twoNodeLink', EleTag_BL1, gr, fl1, '-mat', MatTag_BL1, '-dir', 1) op.element('twoNodeLink', EleTag_BL2, fl1, fl2, '-mat', MatTag_BL2, '-dir', 1)
# =======================================================================================
PushoverLoad1 = (PushoverLoad*m1*phi_fl1)/((m1*phi_fl1)+(m2*phi_fl2)) PushoverLoad2 = (PushoverLoad*m2*phi_fl2)/((m1*phi_fl1)+(m2*phi_fl2)) print('Pushover load = ' + str(round(PushoverLoad,4)) + ' N') print('Pushover load m1 = ' + str(round(PushoverLoad1,4)) + ' N') print('Pushover load m2 = ' + str(round(PushoverLoad2,4)) + ' N') # load
op.timeSeries('Linear', PushoverTimeSeries)
op.pattern('Plain', PushoverPatternTag, PushoverTimeSeries) op.load(fl1, PushoverLoad1, 0., 0.)
op.load(fl2, PushoverLoad2, 0., 0.)
# =======================================================================================
# RECORDERS # recorder
op.recorder('Node', '-file', AnalysisName + "_dispfl1.out", '-time', '-node', fl1, '-dof', 1, 'disp') op.recorder('Node', '-file', AnalysisName + "_dispfl2.out", '-time', '-node', fl2, '-dof', 1, 'disp') op.recorder('Node', '-file', AnalysisName + "_baseshear.out", '-time', '-node', gr, '-dof', 1, 'reactio op.recorder('Element', '-file', AnalysisName + "_BL1.out", '-time', '-ele', EleTag_BL1, '-dof', 1, 'for op.recorder('Element', '-file', AnalysisName + "_BL2.out", '-time', '-ele', EleTag_BL2, '-dof', 1, 'for
# =======================================================================================
# NLPO ANALYSIS du = ADRS_du
op.constraints("Transformation") op.numberer("Plain")
op.system("BandGen")
op.test('NormDispIncr', 1e-5, 1000) op.algorithm("Newton")
op.integrator("DisplacementControl", fl2, 1, du) op.analysis("Static")
BaseShearFileName = AnalysisName + '_baseshear.out' BaseShear = loadtxt(BaseShearFileName, delimiter = ' ')
print(colored('Results incorrect: max. force in spring BL1 exceeds maximum force','red',attrs=['bli if max(abs(F_BL2)) > max(p1_BL2[0], p2_BL2[0], p3_BL2[0]):
print('')
print(colored('Results incorrect: max. force in spring BL2 exceeds maximum force','red',attrs=['bli # deformations
if max(abs(def_BL1)) > p3_BL1[1]:
print('')
print(colored('Results incorrect: max. deformation of spring BL1 exceeds ultimate displacement','re if max(abs(def_BL2)) > p3_BL2[1]:
print('')
print(colored('Results incorrect: max. deformation of spring BL2 exceeds ultimate displacement','re
# ======================================================================================= plt.title('Force-deformation spring BL1') plt.grid(True) plt.title('Force-deformation spring BL2') 705
plt.grid(True) plt.show()
# NLPO curve (total building: base shear force) xmin = min(min(dispfl1),min(dispfl2),min(dispeq))*1.1 xmax = max(max(dispfl1),max(dispfl2),max(dispeq))*1.1 ymax = max(max(Fb),max(Fbeq))*1.1 plt.title('Nonlinear Pushover Analysis') plt.grid(True)
index_60Fmax = abs(eqSDOF_force-(0.6*max(eqSDOF_force))).argmin() eqSDOF_disp_60Fmax = eqSDOF_disp[index_60Fmax]
eqSDOF_K0 = (0.6*max(eqSDOF_force))/eqSDOF_disp_60Fmax # determination ucapsys
eqSDOF_ucapsys = max(eqSDOF_disp) # determination ucapbilin
index_Fmax = abs(eqSDOF_force-max(eqSDOF_force)).argmin()
index_80Fmax = abs(eqSDOF_force[index_Fmax:]-(0.8*max(eqSDOF_force))).argmin() eqSDOF_disp_80Fmax = eqSDOF_disp[index_Fmax+index_80Fmax]
if eqSDOF_disp_80Fmax < eqSDOF_ucapsys:
eqSDOF_ucapbilin = eqSDOF_disp_80Fmax
Em1 = integrate.quad(f_eqSDOF_force_incr, 0, eqSDOF_disp[index_Fmax-1], limit = 10000)[0]
if eqSDOF_force[-1] == max(eqSDOF_force):
Em2 = integrate.quad(f_eqSDOF_force_decr, eqSDOF_disp[index_Fmax], eqSDOF_ucapbilin, limit = 10000) Em = Em1+Em2
# capacity bilinear NLPO curve
eqSDOF_force_bilin = (eqSDOF_ucapbilin*eqSDOF_K0)-sqrt((eqSDOF_ucapbilin*eqSDOF_K0)**2-(2*Em*eqSDOF_K0) # determination uysys
eqSDOF_uysys = eqSDOF_force_bilin/eqSDOF_K0 # bilinear NLPO curve
plt.plot(eqSDOF_disp, eqSDOF_force, label = 'interpolated eq. SDOF system')
plt.plot([min(eqSDOF_disp), max(eqSDOF_disp)], [eqSDOF_force_bilin, eqSDOF_force_bilin], label = 'capac plt.plot([0, eqSDOF_uysys], [0, eqSDOF_force_bilin], label = 'initial stiffness bilinear curve') plt.plot(eqSDOF_disp_60Fmax, (0.6*max(eqSDOF_force)), 'bo', label = '60% Vmax')
plt.plot(eqSDOF_disp[index_Fmax], max(eqSDOF_force), 'ko', label = '100% Vmax') plt.plot([eqSDOF_uysys, eqSDOF_uysys], [0, max(eqSDOF_force)], '--', label = 'uysys') 793
plt.plot([eqSDOF_ucapbilin, eqSDOF_ucapbilin], [0, max(eqSDOF_force)], '--', label = 'ucapbilin') plt.plot([eqSDOF_ucapsys, eqSDOF_ucapsys], [0, max(eqSDOF_force)], '--', label = 'ucapsys') plt.xlim(left=0)
print(colored('Input','red',attrs=['blink'])) print('height = ' + str(round(h,3)) + ' [m]')
print(colored('Output','red',attrs=['blink']))
print('Mass participation factor = ' + str(round(y,3)) + ' -') print('Fundamental period wall = ' + str(round(Ta_NLKA,3)) + ' s')
print('Angle for which wall becomes unstable = ' + str(round(A,3)) + ' radians = ' + str(round(degrees(
print('Instability displacement mid-height wall = ' + str(round(instability_dispw,3)) + ' m = ' + str(r print('Maximum usable displacement mid-height wall = ' + str(round(dmax_NLKA,3)) + ' m')
881
print(colored('OOP acceleration capacity wall Rd = ' + str(round(Rd,3)) + ' g','blue',attrs=['blink']))
# spectral reduction factor mu due to damping and energy dissipation damp_ratio_inherent = damp_ratio
damp_ratio_hysteretic = min((0.42*(1-(0.9/sqrt(mu_sys))-0.1*sqrt(mu_sys))), 0.15) damp_ratio_ADRS = min((damp_ratio_inherent + damp_ratio_hysteretic), 0.4) mu = max(sqrt(7/(2+(damp_ratio_ADRS*100))), 0.55)
plt.plot(NL_ADRS_Sed, NL_ADRS_shear, label = 'Inelastic ADRS curve') plt.plot(dispfl1, Fb, label = 'Floor 1')
plt.plot(dispfl2, Fb, label = 'Floor 2')
plt.plot(dispeq, Fbeq, linestyle = 'None', marker = 'o', markevery = 50, label = 'Eq. SDOF system') plt.xlabel('Spectral displacement [m]')
plt.ylabel('Base shear force [N]')
plt.title('Inelastic Acceleration Displacement Response Spectrum') plt.legend()
index_shear_PP = ydifference.index(min_ydifference) shear_PP[PP] = yADRS[index_shear_PP]
disp_PP[0] = xADRS[index_shear_PP]
print('Fundamental period wall according to NLKA analysis (used in this analysis) = ' + str(round(Ta_NL print('Fundamental period wall according to standard NPR formula = ' + str(round(Ta_NPR,3)) + ' s') # elastic response spectrum incl. spectral reduction factor mu
NL_Sea = zeros(steps_T)
S_ead_wall_Tier1 = S_ead_Tier1[int(round(Ta_NLKA/dT))]
ylim = round(max(S_ead_Tier1),3)*1.1
plt.xlabel('Period [s]')
plt.ylabel('Spectral acceleration demand of wall [g]') plt.title('General spectrum: Tier 1')
print('Spectral acceleration demand of wall, SEad, is ' + str(round(S_ead_wall_Tier1,5)) + ' g (Tier 1) print("> Tier 1 analysis done!")
plt.plot(T, S_ead1, label = 'floor spectrum 1 (minimum: elastic ground spectrum)') ylim = round(max(max(S_ead1),max(S_ead1_nomin))*1.1,2)
plt.xlim((0,Tmax)) plt.ylim((0,ylim)) plt.xlabel('Period [s]')
plt.ylabel('Spectral acceleration demand of wall [g]') plt.title('Floor spectrum 1')
plt.grid(True)
plt.plot(T, S_ead2, label = 'floor spectrum 2 (minimum: elastic ground spectrum)') ylim = round(max(max(S_ead2),max(S_ead2_nomin))*1.1,2)
plt.xlim((0,Tmax)) plt.ylim((0,ylim)) plt.xlabel('Period [s]')
plt.ylabel('Spectral acceleration demand of wall [g]') plt.title('Floor spectrum 2') S_ead_wall_Tier2 = S_ead_Tier2[int(round(Ta_NLKA/dT))]
# building specific floor spectrum
plt.plot(T, NL_Sea, label = 'Spectrum ground floor') plt.plot(T, S_ead1, label = 'Spectrum floor 1') plt.plot(T, S_ead2, label = 'Spectrum floor 2')
plt.plot(T, S_ead_Tier2, label = 'Building specific floor spectrum') plt.plot(Ta_NLKA, S_ead_wall_Tier2, 'bo')
ylim = round(max(max(NL_Sea),max(S_ead1),max(S_ead2),max(S_ead_Tier2))*1.1,2) plt.xlim((0,Tmax))
plt.ylim((0,ylim)) plt.xlabel('Period [s]')
plt.ylabel('Spectral acceleration demand of wall [g]') plt.title('Building specific floor spectrum')
plt.legend() plt.grid(True) plt.show()
print('Spectral acceleration demand of wall, SEad, is ' + str(round(S_ead_wall_Tier2,5)) + ' g (Tier 2) print("> Tier 2 analysis done!")
#### 3.2.1. Elastic-bilinear material model representing wall # determination Fmaxw and umaxw: RB mechanism branch
# determination Fmax_elastic and umax_elastic: elastic branch EI = Emod*(1/12)*1*(teff**3)
if BC_top == 2 and BC_bottom == 5:
umax_elastic = Fmax_elastic/K_elastic # interpolate elastic branch
n_steps_u_elastic = 1000
stepsize_u_elastic = umax_elastic/n_steps_u_elastic u_elastic_array = zeros(n_steps_u_elastic)
for i in range(n_steps_u_elastic):
u_elastic_array[i] = stepsize_u_elastic*i
f_F_elastic = interpolate.interp1d([0, umax_elastic], [0, Fmax_elastic]) F_elastic = f_F_elastic(u_elastic_array)
# interpolate RB mechanism branch
n_steps_u_RB = int(umaxw/stepsize_u_elastic) u_RB_array = zeros(n_steps_u_RB)
index_Fydw_uydw = abs(F_RB[:n_steps_u_elastic]-F_elastic).argmin() Fydw = F_elastic[index_Fydw_uydw]
uydw = u_elastic_array[index_Fydw_uydw]
# divide by mass participation factor Fmaxw = Fmaxw/participation_factor_RB Fydw = Fydw/participation_factor_RB umaxw = umaxw/participation_factor_RB uydw = uydw/participation_factor_RB
# nodal coordinates
op.uniaxialMaterial('ElasticBilin', kWMatTag_3a_eig, kweq1, kweq2, uydw) # wall spring: two node link element
op.element('twoNodeLink', kWEleTag_3a_eig, flb_flt_3a_eig, w_3a_eig, '-mat', kWMatTag_3a_eig, '-dir', 1 wn2_SDOFw = op.eigen('-fullGenLapack', 1)
op.uniaxialMaterial('ElasticBilin', kWMatTag_3bc_eig, kw1, kw2, uydw) # wall spring 1 + 2: two node link elements
op.element('twoNodeLink', kWbEleTag_3b_eig, flb_3b_eig, w_3b_eig, '-mat', kWMatTag_3bc_eig, '-dir', 1, op.element('twoNodeLink', kWtEleTag_3b_eig, w_3b_eig, flt_3b_eig, '-mat', kWMatTag_3bc_eig, '-dir', 1, wn2_SDOFw = op.eigen('-fullGenLapack', 1)
ult_defw_limit = factor_ult_defw_limit*umaxw # effective stiffness Ta_calculated = 2*pi*sqrt(mw/keffeq_calc) 1409
Ta = Ta_calculated plt.plot([0,(uydw*1000)],[(Fmaxw/1000),(Fydw/1000)], 'b--')
plt.plot([0,(uydw*1000),(umaxw*1000)], [0,(0.5*Fydw/1000),0], 'r', label = 'P = ' + str(round((P/1000), plt.plot([0,(uydw*1000)],[(0.5*Fmaxw/1000),(0.5*Fydw/1000)], 'r--')
plt.plot(x_centroid*1000, y_centroid/1000, 'o', markersize = 10, label = 'Centroid of area underneath F plt.plot([0,(umaxw*1000)], [0,((keffeq_calc*umaxw)/1000)], label = 'Effective stiffness')
plt.xlim(left=0) plt.ylim(bottom=0)
plt.title('BBC of elastic-bilinear material model') plt.xlabel('Displacement [mm]')
n_NaN_Tier3a = 0
# ground motion data op.pattern('UniformExcitation', gmPatternTag, gmDirection, '-accel', gmTimeSeries)
# =======================================================================================
# =======================================================================================
AnalysisName = str(data_folder) + '/Tier3a_SDOFw_OpenSees'
Dispw_3aFileName = AnalysisName + '_dispw_3a.out'
UC_Tier3a_gm[level_wall][n][loop_PGA] = UC
# ======================================================================================= plt.plot(time_dispw_3a[plotmin:plotmax], defw_3a[plotmin:plotmax], 'tab:blue', label = 'Deforma plt.xlim((time_dispw_3a[plotmin], time_dispw_3a[plotmax]))
print(colored('Tier 3a: number of ground motions for which no convergence applies and/or the wall sprin print('')
op.fix(fl2, 0, 1, 1)
print('duration gm = ' + str(duration_gm)) op.pattern('UniformExcitation', gmPatternTag, gmDirection, '-accel', gmTimeSeries)
# =======================================================================================
AccgrFileName = AnalysisName + '_accgr.out'
power = 1
def_kW_3b = dispw_3b-disp_flb_flt_3b
plt.xlim((0,max(time))) plt.plot(time_dispw_3b[plotmin:plotmax], defw_3b[plotmin:plotmax], 'tab:orange', label = 'Defor 2641
plt.xlim((time_dispw_3b[plotmin], time_dispw_3b[plotmax]))
print(colored('Tier 3b: number of ground motions for which no convergence applies and/or the wall sprin print('')
# remove existing model
wn[i] = sqrt(wn2[i])
op.timeSeries('Path', gmTimeSeries, '-time', *gm_time, '-values', *gm_acc) op.pattern('UniformExcitation', gmPatternTag, gmDirection, '-accel', gmTimeSeries)
# =======================================================================================
kWbFileName = AnalysisName + '_kWb.out'
plt.plot([0, time[plotmax]],[umaxw, umaxw], 'k--', label = 'Instability displacement')
print('U.C. Tier 3c = ' + str(round(UC,3)) + ' [-]')
defw_3c = (dispw_3c+gm_disp[0:len(dispw_3c)])-disp_flb_flt_3c[0:len(dispw_3c)]
# plot relative deformation of wall over time plt.plot(time_dispw_3c[plotmin:plotmax], defw_3c[plotmin:plotmax], 'tab:green', label = 'Deform plt.xlim((time_dispw_3c[plotmin], time_dispw_3c[plotmax]))
print(colored('Tier 3c: number of ground motions for which no convergence applies and/or the wall sprin print('')
if isnan(UC_Tier3a_gm[level_wall][n][loop_PGA]) == True and isnan(UC_Tier3b_gm[level_wall][n][loop_
print('No data available for GM' + str(n+1) + '')
print('')
print(colored('END OF FOR-LOOPS','grey',attrs=['bold']))
print(colored('============================================================================================
print('')
# =======================================================================================
# INFLUENCE DIFFERENT PROCEDURES # average U.C. value Tier 3a-c UC_Tier3a = nanmean(UC_Tier3a_gm, 1) UC_Tier3b = nanmean(UC_Tier3b_gm, 1) UC_Tier3c = nanmean(UC_Tier3c_gm, 1) # plot unity check values
fig = plt.figure(figsize = (6,4))
figure_name = 'UC_basic_situ_' + str(situ_legend_abbr[situ]) procedures = [1,2,3,4,5]
ticks_procedures = [1,2,3,4,5]
labels_procedures = ['Tier 1', 'Tier 2', 'Tier 3a', 'Tier 3b', 'Tier 3c']
plt.xticks(ticks_procedures, labels_procedures) plt.xlim(1,5)
for i in range(n_walls):
plt.plot(procedures, [UC_Tier1[i][loop_PGA], UC_Tier2[i][loop_PGA], UC_Tier3a[i][loop_PGA], UC_Tier3b[i plt.ylim(bottom = 0)
plt.xlabel('Assessment method')
plt.ylabel('Unity check [-]\n $\it{Situation}$: $\it{' + str(situ_legend_abbr[situ]) + '}$') plt.grid(True)
plt.legend()
plt.legend(loc = 'upper left', bbox_to_anchor = (1.01, 1)) plt.show()
fig.savefig(str(data_folder) + '/' + str(figure_name) + '.png', bbox_inches='tight')
# =======================================================================================
# INFLUENCE DIFFERENT SITUATIONS # plot unity check values
plt.xticks(ticks_procedures, labels_procedures) plt.xlim(1,5)
plt.plot(procedures, [UC_Tier1[n][loop_PGA], UC_Tier2[n][loop_PGA], UC_Tier3a[n][loop_PGA], UC_Tier3b[n plt.ylim(bottom = 0)
plt.xlabel('Assessment method')
plt.ylabel('Unity check [-]\n $\it{Wall}$: $\it{' + str(wall_legend[n]) + '}$') plt.grid(True)
plt.show()
fig.savefig(str(data_folder) + '/' + str(figure_name) + '.png', bbox_inches='tight') print('')
print(colored('============================================================================================
print('') ## 5. Save data
for i in range(n_walls):
data_name_1 = 'UC_Tier1_wall_' + str(wall_legend_abbr[i]) data_name_2 = 'UC_Tier2_wall_' + str(wall_legend_abbr[i]) data_name_3a = 'UC_Tier3a_gm_wall_' + str(wall_legend_abbr[i]) data_name_3b = 'UC_Tier3b_gm_wall_' + str(wall_legend_abbr[i]) data_name_3c = 'UC_Tier3c_gm_wall_' + str(wall_legend_abbr[i]) savetxt(str(data_folder) + '/' + str(data_name_1), UC_Tier1[i]) savetxt(str(data_folder) + '/' + str(data_name_2), UC_Tier2[i]) savetxt(str(data_folder) + '/' + str(data_name_3a), UC_Tier3a_gm[i]) savetxt(str(data_folder) + '/' + str(data_name_3b), UC_Tier3b_gm[i]) savetxt(str(data_folder) + '/' + str(data_name_3c), UC_Tier3c_gm[i])
## 6. Additional graphs for i in range(n_walls):
plt.plot([0, (uydw_walls[i]*1000), (umaxw_walls[i]*1000)], [0, (Fmaxw_walls[i]/1000), 0], label = wall_lege plt.xlim(left = 0)
plt.ylim(bottom = 0)
plt.title('F-d-relationship URM walls') plt.xlabel('Mid-height displacement [mm]') plt.ylabel('Force [kN]')
plt.legend()
plt.legend(loc = 'upper left', bbox_to_anchor = (1.01, 1)) plt.grid(True)
# INFLUENCE PGA VALUE PER WALL for loop_wall in range(n_walls):
figure_name = 'UC_PGA_wall_' + str(BL) + '_' + str(structure) procedures = [1,2,3,4,5]
ticks_procedures = [1,2,3,4,5]
labels_procedures = ['Tier 1', 'Tier 2', 'Tier 3a', 'Tier 3b', 'Tier 3c']
plt.xticks(ticks_procedures, labels_procedures) plt.xlim(1,5)
for p in range(n_PGA):
plt.plot(procedures, [UC_Tier1[loop_wall][p], UC_Tier2[loop_wall][p], UC_Tier3a[loop_wall][p], UC_Tier3 plt.ylim(bottom = 0)
plt.xlabel('Assessment method')
plt.ylabel('Unity check [-]\n Wall ' + str(BL) + ', ' + str(structure) + ', situation ' + str(situ)) plt.grid(True)
plt.legend()
plt.legend(loc = 'upper left', bbox_to_anchor = (1.01, 1)) plt.show()
fig.savefig(str(data_folder_comparison) + '/' + str(figure_name) + '.png', bbox_inches='tight')
# =======================================================================================
# INFLUENCE WALL PER PGA VALUE for p in range(n_PGA):
# plot unity check values fig = plt.figure(figsize = (6,4))
figure_name = 'UC_PGA_' + str(PGA_list[p]) procedures = [1,2,3,4,5]
ticks_procedures = [1,2,3,4,5]
labels_procedures = ['Tier 1', 'Tier 2', 'Tier 3a', 'Tier 3b', 'Tier 3c']
plt.xticks(ticks_procedures, labels_procedures) plt.xlim(1,5)
for loop_wall in range(n_walls):
if loop_wall == 0:
BL = 'BL1' elif loop_wall == 1:
BL = 'BL2'
plt.plot(procedures, [UC_Tier1[loop_wall][p], UC_Tier2[loop_wall][p], UC_Tier3a[loop_wall][p], UC_Tier3 plt.ylim(bottom = 0)
plt.xlabel('Assessment method')
plt.ylabel('Unity check [-]\nPGA = ' + str(PGA_list[p]) + ' g') plt.grid(True)
plt.legend()
plt.legend(loc = 'upper left', bbox_to_anchor = (1.01, 1)) plt.show()
fig.savefig(str(data_folder_comparison) + '/' + str(figure_name) + '.png', bbox_inches='tight')
# =======================================================================================
# INFLUENCE WALL PER PGA VALUE, INCL. RANGE OF INCLUDED GM RECORDS n_Tier3_methods = 3
Tier3_procedures = [3, 4, 5]
for p in range(n_PGA):
for loop_wall in range(n_walls):
if loop_wall == 0:
elif loop_wall == 1:
plt.xticks(ticks_procedures, labels_procedures) plt.xlim(1,5)
UC_min_Tier3abc = zeros(n_Tier3_methods) UC_max_Tier3abc = zeros(n_Tier3_methods) number_errors_Tier3abc = zeros(n_Tier3_methods) n_incl_GM = zeros(n_Tier3_methods)
# minimum value
UC_min_Tier3abc[0] = nanmin(transpose(UC_Tier3a_gm[loop_wall])[p]) UC_min_Tier3abc[1] = nanmin(transpose(UC_Tier3b_gm[loop_wall])[p]) UC_min_Tier3abc[2] = nanmin(transpose(UC_Tier3c_gm[loop_wall])[p])
# minimum value
UC_max_Tier3abc[0] = nanmax(transpose(UC_Tier3a_gm[loop_wall])[p]) UC_max_Tier3abc[1] = nanmax(transpose(UC_Tier3b_gm[loop_wall])[p]) UC_max_Tier3abc[2] = nanmax(transpose(UC_Tier3c_gm[loop_wall])[p])
# number of included GM records
number_errors_Tier3abc[0] = (isnan(transpose(UC_Tier3a_gm[loop_wall])[p]).tolist()).count(True) number_errors_Tier3abc[1] = (isnan(transpose(UC_Tier3b_gm[loop_wall])[p]).tolist()).count(True) number_errors_Tier3abc[2] = (isnan(transpose(UC_Tier3c_gm[loop_wall])[p]).tolist()).count(True)
for i in range(n_Tier3_methods):
n_incl_GM[i] = int(n_GM-number_errors_Tier3abc[i]) if loop_wall == 0:
plt.text(Tier3_procedures[i], UC_max_Tier3abc[i], int(n_incl_GM[i]), dict(fontsize=12), color = elif loop_wall == 1:
plt.text(Tier3_procedures[i], UC_max_Tier3abc[i], int(n_incl_GM[i]), dict(fontsize=12), color =
if loop_wall == 0:
plt.plot(procedures, [UC_Tier1[loop_wall][p], UC_Tier2[loop_wall][p], UC_Tier3a[loop_wall][p], UC_T plt.plot([Tier3_procedures, Tier3_procedures], [UC_min_Tier3abc, UC_max_Tier3abc], 'tab:blue', mark elif loop_wall == 1:
plt.plot(procedures, [UC_Tier1[loop_wall][p], UC_Tier2[loop_wall][p], UC_Tier3a[loop_wall][p], UC_T plt.plot([Tier3_procedures, Tier3_procedures], [UC_min_Tier3abc, UC_max_Tier3abc], 'tab:orange', ma
ymax = max(max(UC_Tier1[0]),max(UC_Tier1[1]),max(UC_Tier2[0]),max(UC_Tier2[1]),max(UC_max_Tier3abc))*1.
plt.ylim((0,ymax))
plt.xlabel('Assessment method')
plt.ylabel('Unity check [-]\nWall ' + str(BL) + ' / ' + str(structure) + ', PGA = ' + str(PGA_list[p]) plt.grid(True)
plt.show()
fig.savefig(str(data_folder_comparison) + '/' + str(figure_name) + '.png', bbox_inches='tight') 3521