Você está na página 1de 10

# Universidad Nacional de Huancavelica

# Facultad de Ciencias de Ingeniería


# Escuela Profesional de Ingeniería Civil
# Asignatura: Análisis Estructural I
# Docente: Ing. Omar Caballero Sanchez
# Estudiante: Angel Sullcaray Ichpas
# Porpuse: Líneas de Influencia en Vigas Hiperestáticas
# Date: 31/08/2020

import matplotlib.pyplot as plt


import numpy as np
from scipy.interpolate import make_interp_spline, BSpline

# Ingreso de datos
# -------------------------------------
P = 1 # Carga Unitaria
L1 = 7 # Longitud del primer tramo
L2 = 8 # Longitud del segundo tramo
L3 = 11 # Longitud del tercer tramo

K=[] # Regideces
C=[] # Coeficientes de distribución
L=[L1,L2,L3] # Vector de longitudes

# Selección del tipo de viga a analizar


# -----------------------------------------------------------------
# TIPO 1 : Con 4 apoyos simples
# TIPO 2 : Empotrada a la izquierda con tres apoyos
# TIPO 3 : Empotrada a la derecha con tres apoyos
# TIPO 4 : Empotrada en sus dos extremos con dos apoyos intermedios
# -----------------------------------------------------------------
TIPO = 4 # <----- Ingrese aquí
N = 10 # Presición (número de iteraciones)

# Cálculo de los factores de distribución


# ---------------------------------------
for i in range (len(L)):
K.append(1/L[i])
if (TIPO==1):
CAB = 1
CDC = 1
elif (TIPO==2):
CAB = 0
CDC = 1
elif (TIPO==3):
CAB = 1
CDC = 0
else:
CAB = 0
CDC = 0
CBA = K[0]/(K[0]+K[1])
CBC = K[1]/(K[0]+K[1])
CCB = K[1]/(K[1]+K[2])
CCD = K[2]/(K[1]+K[2])

# --------------------- PRIMER CROOS --------------------


# Momento unitario
MAB = 1.00
MBA = 0
MBC = 0
MCB = 0
MCD = 0
MDC = 0

M1 = -(MAB)*CAB
M2 = -(MBA+MBC)*CBA
M3 = -(MBA+MBC)*CBC
M4 = -(MCB+MCD)*CCB
M5 = -(MCB+MCD)*CCD
M6 = -(MDC)*CDC

# Momentos iniciales

MAB1 = MAB + M1
MBA1 = MBA + M2
MBC1 = MBC + M3
MCB1 = MCB + M4
MCD1 = MCD + M5
MDC1 = MDC + M6

for i in range(N):
MD0 = .5*M1
MD1 = .5*M2
MD2 = .5*M3
MD3 = .5*M5
MD4 = .5*M4
MD5 = .5*M6

M1 = -MD1*CAB
M2 = -(MD4+MD0)*CBA
M3 = -(MD4+MD0)*CBC
M4 = -(MD2+MD5)*CCB
M5 = -(MD2+MD5)*CCD
M6 = -MD3*CDC
# Momentos Calculados
MAB1 = MAB1 + M1 + MD1
MBA1 = MBA1 + M2 + MD0
MBC1 = MBC1 + M3 + MD4
MCB1 = MCB1 + M4 + MD2
MCD1 = MCD1 + M5 + MD5
MDC1 = MDC1 + M6 + MD3

PC = [MAB1,MBA1,MBC1,MCB1,MCD1,MDC1]

# -------------------- SEGUNDO CROOS ----------------------


# Momento unitario
MAB = 0
MBA = 1.00
MBC = 0
MCB = 0
MCD = 0
MDC = 0

M1 = -(MAB)*CAB
M2 = -(MBA+MBC)*CBA
M3 = -(MBA+MBC)*CBC
M4 = -(MCB+MCD)*CCB
M5 = -(MCB+MCD)*CCD
M6 = -(MDC)*CDC

# Momentos iniciales

MAB1 = MAB + M1
MBA1 = MBA + M2
MBC1 = MBC + M3
MCB1 = MCB + M4
MCD1 = MCD + M5
MDC1 = MDC + M6

