Ahora
se realiza la interfaz gráfica de la viscosidad del petróleo, cabe recalcar que
en el código se calculan diferentes tipos de viscosidad como lo son la
viscosidad del petróleo muerto, viscosidad del petróleo saturado y bajosaturado,
a continuación se muestra el código completo:
import math as math
from tkinter import *
import tkinter as tk
from tkinter import ttk
import numpy as np
from tkinter import messagebox
Ventana = Tk()
Ventana.geometry("450x200")
Ventana.maxsize(450,200)
Ventana.minsize(450,200)
Ventana.title("Viscosidad del Petróleo")
Ventana.configure(background="gray80",highlightbackground="gray80",highlightcolor="black")
Valores_1 = ["Beal, C.","Beggs, H.D.
y Robinson, J.R","Glaso, O.","Egbogad,
E.O.","Kartoatmodjo, T. y Schimidt, Z.","Chew, J.N. y
Connally, C.A., Jr.","Vázquez, M.E. y Beggs, H.D."]
Variable_1 = tk.StringVar()
Visor_correlaciones_1 = ttk.Combobox(Ventana)
Visor_correlaciones_1.place(relx=0.01, rely=0.02,
relheight=0.11, relwidth=0.480, bordermode='ignore')
Visor_correlaciones_1.configure(takefocus="",state="readonly",textvariable
= Variable_1, justify = "center",values = Valores_1)
Visor_correlaciones_1.current(0)
def Correlaciones_Viscosidad_petoleo(event):
try:
#
P = 4000
#
Pb = 2500
#
T = 180
#
API = 31
#
Yg = 0.95
#
Ppr = 1.54; Tpr = 1.30
P = float(Entrada_1.get()) # psi
Pb = float(Entrada_2.get()) # psi
T = float(Entrada_3.get()) # °F
API
= float(Entrada_4.get()) # °API
Yg = float(Entrada_5.get())
Tpr
= float(Entrada_6.get())
Ppr
= float(Entrada_7.get())
if
P <= 0:
messagebox.showwarning("Advertencia!","La
Presión es incorrecta")
elif
Pb <= 0:
messagebox.showwarning("Advertencia!","La
Presión de burbuja es incorrecta")
elif
T <= 0:
messagebox.showwarning("Advertencia!","La
Temperatura del separador es incorrecta")
elif
API <= 0:
messagebox.showwarning("Advertencia!","La
Gravedad API es incorrecta")
elif
Yg <= 0:
messagebox.showwarning("Advertencia!","La
Densidad del gas es incorrecta")
elif
Tpr <= 0:
messagebox.showwarning("Advertencia!","La
Temperatura pseudoreducida es incorrecta")
elif
Ppr <= 0:
messagebox.showwarning("Advertencia!","La
Presión pseudoreducida es incorrecta")
else:
#
Correlación Standing, M.B. condiciones de burbuja
Rs =
Yg*(((Pb/18.2)+1.4)*10**(0.0125*API-0.000917*T))**1.2048
if
str(Variable_1.get()) == Valores_1[0]:
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,"");Salida_2.insert(tk.END,0.00)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,"");Salida_3.insert(tk.END,0.00)
#
Correlación de Beal, C.
a
= 10**(0.43+(8.33/API))
Mod1
= (0.32+((1.8*10**7)/(API**4.53)))*(360/(T+200))**a
#
Correlación de Beal, C.
A
= 10**(Rs*((2.2*10**-7)*Rs-7.4*(10**-4)))
b
=
(0.68/10**(8.62*10**(-5)*Rs))+(0.25/10**(1.1*10**(-3)*Rs))+(0.062/10**(3.74*10**(-3)*Rs))
Mob1
= A*Mod1**b
Mo1
= (0.024*Mob1**1.6+0.038*Mob1**0.56)*(0.001)*(P-Pb)+Mob1
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Mod1)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,Mo1)
elif
str(Variable_1.get()) == Valores_1[1]:
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,"");Salida_2.insert(tk.END,0.00)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,"");Salida_3.insert(tk.END,0.00)
#
Correlación de Beggs, H.D. y Robinson, J.R
z
= 3.0324-0.02023*API
y
= 10**z
x
= y*T**(-1.163)
Mod2
= 10**x-1
#
Correlación de Beggs, H.D y Robinson, J.R.
a
= 10.175*(Rs+100)**(-0.515)
b
= 5.44*(Rs+150)**(-0.338)
Mob2
= a*Mod2**b
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Mod2)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,Mob2)
elif
str(Variable_1.get()) == Valores_1[2]:
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,"");Salida_2.insert(tk.END,0.00)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,"");Salida_3.insert(tk.END,0.00)
#
Correlación de Glaso, O.
Mod3 = (3.141*10**10)*(T**-3.444)*(np.log10(API))**(10.313*np.log10(T)-36.447)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Mod3)
elif
str(Variable_1.get()) == Valores_1[3]:
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,"");Salida_2.insert(tk.END,0.00)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,"");Salida_3.insert(tk.END,0.00)
#
Correlación de Egbogad, E.O.
Mod
= 1.8653-0.025086*API-0.5644*np.log10(T)
Mod4
= 10**(10**Mod)-1
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Mod4)
elif
str(Variable_1.get()) == Valores_1[4]:
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,"");Salida_2.insert(tk.END,0.00)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,"");Salida_3.insert(tk.END,0.00)
#
Correlación de Kartoatmodjo, T. y Schimidt, Z.
Mod5
= (16.0*10**8)*(T**-2.8177)*np.log10(API)**(5.7526*np.log10(T)-26.9718)
#
Correlación de Kartoatmodjo, T. y Schmidt, Z.
b
= 10**(-0.00081*Rs)
A
= (0.2001+(0.8428*10**(-0.000845*Rs)))*(Mod5**(0.43+0.5165*b))
Mob3
= -0.06821+0.9824*A+40.34*(10**-5)*(A**2)
#
Correlación de Kartoatmodjo, T. y Schmidt, Z.
Mo3 =
1.00081*Mob3+1.127*(10**-3)*(P-Pb)*(-65.17*(10**-4)*(Mob3**1.8148)+0.038*(Mob3**1.59))
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Mod5)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,Mob3)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,Mo3)
elif
str(Variable_1.get()) == Valores_1[5]:
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,"");Salida_2.insert(tk.END,0.00)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,"");Salida_3.insert(tk.END,0.00)
#
Correlación de Beal, C.
a
= 10**(0.43+(8.33/API))
Mod1
= (0.32+((1.8*10**7)/(API**4.53)))*(360/(T+200))**a
#
Correlación de Chew, J.N. y Connally, C.A., Jr.
A
= 10**(Rs*((2.2*10**-7)*Rs-7.4*(10**-4)))
b
=
(0.68/10**(8.62*10**(-5)*Rs))+(0.25/10**(1.1*10**(-3)*Rs))+(0.062/10**(3.74*10**(-3)*Rs))
Mob1
= A*Mod1**b
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,Mob1)
elif
str(Variable_1.get()) == Valores_1[6]:
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,"");Salida_2.insert(tk.END,0.00)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,"");Salida_3.insert(tk.END,0.00)
#
Correlación de Beal, C.
a
= 10**(0.43+(8.33/API))
Mod1
= (0.32+((1.8*10**7)/(API**4.53)))*(360/(T+200))**a
#
Correlación de Chew, J.N. y Connally, C.A., Jr.
A
= 10**(Rs*((2.2*10**-7)*Rs-7.4*(10**-4)))
b
=
(0.68/10**(8.62*10**(-5)*Rs))+(0.25/10**(1.1*10**(-3)*Rs))+(0.062/10**(3.74*10**(-3)*Rs))
Mob1
= A*Mod1**b
#
Correlación de Vázquez, M.E. y Beggs, H.D.
m
= 2.6*P**1.187*np.exp(-11.513-8.98*10**(-5)*P)
Mo2
= Mob1*(P/Pb )**m
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,Mo2)
else:
messagebox.showwarning("Advertencia!","La
opción no existe")
except
ZeroDivisionError:
messagebox.showwarning("Advertencia!","Los
datos ingresados son incorrectos, por favor revisalos")
except
SyntaxError:
messagebox.showwarning("Advertencia!","Los
datos ingresados son incorrectos, por favor revisalos")
except
ValueError:
messagebox.showwarning("Advertencia!","Los
datos ingresados son incorrectos, por favor revisalos")
finally:
pass
return
Visor_correlaciones_1.bind('<<ComboboxSelected>>',
Correlaciones_Viscosidad_petoleo)
Recuadro_Entradas = tk.LabelFrame(Ventana)
Recuadro_Entradas.place(relx=0.01, rely=0.13,
relheight=0.850, relwidth=0.980)
Recuadro_Entradas.configure(relief='groove',foreground="black",text='''Entradas''',background="gray80",highlightbackground="gray80",highlightcolor="black",width=330)
Mensaje_1 = tk.Message(Recuadro_Entradas)
Mensaje_1.place(relx=0.02, rely=0.01, height=25,
width=80)
Mensaje_1.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''P''')
Mensaje_2 = tk.Message(Recuadro_Entradas)
Mensaje_2.place(relx=0.21, rely=0.01, height=25,
width=80)
Mensaje_2.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Pb''')
Mensaje_3 = tk.Message(Recuadro_Entradas)
Mensaje_3.place(relx=0.40, rely=0.00, height=25,
width=80)
Mensaje_3.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''T''')
Mensaje_4 = tk.Message(Recuadro_Entradas)
Mensaje_4.place(relx=0.60, rely=0.00, height=25,
width=80)
Mensaje_4.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''°API''')
Mensaje_5 = tk.Message(Recuadro_Entradas)
Mensaje_5.place(relx=0.80, rely=0.00, height=25,
width=80)
Mensaje_5.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Yg''')
Mensaje_6 = tk.Message(Recuadro_Entradas)
Mensaje_6.place(relx=0.02, rely=0.30, height=25,
width=80)
Mensaje_6.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Tpr''')
Mensaje_7 = tk.Message(Recuadro_Entradas)
Mensaje_7.place(relx=0.21, rely=0.30, height=25,
width=80)
Mensaje_7.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Ppr''')
Mensaje_9 = tk.Label(Recuadro_Entradas)
Mensaje_9.place(relx=0.00, rely=0.62, height=25,
width=60)
Mensaje_9.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Resultado:''')
Mensaje_10 = tk.Label(Recuadro_Entradas)
Mensaje_10.place(relx=0.13, rely=0.62, height=25,
width=40)
Mensaje_10.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Mod
:''')
Mensaje_11 = tk.Label(Recuadro_Entradas)
Mensaje_11.place(relx=0.40, rely=0.62, height=25,
width=40)
Mensaje_11.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Mob
:''')
Mensaje_12 = tk.Label(Recuadro_Entradas)
Mensaje_12.place(relx=0.66, rely=0.62, height=25,
width=40)
Mensaje_12.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Mo
:''')
Mensaje_13 = tk.Label(Recuadro_Entradas)
Mensaje_13.place(relx = 0.93, rely = 0.62,
height=25, width=30)
Mensaje_13.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''cp''')
Entrada_1 = tk.Entry(Recuadro_Entradas)
Entrada_1.place(relx=0.02, rely=0.18, 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.21, rely=0.18, height=20,
width=80)
Entrada_2.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_3 = tk.Entry(Recuadro_Entradas)
Entrada_3.place(relx=0.40, rely=0.18, height=20,
width=80)
Entrada_3.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_4 = tk.Entry(Recuadro_Entradas)
Entrada_4.place(relx=0.60, rely=0.18, height=20,
width=80)
Entrada_4.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_5 = tk.Entry(Recuadro_Entradas)
Entrada_5.place(relx=0.80, rely=0.18, height=20,
width=80)
Entrada_5.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_6 = tk.Entry(Recuadro_Entradas)
Entrada_6.place(relx=0.02, rely=0.46, height=20,
width=80)
Entrada_6.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_7 = tk.Entry(Recuadro_Entradas)
Entrada_7.place(relx=0.21, rely=0.46, height=20,
width=80)
Entrada_7.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Salida_1 = tk.Entry(Recuadro_Entradas)
Salida_1.place(relx=0.22, rely=0.64, height=20,
width=80)
Salida_1.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Salida_2 = tk.Entry(Recuadro_Entradas)
Salida_2.place(relx=0.49, rely=0.64, height=20,
width=80)
Salida_2.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Salida_3 = tk.Entry(Recuadro_Entradas)
Salida_3.place(relx=0.74, rely=0.64, height=20,
width=80)
Salida_3.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)
Entrada_3.delete(0,tk.END);Entrada_3.insert(tk.END,"");Entrada_3.insert(tk.END,0.00)
Entrada_4.delete(0,tk.END);Entrada_4.insert(tk.END,"");Entrada_4.insert(tk.END,0.00)
Entrada_5.delete(0,tk.END);Entrada_5.insert(tk.END,"");Entrada_5.insert(tk.END,0.00)
Entrada_6.delete(0,tk.END);Entrada_6.insert(tk.END,"");Entrada_6.insert(tk.END,0.00)
Entrada_7.delete(0,tk.END);Entrada_7.insert(tk.END,"");Entrada_7.insert(tk.END,0.00)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,"");Salida_2.insert(tk.END,0.00)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,"");Salida_3.insert(tk.END,0.00)
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)
Entrada_3.delete(0,tk.END);Entrada_3.insert(tk.END,"");Entrada_3.insert(tk.END,0.00)
Entrada_4.delete(0,tk.END);Entrada_4.insert(tk.END,"");Entrada_4.insert(tk.END,0.00)
Entrada_5.delete(0,tk.END);Entrada_5.insert(tk.END,"");Entrada_5.insert(tk.END,0.00)
Entrada_6.delete(0,tk.END);Entrada_6.insert(tk.END,"");Entrada_6.insert(tk.END,0.00)
Entrada_7.delete(0,tk.END);Entrada_7.insert(tk.END,"");Entrada_7.insert(tk.END,0.00)
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
Salida_2.delete(0,tk.END);Salida_2.insert(tk.END,"");Salida_2.insert(tk.END,0.00)
Salida_3.delete(0,tk.END);Salida_3.insert(tk.END,"");Salida_3.insert(tk.END,0.00)
return
Limpieza =
Button(Recuadro_Entradas,activebackground="OliveDrab4",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Limpieza''',
command = Limpiando).place(relx = 0.23, rely = 0.80, height=25, width=217)
Ventana.mainloop()
El código devuelve lo siguiente:
