def editsolid(self, number): if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( SolidDatabaseEditor(self.top, self.system, self.solids[number - 1], self.solids, editflag=1)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.solids[number - 1].get_solid(self.top.window) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatesolids()
def editevap(self, event=None): if self.Evap.get() == 'First order': if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( EvapEditor(self.top, self.version, self.fonttype, self.timeunit, self.lengthunit, self.chemicals, self.kevaps)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: for n in range(len(self.chemicals)): if self.chemicals[n].soluable == 1: self.kevaps[n] = self.top.window.kevaps[n].get() if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus()
def deletelayer(self, number): if self.layers[0].number == 0: layer = self.layers[number] else: layer = self.layers[number - 1] if self.top is None: self.top = CapSimWindow(master = self.master, buttons = 2) self.top.make_window(LayerDeleter(self.top, self.system, layer)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: layer.remove_propertywidgets() if self.editflag == 1: new_record = self.num_record[:self.layers.index(layer)] + self.num_record[self.layers.index(layer)+1:] self.num_record = new_record self.layers.remove(layer) self.nlayers = self.nlayers - 1 if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror(title = self.system.version, message = 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatelayers()
def loadmatrix(self, default = None): self.nmatrices = self.nmatrices + 1 self.matrices.append(Matrix(self.nmatrices)) if self.top is None: self.top = CapSimWindow(master = self.master, buttons = 2) self.top.make_window(MatrixEditor(self.top, self.system, self.matrices[-1], self.matrices, self.materials, editflag = 0, newflag = 0)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.matrices[-1].get_matrix(self.top.window) else: self.matrices.remove(self.matrices[-1]) self.nmatrices = self.nmatrices - 1 if len(self.matrices) > 0: for component in self.matrices[-1].components: for matrix in self.matrices[:-1]: for sub_component in matrix.components: if sub_component.name == component.name: sub_component.e = component.e sub_component.rho = component.rho sub_component.foc = component.foc if len(matrix.components) > 1: e = 0 rho = 0 moc = 0 foc = 0 fractions = 0 for component in matrix.components: fractions = fractions + component.fraction e = e + component.fraction * component.e rho = rho + component.fraction * component.rho moc = moc + component.fraction * component.rho * component.foc foc = moc/rho matrix.e = (round(e,2)) matrix.rho = (round(rho,3)) matrix.foc = (round(foc,3)) else: matrix.e = matrix.components[-1].e matrix.rho = matrix.components[-1].rho matrix.foc = matrix.components[-1].foc if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror(title = self.system.version, message = 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatematrices()
def deletesolid(self, number): if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( SolidDatabaseDeleter(self.top, self.system, self.solids[number - 1])) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.solids[number - 1].remove_propertieswidget() self.solids.remove(self.solids[number - 1]) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatesolids()
def editcoefficient(self, layername, reactionname): if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( CoefficientEditor(self.top, self.system, self.coefficients[layername][reactionname], self.coefficients, editflag=1)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.coefficients[layername][reactionname].get_coefficients( self.top.window) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatecoefficients()
def editchemicaldata(self, name): if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( DatabaseEditor(self.top, self.system, self.chemicaldatas[name], self.chemicaldatas, editflag=1, tempflag=0)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.chemicaldatas[name].get_chemicaldata(self.top.window) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatechemicals()
def editsorption(self, component, chemical): if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( SorptionEditor(self.top, self.system, self.sorptions[component][chemical])) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.sorptions[component][chemical].get_sorption( self.top.window) row = self.sorptions[component][chemical].row self.sorptions[component][chemical].remove_propertieswidgets() self.sorptions[component][chemical].propertieswidgets( self.frame, row, self.master, self.timeunit, self.concunit) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus(component, chemical)
def addchemical(self, event=None): self.nchemicals = self.nchemicals + 1 self.chemicals.append(Chemical(self.nchemicals, soluable=1)) if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( ChemicalEditor(self.top, self.system, self.chemicals[-1], self.chemicals, self.database, editflag=0)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.chemicals[-1].get_chemical(self.top.window) else: self.chemicals.remove(self.chemicals[-1]) self.nchemicals = self.nchemicals - 1 if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatechemicals()
def importsoliddata(self): UserPath = os.environ['USERPROFILE'] Filepath = tkfd.askopenfilename(initialdir=UserPath) if Filepath != '': data = open(Filepath, 'r') database_imported = pickle.load(data) data.close() if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( SolidDatabaseImporter(self.top, self.system, database_imported)) self.top.tk.mainloop() duplicate_name = [] if self.top.window.cancelflag == 0: error_check = 0 for solid in self.top.window.solids: if solid.check == 1: if self.solids_list.count(solid.name_new) == 0: self.solids_list.append(solid.name_new) self.solids.append( Solid( self.solids_list.index( solid.name_new))) self.solids[-1].import_coefficients(solid) else: duplicate_name.append(solid.name_new) error_check = 1 error_message = 'The following compound information are duplicated:\n\n' for na in range(len(duplicate_name)): error_message = error_message + ' ' + str( duplicate_name[na]) + ' \n' if error_check == 1: tkmb.showerror(title=self.system.version, message=error_message) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatesolids()
def get_reactioncoefficients(system, step): """Get some basic parameters for each layer.""" root_step = 0 if len(system.reactions) > 0: root = CapSimWindow(master=None, buttons=1) root.make_window(ReactionCoefficients(root, system, editflag=0)) root.mainloop() if root.main.get() == 1: system = None else: root_step = root.step.get() if root.step.get() == 1: system.get_reactioncoefficients(root.window) for layer in system.layers: layer.remove_reactionwidgets() for reaction in system.reactions: system.coefficients[layer.name][ reaction.name].remove_propertieswidgets() else: system.coefficients = None root.destroy() else: if system.coefficients == None: root_step = 1 system.coefficients = {} for layer in system.layers: system.coefficients[layer.name] = {} else: system.coefficients = None root_step = -1 return system, step + root_step
def k_estimator(self, event = None): k_error = 0 coef = [] coef.append(self.cinit) coef.append(self.qinit) coef.append(self.thalf) coef.append(self.ksorp.get()) if self.isotherm.get() == self.isotherms[0]: coef.append(self.K.get()) coef.append(0) if self.K.get() == 0: K_error = 1 if self.isotherm.get() == self.isotherms[1]: coef.append(self.Koc.get()) coef.append(self.sorption.matrix.foc) if self.Koc.get() == 0: K_error = 1 if self.isotherm.get() == self.isotherms[2]: coef.append(self.Kf.get()) coef.append(self.N.get()) if self.Kf.get() == 0 or self.N.get() == 0: K_error = 1 if self.isotherm.get() == self.isotherms[3]: coef.append(self.qmax.get()) coef.append(self.b.get()) if self.qmax.get() == 0 or self.b.get() == 0: K_error = 1 coef.append(self.sorption.matrix.e) coef.append(self.sorption.matrix.rho) if self.top is None: self.top = CapSimWindow(master = self.master, buttons = 2) self.top.make_window(K_Estimator(self.top, self.system, self.isotherm.get(), coef)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.ksorp.set(self.top.window.ksorp.get()) self.cinit = self.top.window.cinit.get() self.qinit = self.top.window.qinit.get() self.thalf = self.top.window.thalf.get() if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror(title = self.version, message = 'Please close the existing parameter input window first.') self.top.tk.focus()
def get_sorptionproperties(system, step): """Get some basic parameters for each layer.""" root = CapSimWindow(master=None, buttons=1) root.make_window(SorptionProperties(root, system)) root.mainloop() if root.main.get() == 1: system = None else: if root.step.get() == 1: system.get_sorptionproperties(root.window) for component in system.components: component.remove_sorptionwidgets() for chemical in system.chemicals: if chemical.soluable == 1: chemical.remove_sorptionwidgets() for component in system.components: for chemical in system.chemicals: if chemical.soluable == 1: system.sorptions[component.name][ chemical.name].remove_propertieswidgets() else: system.sorptions = None root.destroy() return system, step + root.step.get()
def get_systemproperties(system, step): """Get flow and system parameters.""" root = CapSimWindow(buttons=1) root.make_window(SystemProperties(root, system)) root.mainloop() if root.main.get() == 1: system = None else: if root.step.get() == 1: system.get_systemproperties(root.window) else: system.adv = 'None' system.bio = 'None' system.con = 'None' system.Vdar = 0 system.Vtidal = 0 system.ptidal = 1 system.sigma = 10 system.hbio = 10 system.Dbiop = 1 system.Dbiopw = 100 system.hcon = 0 system.t90 = 1 root.destroy() return system, step + root.step.get()
def get_layerconditions(system, step): """Get specific parameters for the layers.""" root = CapSimWindow(buttons=1) root.make_window(LayerConditions(root, system)) root.okbutton.focus_set() root.mainloop() if root.main.get() == 1: system = None else: if root.step.get() == 1: system.get_layerconditions(root.window) for layer in system.layers: layer.get_layerconditions() layer.remove_ICwidgets() for chemical in system.chemicals: if chemical.soluable == 1: system.ICs[layer.name][chemical.name].remove_widgets() for chemical in system.chemicals: if chemical.soluable == 1: chemical.remove_ICwidgets() system.BCs[chemical.name].remove_widgets() else: system.ICs = None system.BCs = None for layer in system.layers: layer.ICtype = 'Uniform' layer.remove_ICwidgets() root.destroy() return system, step + root.step.get()
def get_solidlayerconditions(system, step): root_step = 0 solid_check = 0 for chemical in system.chemicals: for component in system.components: if system.sorptions[component.name][ chemical.name].kinetic == 'Transient': solid_check = 1 if solid_check == 1: root = CapSimWindow(buttons=1) root.make_window(SolidLayerConditions(root, system)) root.okbutton.focus_set() root.mainloop() if root.main.get() == 1: system = None else: root_step = root.step.get() if root.step.get() == 1: system.get_solidlayerconditions(root.window) for layer in system.layers: layer.remove_SolidICwidgets() for component in system.matrices[ layer.type_index].components: component.remove_SolidICswidgets() for chemical in system.chemicals: system.SolidICs[layer.name][component.name][ chemical.name].remove_widgets() for chemical in system.chemicals: try: chemical.remove_ICwidgets() except: pass else: system.SolidICs = None root.destroy() else: if system.SolidICs == None: root_step = 1 system.SolidICs = {} for layer in system.layers: system.SolidICs[layer.name] = {} for component in system.matrices[layer.type_index].components: system.SolidICs[layer.name][component.name] = {} for chemical in system.chemicals: system.SolidICs[layer.name][component.name][ chemical.name] = SolidIC(layer.name, component.name, chemical.name) else: system.SolidICs = None root_step = -1 return system, step + root_step
def click_model(self, event=None): check = 0 reactant_list = [reactant.name.get() for reactant in self.reactants] for name in reactant_list: if reactant_list.count(name) > 1: check = 1 if len(self.reactants) == 0: tkmb.showerror( title=self.system.version, message='Please firstly input the information of reactants.') self.model.set('Fundamental') self.focusbutton = self.okbutton self.master.tk.lift() elif check == 1: tkmb.showerror( title=self.system.version, message= 'At least one chemical is replicated in the reactant list, please check' ) self.model.set('Fundamental') self.focusbutton = self.okbutton self.master.tk.lift() else: if self.model.get() == 'User-defined': if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( UserDefined(self.top, self.system, self.reactants)) self.top.tk.mainloop() if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.' ) self.top.tk.focus() self.updaterateequation()
def edit_soliddatabase(soliddatabase, system): """Makes the GUI that is used to edit the chemical database.""" root = CapSimWindow(master=None, buttons=None) root.make_window(Database(root, system, soliddatabase)) root.mainloop() database = root.window.database flag = root.window.exitflag root.destroy() return database, flag
def show_help(system): """Shows the main menu.""" root = CapSimWindow(buttons = 2) root.make_window(Help(root, system)) root.mainloop() flag = root.main.get() root.destroy() return flag
def deletechemical(self, number): if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( ChemicalDeleter(self.top, self.system, self.chemicals[number - 1])) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.chemicals[number - 1].remove_chemicalwidgets() self.chemicals.remove(self.chemicals[number - 1]) self.nchemicals = self.nchemicals - 1 if self.top is not None: self.top.destroy() self.top = None self.updatechemicals()
def show_mainmenu(system): """Shows the main menu.""" root = CapSimWindow(master=None, buttons=None) root.make_window(MainMenu(root, system)) root.mainloop() option = root.window.option.get() filename = root.window.filename.get() root.destroy() return option, filename
def deletechemicaldata(self, name): if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( DatabaseDeleter(self.top, self.system, self.chemicaldatas[name])) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.chemicaldatas[name].get_chemicaldata(self.top.window) if self.top.window.cancelflag == 2: self.chemicaldatas[name].remove_chemicalwidgets() del self.chemicaldatas[name] if self.top is not None: self.top.destroy() self.top = None self.updatechemicals()
def editmatrix(self, number): if self.top is None: self.top = CapSimWindow(master = self.master, buttons = 2) if len(self.matrices[number - 1].components) < 2: self.top.make_window(MatrixEditor(self.top, self.system, self.matrices[number-1], self.matrices, self.materials, editflag = 1, newflag = 0)) else: self.top.make_window(MixtureEditor(self.top, self.system,self.matrices[number-1], self.matrices, self.materials, editflag = 1)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.matrices[number-1].get_matrix(self.top.window) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror(title = self.system.version, message = 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatematrices()
def addlayer(self, default = None): self.nlayers = self.nlayers + 1 layertemp = Layer(1) if self.top is None: self.top = CapSimWindow(master = self.master, buttons = 2) self.top.make_window(LayerEditor(self.top, self.system, layertemp, self.layers, editflag = 0)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: layertemp.get_layer(self.top.window) if self.layers == []: self.layers.append(layertemp) elif self.layers[0].number == 0: self.layers.insert( layertemp.number, layertemp) elif layertemp.number == 0: self.layers.insert( 0, layertemp) else: self.layers.insert( layertemp.number-1, layertemp) if self.editflag == 1: if self.layers[0].number == 0: self.num_record.insert( layertemp.number, -1) elif layertemp.number == 0: self.num_record.insert( 0, -1) else: self.num_record.insert( layertemp.number-1, -1) else: self.nlayers = self.nlayers - 1 layertemp = 0 if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror(title = self.system.version, message = 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatelayers()
def get_systemunits(system, step): """Get flow and system parameters.""" root = CapSimWindow(buttons=1) root.make_window(UnitProperties(root, system)) root.mainloop() if root.main.get() == 0 and root.step.get() == 1: system.get_systemunits(root.window) else: system = None root.destroy() return system, step + root.step.get()
def solve_system(system): """Makes the GUI that shows the status of the simulation and runs the simulation.""" root = CapSimWindow(buttons=2) root.make_window(Solver(root, system)) root.mainloop() output = root.window.output main = root.main.get() root.destroy() return output, main
def importchemical(self): if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( ChemicalImporter(self.top, self.system, self.database)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.updatechemical(self.top.window) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus()
def addreaction(self, event = None): self.reactions.append(Reaction(len(self.reactions)+1)) if self.top is None: self.top = CapSimWindow(master = self.master, buttons = 2) self.top.make_window(ReactionEditor(self.top, self.system, self.reactions[-1], editflag = 0)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.reactions[-1].get_reaction(self.top.window) else: self.reactions.remove(self.reactions[-1]) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror(title = self.system.version, message = 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatereactions()
def editlayer(self, number): if self.layers[0].number == 0: layertemp = self.layers[number] else: layertemp = self.layers[number-1] if self.top is None: self.top = CapSimWindow(master = self.master, buttons = 2) self.top.make_window(LayerEditor(self.top, self.system, layertemp, self.layers, editflag = 1)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: layertemp.get_layer(self.top.window) if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror(title = self.system.version, message = 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatelayers()
def addchemicaldata(self, event=None): new_name = 'chemical' + str(len(self.chemicals_list)) self.chemicaldatas[new_name] = ChemicalData(new_name) if self.top is None: self.top = CapSimWindow(master=self.master, buttons=2) self.top.make_window( DatabaseEditor(self.top, self.system, self.chemicaldatas[new_name], self.chemicaldatas, editflag=0, tempflag=0)) self.top.tk.mainloop() if self.top.window.cancelflag == 0: self.chemicaldatas[new_name].get_chemicaldata(self.top.window) self.chemicaldatas[self.chemicaldatas[new_name]. name] = self.chemicaldatas[new_name].copy() del self.chemicaldatas[new_name] if self.top is not None: self.top.destroy() self.top = None elif self.top is not None: tkmb.showerror( title=self.system.version, message= 'Please close the existing parameter input window first.') self.top.tk.focus() self.updatechemicals()