miércoles, 25 de mayo de 2022

Tkinter Compresibilidad del Petróleo

En esta entrada se realiza la interfaz gráfica de la compresibilidad del petróleo, 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("Compresibilidad del Petróleo")
Ventana.configure(background="gray80",highlightbackground="gray80",highlightcolor="black")

 

Valores_1 = ["Compresibilidad del Petróleo P > Pb","Vázquez, M.E. y Beggs, H.D.","Petrosky, G.E., Jr. Farshad, F.F.","Kartomodjo, T. y Schmidt, Z."]

 

Valores_2 = ["Compresibilidad del Petróleo  P < Pb","McCain, W.D., Jr. y Cols","Standing, M.B.","Vázquez, M.E. y Beggs, H.D.","Glaso, O.","Total, C.F.P.","Al-Marthoun, M.A.","Dokla, M.E. y Osman, M.E.","Petroskky, G.E., Jr y Farshad, F.F.","Kartomodjo, T. Schmidt, Z."]

 

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)

 

Variable_2 = tk.StringVar()
Visor_correlaciones_2 = ttk.Combobox(Ventana)
Visor_correlaciones_2.place(relx=0.5, rely=0.02, relheight=0.11, relwidth=0.480, bordermode='ignore')
Visor_correlaciones_2.configure(takefocus="",state="readonly",textvariable = Variable_2, justify = "center",values = Valores_2)
Visor_correlaciones_2.current(0)

 

def Correlaciones_CoP(event):
 
            try:
 
                        # P = 2000
                        # 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:
 
                                   if P >= Pb:
 
                                               # 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[1]:
 
                                                           # correlación de Vázquez, M.E. y Beggs, H.D.
 
                                                           Co1 = (-1433+5*Rs+17.2*T-1180*Yg+12.61*API)/(P*10**5 )
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co1)
                                                          
                                               elif str(Variable_1.get()) == Valores_1[2]:
 
                                                           # Correlación de Petrosky, G.E., Jr. Farshad, F.F.
 
                                                           Co2 = 1.705*10**(-7)*Rs**0.69357*Yg**0.1885*API**0.3272*T**0.6729*P**(-0.5906)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co2)
                                                          
                                               elif str(Variable_1.get()) == Valores_1[3]:
 
                                                           # Correlación de Kartomodjo, T. y Schmidt, Z.
 
                                                           Co3 =(6.8257*Rs**0.5002*API**0.3613*T**0.76606*Yg**0.35505)/(P*10**6 )
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co3)
                                                          
                                               else:
 
                                                           messagebox.showwarning("Advertencia!","La opción no existe")
 
                                   else:
 
                                               messagebox.showwarning("Advertencia!","La presión es menor a la presión de burbuja")
 
            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_CoP)
 
