Exemple #1
0
    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()
Exemple #2
0
    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()
Exemple #4
0
    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()
Exemple #5
0
    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()
Exemple #7
0
    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()
Exemple #10
0
    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()
Exemple #16
0
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()
Exemple #18
0
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
Exemple #19
0
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()
Exemple #21
0
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
Exemple #22
0
    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()
Exemple #23
0
    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
Exemple #27
0
    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()
Exemple #30
0
    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()