From d476d2e053f937c0060f696312f301591e4f43ea Mon Sep 17 00:00:00 2001
From: brenda-br
Date: Thu, 23 Feb 2023 22:14:39 +0530
Subject: Restructure Code -1
---
OMChem/Flowsheet.py | 306 ----------------------------------------------------
1 file changed, 306 deletions(-)
delete mode 100644 OMChem/Flowsheet.py
(limited to 'OMChem/Flowsheet.py')
diff --git a/OMChem/Flowsheet.py b/OMChem/Flowsheet.py
deleted file mode 100644
index f47c203..0000000
--- a/OMChem/Flowsheet.py
+++ /dev/null
@@ -1,306 +0,0 @@
-import os
-import csv
-from subprocess import Popen, PIPE
-import pandas as pd
-
-class Flowsheet():
- def __init__(self):
- self.sim_name = 'Simulator'
- self.sim_method = ''
- self.unit_operations = []
- self.data = []
- self.compounds = []
- self.interface = ''
- self.omc_path = None
- self.root_dir = os.getcwd() # Chemical-Simulator-GUI
- self.sim_dir_path = os.path.join(self.root_dir, self.sim_name) # Chemical-Simulator-GUI/Simulator
- self.Flomo_path = os.path.join(self.sim_dir_path,'Flowsheet.mo')
- self.eqn_mos_path = os.path.join(self.sim_dir_path,'simulateEQN.mos')
- self.sm_mos_path = os.path.join(self.sim_dir_path,'simulateSM.mos')
- self.result_data = []
- self.stdout=None
- self.stderr=None
-
- def get_omc_path(self,msg):
- try:
- self.omhome = os.environ.get('OPENMODELICAHOME')
- if self.omhome is None:
- self.omhome = os.path.split(os.path.split(os.path.realpath(spawn.find_executable("omc")))[0])[0]
- elif os.path.exists('/opt/local/bin/omc'):
- self.omhome = '/opt/local'
- elif os.path.exists('/usr/bin/omc'):
- self.omhome = '/usr'
- return os.path.join(self.omhome, 'bin', 'omc')
- except BaseException:
- msg.parent().parent().parent().container.disableInterfaceforSimulation(False)
- msg.append("Installation Error : The OpenModelica compiler is missing in the System path please install it.")
- print("The OpenModelica compiler is missing in the System path please install it" )
- raise
-
- def add_unit_operations(self,unitop):
- self.unit_operations.append(unitop)
-
- def remove_unit_operations(self,unitop):
- self.unit_operations.remove(unitop)
-
- def add_compound_list(self,C):
- self.compounds = C
-
- def send_for_simulation_Eqn(self,msg):
- self.result_data = []
- self.omc_path = self.get_omc_path(msg)
- #print(self.omc_path)
-
- if self.sim_method == 'Eqn':
- simpath = self.eqn_mos_path
- os.chdir(self.sim_dir_path)
-
- self.process = Popen([self.omc_path, '-s',simpath], stdout=PIPE, stderr=PIPE)
- self.stdout, self.stderr = self.process.communicate()
-
- os.chdir(self.root_dir)
- if ('timeSimulation = 0.0,\n' in self.stdout.decode("utf-8")):
- self.result_data = []
- else:
- csvpath = os.path.join(self.sim_dir_path,'Flowsheet_res.csv')
- with open (csvpath,'r') as resultFile:
- self.result_data = []
- csvreader = csv.reader(resultFile,delimiter=',')
- for row in csvreader:
- self.result_data.append(row)
-
- def send_for_simulation_SM(self,unitop):
- self.result_data = []
- self.omc_path = self.get_omc_path()
- os.chdir(self.sim_dir_path)
- self.process = Popen([self.omc_path, '-s',unitop.name,'.mos'], stdout=PIPE, stderr=PIPE)
- stdout, stderr = self.process.communicate()
- # print("############### StdOut ################")
- # print(stdout)
- self.result_data = []
- print('Simulating '+unitop.name+'...')
- csvpath = os.path.join(self.sim_dir_path,unitop.name+'_res.csv')
- with open(csvpath,'r') as resultFile:
- csvreader = csv.reader(resultFile,delimiter=',')
- for row in csvreader:
- self.result_data.append(row)
- self.ext_data()
-
- def ext_data(self):
- for unit in self.unit_operations:
- if unit[0].type == 'MaterialStream':
- for key, value in unit[0].Prop.items():
- property_name = unit[0].name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- unit[0].Prop[key] = resultval
-
- def simulate_EQN(self,msg):
- self.data = []
- self.sim_method = 'Eqn'
- self.data.append("model Flowsheet\n")
-
- tempCompounds = self.compounds
- for c in tempCompounds:
- CompName = c
- CompName = CompName.replace(" ", "")
- CompName = CompName.replace("-", "")
- CompName = CompName.replace(",", "")
- CompName = CompName.replace("1", "One")
- CompName = CompName.replace("2", "Two")
- CompName = CompName.replace("3", "Three")
- CompName = CompName.replace("4", "Four")
- CompName = CompName.replace("5", "Five")
- self.data.append("parameter database." + CompName +' '+ CompName + "; \n")
- tempCompounds[tempCompounds.index(c)] = CompName
-
- self.data.append("parameter Integer Nc = " + str(len(tempCompounds)) + ";\n")
- self.data.append("parameter Simulator.Files.ChemsepDatabase.GeneralProperties C[Nc] = {" +
- str(tempCompounds).strip('[').strip(']').replace("'", "") + "};\n")
-
- for unitop in self.unit_operations:
- if unitop.type != 'MaterialStream':
- self.data.append(unitop.OM_Flowsheet_Initialize())
- else:
- self.data.append(unitop.OM_Flowsheet_Initialize(self.compounds))
-
- self.data.append("equation\n")
-
- self.outlist = []
- self.stm = ['MaterialStream','EngStm']
- for unitop in self.unit_operations:
- if unitop.type not in self.stm:
- for j in unitop.output_stms.values():
- self.outlist.append(j)
-
- for unitop in self.unit_operations:
- if unitop not in self.outlist:
- if unitop.type == 'MaterialStream':
- self.data.append(unitop.OM_Flowsheet_Equation(self.compounds,'Eqn'))
- else:
- self.data.append(unitop.OM_Flowsheet_Equation())
- else:
- pass
- with open(self.Flomo_path, 'w') as txtfile:
- for d in self.data:
- txtfile.write(str(d))
- txtfile.write('end Flowsheet;\n')
- #print(self.eqn_mos_path)
- with open(self.eqn_mos_path, 'w') as mosFile:
- mosFile.write('loadModel(Modelica);\n')
- mosFile.write('loadFile(\"Simulator/package.mo\");\n')
- mosFile.write('loadFile(\"database.mo\");\n')
- mosFile.write('loadFile(\"Flowsheet.mo\");\n')
- mosFile.write('simulate(Flowsheet, outputFormat=\"csv\", stopTime=1.0, numberOfIntervals=1);\n')
-
- #print('Initiating Simulation in Equation Oriented Mode')
-
- self.send_for_simulation_Eqn(msg)
-
- def simulate_SM(self,ip,op):
- self.sim_method = 'SM'
- self.data = []
- self.result_data = []
- self.unit = []
- self.csvlist = []
-
- for i in ip:
- common = ip[i]
-
- for k,v in op.items():
- if(set(v) & set(common)):
- if((i in self.unit) and (k in self.unit)):
- pass
- elif(i in self.unit):
- self.unit.insert(self.unit.index(i),k)
- elif(k in self.unit):
- self.unit.append(i)
- else:
- self.unit.append(k)
- self.unit.append(i)
-
- for unitop in self.unit:
- os.chdir(self.root_dir)
- self.data = []
- if unitop.type not in ['MaterialStream','EngStm']:
- inpstms = unitop.input_stms
- outstms = unitop.output_stms
-
- try:
- engstms = unitop.EngStms
- except:
- engstms = None
-
- self.data.append("model "+unitop.name.lower()+'\n')
-
- for c in self.compounds:
- c = c.title()
- lcase = c.lower()
- self.data.append("parameter Simulator.Files.Chemsep_Database." + c +' '+ c + "; \n")
-
- self.data.append(unitop.OM_Flowsheet_Initialize())
-
- if type(outstms) is list:
- for stm in outstms:
- self.data.append(stm.OM_Flowsheet_Initialize())
- else:
- self.data.append(outstms.OM_Flowsheet_Initialize())
-
- if engstms:
- self.data.append(engstms.OM_Flowsheet_Initialize())
-
- if type(inpstms) is list:
- for stm in inpstms:
- self.data.append(stm.OM_Flowsheet_Initialize())
- else:
- self.data.append(inpstms.OM_Flowsheet_Initialize())
-
- self.data.append('equation\n')
- self.data.append(unitop.OM_Flowsheet_Equation())
-
- if type(inpstms) is list:
- for stm in inpstms:
- self.data.append(stm.OM_Flowsheet_Equation())
- else:
- self.data.append(inpstms.OM_Flowsheet_Equation())
-
- unitmofile = os.path.join(self.sim_dir_path,unitop.name.lower()+'.mo')
-
- with open(unitmofile,'w') as unitFile:
- for d in self.data:
- unitFile.write(d)
- unitFile.write('end '+unitop.name.lower()+';\n')
-
- unitmosfile = os.path.join(self.sim_dir_path,unitop.name.lower()+'.mos')
- with open(unitmosfile, 'w') as mosFile:
- mosFile.write('loadModel(Modelica);\n')
- mosFile.write("loadFile(\"Simulator\package.mo\");\n")
-
- mosFile.write("loadFile(\""+unitop.name.lower()+".mo\");\n")
- mosFile.write("simulate("+unitop.name.lower()+", outputFormat=\"csv\", stopTime=1.0, numberOfIntervals=1);\n")
-
- print("Initiating simulation in Sequential Modular Mode")
- self.omc_path = self.get_omc_path()
- os.chdir(self.sim_dir_path)
- sim = os.path.join(self.sim_dir_path,unitop.name.lower()+'.mos')
- self.process = Popen([self.omc_path, '-s',sim], stdout=PIPE, stderr=PIPE)
- self.stdout, self.stderr = self.process.communicate()
- os.chdir(self.root_dir)
-
- # print("############### StdOut ################")
- # print(self.stdout)
- # print("############### StdErr ################")
- # print(self.stderr)
- # print('Simulating '+unitop.name.lower()+'...')
- csvpath = os.path.join(self.sim_dir_path,unitop.name.lower()+'_res.csv')
-
- self.csvlist.append(csvpath)
-
- with open(csvpath,'r') as resultFile:
- csvreader = csv.reader(resultFile,delimiter=',')
- for row in csvreader:
- self.result_data.append(row)
-
- os.chdir(self.root_dir)
- if type(inpstms) is list:
- for stm in inpstms:
- for key,value in stm.Prop.items():
- property_name = stm.name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- stm.Prop[key] = resultval
- else:
- for key, value in inpstms.Prop.items():
- property_name = inpstms.name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- inpstms.Prop[key] = resultval
-
- if type(outstms) is list:
- for stm in outstms:
- for key, value in stm.Prop.items():
- property_name = stm.name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- stm.Prop[key] = resultval
- else:
- for key, value in outstms.Prop.items():
- property_name = outstms.name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- outstms.Prop[key] = resultval
-
- self.dataframes = [pd.read_csv(i) for i in self.csvlist]
- os.chdir(self.sim_dir_path)
- dffinal = pd.concat(self.dataframes,axis=1)
- dffinal.to_csv('FlowsheetSEQ.csv',index=False)
- self.result_data.clear()
- with open(os.path.join(self.sim_dir_path+'/FlowsheetSEQ.csv'),'r') as resultFile:
- csvreader = csv.reader(resultFile,delimiter=',')
- for row in csvreader:
- self.result_data.append(row)
--
cgit
From 7af3526e105cc330422f8742ec5edec1c4a0a98f Mon Sep 17 00:00:00 2001
From: brenda-br
Date: Thu, 2 Mar 2023 15:49:11 +0530
Subject: Restructuring Finalized for App Bundling
---
OMChem/Flowsheet.py | 306 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 306 insertions(+)
create mode 100644 OMChem/Flowsheet.py
(limited to 'OMChem/Flowsheet.py')
diff --git a/OMChem/Flowsheet.py b/OMChem/Flowsheet.py
new file mode 100644
index 0000000..2e7b098
--- /dev/null
+++ b/OMChem/Flowsheet.py
@@ -0,0 +1,306 @@
+import os
+import csv
+from subprocess import Popen, PIPE
+import pandas as pd
+
+class Flowsheet():
+ def __init__(self):
+ self.sim_name = 'Simulator'
+ self.sim_method = ''
+ self.unit_operations = []
+ self.data = []
+ self.compounds = []
+ self.interface = ''
+ self.omc_path = None
+ self.root_dir = os.getcwd() # Chemical-Simulator-GUI
+ self.sim_dir_path = os.path.join(self.root_dir, self.sim_name) # Chemical-Simulator-GUI/Simulator
+ self.Flomo_path = os.path.join(self.sim_dir_path,'Flowsheet.mo')
+ self.eqn_mos_path = os.path.join(self.sim_dir_path,'simulateEQN.mos')
+ self.sm_mos_path = os.path.join(self.sim_dir_path,'simulateSM.mos')
+ self.result_data = []
+ self.stdout=None
+ self.stderr=None
+
+ def get_omc_path(self,msg):
+ try:
+ self.omhome = os.environ.get('OPENMODELICAHOME')
+ if self.omhome is None:
+ self.omhome = os.path.split(os.path.split(os.path.realpath(spawn.find_executable("omc")))[0])[0]
+ elif os.path.exists('/opt/local/bin/omc'):
+ self.omhome = '/opt/local'
+ elif os.path.exists('/usr/bin/omc'):
+ self.omhome = '/usr'
+ return os.path.join(self.omhome, 'bin', 'omc')
+ except BaseException:
+ msg.parent().parent().parent().container.disableInterfaceforSimulation(False)
+ msg.append("Installation Error : The OpenModelica compiler is missing in the System path please install it.")
+ print("The OpenModelica compiler is missing in the System path please install it" )
+ raise
+
+ def add_unit_operations(self,unitop):
+ self.unit_operations.append(unitop)
+
+ def remove_unit_operations(self,unitop):
+ self.unit_operations.remove(unitop)
+
+ def add_compound_list(self,C):
+ self.compounds = C
+
+ def send_for_simulation_Eqn(self,msg):
+ self.result_data = []
+ self.omc_path = self.get_omc_path(msg)
+ #print(self.omc_path)
+
+ if self.sim_method == 'Eqn':
+ simpath = self.eqn_mos_path
+ os.chdir(self.sim_dir_path)
+
+ self.process = Popen([self.omc_path, '-s',simpath], stdout=PIPE, stderr=PIPE)
+ self.stdout, self.stderr = self.process.communicate()
+
+ os.chdir(self.root_dir)
+ if ('timeSimulation = 0.0,\n' in self.stdout.decode("utf-8")):
+ self.result_data = []
+ else:
+ csvpath = os.path.join(self.sim_dir_path,'Flowsheet_res.csv')
+ with open (csvpath,'r') as resultFile:
+ self.result_data = []
+ csvreader = csv.reader(resultFile,delimiter=',')
+ for row in csvreader:
+ self.result_data.append(row)
+
+ def send_for_simulation_SM(self,unitop):
+ self.result_data = []
+ self.omc_path = self.get_omc_path()
+ os.chdir(self.sim_dir_path)
+ self.process = Popen([self.omc_path, '-s',unitop.name,'.mos'], stdout=PIPE, stderr=PIPE)
+ stdout, stderr = self.process.communicate()
+ # print("############### StdOut ################")
+ # print(stdout)
+ self.result_data = []
+ #print('Simulating '+unitop.name+'...')
+ csvpath = os.path.join(self.sim_dir_path,unitop.name+'_res.csv')
+ with open(csvpath,'r') as resultFile:
+ csvreader = csv.reader(resultFile,delimiter=',')
+ for row in csvreader:
+ self.result_data.append(row)
+ self.ext_data()
+
+ def ext_data(self):
+ for unit in self.unit_operations:
+ if unit[0].type == 'MaterialStream':
+ for key, value in unit[0].Prop.items():
+ property_name = unit[0].name + '.' + key
+ if property_name in self.result_data[0]:
+ ind = self.result_data[0].index(property_name)
+ resultval = str(self.result_data[-1][ind])
+ unit[0].Prop[key] = resultval
+
+ def simulate_EQN(self,msg):
+ self.data = []
+ self.sim_method = 'Eqn'
+ self.data.append("model Flowsheet\n")
+
+ tempCompounds = self.compounds
+ for c in tempCompounds:
+ CompName = c
+ CompName = CompName.replace(" ", "")
+ CompName = CompName.replace("-", "")
+ CompName = CompName.replace(",", "")
+ CompName = CompName.replace("1", "One")
+ CompName = CompName.replace("2", "Two")
+ CompName = CompName.replace("3", "Three")
+ CompName = CompName.replace("4", "Four")
+ CompName = CompName.replace("5", "Five")
+ self.data.append("parameter database." + CompName +' '+ CompName + "; \n")
+ tempCompounds[tempCompounds.index(c)] = CompName
+
+ self.data.append("parameter Integer Nc = " + str(len(tempCompounds)) + ";\n")
+ self.data.append("parameter Simulator.Files.ChemsepDatabase.GeneralProperties C[Nc] = {" +
+ str(tempCompounds).strip('[').strip(']').replace("'", "") + "};\n")
+
+ for unitop in self.unit_operations:
+ if unitop.type != 'MaterialStream':
+ self.data.append(unitop.OM_Flowsheet_Initialize())
+ else:
+ self.data.append(unitop.OM_Flowsheet_Initialize(self.compounds))
+
+ self.data.append("equation\n")
+
+ self.outlist = []
+ self.stm = ['MaterialStream','EngStm']
+ for unitop in self.unit_operations:
+ if unitop.type not in self.stm:
+ for j in unitop.output_stms.values():
+ self.outlist.append(j)
+
+ for unitop in self.unit_operations:
+ if unitop not in self.outlist:
+ if unitop.type == 'MaterialStream':
+ self.data.append(unitop.OM_Flowsheet_Equation(self.compounds,'Eqn'))
+ else:
+ self.data.append(unitop.OM_Flowsheet_Equation())
+ else:
+ pass
+ with open(self.Flomo_path, 'w') as txtfile:
+ for d in self.data:
+ txtfile.write(str(d))
+ txtfile.write('end Flowsheet;\n')
+ #print(self.eqn_mos_path)
+ with open(self.eqn_mos_path, 'w') as mosFile:
+ mosFile.write('loadModel(Modelica);\n')
+ mosFile.write('loadFile(\"Simulator/package.mo\");\n')
+ mosFile.write('loadFile(\"database.mo\");\n')
+ mosFile.write('loadFile(\"Flowsheet.mo\");\n')
+ mosFile.write('simulate(Flowsheet, outputFormat=\"csv\", stopTime=1.0, numberOfIntervals=1);\n')
+
+ #print('Initiating Simulation in Equation Oriented Mode')
+
+ self.send_for_simulation_Eqn(msg)
+
+ def simulate_SM(self,ip,op):
+ self.sim_method = 'SM'
+ self.data = []
+ self.result_data = []
+ self.unit = []
+ self.csvlist = []
+
+ for i in ip:
+ common = ip[i]
+
+ for k,v in op.items():
+ if(set(v) & set(common)):
+ if((i in self.unit) and (k in self.unit)):
+ pass
+ elif(i in self.unit):
+ self.unit.insert(self.unit.index(i),k)
+ elif(k in self.unit):
+ self.unit.append(i)
+ else:
+ self.unit.append(k)
+ self.unit.append(i)
+
+ for unitop in self.unit:
+ os.chdir(self.root_dir)
+ self.data = []
+ if unitop.type not in ['MaterialStream','EngStm']:
+ inpstms = unitop.input_stms
+ outstms = unitop.output_stms
+
+ try:
+ engstms = unitop.EngStms
+ except:
+ engstms = None
+
+ self.data.append("model "+unitop.name.lower()+'\n')
+
+ for c in self.compounds:
+ c = c.title()
+ lcase = c.lower()
+ self.data.append("parameter Simulator.Files.Chemsep_Database." + c +' '+ c + "; \n")
+
+ self.data.append(unitop.OM_Flowsheet_Initialize())
+
+ if type(outstms) is list:
+ for stm in outstms:
+ self.data.append(stm.OM_Flowsheet_Initialize())
+ else:
+ self.data.append(outstms.OM_Flowsheet_Initialize())
+
+ if engstms:
+ self.data.append(engstms.OM_Flowsheet_Initialize())
+
+ if type(inpstms) is list:
+ for stm in inpstms:
+ self.data.append(stm.OM_Flowsheet_Initialize())
+ else:
+ self.data.append(inpstms.OM_Flowsheet_Initialize())
+
+ self.data.append('equation\n')
+ self.data.append(unitop.OM_Flowsheet_Equation())
+
+ if type(inpstms) is list:
+ for stm in inpstms:
+ self.data.append(stm.OM_Flowsheet_Equation())
+ else:
+ self.data.append(inpstms.OM_Flowsheet_Equation())
+
+ unitmofile = os.path.join(self.sim_dir_path,unitop.name.lower()+'.mo')
+
+ with open(unitmofile,'w') as unitFile:
+ for d in self.data:
+ unitFile.write(d)
+ unitFile.write('end '+unitop.name.lower()+';\n')
+
+ unitmosfile = os.path.join(self.sim_dir_path,unitop.name.lower()+'.mos')
+ with open(unitmosfile, 'w') as mosFile:
+ mosFile.write('loadModel(Modelica);\n')
+ mosFile.write("loadFile(\"Simulator\package.mo\");\n")
+
+ mosFile.write("loadFile(\""+unitop.name.lower()+".mo\");\n")
+ mosFile.write("simulate("+unitop.name.lower()+", outputFormat=\"csv\", stopTime=1.0, numberOfIntervals=1);\n")
+
+ #print("Initiating simulation in Sequential Modular Mode")
+ self.omc_path = self.get_omc_path()
+ os.chdir(self.sim_dir_path)
+ sim = os.path.join(self.sim_dir_path,unitop.name.lower()+'.mos')
+ self.process = Popen([self.omc_path, '-s',sim], stdout=PIPE, stderr=PIPE)
+ self.stdout, self.stderr = self.process.communicate()
+ os.chdir(self.root_dir)
+
+ # print("############### StdOut ################")
+ # print(self.stdout)
+ # print("############### StdErr ################")
+ # print(self.stderr)
+ # print('Simulating '+unitop.name.lower()+'...')
+ csvpath = os.path.join(self.sim_dir_path,unitop.name.lower()+'_res.csv')
+
+ self.csvlist.append(csvpath)
+
+ with open(csvpath,'r') as resultFile:
+ csvreader = csv.reader(resultFile,delimiter=',')
+ for row in csvreader:
+ self.result_data.append(row)
+
+ os.chdir(self.root_dir)
+ if type(inpstms) is list:
+ for stm in inpstms:
+ for key,value in stm.Prop.items():
+ property_name = stm.name + '.' + key
+ if property_name in self.result_data[0]:
+ ind = self.result_data[0].index(property_name)
+ resultval = str(self.result_data[-1][ind])
+ stm.Prop[key] = resultval
+ else:
+ for key, value in inpstms.Prop.items():
+ property_name = inpstms.name + '.' + key
+ if property_name in self.result_data[0]:
+ ind = self.result_data[0].index(property_name)
+ resultval = str(self.result_data[-1][ind])
+ inpstms.Prop[key] = resultval
+
+ if type(outstms) is list:
+ for stm in outstms:
+ for key, value in stm.Prop.items():
+ property_name = stm.name + '.' + key
+ if property_name in self.result_data[0]:
+ ind = self.result_data[0].index(property_name)
+ resultval = str(self.result_data[-1][ind])
+ stm.Prop[key] = resultval
+ else:
+ for key, value in outstms.Prop.items():
+ property_name = outstms.name + '.' + key
+ if property_name in self.result_data[0]:
+ ind = self.result_data[0].index(property_name)
+ resultval = str(self.result_data[-1][ind])
+ outstms.Prop[key] = resultval
+
+ self.dataframes = [pd.read_csv(i) for i in self.csvlist]
+ os.chdir(self.sim_dir_path)
+ dffinal = pd.concat(self.dataframes,axis=1)
+ dffinal.to_csv('FlowsheetSEQ.csv',index=False)
+ self.result_data.clear()
+ with open(os.path.join(self.sim_dir_path+'/FlowsheetSEQ.csv'),'r') as resultFile:
+ csvreader = csv.reader(resultFile,delimiter=',')
+ for row in csvreader:
+ self.result_data.append(row)
--
cgit
From 3cbdd4238867bc860282f7cf702d73b5be6e3f86 Mon Sep 17 00:00:00 2001
From: brenda-br
Date: Sat, 4 Mar 2023 11:32:15 +0530
Subject: Revert "Restructuring Finalized for App Bundling"
This reverts commit 7af3526e105cc330422f8742ec5edec1c4a0a98f.
---
OMChem/Flowsheet.py | 306 ----------------------------------------------------
1 file changed, 306 deletions(-)
delete mode 100644 OMChem/Flowsheet.py
(limited to 'OMChem/Flowsheet.py')
diff --git a/OMChem/Flowsheet.py b/OMChem/Flowsheet.py
deleted file mode 100644
index 2e7b098..0000000
--- a/OMChem/Flowsheet.py
+++ /dev/null
@@ -1,306 +0,0 @@
-import os
-import csv
-from subprocess import Popen, PIPE
-import pandas as pd
-
-class Flowsheet():
- def __init__(self):
- self.sim_name = 'Simulator'
- self.sim_method = ''
- self.unit_operations = []
- self.data = []
- self.compounds = []
- self.interface = ''
- self.omc_path = None
- self.root_dir = os.getcwd() # Chemical-Simulator-GUI
- self.sim_dir_path = os.path.join(self.root_dir, self.sim_name) # Chemical-Simulator-GUI/Simulator
- self.Flomo_path = os.path.join(self.sim_dir_path,'Flowsheet.mo')
- self.eqn_mos_path = os.path.join(self.sim_dir_path,'simulateEQN.mos')
- self.sm_mos_path = os.path.join(self.sim_dir_path,'simulateSM.mos')
- self.result_data = []
- self.stdout=None
- self.stderr=None
-
- def get_omc_path(self,msg):
- try:
- self.omhome = os.environ.get('OPENMODELICAHOME')
- if self.omhome is None:
- self.omhome = os.path.split(os.path.split(os.path.realpath(spawn.find_executable("omc")))[0])[0]
- elif os.path.exists('/opt/local/bin/omc'):
- self.omhome = '/opt/local'
- elif os.path.exists('/usr/bin/omc'):
- self.omhome = '/usr'
- return os.path.join(self.omhome, 'bin', 'omc')
- except BaseException:
- msg.parent().parent().parent().container.disableInterfaceforSimulation(False)
- msg.append("Installation Error : The OpenModelica compiler is missing in the System path please install it.")
- print("The OpenModelica compiler is missing in the System path please install it" )
- raise
-
- def add_unit_operations(self,unitop):
- self.unit_operations.append(unitop)
-
- def remove_unit_operations(self,unitop):
- self.unit_operations.remove(unitop)
-
- def add_compound_list(self,C):
- self.compounds = C
-
- def send_for_simulation_Eqn(self,msg):
- self.result_data = []
- self.omc_path = self.get_omc_path(msg)
- #print(self.omc_path)
-
- if self.sim_method == 'Eqn':
- simpath = self.eqn_mos_path
- os.chdir(self.sim_dir_path)
-
- self.process = Popen([self.omc_path, '-s',simpath], stdout=PIPE, stderr=PIPE)
- self.stdout, self.stderr = self.process.communicate()
-
- os.chdir(self.root_dir)
- if ('timeSimulation = 0.0,\n' in self.stdout.decode("utf-8")):
- self.result_data = []
- else:
- csvpath = os.path.join(self.sim_dir_path,'Flowsheet_res.csv')
- with open (csvpath,'r') as resultFile:
- self.result_data = []
- csvreader = csv.reader(resultFile,delimiter=',')
- for row in csvreader:
- self.result_data.append(row)
-
- def send_for_simulation_SM(self,unitop):
- self.result_data = []
- self.omc_path = self.get_omc_path()
- os.chdir(self.sim_dir_path)
- self.process = Popen([self.omc_path, '-s',unitop.name,'.mos'], stdout=PIPE, stderr=PIPE)
- stdout, stderr = self.process.communicate()
- # print("############### StdOut ################")
- # print(stdout)
- self.result_data = []
- #print('Simulating '+unitop.name+'...')
- csvpath = os.path.join(self.sim_dir_path,unitop.name+'_res.csv')
- with open(csvpath,'r') as resultFile:
- csvreader = csv.reader(resultFile,delimiter=',')
- for row in csvreader:
- self.result_data.append(row)
- self.ext_data()
-
- def ext_data(self):
- for unit in self.unit_operations:
- if unit[0].type == 'MaterialStream':
- for key, value in unit[0].Prop.items():
- property_name = unit[0].name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- unit[0].Prop[key] = resultval
-
- def simulate_EQN(self,msg):
- self.data = []
- self.sim_method = 'Eqn'
- self.data.append("model Flowsheet\n")
-
- tempCompounds = self.compounds
- for c in tempCompounds:
- CompName = c
- CompName = CompName.replace(" ", "")
- CompName = CompName.replace("-", "")
- CompName = CompName.replace(",", "")
- CompName = CompName.replace("1", "One")
- CompName = CompName.replace("2", "Two")
- CompName = CompName.replace("3", "Three")
- CompName = CompName.replace("4", "Four")
- CompName = CompName.replace("5", "Five")
- self.data.append("parameter database." + CompName +' '+ CompName + "; \n")
- tempCompounds[tempCompounds.index(c)] = CompName
-
- self.data.append("parameter Integer Nc = " + str(len(tempCompounds)) + ";\n")
- self.data.append("parameter Simulator.Files.ChemsepDatabase.GeneralProperties C[Nc] = {" +
- str(tempCompounds).strip('[').strip(']').replace("'", "") + "};\n")
-
- for unitop in self.unit_operations:
- if unitop.type != 'MaterialStream':
- self.data.append(unitop.OM_Flowsheet_Initialize())
- else:
- self.data.append(unitop.OM_Flowsheet_Initialize(self.compounds))
-
- self.data.append("equation\n")
-
- self.outlist = []
- self.stm = ['MaterialStream','EngStm']
- for unitop in self.unit_operations:
- if unitop.type not in self.stm:
- for j in unitop.output_stms.values():
- self.outlist.append(j)
-
- for unitop in self.unit_operations:
- if unitop not in self.outlist:
- if unitop.type == 'MaterialStream':
- self.data.append(unitop.OM_Flowsheet_Equation(self.compounds,'Eqn'))
- else:
- self.data.append(unitop.OM_Flowsheet_Equation())
- else:
- pass
- with open(self.Flomo_path, 'w') as txtfile:
- for d in self.data:
- txtfile.write(str(d))
- txtfile.write('end Flowsheet;\n')
- #print(self.eqn_mos_path)
- with open(self.eqn_mos_path, 'w') as mosFile:
- mosFile.write('loadModel(Modelica);\n')
- mosFile.write('loadFile(\"Simulator/package.mo\");\n')
- mosFile.write('loadFile(\"database.mo\");\n')
- mosFile.write('loadFile(\"Flowsheet.mo\");\n')
- mosFile.write('simulate(Flowsheet, outputFormat=\"csv\", stopTime=1.0, numberOfIntervals=1);\n')
-
- #print('Initiating Simulation in Equation Oriented Mode')
-
- self.send_for_simulation_Eqn(msg)
-
- def simulate_SM(self,ip,op):
- self.sim_method = 'SM'
- self.data = []
- self.result_data = []
- self.unit = []
- self.csvlist = []
-
- for i in ip:
- common = ip[i]
-
- for k,v in op.items():
- if(set(v) & set(common)):
- if((i in self.unit) and (k in self.unit)):
- pass
- elif(i in self.unit):
- self.unit.insert(self.unit.index(i),k)
- elif(k in self.unit):
- self.unit.append(i)
- else:
- self.unit.append(k)
- self.unit.append(i)
-
- for unitop in self.unit:
- os.chdir(self.root_dir)
- self.data = []
- if unitop.type not in ['MaterialStream','EngStm']:
- inpstms = unitop.input_stms
- outstms = unitop.output_stms
-
- try:
- engstms = unitop.EngStms
- except:
- engstms = None
-
- self.data.append("model "+unitop.name.lower()+'\n')
-
- for c in self.compounds:
- c = c.title()
- lcase = c.lower()
- self.data.append("parameter Simulator.Files.Chemsep_Database." + c +' '+ c + "; \n")
-
- self.data.append(unitop.OM_Flowsheet_Initialize())
-
- if type(outstms) is list:
- for stm in outstms:
- self.data.append(stm.OM_Flowsheet_Initialize())
- else:
- self.data.append(outstms.OM_Flowsheet_Initialize())
-
- if engstms:
- self.data.append(engstms.OM_Flowsheet_Initialize())
-
- if type(inpstms) is list:
- for stm in inpstms:
- self.data.append(stm.OM_Flowsheet_Initialize())
- else:
- self.data.append(inpstms.OM_Flowsheet_Initialize())
-
- self.data.append('equation\n')
- self.data.append(unitop.OM_Flowsheet_Equation())
-
- if type(inpstms) is list:
- for stm in inpstms:
- self.data.append(stm.OM_Flowsheet_Equation())
- else:
- self.data.append(inpstms.OM_Flowsheet_Equation())
-
- unitmofile = os.path.join(self.sim_dir_path,unitop.name.lower()+'.mo')
-
- with open(unitmofile,'w') as unitFile:
- for d in self.data:
- unitFile.write(d)
- unitFile.write('end '+unitop.name.lower()+';\n')
-
- unitmosfile = os.path.join(self.sim_dir_path,unitop.name.lower()+'.mos')
- with open(unitmosfile, 'w') as mosFile:
- mosFile.write('loadModel(Modelica);\n')
- mosFile.write("loadFile(\"Simulator\package.mo\");\n")
-
- mosFile.write("loadFile(\""+unitop.name.lower()+".mo\");\n")
- mosFile.write("simulate("+unitop.name.lower()+", outputFormat=\"csv\", stopTime=1.0, numberOfIntervals=1);\n")
-
- #print("Initiating simulation in Sequential Modular Mode")
- self.omc_path = self.get_omc_path()
- os.chdir(self.sim_dir_path)
- sim = os.path.join(self.sim_dir_path,unitop.name.lower()+'.mos')
- self.process = Popen([self.omc_path, '-s',sim], stdout=PIPE, stderr=PIPE)
- self.stdout, self.stderr = self.process.communicate()
- os.chdir(self.root_dir)
-
- # print("############### StdOut ################")
- # print(self.stdout)
- # print("############### StdErr ################")
- # print(self.stderr)
- # print('Simulating '+unitop.name.lower()+'...')
- csvpath = os.path.join(self.sim_dir_path,unitop.name.lower()+'_res.csv')
-
- self.csvlist.append(csvpath)
-
- with open(csvpath,'r') as resultFile:
- csvreader = csv.reader(resultFile,delimiter=',')
- for row in csvreader:
- self.result_data.append(row)
-
- os.chdir(self.root_dir)
- if type(inpstms) is list:
- for stm in inpstms:
- for key,value in stm.Prop.items():
- property_name = stm.name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- stm.Prop[key] = resultval
- else:
- for key, value in inpstms.Prop.items():
- property_name = inpstms.name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- inpstms.Prop[key] = resultval
-
- if type(outstms) is list:
- for stm in outstms:
- for key, value in stm.Prop.items():
- property_name = stm.name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- stm.Prop[key] = resultval
- else:
- for key, value in outstms.Prop.items():
- property_name = outstms.name + '.' + key
- if property_name in self.result_data[0]:
- ind = self.result_data[0].index(property_name)
- resultval = str(self.result_data[-1][ind])
- outstms.Prop[key] = resultval
-
- self.dataframes = [pd.read_csv(i) for i in self.csvlist]
- os.chdir(self.sim_dir_path)
- dffinal = pd.concat(self.dataframes,axis=1)
- dffinal.to_csv('FlowsheetSEQ.csv',index=False)
- self.result_data.clear()
- with open(os.path.join(self.sim_dir_path+'/FlowsheetSEQ.csv'),'r') as resultFile:
- csvreader = csv.reader(resultFile,delimiter=',')
- for row in csvreader:
- self.result_data.append(row)
--
cgit