def Correlaciones_CoPb(event):
 
            try:
 
                        # P = 2000
                        # Pb = 2500
                        # T = 180  
                        # API = 31 
                        # Yg = 0.95
                        # Z = 0.68
                        # Rsi = 673
                        # Rs = 516
                        # Bo = 1.32170
                        # Co = 9.62*10**-6
                        # 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:
 
                                   Yo = 141.5/(API+131.5)
 
                                   # Correlación del Factor Z
 
                                   Z = 1- ((3.52*Ppr)/(10**(0.9813*Tpr)))+((0.274*(Ppr**2))/(10**(0.8157*Tpr)))
 
                                   # Correlación del Factor de volumen del gas
 
                                   Bg = 0.00503*((Z*(T+460))/P)
 
                                   if P <= Pb:
 
                                               # Correlación Standing, M.B. condiciones de burbuja
 
                                               Rs  = Yg*(((P/18.2)+1.4)*10**(0.0125*API-0.000917*T))**1.2048
 
                                               # Correlación de Standing, M.B.
 
                                               F = Rs*(np.sqrt(Yg/Yo))+1.25*T
 
                                               Bo = 0.9759+12*10**-5*F**1.2
 
                                               if str(Variable_2.get()) == Valores_2[1]:
 
                                                           # Correlación de McCain, W.D., Jr. y Cols
 
                                                           A = -7.573-1.450*np.log(P)-0.383*np.log(Pb)+1.402*np.log(T+460)+0.256*np.log(API)+0.449*np.log(Rs)
 
                                                           Co1 = np.exp(A)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co1)
                                                          
                                               elif str(Variable_2.get()) == Valores_2[2]:
 
                                                           # Correlación de Standing, M.B.
 
                                                           D = 14.4*(10**-5)*(Yg/Yo)**0.5*(Rs*(Yg/Yo)**0.5+(1.25*T))**0.2
 
                                                           D1 = Rs/(0.83*P+21.15)
 
                                                           Co2 = -(1/Bo)*(D*D1-Bg*D1)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co2)
 
                                               elif str(Variable_2.get()) == Valores_2[3]:
 
                                                           # Correlación de Vázquez, M.E. y Beggs, H.D.
 
                                                           C1 = 4.67*10**-4; C2 = 1.187; C3 = 1.337*10**-9
 
                                                           E = C1+C3*(T-60)*(API/Yg)
 
                                                           E1 = C2*(Rs/P)
 
                                                           Co3 = -(1/Bo)*(E*E1-Bg*E1)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co3)
 
                                               elif str(Variable_2.get()) == Valores_2[4]:
 
                                                           # Correlación de Glaso, O.
 
                                                           F = Rs*(Yg/Yo)**0.526+0.968*T
 
                                                           F = (2.91329-0.55366*np.log10(F))*10**(-6.58511+2.91329*np.log10(F)-0.27683*np.log10(F)**2)*(1/F)*(Yg/Yo)**0.526
 
                                                           F1 = 2.02777*(Rs/(P*(14.1811-3.3093*np.log10(P))**0.5 ))
 
                                                           Co4 = -(1/Bo)*(F*F1-Bg*F1)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co4)
 
                                               elif str(Variable_2.get()) == Valores_2[5]:
 
                                                           # Correlación Total, C.F.P.
 
                                                           C4 = 1.095
 
                                                           G =4.857*10**-4+(17.569*10**-9)*(T-60)*(API/Yg)
 
                                                           G1  =C4*(Rs/P)
 
                                                           Co5 = -(1/Bo)*(G*G1-Bg*G1)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co5)
 
                                               elif str(Variable_2.get()) == Valores_2[6]:
 
                                                           # Correlación de Al-Marthoun, M.A.
 
                                                           F = (Rs**0.74239)*(Yg**0.323294)*(Yo**-1.20204)
 
                                                           H =(1.35556*(10**-3)*F+4.723*(10**-6)*F**2)/Rs
 
                                                           H1 =1.3984*(Rs/P)
 
                                                           Co6 = -(1/Bo)*(H*H1-Bg*H1)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co6)
 
                                               elif str(Variable_2.get()) == Valores_2[7]:
 
                                                           # Correlación de Dokla, M.E. y Osman, M.E.
 
                                                           F = (Rs**0.773572)*(Yg**0.40402)*(Yo**-0.882605)
 
                                                           I =(1.08126*(10**-3)*F+5.887*(10**-6)*F**2)/Rs
 
                                                           I1 =1.3811*(Rs/P)
 
                                                           Co7 = -(1/Bo)*(I*I1-Bg*I1)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co7)
 
                                               elif str(Variable_2.get()) == Valores_2[8]:
 
                                                           # Correlación de Petroskky, G.E., Jr y Farshad, F.F.
 
                                                           F = Rs**0.3738*((Yg**0.2914)/(Yo**0.6265))+0.24626*(T**0.5371)
 
                                                           J = 83.313*(10**-6)*(F**2.0936)*(Rs**-0.6262)*((Yg**0.2914)/(Yo**0.6265))
 
                                                           J1 =1.73184*(Rs/(P+139.05))
 
                                                           Co8 = -(1/Bo)*(J*J1-Bg*J1)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co8)
 
                                               elif str(Variable_2.get()) == Valores_2[9]:
 
                                                           # Correlación de Kartomodjo, T. Schmidt, Z.
 
                                                           C4 = 0.9143
 
                                                           F = (Rs**0.755)*(Yg**0.25)*(Yo**-1.5)+0.45*T
 
                                                           K = 1.1325*(10**-4)*(((F**1.5)-0.45*T*(F**0.5))/Rs)
 
                                                           K1 = (1/C4)*(Rs/P)
 
                                                           Co9 = -(1/Bo)*(K*K1-Bg*K1)
 
                                                           Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Co9)
                                                          
                                               else:
 
                                                           messagebox.showwarning("Advertencia!","La opción no existe")
 
                                   else:
 
                                               messagebox.showwarning("Advertencia!","La presión es mayor a la presión de burbuja")
 
            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_2.bind('<<ComboboxSelected>>', Correlaciones_CoPb)
 
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.21, rely=0.62, height=25, width=140)
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.85, rely=0.62, height=25, width=50)
Mensaje_10.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''1/psi''')
 
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.50, rely=0.64, height=20, width=140)
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)
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)
 
def Limpiando():
 
            Visor_correlaciones.configure(takefocus="",state="readonly",textvariable = Variable, justify = "center",values = Valores)
 
            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)
 
            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: