Está en la página 1de 21

ANALISISMODAL19092023V01

September 19, 2023

0.1 ANALISIS MODAL


ING EDWIN ALARCON M. edwinalarconing@gmail.com

IMPORTAR MODULOS
[1]: import pandas as pd
import numpy as np
from numpy import ndarray
from pandas import ExcelWriter
import math

INGRESAR DATOS (importando archivo de excel)


[2]: #Ingresa el nombre del archivo con los datos
path=input("Ingresar nombre de archivo: ")
File = pd.ExcelFile(path)
datos=File.parse("datos")

Ingresar nombre de archivo: C:\PYTHON VIGAS\ANALIS MODAL\AM13.xlsx

FORMA LA MATRIZ DE RIGIDEZ


[3]: #Convertir peso a masa,
datos["M"]=datos["P"]/datos["g"]

#Tamaño de la matriz K de tamaño NxN donde N es numero de niveles


#Forma la matriz de rigidez K de tamaño NxN
N=len(datos)
K=np.zeros([N,N])

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

FORMA LA MATRIZ DE MASA


[4]: #Forma la matriz de masa M de tamaño NxN

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

CALCULA LA FRECUENCIA Y PERIODOS W Y T


[5]: #Calculano los valores propios de la matriz de masa
#segun (K-Landa*M)=0

Minv=np.linalg.inv(M)
KxMinv=np.dot(K,Minv)

valores, vectores = np.linalg.eig(KxMinv)

#ordena los valores en orden ascendente


valores= valores[valores[:].argsort()]

#Calcula las frecuencias


datos["valores"]=pd.DataFrame(valores)

2
datos["W"]=datos["valores"]**0.5

#Calcula los periodos T


datos["T"]=2*np.pi/datos["W"]

datos["valores"], datos["W"], datos["T"]


Val_W_T=pd.concat([datos["valores"], datos["W"], datos["T"]], axis=1)
Val_W_T

[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

Forma los nombres de modos y niveles


[6]: niveles=[]
nmodos=[]
for i in range(N):
niveles.append("nivel " + str(i+1))
nmodos.append("modo " + str(i+1))

[7]: niveles, nmodos

[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'])

[ ]:

CALCULA MODOS DE VIBRACION NORMALIZADOS AL PRIMER PISO


[8]: #Calcula modos de vibracion normalizados al primer piso X

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

[8]: modo 1 modo 2 modo 3 modo 4 modo 5 modo 6 modo 7


nivel 1 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
nivel 2 2.131708 1.842680 1.417076 0.851343 0.163697 -0.628809 -1.720516
nivel 3 3.128286 2.099560 0.854941 -0.301199 -0.940755 -0.635671 1.612120
nivel 4 4.081102 1.686504 -0.413683 -1.198239 -0.321333 1.101033 -0.801940
nivel 5 4.935115 0.477507 -1.513377 -0.257849 1.222100 -0.725433 0.267782
nivel 6 5.668088 -1.487675 -1.021555 1.647863 -0.928612 0.285669 -0.064094
nivel 7 6.283520 -4.050155 2.431599 -1.123438 0.339027 -0.067931 0.010296

GRAFICA MODOS DE VIBRACION


[38]: import matplotlib.pyplot as plt

#Extrae una fila de la dataframe de modo de vibracion en forma de array


nivel_0=(mod_vib.iloc[0:1,:].to_numpy(copy=True))*0

nivel_0=pd.DataFrame(nivel_0, columns=nmodos,index=["nivel 0"])


#añade una fila a la dataframe de modos de vibracion para graficar desde nivel 0
mod_vibg=pd.concat([nivel_0, mod_vib], axis=0)
nivelesg=niveles.copy()
nivelesg.insert(0, "nivel 0")

#genera varias vistas para graficar


fig, ax =plt.subplots(N,1, sharey=True, figsize=[2,20])

#Nombre de archivo donde guardar modos de vibracion


figura_modos=path[:-5]+"_modos.jpg"

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

[38]: <function matplotlib.pyplot.show(close=None, block=None)>

5
6
[ ]:

CALCULA MODOS DE PARTICIPACION NORMAL


[10]: #FACTOR DE PARTICIPACION MODAL
#Calculando S

#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())

#Calcula matriz de Modo de Vibracion Normalizado Pi

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

#Calcula FACTOR DE PARTICIPACION MODAL


B=np.ones([N,1])

FPM=np.dot(np.transpose(Pi),np.dot(M,B))

#Calcula porcentaje de participacion de masa por modo


datos["FPM"]=pd.DataFrame(FPM)
datos["FPM2"]=datos["FPM"]**2
SumaFPM2=sum(datos["FPM2"])

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)

Calculando desplazamiento espectral


[11]: #Calculando desplazamiento espectral

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)

