Source code for tools.UI_Tables.chooseFluid
#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''Pychemqt, Chemical Engineering Process simulator
Copyright (C) 2009-2025, Juan José Gómez Romera <jjgomera@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.'''
###############################################################################
# Dialogs for fluid selection:
# - Ui_ChooseFluid: Dialog to choose fluid for calculations
# - DialogFilterFluid: Dialog for filter compounds family to show
# - Dialog_InfoFluid: Dialog to show parameter of element with meos
# - Widget_MEoS_Data: Widget to show meos data
# - transportDialog: Dialog for transport and ancillary equations
# - Widget_Viscosity_Data: Widget to show viscosity data
# - Widget_Conductivity_Data: Widget to show thermal conductivity data
###############################################################################
import inspect
import os
from lib import meos, mEoS, unidades
from lib.config import IMAGE_PATH
from tools.codeEditor import SimplePythonEditor
from tools.qt import QtCore, QtGui, QtWidgets, translate
from UI.widgets import Entrada_con_unidades, Tabla, QLabelMath
[docs]
class Ui_ChooseFluid(QtWidgets.QDialog):
"""Dialog to choose fluid for meos plugins calculations"""
all = True
group = None
[docs]
def __init__(self, config=None, parent=None):
"""config: instance with project config to set initial values"""
super().__init__(parent)
self.setWindowTitle(self.tr("Choose fluid"))
layout = QtWidgets.QGridLayout(self)
self.lista = QtWidgets.QListWidget()
self.fill(mEoS.__all__)
self.lista.itemDoubleClicked.connect(self.accept)
layout.addWidget(self.lista, 1, 1, 5, 1)
self.buttonBox = QtWidgets.QDialogButtonBox(
QtWidgets.QDialogButtonBox.StandardButton.Ok
| QtWidgets.QDialogButtonBox.StandardButton.Cancel,
QtCore.Qt.Orientation.Vertical)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.buttonBox.helpRequested.connect(self.info)
layout.addWidget(self.buttonBox, 1, 2)
self.widget = QtWidgets.QWidget(self)
self.widget.setVisible(False)
layout.addWidget(self.widget, 6, 1, 1, 2)
gridLayout = QtWidgets.QGridLayout(self.widget)
self.radioMEoS = QtWidgets.QRadioButton(self.tr("Use MEoS equation"))
self.radioMEoS.setChecked(True)
gridLayout.addWidget(self.radioMEoS, 1, 1, 1, 2)
gridLayout.addWidget(QtWidgets.QLabel(self.tr("Equation")+": "), 2, 1)
self.eq = QtWidgets.QComboBox()
gridLayout.addWidget(self.eq, 2, 2)
self.generalized = QtWidgets.QRadioButton(
self.tr("Use generalizated expression"))
gridLayout.addWidget(self.generalized, 3, 1, 1, 2)
self.radioPR = QtWidgets.QRadioButton(
self.tr("Use Peng-Robinson cubic equation"))
gridLayout.addWidget(self.radioPR, 4, 1, 1, 2)
gridLayout.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Fixed,
QtWidgets.QSizePolicy.Policy.Fixed), 5, 1)
gridLayout.addWidget(QtWidgets.QLabel(self.tr("Viscosity")), 6, 1)
self.visco = QtWidgets.QComboBox()
gridLayout.addWidget(self.visco, 6, 2)
gridLayout.addWidget(QtWidgets.QLabel(self.tr("Thermal")), 7, 1)
self.thermal = QtWidgets.QComboBox()
gridLayout.addWidget(self.thermal, 7, 2)
gridLayout.addItem(QtWidgets.QSpacerItem(
0, 0, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Maximum), 8, 2)
botonFilter = QtWidgets.QPushButton(QtGui.QIcon(
os.path.join(IMAGE_PATH, "button", "filter.png")),
self.tr("Filter"))
botonFilter.clicked.connect(self.filter)
layout.addWidget(botonFilter, 3, 2, 1, 1)
botonInfo = QtWidgets.QPushButton(QtGui.QIcon(
os.path.join(IMAGE_PATH, "button", "helpAbout.png")),
self.tr("Info"))
botonInfo.clicked.connect(self.info)
layout.addWidget(botonInfo, 4, 2, 1, 1)
self.botonMore = QtWidgets.QPushButton(self.tr("More..."))
self.botonMore.setCheckable(True)
self.botonMore.clicked.connect(self.widget.setVisible)
layout.addWidget(self.botonMore, 5, 2, 1, 1)
self.lista.currentRowChanged.connect(self.update)
self.radioMEoS.toggled.connect(self.eq.setEnabled)
if config and config.has_option("MEoS", "fluid"):
self.lista.setCurrentRow(config.getint("MEoS", "fluid"))
self.eq.setCurrentIndex(config.getint("MEoS", "eq"))
self.radioPR.setChecked(config.getboolean("MEoS", "PR"))
self.generalized.setChecked(
config.getboolean("MEoS", "Generalized"))
self.visco.setCurrentIndex(config.getint("MEoS", "visco"))
self.thermal.setCurrentIndex(config.getint("MEoS", "thermal"))
[docs]
def id(self):
"""Return correct id of selected fluid in mEoS.__all__ list"""
index = self.lista.currentRow()
# Correct id for hidden classes
if not self.all:
hiden = 0
visible = 0
for grp, boolean in zip(DialogFilterFluid.classOrder, self.group):
module = mEoS.__getattribute__(grp)
if boolean:
visible += len(module)
else:
hiden += len(module)
if visible >= index:
break
# Add the hidden element above the selected one
index += hiden
return index
[docs]
def fill(self, compounds):
"""Fill list fluid
compounds: List of MEoS subclasses to show"""
self.lista.clear()
for fluido in compounds:
txt = fluido.name
if fluido.synonym:
txt += " ("+fluido.synonym+")"
self.lista.addItem(txt)
[docs]
def filter(self):
"""Show dialog with group compound filter"""
dlg = DialogFilterFluid(self.all, self.group)
if dlg.exec():
if dlg.showAll.isChecked():
cmps = mEoS.__all__
self.all = True
else:
self.all = False
self.group = []
cmps = []
for i, key in enumerate(dlg.classOrder):
if dlg.groups[i].isChecked():
cmps += mEoS.__getattribute__(key)
self.group.append(True)
else:
self.group.append(False)
self.fill(cmps)
[docs]
def info(self):
"""Show info dialog for fluid"""
dialog = Dialog_InfoFluid(mEoS.__all__[self.id()])
dialog.exec()
[docs]
def update(self, indice):
"""Update data when selected fluid change"""
fluido = mEoS.__all__[indice]
self.eq.clear()
for eq in fluido.eq:
self.eq.addItem(eq["__name__"])
self.visco.clear()
if fluido._viscosity is not None:
self.visco.setEnabled(True)
for eq in fluido._viscosity:
self.visco.addItem(eq["__name__"])
else:
self.visco.addItem(self.tr("Undefined"))
self.visco.setEnabled(False)
self.thermal.clear()
if fluido._thermal is not None:
self.thermal.setEnabled(True)
for eq in fluido._thermal:
self.thermal.addItem(eq["__name__"])
else:
self.thermal.addItem(self.tr("Undefined"))
self.thermal.setEnabled(False)
[docs]
class DialogFilterFluid(QtWidgets.QDialog):
"""Dialog for filter compounds family to show"""
text = {
"Nobles": translate("UI_Tables", "Noble gases"),
"Gases": translate("UI_Tables", "Gases"),
"Alkanes": translate("UI_Tables", "Alkanes"),
"Naphthenes": translate("UI_Tables", "Naphthenes"),
"Alkenes": translate("UI_Tables", "Alkenes"),
"Heteroatom": translate("UI_Tables", "Heteroatom"),
"CFCs": translate("UI_Tables", "CFCs"),
"Siloxanes": translate("UI_Tables", "Siloxanes"),
"PseudoCompounds": translate("UI_Tables", "Pseudo Compounds")}
classOrder = ["Nobles", "Gases", "Alkanes", "Naphthenes", "Alkenes",
"Heteroatom", "CFCs", "Siloxanes", "PseudoCompounds"]
[docs]
def __init__(self, showAll=True, group=None, parent=None):
super().__init__(parent)
self.setWindowTitle(self.tr("Filter fluids families to show"))
layout = QtWidgets.QGridLayout(self)
self.showAll = QtWidgets.QCheckBox(self.tr("Show All"))
layout.addWidget(self.showAll, 1, 1)
widget = QtWidgets.QWidget()
layout.addWidget(widget, 2, 1)
lyt = QtWidgets.QVBoxLayout(widget)
self.groups = []
for name in self.classOrder:
checkBox = QtWidgets.QCheckBox(self.text[name])
lyt.addWidget(checkBox)
self.groups.append(checkBox)
self.showAll.toggled.connect(widget.setDisabled)
self.showAll.setChecked(showAll)
if group is not None:
for boolean, checkBox in zip(group, self.groups):
checkBox.setChecked(boolean)
self.buttonBox = QtWidgets.QDialogButtonBox(
QtWidgets.QDialogButtonBox.StandardButton.Ok
| QtWidgets.QDialogButtonBox.StandardButton.Cancel)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
layout.addWidget(self.buttonBox, 3, 1)
[docs]
class Dialog_InfoFluid(QtWidgets.QDialog):
"""Dialog to show parameter of element with meos"""
[docs]
def __init__(self, element, parent=None):
"""element: class of element to show info"""
super().__init__(parent)
layout = QtWidgets.QGridLayout(self)
self.element = element
layout.addWidget(QtWidgets.QLabel(self.tr("Name")+":"), 1, 1)
self.name = QtWidgets.QLabel()
layout.addWidget(self.name, 1, 2)
layout.addWidget(QtWidgets.QLabel(self.tr("R name")+":"), 2, 1)
self.r_name = QtWidgets.QLabel()
layout.addWidget(self.r_name, 2, 2)
layout.addWidget(QtWidgets.QLabel(self.tr("Formula")+":"), 3, 1)
self.formula = QtWidgets.QLabel()
layout.addWidget(self.formula, 3, 2)
layout.addWidget(QtWidgets.QLabel(self.tr(
"CAS number")+":"), 4, 1)
self.CAS = QtWidgets.QLabel()
layout.addWidget(self.CAS, 4, 2)
layout.addItem(QtWidgets.QSpacerItem(
30, 30, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 1, 3, 3, 1)
layout.addWidget(QtWidgets.QLabel(self.tr("M")+":"), 1, 4)
self.M = Entrada_con_unidades(
float, textounidad="g/mol", readOnly=True)
layout.addWidget(self.M, 1, 5)
layout.addWidget(QtWidgets.QLabel(self.tr("Tc")+":"), 2, 4)
self.Tc = Entrada_con_unidades(unidades.Temperature, readOnly=True)
layout.addWidget(self.Tc, 2, 5)
layout.addWidget(QtWidgets.QLabel(self.tr("Pc")+":"), 3, 4)
self.Pc = Entrada_con_unidades(unidades.Pressure, readOnly=True)
layout.addWidget(self.Pc, 3, 5)
layout.addWidget(QtWidgets.QLabel("ρc"+":"), 4, 4)
self.rhoc = Entrada_con_unidades(
unidades.Density, "DenGas", readOnly=True)
layout.addWidget(self.rhoc, 4, 5)
layout.addItem(QtWidgets.QSpacerItem(
30, 30, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 1, 6, 3, 1)
layout.addWidget(QtWidgets.QLabel(self.tr(
"T triple")+":"), 1, 7)
self.Tt = Entrada_con_unidades(unidades.Temperature, readOnly=True)
layout.addWidget(self.Tt, 1, 8)
layout.addWidget(QtWidgets.QLabel(self.tr(
"T boiling")+":"), 2, 7)
self.Tb = Entrada_con_unidades(unidades.Temperature, readOnly=True)
layout.addWidget(self.Tb, 2, 8)
layout.addWidget(QtWidgets.QLabel(self.tr(
"Dipole moment")+":"), 3, 7)
self.momento = Entrada_con_unidades(
unidades.DipoleMoment, readOnly=True)
layout.addWidget(self.momento, 3, 8)
layout.addWidget(QtWidgets.QLabel(self.tr(
"F acentric")+":"), 4, 7)
self.f_acent = Entrada_con_unidades(float, readOnly=True)
layout.addWidget(self.f_acent, 4, 8)
layout.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Fixed,
QtWidgets.QSizePolicy.Policy.Fixed), 5, 1)
layout.addWidget(QtWidgets.QLabel(self.tr(
"Equation")+": "), 6, 1)
self.eq = QtWidgets.QComboBox()
layout.addWidget(self.eq, 6, 2, 1, 7)
self.stacked = QtWidgets.QStackedWidget()
layout.addWidget(self.stacked, 7, 1, 1, 8)
self.eq.currentIndexChanged.connect(self.stacked.setCurrentIndex)
self.moreButton = QtWidgets.QPushButton(self.tr("Others"))
self.moreButton.clicked.connect(self.more)
layout.addWidget(self.moreButton, 9, 1)
btBox = QtWidgets.QDialogButtonBox(
QtWidgets.QDialogButtonBox.StandardButton.Close)
btBox.clicked.connect(self.reject)
layout.addWidget(btBox, 9, 2, 1, 7)
self.fill(element)
[docs]
def fill(self, element):
"""Fill values"""
self.name.setText(element.name)
self.r_name.setText(element.synonym)
self.formula.setText(element.formula)
self.CAS.setText(element.CASNumber)
self.M.setValue(element.M)
self.Tc.setValue(element.Tc)
self.Pc.setValue(element.Pc)
self.rhoc.setValue(element.rhoc)
self.Tb.setValue(element.Tb)
self.Tt.setValue(element.Tt)
self.momento.setValue(element.momentoDipolar)
self.f_acent.setValue(element.f_acent)
for eq in element.eq:
widget = Widget_MEoS_Data(eq)
self.stacked.addWidget(widget)
self.eq.addItem(eq["__name__"])
[docs]
def more(self):
"""Show parameter for transport and ancillary equations"""
dialog = transportDialog(self.element, parent=self)
dialog.show()
[docs]
class Widget_MEoS_Data(QtWidgets.QWidget):
"""Widget to show meos data"""
[docs]
def __init__(self, eq, parent=None):
"""eq: dict with equation parameter"""
super().__init__(parent)
gridLayout = QtWidgets.QGridLayout(self)
txt = "; ".join((eq["__doi__"]["autor"], eq["__doi__"]["title"],
eq["__doi__"]["ref"]))
ref = QtWidgets.QLabel(txt)
ref.setWordWrap(True)
gridLayout.addWidget(ref, 1, 1)
tabWidget = QtWidgets.QTabWidget()
gridLayout.addWidget(tabWidget, 3, 1)
# Cp tab
if "ao_log" in eq["cp"]:
# Cp0 form
tab1 = QtWidgets.QWidget()
tabWidget.addTab(tab1, self.tr("Phi0"))
gridLayout_Ideal = QtWidgets.QGridLayout(tab1)
mathTex = r"$\alpha^o=\ln\delta + c_o\ln\tau + \sum c_i\tau^{n_i} "
mathTex += r"+ \sum_j m_j \ln (1-e^{-\theta_j\tau}) + "
mathTex += r"\sum_k l_k\ln|\sinh(\psi_k\tau)| - "
mathTex += r"\sum l_k\ln|\cosh(\psi_k\tau)|$"
label = QLabelMath(mathTex)
gridLayout_Ideal.addWidget(label, 1, 1, 1, 3)
self.Tabla_Cp_poly = Tabla(
2, horizontalHeader=["n", "d"], stretch=False, readOnly=True)
gridLayout_Ideal.addWidget(self.Tabla_Cp_poly, 2, 1)
self.Tabla_Cp_exp = Tabla(
2, horizontalHeader=["m", "θ"], stretch=False, readOnly=True)
gridLayout_Ideal.addWidget(self.Tabla_Cp_exp, 2, 2)
self.Tabla_Cp_hyp = Tabla(
2, horizontalHeader=["l", "ψ"], stretch=False, readOnly=True)
gridLayout_Ideal.addWidget(self.Tabla_Cp_hyp, 2, 3)
else:
# Phi0 form
tab1 = QtWidgets.QWidget()
tabWidget.addTab(tab1, self.tr("Cp"))
gridLayout_Ideal = QtWidgets.QGridLayout(tab1)
mathTex = r"$\frac{C_p^o}{R}=\sum n_i\tau^{d_i}+"
mathTex += r"\sum m_j(\theta_j\tau)^2\frac{e^{\theta_j\tau}}"
mathTex += r"{(e^{\theta_j\tau}-1)^2}"
mathTex += r"+\sum l_k\left(\frac{\phi_k\tau}"
mathTex += r"{\sinh(\phi_k\tau)}\right)^2"
mathTex += r"+\sum l_k\left(\frac{\phi_k\tau}"
mathTex += r"{\cosh(\phi_k\tau)}\right)^2$"
label = QLabelMath(mathTex)
gridLayout_Ideal.addWidget(label, 1, 1, 1, 3)
self.Tabla_Cp_poly = Tabla(
2, horizontalHeader=["n", "d"], stretch=False, readOnly=True)
gridLayout_Ideal.addWidget(self.Tabla_Cp_poly, 2, 1)
self.Tabla_Cp_exp = Tabla(
2, horizontalHeader=["m", "θ"], stretch=False, readOnly=True)
gridLayout_Ideal.addWidget(self.Tabla_Cp_exp, 2, 2)
self.Tabla_Cp_hyp = Tabla(
2, horizontalHeader=["l", "ψ"], stretch=False, readOnly=True)
gridLayout_Ideal.addWidget(self.Tabla_Cp_hyp, 2, 3)
if eq["__type__"] == "Helmholtz":
mathTex = r"$\alpha = \alpha^o+\alpha_{Pol}^r+\alpha_{Exp}^r+"
mathTex += r"\alpha_{GBS}^r+\alpha_{NA}^r+\alpha_{ass}^r$"
label = QLabelMath(mathTex)
gridLayout.addWidget(label, 2, 1)
# Polinomial tab
tab2 = QtWidgets.QWidget()
tabWidget.addTab(tab2, self.tr("Polinomial"))
gridLayout_pol = QtWidgets.QGridLayout(tab2)
mathTex = r"$\alpha_{Pol}^r=\sum_i n_i\tau^{t_i}\delta^{d_i}$"
label = QLabelMath(mathTex)
gridLayout_pol.addWidget(label, 1, 1)
self.Tabla_lineal = Tabla(
3, horizontalHeader=["n", "t", "d"], stretch=False,
readOnly=True)
gridLayout_pol.addWidget(self.Tabla_lineal, 2, 1)
# Exponencial tab
tab3 = QtWidgets.QWidget()
tabWidget.addTab(tab3, self.tr("Exponential"))
gridLayout_Exp = QtWidgets.QGridLayout(tab3)
mathTex = r"$\alpha_{Exp}^r=\sum_i n_i\tau^{t_i}\delta^{d_i}"
mathTex += r"e^{-\gamma_i\delta^{c_i}}$"
label = QLabelMath(mathTex)
gridLayout_Exp.addWidget(label, 1, 1)
self.Tabla_exponential = Tabla(
5, horizontalHeader=["n", "t", "d", "γ", "c"],
stretch=False, readOnly=True)
gridLayout_Exp.addWidget(self.Tabla_exponential, 2, 1)
# Gaussian tab
tab4 = QtWidgets.QWidget()
tabWidget.addTab(tab4, self.tr("Gaussian"))
gridLayout_gauss = QtWidgets.QGridLayout(tab4)
mathTex = r"$\alpha_{GBS}^r=\sum_i n_i\tau^{t_i}\delta^{d_i}"
mathTex += r"e^{-\alpha_i\left(\delta-\epsilon_i\right)^2"
mathTex += r"-\beta\left(\tau-\gamma_i\right)^2}$"
label = QLabelMath(mathTex)
gridLayout_gauss.addWidget(label, 1, 1)
self.Tabla_gauss = Tabla(
7, horizontalHeader=["n", "t", "d", "η", "ε", "β", "γ"],
stretch=False, readOnly=True)
gridLayout_gauss.addWidget(self.Tabla_gauss, 2, 1)
# Non analytic tab
tab5 = QtWidgets.QWidget()
tabWidget.addTab(tab5, self.tr("Non analytic"))
gridLayout_NA = QtWidgets.QGridLayout(tab5)
mathTex = r"$\alpha_{NA}^r=\sum_i n_i\delta\Delta^{b_i}"
mathTex += r"e^{-C_i\left(\delta-1\right)^2-D_i"
mathTex += r"\left(\tau-1\right)^2}$"
label = QLabelMath(mathTex)
gridLayout_NA.addWidget(label, 1, 1)
mathTex = r"$\Delta = \left(1-\tau+A_i\left(\left(\delta-1\right)"
mathTex += r"^2\right)^{1/2\beta_i}\right)^2+B_i\left(\left(\delta"
mathTex += r"-1\right)^2\right)^{a_i}$"
label2 = QLabelMath(mathTex)
gridLayout_NA.addWidget(label2, 2, 1)
self.Tabla_noanalytic = Tabla(
8, horizontalHeader=["n", "a", "b", "A", "B", "C", "D", "β"],
stretch=False, readOnly=True)
gridLayout_NA.addWidget(self.Tabla_noanalytic, 3, 1)
# Non analytic tab
tab6 = QtWidgets.QWidget()
tabWidget.addTab(tab6, self.tr("Associating"))
gridLayout_ass = QtWidgets.QGridLayout(tab6)
mathTex = r"$\alpha_{ass}^r=\sum_i n_i\tau^{t_i}\delta^{d_i}"
mathTex += r"e^{-\alpha_i\left(\delta-\epsilon_i\right)^2"
mathTex += r"+\frac{1}{\beta_i\left(\tau-\gamma_i\right)^2+b_i}}$"
label = QLabelMath(mathTex)
gridLayout_ass.addWidget(label, 1, 1)
self.Tabla_ass = Tabla(
8, horizontalHeader=["n", "t", "d", "α", "ε", "β", "γ", "b"],
stretch=False, readOnly=True)
gridLayout_ass.addWidget(self.Tabla_ass, 3, 1)
elif eq["__type__"] == "MBWR":
# Pestaña MBWR
mathTex = r"$P=\rho RT+\sum_{n=2}^{9}\alpha_n\rho^n + "
mathTex += r"e^{-\delta^2} \sum_{10}^{15} \alpha_n"
mathTex += r"\rho^{2n-17}$"
label = QLabelMath(mathTex)
gridLayout.addWidget(label, 2, 1)
tab2 = QtWidgets.QWidget()
tabWidget.addTab(tab2, self.tr("MBWR"))
gridLayout_MBWR = QtWidgets.QGridLayout(tab2)
self.Tabla_MBWR = Tabla(
1, horizontalHeader=["b"], stretch=False, readOnly=True)
gridLayout_MBWR.addWidget(self.Tabla_MBWR, 2, 1)
self.fill(eq)
[docs]
def fill(self, eq):
"""Fill widget with data of equations"""
fmt = {"fmt": 1, "total": 5}
if "ao_log" in eq["cp"]:
# Phi_o term
self.Tabla_Cp_poly.setColumn(
0, eq["cp"]["ao_pow"], **fmt)
self.Tabla_Cp_poly.setColumn(1, eq["cp"]["pow"], **fmt)
self.Tabla_Cp_poly.resizeColumnsToContents()
if "ao_exp" in eq["cp"]:
self.Tabla_Cp_exp.setColumn(0, eq["cp"]["ao_exp"], **fmt)
self.Tabla_Cp_exp.setColumn(1, eq["cp"]["titao"], **fmt)
else:
self.Tabla_Cp_exp.setEnabled(False)
self.Tabla_Cp_exp.resizeColumnsToContents()
if "hyp" in eq["cp"]:
self.Tabla_Cp_hyp.setColumn(0, eq["cp"]["ao_hyp"], **fmt)
self.Tabla_Cp_hyp.setColumn(1, eq["cp"]["hyp"], **fmt)
else:
self.Tabla_Cp_hyp.setEnabled(False)
self.Tabla_Cp_hyp.resizeColumnsToContents()
else:
# Cp term
an = eq["cp"].get("an", [])
t = eq["cp"].get("pow", [])
ao = eq["cp"].get("ao", 0)
if ao:
an.insert(0, ao)
t.insert(0, 0)
if an:
self.Tabla_Cp_poly.setColumn(0, an, **fmt)
self.Tabla_Cp_poly.setColumn(1, t, **fmt)
else:
self.Tabla_Cp_poly.setEnabled(False)
self.Tabla_Cp_poly.resizeColumnsToContents()
if "ao_exp" in eq["cp"]:
self.Tabla_Cp_exp.setColumn(0, eq["cp"]["ao_exp"], **fmt)
self.Tabla_Cp_exp.setColumn(1, eq["cp"]["exp"], **fmt)
else:
self.Tabla_Cp_exp.setEnabled(False)
self.Tabla_Cp_exp.resizeColumnsToContents()
if "hyp" in eq["cp"]:
self.Tabla_Cp_hyp.setColumn(0, eq["cp"]["ao_hyp"], **fmt)
self.Tabla_Cp_hyp.setColumn(1, eq["cp"]["hyp"], **fmt)
else:
self.Tabla_Cp_hyp.setEnabled(False)
self.Tabla_Cp_hyp.resizeColumnsToContents()
if eq["__type__"] == "Helmholtz":
if eq.get("nr1", []):
self.Tabla_lineal.setColumn(0, eq["nr1"], **fmt)
self.Tabla_lineal.setColumn(1, eq["t1"], **fmt)
self.Tabla_lineal.setColumn(2, eq["d1"], **fmt)
else:
self.Tabla_lineal.setEnabled(False)
if eq.get("nr2", []):
self.Tabla_exponential.setColumn(0, eq["nr2"], **fmt)
self.Tabla_exponential.setColumn(1, eq["t2"], **fmt)
self.Tabla_exponential.setColumn(2, eq["d2"], **fmt)
self.Tabla_exponential.setColumn(3, eq["gamma2"], **fmt)
self.Tabla_exponential.setColumn(4, eq["c2"], **fmt)
else:
self.Tabla_exponential.setEnabled(False)
if eq.get("nr3", []):
self.Tabla_gauss.setColumn(0, eq["nr3"], **fmt)
self.Tabla_gauss.setColumn(1, eq["t3"], **fmt)
self.Tabla_gauss.setColumn(2, eq["d3"], **fmt)
self.Tabla_gauss.setColumn(3, eq["alfa3"], **fmt)
self.Tabla_gauss.setColumn(4, eq["beta3"], **fmt)
self.Tabla_gauss.setColumn(5, eq["gamma3"], **fmt)
self.Tabla_gauss.setColumn(6, eq["epsilon3"], **fmt)
else:
self.Tabla_gauss.setEnabled(False)
if eq.get("nr4", []):
self.Tabla_noanalytic.setColumn(0, eq["nr4"], **fmt)
self.Tabla_noanalytic.setColumn(1, eq["a4"], **fmt)
self.Tabla_noanalytic.setColumn(2, eq["b4"], **fmt)
self.Tabla_noanalytic.setColumn(3, eq["A"], **fmt)
self.Tabla_noanalytic.setColumn(4, eq["B"], **fmt)
self.Tabla_noanalytic.setColumn(5, eq["C"], **fmt)
self.Tabla_noanalytic.setColumn(6, eq["D"], **fmt)
self.Tabla_noanalytic.setColumn(7, eq["beta4"], **fmt)
else:
self.Tabla_noanalytic.setEnabled(False)
if eq.get("nr_ass", []):
self.Tabla_ass.setColumn(0, eq["nr_ass"], **fmt)
self.Tabla_ass.setColumn(1, eq["t_ass"], **fmt)
self.Tabla_ass.setColumn(2, eq["d_ass"], **fmt)
self.Tabla_ass.setColumn(3, eq["alfa_ass"], **fmt)
self.Tabla_ass.setColumn(4, eq["beta_ass"], **fmt)
self.Tabla_ass.setColumn(5, eq["gamma_ass"], **fmt)
self.Tabla_ass.setColumn(6, eq["epsilon_ass"], **fmt)
self.Tabla_ass.setColumn(7, eq["b_ass"], **fmt)
else:
self.Tabla_ass.setEnabled(False)
self.Tabla_lineal.resizeColumnsToContents()
self.Tabla_exponential.resizeColumnsToContents()
self.Tabla_gauss.resizeColumnsToContents()
self.Tabla_noanalytic.resizeColumnsToContents()
self.Tabla_ass.resizeColumnsToContents()
elif eq["__type__"] == "MBWR":
self.Tabla_MBWR.setColumn(0, eq["b"][1:], **fmt)
self.Tabla_MBWR.resizeColumnsToContents()
[docs]
class transportDialog(QtWidgets.QDialog):
"""Dialog to show parameters for transport and ancillary equations"""
[docs]
def __init__(self, element, parent=None):
super().__init__(parent)
gridLayout = QtWidgets.QGridLayout(self)
tabWidget = QtWidgets.QTabWidget()
gridLayout.addWidget(tabWidget, 1, 1)
# Tab viscosity
tab3 = QtWidgets.QWidget()
tabWidget.addTab(tab3, self.tr("Viscosity"))
lyt_viscosity = QtWidgets.QGridLayout(tab3)
lyt_viscosity.addWidget(QtWidgets.QLabel(
self.tr("Equation")+": "), 1, 1)
eqVisco = QtWidgets.QComboBox()
lyt_viscosity.addWidget(eqVisco, 1, 2)
lyt_viscosity.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Fixed), 1, 3)
stackedVisco = QtWidgets.QStackedWidget()
lyt_viscosity.addWidget(stackedVisco, 2, 1, 1, 3)
eqVisco.currentIndexChanged.connect(
stackedVisco.setCurrentIndex)
if element._viscosity is not None:
for eq in element._viscosity:
widget = Widget_Viscosity_Data(element, eq)
stackedVisco.addWidget(widget)
eqVisco.addItem(eq["__name__"])
else:
eqVisco.addItem(self.tr("Not Implemented"))
# Tab thermal conductivity
tab4 = QtWidgets.QWidget()
tabWidget.addTab(tab4, self.tr("Thermal Conductivity"))
lyt_conductivity = QtWidgets.QGridLayout(tab4)
lyt_conductivity.addWidget(QtWidgets.QLabel(
self.tr("Equation")+": "), 1, 1)
eqThermo = QtWidgets.QComboBox()
lyt_conductivity.addWidget(eqThermo, 1, 2)
lyt_conductivity.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Fixed), 1, 3)
stackedThermo = QtWidgets.QStackedWidget()
lyt_conductivity.addWidget(stackedThermo, 2, 1, 1, 3)
eqThermo.currentIndexChanged.connect(
stackedThermo.setCurrentIndex)
if element._thermal is not None:
for eq in element._thermal:
widget = Widget_Conductivity_Data(element, eq)
stackedThermo.addWidget(widget)
eqThermo.addItem(eq["__name__"])
else:
eqThermo.addItem(self.tr("Not Implemented"))
# Tab dielectric constant
tab1 = QtWidgets.QWidget()
tabWidget.addTab(tab1, self.tr("Dielectric"))
lyt_dielectric = QtWidgets.QGridLayout(tab1)
if element._Dielectric != meos.MEoS._Dielectric:
label = QtWidgets.QLabel(element._Dielectric.__doc__)
label.setWordWrap(True)
lyt_dielectric.addWidget(label, 1, 1)
codigo_Dielectric = SimplePythonEditor()
codigo_Dielectric.setText(
inspect.getsource(element._Dielectric))
lyt_dielectric.addWidget(codigo_Dielectric, 2, 1)
elif element._dielectric:
if element._dielectric["eq"] == 1:
txt1 = r"$P = \frac{\epsilon-1}{\epsilon+2}$"
else:
txt1 = r"$P = \frac{(\epsilon-1)(2\epsilon+1}{9\epsilon}$"
label1 = QLabelMath(txt1)
lyt_dielectric.addWidget(label1, 1, 1)
txt2 = r"$\frac{P}{\rho} = A_{\epsilon} + \frac{A_{\mu}}{T} + "
txt2 += r"B_{\epsilon}\rho + C\rho^D$"
label2 = QLabelMath(txt2)
lyt_dielectric.addWidget(label2, 2, 1)
Table_Dielectric = Tabla(
1, verticalHeader=True, filas=5, stretch=False, readOnly=True)
lyt_dielectric.addWidget(Table_Dielectric, 3, 1)
i = 0
for key, valor in element._dielectric.items():
if key == "eq":
continue
Table_Dielectric.setVerticalHeaderItem(
i, QtWidgets.QTableWidgetItem(key))
Table_Dielectric.setItem(
0, i, QtWidgets.QTableWidgetItem(str(valor)))
i += 1
Table_Dielectric.resizeColumnsToContents()
else:
lyt_dielectric.addWidget(QtWidgets.QLabel(
self.tr("Not Implemented")), 1, 1)
lyt_dielectric.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 2, 1)
# Tab surface tension
tab2 = QtWidgets.QWidget()
tabWidget.addTab(tab2, self.tr("Surface Tension"))
lyt_surface = QtWidgets.QGridLayout(tab2)
if element._Surface != meos.MEoS._Surface:
label = QtWidgets.QLabel(element._Surface.__doc__)
label.setWordWrap(True)
lyt_surface.addWidget(label, 1, 1)
code_Surface = SimplePythonEditor()
code_Surface.setText(inspect.getsource(element._Surface))
lyt_surface.addWidget(code_Surface, 2, 1)
elif element._surface:
txt = r"$\sigma=\sum_i \sigma_i\left(1-\frac{T}{T_c}\right)^{n_i}$"
label = QLabelMath(txt)
lyt_surface.addWidget(label, 1, 1)
Table_Surface = Tabla(
2, horizontalHeader=["σ", "n"], verticalHeader=True,
stretch=False, readOnly=True)
Table_Surface.setColumn(0, element._surface["sigma"])
Table_Surface.setColumn(1, element._surface["exp"])
lyt_surface.addWidget(Table_Surface, 2, 1)
Table_Surface.resizeColumnsToContents()
else:
lyt_surface.addWidget(QtWidgets.QLabel(
self.tr("Not Implemented")), 1, 1)
lyt_surface.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 2, 1)
# Tab liquid density
tab5 = QtWidgets.QWidget()
tabWidget.addTab(tab5, self.tr("Liquid Density"))
lyt_liquid_density = QtWidgets.QGridLayout(tab5)
if element._Liquid_Density != meos.MEoS._Liquid_Density:
label = QtWidgets.QLabel(element._Liquid_Density.__doc__)
label.setWordWrap(True)
lyt_liquid_density.addWidget(label, 1, 1)
code_Liquid_Density = SimplePythonEditor()
code_Liquid_Density.setText(
inspect.getsource(element._Liquid_Density))
lyt_liquid_density.addWidget(
code_Liquid_Density, 2, 1)
elif element._liquid_Density:
label = QtWidgets.QLabel(element._Liquid_Density.__doc__)
label.setWordWrap(True)
lyt_liquid_density.addWidget(label, 1, 1)
if element._liquid_Density["eq"] in [2, 3]:
mathTex = r"$\ln \frac{\rho_l}{\rho_c} = "
else:
mathTex = r"$\frac{\rho_l}{\rho_c} = "
if element._liquid_Density["eq"] == 1:
mathTex += r"1 + "
elif element._liquid_Density["eq"] == 3:
mathTex += r"\frac{T_c}{T} "
mathTex += r"\sum_i n_i\theta^{t_i}$"
label2 = QLabelMath(mathTex)
lyt_liquid_density.addWidget(label2, 2, 1)
Table_Liquid_Density = Tabla(
2, horizontalHeader=["n", "t"],
verticalHeader=True, stretch=False, readOnly=True)
Table_Liquid_Density.setColumn(0, element._liquid_Density["n"])
Table_Liquid_Density.setColumn(1, element._liquid_Density["t"])
lyt_liquid_density.addWidget(Table_Liquid_Density, 3, 1)
Table_Liquid_Density.resizeColumnsToContents()
else:
lyt_liquid_density.addWidget(QtWidgets.QLabel(
self.tr("Not Implemented")), 1, 1)
lyt_liquid_density.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 2, 1)
# Tab vapor density
tab6 = QtWidgets.QWidget()
tabWidget.addTab(tab6, self.tr("Vapor Density"))
lyt_vapor_density = QtWidgets.QGridLayout(tab6)
if element._Vapor_Density != meos.MEoS._Vapor_Density:
label = QtWidgets.QLabel(element._Vapor_Density.__doc__)
label.setWordWrap(True)
lyt_vapor_density.addWidget(label, 1, 1)
code_Vapor_Density = SimplePythonEditor()
code_Vapor_Density.setText(
inspect.getsource(element._Vapor_Density))
lyt_vapor_density.addWidget(code_Vapor_Density, 2, 1)
elif element._vapor_Density:
label = QtWidgets.QLabel(element._Vapor_Density.__doc__)
label.setWordWrap(True)
lyt_vapor_density.addWidget(label, 1, 1)
if element._vapor_Density["eq"] in [2, 3]:
mathTex = r"$\ln \frac{\rho_v}{\rho_c} = "
else:
mathTex = r"$\frac{\rho_v}{\rho_c} = "
if element._vapor_Density["eq"] == 1:
mathTex += r"1 + "
elif element._vapor_Density["eq"] == 3:
mathTex += r"\frac{T_c}{T} "
mathTex += r"\sum_i n_i\theta^{t_i}$"
label2 = QLabelMath(mathTex)
lyt_vapor_density.addWidget(label2, 2, 1)
Table_Vapor_Density = Tabla(
2, horizontalHeader=["n", "t"], verticalHeader=True,
stretch=False, readOnly=True)
Table_Vapor_Density.setColumn(0, element._vapor_Density["n"])
Table_Vapor_Density.setColumn(1, element._vapor_Density["t"])
lyt_vapor_density.addWidget(Table_Vapor_Density, 3, 1)
Table_Vapor_Density.resizeColumnsToContents()
else:
lyt_vapor_density.addWidget(QtWidgets.QLabel(
self.tr("Not Implemented")), 1, 1)
lyt_vapor_density.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 2, 1)
# Tab vapor presure
tab7 = QtWidgets.QWidget()
tabWidget.addTab(tab7, self.tr("Vapor Pressure"))
lyt_vapor_pressure = QtWidgets.QGridLayout(tab7)
if element._Vapor_Pressure != meos.MEoS._Vapor_Pressure:
label = QtWidgets.QLabel(element._Vapor_Pressure.__doc__)
label.setWordWrap(True)
lyt_vapor_pressure.addWidget(label, 1, 1)
code_Vapor_Pressure = SimplePythonEditor()
code_Vapor_Pressure.setText(
inspect.getsource(element._Vapor_Pressure))
lyt_vapor_pressure.addWidget(
code_Vapor_Pressure, 2, 1)
elif element._vapor_Pressure:
label = QtWidgets.QLabel(element._Vapor_Pressure.__doc__)
label.setWordWrap(True)
lyt_vapor_pressure.addWidget(label, 1, 1)
if element._vapor_Pressure["eq"] in [2, 3]:
mathTex = r"$\ln \frac{P_v}{P_c} = "
else:
mathTex = r"$\frac{P_v}{P_c} = "
if element._vapor_Pressure["eq"] == 1:
mathTex += r"1 + "
elif element._vapor_Pressure["eq"] == 3:
mathTex += r"\frac{T_c}{T} "
mathTex += r"\sum_i n_i\theta^{t_i}$"
label2 = QLabelMath(mathTex)
lyt_vapor_pressure.addWidget(label2, 2, 1)
Table_Vapor_Pressure = Tabla(
2, horizontalHeader=["n", "t"], verticalHeader=True,
stretch=False, readOnly=True)
Table_Vapor_Pressure.setColumn(0, element._vapor_Pressure["n"])
Table_Vapor_Pressure.setColumn(1, element._vapor_Pressure["t"])
lyt_vapor_pressure.addWidget(Table_Vapor_Pressure, 3, 1)
Table_Vapor_Pressure.resizeColumnsToContents()
else:
lyt_vapor_pressure.addWidget(QtWidgets.QLabel(
self.tr("Not Implemented")), 1, 1)
lyt_vapor_pressure.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 2, 1)
# Tab melting presure
tab8 = QtWidgets.QWidget()
tabWidget.addTab(tab8, self.tr("Melting Pressure"))
lyt_melting = QtWidgets.QGridLayout(tab8)
if inspect.getsource(element._Melting_Pressure) != \
inspect.getsource(meos.MEoS._Melting_Pressure):
label = QtWidgets.QLabel(element._Melting_Pressure.__doc__)
label.setWordWrap(True)
lyt_melting.addWidget(label, 1, 1)
code_Melting = SimplePythonEditor()
code_Melting.setText(
inspect.getsource(element._Melting_Pressure))
lyt_melting.addWidget(
code_Melting, 2, 1)
elif element._melting:
if "__doi__" in element._melting:
eq = element._melting["__doi__"]
ref = "; ".join((eq["autor"], eq["title"], eq["ref"]))
ref += os.linesep
label2 = QtWidgets.QLabel(ref)
label2.setWordWrap(True)
lyt_melting.addWidget(label2, 1, 1)
if element._melting["eq"] == 1:
mathTex = r"$\frac{P_m}{P_r} = "
elif element._melting["eq"] == 2:
mathTex = r"$P_m - P_r = "
elif element._melting["eq"] == 3:
mathTex = r"$\ln \frac{P_m}{P_r} = "
mathTex += r"a_o + \sum a_1\theta^{n_1} + "
mathTex += r"\sum a_2\left(\theta^{n_2}-1\right) + "
mathTex += r"\sum a_3\log \theta^{n_3} + "
mathTex += r"\sum a_4\left(\theta-1\right)^{n_4}$"
label = QLabelMath(mathTex)
lyt_melting.addWidget(label, 2, 1)
header = ["a1", "n1", "a2", "n2", "a3", "n3", "a4", "n4"]
Table_Melting = Tabla(
8, horizontalHeader=header, verticalHeader=True,
stretch=False, readOnly=True)
if "a1" in element._melting:
Table_Melting.setColumn(0, element._melting["a1"])
Table_Melting.setColumn(1, element._melting["exp1"])
if "a2" in element._melting:
Table_Melting.setColumn(2, element._melting["a2"])
Table_Melting.setColumn(3, element._melting["exp2"])
if "a3" in element._melting:
Table_Melting.setColumn(4, element._melting["a3"])
Table_Melting.setColumn(5, element._melting["exp3"])
if "a4" in element._melting:
Table_Melting.setColumn(6, element._melting["a4"])
Table_Melting.setColumn(7, element._melting["exp4"])
lyt_melting.addWidget(
Table_Melting, 3, 1)
Table_Melting.resizeColumnsToContents()
else:
lyt_melting.addWidget(QtWidgets.QLabel(
self.tr("Not Implemented")), 1, 1)
lyt_melting.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 2, 1)
# Tab sublimation presure
tab9 = QtWidgets.QWidget()
tabWidget.addTab(tab9, self.tr("Sublimation Pressure"))
lyt_sublimation = QtWidgets.QGridLayout(tab9)
if inspect.getsource(element._Sublimation_Pressure) != \
inspect.getsource(meos.MEoS._Sublimation_Pressure):
label = QtWidgets.QLabel(element._Sublimation_Pressure.__doc__)
label.setWordWrap(True)
lyt_sublimation.addWidget(label, 1, 1)
code_Sublimation = SimplePythonEditor()
code_Sublimation.setText(
inspect.getsource(element._Sublimation_Pressure))
lyt_sublimation.addWidget(
code_Sublimation, 2, 1)
elif element._sublimation:
if "__doi__" in element._sublimation:
eq = element._sublimation["__doi__"]
ref = "; ".join((eq["autor"], eq["title"], eq["ref"]))
ref += os.linesep
label2 = QtWidgets.QLabel(ref)
label2.setWordWrap(True)
lyt_sublimation.addWidget(label2, 1, 1)
if element._sublimation["eq"] == 1:
mathTex = r"$\frac{P_s}{P_r} = "
elif element._sublimation["eq"] == 2:
mathTex = r"$P_s - P_r = "
elif element._sublimation["eq"] == 3:
mathTex = r"$\ln \frac{P_s}{P_r} = "
mathTex += r"a_o + \sum a_1 \theta^{t_1} + "
mathTex += r"\sum a_2\left(1-\theta\right)^{t_2} + "
mathTex += r"\sum a_i\log \theta^{t_i}$"
label = QLabelMath(mathTex)
lyt_sublimation.addWidget(label, 2, 1)
Table_Sublimation = Tabla(
6, horizontalHeader=["a1", "n1", "a2", "n2", "a3", "n3"],
verticalHeader=True, stretch=False, readOnly=True)
if "a1" in element._sublimation:
Table_Sublimation.setColumn(0, element._sublimation["a1"])
Table_Sublimation.setColumn(1, element._sublimation["exp1"])
if "a2" in element._sublimation:
Table_Sublimation.setColumn(2, element._sublimation["a2"])
Table_Sublimation.setColumn(3, element._sublimation["exp2"])
if "a3" in element._sublimation:
Table_Sublimation.setColumn(4, element._sublimation["a3"])
Table_Sublimation.setColumn(5, element._sublimation["exp3"])
lyt_sublimation.addWidget(Table_Sublimation, 3, 1)
Table_Sublimation.resizeColumnsToContents()
else:
lyt_sublimation.addWidget(QtWidgets.QLabel(
self.tr("Not Implemented")), 1, 1)
lyt_sublimation.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 2, 1)
btBox = QtWidgets.QDialogButtonBox(
QtWidgets.QDialogButtonBox.StandardButton.Close)
btBox.clicked.connect(self.reject)
gridLayout.addWidget(btBox, 2, 1)
[docs]
class Widget_Viscosity_Data(QtWidgets.QWidget):
"""Widget to show viscosity data"""
[docs]
def __init__(self, element, eq, parent=None):
"""
element: element class for code extract
eq: dict with viscosity parameter"""
super().__init__(parent)
gridLayout = QtWidgets.QGridLayout(self)
if eq["eq"] == 0:
txt = element.__getattribute__(element, eq["method"]).__doc__
else:
txt = " ".join((eq["__doi__"]["autor"], eq["__doi__"]["title"],
eq["__doi__"]["ref"]))
ref = QtWidgets.QLabel(txt)
ref.setWordWrap(True)
gridLayout.addWidget(ref, 1, 1, 1, 3)
if eq["eq"] == 0:
# Hardcoded method, show code
code_Viscosity = SimplePythonEditor()
code = ""
for method in eq.get("__code__", ()):
code += inspect.getsource(method)
code += os.linesep
code += inspect.getsource(
element.__getattribute__(element, eq["method"]))
code_Viscosity.setText(code)
gridLayout.addWidget(code_Viscosity, 2, 1, 1, 3)
elif eq["eq"] == 1:
gridLayout.addWidget(QtWidgets.QLabel("ε/k"), 4, 1)
ek = Entrada_con_unidades(
float, value=eq.get("ek", 0), readOnly=True)
gridLayout.addWidget(ek, 4, 2)
gridLayout.addWidget(QtWidgets.QLabel("σ"), 5, 1)
sigma = Entrada_con_unidades(
float, value=eq.get("sigma", 0), readOnly=True)
gridLayout.addWidget(sigma, 5, 2)
tab = QtWidgets.QTabWidget()
gridLayout.addWidget(tab, 6, 1, 1, 3)
# Integral collision
Tabla_Collision = Tabla(
1, horizontalHeader=["b"], stretch=False, readOnly=True)
if "collision" in eq:
Tabla_Collision.setColumn(0, eq["collision"])
else:
Tabla_Collision.setDisabled(True)
Tabla_Collision.resizeColumnsToContents()
tab.addTab(Tabla_Collision, self.tr("Collision"))
# Virial
Tabla_Virial = Tabla(
2, horizontalHeader=["n", "t"], stretch=False, readOnly=True)
if "n_virial" in eq:
Tabla_Virial.setColumn(0, eq["n_virial"])
Tabla_Virial.setColumn(1, eq["t_virial"])
else:
Tabla_Virial.setDisabled(True)
Tabla_Virial.resizeColumnsToContents()
tab.addTab(Tabla_Virial, self.tr("Virial"))
# Close-packed
Tabla_Packed = Tabla(4, horizontalHeader=["f", "g1", "g", "t"],
stretch=False, readOnly=True)
if "CPf" in eq:
Tabla_Packed.setColumn(0, [eq["CPf"]])
Tabla_Packed.setColumn(1, [eq["CPg1"]])
Tabla_Packed.setColumn(2, eq["CPgi"])
Tabla_Packed.setColumn(3, eq["CPgi"])
else:
Tabla_Packed.setDisabled(True)
Tabla_Packed.resizeColumnsToContents()
tab.addTab(Tabla_Packed, self.tr("Close-packed density"))
# polynomial term
Tabla_Visco1 = Tabla(
5, horizontalHeader=["n", "t", "d", "g", "c"], stretch=False,
readOnly=True)
if "nr" in eq:
Tabla_Visco1.setColumn(0, eq["nr"])
Tabla_Visco1.setColumn(1, eq["tr"])
Tabla_Visco1.setColumn(2, eq["dr"])
if "gr" in eq:
Tabla_Visco1.setColumn(3, eq["gr"])
Tabla_Visco1.setColumn(4, eq["cr"])
else:
Tabla_Visco1.setDisabled(True)
Tabla_Visco1.resizeColumnsToContents()
tab.addTab(Tabla_Visco1, self.tr("Polinomial"))
# numerator of rational poly
Tabla_numerator = Tabla(
5, horizontalHeader=["n", "t", "d", "g", "c"], stretch=False,
readOnly=True)
if "nr_num" in eq:
Tabla_numerator.setColumn(0, eq["nr_num"])
Tabla_numerator.setColumn(1, eq["tr_num"])
Tabla_numerator.setColumn(2, eq["dr_num"])
if "gr_num" in eq:
Tabla_numerator.setColumn(3, eq["gr_num"])
Tabla_numerator.setColumn(4, eq["cr_num"])
else:
Tabla_numerator.setDisabled(True)
Tabla_numerator.resizeColumnsToContents()
tab.addTab(Tabla_numerator, self.tr("Numerator"))
# denominator of rational poly
Tabla_denominator = Tabla(
5, horizontalHeader=["n", "t", "d", "g", "c"], stretch=False,
readOnly=True)
if "nr_den" in eq:
Tabla_denominator.setColumn(0, eq["nr_den"])
Tabla_denominator.setColumn(1, eq["tr_den"])
Tabla_denominator.setColumn(2, eq["dr_den"])
Tabla_denominator.setColumn(
3, eq.get("cr_den", [0]*len(eq["nr_den"])))
Tabla_denominator.setColumn(
4, eq.get("gr_den", [0]*len(eq["nr_den"])))
else:
Tabla_denominator.setDisabled(True)
Tabla_denominator.resizeColumnsToContents()
tab.addTab(Tabla_denominator, self.tr("Denominator"))
gridLayout.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 10, 3)
elif eq["eq"] == 2:
Tabla_Visco2 = Tabla(
3, horizontalHeader=["b", "F", "E"], stretch=False,
readOnly=True)
if "collision" in eq:
Tabla_Visco2.setColumn(0, eq["collision"])
Tabla_Visco2.setColumn(1, eq["F"])
Tabla_Visco2.setColumn(2, eq["E"])
Tabla_Visco2.resizeColumnsToContents()
gridLayout.addWidget(Tabla_Visco2, 6, 1, 1, 3)
gridLayout.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 10, 3)
elif eq["eq"] == 3:
# ecs formulation
gridLayout.addWidget(QtWidgets.QLabel("ε/k"), 4, 1)
ek = Entrada_con_unidades(
float, value=eq.get("ek", None), readOnly=True)
gridLayout.addWidget(ek, 4, 2)
gridLayout.addWidget(QtWidgets.QLabel("σ"), 5, 1)
sigma = Entrada_con_unidades(
float, value=eq.get("sigma", None), readOnly=True)
gridLayout.addWidget(sigma, 5, 2)
gridLayout.addWidget(QtWidgets.QLabel(
self.tr("ECS formulation")
+ ": " + eq["ref"]), 5, 1, 1, 2)
elif eq["eq"] == 4:
# Quiñones-Cisneros formulation
gridLayout.addWidget(QtWidgets.QLabel("ε/k"), 4, 1)
ek = Entrada_con_unidades(
float, value=eq.get("ek", None), readOnly=True)
gridLayout.addWidget(ek, 4, 2)
gridLayout.addWidget(QtWidgets.QLabel("σ"), 5, 1)
sigma = Entrada_con_unidades(
float, value=eq.get("sigma", None), readOnly=True)
gridLayout.addWidget(sigma, 5, 2)
Tabla_Visco4 = Tabla(
8, stretch=False, readOnly=True,
horizontalHeader=["a", "b", "c", "A", "B", "C", "D", "E"])
fmt = {"fmt": 1, "decimales": 10}
Tabla_Visco4.setColumn(0, eq["a"], **fmt)
Tabla_Visco4.setColumn(1, eq["b"], **fmt)
Tabla_Visco4.setColumn(2, eq["c"], **fmt)
Tabla_Visco4.setColumn(3, eq["A"], **fmt)
Tabla_Visco4.setColumn(4, eq["B"], **fmt)
Tabla_Visco4.setColumn(5, eq["C"], **fmt)
if "D" in eq:
Tabla_Visco4.setColumn(6, eq["D"], **fmt)
Tabla_Visco4.setColumn(7, eq["E"], **fmt)
Tabla_Visco4.resizeColumnsToContents()
gridLayout.addWidget(Tabla_Visco4, 6, 1, 1, 3)
gridLayout.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 10, 3)
[docs]
class Widget_Conductivity_Data(QtWidgets.QWidget):
"""Widget to show thermal conductivity data"""
[docs]
def __init__(self, element, eq, parent=None):
"""
element: element class for code extract
eq: dict with thermal conductivity parameter"""
super().__init__(parent)
gridLayout = QtWidgets.QGridLayout(self)
if eq["eq"] == 0:
txt = element.__getattribute__(element, eq["method"]).__doc__
else:
txt = " ".join((eq["__doi__"]["autor"], eq["__doi__"]["title"],
eq["__doi__"]["ref"]))
ref = QtWidgets.QLabel(txt)
ref.setWordWrap(True)
gridLayout.addWidget(ref, 1, 1, 1, 3)
if eq["eq"] == 0:
# Hardcoded method, show code
code = SimplePythonEditor()
txt = ""
for method in eq.get("__code__", ()):
txt += inspect.getsource(method)
txt += os.linesep
txt += inspect.getsource(
element.__getattribute__(element, eq["method"]))
code.setText(txt)
gridLayout.addWidget(code, 2, 1, 1, 3)
elif eq["eq"] == 1:
gridLayout.addWidget(QtWidgets.QLabel("No_visco"), 3, 1)
no = Entrada_con_unidades(
float, value=eq.get("no_visco", 0), readOnly=True)
gridLayout.addWidget(no, 3, 2)
Tabla_Therm1 = Tabla(
13, stretch=False, readOnly=True,
horizontalHeader=["no_viscoCP", "to_viscoCP", "no", "to",
"no_num", "to_num", "no_den", "to_den",
"nr", "tr", "dr", "gr", "cr"])
if "no_viscoCP" in eq:
Tabla_Therm1.setColumn(0, eq["no_viscoCP"])
Tabla_Therm1.setColumn(1, eq["to_viscoCP"])
if "no" in eq:
Tabla_Therm1.setColumn(2, eq["no"])
Tabla_Therm1.setColumn(3, eq["to"])
if "no_num" in eq:
Tabla_Therm1.setColumn(4, eq["no_num"])
Tabla_Therm1.setColumn(5, eq["to_num"])
Tabla_Therm1.setColumn(6, eq["no_num"])
Tabla_Therm1.setColumn(7, eq["to_num"])
if "nr" in eq:
Tabla_Therm1.setColumn(8, eq["nr"])
Tabla_Therm1.setColumn(9, eq["tr"])
Tabla_Therm1.setColumn(10, eq["dr"])
if "gr" in eq:
Tabla_Therm1.setColumn(11, eq["gr"])
Tabla_Therm1.setColumn(12, eq["cr"])
Tabla_Therm1.resizeColumnsToContents()
gridLayout.addWidget(Tabla_Therm1, 4, 1, 1, 3)
if "special" in eq:
# Hardcoded method
gridLayout.addWidget(QtWidgets.QLabel(
self.tr("Special hardcoded term")), 5, 1, 1, 3)
code_SpecialK = SimplePythonEditor()
code = inspect.getsource(
element.__getattribute__(element, eq["special"]))
code_SpecialK.setText(code)
gridLayout.addWidget(code_SpecialK, 6, 1, 1, 3)
elif eq["eq"] == 2:
Tabla_Therm2 = Tabla(
3, horizontalHeader=["G", "F", "E"], stretch=False,
readOnly=True)
Tabla_Therm2.setColumn(0, eq["no"])
Tabla_Therm2.setColumn(1, eq["F"])
Tabla_Therm2.setColumn(2, eq["E"])
Tabla_Therm2.resizeColumnsToContents()
gridLayout.addWidget(Tabla_Therm2, 3, 1, 1, 3)
elif eq["eq"] == 3:
Tabla_Therm3 = Tabla(
2, horizontalHeader=["G", "E"], stretch=False, readOnly=True)
Tabla_Therm3.setColumn(0, eq["G"])
Tabla_Therm3.setColumn(1, eq["E"])
Tabla_Therm3.resizeColumnsToContents()
gridLayout.addWidget(Tabla_Therm3, 3, 1, 1, 3)
gridLayout.addWidget(QtWidgets.QLabel("ε/k"), 4, 1)
ek = Entrada_con_unidades(float, value=eq["ek"], readOnly=True)
gridLayout.addWidget(ek, 4, 2)
if "critical" in eq and eq["critical"]:
gridLayout.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Fixed,
QtWidgets.QSizePolicy.Policy.Fixed), 5, 3)
gridLayout.addWidget(QtWidgets.QLabel(
self.tr("Critical enhancement")), 7, 1, 1, 3)
if eq["critical"] == 1:
gridLayout.addWidget(QtWidgets.QLabel("ek"), 8, 1)
ek = Entrada_con_unidades(float, value=eq["ek"], readOnly=True)
gridLayout.addWidget(ek, 8, 2)
gridLayout.addWidget(QtWidgets.QLabel("f"), 9, 1)
f = Entrada_con_unidades(float, value=eq["f"], readOnly=True)
gridLayout.addWidget(f, 9, 2)
gridLayout.addWidget(QtWidgets.QLabel("gm"), 10, 1)
gm = Entrada_con_unidades(float, value=eq["gm"], readOnly=True)
gridLayout.addWidget(gm, 10, 2)
elif eq["critical"] == 2:
v = eq["X"]
gridLayout.addWidget(QtWidgets.QLabel("X₁"), 8, 1)
X1 = Entrada_con_unidades(float, value=v[0], readOnly=True)
gridLayout.addWidget(X1, 8, 2)
gridLayout.addWidget(QtWidgets.QLabel("X₂"), 9, 1)
X2 = Entrada_con_unidades(float, value=v[1], readOnly=True)
gridLayout.addWidget(X2, 9, 2)
gridLayout.addWidget(QtWidgets.QLabel("X₃"), 10, 1)
X3 = Entrada_con_unidades(float, value=v[2], readOnly=True)
gridLayout.addWidget(X3, 10, 2)
gridLayout.addWidget(QtWidgets.QLabel("Xㄙ"), 11, 1)
X4 = Entrada_con_unidades(float, value=v[3], readOnly=True)
gridLayout.addWidget(X4, 11, 2)
gridLayout.addWidget(QtWidgets.QLabel("Z"), 12, 1)
Z = Entrada_con_unidades(float, value=eq["Z"], readOnly=True)
gridLayout.addWidget(Z, 12, 2)
elif eq["critical"] == 3:
gridLayout.addWidget(QtWidgets.QLabel("gnu"), 8, 1)
gnu = Entrada_con_unidades(
float, value=eq["gnu"], readOnly=True)
gridLayout.addWidget(gnu, 8, 2)
gridLayout.addWidget(QtWidgets.QLabel("γ"), 9, 1)
gamma = Entrada_con_unidades(
float, value=eq["gamma"], readOnly=True)
gridLayout.addWidget(gamma, 9, 2)
gridLayout.addWidget(QtWidgets.QLabel("Ro"), 10, 1)
R0 = Entrada_con_unidades(
float, value=eq["R0"], readOnly=True)
gridLayout.addWidget(R0, 10, 2)
gridLayout.addWidget(QtWidgets.QLabel("ξo"), 11, 1)
Xio = Entrada_con_unidades(
float, value=eq["Xio"], readOnly=True)
gridLayout.addWidget(Xio, 11, 2)
gridLayout.addWidget(QtWidgets.QLabel("Γo"), 12, 1)
gam0 = Entrada_con_unidades(
float, value=eq["gam0"], readOnly=True)
gridLayout.addWidget(gam0, 12, 2)
gridLayout.addWidget(QtWidgets.QLabel("qd"), 13, 1)
qd = Entrada_con_unidades(
float, value=eq["qd"], readOnly=True)
gridLayout.addWidget(qd, 13, 2)
elif eq["critical"] == 4:
Tabla_Thermk4 = Tabla(
5, horizontalHeader=["nc", "αc", "tc", "βc", "dc"],
stretch=False, readOnly=True)
Tabla_Thermk4.setColumn(0, eq["nc"])
Tabla_Thermk4.setColumn(1, eq["alfac"])
Tabla_Thermk4.setColumn(2, eq["tc"])
Tabla_Thermk4.setColumn(3, eq["betac"])
Tabla_Thermk4.setColumn(4, eq["dc"])
Tabla_Thermk4.resizeColumnsToContents()
gridLayout.addWidget(Tabla_Thermk4, 8, 1, 1, 3)
elif isinstance(eq["critical"], str):
# Hardcoded method
code_ThermK = SimplePythonEditor()
code = inspect.getsource(
element.__getattribute__(element, eq["critical"]))
code_ThermK.setText(code)
gridLayout.addWidget(code_ThermK, 8, 1, 1, 3)
gridLayout.addItem(QtWidgets.QSpacerItem(
10, 10, QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Expanding), 15, 3)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
# SteamTables = Ui_ChooseFluid()
# SteamTables = Dialog_InfoFluid(mEoS.NH3)
SteamTables = Widget_MEoS_Data(mEoS.NH3.gao)
# for i, cmp in enumerate(mEoS.__all__):
# print(i, cmp.__module__)
# SteamTables = transportDialog(mEoS.__all__[16])
SteamTables.show()
sys.exit(app.exec())