miércoles, 6 de julio de 2022

Tkinter Factor Volumétrico del Agua

Ahora se trae en esta ocasión el Factor Volumétrico del Agua, la interfaz cuenta con 4 correlaciones que  permiten la obtención de Bw, 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("300x300")
Ventana.maxsize(300,300)
Ventana.minsize(300,300)
Ventana.title("Factor Volumétrico del Agua")
Ventana.configure(background="gray80",highlightbackground="gray80",highlightcolor="black")
 
Recuadro_Entradas = tk.LabelFrame(Ventana)
Recuadro_Entradas.place(relx=0.01, rely=0.01, relheight=0.40, 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.01, rely=0.05, height=25, width=50)
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.01, rely=0.38, height=25, width=50)
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.01, rely=0.71, height=25, width=50)
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.52, rely=0.05, height=25, width=50)
Mensaje_4.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''S''')
Mensaje_5 = tk.Message(Recuadro_Entradas)
Mensaje_5.place(relx=0.52, rely=0.38, height=25, width=50)
Mensaje_5.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Cw''')
 
Entrada_1 = tk.Entry(Recuadro_Entradas)
Entrada_1.place(relx=0.2, rely=0.05, 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.2, rely=0.39, 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.2, rely=0.72, 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.715, rely=0.05, 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.715, rely=0.39, height=20, width=80)
Entrada_5.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)
 
Recuadro_Correlaciones = tk.LabelFrame(Ventana)
Recuadro_Correlaciones.place(relx=0.01, rely=0.44, relheight=0.20, relwidth=0.980)
Recuadro_Correlaciones.configure(relief='groove',foreground="black",text='''Correlaciones Disponibles''',background="gray80",highlightbackground="gray80",highlightcolor="black",width=330)
 
Valores = ["McCain, W.D, Jr.","McCoy, R.L. Agua Pura Saturada con Gas" ,"McCoy, R.L. Agua Pura Libre de Gas" ,"Por Encima de la Presión de Burbuja"]
 
Variable = tk.StringVar()
Visor_correlaciones = ttk.Combobox(Recuadro_Correlaciones)
Visor_correlaciones.place(relx=0.02, rely=0.40, height=25, width=280, bordermode='ignore')
Visor_correlaciones.configure(takefocus="",state="readonly",textvariable = Variable, justify = "center",values = Valores)
Visor_correlaciones.current(0)
 