for i in range(N):
MD0 = .5*M1
MD1 = .5*M2
MD2 = .5*M3
MD3 = .5*M5
MD4 = .5*M4
MD5 = .5*M6

M1 = -MD1*CAB
M2 = -(MD4+MD0)*CBA
M3 = -(MD4+MD0)*CBC
M4 = -(MD2+MD5)*CCB
M5 = -(MD2+MD5)*CCD
M6 = -MD3*CDC
# Momentos Calculados
MAB1 = MAB1 + M1 + MD1
MBA1 = MBA1 + M2 + MD0
MBC1 = MBC1 + M3 + MD4
MCB1 = MCB1 + M4 + MD2
MCD1 = MCD1 + M5 + MD5
MDC1 = MDC1 + M6 + MD3

SC = [MAB1,MBA1,MBC1,MCB1,MCD1,MDC1]

# --------------------- TERCER CROOS ---------------------


# Momento unitario
MAB = 0
MBA = 0
MBC = 1.00
MCB = 0
MCD = 0
MDC = 0

M1 = -(MAB)*CAB
M2 = -(MBA+MBC)*CBA
M3 = -(MBA+MBC)*CBC
M4 = -(MCB+MCD)*CCB
M5 = -(MCB+MCD)*CCD
M6 = -(MDC)*CDC

# Momentos iniciales

MAB1 = MAB + M1
MBA1 = MBA + M2
MBC1 = MBC + M3
MCB1 = MCB + M4
MCD1 = MCD + M5
MDC1 = MDC + M6

for i in range(N):
MD0 = .5*M1
MD1 = .5*M2
MD2 = .5*M3
MD3 = .5*M5
MD4 = .5*M4
MD5 = .5*M6

M1 = -MD1*CAB
M2 = -(MD4+MD0)*CBA
M3 = -(MD4+MD0)*CBC
M4 = -(MD2+MD5)*CCB
M5 = -(MD2+MD5)*CCD
M6 = -MD3*CDC
# Momentos Calculados
MAB1 = MAB1 + M1 + MD1
MBA1 = MBA1 + M2 + MD0
MBC1 = MBC1 + M3 + MD4
MCB1 = MCB1 + M4 + MD2
MCD1 = MCD1 + M5 + MD5
MDC1 = MDC1 + M6 + MD3

TC = [MAB1,MBA1,MBC1,MCB1,MCD1,MDC1]

# ----------------------- CUARTO CROOS -------------------


# Momento unitario
MAB = 0
MBA = 0
MBC = 0
MCB = 1.00
MCD = 0
MDC = 0

M1 = -(MAB)*CAB
M2 = -(MBA+MBC)*CBA
M3 = -(MBA+MBC)*CBC
M4 = -(MCB+MCD)*CCB
M5 = -(MCB+MCD)*CCD
M6 = -(MDC)*CDC

# Momentos iniciales

MAB1 = MAB + M1
MBA1 = MBA + M2
MBC1 = MBC + M3
MCB1 = MCB + M4
MCD1 = MCD + M5
MDC1 = MDC + M6

for i in range(N):
MD0 = .5*M1
MD1 = .5*M2
MD2 = .5*M3
MD3 = .5*M5
MD4 = .5*M4
MD5 = .5*M6
M1 = -MD1*CAB
M2 = -(MD4+MD0)*CBA
M3 = -(MD4+MD0)*CBC
M4 = -(MD2+MD5)*CCB
M5 = -(MD2+MD5)*CCD
M6 = -MD3*CDC
# Momentos Calculados
MAB1 = MAB1 + M1 + MD1
MBA1 = MBA1 + M2 + MD0
MBC1 = MBC1 + M3 + MD4
MCB1 = MCB1 + M4 + MD2
MCD1 = MCD1 + M5 + MD5
MDC1 = MDC1 + M6 + MD3

CC = [MAB1,MBA1,MBC1,MCB1,MCD1,MDC1]

# ---------------------- QUINTO CROOS --------------------


# Momento unitario
MAB = 0
MBA = 0
MBC = 0
MCB = 0
MCD = 1.00
MDC = 0

