Continuando con las interfaces gráficas se trae a continuación la interfaz gráfica del Factor Z, en la cual se reutiliza todo lo visto en las entradas anteriores.
from tkinter
import *
import tkinter as
tk
import numpy as np
from tkinter
import messagebox
Quinta_Ventana =
Tk()
Quinta_Ventana.geometry("310x200")
Quinta_Ventana.maxsize(310,200)
Quinta_Ventana.minsize(310,200)
Quinta_Ventana.title("Correlación
del Factor de compresibilidad")
Quinta_Ventana.configure(background="gray80",highlightbackground="gray80",highlightcolor="black")
#Ppr =
1.4970741012954498; Tpr = 1
#Ppr = 1.54; Tpr =
1.30
#Ppr = 1.54; Tpr =
1.27
#Ppr = 5.60; Tpr =
1.35
class Factor_Z():
def Brill():
try:
# Metodo de
Brill y Beggs
Tpr =
float(Entrada_1.get())
Ppr =
float(Entrada_2.get())
if Tpr <=
0 or Ppr <= 0:
messagebox.askretrycancel("Cuidado!","No
ha ingresado datos "+Entrada_1.get()+" - "+Entrada_2.get())
else:
F
= 0.3106 - (0.49*(Tpr)) + (0.1824*(Tpr)**2)
E
= 9*(Tpr-1)
D
= 10**F
C
= 0.132-0.32*np.log10(Tpr)
B
= (0.62-(0.23*Tpr))*Ppr + ((0.066/(Tpr-0.86))-0.037)*(Ppr**2) +
(0.32/(10**E))*(Ppr**6)
A
= (1.39*(Tpr-0.92)**0.5)-(0.36*Tpr)-0.10
z
= A + ((1-A)/np.exp(B)) + (C*(Ppr**D))
print("Brill","-----",round(z,4))
Salida_1.delete(0,tk.END)
Salida_1.insert(tk.END,"")
Salida_1.insert(tk.END,round(z,4))
except TypeError:
print("No
hay datos")
finally:
pass
return
def Papay():
try:
# Método de
Papay, J
Tpr =
float(Entrada_1.get())
Ppr =
float(Entrada_2.get())
if Tpr <=
0 or Ppr <= 0:
messagebox.askretrycancel("Cuidado!","No
ha ingresado datos "+Entrada_1.get()+" - "+Entrada_2.get())
else:
z
= 1- ((3.52*Ppr)/(10**(0.9813*Tpr)))+((0.274*(Ppr**2))/(10**(0.8157*Tpr)))
print("Paypay","----",round(z,4))
Salida_1.delete(0,tk.END)
Salida_1.insert(tk.END,"")
Salida_1.insert(tk.END,round(z,4))
except TypeError:
print("No
hay datos")
finally:
pass
return
def Hall():
try:
# Factor Z
metodo de Hall y Yarborough
Tpr =
float(Entrada_1.get())
Ppr =
float(Entrada_2.get())
if Tpr <=
0 or Ppr <= 0:
messagebox.askretrycancel("Cuidado!","No
ha ingresado datos "+Entrada_1.get()+" - "+Entrada_2.get())
else:
t
= 485.9/(194+460)# Tpc/T
def
DDF(Y,t):
A
= 0.06125*t*np.exp(-1.2*(1-t)**2)
B
= (14.76*t-9.76*t**2+4.58*t**3)
C
= (90.7*t-242.2*t**2+42.4*t**3)
D
= 2.18+2.82*t
Y
= -A*Ppr+((Y+(Y**2)+(Y**3)-(Y**4))/((1-Y)**3))-B*(Y**2)+C*(Y**D)
return
Y
Y
= 0.01
conteo
= 0
error
= 1
while
error > 0.0000001:
dy
= ((DDF(Y,t)+0.0001)-DDF(Y,t))/0.0001
yn
= Y-DDF(Y,t)/dy
conteo
= conteo + 1
error
= (yn-Y)/yn
Y
= yn
z
=(0.06125*Ppr*t*np.exp(-1.2*(1-t)**2))/Y
print("Hall","------",round(z,4))
Salida_1.delete(0,tk.END)
Salida_1.insert(tk.END,"")
Salida_1.insert(tk.END,round(z,4))
except TypeError:
print("No
hay datos")
finally:
pass
return
def Sarem():
try:
# Método de
Sarem
Tpr =
float(Entrada_1.get())
Ppr =
float(Entrada_2.get())
if Tpr <=
0 or Ppr <= 0:
messagebox.askretrycancel("Cuidado!","No
ha ingresado datos "+Entrada_1.get()+" - "+Entrada_2.get())
else:
x
= (2*Ppr-15)/14.8
y
= (2*Tpr-4)/1.9
P0X
=
np.array([[0.7071068],[1.224745*x],[0.7905695*(3*(x**2)-1)],[0.9354145*(5*(x**3)-3*x)],[0.265165*(35*(x**4)-30*(x**2)+3)],[0.293151*(63*(x**5)-70*(x**3)+15*x)]])
P0Y
= np.array([[0.7071068],[1.224745*y],[0.7905695*(3*(y**2)-1)],[0.9354145*(5*(y**3)-3*y)],[0.265165*(35*(y**4)-30*(y**2)+3)],[0.293151*(63*(y**5)-70*(y**3)+15*y)]])
MM
=
np.array([[2.1434,0.0832,-0.0215,-0.0009,0.0043,-0.0017],[0.3313,-0.1340,0.0669,-0.0272,0.0089,-0.0022],[0.1057,-0.0504,0.0051,0.0106,-0.0073,0.0027],[0.0522,0.0443,-0.0193,0.0059,0.0015,-0.0028],[0.0197,-0.0264,0.0193,-0.0115,0.0043,-0.0081],[0.0053,0.0089,-0.0109,0.0096,-0.0060,0.0031]])
z
= 0
for
i in np.arange(0,6):
for
j in np.arange(0,6):
z
= z+MM[i][j]*P0X[i]*P0Y[j]
print("Sarem","-----",round(float(z),4))
Salida_1.delete(0,tk.END)
Salida_1.insert(tk.END,"")
Salida_1.insert(tk.END,round(float(z),4))
except TypeError:
print("No
hay datos")
finally:
pass
return
def Dranchuk_1():
try:
#Método de
Dranchuk, P.M., Purvis, R.A. y Robinson, D.B.
Tpr =
float(Entrada_1.get())
Ppr =
float(Entrada_2.get())
if Tpr <=
0 or Ppr <= 0:
messagebox.askretrycancel("Cuidado!","No
ha ingresado datos "+Entrada_1.get()+" - "+Entrada_2.get())
else:
Z
= 0.6000
A1
= 0.31506237
A2
= -1.0467099
A3
= -0.57832729
A4
= 0.53530771
A5
= -0.61232032
A6
= -0.10488813
A7
= 0.68157001
A8
= 0.68446549
error
= 1
while
error > 0.000000001:
Pr
= 0.27*(Ppr/(Z*Tpr))
F
=
Z-(1+((A1+(A2/Tpr)+(A3/(Tpr**3)))*Pr)+((A4+(A5/Tpr))*(Pr**2))+((A5*A6*Pr**5)/Tpr)+A7*(1+A8*(Pr**2))*((Pr**2)/(Tpr**3))*(np.exp(-A8*Pr**2)))
G
=
1+((A1+(A2/Tpr)+(A3/(Tpr**3)))*(Pr/Z))+(2*(A4+(A5/Tpr))*((Pr**2)/Z))+((5*A5*A6*Pr**5)/(Tpr*Z))+((2*A7*(Pr**2))/(Z*(Tpr**3)))*(1+(A8*(Pr**2))-((A8*(Pr**2))**2))*(np.exp(-A8*(Pr**2)))
Z2
= Z-(F/G)
error
= (Z2-Z)/Z2
Z
= Z2
print("Dranchuk","-",round(Z,4))
Salida_1.delete(0,tk.END)
Salida_1.insert(tk.END,"")
Salida_1.insert(tk.END,round(Z,4))
except TypeError:
print("No
hay datos")
except
ZeroDivisionError:
print("No
división en cero")
finally:
pass
return
def Dranchuk_2():
try:
#Método de
Dranchuk, P.M. y Abou-Kassem, J.H.
Tpr =
float(Entrada_1.get())
Ppr =
float(Entrada_2.get())
if Tpr <=
0 or Ppr <= 0:
messagebox.askretrycancel("Cuidado!","No
ha ingresado datos "+Entrada_1.get()+" - "+Entrada_2.get())
else:
A1
= 0.3265
A2
= -1.07
A3
= -0.5339
A4
= 0.01569
A5
= -0.05165
A6
= 0.5475
A7
= -0.7361
A8
= 0.1844
A9
= 0.1056
A10
= 0.6134
A11
= 0.721
error
= 1
Z
= 0.6000
while
error > 0.00000001:
Pr
= (0.27*Ppr)/(Z*Tpr)
F
=
Z-(1+(A1+(A2/Tpr)+(A3/(Tpr**3))+(A4/(Tpr**4))+(A5/(Tpr**5)))*Pr+(A6+(A7/Tpr)+(A8/(Tpr**2)))*(Pr**2)-A9*((A7/Tpr)+(A8/(Tpr**2)))*(Pr**5)+A10*(1+A11*(Pr**2))*((Pr**2)/(Tpr**3))*np.exp(-A11*Pr**2))
G
= 1+(A1+(A2/Tpr)+(A3/(Tpr**3))+(A4/(Tpr**4))+(A5/(Tpr**5)))*(Pr/Z)+2*(A6+(A7/Tpr)+(A8/(Tpr**2)))*((Pr**2)/Z)-5*A9*((A7/Tpr)+(A8/(Tpr**2)))*((Pr**5)/Z)+((2*A10*(Pr**2))/(Z*(Tpr**3)))*(1+(A11*(Pr**2))-((A11**2)*(Pr**2)**2))*np.exp(-A11*Pr**2)
Z2
= Z-(F/G)
error
= (Z2-Z)/Z2
Z
= Z2
print("Dranchuk","-",round(Z,4))
Salida_1.delete(0,tk.END)
Salida_1.insert(tk.END,"")
Salida_1.insert(tk.END,round(Z,4))
except TypeError:
print("No
hay datos")
except
ZeroDivisionError:
print("No
división en cero")
finally:
pass
return
Boton_Brill =
Button(Quinta_Ventana,activebackground="red",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Brill
y Beggs''', command = Factor_Z.Brill).place(relx = 0.01, rely = 0.02,
height=30, width=210)
Boton_Papay =
Button(Quinta_Ventana,activebackground="blue",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Papay,
J''', command = Factor_Z.Papay).place(relx = 0.01, rely = 0.18, height=30,
width=210)
Boton_Hall =
Button(Quinta_Ventana,activebackground="purple",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Hall
y Yarborough''', command = Factor_Z.Hall).place(relx = 0.01, rely = 0.34,
height=30, width=210)
Boton_Sarem =
Button(Quinta_Ventana,activebackground="brown",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Sarem''',
command = Factor_Z.Sarem).place(relx = 0.01, rely = 0.50, height=30, width=210)
Boton_Dranchuk_1 =
Button(Quinta_Ventana,activebackground="pink",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Dranchuk,
P.M., Purvis, R.A.''', command = Factor_Z.Dranchuk_1).place(relx = 0.01, rely =
0.66, height=30, width=210)
Boton_Dranchuk_2 =
Button(Quinta_Ventana,activebackground="yellow",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Dranchuk,
P.M. y Abou-Kassem, J.H.''', command = Factor_Z.Dranchuk_2).place(relx = 0.01,
rely = 0.82, height=30, width=210)
Recuadro_Entradas
= tk.LabelFrame(Quinta_Ventana)
Recuadro_Entradas.place(relx=0.704,
rely=0.01, relheight=0.970, relwidth=0.280)
Recuadro_Entradas.configure(relief='groove',foreground="black",text='''Entradas''',background="gray80",highlightbackground="gray80",highlightcolor="black",width=330)
Entrada_1 =
tk.Entry(Recuadro_Entradas)
Entrada_1.place(relx=0.01,
rely=0.15, height=20, width=80)
Entrada_1.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_2 =
tk.Entry(Recuadro_Entradas)
Entrada_2.place(relx=0.01,
rely=0.43, height=20, width=80)
Entrada_2.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Salida_1 =
tk.Entry(Recuadro_Entradas)
Salida_1.place(relx=0.01,
rely=0.71, height=20, width=80)
Salida_1.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_1.delete(0,tk.END)
Entrada_1.insert(tk.END,"")
Entrada_1.insert(tk.END,0.00)
Entrada_2.delete(0,tk.END)
Entrada_2.insert(tk.END,"")
Entrada_2.insert(tk.END,0.00)
Salida_1.delete(0,tk.END)
Salida_1.insert(tk.END,"")
Salida_1.insert(tk.END,0.00)
Mensaje_1 =
tk.Message(Recuadro_Entradas)
Mensaje_1.place(relx=0.01,
rely=0.00, height=25, width=80)
Mensaje_1.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Tpr:''')
Mensaje_2 =
tk.Message(Recuadro_Entradas)
Mensaje_2.place(relx=0.01,
rely=0.28, height=25, width=80)
Mensaje_2.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Ppr:''')
Mensaje_3 =
tk.Label(Recuadro_Entradas)
Mensaje_3.place(relx=0.01,
rely=0.56, height=25, width=80)
Mensaje_3.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Resultado:''')
def Limpiando():
Entrada_1.delete(0,tk.END)
Entrada_1.insert(tk.END,"")
Entrada_1.insert(tk.END,0.00)
Entrada_2.delete(0,tk.END)
Entrada_2.insert(tk.END,"")
Entrada_2.insert(tk.END,0.00)
Salida_1.delete(0,tk.END)
Salida_1.insert(tk.END,"")
Salida_1.insert(tk.END,0.00)
return
Limpieza =
Button(Recuadro_Entradas,activebackground="cyan",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Limpieza''',
command = Limpiando).place(relx = 0.01, rely = 0.85, height=25, width=80)
Quinta_Ventana.mainloop()
El código genera lo siguiente:

No hay comentarios.:
Publicar un comentario