jueves, 7 de abril de 2022

Interfaz Gráfica - Factor Z

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