summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPriyam Nayak2021-02-09 18:32:14 +0530
committerGitHub2021-02-09 18:32:14 +0530
commit47a2cf43129fa18cbac56df8d53208a1b21ea4f7 (patch)
tree1e966c67a1c2e920c2e0521f2517058a7732d2aa
parent4e96691bc758904e05d0e03f0368dcbcd1efaec3 (diff)
parent3dd09f5b8d5326ce57db71da1fac77386dfbd700 (diff)
downloadChemical-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
-rw-r--r--.gitignore2
-rw-r--r--Container.py2
-rw-r--r--DiagramRepresentation_Component[dot]py_2019work.uxf62
-rw-r--r--DockWidgets/DockWidget.py4
-rw-r--r--DockWidgets/DockWidget.txt636
-rw-r--r--DockWidgets/DockWidgetCompoundSeparator.py15
-rw-r--r--DockWidgets/DockWidgetCompoundSeparator.ui2
-rw-r--r--DockWidgets/DockWidgetDistillationColumn.py23
-rw-r--r--DockWidgets/DockWidgetDistillationColumn.ui7
-rw-r--r--DockWidgets/DockWidgetFlash.py3
-rw-r--r--DockWidgets/DockWidgetMaterialStream.py9
-rw-r--r--DockWidgets/DockWidgetMixer.py1
-rw-r--r--DockWidgets/DockWidgetShortcutColumn.py6
-rw-r--r--DockWidgets/DockWidgetSplitter.py13
-rw-r--r--DockWidgets/__pycache__/DockWidget.cpython-37.pycbin4329 -> 4390 bytes
-rw-r--r--DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pycbin3065 -> 3257 bytes
-rw-r--r--DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pycbin4911 -> 5219 bytes
-rw-r--r--DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pycbin2737 -> 2857 bytes
-rw-r--r--DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pycbin8124 -> 8254 bytes
-rw-r--r--DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pycbin2001 -> 2043 bytes
-rw-r--r--DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pycbin4435 -> 4646 bytes
-rw-r--r--DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pycbin2519 -> 2675 bytes
-rw-r--r--Graphics.py96
-rw-r--r--OMChem/Flowsheet.py4
-rw-r--r--Simulator/Simulator/Files/ThermodynamicPackages/RaoultsLaw.mo2
-rw-r--r--Simulator/Simulator/UnitOperations/DistillationColumn/DistCol.mo4
-rw-r--r--Streams.py4
-rw-r--r--Undo.datbin0 -> 1981 bytes
-rw-r--r--UnitOperations.py183
-rw-r--r--mainApp.py1
30 files changed, 337 insertions, 742 deletions
diff --git a/.gitignore b/.gitignore
index f1134d7..cf57c05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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=&lt;&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
index 72623eb..1a43e5b 100644
--- a/DockWidgets/__pycache__/DockWidget.cpython-37.pyc
+++ b/DockWidgets/__pycache__/DockWidget.cpython-37.pyc
Binary files differ
diff --git a/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pyc
index 03ba8d4..8f43ce8 100644
--- a/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pyc
+++ b/DockWidgets/__pycache__/DockWidgetCompoundSeparator.cpython-37.pyc
Binary files differ
diff --git a/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc
index f538f77..af05fb7 100644
--- a/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc
+++ b/DockWidgets/__pycache__/DockWidgetDistillationColumn.cpython-37.pyc
Binary files differ
diff --git a/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc
index d8eaa0b..c7d0661 100644
--- a/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc
+++ b/DockWidgets/__pycache__/DockWidgetFlash.cpython-37.pyc
Binary files differ
diff --git a/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc
index 7d5b43a..f2c5b98 100644
--- a/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc
+++ b/DockWidgets/__pycache__/DockWidgetMaterialStream.cpython-37.pyc
Binary files differ
diff --git a/DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pyc
index 939df5f..9d19bbf 100644
--- a/DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pyc
+++ b/DockWidgets/__pycache__/DockWidgetMixer.cpython-37.pyc
Binary files differ
diff --git a/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc
index d057db2..bc4eb06 100644
--- a/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc
+++ b/DockWidgets/__pycache__/DockWidgetShortcutColumn.cpython-37.pyc
Binary files differ
diff --git a/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc b/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc
index 7cc065b..f90f086 100644
--- a/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc
+++ b/DockWidgets/__pycache__/DockWidgetSplitter.cpython-37.pyc
Binary files differ
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
diff --git a/Streams.py b/Streams.py
index ac89830..f5bdabe 100644
--- a/Streams.py
+++ b/Streams.py
@@ -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'},
diff --git a/Undo.dat b/Undo.dat
index e69de29..d22999d 100644
--- a/Undo.dat
+++ b/Undo.dat
Binary files differ
diff --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):
diff --git a/mainApp.py b/mainApp.py
index ea64132..29db874 100644
--- a/mainApp.py
+++ b/mainApp.py
@@ -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)