summaryrefslogtreecommitdiff
path: root/Streams.py
diff options
context:
space:
mode:
Diffstat (limited to 'Streams.py')
-rw-r--r--Streams.py376
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