[11]: modo 1 modo 2 modo 3 modo 4 modo 5 modo 6 \


nivel 1 42.316739 31.196441 30.150969 27.669940 26.737894 22.804450
nivel 2 82.691195 52.695610 39.166412 21.593967 4.012233 -13.144913
nivel 3 119.143652 58.950257 23.200092 -7.500903 -22.638929 -13.046817
nivel 4 168.969994 51.476896 -12.203634 -32.439316 -8.406256 24.566320
nivel 5 204.328730 14.574874 -44.644550 -6.980602 31.970825 -16.185908
nivel 6 197.922064 -38.296460 -25.416084 37.624847 -20.488339 5.375617
nivel 7 131.583249 -62.526211 36.280941 -15.383054 4.485869 -0.766604

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)

[12]: modo 1 modo 2 modo 3 modo 4 modo 5 modo 6 modo 7


nivel 1 0.268234 0.571795 0.839111 1.094688 1.323763 1.520371 1.685451
nivel 2 0.030612 0.056408 0.064272 0.051628 0.014618 -0.045541 -0.123984
nivel 3 0.013181 0.018679 0.011269 -0.005453 -0.019948 -0.013465 0.032051
nivel 4 0.006964 0.005929 -0.002098 -0.008344 -0.001796 0.011476 -0.007823
nivel 5 0.004440 0.000727 -0.004177 -0.001427 0.005426 -0.004123 0.001505
nivel 6 0.002720 -0.001710 -0.001729 0.002995 -0.001973 0.000777 -0.000185
nivel 7 0.000731 -0.001257 0.001178 -0.000586 0.000196 -0.000047 0.000008

0.1.2 Calculo de distorsiones en cada modo (delta)