def Correlaciones_RSW(event):
 
            try:
 
                        # S = 20000/10000 # ppm
                        # P = 5000 # psi
                        # T = 200 # °F
 
                        P = float(Entrada_1.get()) # psi
                        Pb = float(Entrada_2.get()) # °F
                        T = float(Entrada_3.get()) # °S
                        S = float(Entrada_4.get()) # psi
                        Cw = float(Entrada_5.get()) # °F
 
                        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 es incorrecta")
 
                        elif S <= 0:
 
                                   messagebox.showwarning("Advertencia!","La Salinidad es incorrecta")
 
                        elif Cw <= 0:
 
                                   messagebox.showwarning("Advertencia!","La Compresibilidad del Agua es incorrecta")
 
                        else:
 
                                   S = S/10000
 
                                   if str(Variable.get()) == Valores[0]:
 
                                               # Correlación de McCain, W.D, Jr.
 
                                               VwT= -1.0001*(10**-2)+1.33391*(10**-4)*T+5.50654*(10**-7)*(T**2)
                                               Vwp= (-1.95301*(10**-9)*P*T)-(1.72834*(10**-13)*(P**2)*T)-(3.58922*(10**-7)*P)-(2.25341*(10**-10)*(P**2))
                                               Bwb = (1+Vwp)*(1+VwT)
 
                                               Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Bwb)
 
                                   elif str(Variable.get()) == Valores[1]:
 
                                               # Correlación de McCoy, R.L.
 
                                               # Considerando agua pura libre de gas
 
                                               A = 0.9947+5.8*(10**-6)*T+1.02*(10**-6)*(T**2)
                                               B = -4.228*(10**-6)+1.8376*(10**-8)*T-6.77*(10**-11)*(T**2)
                                               C = 1.3*(10**-10)-1.3855*(10**-12)*T+4.285*(10**-15)*(T**2)
 
                                               Bwp= A+B*P+C*(P**2)
 
                                               Bwb = 1+S*(5.51*(10**-8)*P+(5.47*(10**-6)-1.95*(10**-10)*P)*(T-60)-(3.23*(10**-8)-8.5*(10**-13)*P)*(T-60)**2)*Bwp
 
                                               Bwb = Bwp*Bwb
 
                                               Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Bwb)
 
                                   elif str(Variable.get()) == Valores[2]:
 
                                               # Correlación de McCoy, R.L.
 
                                               # Considerando agua pura saturada con gas
 
                                               A =0.9911+6.35*(10**-5)*T+8.5*(10**-7)*(T**2)
                                               B = -1.093*(10**-6)-3.497*(10**-9)*T+4.57*(10**-12)*(T**2) 
                                               C = -5.0*(10**-11)+6.429*(10**-13)*T-1.43*(10**-15)*(T**2)
 
                                               Bwp= A+B*P+C*(P**2)
 
                                               Bwb = 1+S*(5.51*(10**-8)*P+(5.47*(10**-6)-1.95*(10**-10)*P)*(T-60)-(3.23*(10**-8)-8.5*(10**-13)*P)*(T-60)**2)*Bwp
 
                                               Bwb = Bwp*Bwb
 
                                               Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Bwb)
 
                                   elif str(Variable.get()) == Valores[3]:
 
                                               # Correlación de McCain, W.D, Jr.
 
                                               VwT= -1.0001*(10**-2)+1.33391*(10**-4)*T+5.50654*(10**-7)*(T**2)
                                               Vwp= (-1.95301*(10**-9)*P*T)-(1.72834*(10**-13)*(P**2)*T)-(3.58922*(10**-7)*P)-(2.25341*(10**-10)*(P**2))
                                               Bwb1 = (1+Vwp)*(1+VwT)
 
                                               # Para obtener el factor volumétrico por encima de la presión de burbuja se utiliza la siguiente expresión
 
                                               Bw = Bwb1*np.exp(Cw*(Pb-P))
 
                                               Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Bw)
 
                                   else:
 
                                               print("Error al realiar la selección de la opción")
           
            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.bind('<<ComboboxSelected>>', Correlaciones_RSW)
 
Recuadro_Salidas = tk.LabelFrame(Ventana)
Recuadro_Salidas.place(relx=0.01, rely=0.67, relheight=0.20, relwidth=0.980)
Recuadro_Salidas.configure(relief='groove',foreground="black",text='''Salidas''',background="gray80",highlightbackground="gray80",highlightcolor="black",width=330)
 
Mensaje_4 = tk.Label(Recuadro_Salidas)
Mensaje_4.place(relx=0.10, rely=0.20, height=25, width=80)
Mensaje_4.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='left',text='''RSW''')
Mensaje_9 = tk.Label(Recuadro_Salidas)
Mensaje_9.place(relx = 0.69, rely = 0.20, height=25, width=50)
Mensaje_9.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''PCN/BN''')
Salida_1 = tk.Entry(Recuadro_Salidas)
Salida_1.place(relx=0.35, rely=0.21, height=20, width=80)
Salida_1.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
 
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.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)
            Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,"");Salida_1.insert(tk.END,0.00)
 
            return
 
Limpieza = Button(Ventana,activebackground="OliveDrab4",activeforeground="black",background="gray80",disabledforeground="#a3a3a3",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",pady="0",text='''Limpieza''', command = Limpiando).place(relx = 0.01, rely = 0.89, height=27, width=293)
 
Ventana.mainloop()
 
El código devuelve lo siguiente:



No hay comentarios.:

Publicar un comentario