M1 = -(MAB)*CAB
M2 = -(MBA+MBC)*CBA
M3 = -(MBA+MBC)*CBC
M4 = -(MCB+MCD)*CCB
M5 = -(MCB+MCD)*CCD
M6 = -(MDC)*CDC

# Momentos iniciales

MAB1 = MAB + M1
MBA1 = MBA + M2
MBC1 = MBC + M3
MCB1 = MCB + M4
MCD1 = MCD + M5
MDC1 = MDC + M6

for i in range(N):
MD0 = .5*M1
MD1 = .5*M2
MD2 = .5*M3
MD3 = .5*M5
MD4 = .5*M4
MD5 = .5*M6

M1 = -MD1*CAB
M2 = -(MD4+MD0)*CBA
M3 = -(MD4+MD0)*CBC
M4 = -(MD2+MD5)*CCB
M5 = -(MD2+MD5)*CCD
M6 = -MD3*CDC
# Momentos Calculados
MAB1 = MAB1 + M1 + MD1
MBA1 = MBA1 + M2 + MD0
MBC1 = MBC1 + M3 + MD4
MCB1 = MCB1 + M4 + MD2
MCD1 = MCD1 + M5 + MD5
MDC1 = MDC1 + M6 + MD3

QC = [MAB1,MBA1,MBC1,MCB1,MCD1,MDC1]

# --------------------- SEXTO CROOS ----------------------


# Momento unitario
MAB = 0
MBA = 0
MBC = 0
MCB = 0
MCD = 0
MDC = 1.00

M1 = -(MAB)*CAB
M2 = -(MBA+MBC)*CBA
M3 = -(MBA+MBC)*CBC
M4 = -(MCB+MCD)*CCB
M5 = -(MCB+MCD)*CCD
M6 = -(MDC)*CDC

# Momentos iniciales

MAB1 = MAB + M1
MBA1 = MBA + M2
MBC1 = MBC + M3
MCB1 = MCB + M4
MCD1 = MCD + M5
MDC1 = MDC + M6

for i in range(N):
MD0 = .5*M1
MD1 = .5*M2
MD2 = .5*M3
MD3 = .5*M5
MD4 = .5*M4
MD5 = .5*M6

M1 = -MD1*CAB
M2 = -(MD4+MD0)*CBA
M3 = -(MD4+MD0)*CBC
M4 = -(MD2+MD5)*CCB
M5 = -(MD2+MD5)*CCD
M6 = -MD3*CDC
# Momentos Calculados
MAB1 = MAB1 + M1 + MD1
MBA1 = MBA1 + M2 + MD0
MBC1 = MBC1 + M3 + MD4
MCB1 = MCB1 + M4 + MD2
MCD1 = MCD1 + M5 + MD5
MDC1 = MDC1 + M6 + MD3

SSC = [MAB1,MBA1,MBC1,MCB1,MCD1,MDC1]

# Cálculo de los Momentos de Empotramiento Perfecto


# -------------------------------------------------
m=L1+L2+L3+1
MEAB = list(range(m))
MEBA = list(range(m))
MEBC = list(range(m))
MECB = list(range(m))
MECD = list(range(m))
MEDC = list(range(m))

# Tramo AB
for j in range(len(MEAB)):
if (j>=L1+1):
MEAB[j] = 0
MEBA[j] = 0
else:
MEAB[j] = -(P * (L1 - j) ** 2 * (j)) / L1 ** 2
MEBA[j] = (P * (L1 - j) * (j)**2) / L1 ** 2

# Tramo BC
i=0
for j in range(len(MEBC)):
if (j >= L1+1 and j <= L1+L2 ):
i=i+1
MEBC[j] = -(P * (L2 - i) ** 2 * (i)) / L2 ** 2
MECB[j] = (P * (L2 - i) * (i) ** 2) / L2 ** 2
else:
MEBC[j] = 0
MECB[j] = 0

# Tramo CD
i=0
for j in range(len(MEBC)):
if (j >= L1+L2+1 ):
i=i+1
MECD[j] = -(P * (L3 - i) ** 2 * (i)) / L3 ** 2
MEDC[j] = (P * (L3 - i) * (i) ** 2) / L3 ** 2
else:
MECD[j] = 0
MEDC[j] = 0
# -------------------------------------------------------------
# Coeficientes de los momentos
CMAB = [PC[0],SC[0],TC[0],CC[0],QC[0],SSC[0]]
CMBA = [PC[1],SC[1],TC[1],CC[1],QC[1],SSC[1]]
CMBC = [PC[2],SC[2],TC[2],CC[2],QC[2],SSC[2]]
CMCB = [PC[3],SC[3],TC[3],CC[3],QC[3],SSC[3]]
CMCD = [PC[4],SC[4],TC[4],CC[4],QC[4],SSC[4]]
CMDC = [PC[5],SC[5],TC[5],CC[5],QC[5],SSC[5]]

# Momentos
MAB = list(range(len(MEAB)))
MBA = list(range(len(MEBA)))
MBC = list(range(len(MEBC)))
MCB = list(range(len(MECB)))
MCD = list(range(len(MECD)))
MDC = list(range(len(MEDC)))

# Momentos
for j in range(len(MAB)):
MAB[j] = CMAB[0]*MEAB[j]+CMAB[1]*MEBA[j]+CMAB[2]*MEBC[j]+CMAB[3]*MECB[j]
+CMAB[4]*MECD[j]+CMAB[5]*MEDC[j]
MBA[j] = CMBA[0]*MEAB[j]+CMBA[1]*MEBA[j]+CMBA[2]*MEBC[j]+CMBA[3]*MECB[j]
+CMBA[4]*MECD[j]+CMBA[5]*MEDC[j]
MBC[j] = CMBC[0]*MEAB[j]+CMBC[1]*MEBA[j]+CMBC[2]*MEBC[j]+CMBC[3]*MECB[j]
+CMBC[4]*MECD[j]+CMBC[5]*MEDC[j]
MCB[j] = CMCB[0]*MEAB[j]+CMCB[1]*MEBA[j]+CMCB[2]*MEBC[j]+CMCB[3]*MECB[j]
+CMCB[4]*MECD[j]+CMCB[5]*MEDC[j]
MCD[j] = CMCD[0]*MEAB[j]+CMCD[1]*MEBA[j]+CMCD[2]*MEBC[j]+CMCD[3]*MECB[j]
+CMCD[4]*MECD[j]+CMCD[5]*MEDC[j]
MDC[j] = CMDC[0]*MEAB[j]+CMDC[1]*MEBA[j]+CMDC[2]*MEBC[j]+CMDC[3]*MECB[j]
+CMDC[4]*MECD[j]+CMDC[5]*MEDC[j]

# Cálculo de las cortantes


# ------------------------------------------------------
# Cortantes
VAB = list(range(len(MEAB)))
VBA = list(range(len(MEBA)))
VBC = list(range(len(MEBC)))
VCB = list(range(len(MECB)))
VCD = list(range(len(MECD)))
VDC = list(range(len(MEDC)))

# Tramo AB
for j in range(len(VAB)):
if (j<=L1):
if(j==L1):
VAB[j]=0
VAB[j] = (P*(L1-j)-MAB[j]-MBA[j])/L1
VBA[j] = 1- VAB[j]
else:
VAB[j] = (-MAB[j]-MBA[j])/L1
VBA[j] =-VAB[j]

# Tramo BC
i=0
for j in range(len(VBC)):
if (j<=L1):
if(j==L1):
VBC[j]=0
VBC[j] = (-MBC[j]-MCB[j])/L2
VCB[j] = -VBC[j]
elif(j >= L1+1 and j <= L1+L2 ):
i = i + 1
VBC[j] = (P * (L2 - i) - MBC[j] - MCB[j]) / L2
VCB[j] = 1 - VBC[j]
else:
VBC[j] = (-MBC[j]-MCB[j])/L2
VCB[j] =-VBC[j]

# Tramo CD
i=0
for j in range(len(VCD)):
if (j<=L1+L2):
VCD[j] = (-MCD[j]-MDC[j])/L3
VDC[j] = - VCD[j]
else:
i=i+1
VCD[j] = (P*(L3-i)-MCD[j]-MDC[j])/L3
VDC[j] = 1 - VCD[j]

# Cortantes Finales
VA = list(range(len(VAB)))
VB = list(range(len(VBC)))
VC = list(range(len(VCB)))
VD = list(range(len(VDC)))

y=[]
for i in range(len(VDC)):
VA[i] = VAB[i]
VB[i] = VBA[i] + VBC[i]
VC[i] = VCB[i] + VCD[i]
VD[i] = VDC[i]
y.append(i)
# Imprimiendo los resultados
# Momentos
print()
print("TRAMO".center(10),"|",
"MAB".center(10),"|",
"MBA".center(10),"|",
"MBC".center(10),"|",
"MCB".center(10),"|",
"MCD".center(10),"|",
"MDC".center(10),"|")
for I in range(len(VA)):
print(str(I).center(10),"|",
str(round(MAB[I],5)).center(10),"|",
str(round(MBA[I],5)).center(10),"|",
str(round(MBC[I],5)).center(10),"|",
str(round(MCB[I],5)).center(10),"|",
str(round(MCD[I],5)).center(10),"|",
str(round(MDC[I],5)).center(10),"|")
print()
# Cortantes
print("TRAMO".center(8),"|",
"VAB".center(8),"|",
"V'B'".center(8),"|",
"V''B".center(8),"|",
"V'C".center(8),"|",
"V''C".center(8),"|",
"VD".center(8),"|",
"VB".center(8),"|",
"VC".center(8),"|")
for I in range(len(VA)):
print(str(I).center(8),"|",
str(round(VAB[I],5)).center(8),"|",
str(round(VBA[I],5)).center(8),"|",
str(round(VBC[I],5)).center(8),"|",
str(round(VCB[I],5)).center(8),"|",
str(round(VCD[I],5)).center(8),"|",
str(round(VDC[I],5)).center(8),"|",
str(round(VB[I],5)).center(8),"|",
str(round(VC[I],5)).center(8),"|")

# Gráfica de las lineas de influencia


plt.subplot(1, 3, 1)
plt.title(u"$Línea\ de\ Influencia\ del\ MAB$",color='b', fontsize=12)
plt.grid()
plt.xlabel(u"$Distancia\ (m)$",color='b', fontsize=7)
plt.ylabel(u"$Momento\ (Tn.m)$",color='b', fontsize=7)
x = np.array(y)
LINEA = np.array(MAB) # <---- Cambiar valores aquí
xnew = np.linspace(x.min(),x.max(),300)
spl = make_interp_spline(x, LINEA, k=3)
LINEA_smooth = spl(xnew)
plt.plot(xnew,LINEA_smooth,color='c')
#---------------------------------------------------------------------
plt.subplot(1, 3, 2)
plt.title(u"$Línea\ de\ Influencia\ del\ MBC$",color='b', fontsize=12)
plt.grid()
plt.xlabel(u"$Distancia\ (m)$",color='b', fontsize=7)
plt.ylabel(u"$Momento\ (Tn.m)$",color='b', fontsize=7)
x = np.array(y)
LINEA = np.array(MBC) # <---- Cambiar valores aquí
xnew = np.linspace(x.min(),x.max(),300)
spl = make_interp_spline(x, LINEA, k=3)
LINEA_smooth = spl(xnew)
plt.plot(xnew,LINEA_smooth,color='g')
#--------------------------------------------------------------------
plt.subplot(1, 3, 3)
plt.title(u"$Línea\ de\ Influencia\ del\ MCD$",color='b', fontsize=12)
plt.grid()
plt.xlabel(u"$Distancia\ (m)$",color='b', fontsize=7)
plt.ylabel(u"$Momento\ (Tn.m)$",color='b', fontsize=7)
x = np.array(y)
LINEA = np.array(MCD) # <---- Cambiar valores aquí
xnew = np.linspace(x.min(),x.max(),300)
spl = make_interp_spline(x, LINEA, k=3)
LINEA_smooth = spl(xnew)
plt.plot(xnew,LINEA_smooth,color='r')

plt.show()

Você também pode gostar