194 lines
5.8 KiB
Python
194 lines
5.8 KiB
Python
from Tkinter import *
|
|
|
|
from ElementFrame import getElements
|
|
from utilities import handleError
|
|
from Cantera import *
|
|
from config import *
|
|
from SpeciesFrame import getSpecies
|
|
|
|
def testit():
|
|
pass
|
|
|
|
class EditFrame(Frame):
|
|
|
|
def redraw(self):
|
|
try:
|
|
self.eframe.destroy()
|
|
self.sframe.destroy()
|
|
self.rframe.destroy()
|
|
except:
|
|
pass
|
|
self.addElementFrame()
|
|
self.addSpeciesFrame()
|
|
self.addReactionFrame()
|
|
|
|
def __init__(self, master, app):
|
|
Frame.__init__(self, master)
|
|
self.mix = app.mix
|
|
print self.mix, dir(self.mix)
|
|
self.app = app
|
|
self.master = master
|
|
self.master.title("Cantera Mechanism Editor")
|
|
self.redraw()
|
|
|
|
def addReactionFrame(self):
|
|
self.rframe = Frame(self)
|
|
self.rframe.config(relief=GROOVE,bd=4)
|
|
self.rframe.grid(row=2,column=0,columnspan=10,sticky=E+W)
|
|
b=Button(self.rframe,text='Reactions',command=testit)
|
|
b.grid(column=5, row=0)
|
|
|
|
def addElementFrame(self):
|
|
self.eframe = Frame(self)
|
|
self.eframe.config(relief=GROOVE,bd=4)
|
|
self.eframe.grid(row=0,column=0,columnspan=10,sticky=E+W)
|
|
self.element_labels = []
|
|
n = 0
|
|
for el in self.mix._mech.elementNames():
|
|
x = Label(self.eframe,text=el,fg='darkblue')
|
|
x.grid(column = n, row=0)
|
|
self.element_labels.append(x)
|
|
n = n + 1
|
|
b=Button(self.eframe,text='Element',command=self.chooseElements, default=ACTIVE)
|
|
b.grid(column=0, row=1, columnspan=10)
|
|
|
|
|
|
def addSpeciesFrame(self):
|
|
self.sframe = Frame(self)
|
|
self.sframe.config(relief=GROOVE,bd=4)
|
|
self.sframe.grid(row=1,column=0,columnspan=10,sticky=E+W)
|
|
r = 0
|
|
c = 0
|
|
splist = self.app.species
|
|
self.spcheck = []
|
|
self.spec = []
|
|
for i in range(self.app.mech.nSpecies()):
|
|
self.spec.append(IntVar())
|
|
self.spec[i].set(1)
|
|
self.spcheck.append( Checkbutton(self.sframe,
|
|
text=splist[i].name,
|
|
variable=self.spec[i],
|
|
onvalue = 1, offvalue = 0) )
|
|
self.spcheck[i].grid(row = r, column = c, sticky = N+W)
|
|
self.spcheck[i].bind("<Button-3>", self.editSpecies)
|
|
c = c + 1
|
|
if c > 4:
|
|
c, r = 0, r + 1
|
|
|
|
def getspecies(self):
|
|
print getSpecies(self.mix.speciesNames(),
|
|
self.mix.speciesNames())
|
|
|
|
def editSpecies(self, event=None):
|
|
e = Toplevel(event.widget.master)
|
|
w = event.widget
|
|
txt = w.cget('text')
|
|
sp = self.app.mix.species[txt]
|
|
|
|
# name, etc.
|
|
e1 = Frame(e, relief=FLAT)
|
|
self.addEntry(e1,'Name',0,0,sp.name)
|
|
self.addEntry(e1,'ID Tag',1,0,sp.id)
|
|
self.addEntry(e1,'Phase',2,0,sp.phase)
|
|
e1.grid(row=0,column=0)
|
|
|
|
# elements
|
|
elframe = Frame(e)
|
|
elframe.grid(row=1,column=0)
|
|
Label(elframe,text='Elemental Composition').grid(row=0,column=0,columnspan=2,sticky=E+W)
|
|
|
|
i = 0
|
|
for el in self.app.mech.elementNames():
|
|
self.addEntry(elframe,el,i,0,self.mech.nAtoms(sp, el))
|
|
i = i + 1
|
|
|
|
# thermo
|
|
thframe = Frame(e)
|
|
thframe.grid(row=0,rowspan=2,column=1)
|
|
thframe.config(relief=GROOVE,bd=4)
|
|
i = 0
|
|
Label(thframe,text='Thermodynamic Properties').grid(row=0,
|
|
column=0, columnspan=4, sticky=E+W)
|
|
if isinstance(sp.thermoParam(),NasaPolynomial):
|
|
Label(thframe,text='Parametrization:').grid(row=1,column=1)
|
|
self.addEntry(thframe,'',2,0,'NasaPolynomial')
|
|
Label(thframe,text='Temperatures (min, mid, max):').grid(row=3,column=1)
|
|
self.addEntry(thframe,'',4,0,`sp.minTemp`)
|
|
self.addEntry(thframe,'',5,0,`sp.midTemp`)
|
|
self.addEntry(thframe,'',6,0,`sp.maxTemp`)
|
|
low = Frame(thframe)
|
|
low.config(relief=GROOVE,bd=4)
|
|
low.grid(row=1,rowspan=6,column=3,columnspan=2)
|
|
Label(low,text='Coefficients for the Low\n Temperature Range').grid(row=0,column=0,columnspan=2,sticky=E+W)
|
|
c = sp.thermoParam().coefficients(sp.minTemp)
|
|
for j in range(7):
|
|
self.addEntry(low,'a'+`j`,j+3,0,`c[j]`)
|
|
high = Frame(thframe)
|
|
high.config(relief=GROOVE,bd=4)
|
|
high.grid(row=1,rowspan=6,column=5,columnspan=2)
|
|
Label(high,text='Coefficients for the High\n Temperature Range').grid(row=0,column=0,columnspan=2,sticky=E+W)
|
|
c = sp.thermoParam().coefficients(sp.maxTemp)
|
|
for j in range(7):
|
|
self.addEntry(high,'a'+`j`,j+3,0,`c[j]`)
|
|
|
|
com = Frame(e)
|
|
com.grid(row=10,column=0,columnspan=5)
|
|
ok = Button(com,text='OK',default=ACTIVE)
|
|
ok.grid(row=0,column=0)
|
|
ok.bind('<1>',self.modifySpecies)
|
|
Button(com,text='Cancel',command=e.destroy).grid(row=0,column=1)
|
|
self.especies = e
|
|
|
|
def modifySpecies(self,event=None):
|
|
button = event.widget
|
|
e = self.especies
|
|
for fr in e.children.values():
|
|
for item in fr.children.values():
|
|
try:
|
|
print item.cget('selection')
|
|
except:
|
|
pass
|
|
e.destroy()
|
|
|
|
def addEntry(self,master,name,row,column,text):
|
|
if name:
|
|
Label(master, text=name).grid(row=row, column=column)
|
|
nm = Entry(master)
|
|
nm.grid(row=row, column=column+1)
|
|
nm.insert(END,text)
|
|
|
|
def chooseElements(self):
|
|
oldel = self.mix.g.elementNames()
|
|
newel = getElements(self.mix.g.elementNames())
|
|
removeList = []
|
|
for el in oldel:
|
|
if not el in newel:
|
|
removeList.append(el)
|
|
#self.app.mech.removeElements(removeList)
|
|
addList = []
|
|
for el in newel:
|
|
if not el in oldel:
|
|
addList.append(el)
|
|
#self.app.mech.addElements(addList)
|
|
try:
|
|
self.redraw()
|
|
self.app.makeWindows()
|
|
except:
|
|
handleError('Edit err')
|
|
|
|
self.app.mix = IdealGasMixture(self.app.mech)
|
|
self.mix = self.app.mix
|
|
nn = self.mix.speciesList[0].name
|
|
self.mix.set(temperature = 300.0, pressure = 101325.0, moles = {nn:1.0})
|
|
for label in self.element_labels:
|
|
label.destroy()
|
|
self.element_labels = []
|
|
n = 0
|
|
for el in self.mix._mech.elementList():
|
|
x = Label(self.eframe,text=el.symbol(),fg='darkblue')
|
|
x.grid(column = n, row=0)
|
|
self.element_labels.append(x)
|
|
n = n + 1
|
|
|
|
self.app.makeWindows()
|
|
|