diff options
author | SaurabhAgarwala | 2020-01-03 15:54:24 +0530 |
---|---|---|
committer | SaurabhAgarwala | 2020-01-03 15:54:24 +0530 |
commit | 8dfb7d836e438035be2284e49554dac36d0af7bf (patch) | |
tree | 0a14314f4a248fe5ad4627e2f6cd11068e689673 /Streams.py | |
parent | 4138fd762a45b15dc7dfea661a93a047a0eba4a0 (diff) | |
download | Chemical-Simulator-GUI-8dfb7d836e438035be2284e49554dac36d0af7bf.tar.gz Chemical-Simulator-GUI-8dfb7d836e438035be2284e49554dac36d0af7bf.tar.bz2 Chemical-Simulator-GUI-8dfb7d836e438035be2284e49554dac36d0af7bf.zip |
Made GUI compatible with the new Simulator, abbreviations updated to new convention and few bugs eliminated with code clean up at places
Diffstat (limited to 'Streams.py')
-rw-r--r-- | Streams.py | 376 |
1 files changed, 376 insertions, 0 deletions
diff --git a/Streams.py b/Streams.py new file mode 100644 index 0000000..bb8f347 --- /dev/null +++ b/Streams.py @@ -0,0 +1,376 @@ +from OMPython import OMCSession +import json +import sys +from collections import defaultdict + +class MaterialStream(): + counter = 1 + def __init__(self,CompNames = [],Temperature=300,Pressure=101325,xvap=None,xmvap=None,xliq=None,xmliq=None,x_pc = [1.0], xm_pc = [], MolFlow=100, MasFlow=None,**kwargs): + self.name = 'MaterialStream' + str(MaterialStream.counter) + self.type = 'MaterialStream' + self.T = Temperature + self.P = Pressure + self.xvap = xvap + self.xmvap = xmvap + self.xliq = xliq + self.xmliq = xmliq + self.CompNames = CompNames + self.x_pc = x_pc + self.xm_pc = xm_pc + self.MolFlow = MolFlow + self.MasFlow = MasFlow + self.OM_data_init = '' + self.OM_data_eqn = '' + self.count = MaterialStream.counter + self.thermoPackage ="RaoultsLaw" + self.mode1 = "P" + self.mode1val = "" + self.mode2 = "T" + self.mode2val = "" + self.no_of_inputs = 1 + self.no_of_outputs = 1 + self.x = 2500-30 + self.y = 2500-30 + MaterialStream.counter+=1 + self.startDict = {} + self.eqnDict = {} + self.modesList = ["PT","PH","PVF","TVF","PS"] + + + self.Prop = { + + self.mode1:self.mode1val, + self.mode2:self.mode2val, + 'xliq':xliq, + 'xmliq':xmliq, + 'xvap':xvap, + 'xmvap':xmvap, + 'F_p[1]':MolFlow, + 'Fm_p[1]':MasFlow, + 'MW_p[1]':None, + 'MW_p[2]':None, + 'MW_p[3]':None, + 'Cp_p[1]':None, + 'H_p[1]':None, + 'S_p[1]':None, + 'Cp_p[2]':None, + 'H_p[2]':None, + 'S_p[2]':None, + 'Cp_p[3]':None, + 'H_p[3]':None, + 'S_p[3]':None, + 'F_p[2]':None, + 'Fm_p[2]':None, + 'F_p[3]':None, + 'Fm_p[3]':None + + } + + self.Prop1 = { + self.mode1:self.mode1val, + self.mode2:self.mode2val, + 'xliq':xliq, + 'xmliq':xmliq, + 'xvap':xvap, + 'xmvap':xmvap, + 'F_p[1]':MolFlow, + 'Fm_p[1]':MasFlow, + 'MW_p[1]':None, + 'MW_p[2]':None, + 'MW_p[3]':None, + 'Cp_p[1]':None, + 'H_p[1]':None, + 'S_p[1]':None, + 'Cp_p[2]':None, + 'H_p[2]':None, + 'S_p[2]':None, + 'Cp_p[3]':None, + 'H_p[3]':None, + 'S_p[3]':None, + 'F_p[2]':None, + 'Fm_p[2]':None, + 'F_p[3]':None, + 'Fm_p[3]':None + + } + + def paramgetter(self,mode): + dict = {} + if(mode=="PT"): + self.mode1 = 'P' + self.mode2 = 'T' + dict = {self.mode2:None,self.mode1:None,"x_pc":None,"MolFlow":None,"thermoPackage":None} + elif(mode=="PH"): + self.mode1 = 'P' + self.mode2 = 'H_p[1]' + dict = {self.mode1:None,self.mode2:None,"x_pc":None,"MolFlow":None,"thermoPackage":None} + elif(mode=="PVF"): + self.mode1 = 'P' + self.mode2 = 'xvap' + dict = {self.mode1:None,self.mode2:None,"x_pc":None,"MolFlow":None,"thermoPackage":None} + elif(mode=="TVF"): + self.mode1 = 'T' + self.mode2 = 'xvap' + dict = {self.mode1:None,self.mode2:None,"x_pc":None,"MolFlow":None,"thermoPackage":None} + elif(mode=="PS"): + self.mode1 = 'P' + self.mode2 = 'S_p[1]' + dict = {self.mode1:None,self.mode2:None,"x_pc":None,"MolFlow":None,"thermoPackage":None} + + return dict + + def paramsetter(self,dict): + self.mode1val = dict[self.mode1] + self.mode2val = dict[self.mode2] + self.MolFlow = dict['MolFlow'] + self.x_pc = dict['x_pc'].split(",") + self.thermoPackage = dict['thermoPackage'] + self.Prop['F_p[1]'] = self.MolFlow + self.Prop[self.mode2] = dict[self.mode2] + self.Prop[self.mode1] = dict[self.mode1] + for i in range(len(self.CompNames)): + print('####### x_pc #########\n',self.x_pc[i]) + if self.x_pc: + self.Prop['x_pc[1,'+str(i+1)+']'] = self.x_pc[i] + else: + self.Prop['x_pc[1,'+str(i+1)+']'] = None + + if self.xm_pc: + self.Prop['xm_pc[1,'+str(i+1)+']'] = self.xm_pc[i] + else: + self.Prop['xm_pc[1,'+str(i+1)+']'] = None + self.Prop['F_pc[1,'+str(i+1)+']'] = None + self.Prop['Fm_pc[1,'+str(i+1)+']'] = None + for i in range(0,len(self.CompNames)): + self.Prop['x_pc[2,'+str(i+1)+']'] = None + self.Prop['xm_pc[2,'+str(i+1)+']'] = None + self.Prop['F_pc[2,'+str(i+1)+']'] = None + self.Prop['Fm_pc[2,'+str(i+1)+']'] = None + self.Prop['x_pc[3,'+str(i+1)+']'] = None + self.Prop['xm_pc[3,'+str(i+1)+']'] = None + self.Prop['F_pc[3,'+str(i+1)+']'] = None + self.Prop['Fm_pc[3,'+str(i+1)+']'] = None + + def GetMinEqnValues(self): + x_pclist = [] + for i in range(0,len(self.CompNames)): + print(self.Prop['x_pc[1,'+str(i+1)+']']) + x_pclist.append(self.Prop['x_pc[1,'+str(i+1)+']']) + print(x_pclist) + #x_pclist = list(self.Prop(x_pc[1,1)]) + x_pc = json.dumps(x_pclist) + print(x_pc) + x_pc = x_pc.replace('[','{') + x_pc = x_pc.replace(']','}') + x_pc = x_pc.replace('"','') + ''' + x_pcstr = json.dumps(self.x_pc) + x_pcstr = x_pcstr.replace('[','{') + x_pcstr = x_pcstr.replace(']','}') + x_pcstr = x_pcstr.replace('"','') + ''' + if self.Prop[self.mode1]: + self.eqnDict[self.mode1] = self.Prop[self.mode1] + if self.Prop[self.mode2]: + self.eqnDict[self.mode2] = self.Prop[self.mode2] + if self.x_pc: + self.eqnDict['x_pc[1,:]'] = x_pc + if self.MolFlow: + self.eqnDict['F_p[1]'] = self.Prop['F_p[1]']#self.MolFlow + + print("##############$GetMinVEqnValuesStart$##################") + print("P:",self.Prop[self.mode1]) + print("T:",self.Prop[self.mode2]) + print("x_pc",x_pc) + print("F_p",self.Prop['F_p[1]']) + print("##############$GetMinVEqnValuesEnd$##################") + + # def GetEquationValues(self): # Not being called anywhere + # if self.Prop[self.mode1]: + # self.eqnDict[self.mode1] = self.Prop[self.mode1] + + # if self.Prop[self.mode2]: + # self.eqnDict[self.mode2] = self.Prop[self.mode2] + + # if self.Prop['x_pc[1,1]']: + # cfa = [] + # for i in range(1,len(self.CompNames)+1): + # cfa.append(self.Prop['x_pc[1,'+str(i)+']']) + # cmpMolFracstr = json.dumps(cfa) + # cmpMolFracstr = cmpMolFracstr.replace('[','{') + # cmpMolFracstr = cmpMolFracstr.replace(']','}') + # cmpMolFracstr = cmpMolFracstr.replace('"','') + # self.eqnDict['x_pc[1,:]'] = cmpMolFracstr + + # if self.Prop['F_p[1]']: + # self.eqnDict['F_p[1]'] = self.Prop['F_p[1]'] + + + def GetStartValues(self): + try: + if self.Prop[self.mode1]: + self.startDict[self.mode1] = self.Prop[self.mode1] + + if self.Prop[self.mode2]: + self.startDict[self.mode2] = self.Prop[self.mode2] + + + if self.Prop['x_pc[2,1]'] != None: + x_pcarr = [] + for i in range(1,4): + cmf = [] + for j in range(1,len(self.CompNames)+1): + cmf.append(str(self.Prop['x_pc['+str(i)+','+str(j)+']'])) + x_pcarr.append(cmf) + x_pcstr = json.dumps(x_pcarr) + x_pcstr = x_pcstr.replace('[','{') + x_pcstr = x_pcstr.replace(']','}') + x_pcstr = x_pcstr.replace('"','') + self.startDict['x_pc'] = x_pcstr + + if self.Prop['xm_pc[2,1]'] != None: + xm_pcarr = [] + for i in range(1,4): + cmf = [] + for j in range(1,len(self.CompNames)+1): + cmf.append(str(self.Prop['xm_pc['+str(i)+','+str(j)+']'])) + xm_pcarr.append(cmf) + xm_pcstr = json.dumps(x_pcarr) + xm_pcstr = xm_pcstr.replace('[','{') + xm_pcstr = xm_pcstr.replace(']','}') + xm_pcstr = xm_pcstr.replace('"','') + self.startDict['xm_pc'] = xm_pcstr + + if self.Prop['Fm_pc[2,1]'] != None: + Fm_pcarr = [] + for i in range(1,4): + cmf = [] + for j in range(1,len(self.CompNames)+1): + cmf.append(str(self.Prop['Fm_pc['+str(i)+','+str(j)+']'])) + Fm_pcarr.append(cmf) + Fm_pcstr = json.dumps(x_pcarr) + Fm_pcstr = Fm_pcstr.replace('[','{') + Fm_pcstr = Fm_pcstr.replace(']','}') + Fm_pcstr = Fm_pcstr.replace('"','') + self.startDict['Fm_pc'] = Fm_pcstr + + if self.Prop['F_pc[2,1]'] != None: + F_pcarr = [] + for i in range(1,4): + cmf = [] + for j in range(1,len(self.CompNames)+1): + cmf.append(str(self.Prop['F_pc['+str(i)+','+str(j)+']'])) + F_pcarr.append(cmf) + F_pcstr = json.dumps(F_pcarr) + F_pcstr = F_pcstr.replace('[','{') + F_pcstr = F_pcstr.replace(']','}') + F_pcstr = F_pcstr.replace('"','') + self.startDict['F_pc'] = F_pcstr + + if self.Prop['MW_p[2]'] != None: + MW_pArr = [] + for i in range(1,4): + MW_pArr.append(self.Prop['MW_p['+str(i)+']']) + MW_pStr = json.dumps(MW_pArr) + MW_pStr = MW_pStr.replace('[','{') + MW_pStr = MW_pStr.replace(']','}') + MW_pStr = MW_pStr.replace('"','') + self.startDict['MW_p'] = MW_pStr + + if self.Prop['F_p[2]'] != None: + F_pArr = [] + for i in range(1,4): + F_pArr.append(self.Prop['F_p['+str(i)+']']) + F_pStr = json.dumps(F_pArr) + F_pStr = F_pStr.replace('[','{') + F_pStr = F_pStr.replace(']','}') + F_pStr = F_pStr.replace('"','') + self.startDict['F_p'] = F_pStr + + if self.Prop['Cp_p[2]'] != None: + Cp_pArr = [] + for i in range(1,4): + Cp_pArr.append(self.Prop['Cp_p['+str(i)+']']) + Cp_pStr = json.dumps(Cp_pArr) + Cp_pStr = Cp_pStr.replace('[','{') + Cp_pStr = Cp_pStr.replace(']','}') + Cp_pStr = Cp_pStr.replace('"','') + self.startDict['Cp_p'] = Cp_pStr + + if self.Prop['H_p[2]'] != None: + H_pArr = [] + for i in range(1,4): + H_pArr.append(self.Prop['H_p['+str(i)+']']) + H_pStr = json.dumps(H_pArr) + H_pStr = H_pStr.replace('[','{') + H_pStr = H_pStr.replace(']','}') + H_pStr = H_pStr.replace('"','') + self.startDict['H_p'] = H_pStr + + + if self.Prop['S_p[2]'] != None: + S_pArr = [] + for i in range(1,4): + S_pArr.append(self.Prop['S_p['+str(i)+']']) + S_pStr = json.dumps(S_pArr) + S_pStr = S_pStr.replace('[','{') + S_pStr = S_pStr.replace(']','}') + S_pStr = S_pStr.replace('"','') + self.startDict['S_p'] = S_pStr + + if self.Prop['Fm_p[2]'] != None: + Fm_pArr = [] + for i in range(1,4): + Fm_pArr.append(self.Prop['Fm_p['+str(i)+']']) + Fm_pStr = json.dumps(Fm_pArr) + Fm_pStr = Fm_pStr.replace('[','{') + Fm_pStr = Fm_pStr.replace(']','}') + Fm_pStr = Fm_pStr.replace('"','') + self.startDict['Fm_p'] = Fm_pStr + + except Exception as e: + exc_type, exc_obj, exc_tb = sys.exc_info() + print(exc_type,exc_tb.tb_lineno) + print(e) + print('error') + + + def OM_Flowsheet_Initialize(self,addedcomp): + self.OM_data_init = '' + self.OM_data_init = self.OM_data_init + ("model ms"+str(self.count)+"\n") + self.OM_data_init = self.OM_data_init + ("extends Simulator.Streams.MaterialStream;\n" ) + self.OM_data_init = self.OM_data_init + ("extends Simulator.Files.ThermodynamicPackages."+self.thermoPackage+";\n") + self.OM_data_init = self.OM_data_init + ("end ms"+str(self.count)+";\n") + comp_count = len(addedcomp) + # self.GetStartValues() + + #self.OM_data_init = "Simulator.Streams.Mat_Stm_RL " + self.name +"(Nc = " + str(comp_count) + self.OM_data_init = self.OM_data_init + "ms"+str(self.count) +" " + self.name +"(Nc = " + str(comp_count) + self.OM_data_init = self.OM_data_init + ",C = {" + C = str(addedcomp).strip('[').strip(']') + C = C.replace("'","") + self.OM_data_init = self.OM_data_init + C + "}," + #for key, value in self.startDict.items(): + # self.OM_data_init = self.OM_data_init + key + '(start = ' + str(value) + '),' + self.OM_data_init = self.OM_data_init[:-1] + self.OM_data_init = self.OM_data_init + ');\n' + return self.OM_data_init + + + def OM_Flowsheet_Equation(self,addedcomp,method): + self.OM_data_eqn = '' + self.comp_count = len(addedcomp) + if method == 'Eqn': + self.eqnDict = {} + self.GetMinEqnValues() + if method == 'SM': + self.eqnDict = {} + self.GetMinEqnValues() + #self.GetEquationValues() + #self.GetEquationValues() + + for key,value in self.eqnDict.items(): + self.OM_data_eqn = self.OM_data_eqn + self.name + '.'+ key + ' = ' + str(value) + ';\n' + return self.OM_data_eqn + +
\ No newline at end of file |