diff options
author | Priyam Nayak | 2021-02-09 18:32:14 +0530 |
---|---|---|
committer | GitHub | 2021-02-09 18:32:14 +0530 |
commit | 47a2cf43129fa18cbac56df8d53208a1b21ea4f7 (patch) | |
tree | 1e966c67a1c2e920c2e0521f2517058a7732d2aa | |
parent | 4e96691bc758904e05d0e03f0368dcbcd1efaec3 (diff) | |
parent | 3dd09f5b8d5326ce57db71da1fac77386dfbd700 (diff) | |
download | Chemical-Simulator-GUI-47a2cf43129fa18cbac56df8d53208a1b21ea4f7.tar.gz Chemical-Simulator-GUI-47a2cf43129fa18cbac56df8d53208a1b21ea4f7.tar.bz2 Chemical-Simulator-GUI-47a2cf43129fa18cbac56df8d53208a1b21ea4f7.zip |
Merge pull request #11 from pravindalve/master
Fixes for reloading data
30 files changed, 337 insertions, 742 deletions
@@ -10,5 +10,5 @@ Simulator/simulateEQN.mos __pycache__/* .idea/* DockWidgets/__pycache__/* -undo.dat +Undo.dat test.py diff --git a/Container.py b/Container.py index c77d631..397aaf0 100644 --- a/Container.py +++ b/Container.py @@ -127,7 +127,7 @@ class Container(): print(mode) self.compounds = compound_selected self.flowsheet = Flowsheet() - self.flowsheet.add_compound_list(self.compounds) + self.flowsheet.add_compound_list([c[:c.index('(')] for c in self.compounds]) print("######## connection master#########\n",self.conn) for i in self.unit_operations : self.flowsheet.add_unit_operations(i) diff --git a/DiagramRepresentation_Component[dot]py_2019work.uxf b/DiagramRepresentation_Component[dot]py_2019work.uxf new file mode 100644 index 0000000..851904b --- /dev/null +++ b/DiagramRepresentation_Component[dot]py_2019work.uxf @@ -0,0 +1,62 @@ +<diagram program="umletino" version="14.3.0"><zoom_level>10</zoom_level><element><id>UMLClass</id><coordinates><x>30</x><y>60</y><w>100</w><h>110</h></coordinates><panel_attributes>Chemsep +Database</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>610</x><y>70</y><w>130</w><h>40</h></coordinates><panel_attributes>get_comp_name_list()</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>430</x><y>70</y><w>100</w><h>40</h></coordinates><panel_attributes>comp_name_list</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>240</x><y>70</y><w>100</w><h>40</h></coordinates><panel_attributes>Comp Name</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>180</x><y>210</y><w>100</w><h>40</h></coordinates><panel_attributes>get_value()</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>350</x><y>210</y><w>100</w><h>40</h></coordinates><panel_attributes>get_comp_prop()</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>30</x><y>350</y><w>120</w><h>120</h></coordinates><panel_attributes>Doct 1 {Dictionary} + +DB1: comp1, +comp2...comp n + +DB2: comp1, +comp2...comp n</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>170</x><y>350</y><w>100</w><h>40</h></coordinates><panel_attributes>comp</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>380</x><y>350</y><w>100</w><h>40</h></coordinates><panel_attributes>get_object()</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>590</x><y>350</y><w>100</w><h>40</h></coordinates><panel_attributes>removing + attribute</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>820</x><y>350</y><w>130</w><h>40</h></coordinates><panel_attributes>compound_selected</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>500</x><y>490</y><w>100</w><h>40</h></coordinates><panel_attributes>prop_list</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>690</x><y>490</y><w>100</w><h>40</h></coordinates><panel_attributes>Dict</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>500</x><y>600</y><w>100</w><h>40</h></coordinates><panel_attributes>final_mo()</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>700</x><y>600</y><w>100</w><h>40</h></coordinates><panel_attributes>addToTable()</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>730</x><y>390</y><w>30</w><h>60</h></coordinates><panel_attributes>lt=<<-</panel_attributes><additional_attributes>10;40;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>540</x><y>530</y><w>120</w><h>90</h></coordinates><panel_attributes>lt=<<- +send information +for simulation</panel_attributes><additional_attributes>10;70;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>730</x><y>530</y><w>80</w><h>90</h></coordinates><panel_attributes>lt=<<- +send data +to table</panel_attributes><additional_attributes>10;70;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>130</x><y>70</y><w>130</w><h>60</h></coordinates><panel_attributes>lt=<<- +Looping through +"compound" +to get each element</panel_attributes><additional_attributes>110;20;10;20</additional_attributes></element><element><id>Relation</id><coordinates><x>270</x><y>350</y><w>130</w><h>60</h></coordinates><panel_attributes>lt=<<- +Find +which database +it belongs to</panel_attributes><additional_attributes>110;20;10;20</additional_attributes></element><element><id>Relation</id><coordinates><x>480</x><y>350</y><w>130</w><h>60</h></coordinates><panel_attributes>lt=<<- +get the +removing + attribute</panel_attributes><additional_attributes>110;20;10;20</additional_attributes></element><element><id>Relation</id><coordinates><x>690</x><y>350</y><w>150</w><h>60</h></coordinates><panel_attributes>lt=<<- +get original name +and save +it in the list</panel_attributes><additional_attributes>130;20;10;20</additional_attributes></element><element><id>Relation</id><coordinates><x>330</x><y>70</y><w>130</w><h>90</h></coordinates><panel_attributes>lt=<<- +appending +db_name +"self_name" +and saving in the list +</panel_attributes><additional_attributes>100;20;20;20</additional_attributes></element><element><id>Relation</id><coordinates><x>530</x><y>70</y><w>100</w><h>60</h></coordinates><panel_attributes>lt=<<- +function +to fetch +the list</panel_attributes><additional_attributes>80;20;10;20</additional_attributes></element><element><id>UMLSyncBarHorizontal</id><coordinates><x>230</x><y>150</y><w>160</w><h>20</h></coordinates><panel_attributes>{joinSpec= +date is on or +after July 1st +and the exam +is passed}</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLSyncBarHorizontal</id><coordinates><x>540</x><y>420</y><w>250</w><h>20</h></coordinates><panel_attributes>{joinSpec= +date is on or +after July 1st +and the exam +is passed}</panel_attributes><additional_attributes></additional_attributes></element><element><id>Relation</id><coordinates><x>540</x><y>430</y><w>140</w><h>80</h></coordinates><panel_attributes>lt=<<- +get_comp_prop() +get_original_name()</panel_attributes><additional_attributes>10;60;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>730</x><y>430</y><w>90</w><h>80</h></coordinates><panel_attributes>lt=<<- +get_value() </panel_attributes><additional_attributes>10;60;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>280</x><y>110</y><w>30</w><h>70</h></coordinates><panel_attributes>lt=<<-</panel_attributes><additional_attributes>10;50;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>230</x><y>160</y><w>120</w><h>70</h></coordinates><panel_attributes>lt=<<- +Get Value like + CAS Number etc</panel_attributes><additional_attributes>10;50;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>360</x><y>160</y><w>170</w><h>70</h></coordinates><panel_attributes>lt=<<- +Get component properties</panel_attributes><additional_attributes>10;50;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>210</x><y>290</y><w>130</w><h>80</h></coordinates><panel_attributes>lt=<<- +Text from Line Edit</panel_attributes><additional_attributes>10;60;10;10</additional_attributes></element><element><id>Relation</id><coordinates><x>810</x><y>460</y><w>60</w><h>30</h></coordinates><panel_attributes>lt=<<-</panel_attributes><additional_attributes>40;10;10;10</additional_attributes></element><element><id>UMLClass</id><coordinates><x>860</x><y>450</y><w>110</w><h>80</h></coordinates><panel_attributes>lt=. +CAS Number +Molecular wt +Name +Molecular Formula</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>170</x><y>410</y><w>110</w><h>50</h></coordinates><panel_attributes>lt=. +comp name +appended with +database name</panel_attributes><additional_attributes></additional_attributes></element><element><id>UMLClass</id><coordinates><x>10</x><y>490</y><w>200</w><h>120</h></coordinates><panel_attributes>lt=. +Keys: Instances of the databances + +Values: 'get_comp_name_list()' + +'lines' : = stores compounds from +databases which is then sent to +model for auto_complete feature.</panel_attributes><additional_attributes></additional_attributes></element></diagram>
\ No newline at end of file diff --git a/DockWidgets/DockWidget.py b/DockWidgets/DockWidget.py index b3997f3..97ac7c8 100644 --- a/DockWidgets/DockWidget.py +++ b/DockWidgets/DockWidget.py @@ -32,6 +32,7 @@ class DockWidget(QDockWidget,ui_dialog): if(modes_list): for j in modes_list: self.comboBox.addItem(str(self.obj.variables[j]['name'])) + self.comboBox.setCurrentText(self.obj.variables[self.obj.mode]['name']) self.mode_selection() else: self.comboBox.setDisabled(True) @@ -59,7 +60,7 @@ class DockWidget(QDockWidget,ui_dialog): print(i) if i == None: continue - l = QLineEdit(self.obj.variables[i]['value']) + l = QLineEdit(str(self.obj.variables[i]['value'])) lay = QGridLayout() lay.addWidget(QLabel(self.obj.variables[i]['name']+":"),0,0, alignment=Qt.AlignLeft) lay.addWidget(l,0,1, alignment=Qt.AlignCenter) @@ -69,6 +70,7 @@ class DockWidget(QDockWidget,ui_dialog): except Exception as e: print(e) + def show_error(self): QMessageBox.about(self, 'Important', "Please fill all fields with data") diff --git a/DockWidgets/DockWidget.txt b/DockWidgets/DockWidget.txt deleted file mode 100644 index b14eef8..0000000 --- a/DockWidgets/DockWidget.txt +++ /dev/null @@ -1,636 +0,0 @@ -from PyQt5.QtCore import * -from PyQt5.QtWidgets import * -from PyQt5.QtGui import * -from PyQt5.uic import loadUiType -import pandas as pd -from functools import partial -from component_selector import * -from collections import defaultdict -from Graphics import * - -ui_dialog,_ = loadUiType('DockWidget.ui') - -class DockWidget(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.inputdict = {} - self.x_pclist = [] - self.modes() - self.comboBox.currentIndexChanged.connect(self.modeSelection) - - print("constructor ", self.inputdict) - self.pushButton_2.clicked.connect(self.param) - self.dict = {} - - self.nameType = None - self.container = container - - header = QTreeWidgetItem(['Compound','Value','Unit']) - self.mTreeWidget.setHeaderItem(header) - self.lTreeWidget.setHeaderItem(header) - self.vTreeWidget.setHeaderItem(header) - - self.mTreeWidget.itemClicked.connect(lambda : self.printer(self.mTreeWidget.currentItem())) - self.lTreeWidget.itemClicked.connect(lambda : self.printer(self.lTreeWidget.currentItem())) - self.vTreeWidget.itemClicked.connect(lambda : self.printer(self.vTreeWidget.currentItem())) - - def printer(self, treeItem ): - foldername = treeItem.text(0) - comment = treeItem.text(1) - data = treeItem.text(2) - print(foldername , ': ' , comment , ' (' + data + ')') - - # input data tab - def modes(self): - modesList = self.obj.modesList - if(modesList): - for j in modesList: - self.comboBox.addItem(str(self.obj.variables[j]['name'])) - self.modeSelection() - else: - self.comboBox.setDisabled(True) - self.inputdict= {} - self.inputdict = self.obj.paramgetter() - self.inputparamslist() - - def modeSelection(self): - self.inputdict= {} - for i in reversed(range(self.formLayout.count())): - self.formLayout.removeRow(i) - print(self.comboBox.currentText()) - for i in self.obj.variables: - if self.obj.variables[i]['name'] == self.comboBox.currentText(): - currentText = i - break - self.inputdict = self.obj.paramgetter(currentText) - print('mode selection ', self.inputdict) - self.inputparamslist() - - def inputparamslist(self): - try: - print("inputparamslist ", self.inputdict) - for c,i in enumerate(self.inputdict): - if i == None: - continue - if(i=="thermoPackage"): - print("thermo1") - combo = QComboBox() - self.lines = [line.rstrip('\n') for line in open('thermopackage.txt')] - print("thermo2") - for j in self.lines: - combo.addItem(str(j)) - combo.setMinimumContentsLength(15) - lay = QGridLayout() - lay.addWidget(QLabel(i+":"), 0,0, alignment=Qt.AlignLeft) - lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) - self.formLayout.addRow(lay) - self.inputdict[i] = combo - print("thermo") - elif(i=="Ctype"): - combo = QComboBox() - self.lines = ["Total","Partial"] - for j in self.lines: - combo.addItem(str(j)) - combo.setMinimumContentsLength(15) - lay = QGridLayout() - lay.addWidget(QLabel("Condensor Type :"), 0, 0, alignment=Qt.AlignLeft) - lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) - self.formLayout.addRow(lay) - self.inputdict[i] = combo - elif(i=="x_pc"): - noc = len(compound_selected) - print(noc) - self.x_pclist.clear() - gp = QGroupBox("Compounds") - lay = QGridLayout() - for j in range(noc): - l = QLineEdit() - self.inputdict[i] = "x_pc" - lay.addWidget(QLabel(str(compound_selected[j])+":"),j,0, alignment=Qt.AlignLeft) - lay.addWidget(l,j,1, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables[i]['unit']),j,2, alignment=Qt.AlignCenter) - self.x_pclist.append(l) - gp.setLayout(lay) - self.formLayout.addRow(gp) - elif (self.obj.type == 'Mixer' and i == 'Pout'): - combo = QComboBox() - print("Mixer combo") - for j in self.obj.Pout_modes: - combo.addItem(str(j)) - combo.setMinimumContentsLength(15) - lay = QGridLayout() - lay.addWidget(QLabel(self.obj.variables[i]['name']+":"), 0,0, alignment=Qt.AlignLeft) - lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignCenter) - self.formLayout.addRow(lay) - self.inputdict[i] = combo - elif (self.obj.type == 'Splitter' and i == 'CalcType'): - combo = QComboBox() - print("Splitter combo") - for j in self.obj.CalcType_modes: - combo.addItem(str(j)) - combo.setMinimumContentsLength(15) - stream1 = QLineEdit() - stream2 = QLineEdit() - unit = QLabel('') - lay = QGridLayout() - lay.addWidget(QLabel(self.obj.variables[i]['name']+":"), 0,0, alignment=Qt.AlignLeft) - lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignCenter) - - lay.addWidget(QLabel("Stream 1 : "), 1,0, alignment = Qt.AlignLeft) - lay.addWidget(stream1, 1,1, alignment = Qt.AlignCenter) - lay.addWidget(unit, 1,2, alignment = Qt.AlignRight) - - lay.addWidget(QLabel("Stream 2 : "), 2,0, alignment = Qt.AlignLeft) - lay.addWidget(stream2, 2,1, alignment = Qt.AlignCenter) - lay.addWidget(unit, 2,2, alignment = Qt.AlignRight) - self.formLayout.addRow(lay) - print("daf ", self.formLayout) - #combo.currentIndexChanged.connect(lambda:self.SplitterStreams(combo, lay, unit)) - lst = [combo, stream1, stream2] - #lst = [combo.currentText(), stream1.text(), stream2.text()] - self.inputdict[i] = lst - # self.inputdict[i] = stream1 - # self.inputdict[i] = stream2 - print(self.inputdict[i]) - elif i == 'HKey' or i == 'LKey': - combo = QComboBox() - print("ShortcutColumn combo") - for j in self.obj.compounds: - combo.addItem(str(j)) - combo.setMinimumContentsLength(15) - lay = QGridLayout() - lay.addWidget(QLabel(self.obj.variables[i]['name']+":"), 0,0, alignment=Qt.AlignLeft) - lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignCenter) - self.formLayout.addRow(lay) - self.inputdict[i] = combo - elif self.obj.type == 'CompoundSeparator' and i == 'SepStrm': - print(i) - rlay = QHBoxLayout() - r1 = QRadioButton('Stream 1') - r1.setChecked(True) - r2 = QRadioButton('Stream 2') - r2.setChecked(False) - rlay.addWidget(r1) - rlay.addWidget(r2) - self.formLayout.addRow(rlay) - - lst = [r1, r2] - - lay = QGridLayout() - for k,val in enumerate(self.obj.compounds): - combo = QComboBox() - print("CompoundSeparator combo") - for j in self.obj.SepFact_modes: - combo.addItem(str(j)) - l = QLineEdit() - lay.addWidget(QLabel(val+" :"), k,0, alignment=Qt.AlignLeft) - lay.addWidget(combo, k, 1, alignment=Qt.AlignCenter) - lay.addWidget(l,k,2, alignment=Qt.AlignCenter) - lst.append(combo) - lst.append(l) - self.inputdict[i] = lst - self.formLayout.addRow(lay) - elif self.obj.type == 'Flash' and i == 'Bdef': - print(i) - # rlay = QHBoxLayout() - r1 = QCheckBox() - r1.setChecked(False) - r2 = QCheckBox() - r2.setChecked(False) - # rlay.addWidget(r1) - # rlay.addWidget(r2) - # self.formLayout.addRow(rlay) - - l1 = QLineEdit() - l1.setText(str(self.obj.variables['Tdef']['value'])) - l2 = QLineEdit() - l2.setText(str(self.obj.variables['Pdef']['value'])) - lay = QGridLayout() - lay.addWidget(r1, 0,0, alignment = Qt.AlignLeft) - lay.addWidget(QLabel(self.obj.variables['Tdef']['name']+":"), 0,1, alignment=Qt.AlignLeft) - lay.addWidget(l1, 0, 2, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables['Tdef']['unit']),0,3, alignment=Qt.AlignRight) - l1.setDisabled(True) - - lay.addWidget(r2, 2,0, alignment = Qt.AlignLeft) - lay.addWidget(QLabel(self.obj.variables['Pdef']['name']+":"), 2,1, alignment=Qt.AlignLeft) - lay.addWidget(l2, 2, 2, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables['Pdef']['unit']),2,3, alignment=Qt.AlignRight) - self.formLayout.addRow(lay) - l2.setDisabled(True) - r1.toggled.connect(lambda:l1.setDisabled(not r1.isChecked())) - r2.toggled.connect(lambda:l2.setDisabled(not r2.isChecked())) - - self.inputdict[i] = [r1, r2, l1, l2] - else: - print("elseloop") - print(i) - if i == None: - continue - l = QLineEdit() - if self.inputdict[i] != None: - l.setText(str(self.inputdict[i])) - print('before lay') - lay = QGridLayout() - lay.addWidget(QLabel(self.obj.variables[i]['name']+":"),0,0, alignment=Qt.AlignLeft) #self.obj.variables[i]['name'] - lay.addWidget(l,0,1, alignment=Qt.AlignCenter) - print('after lay') - if(i != 'MolFlow'): - lay.addWidget(QLabel(self.obj.variables[i]['unit']),0,2, alignment=Qt.AlignCenter) - else: - lay.addWidget(QLabel('mol/s'),0,2, alignment=Qt.AlignCenter) - print('after all') - self.formLayout.addRow(lay) - self.inputdict[i] = l - - - except Exception as e: - print(e) - - def Show_Error(self): - QMessageBox.about(self, 'Important', "Please fill all fields with data") - - def param(self): - try: - self.dict={} - print("param.inputdict ", self.inputdict) - for i in self.inputdict: - if (self.inputdict[i] == None): - continue - - if(i=="thermoPackage"): - if (self.inputdict[i].currentText()): - self.dict[i] = self.inputdict[i].currentText() - else: - self.Show_Error() - break - elif(i=="Ctype"): - if (self.inputdict[i].currentText()): - self.dict[i] = self.inputdict[i].currentText() - else: - self.Show_Error() - break - elif(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.x_pclist[c].setText(mf[-1]) - self.dict[i] = ",".join(mf) - elif(i == 'Pout' and self.obj.type == 'Mixer' or i == '' or i == 'HKey' or i == 'LKey'): - self.dict[i] = self.inputdict[i].currentText() - elif i == 'CalcType' and self.obj.type == 'Splitter': - self.dict[i] = [self.inputdict[i][0].currentText(), self.inputdict[i][1].text(), self.inputdict[i][2].text()] - elif self.obj.type == 'Flash' and i == 'Bdef': - self.dict[i] = [self.inputdict[i][0].isChecked(), self.inputdict[i][1].isChecked(), self.inputdict[i][2].text(), self.inputdict[i][3].text()] - elif self.obj.type == 'CompoundSeparator': - self.dict[i] = [self.inputdict[i][0].isChecked(),self.inputdict[i][1].isChecked()] - j = 2 - for comp in self.obj.compounds: - self.dict[i].append(self.inputdict[i][j].currentText()) - self.dict[i].append(self.inputdict[i][j+1].text()) - j += 2 - else: - print(self.inputdict[i], i, self.obj.type) - if (self.inputdict[i].text()): - self.dict[i] = self.inputdict[i].text() - else: - print(self.inputdict[i].text()) - self.Show_Error() - break - - print("param ", self.dict) - self.obj.paramsetter(self.dict) - self.hide() - - except Exception as e: - print(e) - - - @staticmethod - def showResult(lst): - #DockWidget1.flag = True - for i in lst: - i.resultsCategory(i.name) - #i.show() - - # result data tab - def resultsCategory(self,name): - flag = True - try: - print("Under result category name ", name) - result=self.container.result - obj = self.container.fetchObject(name) - - d = {"Mole Fraction":"x_pc", "Mass Fraction":"xm_pc", "Mole Flow":"F_pc", "Mass Flow":"Fm_pc"} - 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"} - - # Amounts Tab - if obj.type == 'MaterialStream': - l = [] # 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): - l.append(i) - print(l) - - j = 0 - t = 0 - namee = klst[j] - print("namee ", namee) - - for i,k in enumerate(l): - 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 in k: - if i%3 == 0: - if(flag): - mroot = QTreeWidgetItem(self.mTreeWidget, [lst[j]]) - child = QTreeWidgetItem(mroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) - elif i%3 == 1: - if(flag): - lroot = QTreeWidgetItem(self.lTreeWidget, [lst[j]]) - child = QTreeWidgetItem(lroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) - elif i%3 == 2: - if (flag): - vroot = QTreeWidgetItem(self.vTreeWidget, [lst[j]]) - child = QTreeWidgetItem(vroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) - t += 1 - flag = False - else: - j += 1 - t = 0 - namee = klst[j] - flag = True - if i%3 == 0: - if (flag): - mroot = QTreeWidgetItem(self.mTreeWidget, [lst[j]]) - child = QTreeWidgetItem(mroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) - elif i%3 == 1: - if (flag): - lroot = QTreeWidgetItem(self.lTreeWidget, [lst[j]]) - child = QTreeWidgetItem(lroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) - elif i%3 == 2: - if (flag): - vroot = QTreeWidgetItem(self.vTreeWidget, [lst[j]]) - child = QTreeWidgetItem(vroot, [compound_selected[t], str(resultval),obj.variables[k.split('.')[1]]['unit']]) - t += 1 - flag = False - #print(obj.variables) - - # 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(resultval)) - 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(resultval)) - 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(resultval)) - self.vTableWidget.setItem(vrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit'])) - self.vTableWidget.resizeColumnsToContents() - if not '[' in val: - #print(p[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(resultval)) - self.mTableWidget.setItem(mrowPosition , 2, QTableWidgetItem(obj.variables[val.split('.')[1]]['unit'])) - self.mTableWidget.resizeColumnsToContents() - - print(obj.variables) - - except Exception as e: - print(e) - - -class DockWidgetFlash(DockWidget): - - def __init__(self,name,comptype,obj,container,parent=None): - DockWidget.__init__(self,name,comptype,obj,container,parent=None) - - def inputparamslist(self): - try: - print("inputparamslist ", self.inputdict) - for c,i in enumerate(self.inputdict): - if i == None: - continue - if(i=="thermoPackage"): - print("thermo1") - combo = QComboBox() - self.lines = [line.rstrip('\n') for line in open('thermopackage.txt')] - print("thermo2") - for j in self.lines: - combo.addItem(str(j)) - combo.setMinimumContentsLength(15) - lay = QGridLayout() - lay.addWidget(QLabel(i+":"), 0,0, alignment=Qt.AlignLeft) - lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) - self.formLayout.addRow(lay) - self.inputdict[i] = combo - print("thermo") - elif self.obj.type == 'Flash' and i == 'Bdef': - print(i) - r1 = QCheckBox() - r1.setChecked(False) - r2 = QCheckBox() - r2.setChecked(False) - - l1 = QLineEdit() - l1.setText(str(self.obj.variables['Tdef']['value'])) - l2 = QLineEdit() - l2.setText(str(self.obj.variables['Pdef']['value'])) - lay = QGridLayout() - lay.addWidget(r1, 0,0, alignment = Qt.AlignLeft) - lay.addWidget(QLabel(self.obj.variables['Tdef']['name']+":"), 0,1, alignment=Qt.AlignLeft) - lay.addWidget(l1, 0, 2, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables['Tdef']['unit']),0,3, alignment=Qt.AlignRight) - l1.setDisabled(True) - - lay.addWidget(r2, 2,0, alignment = Qt.AlignLeft) - lay.addWidget(QLabel(self.obj.variables['Pdef']['name']+":"), 2,1, alignment=Qt.AlignLeft) - lay.addWidget(l2, 2, 2, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables['Pdef']['unit']),2,3, alignment=Qt.AlignRight) - self.formLayout.addRow(lay) - l2.setDisabled(True) - r1.toggled.connect(lambda:l1.setDisabled(not r1.isChecked())) - r2.toggled.connect(lambda:l2.setDisabled(not r2.isChecked())) - - self.inputdict[i] = [r1, r2, l1, l2] - except Exception as e: - print(e) - - def param(self): - try: - self.dict={} - print("param.inputdict ", self.inputdict) - for i in self.inputdict: - if (self.inputdict[i] == None): - continue - - if(i=="thermoPackage"): - if (self.inputdict[i].currentText()): - self.dict[i] = self.inputdict[i].currentText() - else: - self.Show_Error() - break - elif self.obj.type == 'Flash' and i == 'Bdef': - self.dict[i] = [self.inputdict[i][0].isChecked(), self.inputdict[i][1].isChecked(), self.inputdict[i][2].text(), self.inputdict[i][3].text()] - - print("param ", self.dict) - self.obj.paramsetter(self.dict) - self.hide() - - except Exception as e: - print(e) - -class DockWidgetFlash(DockWidget): - - def __init__(self,name,comptype,obj,container,parent=None): - DockWidget.__init__(self,name,comptype,obj,container,parent=None) - - def inputparamslist(self): - try: - print("inputparamslist ", self.inputdict) - for c,i in enumerate(self.inputdict): - if i == None: - continue - if(i=="thermoPackage"): - print("thermo1") - combo = QComboBox() - self.lines = [line.rstrip('\n') for line in open('thermopackage.txt')] - print("thermo2") - for j in self.lines: - combo.addItem(str(j)) - combo.setMinimumContentsLength(15) - lay = QGridLayout() - lay.addWidget(QLabel(i+":"), 0,0, alignment=Qt.AlignLeft) - lay.addWidget(combo, 0, 1, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(''), 0, 2, alignment = Qt.AlignCenter) - self.formLayout.addRow(lay) - self.inputdict[i] = combo - print("thermo") - elif self.obj.type == 'Flash' and i == 'Bdef': - print(i) - r1 = QCheckBox() - r1.setChecked(False) - r2 = QCheckBox() - r2.setChecked(False) - - l1 = QLineEdit() - l1.setText(str(self.obj.variables['Tdef']['value'])) - l2 = QLineEdit() - l2.setText(str(self.obj.variables['Pdef']['value'])) - lay = QGridLayout() - lay.addWidget(r1, 0,0, alignment = Qt.AlignLeft) - lay.addWidget(QLabel(self.obj.variables['Tdef']['name']+":"), 0,1, alignment=Qt.AlignLeft) - lay.addWidget(l1, 0, 2, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables['Tdef']['unit']),0,3, alignment=Qt.AlignRight) - l1.setDisabled(True) - - lay.addWidget(r2, 2,0, alignment = Qt.AlignLeft) - lay.addWidget(QLabel(self.obj.variables['Pdef']['name']+":"), 2,1, alignment=Qt.AlignLeft) - lay.addWidget(l2, 2, 2, alignment=Qt.AlignCenter) - lay.addWidget(QLabel(self.obj.variables['Pdef']['unit']),2,3, alignment=Qt.AlignRight) - self.formLayout.addRow(lay) - l2.setDisabled(True) - r1.toggled.connect(lambda:l1.setDisabled(not r1.isChecked())) - r2.toggled.connect(lambda:l2.setDisabled(not r2.isChecked())) - - self.inputdict[i] = [r1, r2, l1, l2] - except Exception as e: - print(e) - - def param(self): - try: - self.dict={} - print("param.inputdict ", self.inputdict) - for i in self.inputdict: - if (self.inputdict[i] == None): - continue - - if(i=="thermoPackage"): - if (self.inputdict[i].currentText()): - self.dict[i] = self.inputdict[i].currentText() - else: - self.Show_Error() - break - elif self.obj.type == 'Flash' and i == 'Bdef': - self.dict[i] = [self.inputdict[i][0].isChecked(), self.inputdict[i][1].isChecked(), self.inputdict[i][2].text(), self.inputdict[i][3].text()] - - print("param ", self.dict) - self.obj.paramsetter(self.dict) - self.hide() - - except Exception as e: - print(e)
\ No newline at end of file diff --git a/DockWidgets/DockWidgetCompoundSeparator.py b/DockWidgets/DockWidgetCompoundSeparator.py index 6de61a5..5a80f84 100644 --- a/DockWidgets/DockWidgetCompoundSeparator.py +++ b/DockWidgets/DockWidgetCompoundSeparator.py @@ -31,11 +31,16 @@ class DockWidgetCompoundSeparator(QDockWidget,ui_dialog): calculationLayout = QGridLayout() r1 = QRadioButton('Stream 1') - r1.setChecked(True) r1.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) r2 = QRadioButton('Stream 2') - r2.setChecked(False) r2.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + if self.obj.variables['SepStrm']['value'] == 1: + r1.setChecked(True) + r2.setChecked(False) + else: + r1.setChecked(False) + r2.setChecked(True) + lst = [r1, r2] calculationLayout.addWidget(r1, 0, 1) @@ -45,9 +50,11 @@ class DockWidgetCompoundSeparator(QDockWidget,ui_dialog): combo = QComboBox() print("CompoundSeparator combo") for j in self.obj.SepFact_modes: - combo.addItem(str(j)) + combo.addItem(str(j)) + print(self.obj.variables['SepFact_c']['value'][k]) + combo.setCurrentText(self.obj.variables['SepFact_c']['value'][k]) combo.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) - l = QLineEdit() + l = QLineEdit(str(self.obj.variables['SepVal_c']['value'][k])) l.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) calculationLayout.addWidget(QLabel(val+" :"), k+1,0, alignment=Qt.AlignLeft) calculationLayout.addWidget(combo, k+1, 1, alignment=Qt.AlignCenter) diff --git a/DockWidgets/DockWidgetCompoundSeparator.ui b/DockWidgets/DockWidgetCompoundSeparator.ui index 2d9a4b2..ad9cda4 100644 --- a/DockWidgets/DockWidgetCompoundSeparator.ui +++ b/DockWidgets/DockWidgetCompoundSeparator.ui @@ -34,7 +34,7 @@ <x>10</x> <y>40</y> <width>331</width> - <height>191</height> + <height>281</height> </rect> </property> <layout class="QGridLayout" name="gridLayout"/> diff --git a/DockWidgets/DockWidgetDistillationColumn.py b/DockWidgets/DockWidgetDistillationColumn.py index 3255015..dea2391 100644 --- a/DockWidgets/DockWidgetDistillationColumn.py +++ b/DockWidgets/DockWidgetDistillationColumn.py @@ -35,32 +35,42 @@ class DockWidgetDistillationColumn(QDockWidget,ui_dialog): # tab 1 l1 = QLineEdit() - self.lay1.addWidget(QLabel(self.obj.variables['Nt']['name'] + " :"), 0 ,0, alignment=Qt.AlignLeft) - self.lay1.addWidget(l1,0,1, alignment=Qt.AlignCenter) + l1.setText(str(self.obj.variables['Nt']['value'])) + self.lay1.addWidget(QLabel(self.obj.variables['Nt']['name'] + " :"), 0 ,0, alignment=Qt.AlignLeft) + self.lay1.addWidget(l1,0,1, alignment=Qt.AlignLeft) self.input_dict.append(l1) + for i in range(self.obj.variables['Ni']['value']): print(i) - l = QLineEdit() - self.lay1.addWidget(QLabel(self.obj.variables['InT_s']['name'] +" " + str(i+1) + " location :"),i+1,0, alignment=Qt.AlignLeft) - self.lay1.addWidget(l,i+1,1, alignment=Qt.AlignCenter) + l = QLineEdit() + if len(self.obj.variables['InT_s']['value']) is not 0: + l.setText(str(self.obj.variables['InT_s']['value'][i])) + self.lay1.addWidget(QLabel(self.obj.variables['InT_s']['name'] +" " + str(i+1) + " location :"),2*(i+1),0, alignment=Qt.AlignLeft) + self.lay1.addWidget(l,2*(i+1),1, alignment=Qt.AlignLeft) self.input_dict.append(l) # tab 2 self.l4.setText(self.obj.variables['Ctype']['name']+":") + self.u1.setText(self.obj.variables['Ctype']['unit']) self.l5.setText(self.obj.variables['Pcond']['name']+":") self.le5.setText(str(self.obj.variables['Pcond']['value'])) self.u2.setText(self.obj.variables['Pcond']['unit']) self.l6.setText(self.obj.variables['C_Spec']['name']+":") + self.le6.setText(str(self.obj.variables['C_Spec']['value'])) self.l7.setText("Compounds :") self.cb5.addItem("Total") self.cb5.addItem("Partial") + self.cb5.setCurrentText(self.obj.variables['Ctype']['value']) for j in self.obj.Cspec_list: self.cb1.addItem(str(j)) + self.cb1.setCurrentText(self.obj.variables['C_Spec']['type']) for j in self.obj.compounds: self.cb2.addItem(str(j)) + self.cb2.setCurrentText(self.obj.variables['C_Spec']['comp']) + self.cb2.setDisabled(True) self.cb1.currentIndexChanged.connect(self.fun2) @@ -75,12 +85,15 @@ class DockWidgetDistillationColumn(QDockWidget,ui_dialog): self.le7.setText(str(self.obj.variables['Preb']['value'])) self.u3.setText(self.obj.variables['Preb']['unit']) self.l9.setText(self.obj.variables['R_Spec']['name']+":") + self.le8.setText(str(self.obj.variables['R_Spec']['value'])) self.l10.setText('Compounds') for j in self.obj.Rspec_list: self.cb3.addItem(str(j)) + self.cb3.setCurrentText(self.obj.variables['R_Spec']['type']) for j in self.obj.compounds: self.cb4.addItem(str(j)) + self.cb4.setCurrentText(self.obj.variables['R_Spec']['comp']) self.cb4.setDisabled(True) self.cb3.currentIndexChanged.connect(self.fun3) diff --git a/DockWidgets/DockWidgetDistillationColumn.ui b/DockWidgets/DockWidgetDistillationColumn.ui index e603071..7e63254 100644 --- a/DockWidgets/DockWidgetDistillationColumn.ui +++ b/DockWidgets/DockWidgetDistillationColumn.ui @@ -60,6 +60,9 @@ <string>Parameter Selection</string> </property> <layout class="QHBoxLayout" name="horizontalLayout_10"> + <property name="sizeConstraint"> + <enum>QLayout::SetFixedSize</enum> + </property> <item> <widget class="QTabWidget" name="tabWidget_5"> <property name="sizePolicy"> @@ -90,7 +93,7 @@ </widget> <widget class="QWidget" name="tab2"> <attribute name="title"> - <string>Condensor</string> + <string>Condenser</string> </attribute> <layout class="QVBoxLayout" name="verticalLayout_5"> <item> @@ -223,7 +226,7 @@ <property name="geometry"> <rect> <x>10</x> - <y>220</y> + <y>270</y> <width>331</width> <height>21</height> </rect> diff --git a/DockWidgets/DockWidgetFlash.py b/DockWidgets/DockWidgetFlash.py index 4e1c5e3..ff8efb5 100644 --- a/DockWidgets/DockWidgetFlash.py +++ b/DockWidgets/DockWidgetFlash.py @@ -27,15 +27,18 @@ class DockWidgetFlash(QDockWidget,ui_dialog): self.lines = [line.rstrip('\n') for line in open('thermopackage.txt')] for j in self.lines: self.cb1.addItem(str(j)) + self.cb1.setCurrentText(self.obj.variables['thermo_package']['value']) self.check1.setText(self.obj.variables['Tdef']['name']+":") self.le2.setText(str(self.obj.variables['Tdef']['value'])) self.u2.setText(self.obj.variables['Tdef']['unit']) self.check1.toggled.connect(self.fun) + self.check1.setChecked(self.obj.variables['BTdef']['value']) self.check2.setText(self.obj.variables['Pdef']['name']+":") self.le3.setText(str(self.obj.variables['Pdef']['value'])) self.u3.setText(self.obj.variables['Pdef']['unit']) self.check2.toggled.connect(self.fun) + self.check2.setChecked(self.obj.variables['BPdef']['value']) self.input_dict = [self.cb1, self.check1, self.le2, self.check2, self.le3] diff --git a/DockWidgets/DockWidgetMaterialStream.py b/DockWidgets/DockWidgetMaterialStream.py index 792a985..31b874e 100644 --- a/DockWidgets/DockWidgetMaterialStream.py +++ b/DockWidgets/DockWidgetMaterialStream.py @@ -38,6 +38,7 @@ class DockWidgetMaterialStream(QDockWidget,ui_dialog): 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= {} @@ -46,9 +47,13 @@ class DockWidgetMaterialStream(QDockWidget,ui_dialog): def mode_selection(self): self.input_dict= {} - for i in reversed(range(self.formLayout.count())): - self.formLayout.removeRow(i) + 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): diff --git a/DockWidgets/DockWidgetMixer.py b/DockWidgets/DockWidgetMixer.py index 6c46c39..6ec6795 100644 --- a/DockWidgets/DockWidgetMixer.py +++ b/DockWidgets/DockWidgetMixer.py @@ -30,6 +30,7 @@ class DockWidgetMixer(QDockWidget,ui_dialog): self.u1.setText(self.obj.variables['NI']['unit']) for i in self.obj.Pout_modes: self.cb2.addItem(str(i)) + self.cb2.setCurrentText(self.obj.variables['outPress']['value']) self.l2.setText(self.obj.variables['outPress']['name']+":") self.input_dict = [self.le1, self.cb2] diff --git a/DockWidgets/DockWidgetShortcutColumn.py b/DockWidgets/DockWidgetShortcutColumn.py index 2b7dfae..96069e5 100644 --- a/DockWidgets/DockWidgetShortcutColumn.py +++ b/DockWidgets/DockWidgetShortcutColumn.py @@ -34,6 +34,8 @@ class DockWidgetShortcutColumn(QDockWidget,ui_dialog): for i in self.obj.compounds: self.cb1.addItem(str(i)) self.cb2.addItem(str(i)) + self.cb1.setCurrentText(self.obj.compounds[int(self.obj.variables['HKey']['value'])-1]) + self.cb2.setCurrentText(self.obj.compounds[int(self.obj.variables['LKey']['value'])-1]) self.l3.setText(self.obj.variables['HKey_x_pc']['name']+":") self.le3.setText(str(self.obj.variables['HKey_x_pc']['value'])) @@ -45,6 +47,7 @@ class DockWidgetShortcutColumn(QDockWidget,ui_dialog): self.l5.setText(self.obj.variables['Ctype']['name']+":") self.cb5.addItem('Total') self.cb5.addItem('Partial') + self.cb5.setCurrentText(self.obj.variables['Ctype']['value']) self.l6.setText(self.obj.variables['Pcond']['name']+":") self.le6.setText(str(self.obj.variables['Pcond']['value'])) @@ -61,9 +64,10 @@ class DockWidgetShortcutColumn(QDockWidget,ui_dialog): self.lines = [line.rstrip('\n') for line in open('thermopackage.txt')] for j in self.lines: self.cb6.addItem(str(j)) + self.cb6.setCurrentText(self.obj.variables['thermo_package']['value']) self.input_dict = [self.cb1, self.cb2, self.le3, self.le4, self.cb5, self.le6, self.le7, self.le8, self.cb6] - + except Exception as e: print(e) diff --git a/DockWidgets/DockWidgetSplitter.py b/DockWidgets/DockWidgetSplitter.py index 303d166..3b8383c 100644 --- a/DockWidgets/DockWidgetSplitter.py +++ b/DockWidgets/DockWidgetSplitter.py @@ -27,17 +27,20 @@ class DockWidgetSplitter(QDockWidget,ui_dialog): self.l1.setText(self.obj.variables['No']['name']+":") self.le1.setText(str(self.obj.variables['No']['value'])) self.u1.setText(self.obj.variables['No']['unit']) - + + self.l2.setText(self.obj.variables['CalcType']['name'] + ":") for i in self.obj.CalcType_modes: self.cb2.addItem(str(i)) - self.l2.setText(self.obj.variables['CalcType']['name']+":") + self.cb2.setCurrentText(self.obj.variables['CalcType']['value']) self.l3.setText("Stream 1 :") - self.u3.setText('') + self.le3.setText(str(self.obj.variables['SpecVal_s']['value'][0])) + self.u3.setText(self.obj.variables['SpecVal_s']['unit']) self.l4.setText("Stream 2 :") - self.u4.setText('') + self.le4.setText(str(self.obj.variables['SpecVal_s']['value'][1])) + self.u4.setText(str(self.obj.variables['SpecVal_s']['unit'])) self.cb2.currentIndexChanged.connect(self.fun) - + self.input_dict = [self.le1, self.cb2, self.le3, self.le4] except Exception as e: diff --git a/DockWidgets/__pycache__/DockWidget.cpython-37.pyc b/DockWidgets/__pycache__/DockWidget.cpython-37.pyc Binary files differindex 72623eb..1a43e5b 100644 --- a/DockWidgets/__pycache__/DockWidget.cpython-37.pyc +++ b/DockWidgets/__pycache__/DockWidget.cpython-37.pyc diff --git a/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pyc Binary files differindex 03ba8d4..8f43ce8 100644 --- a/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pyc +++ b/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pyc diff --git a/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc Binary files differindex f538f77..af05fb7 100644 --- a/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc +++ b/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc diff --git a/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc Binary files differindex d8eaa0b..c7d0661 100644 --- a/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc +++ b/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc diff --git a/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc Binary files differindex 7d5b43a..f2c5b98 100644 --- a/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc +++ b/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc diff --git a/DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pyc Binary files differindex 939df5f..9d19bbf 100644 --- a/DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pyc +++ b/DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pyc diff --git a/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc Binary files differindex d057db2..bc4eb06 100644 --- a/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc +++ b/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc diff --git a/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc Binary files differindex 7cc065b..f90f086 100644 --- a/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc +++ b/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc diff --git a/Graphics.py b/Graphics.py index f6b17b5..a829849 100644 --- a/Graphics.py +++ b/Graphics.py @@ -14,7 +14,6 @@ from DockWidgets.DockWidgetSplitter import * from DockWidgets.DockWidgetFlash import * from DockWidgets.DockWidgetCompoundSeparator import * from DockWidgets.DockWidgetCompressorExpander import * - from Container import * from Streams import * from UnitOperations import * @@ -55,39 +54,41 @@ class Graphics(QDialog, QtWidgets.QGraphicsItem): elif i.type not in stm: ip = i.input_stms op = i.output_stms - for j in ip: - pointA = NodeItem.get_instances(j.name) + for k, v in ip.items(): + pointA = NodeItem.get_instances(v.name) pointB = NodeItem.get_instances(i.name) rect = pointA.output[0].boundingRect() pointAA = QtCore.QPointF(rect.x() + rect.width()/2, rect.y() + rect.height()/2) pointAA = pointA.output[0].mapToScene(pointAA) - rectB = pointB.input[0].boundingRect() + socketB = next((s for s in pointB.input if k == s.id)) + rectB = socketB.boundingRect() pointBB = QtCore.QPointF(rectB.x() + rectB.width()/2, rectB.y() + rectB.height()/2) - pointBB = pointB.input[0].mapToScene(pointBB) + pointBB = socketB.mapToScene(pointBB) self.new_line = NodeLine(pointAA, pointBB, 'in') self.new_line.source = pointA.output[0] - self.new_line.target = pointB.input[0] + self.new_line.target = socketB pointA.output[0].out_lines.append(self.new_line) - pointB.input[0].in_lines.append(self.new_line) + socketB.in_lines.append(self.new_line) pointA.output[0].other_line = self.new_line - pointB.input[0].other_line = self.new_line + socketB.other_line = self.new_line self.scene.addItem(self.new_line) self.new_line.updatePath() - for k in op: + for k, v in op.items(): pointA = NodeItem.get_instances(i.name) - pointB = NodeItem.get_instances(k.name) - rect = pointA.output[0].boundingRect() + pointB = NodeItem.get_instances(v.name) + socketA = next(s for s in pointA.output if k == s.id) + rect = socketA.boundingRect() pointAA = QtCore.QPointF(rect.x() + rect.width()/2, rect.y() + rect.height()/2) - pointAA = pointA.output[0].mapToScene(pointAA) + pointAA = socketA.mapToScene(pointAA) rectB = pointB.input[0].boundingRect() pointBB = QtCore.QPointF(rectB.x() + rectB.width()/2, rectB.y() + rectB.height()/2) pointBB = pointB.input[0].mapToScene(pointBB) self.new_line = NodeLine(pointAA, pointBB, 'out') - self.new_line.source = pointA.output[0] + self.new_line.source = socketA self.new_line.target = pointB.input[0] - pointA.output[0].out_lines.append(self.new_line) + socketA.out_lines.append(self.new_line) pointB.input[0].in_lines.append(self.new_line) - pointA.output[0].other_line = self.new_line + socketA.other_line = self.new_line pointB.input[0].other_line = self.new_line self.scene.addItem(self.new_line) self.new_line.updatePath() @@ -243,11 +244,12 @@ class NodeLine(QtWidgets.QGraphicsPathItem): del self._pointB class NodeSocket(QtWidgets.QGraphicsItem): - def __init__(self, rect, parent, socketType): + def __init__(self, rect, parent, socketType, id): super(NodeSocket, self).__init__(parent) self.rect = rect self.type = socketType self.parent=parent + self.id = id self.setAcceptHoverEvents(True) self.new_line=None self.other_line=None @@ -328,20 +330,22 @@ class NodeSocket(QtWidgets.QGraphicsItem): self.new_line.target = item item.in_lines.append(self.new_line) self.new_line.pointB = item.get_center() + print(type(self.new_line.source)) if self.new_line.source.parent.obj.type not in stm: - self.new_line.source.parent.obj.add_connection(0,self.new_line.target.parent.obj) + self.new_line.source.parent.obj.add_connection(0, self.new_line.source.id, self.new_line.target.parent.obj) if self.new_line.target.parent.obj.type not in stm: - self.new_line.target.parent.obj.add_connection(1,self.new_line.source.parent.obj) # Input stream if flag is 1 + self.new_line.target.parent.obj.add_connection(1, self.new_line.target.id, self.new_line.source.parent.obj) # Input stream if flag is 1 elif (self.type =='in') and (item.type == 'op'): self.new_line.source = item self.new_line.target = self item.out_lines.append(self.new_line) self.new_line.pointA = item.get_center() + print(type(self.new_line.source)) if self.new_line.source.parent.obj.type not in stm: - self.new_line.source.parent.obj.add_connection(0,self.new_line.target.parent.obj) + self.new_line.source.parent.obj.add_connection(0, self.new_line.source.id, self.new_line.target.parent.obj) if self.new_line.target.parent.obj.type not in stm: - self.new_line.target.parent.obj.add_connection(1,self.new_line.source.parent.obj) + self.new_line.target.parent.obj.add_connection(1, self.new_line.target.id, self.new_line.source.parent.obj) else: @@ -354,7 +358,7 @@ class NodeSocket(QtWidgets.QGraphicsItem): super(NodeSocket, self).mouseReleaseEvent(event) try: - data = Container.get_last_list('Undo') + data = get_last_list('Undo') comp_selected = data[-1] data.remove(comp_selected) for i in range(len(data)): @@ -363,7 +367,7 @@ class NodeSocket(QtWidgets.QGraphicsItem): elif data[i].name == self.new_line.target.parent.obj.name: data[i] = self.new_line.target.parent.obj data.append(comp_selected) - Container.push('Undo', data) + push('Undo', data) except Exception as e: print(e) @@ -412,33 +416,35 @@ class NodeItem(QtWidgets.QGraphicsItem): if (self.obj.modes_list): default_tooltip = f"{self.name}\n\n" - default_tooltip_dict = self.obj.param_getter(self.obj.modes_list[0]) + default_tooltip_dict = self.obj.param_getter(self.obj.mode) for i, j in default_tooltip_dict.items(): if j is not None: default_tooltip = default_tooltip + f" {i} : {j}\n" self.setToolTip(default_tooltip) - self.nin = self.obj.no_of_inputs - self.nop = self.obj.no_of_outputs - if self.obj.type == 'Mixer': + + if self.obj.type == 'Mixer' and not self.obj.saved: text, ok = QInputDialog.getText(self.container.graphicsView, 'Mixer', 'Enter number of input:') if ok and text: self.nin = int(text) self.obj.no_of_inputs = self.nin self.obj.variables['NI']['value'] = self.nin - elif self.obj.type == 'Splitter': - text, ok = QInputDialog.getText(self.container.graphicsView, 'Splitter', 'Enter number of output:') - if ok and text: - self.nop = int(text) - self.obj.no_of_outputs = self.nop - self.obj.variables['No']['value'] = self.nop - elif self.obj.type == 'DistillationColumn': + # elif self.obj.type == 'Splitter' and not self.obj.saved: + # text, ok = QInputDialog.getText(self.container.graphicsView, 'Splitter', 'Enter number of output:') + # if ok and text: + # self.nop = int(text) + # self.obj.no_of_outputs = self.nop + # self.obj.variables['No']['value'] = self.nop + elif self.obj.type == 'DistillationColumn'and not self.obj.saved: text, ok = QInputDialog.getText(self.container.graphicsView, 'DistillationColumn', 'Enter number of input:') if ok and text: self.nin = int(text) self.obj.no_of_inputs = self.nin self.obj.variables['Ni']['value'] = self.nin + self.nin = self.obj.no_of_inputs + self.nop = self.obj.no_of_outputs + self.dock_widget = None lst.append(self) if self.obj.type in l: @@ -517,28 +523,28 @@ class NodeItem(QtWidgets.QGraphicsItem): def initialize_sockets(self,type): if(self.type=="Flash" or self.type=="CompoundSeparator"): - input = [NodeSocket(QtCore.QRect(5,(self.rect.height()*x/(self.nin+1)-2),4,4), self, 'in') for x in range(1,self.nin+1) ] - output = [NodeSocket(QtCore.QRect(self.rect.width()-9,(self.rect.height()*x*1/(self.nop+1)),4,4), self, 'op') for x in range(1,self.nop+1)] + input = [NodeSocket(QtCore.QRect(5,(self.rect.height()*x/(self.nin+1)-2),4,4), self, 'in', x) for x in range(1,self.nin+1) ] + output = [NodeSocket(QtCore.QRect(self.rect.width()-9,(self.rect.height()*x*1/(self.nop+1)),4,4), self, 'op', x) for x in range(1,self.nop+1)] return input,output elif(self.type=="AdiabaticCompressor" or self.type=="AdiabaticExpander" or self.type =="Mixer" or self.type =="Splitter" or self.type =="Valve" ): - input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1))-2,4,4), self, 'in') for x in range(1,self.nin+1) ] - output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,(self.rect.height()*x/(self.nop+1))-2,4,4), self, 'op') for x in range(1,self.nop+1)] + input = [NodeSocket(QtCore.QRect(-2.5, (self.rect.height()*x/(self.nin+1))-2,4,4), self, 'in', x) for x in range(1,self.nin+1) ] + output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,(self.rect.height()*x/(self.nop+1))-2,4,4), self, 'op', x) for x in range(1,self.nop+1)] return input,output elif(self.type=="Cooler" or self.type=="Heater"): - input = [NodeSocket(QtCore.QRect(3.5,(self.rect.height()*x/(self.nin+1))-2,4,4), self, 'in') for x in range(1,self.nin+1) ] - output = [NodeSocket(QtCore.QRect(self.rect.width()-8.0,(self.rect.height()*x/(self.nop+1))-2,4,4), self, 'op') for x in range(1,self.nop+1)] + input = [NodeSocket(QtCore.QRect(3.5, (self.rect.height()*x/(self.nin+1))-2,4,4), self, 'in', x) for x in range(1,self.nin+1) ] + output = [NodeSocket(QtCore.QRect(self.rect.width()-8.0,(self.rect.height()*x/(self.nop+1))-2,4,4), self, 'op', x) for x in range(1,self.nop+1)] return input,output elif(self.type=="Pump"): - input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1))-7, 4,4), self, 'in') for x in range(1,self.nin+1) ] - output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,-1.5,4,4), self, 'op') for x in range(1,self.nop+1)] + input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1))-7, 4,4), self, 'in', x) for x in range(1,self.nin+1) ] + output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,-1.5,4,4), self, 'op', x) for x in range(1,self.nop+1)] return input,output elif(self.type=="DistillationColumn" or self.type=="ShortcutColumn"): - input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1)),5,5), self, 'in') for x in range(1,self.nin+1) ] - output = [NodeSocket(QtCore.QRect(self.rect.width()-5.5,(self.rect.height()*1.44*x/(self.nop+1))-55,5,5), self, 'op') for x in range(1,self.nop+1)] + input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1)),5,5), self, 'in', x) for x in range(1,self.nin+1) ] + output = [NodeSocket(QtCore.QRect(self.rect.width()-5.5,(self.rect.height()*1.44*x/(self.nop+1))-55,5,5), self, 'op', x) for x in range(1,self.nop+1)] return input,output elif(self.type=="MaterialStream"): - input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1)-2),4,4), self, 'in') for x in range(1,self.nin+1) ] - output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,(self.rect.height()*x/(self.nin+1)-2),4,4), self, 'op') for x in range(1,self.nop+1)] + input = [NodeSocket(QtCore.QRect(-2.5,(self.rect.height()*x/(self.nin+1)-2),4,4), self, 'in', x) for x in range(1,self.nin+1) ] + output = [NodeSocket(QtCore.QRect(self.rect.width()-2.5,(self.rect.height()*x/(self.nin+1)-2),4,4), self, 'op', x) for x in range(1,self.nop+1)] return input,output def mouseMoveEvent(self, event): diff --git a/OMChem/Flowsheet.py b/OMChem/Flowsheet.py index bc218c6..79608ec 100644 --- a/OMChem/Flowsheet.py +++ b/OMChem/Flowsheet.py @@ -105,6 +105,10 @@ class Flowsheet(): lcase = c.lower() self.data.append("parameter database." + ucase +' '+ ucase + "; \n") + self.data.append("parameter Integer Nc = " + str(len(self.compounds)) + ";\n") + self.data.append("parameter Simulator.Files.ChemsepDatabase.GeneralProperties C[Nc] = {" + + str(self.compounds).strip('[').strip(']').replace("'", "") + "};\n") + for unitop in self.unit_operations: if unitop.type != 'MaterialStream': self.data.append(unitop.OM_Flowsheet_Initialize()) diff --git a/Simulator/Simulator/Files/ThermodynamicPackages/RaoultsLaw.mo b/Simulator/Simulator/Files/ThermodynamicPackages/RaoultsLaw.mo index ff3d394..c318000 100644 --- a/Simulator/Simulator/Files/ThermodynamicPackages/RaoultsLaw.mo +++ b/Simulator/Simulator/Files/ThermodynamicPackages/RaoultsLaw.mo @@ -1,7 +1,7 @@ within Simulator.Files.ThermodynamicPackages; model RaoultsLaw - import Simulator.Files.Thermodynamic_Functions.*; + import Simulator.Files.ThermodynamicFunctions.*; Real K_c[Nc](each min = 0), Cpres_p[3], Hres_p[3], Sres_p[3]; Real gma_c[Nc], gmabubl_c[Nc], gmadew_c[Nc]; Real philiqbubl_c[Nc], phivapdew_c[Nc], Pvap_c[Nc]; diff --git a/Simulator/Simulator/UnitOperations/DistillationColumn/DistCol.mo b/Simulator/Simulator/UnitOperations/DistillationColumn/DistCol.mo index f413590..64e1cc9 100644 --- a/Simulator/Simulator/UnitOperations/DistillationColumn/DistCol.mo +++ b/Simulator/Simulator/UnitOperations/DistillationColumn/DistCol.mo @@ -2,8 +2,8 @@ within Simulator.UnitOperations.DistillationColumn; model DistCol extends Simulator.Files.Icons.DistillationColumn; - parameter Simulator.Files.ChemsepDatabase.GeneralProperties C[Nc]; parameter Integer Nc "Number of components"; + parameter Simulator.Files.ChemsepDatabase.GeneralProperties C[Nc]; import data = Simulator.Files.ChemsepDatabase; parameter Boolean Bin_t[Nt] = Simulator.Files.OtherFunctions.colBoolCalc(Nt, Ni, InT_s); parameter Integer Nt = 4 "Number of stages"; @@ -26,7 +26,7 @@ within Simulator.UnitOperations.DistillationColumn; Placement(visible = true, transformation(origin = {252, -588}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {250, -598}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); Simulator.Files.Interfaces.matConn Out_s[Nout](each Nc = Nc) annotation( Placement(visible = true, transformation(origin = {-36, 32}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {-70, 60}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); - Simulator.Files.Interfaces.enConn En[NQ](each Nc = Nc) annotation( + Simulator.Files.Interfaces.enConn En[NQ] annotation( Placement(visible = true, transformation(origin = {-34, -54}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {-70, -60}, extent = {{-10, -10}, {10, 10}}, rotation = 0))); equation for i in 1:Ni loop @@ -27,7 +27,9 @@ class MaterialStream(): MaterialStream.counter+=1 self.start_dict = {} self.eqn_dict = {} - self.modes_list = ["PT","PH","PVF","TVF","PS"] + self.modes_list = ["PT", "PH", "PVF", "TVF", "PS"] + self.saved = False + self.mode = self.modes_list[0] self.variables = { 'P' : {'name':'Pressure', 'value':101325, 'unit':'Pa'}, Binary files differdiff --git a/UnitOperations.py b/UnitOperations.py index 08a871d..33479d3 100644 --- a/UnitOperations.py +++ b/UnitOperations.py @@ -9,9 +9,9 @@ class UnitOperation(): def __init__(self): self.OM_data_eqn = '' self.OM_data_init = '' - self.input_stms = [] - self.output_stms = [] - self.compounds = compound_selected + self.input_stms = {} + self.output_stms = {} + self.compounds = [c[:c.index('(')] for c in compound_selected] self.name = '' self.mode = None self.mode_val = None @@ -30,6 +30,7 @@ class UnitOperation(): self.multidict = [] self.thermo_pack_req = False self.thermo_package = 'RaoultsLaw' + self.saved = False def param_getter(self,mode=None): params = {} @@ -45,6 +46,10 @@ class UnitOperation(): def param_setter(self,params): print("param_setter ", params) + try: + self.mode = list(params.keys())[0] + except Exception as e: + print(e) for k,v in params.items(): if k == 'Thermo Package': self.thermo_package = v @@ -55,11 +60,12 @@ class UnitOperation(): self.variables[k]['value'] = v self.mode_val = params[self.mode] - def add_connection(self,flag,UnitOpr): + + def add_connection(self,flag,sourceId, UnitOpr): if flag==1: # Input stream if flag is 1 - self.input_stms.append(UnitOpr) + self.input_stms[sourceId] = UnitOpr else : - self.output_stms.append(UnitOpr) + self.output_stms[sourceId] = UnitOpr def set_pos(self,pos): self.pos = pos @@ -175,13 +181,13 @@ class ShortcutColumn(UnitOperation): type(self).counter += 1 self.variables = { - 'HKey' : {'name':'Heavy Key', 'value':None, 'unit':''}, - 'LKey' : {'name':'Light Key', 'value':None, 'unit':''}, + 'HKey' : {'name':'Heavy Key', 'value': 0, 'unit':''}, + 'LKey' : {'name':'Light Key', 'value': 0, 'unit':''}, 'HKey_x_pc' : {'name':'Heavy Key Mole Fraction', 'value':0.01, 'unit':''}, 'LKey_x_pc' : {'name':'Light Key Mole Fraction', 'value':0.01, 'unit':''}, - 'Ctype' : {'name':'Condensor Type', 'value':None, 'unit':''}, + 'Ctype' : {'name':'Condenser Type', 'value':'Total', 'unit':''}, 'thermo_package' : {'name':'Thermo Package', 'value':'Raoults_Law', 'unit':''}, - 'Pcond' : {'name':'Condensor Pressure', 'value':101325, 'unit':'Pa'}, + 'Pcond' : {'name':'Condenser Pressure', 'value':101325, 'unit':'Pa'}, 'Preb' : {'name':'Reboiler Pressure', 'value':101325, 'unit':'Pa'}, 'RR' : {'name':'Reflux Ratio', 'value':1.5, 'unit':''}, @@ -208,7 +214,7 @@ class ShortcutColumn(UnitOperation): self.variables['Pcond']['value'] = params[5] self.variables['Preb']['value'] = params[6] self.variables['RR']['value'] = params[7] - self.thermo_package = params[8] + self.variables['thermo_package']['value'] = params[8] def OM_Flowsheet_Equation(self): self.OM_data_eqn = '' @@ -232,34 +238,31 @@ class DistillationColumn(UnitOperation): self.type = 'DistillationColumn' self.no_of_inputs = 1 self.no_of_outputs = 2 - - self.compounds = compound_selected - self.EngStm1 = EngStm(name='EngStm1'+self.name) self.EngStm2 = EngStm(name='EngStm2'+self.name) self.count = DistillationColumn.counter - + self.thermo_pack_req = True # self.modes_list = ['RR', 'Nout', 'T'] self.modes_list = [] - self.parameters = ['Nt', 'Ni', 'InT_s', 'Ctype'] + self.parameters = ['Nt', 'Ni', 'Ctype', 'Pcond', 'condmode', 'C_comp', 'C_Spec', 'Preb', 'rebmode', 'rebcomp', 'R_Spec'] #self.parameters = ['Nt', 'InT_s', 'In_s', 'thermo_package', 'Ctype', 'Pcond', 'Preb'] self.Cspec_list = ['Reflux Ratio','Product Molar Flow (mol/s)', 'Temperature (K)', 'Compound Molar Fraction', 'Compound Molar Flow (mol/s)'] self.Rspec_list = ['Product Molar Flow (mol/s)', 'Temperature (K)', 'Compound Molar Fraction', 'Compound Molar Flow (mol/s)'] type(self).counter += 1 self.variables = { - 'Ni' : {'name':'Number of Input', 'value':2, 'unit':''}, + 'Ni' : {'name':'Number of Input', 'value':1, 'unit':''}, 'RR' : {'name':'Reflux Ratio', 'value':None, 'unit':''}, 'T' : {'name':'Temperature', 'value':300, 'unit':'K'}, 'Nout' : {'name':'No of Sidedraws', 'value':None, 'unit':''}, 'Nt' : {'name':'No of Stages', 'value':12, 'unit':''}, 'InT_s' : {'name':'Feed Stage', 'value':[], 'unit':''}, 'thermo_package' : {'name':'Thermo Package', 'value':'Raoults_Law', 'unit':''}, - 'Ctype' : {'name':'Condensor Type', 'value':'', 'unit':''}, - 'Pcond' : {'name':'Condensor Pressure', 'value':101325, 'unit':'Pa'}, + 'Ctype' : {'name':'Condenser Type', 'value':'Total', 'unit':''}, + 'Pcond' : {'name':'Condenser Pressure', 'value':101325, 'unit':'Pa'}, 'Preb' : {'name':'Reboiler Pressure', 'value':101325, 'unit':'Pa'}, - 'C_Spec': {'name':'Condensor Specification', 'type':'Reflux Ratio', 'value':'', 'comp':'', 'unit':''}, - 'R_Spec': {'name':'Reboiler Specification', 'type':'', 'value':'', 'comp':'', 'unit':''}, + 'C_Spec': {'name':'Condenser Specification', 'type':self.Cspec_list[0], 'value':'', 'comp':compound_selected[0], 'unit':''}, + 'R_Spec': {'name':'Reboiler Specification', 'type':self.Rspec_list[0], 'value':'', 'comp':compound_selected[0], 'unit':''}, } def param_setter(self,params): @@ -275,13 +278,117 @@ class DistillationColumn(UnitOperation): self.variables['C_Spec']['type'] = params[temp+3] if 'Compound' in self.variables['C_Spec']['type']: self.variables['C_Spec']['comp'] = params[temp+4] + # C_Spec variable value won't be updated to class here. It will be updated in result self.variables['C_Spec']['value'] = params[temp+5] + for var in self.variables: + if self.variables[var]['name'] == self.variables['C_Spec']['type']: + self.variables[var]['value'] = params[temp+5] + self.variables['Preb']['value'] = params[temp+6] + # R_Spec variable value won't be updated to class here. It will be updated in result self.variables['R_Spec']['type'] = params[temp+7] if 'Compound' in self.variables['R_Spec']['type']: self.variables['R_Spec']['comp'] = params[temp+8] - self.variables['R_Spec']['value'] = params[temp+9] + self.variables['R_Spec']['value'] = params[temp+9] + self.variables['thermo_package']['value'] = params[temp+10] print(self.variables) + + def OM_Flowsheet_Initialize(self): + self.OM_data_init = '' + self.OM_data_init = self.OM_data_init + 'model Condenser\n' + self.OM_data_init = self.OM_data_init + 'extends Simulator.UnitOperations.DistillationColumn.Cond;\n' + self.OM_data_init = self.OM_data_init + 'extends Simulator.Files.ThermodynamicPackages.' + self.thermo_package + ';\n' + self.OM_data_init = self.OM_data_init + 'end Condenser;\n' + self.OM_data_init = self.OM_data_init + 'model Tray\n' + self.OM_data_init = self.OM_data_init + 'extends Simulator.UnitOperations.DistillationColumn.DistTray;\n' + self.OM_data_init = self.OM_data_init + 'extends Simulator.Files.ThermodynamicPackages.' + self.thermo_package + ';\n' + self.OM_data_init = self.OM_data_init + 'end Tray;\n' + self.OM_data_init = self.OM_data_init + 'model Reboiler\n' + self.OM_data_init = self.OM_data_init + 'extends Simulator.UnitOperations.DistillationColumn.Reb;\n' + self.OM_data_init = self.OM_data_init + 'extends Simulator.Files.ThermodynamicPackages.' + self.thermo_package + ';\n' + self.OM_data_init = self.OM_data_init + 'end Reboiler;\n' + self.OM_data_init = self.OM_data_init + ("model distCol" + str(self.count) + "\n") + self.OM_data_init = self.OM_data_init + ("extends Simulator.UnitOperations.DistillationColumn.DistCol;\n") + self.OM_data_init = self.OM_data_init + ( + "Condenser condenser(Nc = Nc, C = C, Ctype =Ctype, Bin = Bin_t[1], T(start = 300));\n") + self.OM_data_init = self.OM_data_init + ( + "Reboiler reboiler(Nc = Nc, C = C, Bin = Bin_t[Nt]);\n") + self.OM_data_init = self.OM_data_init + ( + "Tray tray[Nt - 2](each Nc = Nc, each C = C, Bin = Bin_t[2:Nt - 1]);\n") + self.OM_data_init = self.OM_data_init + ("end distCol" + str(self.count) + ";\n") + comp_count = len(self.compounds) + self.OM_data_init = self.OM_data_init + ( + "distCol" + str(self.count) + " " + self.name + "(Nc = " + str(comp_count)) + self.OM_data_init = self.OM_data_init + (", C= C") + + self.OM_data_init = self.OM_data_init + "," + ( + "Nt=" + str(self.variables['Nt']['value']) + "," + "Ni=" + + str(self.variables['Ni']['value']) + ",InT_s=" + "{" + + str(self.variables['InT_s']['value']).strip('[').strip(']') + "}" + ',Ctype ="' + + self.variables['Ctype']['value'] + '");\n') + # self.OM_data_init = self.OM_data_init + 'Simulator.Streams.Energy_Stream '+self.EngStm1.name+';\n' + # self.OM_data_init = self.OM_data_init + 'Simulator.Streams.Energy_Stream '+self.EngStm2.name+';\n' + return self.OM_data_init + + def OM_Flowsheet_Equation(self): + self.OM_data_eqn = '' + # self.OM_data_eqn = self.name + '.pressDrop = ' + str(self.PressDrop) + ';\n' + # self.OM_data_eqn = self.OM_data_eqn + ( + # 'connect(' + self.name + '.' + 'condensor_duty' + ',' + self.EngStm1.name + '.inlet);\n') + # self.OM_data_eqn = self.OM_data_eqn + ( + # 'connect(' + self.name + '.reboiler_duty' + ', ' + self.EngStm2.name + '.inlet);\n') + self.OM_data_eqn = self.OM_data_eqn + ( + 'connect(' + self.name + '.Dist' + ", " + self.output_stms[0].name + '.In);\n') + self.OM_data_eqn = self.OM_data_eqn + ( + 'connect(' + self.name + '.Bot' + ", " + self.output_stms[1].name + '.In);\n') + for i in range(len(self.input_stms)): + self.OM_data_eqn = self.OM_data_eqn + ( + 'connect(' + self.input_stms[i].name + '.Out' + ", " + self.name + '.In_s[' + str( + i + 1) + ']);\n') + # ['Product Molar Flow (mol/s)', 'Temperature (K)', 'Compound Molar Fraction', + # 'Compound Molar Flow (mol/s)'] + if self.variables['C_Spec']['type'] == "Reflux Ratio": + self.OM_data_eqn = self.OM_data_eqn + ( + self.name + '.' + 'RR' + '=' + str(self.variables['RR']['value']) + ';\n') + elif self.variables['C_Spec']['type'] == "Product Molar Flow (mol/s)": + self.OM_data_eqn = self.OM_data_eqn + (self.output_stms[0].name + '.' + 'F_p[1] = ' + str( + self.variables['C_Spec']['value']) + ';\n') + elif self.variables['C_Spec']['type'] == "Temperature (K)": + self.OM_data_eqn = self.OM_data_eqn + (self.output_stms[0].name + '.' + 'T = ' + str( + self.variables['C_Spec']['value']) + ';\n') + elif self.variables['C_Spec']['type'] == "Compound Molar Fraction": + self.OM_data_eqn = self.OM_data_eqn + (self.output_stms[0].name + '.x_pc[1,:' + + str(self.compounds.index(self.variables['C_Spec']['comp']) + 1) + '] = ' + str( + self.variables['C_Spec']['value']) + ';\n') + elif self.variables['C_Spec']['type'] == "Compound Molar Flow (mol/s)": + self.OM_data_eqn = self.OM_data_eqn + (self.output_stms[0].name + '.F_pc[1,:' + + str(self.compounds.index(self.variables['C_Spec']['comp']) + 1) + '] = ' + str( + self.variables['C_Spec']['value']) + ';\n') + else: + self.OM_data_eqn = self.OM_data_eqn + ( + self.name + '.Condenser.' + self.mode + '=' + str(self.modeVal) + ';\n') + + if self.variables['R_Spec']['type'] == "Product Molar Flow (mol/s)": + self.OM_data_eqn = self.OM_data_eqn + (self.output_stms[1].name + '.' + 'F_p[1] = ' + str( + self.variables['R_Spec']['value']) + ';\n') + elif self.variables['R_Spec']['type'] == "Temperature (K)": + self.OM_data_eqn = self.OM_data_eqn + (self.output_stms[1].name + '.' + 'T = ' + str( + self.variables['R_Spec']['value']) + ';\n') + elif self.variables['R_Spec']['type'] == "Compound Molar Fraction": + self.OM_data_eqn = self.OM_data_eqn + (self.output_stms[1].name + '.x_pc[1,:' + + str(self.compounds.index(self.variables['R_Spec']['comp']) + 1) + '] = ' + str( + self.variables['R_Spec']['value']) + ';\n') + elif self.variables['R_Spec']['type'] == "Compound Molar Flow (mol/s)": + self.OM_data_eqn = self.OM_data_eqn + (self.output_stms[1].name + '.F_pc[1,:' + + str(self.compounds.index(self.variables['R_Spec']['comp']) + 1) + '] = ' + str( + self.variables['R_Spec']['value']) + ';\n') + + + self.OM_data_eqn = self.OM_data_eqn + self.name + '.reboiler.P=' + str( + self.variables['Preb']['value']) + ';\n' + self.OM_data_eqn = self.OM_data_eqn + self.name + '.condenser.P=' + str( + self.variables['Pcond']['value']) + ';\n' + return self.OM_data_eqn class ConvertionReactor(UnitOperation): def __init__(self,name='',Nr=None,b=None,X=None,Z=None,a=[],operation=None,Tdef=None): @@ -305,13 +412,13 @@ class CompoundSeparator(UnitOperation): self.no_of_inputs = 1 self.no_of_outputs = 2 - self.SepFact_modes = ['Molar_Flow (mol/s)', 'Mass_Flow (g/s)', 'Inlet_Molar_Flow_Percent', 'Outlet_Molar_Flow_Percent'] + self.SepFact_modes = ['Molar_Flow (mol/s)', 'Mass_Flow (g/s)', 'Inlet_Molar_Flow_Percent', 'Outlet_Molar_Flow_Percent'] type(self).counter += 1 self.variables = { 'SepStrm' : {'name':'Separation Stream', 'value':1, 'unit':''}, - 'SepVal_c' : {'name':'Separation Value', 'value':[], 'unit':''}, - 'SepFact_c' : {'name':'Separaction Factor', 'value':[], 'unit':''}, + 'SepVal_c' : {'name':'Separation Value', 'value':['']*len(self.compounds), 'unit':''}, + 'SepFact_c' : {'name':'Separaction Factor', 'value':['']*len(self.compounds), 'unit':''}, } def param_setter(self,params): @@ -323,16 +430,21 @@ class CompoundSeparator(UnitOperation): self.variables['SepStrm']['value'] = 2 for index, i in enumerate(range(2, len(params))): if (i %2 != 0): - self.variables['SepVal_c']['value'].append(float(params[i])) + self.variables['SepVal_c']['value'][index//2] = float(params[i]) else: - self.variables['SepFact_c']['value'].append(params[i].split(' ')[0]) + self.variables['SepFact_c']['value'][index//2] = params[i] - self.variables['SepFact_c']['value'] = json.dumps(self.variables['SepFact_c']['value']).replace('[','{').replace(']','}') - self.variables['SepStrm']['value'] = str(self.variables['SepStrm']['value']) - self.variables['SepVal_c']['value'] = json.dumps(self.variables['SepVal_c']['value']).replace('[','{').replace(']','}') + # self.variables['SepFact_c']['value'] = json.dumps(self.variables['SepFact_c']['value']).replace('[','{').replace(']','}') + # self.variables['SepStrm']['value'] = str(self.variables['SepStrm']['value']) + # self.variables['SepVal_c']['value'] = json.dumps(self.variables['SepVal_c']['value']).replace('[','{').replace(']','}') def OM_Flowsheet_Initialize(self): + SepStrm = str(self.variables['SepStrm']['value']) + SepFact = [] + for i in range(len(self.compounds)): + SepFact.append(self.variables['SepFact_c']['value'][i].split(' ')[0]) + SepFact = json.dumps(SepFact).replace('[', '{').replace(']', '}') self.OM_data_init = '' comp_count = len(self.compounds) self.OM_data_init = self.OM_data_init + ( @@ -341,12 +453,13 @@ class CompoundSeparator(UnitOperation): comp = str(self.compounds).strip('[').strip(']') comp = comp.replace("'", "") self.OM_data_init = self.OM_data_init + comp + ("},") - self.OM_data_init = self.OM_data_init + ("SepFact_c = "+self.variables['SepFact_c']['value']+",SepStrm = " + self.variables['SepStrm']['value'] + ");\n") #+ ", sepFactVal = " + self.variables['SepVal_c']['value'] + self.OM_data_init = self.OM_data_init + ("SepFact_c = " + SepFact + ",SepStrm = " + SepStrm + ");\n") return self.OM_data_init def OM_Flowsheet_Equation(self): + SepVal = json.dumps(self.variables['SepVal_c']['value']).replace('[','{').replace(']','}') self.OM_data_eqn = '' self.OM_data_eqn += ('connect(' + self.name + '.In,' + self.input_stms[0].name + '.Out);\n') @@ -356,7 +469,7 @@ class CompoundSeparator(UnitOperation): self.OM_data_eqn += ('connect(' + strm.name + '.In,' + self.name + '.Out' + str(strcount) + ');\n') strcount += 1 - self.OM_data_eqn += (self.name + '.SepVal_c ' + '=' + self.variables['SepVal_c']['value'] + ';\n') + self.OM_data_eqn += (self.name + '.SepVal_c ' + '=' + SepVal + ';\n') return self.OM_data_eqn @@ -440,7 +553,7 @@ class Splitter(UnitOperation): UnitOperation.__init__(self) self.name = name + str(Splitter.counter) self.type = 'Splitter' - self.no_of_outputs = 3 + self.no_of_outputs = 2 self.CalcType_modes = ['Split_Ratio', 'Molar_Flow', 'Mass_Flow'] @@ -450,7 +563,7 @@ class Splitter(UnitOperation): self.variables = { 'No' : {'name':'No. of Output', 'value':3, 'unit':''}, 'CalcType' : {'name':'Calculation Type', 'value':self.CalcType_modes[0], 'unit':''}, - 'SpecVal_s' : {'name':'Specification Value', 'value':[50,50], 'unit':''} + 'SpecVal_s' : {'name':'Specification Value', 'value':[0.5,0.5], 'unit':''} } specval = self.variables['SpecVal_s']['value'] @@ -465,6 +578,8 @@ class Splitter(UnitOperation): self.variables['SpecVal_s']['unit'] = 'mol/s' elif self.variables['CalcType']['value'] == 'Mass_Flow': self.variables['SpecVal_s']['unit'] = 'g/s' + else: + self.variables['SpecVal_s']['unit'] = '' class Mixer(UnitOperation): @@ -299,6 +299,7 @@ class MainApp(QMainWindow,ui): data = [] for i in self.container.unit_operations: data.append(i) + i.saved = True print(i.pos) data.append(compound_selected) print(data) |