[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

pd.DataFrame(delta, columns=nmodos, index=niveles)

[13]: modo 1 modo 2 modo 3 modo 4 modo 5 modo 6 \


nivel 1 0.000488 0.000056 0.000024 0.000013 0.000008 4.945259e-06
nivel 2 0.000867 0.000074 0.000016 -0.000003 -0.000011 -1.265767e-05
nivel 3 0.000891 0.000026 -0.000025 -0.000027 -0.000016 -6.221778e-08
nivel 4 0.000852 -0.000042 -0.000056 -0.000021 0.000009 1.574550e-05
nivel 5 0.000764 -0.000123 -0.000048 0.000022 0.000023 -1.655931e-05
nivel 6 0.000655 -0.000201 0.000022 0.000044 -0.000032 9.166966e-06
nivel 7 0.000550 -0.000261 0.000152 -0.000064 0.000019 -3.205845e-06

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

0.1.3 Calculo de desplazamientos combinados Desp

[14]: #Usaremos dataframe para mayor rapidez en calculos


#Dt=pd.DataFrame(np.transpose(D))
Dt=pd.DataFrame(D)
Dt2=Dt**2
Desp=np.zeros([N,1])
for i in range(N):
Desp[i,0]=(sum(Dt2.loc[:,i]))**0.5
Desp
desp_comb=pd.DataFrame(Desp, columns=["desp_comb"], index=niveles)
desp_comb

[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

0.1.4 Calculo de distorsiones combinadas dist_comb

[15]: #Calculo de distorsiones combinadas dist_comb


#Usaremos dataframe para mayor rapidez en calculos
deltat=pd.DataFrame(np.transpose(delta))
deltat2=deltat**2
dist_comb=np.zeros([N,1])
for i in range(N):
dist_comb[i,0]=(sum(deltat2.loc[:,i]))**0.5

dist_comb=pd.DataFrame(dist_comb, columns=["dist_comb"], index=niveles)


dist_comb

[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

[16]: #se calculara como dataframe


#der_inel=pd.DataFrame(delta, columns=nmodos, index=niveles)*0.75*datos["R"]
der_inel=pd.DataFrame(delta)*0.75*datos["R"]

der_inel=der_inel.set_axis(niveles, axis=0)
der_inel=der_inel.set_axis(nmodos, axis=1)
der_inel

[16]: modo 1 modo 2 modo 3 modo 4 modo 5 modo 6 \


nivel 1 0.002926 0.000334 0.000144 0.000076 0.000048 2.967155e-05
nivel 2 0.005204 0.000442 0.000094 -0.000018 -0.000064 -7.594603e-05
nivel 3 0.005346 0.000157 -0.000148 -0.000161 -0.000098 -3.733067e-07
nivel 4 0.005112 -0.000253 -0.000334 -0.000125 0.000055 9.447301e-05
nivel 5 0.004581 -0.000740 -0.000290 0.000131 0.000137 -9.935586e-05
nivel 6 0.003932 -0.001203 0.000130 0.000265 -0.000191 5.500180e-05
nivel 7 0.003302 -0.001569 0.000910 -0.000386 0.000113 -1.923507e-05

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

0.1.6 Calculo de distorsiones inelasticas combinadas dist_inel

[17]: #se calculara como dataframe

dist_inel=[]
for i in range(N):
dist_inel.append((sum(der_inel.iloc[i,:]**2))**0.5)

dist_inel_c=pd.DataFrame(dist_inel, columns=["dist_inel_comb"], index=niveles)


dist_inel_c

[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

[18]: #se calculara como dataframe


desp_inel=0.75*datos["R"]*pd.DataFrame(np.transpose(D))
desp_inel
desp_inel=desp_inel.set_axis(niveles, axis=0)
desp_inel=desp_inel.set_axis(nmodos, axis=1)
desp_inel

[18]: modo 1 modo 2 modo 3 modo 4 modo 5 modo 6 modo 7


nivel 1 1.609401 0.183673 0.079087 0.041783 0.026638 0.016319 0.004384
nivel 2 3.430773 0.338451 0.112073 0.035572 0.004360 -0.010262 -0.007544
nivel 3 5.034667 0.385633 0.067615 -0.012585 -0.025059 -0.010374 0.007068
nivel 4 6.568130 0.309765 -0.032717 -0.050066 -0.008560 0.017968 -0.003516
nivel 5 7.942580 0.087705 -0.119689 -0.010774 0.032554 -0.011839 0.001174
nivel 6 9.122229 -0.273246 -0.080792 0.068853 -0.024736 0.004662 -0.000281
nivel 7 10.112706 -0.743905 0.192308 -0.046941 0.009031 -0.001109 0.000045

0.1.8 Calculo de desplazamientos inelasticos combinadas desp_inel

[19]: #se calculara como dataframe


"""
desp_inel_c=[]
for i in range(N):
desp_inel_c.append((sum(desp_inel.loc[i,:]**2))**0.5)
desp_inel_c
"""
desp_inel2=desp_inel**2
desp_inel_c=[]
for i in range(N):
desp_inel_c.append(sum(desp_inel2.iloc[i,:])**0.5)

desp_inel_c=pd.DataFrame(desp_inel_c, columns=["desp_inel_comb"], index=niveles)


desp_inel_c

[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

[20]: modo 1 modo 2 modo 3 modo 4 modo 5 modo 6 \


nivel 1 42.316739 31.196441 30.150969 27.669940 26.737894 22.804450
nivel 2 82.691195 52.695610 39.166412 21.593967 4.012233 -13.144913
nivel 3 119.143652 58.950257 23.200092 -7.500903 -22.638929 -13.046817
nivel 4 168.969994 51.476896 -12.203634 -32.439316 -8.406256 24.566320
nivel 5 204.328730 14.574874 -44.644550 -6.980602 31.970825 -16.185908
nivel 6 197.922064 -38.296460 -25.416084 37.624847 -20.488339 5.375617
nivel 7 131.583249 -62.526211 36.280941 -15.383054 4.485869 -0.766604

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

0.1.10 Fuerzas sismicas combinadas


[21]: Fsis_comb=[]
#Fsis_df=pd.DataFrame(Fsis)
for i in range(N):
#Fsis_comb.append((sum(Fsis_df.loc[i,:]**2))**0.5)
Fsis_comb.append((sum(Fsis.iloc[i,:]**2))**0.5)
Fsis_comb

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

0.1.11 Calculo de cortante en cada modo


[22]: """
Vsis=np.zeros([N,N])
for i in range(N):
for j in range(N-1,-1,-1):
if j==N-1:
Vsis[j,i]=Fsis[j,i]

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

#Vsis_df=pd.DataFrame(Vsis) #Convierte los cortantes en Dataframe


#Vsis_df
#Vsis=pd.DataFrame(Vsis, columns=nmodos, index=niveles)
Vsis

[22]: modo 1 modo 2 modo 3 modo 4 modo 5 modo 6 \


nivel 1 946.955622 108.071405 46.534146 24.584880 15.673296 9.602145
nivel 2 904.638883 76.874965 16.383178 -3.085060 -11.064598 -13.202305
nivel 3 821.947688 24.179355 -22.783235 -24.679027 -15.076831 -0.057393
nivel 4 702.804036 -34.770902 -45.983327 -17.178125 7.562098 12.989424
nivel 5 533.834043 -86.247798 -33.779693 15.261191 15.968355 -11.576895
nivel 6 329.505312 -100.822671 10.864858 22.241793 -16.002470 4.609013
nivel 7 131.583249 -62.526211 36.280941 -15.383054 4.485869 -0.766604

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

0.1.12 Calculo de cortante sismicas combinadas


[23]: Vsis_c=[]

for i in range(N):
Vsis_c.append((sum(Vsis.iloc[i,:]**2))**0.5)

Vsis_c=pd.DataFrame(Vsis_c, columns=["Vsis_comb"], index=niveles)


Vsis_c

[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

0.1.13 Resultados finales


0.1.14 Modos de vibracion normalizados
[24]: niveles=[]
nmodos=[]
for i in range(N):
niveles.append("nivel " + str(i+1))
nmodos.append("modo " + str(i+1))

modos=pd.DataFrame(Pi, columns=nmodos, index=niveles)


modos

[24]: modo 1 modo 2 modo 3 modo 4 modo 5 modo 6 modo 7


nivel 1 0.100716 0.219785 0.323716 0.408717 0.494648 0.538995 0.387783
nivel 2 0.214696 0.404994 0.458730 0.347959 0.080972 -0.338925 -0.667188
nivel 3 0.315067 0.461452 0.276758 -0.123105 -0.465342 -0.342623 0.625154
nivel 4 0.411030 0.370669 -0.133916 -0.489741 -0.158947 0.593451 -0.310979
nivel 5 0.497043 0.104949 -0.489905 -0.105387 0.604509 -0.391005 0.103841
nivel 6 0.570864 -0.326969 -0.330694 0.673510 -0.459336 0.153974 -0.024855
nivel 7 0.632848 -0.890165 0.787148 -0.459169 0.167699 -0.036614 0.003993

15
[ ]:

0.2 Analisis fuerzas equivalentes


[ ]:

[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)

[25]: P Hacum αi Vbasal Fi Vi


nivel 1 965.356 550.0 0.064 1154.001 73.765 1154.001
nivel 2 884.926 900.0 0.096 1154.001 110.650 1080.236
nivel 3 868.840 1200.0 0.126 1154.001 144.852 969.586
nivel 4 944.512 1500.0 0.171 1154.001 196.834 824.734
nivel 5 944.512 1800.0 0.205 1154.001 236.201 627.900
nivel 6 796.586 2100.0 0.201 1154.001 232.410 391.699
nivel 7 477.719 2400.0 0.138 1154.001 159.289 159.289

[ ]:

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.plot(dist_inel,niveles, marker="o" , color="r", linestyle="--",␣


,→label="cortantes")

plt.title("Derivas inelasticas")
plt.savefig(figura_deriva_inel.format(), bbox_inches="tight")
plt.show

[26]: <function matplotlib.pyplot.show(close=None, block=None)>

[ ]:

0.2.2 GRAFICO DE CORTANTES DINAMICOS


[27]: Vsis_f=Vsis_c["Vsis_comb"].tolist()
Vsis_f
niveles
Vsis_fg=[]

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

[27]: <function matplotlib.pyplot.show(close=None, block=None)>

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

[28]: <function matplotlib.pyplot.show(close=None, block=None)>

[ ]:

20
0.2.4 EXPORTA A UN EXCEL
[29]: path_resultados=path[:-5]+"_resultados.xlsx"

with pd.ExcelWriter(path_resultados) as writer:


Krig.to_excel(writer, sheet_name="K rig")
Mmasa.to_excel(writer, sheet_name="M masa")
Val_W_T.to_excel(writer, sheet_name="W y T")

mod_vib.to_excel(writer, sheet_name="modos vibrac")


Dt.to_excel(writer, sheet_name="desplaz absol")
deltat.to_excel(writer, sheet_name="derivas absol")

(pd.concat((desp_comb, dist_comb), axis=1)).to_excel(writer,␣


,→sheet_name="desp dist comb")

der_inel.to_excel(writer, sheet_name="deriv inelast")


desp_inel.to_excel(writer, sheet_name="desp inelast")

Fsis.to_excel(writer, sheet_name="Fuerzas sism dinamicas")


Vsis.to_excel(writer, sheet_name="Costante sism dinamico")
(pd.concat((desp_inel_c, dist_inel_c), axis=1)).to_excel(writer,␣
,→sheet_name="desp dist inel")

(pd.concat((Fsis_c, Vsis_c), axis=1)).to_excel(writer, sheet_name="F V␣


,→dinamico")

res_feq.to_excel(writer, sheet_name="Fuerzas equivalentes")

[ ]:

[ ]:

21

También podría gustarte