Esta entrada y dos más son de las propiedades del
gas, en esta primera entrada se aborda la Viscosidad del Gas, la interfaz
cuenta con 2 correlaciones que permiten
la obtención de Mg, A continuación se muestra el código completo:
Ventana = Tk()
Ventana.geometry("300x400")
Ventana.maxsize(300,400)
Ventana.minsize(300,400)
Ventana.title("Viscosidad del Gas")
Ventana.configure(background="gray80",highlightbackground="gray80",highlightcolor="black")
Recuadro_Entradas = tk.LabelFrame(Ventana)
Recuadro_Entradas.place(relx=0.01, rely=0.01, relheight=0.50, 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.24, height=25, width=50)
Mensaje_2.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''T''')
Mensaje_3 = tk.Message(Recuadro_Entradas)
Mensaje_3.place(relx=0.01, rely=0.43, height=25, width=50)
Mensaje_3.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Ppr''')
Mensaje_4 = tk.Message(Recuadro_Entradas)
Mensaje_4.place(relx=0.01, rely=0.62, height=25, width=50)
Mensaje_4.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Tpr''')
Mensaje_5 = tk.Message(Recuadro_Entradas)
Mensaje_5.place(relx=0.01, rely=0.81, height=25, width=50)
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.52, rely=0.05, height=25, width=50)
Mensaje_6.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''Z''')
Mensaje_7 = tk.Message(Recuadro_Entradas)
Mensaje_7.place(relx=0.52, rely=0.24, height=25, width=50)
Mensaje_7.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''M''')
Mensaje_8 = tk.Message(Recuadro_Entradas)
Mensaje_8.place(relx=0.52, rely=0.43, height=25, width=50)
Mensaje_8.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''YN2''')
Mensaje_9 = tk.Message(Recuadro_Entradas)
Mensaje_9.place(relx=0.52, rely=0.62, height=25, width=50)
Mensaje_9.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''YCo2''')
Mensaje_10 = tk.Message(Recuadro_Entradas)
Mensaje_10.place(relx=0.52, rely=0.81, height=25, width=50)
Mensaje_10.configure(background="gray80",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center',text='''YH2S''')
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.24, 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.43, 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.2, rely=0.62, 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.2, rely=0.81, 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.715, rely=0.05, 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.715, rely=0.24, height=20, width=80)
Entrada_7.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_8 = tk.Entry(Recuadro_Entradas)
Entrada_8.place(relx=0.715, rely=0.43, height=20, width=80)
Entrada_8.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_9 = tk.Entry(Recuadro_Entradas)
Entrada_9.place(relx=0.715, rely=0.62, height=20, width=80)
Entrada_9.configure(background="white",foreground="#000000",highlightbackground="#d9d9d9",highlightcolor="black",justify='center')
Entrada_10 = tk.Entry(Recuadro_Entradas)
Entrada_10.place(relx=0.715, rely=0.81, height=20, width=80)
Entrada_10.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)
Entrada_8.delete(0,tk.END);Entrada_8.insert(tk.END,"");Entrada_8.insert(tk.END,0.00)
Entrada_9.delete(0,tk.END);Entrada_9.insert(tk.END,"");Entrada_9.insert(tk.END,0.00)
Entrada_10.delete(0,tk.END);Entrada_10.insert(tk.END,"");Entrada_10.insert(tk.END,0.00)
Recuadro_Correlaciones = tk.LabelFrame(Ventana)
Recuadro_Correlaciones.place(relx=0.01, rely=0.51, 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 = ["Carr, N.L. Kobayashi, R. y Burrows, D.B.","Lee, A.L. González, M.H. y Eakin, B.E."]
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:
"""P = 3810
T = 194
Yg = 1.242
YN2 = 0.0051
YCO2 = 0.1101
YH2S = 0.0491
Ppr = 5.60
Tpr = 1.35
z = 0.78
M = 35.969"""
P = float(Entrada_1.get()) # psi
T = float(Entrada_2.get()) # °F
Yg = float(Entrada_5.get())
Z = float(Entrada_6.get())
M = float(Entrada_7.get())
if P <= 0:
messagebox.showwarning("Advertencia!","La Presión es incorrecta")
elif T <= 0:
messagebox.showwarning("Advertencia!","La Temperatura es incorrecta")
elif Yg <= 0:
messagebox.showwarning("Advertencia!","La Densidad es incorrecta")
elif Z <= 0:
messagebox.showwarning("Advertencia!","El Factor de Compresibilidad del Gas es incorrecto")
elif M <= 0:
messagebox.showwarning("Advertencia!","El Peso Molecular del Gas es incorrecto")
else:
if str(Variable.get()) == Valores[0]:
YN2 = float(Entrada_8.get())
YCO2 = float(Entrada_9.get())
YH2S = float(Entrada_10.get())
Ppr = float(Entrada_3.get())
Tpr = float(Entrada_4.get())
if YN2 <= 0:
messagebox.showwarning("Advertencia!","La Fracción molar de N2 es incorrecta")
elif YCO2 <= 0:
messagebox.showwarning("Advertencia!","La Fracción molar de CO2 es incorrecta")
elif YH2S <= 0:
messagebox.showwarning("Advertencia!","La Fracción molar de H2S es incorrecta")
elif Ppr <= 0:
messagebox.showwarning("Advertencia!","La Pseudo presión es incorrecta")
elif Tpr <= 0:
messagebox.showwarning("Advertencia!","La Pseudo temperatura es incorrecta")
# Correlación de Carr, N.L. Kobayashi, R. y Burrows, D.B.
CN2 = YN2*(8.48*10**-3*np.log10(Yg)+9.59*10**-3)
CCO2 = YCO2*((9.08*10**-3)*np.log10(Yg)+6.24*10**-3)
CH2S = YH2S*(8.49*10**-3*np.log10(Yg)+3.73*10**-3)
Mg1 = ((1.709*10**-5)-(2.062*10**-6)*Yg)*T+(8.188*10**-3)-(6.15*10**-3)*np.log10(Yg)
Mg1c = Mg1+CN2+CCO2+CH2S
# Mg/Mg1 = A
a0 = -2.46211820E00 ;a1 = 2.97054714E00 ;a2 = -2.86264054E-1 ;a3 = 8.05420522E-3 ;a4 = 2.80860949E00 ;a5 = -3.49803305E00 ;a6 = 3.60373020E-1 ;a7 = -1.04432413E-2
a8 = -7.93385684E-1 ;a9 = 1.39643306E00 ;a10 = -1.49144925E-1 ;a11 = 4.41015512E-3 ;a12 = 8.3987178E-2 ;a13 = -1.86408848E-1 ;a14 = 2.0367881E-2 ;a15 = -6.09579263E-4
x = -0.000609579263
#Mg = (Mg/Mg1)*Mgcl
A = a0+a1*Ppr+a2*(Ppr**2)+a3*(Ppr**3)+Tpr*(a4+a5*Ppr+a6*(Ppr**2)+a7*(Ppr**3))+(Tpr**2)*(a8+a9*Ppr+a10*(Ppr**2)+a11*(Ppr**3))+(Tpr**3)*(a12+a13*Ppr+a14*(Ppr**2)+a15*(Ppr**3))
Mg = (np.exp(A)*Mg1c)/Tpr
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Mg)
elif str(Variable.get()) == Valores[1]:
# Correlación de Lee, A.L. González, M.H. y Eakin, B.E.
Pg = (1.4935*(10**-3))*((P*M)/(Z*(T+460)))
X = 3.5 + (986/(T+460))+0.01*M
K = ((9.4+0.02*M)*(T+460)**1.5)/(209+19*M+(T+460))
Y = 2.4-0.2*X
Mg = (K*np.exp(X*Pg**Y))/10**4
Salida_1.delete(0,tk.END);Salida_1.insert(tk.END,Mg)
else:
print("Error al realizar 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.71, 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='''Mg''')
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='''cp''')
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)
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)
Entrada_8.delete(0,tk.END);Entrada_8.insert(tk.END,"");Entrada_8.insert(tk.END,0.00)
Entrada_9.delete(0,tk.END);Entrada_9.insert(tk.END,"");Entrada_9.insert(tk.END,0.00)
Entrada_10.delete(0,tk.END);Entrada_10.insert(tk.END,"");Entrada_10.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.92, height=27, width=293)
Ventana.mainloop()
El código devuelve lo siguiente: