Documentos de Académico
Documentos de Profesional
Documentos de Cultura
IMPORTAR MODULOS
[1]: import pandas as pd
import numpy as np
from numpy import ndarray
from pandas import ExcelWriter
import math
for i in range(N):
if i==0:
K[i,i]=datos.loc[i,"K"]+datos.loc[i+1,"K"]
K[i+1,i]=-datos.loc[i+1,"K"]
if i==N-1:
K[i,i]=datos.loc[i,"K"]
K[i-1,i]=-datos.loc[i,"K"]
if i>0 and i<N-1:
K[i-1,i]=-datos.loc[i,"K"]
K[i,i]=datos.loc[i,"K"]+datos.loc[i+1,"K"]
1
K[i+1,i]=-datos.loc[i+1,"K"]
Krig=pd.DataFrame(K)
Krig
[3]: 0 1 2 3 4 5 6
0 6510.42 -2980.08 0.00 0.00 0.00 0.00 0.00
1 -2980.08 6054.90 -3074.82 0.00 0.00 0.00 0.00
2 0.00 -3074.82 5824.69 -2749.87 0.00 0.00 0.00
3 0.00 0.00 -2749.87 5080.26 -2330.39 0.00 0.00
4 0.00 0.00 0.00 -2330.39 4006.34 -1675.95 0.00
5 0.00 0.00 0.00 0.00 -1675.95 2473.04 -797.09
6 0.00 0.00 0.00 0.00 0.00 -797.09 797.09
M=np.zeros([N,N])
for i in range(N):
M[i,i]=datos.loc[i,"M"]
Mmasa=pd.DataFrame(M)
Mmasa
[4]: 0 1 2 3 4 5 6
0 0.984389 0.000000 0.00000 0.000000 0.000000 0.000000 0.000000
1 0.000000 0.902373 0.00000 0.000000 0.000000 0.000000 0.000000
2 0.000000 0.000000 0.88597 0.000000 0.000000 0.000000 0.000000
3 0.000000 0.000000 0.00000 0.963134 0.000000 0.000000 0.000000
4 0.000000 0.000000 0.00000 0.000000 0.963134 0.000000 0.000000
5 0.000000 0.000000 0.00000 0.000000 0.000000 0.812292 0.000000
6 0.000000 0.000000 0.00000 0.000000 0.000000 0.000000 0.487138
Minv=np.linalg.inv(M)
KxMinv=np.dot(K,Minv)
2
datos["W"]=datos["valores"]**0.5
[5]: valores W T
0 160.262701 12.659491 0.496322
1 1035.247373 32.175260 0.195280
2 2323.696522 48.204735 0.130344
3 4036.361156 63.532363 0.098897
4 6118.102375 78.218299 0.080329
5 8517.286183 92.289144 0.068082
6 11822.256399 108.730200 0.057787
[7]: (['nivel 1', 'nivel 2', 'nivel 3', 'nivel 4', 'nivel 5', 'nivel 6', 'nivel 7'],
['modo 1', 'modo 2', 'modo 3', 'modo 4', 'modo 5', 'modo 6', 'modo 7'])
[ ]:
Ap=np.zeros([N-1,N-1])
C=np.zeros([N-1,1])
X=[]
for i in range(N):
A=K-datos.loc[i,"valores"]*M
h=-1
for j in range(N-1):
h=h+1
k=-1
for l in range(1,N):
k=k+1
Ap[h,k]=A[j,l]
3
for n in range(N-1):
C[n,0]=-A[n,0]
X1=np.zeros([1,1])
X1[0,0]=1
X1=np.append(X1,np.dot(np.linalg.inv(Ap),C), axis=0)
X.append(X1)
for i in range(N):
if i==0:
mod_vib=X[i]
else:
mod_vib=np.concatenate((mod_vib,X[i]), axis=1)
mod_vib=pd.DataFrame(mod_vib)
mod_vib=mod_vib.set_axis(niveles, axis=0)
mod_vib=mod_vib.set_axis(nmodos, axis=1)
mod_vib
for i in range(N):
4
ax[i].plot(mod_vibg.iloc[:,i], nivelesg, marker="o" , color="r",␣
linestyle="--", label=nmodos[i])
,→
ax[i].set_title(nmodos[i])
ax[i].legend()
plt.savefig(figura_modos, bbox_inches="tight")
plt.show
5
6
[ ]:
#S=np.zeros([N,1])
S=[]
for i in range(N):
#S.append(np.dot(np.transpose(X[i]),np.dot(M,X[i])))
Sp=np.dot(np.transpose(X[i]),np.dot(M,X[i]))
S.append(Sp[0,0])
#S.append((np.dot(np.transpose(X[i]),np.dot(M,X[i]))).tolist())
Pi=np.zeros([N,N])
for i in range(N):
Xi=X[i]
for j in range(N):
Pi[j,i]=Xi[j,0]/S[i]**0.5
FPM=np.dot(np.transpose(Pi),np.dot(M,B))
datos["Mpart"]=datos["FPM2"]/SumaFPM2
datos["FPM"], datos["Mpart"]
[10]: (0 2.218607
1 0.749499
2 0.491815
3 0.357478
4 0.285427
5 0.223409
7
6 0.115799
Name: FPM, dtype: float64,
0 0.820585
1 0.093649
2 0.040324
3 0.021304
4 0.013582
5 0.008321
6 0.002235
Name: Mpart, dtype: float64)
datos["Sdi"]=datos["Sai"]/datos["W"]**2
F=np.zeros([N,N])
for i in range(N):
for j in range(N):
F[j,i]=FPM[i,0]*Pi[j,i]*M[j,j]*datos.loc[i,"Sai"]
F
pd.DataFrame(F, columns=nmodos, index=niveles)
modo 7
nivel 1 8.504133
nivel 2 -13.412455
nivel 3 12.338994
nivel 4 -6.672551
nivel 5 2.228084
nivel 6 -0.449773
nivel 7 0.043330
8
0.1.1 Calculo de desplazamientos absolutos D
[12]: D=[]
for i in range(N):
D.append(FPM[i,0]*datos.loc[i,"Sdi"]*Pi[:,i])
D
pd.DataFrame(D, columns=nmodos, index=niveles)
[13]: delta=np.zeros([N,N])
for i in range(N):
Dp=D[i]
for j in range(N):
if j==0:
delta[j,i]=Dp[j]/datos.loc[j,"H"]
else:
delta[j,i]=(Dp[j]-Dp[j-1])/datos.loc[j,"H"]
delta
modo 7
nivel 1 1.328619e-06
nivel 2 -5.679974e-06
nivel 3 8.117639e-06
nivel 4 -5.880170e-06
9
nivel 5 2.605630e-06
nivel 6 -8.083842e-07
nivel 7 1.811996e-07
[14]: desp_comb
nivel 1 0.270437
nivel 2 0.574910
nivel 3 0.841660
nivel 4 1.095956
nivel 5 1.324008
nivel 6 1.521162
nivel 7 1.690328
[15]: dist_comb
nivel 1 0.000492
nivel 2 0.000871
nivel 3 0.000892
nivel 4 0.000855
nivel 5 0.000776
nivel 6 0.000688
nivel 7 0.000631
10
0.1.5 Calculo de derivas inelasticas der_inel
der_inel=der_inel.set_axis(niveles, axis=0)
der_inel=der_inel.set_axis(nmodos, axis=1)
der_inel
modo 7
nivel 1 0.000008
nivel 2 -0.000034
nivel 3 0.000049
nivel 4 -0.000035
nivel 5 0.000016
nivel 6 -0.000005
nivel 7 0.000001
dist_inel=[]
for i in range(N):
dist_inel.append((sum(der_inel.iloc[i,:]**2))**0.5)
[17]: dist_inel_comb
nivel 1 0.002950
nivel 2 0.005225
nivel 3 0.005354
nivel 4 0.005132
nivel 5 0.004655
nivel 6 0.004128
nivel 7 0.003788
11
0.1.7 Calculo de desplazamientos inelasticos
[19]: desp_inel_comb
nivel 1 1.622623
nivel 2 3.449458
nivel 3 5.049961
nivel 4 6.575734
nivel 5 7.944049
nivel 6 9.126972
nivel 7 10.141966
12
0.1.9 Calcula fuerzas sismicas Fsis
[20]: Fsis=np.zeros([N,N])
datos["Sai"]=datos["ZUCS"]/datos["R"]*datos["g"]
for i in range(N):
for j in range(N):
Fsis[j,i]=FPM[i]*Pi[j,i]*M[j,j]*datos.loc[i,"Sai"]
Fsis
np.shape(Fsis)
Fsis=pd.DataFrame(Fsis)
Fsis=Fsis.set_axis(niveles, axis=0)
Fsis=Fsis.set_axis(nmodos, axis=1)
Fsis
modo 7
nivel 1 8.504133
nivel 2 -13.412455
nivel 3 12.338994
nivel 4 -6.672551
nivel 5 2.228084
nivel 6 -0.449773
nivel 7 0.043330
Fsis2=Fsis**2
Fsis_c=[]
for i in range(N):
Fsis_c.append(sum(Fsis2.iloc[i,:])**0.5)
13
Fsis_c=pd.DataFrame(Fsis_c, columns=["Fsis_comb"], index=niveles)
Fsis_c
[21]: Fsis_comb
nivel 1 75.801774
nivel 2 109.470311
nivel 3 138.202177
nivel 4 181.990823
nivel 5 212.822939
nivel 6 207.726359
nivel 7 150.987867
else:
Vsis[j,i]=Fsis[j,i]+Vsis[j+1,i]
Vsis[j,i]
"""
Vsis=Fsis*0
for j in range(N-1,-1,-1):
if j==N-1:
Vsis.iloc[j,:]=Fsis.iloc[j,:]
else:
Vsis.iloc[j,:]=Fsis.iloc[j,:]+Vsis.iloc[j+1,:]
modo 7
14
nivel 1 2.579761
nivel 2 -5.924371
nivel 3 7.488083
nivel 4 -4.850911
nivel 5 1.821640
nivel 6 -0.406443
nivel 7 0.043330
for i in range(N):
Vsis_c.append((sum(Vsis.iloc[i,:]**2))**0.5)
[23]: Vsis_comb
nivel 1 954.734901
nivel 2 908.235113
nivel 3 823.161077
nivel 4 705.550512
nivel 5 542.387104
nivel 6 345.874532
nivel 7 150.987867
15
[ ]:
[25]: Hacum=np.zeros([N,1])
i=0
for j in range(N):
if j==0:
Hacum[j,0]=datos.loc[j,"H"]
else:
Hacum[j,0]=datos.loc[j,"H"]+Hacum[j-1,0]
datos["Hacum"]=pd.DataFrame(Hacum)
datos["PxH"]=datos["P"]*datos["Hacum"]
datos["PxHxk"]=datos["PxH"]*datos["k"]
datos["αi"]=datos["PxHxk"] /sum(datos["PxHxk"])
datos["Vbasal"]=datos["ZUCS"]/datos["R"]*sum(datos["P"])
datos["Fi"]=datos["αi"]*datos["Vbasal"]
Vi=np.zeros([N,1])
for j in range(N-1,-1,-1):
if j==N-1:
Vi[j,0]=datos.loc[j,"Fi"]
else:
Vi[j,0]=datos.loc[j,"Fi"]+Vi[j+1,0]
datos["Vi"]=pd.DataFrame(Vi)
res_feq=pd.
,→concat([datos["P"],datos["Hacum"],datos["αi"],datos["Vbasal"],datos["Fi"],datos["Vi"]],␣
,→axis=1)
res_feq=res_feq.set_axis(niveles, axis=0)
res_feq.round(3)
[ ]:
16
0.2.1 GRAFICO DE DERIVAS INELASTICAS
[26]: #desp_inel_cg=desp_inel_c["dist_inel_comb"].tolist()
figura_deriva_inel=path[:-5]+"_deriv_inel.jpg"
plt.title("Derivas inelasticas")
plt.savefig(figura_deriva_inel.format(), bbox_inches="tight")
plt.show
[ ]:
17
nivelesfg=[]
j=0
for i in range(N):
if i==0:
Vsis_fg.append(Vsis_f[i])
Vsis_fg.append(Vsis_f[i])
Vsis_fg.append(Vsis_f[i+1])
nivelesfg.append("base")
nivelesfg.append(niveles[i])
nivelesfg.append(niveles[i])
if i>0 and i<N-1:
Vsis_fg.append(Vsis_f[i])
Vsis_fg.append(Vsis_f[i+1])
nivelesfg.append(niveles[i])
nivelesfg.append(niveles[i])
if i==N-1:
Vsis_fg.append(Vsis_f[i])
nivelesfg.append(niveles[i])
Vsis_fg, nivelesfg
Vn=pd.DataFrame([Vsis_fg, nivelesfg])
#Vsis_fg=pd.DataFrame(Vsis_fg)
#nivelesfg=pd.DataFrame(nivelesfg)
figura_cort_dinam=path[:-5]+"_cort_dinam.jpg"
Vsis_fg, nivelesfg
plt.plot(Vsis_fg,nivelesfg, marker="o" , color="r", linestyle="--",␣
,→label="cortantes")
plt.title("Cortantes Dinamico")
plt.savefig(figura_cort_dinam.format(), bbox_inches="tight")
plt.show
18
0.2.3 GRAFICO DE CORTANTES ESTATICOS
[28]: Vsis_e=res_feq["Vi"].tolist()
Vsis_e
niveles
Vsis_fe=[]
nivelesfg=[]
j=0
for i in range(N):
if i==0:
Vsis_fe.append(Vsis_e[i])
Vsis_fe.append(Vsis_e[i])
Vsis_fe.append(Vsis_e[i+1])
nivelesfg.append("base")
nivelesfg.append(niveles[i])
nivelesfg.append(niveles[i])
if i>0 and i<N-1:
Vsis_fe.append(Vsis_e[i])
Vsis_fe.append(Vsis_e[i+1])
nivelesfg.append(niveles[i])
19
nivelesfg.append(niveles[i])
if i==N-1:
Vsis_fe.append(Vsis_e[i])
nivelesfg.append(niveles[i])
figura_cort_estat=path[:-5]+"_cort_estat.jpg"
plt.plot(Vsis_fe,nivelesfg, marker="o" , color="r", linestyle="--",␣
,→label="cortantes")
plt.title("Cortantes Estaticos")
plt.savefig(figura_cort_estat.format(), bbox_inches="tight")
plt.show
[ ]:
20
0.2.4 EXPORTA A UN EXCEL
[29]: path_resultados=path[:-5]+"_resultados.xlsx"
[ ]:
[ ]:
21