summaryrefslogtreecommitdiff
path: root/src/main/python/DockWidgets/DockWidgetMaterialStream.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/python/DockWidgets/DockWidgetMaterialStream.py')
-rw-r--r--src/main/python/DockWidgets/DockWidgetMaterialStream.py368
1 files changed, 368 insertions, 0 deletions
diff --git a/src/main/python/DockWidgets/DockWidgetMaterialStream.py b/src/main/python/DockWidgets/DockWidgetMaterialStream.py
new file mode 100644
index 0000000..d2aefb6
--- /dev/null
+++ b/src/main/python/DockWidgets/DockWidgetMaterialStream.py
@@ -0,0 +1,368 @@
+import os, sys
+current = os.path.dirname(os.path.realpath(__file__))
+parent = os.path.dirname(current)
+parentPath = os.path.dirname(parent)
+sys.path.append(parentPath)
+
+from PyQt5.QtCore import *
+from PyQt5.QtWidgets import *
+from PyQt5.QtGui import *
+from PyQt5.uic import loadUiType
+from python.utils.ComponentSelector import *
+from python.utils.Graphics import *
+
+ui_dialog,_ = loadUiType(parentPath+'/ui/DockWidgets/DockWidgetMaterialStream.ui')
+
+class DockWidgetMaterialStream(QDockWidget,ui_dialog):
+
+ def __init__(self,name,comptype,obj,container,parent=None):
+ QDockWidget.__init__(self,parent)
+ self.setupUi(self)
+ self.setWindowTitle(obj.name)
+ self.name=name
+ self.obj=obj
+ self.type = comptype
+ self.input_dict = {}
+ self.x_pclist = []
+
+ self.comboBox.currentIndexChanged.connect(self.mode_selection)
+
+ self.pushButton_2.clicked.connect(self.param)
+ self.dict = {} # a dictionary
+
+ self.name_type = None
+ self.container = container
+
+ header = QTreeWidgetItem(['Compound','Value','Unit'])
+ self.mTreeWidget.setHeaderItem(header)
+ self.lTreeWidget.setHeaderItem(header)
+ self.vTreeWidget.setHeaderItem(header)
+ lines = [line.rstrip('\n') for line in open(parentPath+'/python/utils/thermopackage.txt')]
+ for j in lines:
+ self.cbTP.addItem(str(j))
+ self.modes()
+
+ # input data tab
+ def modes(self):
+ modes_list = self.obj.modes_list
+ if(modes_list):
+ for j in modes_list:
+ self.comboBox.addItem(str(j))
+ self.comboBox.setCurrentText(self.obj.mode)
+ self.mode_selection()
+ else:
+ self.input_dict= {}
+ self.input_dict = self.obj.param_getter()
+ self.input_params_list()
+
+ def mode_selection(self):
+ self.input_dict= {}
+ try: # removing existing rows while changing modes
+ for i in reversed(range(self.formLayout.count())):
+ self.formLayout.removeRow(i)
+ except Exception as e:
+ print(e)
+ self.input_dict = self.obj.param_getter(self.comboBox.currentText())
+ self.obj.mode = self.comboBox.currentText()
+ self.input_params_list()
+
+ def input_params_list(self):
+ try:
+ for c,i in enumerate(self.input_dict):
+ if(i=="x_pc"):
+ noc = len(compound_selected)
+ #print(noc)
+ self.x_pclist.clear()
+
+ self.comp_gb = QGroupBox("Mole Fractions")
+ lay = QGridLayout()
+ for j in range(noc):
+ try:
+ l = QLineEdit(str(self.obj.variables['x_pc']['value'][j]))
+ except:
+ l = QLineEdit()
+ l.setFixedWidth(100)
+ self.input_dict[i] = "x_pc"
+ lay.addWidget(QLabel(str(compound_selected[j])+":"),j,0, alignment= Qt.AlignLeft)
+ lay.addWidget(l,j,1, alignment=Qt.AlignCenter)
+ self.x_pclist.append(l)
+ lay.setSizeConstraint(QLayout.SetFixedSize)
+ self.comp_gb.setLayout(lay)
+ self.formLayout.addRow(self.comp_gb)
+ elif i == "Thermo Package":
+ self.cbTP.setCurrentText(self.input_dict[i])
+ else:
+ #print("elseloop")
+ l = QLineEdit()
+ if self.input_dict[i] != None:
+ l.setText(str(self.input_dict[i]))
+ l.setFixedWidth(80)
+ lay = QGridLayout()
+ if i !='MolFlow':
+ lay.addWidget(QLabel(self.obj.variables[i]['name']+":"),0,0, alignment=Qt.AlignLeft)
+ else:
+ lay.addWidget(QLabel(i+":"),0,0, alignment=Qt.AlignLeft)
+ lay.addWidget(l,0,1, alignment=Qt.AlignCenter)
+ if(i != 'MolFlow'):
+ lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignLeft)
+ else:
+ lay.addWidget(QLabel("mol/s"),0,2, alignment=Qt.AlignLeft)
+ self.formLayout.addRow(lay)
+ self.input_dict[i] = l
+
+
+ except Exception as e:
+ print(e)
+
+ def show_error(self):
+ QMessageBox.about(self, 'Important', "Please fill all fields with data")
+
+ def update_compounds(self):
+ try:
+ noc = len(compound_selected)
+ #print(noc)
+ self.x_pclist.clear()
+
+ lay = QGridLayout()
+ for j in range(noc):
+ l = QLineEdit()
+ lay.addWidget(QLabel(str(compound_selected[j]) + ":"), j, 0, alignment=Qt.AlignLeft)
+ lay.addWidget(l, j, 1, alignment=Qt.AlignCenter)
+ self.x_pclist.append(l)
+ lay.setSizeConstraint(QLayout.SetFixedSize)
+ self.comp_gb.setLayout(lay)
+ indexx = self.comboBox.currentIndex()
+ self.comboBox.setCurrentIndex(1)
+ self.comboBox.setCurrentIndex(indexx)
+ self.obj.init_variables()
+ except Exception as e:
+ print(e)
+
+ def param(self):
+ try:
+ self.dict={}
+ #print("param.input_dict ", self.input_dict)
+ for i in self.input_dict:
+ #print(i)
+ if(i =="x_pc"):
+ l=[]
+ mf = []
+ total_moles = 0
+ for mol_frac in self.x_pclist:
+ if (mol_frac.text()):
+ l.append(mol_frac.text())
+ total_moles += float(l[-1])
+ else:
+ self.show_error()
+ break
+ for c in range(len(compound_selected)):
+ mf.append(str(float(l[c])/total_moles))
+ self.obj.variables[compound_selected[c]]['value'] = str(float(l[c])/total_moles)
+ self.x_pclist[c].setText(mf[-1])
+ self.dict[i] = ",".join(mf)
+ elif (i == "Thermo Package"):
+ self.dict[i] = self.cbTP.currentText()
+ else:
+ if (self.input_dict[i].text()):
+ self.dict[i] = self.input_dict[i].text()
+ else:
+ #print(self.input_dict[i])
+ self.show_error()
+ break
+
+ #print("param ", self.dict)
+
+ self.obj.param_setter(self.dict)
+
+ for i in self.container.graphics.graphicsView.items():
+ try:
+ if(i.name == self.name):
+ i.update_tooltip()
+ except:
+ pass
+ if(self.isVisible()):
+ currentVal = self.parent().container.graphics.graphicsView.horizontalScrollBar().value()
+ self.parent().container.graphics.graphicsView.horizontalScrollBar().setValue(currentVal-189)
+ self.hide()
+
+ except Exception as e:
+ print(e)
+
+ def update_input_values(self):
+ self.init()
+
+ @staticmethod
+ def show_result(ms_lst):
+ for i in ms_lst:
+ i.results_category(i.name)
+
+ def clear_results(self):
+ self.mTreeWidget.clear()
+ self.mTableWidget.setRowCount(0)
+ self.lTreeWidget.clear()
+ self.lTableWidget.setRowCount(0)
+ self.vTreeWidget.clear()
+ self.vTableWidget.setRowCount(0)
+
+ # result data tab
+ def results_category(self,name):
+ try:
+ #print("Under result category name ", name)
+ result=self.container.result
+ obj = self.container.fetch_object(name)
+
+
+ d = {"Mole Fraction":"x_pc", "Mass Fraction":"xm_pc", "Mole Flow":"F_pc", "Mass Flow":"Fm_pc"}
+ ms_lst = list(d.keys())
+ klst = list(d.values())
+
+ p = {"Pressure":"P", "Temperature":"T","Vapour Phase Mole Fraction":"xvap", "Phase Molar Enthalpy":"H_p",
+ "Phase Molar Entropy":"S_p", "Molar Flow Rate":"F_p","Mass Flow Rate":"Fm_p"}
+
+ # Amounts Tab
+ if obj.type == 'MaterialStream':
+ ll = [] # list for basis names
+ for basis in d:
+ propertyname = name + '.' + d[basis]
+ #print("basis ", basis, propertyname)
+ for i in result[0]:
+ if (propertyname in i):
+ ll.append(i)
+ #print(ll)
+
+ j = 0
+ namee = 'none'
+ #print("namee ", namee)
+ #initialization for treewidgets
+ lroot = 1
+ mroot = 1
+ vroot = 1
+
+
+ for i,k in enumerate(ll):
+ ind = result[0].index(k)
+ #print("index ", ind)
+ #print("str ", k)
+ resultval = str(result[-1][ind])
+ #print("######Resultsfetch####",resultval)
+ #print(k[k.find(".")+1:k.find("[")])
+ obj.variables[k.split('.')[1]]['value'] = resultval
+
+ if namee not in k:
+ mroot = QTreeWidgetItem(self.mTreeWidget, [ms_lst[j]])
+ lroot = QTreeWidgetItem(self.lTreeWidget, [ms_lst[j]])
+ vroot = QTreeWidgetItem(self.vTreeWidget, [ms_lst[j]])
+ namee = klst[j]
+
+ phase_no = int(k[k.index(',') - 1]) # phase no is from modelica list
+ compound_no = int(k[k.index(',') + 1]) - 1 # compound is from python list
+
+ if phase_no == 1:
+ child = QTreeWidgetItem(mroot, [compound_selected[compound_no], str(round(float(resultval),4)),
+ obj.variables[k.split('.')[1]]['unit']])
+ elif phase_no == 2:
+ child = QTreeWidgetItem(lroot, [compound_selected[compound_no], str(round(float(resultval),4)),
+ obj.variables[k.split('.')[1]]['unit']])
+ elif phase_no == 3:
+ child = QTreeWidgetItem(vroot, [compound_selected[compound_no], str(round(float(resultval),4)),
+ obj.variables[k.split('.')[1]]['unit']])
+ if (compound_no + 1) == len(compound_selected):
+ j += 1
+
+
+
+ # Phase Properties Tab
+ phaseResLst = []
+ for phase in p:
+ propertyname = name + '.' + p[phase]
+ #print("phase ", phase, propertyname)
+ for i in result[0]:
+ if i.find('['):
+ if (propertyname == i[0:i.find('[')]):
+ phaseResLst.append(i)
+ if propertyname == i:
+ phaseResLst.append(i)
+ #print(phaseResLst)
+
+ self.mTableWidget.setRowCount(0)
+ self.lTableWidget.setRowCount(0)
+ self.vTableWidget.setRowCount(0)
+
+ for i,val in enumerate(phaseResLst):
+ ind = result[0].index(val)
+ resultval = str(result[-1][ind])
+ #print(resultval, i, val)
+ obj.variables[val.split('.')[1]]['value'] = resultval
+ if '[' in val:
+ #print(val)
+ temp = val[val.find('.')+1:val.find('[')]
+ #print(temp)
+ if '1' in val.split('.')[1]:
+ #print(obj.variables[val.split('.')[1]]['name'])
+ mrowPosition = self.mTableWidget.rowCount()
+ self.mTableWidget.insertRow(mrowPosition)
+ self.mTableWidget.setItem(mrowPosition , 0, QTableWidgetItem(obj.variables[val.split('.')[1]]['name']))
+ self.mTableWidget.setItem(mrowPosition , 1, QTableWidgetItem(str(round(float(resultval),4))))
+ self.mTableWidget.setItem(mrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit']))
+ self.mTableWidget.resizeColumnsToContents()
+
+ if '2' in val.split('.')[1]:
+ lrowPosition = self.lTableWidget.rowCount()
+ self.lTableWidget.insertRow(lrowPosition)
+ self.lTableWidget.setItem(lrowPosition , 0, QTableWidgetItem(obj.variables[val.split('.')[1]]['name']))
+ self.lTableWidget.setItem(lrowPosition , 1, QTableWidgetItem(str(round(float(resultval),4))))
+ self.lTableWidget.setItem(lrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit']))
+ self.lTableWidget.resizeColumnsToContents()
+ if '3' in val.split('.')[1]:
+ vrowPosition = self.vTableWidget.rowCount()
+ self.vTableWidget.insertRow(vrowPosition)
+ self.vTableWidget.setItem(vrowPosition , 0, QTableWidgetItem(obj.variables[val.split('.')[1]]['name']))
+ self.vTableWidget.setItem(vrowPosition , 1, QTableWidgetItem(str(round(float(resultval),4))))
+ self.vTableWidget.setItem(vrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit']))
+ self.vTableWidget.resizeColumnsToContents()
+ if not '[' in val:
+ #print(obj.variables[val.split('.')[1]]['name'])
+ mrowPosition = self.mTableWidget.rowCount()
+ self.mTableWidget.insertRow(mrowPosition)
+ self.mTableWidget.setItem(mrowPosition , 0, QTableWidgetItem(obj.variables[val.split('.')[1]]['name']))
+ self.mTableWidget.setItem(mrowPosition , 1, QTableWidgetItem(str(round(float(resultval),4))))
+ self.mTableWidget.setItem(mrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit']))
+ self.mTableWidget.resizeColumnsToContents()
+
+
+ # updating the input data from fetched results from simulation
+ #print(self.comboBox.currentText())
+
+ self.input_dict = {}
+ self.input_dict = self.obj.param_getter(self.comboBox.currentText())
+ # print("before", self.input_dict)
+ for i in range(len(compound_selected)):
+ #print(i)
+ self.input_dict['x_pc[1,' + str(i+1) + ']'] = self.obj.variables['x_pc[1,' + str(i+1) +']']['value']
+ # self.input_dict['thermo_package'] = temp
+ # print("after", self.input_dict)
+
+ # changing index for updating the input data
+ indexx = self.comboBox.currentIndex()
+ self.comboBox.setCurrentIndex(1)
+ self.comboBox.setCurrentIndex(indexx)
+
+ try:
+
+ for i in self.parent().container.graphics.graphicsView.items():
+ try:
+ if i.obj == self.obj:
+ i.update_tooltip()
+ except Exception as e:
+ pass
+ except Exception as e:
+ print(e)
+
+
+ except Exception as e:
+ print(e)
+ def closeEvent(self,event):
+ scrollHVal = self.parent().container.graphics.graphicsView.horizontalScrollBarVal
+ currentVal = self.parent().container.graphics.graphicsView.horizontalScrollBar().value()
+ self.parent().container.graphics.graphicsView.horizontalScrollBar().setValue(currentVal-189)
+ \ No newline at end of file