from OMChem.Flowsheet import Flowsheet
from OMChem.MatStm import MatStm
from OMChem.Mixer import Mixer
from OMChem.Heater import Heater
from component_selector import *
from collections import defaultdict
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import datetime
import itertools
class Container():
def __init__(self,msgbrowser):
self.unitOp = []
self.thermoPackage = None
self.compounds = None
self.flowsheet = None
self.conn = defaultdict(list)
self.op=defaultdict(list)
self.ip=defaultdict(list)
self.msg = msgbrowser
self.msg.setText("")
self.opl=[]
self.result=[]
def currentTime(self):
now = datetime.datetime.now()
time = str(now.hour) + ":" + str(now.minute) + ":" +str(now.second)
return time
def updateConn(self,key,value):
self.conn[key].append(value)
self.msg.append("["+str(self.currentTime())+"] "+key.name+" output is connected to input of "+value.name +" ")
def addUnitOp(self,obj):
if(obj in self.unitOp):
pass
else:
self.unitOp.append(obj)
self.msg.append("["+str(self.currentTime())+"] "+obj.name+" is instantiated .""")
def fetchObject(self,name):
for i in self.unitOp:
if(i.name==name):
return i
def addCompounds(self,comp):
self.compounds = comp
def add_thermoPackage(self,thermo):
self.thermoPackage = thermo
def connection(self):
try:
self.op.clear()
self.ip.clear()
self.opl.clear()
stm = ['MatStm','EngStm']
for i in self.conn:
if i.type not in stm:
self.op[i]=self.conn[i]
for j in range(len(self.conn[i])):
if self.conn[i][j].type not in stm:
self.ip[self.conn[i][j]].append(i)
for i in self.op:
i.connect(InputStms=self.ip[i],OutputStms=self.op[i])
self.opl.append([self.op[i] for i in self.op])
self.opl=flatlist(flatlist(self.opl))
except Exception as e:
print(e)
def msgBrowser(self):
std = self.flowsheet.stdout.decode("utf-8")
if(std):
stdout = str(std)
stdout = stdout.replace("\n","
")
self.msg.append(""+stdout+"")
stde = self.flowsheet.stderr.decode("utf-8")
if(stde):
stdout = str(stde)
stdout = stdout.replace("\n","
")
self.msg.append(""+stdout+"")
def simulate(self,mode):
print(mode)
self.compounds = compound_selected
self.connection()
self.flowsheet = Flowsheet()
self.flowsheet.add_comp_list(self.compounds)
print("######## connection master#########\n",self.conn)
for i in self.unitOp :
if i in self.opl:
print("here",i)
self.flowsheet.add_UnitOpn(i,1)
else:
self.flowsheet.add_UnitOpn(i,0)
if mode=='SM':
self.msg.append("["+str(self.currentTime())+"] Simulating in Sequential mode ... ")
self.flowsheet.simulateSM(self.ip,self.op)
self.msgBrowser()
self.result=self.flowsheet.resdata
print("under SEQ mode simulation")
elif mode=='EQN':
self.msg.append("["+str(self.currentTime())+"] Simulating in equation mode ... ")
self.flowsheet.simulateEQN()
self.msgBrowser()
self.result=self.flowsheet.resdata
print("under Eqn mode simulation")
def flatlist(lst):
flat_list=[]
for sublist in lst:
for item in sublist:
flat_list.append(item)
return flat_list