# -*- coding: iso-8859-1 -*-
#
#-------------------------------------------------------------------------------
# Code_Saturne version 1.3
# ------------------------
#
#
# This file is part of the Code_Saturne User Interface, element of the
# Code_Saturne CFD tool.
#
# Copyright (C) 1998-2007 EDF S.A., France
#
# contact: saturne-support@edf.fr
#
# The Code_Saturne User Interface is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# The Code_Saturne User Interface is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the Code_Saturne Kernel; if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA
#
#-------------------------------------------------------------------------------
"""
This module defines the Thermal Radiation model
This module contains the following classes and function:
- ThermalRadiationModel
- ThermalRadiationView
- PageText
- ThermalRadiationTestCase
"""
#-------------------------------------------------------------------------------
# Library modules import
#-------------------------------------------------------------------------------
import Tix, unittest
from Tkconstants import *
#-------------------------------------------------------------------------------
# Application modules import
#-------------------------------------------------------------------------------
from Base.Common import *
import Base.Toolbox as Tool
import Base.Dialog as Dialog
import Base.TkPage as TkPage
from Base.XMLvariables import Variables
#-------------------------------------------------------------------------------
# ThermalRadiation model class
#-------------------------------------------------------------------------------
class ThermalRadiationModel:
def __init__(self, case):
"""
Constuctor
"""
self.case = case
self.node_models = self.case.xmlGetNode('thermophysical_models')
self.node_ray = self.node_models.xmlInitNode('radiative_transfer')
self.node_coeff = self.node_ray.xmlInitNode('absorption_coefficient', 'type')
self.node_rstart = self.node_ray.xmlInitNode('restart', 'status')
self.node_Coal = self.node_models.xmlGetNode('pulverized_coal')
self.radiativeTransferModelsList = ['dom', 'p-1']
self.mVariable_ray()
def defaultRadiativeTRansferValues(self):
"""
Return in a dictionnary which contains default values
"""
default = {}
default['radiative_model'] = "off"
return default
def _dependsPages(self, name):
"""
Construction of the list of dependencies Pages.
"""
self.case[name]['depends'] = ['models/initia','bounda/scalar']
def isCoalCombustion(self):
"""
is coal combustion.
"""
value = 0
if self.node_Coal.xmlGetAttribute('model') != 'off':
value = 1
return value
def mGetModelCoal(self, mod, event=None):
"""
"""
text = 'off'
if mod == 'p-1' and self.node_Coal.xmlGetAttribute('model') == 'off':
text = 'PULV_COAL'
if mod == 'dom' and self.node_Coal.xmlGetAttribute('model') !='off':
text = 'PULV_COAL_P1'
return text
def mVariable_ray(self, event=None):
"""
"""
dico = Tool.dicoRayLabel()
model = self.mGetModel()
if model != "off":
for nb in range(len(dico[0])):
if not self.node_ray.xmlGetNode('property', name =dico[0][nb]):
self.node_ray.xmlInitNode('property',
label=dico[1][nb],
name =dico[0][nb],
status='on')
def mGetAdvancedOptions(self, page, stbar, title):
"""
Ask one popup for advanced specifications
"""
default = {}
default['frequ'] = self.node_ray.xmlGetInt('frequency')
default['caltsr'] = self.node_ray.xmlGetString('thermal_radiative_source_term')
default['printT'] = self.node_ray.xmlGetString('temperature_listing_printing')
default['listing']= self.node_ray.xmlGetString('intensity_resolution_listing_printing')
default['model'] = self.node_ray['model']
if not default['frequ']: default['frequ'] = 1
if not default['caltsr']: default['caltsr'] = 0
if not default['printT']: default['printT'] = 0
if not default['listing']: default['listing']= 0
dialog = AdvancedOptionsDialog(page,
stbar=stbar,
title=title,
default=default)
self.node_ray.xmlSetData('frequency', dialog.result['frequ'])
self.node_ray.xmlSetData('thermal_radiative_source_term', dialog.result['caltsr'])
self.node_ray.xmlSetData('temperature_listing_printing', dialog.result['printT'])
self.node_ray.xmlSetData('intensity_resolution_listing_printing', dialog.result['listing'])
def mGetModel(self, event=None):
if self.isCoalCombustion():
return self.mGetCoalModel()
else:
model = self.node_ray['model']
if model not in self.radiativeTransferModelsList:
model = self.defaultRadiativeTRansferValues()['radiative_model']
self.mSetModel(model)
return model
def mGetCoalModel(self):
import Pages.CoalThermoChemistry as CoalThermoChemistry
model = CoalThermoChemistry.CoalThermoChemistryModel("dp_FCP", self.case)
model.load()
ind = model.radiativTransfer.getRadiativTransfer()
val = "off"
if (ind == 1) or (ind == 2):
val = "dom"
elif (ind == 3) or (ind == 4):
val = "p-1"
return val
def mSetBoundCond(self):
import Pages.RadiativeBoundaries as RadBound
nodeList = RadBound.RadiativeBoundariesModel(self.case).getBoundDefList()
if nodeList:
for node in nodeList:
label = node['label']
RadBound.RadiativeBoundariesModel(self.case).getTypeOfCondition(label)
del RadBound
def mSetModel(self, model, event=None):
self.node_ray['model'] = model
if model in self.radiativeTransferModelsList:
self.mVariable_ray()
self.mSetBoundCond()
if self.isCoalCombustion():
self.mSetCoalModel(model)
def mSetCoalModel(self, model2):
import Pages.CoalThermoChemistry as CoalThermoChemistry
model = CoalThermoChemistry.CoalThermoChemistryModel("dp_FCP", self.case)
model.load()
ind = 0
if model2 != "off":
if model2 == "p-1":
ind = 2
coalCoeff = self.node_coeff['type']
if coalCoeff == 'constant':
ind += 1
elif coalCoeff == 'modak':
ind += 2
model.radiativTransfer.setRadiativTransfer(ind)
model.save()
def mGetNbDir(self, event=None):
return self.node_ray.xmlGetString('directions_number')
def mSetNbDir(self, val, event=None):
self.node_ray.xmlSetData('directions_number',val)
def mGetRestart(self, event=None):
return self.node_rstart['status']
def mSetRestart(self, val, event=None):
self.node_rstart['status'] = val
def mGetTypeCoeff(self, event=None):
if self.isCoalCombustion():
val = self.mGetTypeCoalCoeff()
if val == "off":
val = self.node_coeff['type']
print "coal transfer radiativ type error"
else :
val = self.node_coeff['type']
return val
def mGetTypeCoalCoeff(self):
import Pages.CoalThermoChemistry as CoalThermoChemistry
model = CoalThermoChemistry.CoalThermoChemistryModel("dp_FCP", self.case)
model.load()
ind = model.radiativTransfer.getRadiativTransfer()
val = "off"
if (ind == 1) or (ind == 3):
val = "constant"
elif (ind == 2) or (ind == 4):
val = "modak"
return val
def mSetTypeCoalCoeff(self, val):
import Pages.CoalThermoChemistry as CoalThermoChemistry
model = CoalThermoChemistry.CoalThermoChemistryModel("dp_FCP", self.case)
model.load()
if val == "constant":
ind = 1
else :
ind = 2
radModel = self.node_ray['model']
## print "radModel :", radModel
if radModel == 'p-1':
ind += 2
elif radModel == 'off':
ind = 0
model.radiativTransfer.setRadiativTransfer(ind)
model.save()
def mSetTypeCoeff(self, val , event=None):
if self.isCoalCombustion():
self.mSetTypeCoalCoeff(val)
self.node_coeff['type'] = val
def mGetAbsorCoeff(self, event=None):
if self.isCoalCombustion():
import Pages.CoalThermoChemistry as CoalThermoChemistry
model = CoalThermoChemistry.CoalThermoChemistryModel("dp_FCP", self.case)
model.load()
return model.radiativTransfer.getAbsorptionCoeff()
else :
return self.node_ray.xmlGetDouble('absorption_coefficient')
def mSetAbsorCoeff(self, val, event=None):
if self.isCoalCombustion():
import Pages.CoalThermoChemistry as CoalThermoChemistry
model = CoalThermoChemistry.CoalThermoChemistryModel("dp_FCP", self.case)
model.load()
model.radiativTransfer.setAbsorptionCoeff(val)
model.save()
self.node_ray.xmlSetData('absorption_coefficient', val)
def mGetFrequency(self, event=None):
return self.node_ray.xmlGetInt('frequency')
def mSetFrequency(self, val, event=None):
self.node_ray.xmlSetData('frequency', val)
def mGetIntensityResolution(self, event=None):
return self.node_ray.xmlGetString('intensity_resolution_listing_printing')
def mSetIntensityResolution(self, val, event=None):
self.node_ray.xmlSetData('intensity_resolution_listing_printing', val)
def mGetTemperatureListing(self, event=None):
return self.node_ray.xmlGetString('temperature_listing_printing')
def mSetTemperatureListing(self, val, event=None):
self.node_ray.xmlSetData('temperature_listing_printing', val)
def mGetTrs(self, event=None):
return self.node_ray.xmlGetString('thermal_radiative_source_term')
def mSetTrs(self, val, event=None):
self.node_ray.xmlSetData('thermal_radiative_source_term', val)
#--------------------------------------------------------------------------------
# Popup Class
#--------------------------------------------------------------------------------
class AdvancedOptionsDialog(Dialog.Dialog):
"""
"""
def buttonbox(self):
"""
Add standard button box.
Override if you don't want the standard buttons.
"""
t = PageText()
# Separator
#
Tix.Frame(self, height=2, bd=2, relief=SUNKEN).pack(side=TOP, fill=X)
# Button box
#
box = Tix.Frame(self, relief=FLAT)
box.pack()
self.b1 = Tix.Button(box, text=t.VALIDATE,
underline=0, width=10,
command=self.ok, default=ACTIVE)
self.b1.grid(row=0, column=0, padx=5, pady=10)
self.b1.bind('<Return>', self.ok)
b2 = Tix.Button(box, text=t.CANCEL,
underline=0, width=10,
command=self.cancel)
b2.grid(row=0, column=1, padx=5, pady=10)
b2.bind('<Return>', self.cancel)
def getFrequency(self, event=None):
"""
"""
if self.check2.isSPositive(self.eFrequ, self.frequ):
self.b1.config(state=ACTIVE)
else:
self.b1.config(state=DISABLED)
return self.frequ.get()
def body(self,master):
"""
Creation of popup window's widgets
"""
t = PageText()
self.frequ = Tix.IntVar()
self.printLum = Tix.StringVar()
self.printTemp = Tix.StringVar()
self.tsr = Tix.StringVar()
model = Tix.StringVar()
self.result = self.default
self.frequ.set(self.result['frequ'])
self.tsr.set(self.result['caltsr'])
self.printTemp.set(self.result['printT'])
self.printLum.set(self.result['listing'])
model = self.result['model']
self.pw1 = Tix.Frame(master,width=200,relief=FLAT, bd=2)
self.pw1.pack(side=TOP, fill=X, padx=10,pady=10)
self.lFrequ = Tix.Label(self.pw1,text=t.FREQUENCY)
self.lPrintL = Tix.Label(self.pw1,text=t.PRINT_S)
self.ltsray = Tix.Label(self.pw1,text=t.TSRAY)
self.lPrintT = Tix.Label(self.pw1,text=t.PRINT_T)
self.eFrequ = Tix.Entry(self.pw1, bd=2, width=6, textvariable=self.frequ)
self.eFrequ.event_add("<<Event>>", "<Return>", "<Leave>", "<FocusOut>")
self.eFrequ.bind("<<Event>>",self.getFrequency)
self.balloon.bind_widget(self.eFrequ,balloonmsg=t.KEYWORD+'NREFQR')
self.tsray = Tix.OptionMenu(self.pw1, options='menubutton.width 3')
self.tsray.menubutton.config(bd=2, relief=RAISED)
self.tsray.menu.config()
self.tsray.grid(pady=15, padx=10)
self.tsray.add_command('0', label='0')
self.tsray.add_command('1', label='1')
self.tsray.add_command('2', label='2')
self.tsray.config(variable=self.tsr)
self.balloon.bind_widget(self.tsray, balloonmsg=t.KEYWORD+'IDIVER')
self.printT = Tix.OptionMenu(self.pw1, options='menubutton.width 3')
self.printT.menubutton.config(bd=2, relief=RAISED)
self.printT.menu.config()
self.printT.grid(pady=15, padx=10)
self.printT.add_command('0', label='0')
self.printT.add_command('1', label='1')
self.printT.add_command('2', label='2')
self.printT.config(variable=self.printTemp)
self.balloon.bind_widget(self.printT, balloonmsg=t.KEYWORD+'IIMPAR')
self.printL = Tix.OptionMenu(self.pw1, options='menubutton.width 3')
self.printL.menubutton.config(bd=2, relief=RAISED)
self.printL.menu.config()
self.printL.grid(pady=15, padx=10)
self.printL.add_command('0', label='0')
self.printL.add_command('1', label='1')
self.printL.add_command('2', label='2')
self.printL.config(variable=self.printLum)
self.balloon.bind_widget(self.printL, balloonmsg=t.KEYWORD+'IIMLUM')
if model == 'dom':
self.lFrequ.grid (row=0, column=0, padx=10, pady=10)
self.eFrequ.grid (row=0, column=1, padx=10, pady=10)
self.ltsray.grid (row=1, column=0, padx=10, pady=10)
self.tsray.grid (row=1, column=1, padx=10, pady=10)
self.lPrintT.grid(row=2, column=0, padx=10, pady=10)
self.printT.grid (row=2, column=1, padx=10, pady=10)
self.lPrintL.grid(row=3, column=0, padx=10, pady=10)
self.printL.grid (row=3, column=1, padx=10, pady=10)
else:
self.lFrequ.grid (row=0, column=0, padx=10, pady=10)
self.eFrequ.grid (row=0, column=1, padx=10, pady=10)
self.ltsray.grid (row=1, column=0, padx=10, pady=10)
self.tsray.grid (row=1, column=1, padx=10, pady=10)
self.lPrintT.grid(row=2, column=0, padx=10, pady=10)
self.printT.grid (row=2, column=1, padx=10, pady=10)
self.lPrintL.grid_forget()
self.printL.grid_forget()
def apply(self):
"""
What to do when user clicks on 'OK'.
"""
self.result['frequ'] = self.frequ.get()
self.result['caltsr'] = self.tsr.get()
self.result['printT'] = self.printTemp.get()
self.result['listing'] = self.printLum.get()
def sequence(self):
"""
Bind the dialog window with 'Echap' and 'Return'
Override if you don't want the standard binding
(for example ou have to bind the dialog window
with only 'Echap' and delete sequence 'Return',
when there is any entries on the dialog window).
"""
self.bind('<Escape>', self.cancel)
#-------------------------------------------------------------------------------
# Main class
#-------------------------------------------------------------------------------
class ThermalRadiationView(TkPage.Page):
"""
Class to open Thermal Scalar Transport Page.
"""
def _dependsPages(self, name):
"""
Construction of the list of dependencies Pages.
"""
self.case[name]['depends'] = ['models/therma']
def _tkControlVariables(self):
"""
Tkinter variables declaration.
"""
self.model = Tix.StringVar()
self.restart = Tix.StringVar()
self.nbdir = Tix.StringVar()
self.typeCoeff = Tix.StringVar()
self.absorCoeff = Tix.DoubleVar()
self.frequency = Tix.IntVar()
self.printList = Tix.StringVar()
def _pageControl(self):
"""
Xml node declaration and supplementary default value settings.
"""
self.tR = ThermalRadiationModel(self.case)
def getModel(self, event=None):
"""
"""
t = PageText()
text = 'off'
mod = self.model.get()
if self.tR.mGetModelCoal(mod) == 'PULV_COAL':
Dialog.ShowInfo(self.master, title=t.COAL, text=t.PULV_COAL)
elif self.tR.mGetModelCoal(mod) == 'PULV_COAL_P1':
Dialog.ShowInfo(self.master, title=t.COAL, text = t.PULV_COAL_P1)
if mod!= 'off':
self.myTree.tree.hlist.show_entry('output/solutray')
else:
self.myTree.tree.hlist.hide_entry('output/solutray')
return self.model.get()
def getRestart(self, event=None):
"""
"""
if not self.restart.get(): self.restart.set('off')
self.tR.mSetRestart(self.restart.get())
return self.restart.get()
def getNbDir(self, event=None):
"""
"""
if not self.nbdir.get(): self.nbdir.set(32)
self.tR.mSetNbDir(self.nbdir.get())
return self.nbdir.get()
def getTypeCoeff(self, event=None):
"""
l'initialisation a la creation du noeud (def _pageControl)
n'est pas prise en compte. ???
"""
if not self.typeCoeff.get(): self.typeCoeff.set('constant')
if self.typeCoeff.get() == 'constant':
self.l4.grid_forget()
self.e4.grid()
self.e4.config(state=NORMAL)
elif self.typeCoeff.get() == 'modak':
self.l4.grid_forget()
self.e4.grid()
self.e4.config(state=DISABLED)
else:
self.l4.grid()
self.e4.grid_forget()
self.tR.mSetTypeCoeff(self.typeCoeff.get())
return self.typeCoeff.get()
def getAbsorCoeff(self, event=None):
"""
"""
if self.check2.isPositive(self.e4, self.absorCoeff):
self.tR.mSetAbsorCoeff(self.absorCoeff.get())
def getAdvancedOptions(self, event=None):
"""
Ask one popup for advanced specifications
"""
t=PageText()
self.stbar.busy()
self.tR.mGetAdvancedOptions(self.myPage, self.stbar, t.POPUP)
self.stbar.idle()
def getRadiativeTransfer(self, event=None):
"""
"""
t = PageText()
self.stbar.busy()
model = self.getModel()
self.s1.pack_forget()
self.w2.pack_forget()
self.s2.pack_forget()
self.w3.pack_forget()
self.s3.pack_forget()
self.w4.pack_forget()
self.s4.pack_forget()
self.w5.pack_forget()
if model == 'p-1':
self.s1.pack(side=TOP, fill=X)
self.w2.pack(side=TOP, pady=10)
self.s2.pack(side=TOP, fill=X)
self.w4.pack(side=TOP, pady=10)
self.s4.pack(side=TOP, fill=X)
self.w5.pack(side=TOP, fill=X, pady=10)
if model == 'dom':
self.s1.pack(side=TOP, fill=X)
self.w2.pack(side=TOP, pady=10)
self.s2.pack(side=TOP, fill=X)
self.w3.pack(side=TOP, pady=10, ipadx=30)
self.s3.pack(side=TOP, fill=X)
self.w4.pack(side=TOP, pady=10)
self.s4.pack(side=TOP, fill=X)
self.w5.pack(side=TOP, fill=X, pady=10)
self.tR.mSetModel(model)
self.stbar.idle()
def _createWidgets(self):
"""
Create the Page layout.
"""
t = PageText()
lf = Tix.LabelFrame(self.myPage, bd=2, label=t.RADIATIVE, relief=FLAT)
lf.label.config(font=fT)
lf.pack(side=TOP, fill=X, padx=10, pady=10)
w1 = Tix.Frame(lf.frame, relief=FLAT)
w1.pack(side=TOP, fill=X, pady=10)
self.s1 = Tix.Frame(lf.frame, height=2, bd=2, relief=SUNKEN)
self.s1.pack(side=TOP, fill=X)
self.w2 = Tix.Frame(lf.frame, relief=FLAT,)
self.w2.pack(side=TOP, pady=10)
self.w21 = Tix.Frame(self.w2, relief=FLAT, width=300)
self.w22 = Tix.Frame(self.w2, relief=FLAT)
self.w22.pack(pady=10, padx=30, side=RIGHT)
self.w21.pack(pady=10, padx=20, side=RIGHT)
self.s2 = Tix.Frame(lf.frame, height=2, bd=2, relief=SUNKEN)
self.s2.pack(side=TOP, fill=X)
self.w3 = Tix.Frame(lf.frame, relief=FLAT)
self.w3.pack(side=TOP, pady=10, ipadx=30)
self.w31 = Tix.Frame(self.w3, relief=FLAT)
self.w32 = Tix.Frame(self.w3, relief=FLAT)
self.w32.pack( pady=10, padx=30, side=RIGHT)
self.w31.pack( pady=10, padx=20, side=RIGHT)
self.s3 = Tix.Frame(lf.frame, height=2, bd=2, relief=SUNKEN)
self.s3.pack(side=TOP, fill=X)
self.w4 = Tix.Frame(lf.frame, relief=FLAT)
self.w4.pack(side=TOP, pady=10,fill=X)
self.w41 = Tix.Frame(self.w4, relief=FLAT)
self.w42 = Tix.Frame(self.w4, relief=FLAT)
self.w411 = Tix.Frame(self.w41, relief=FLAT)
self.w412 = Tix.Frame(self.w41, relief=FLAT)
self.w41.pack(padx=40, pady=10, side=TOP)
self.w42.pack(pady=10, side=BOTTOM)
self.w411.grid(row=0,column=0, padx=25, ipadx=15)
self.w412.grid(row=0,column=1, padx =0)
self.s4 = Tix.Frame(lf.frame, height=2, bd=2, relief=SUNKEN)
self.s4.pack(side=TOP, fill=X)
self.w5 = Tix.Frame(lf.frame, relief=FLAT)
self.w5.pack(side=TOP, fill=X, pady=10)
self.b = Tix.OptionMenu(w1, options='menubutton.width 45')
self.b.menubutton.config(bd=2, relief=RAISED)
self.b.menu.config()
self.balloon.bind_widget(self.b, statusmsg=t.MSG_MODEL,
balloonmsg=t.KEYWORD+'IRAYON, IRAYPP')
self.b.pack(side=TOP, pady=15, padx=10)
self.b.add_command('off', label=t.NO_MODEL)
self.b.add_separator('')
self.b.add_command('dom', label=t.DOM)
self.b.add_command('p-1', label=t.P1)
self.b.config(variable=self.model, command= self.getRadiativeTransfer)
# restart : w2
Tix.Label(self.w21, text=t.SUITE, relief=FLAT).grid()
self.buw2 = [0]*2
for (i, tx1, tx2) in [(0, t.ON, "on"),
(1, t.OFF, "off")]:
self.buw2[i] = Tix.Radiobutton(self.w22, text=tx1, value=tx2,
variable=self.restart,
command= self.getRestart)
self.buw2[i].grid(row=0,column=i+1, padx=5)
self.balloon.bind_widget(self.buw2[i],balloonmsg=t.KEYWORD+'ISUIRD')
# number of directions : w3
Tix.Label(self.w31, text=t.NB_DIRECT, relief=FLAT).grid()
self.buw3 = [0]*2
for (i, tx1, tx2) in [(0, 32, "32"),
(1, 128, "128")]:
self.buw3[i] = Tix.Radiobutton(self.w32, text=tx1, value=tx2,
variable=self.nbdir,
command= self.getNbDir)
self.buw3[i].grid(row=0,column=i+1, padx=5)
self.balloon.bind_widget(self.buw3[i],balloonmsg=t.KEYWORD+'NDIREC')
# absorption coefficient : w4
Tix.Label(self.w411, text=t.COEFF_ABS, relief=FLAT).grid(row=0,column=0, padx=0)
self.buw4 = [0]*2
self.bu = Tix.OptionMenu(self.w412, options='menubutton.width 45')
self.bu.menubutton.config(bd=2, width=7, relief=RAISED)
self.bu.add_command('constant', label='Constant' )
if self.tR.isCoalCombustion():
self.bu.add_command('variable', label='Variable', state=DISABLED)
self.bu.add_command('modak', label='Modak')
else:
self.bu.add_command('variable', label='Variable')
self.bu.add_command('modak', label='Modak', state=DISABLED)
self.bu.grid(row=0, column=1,padx=15, pady=0)
self.bu.config(variable=self.typeCoeff, command=self.getTypeCoeff)
self.l4 = Tix.Message(self.w42, bd=2, relief=FLAT,text=t.MSG_VARICOEFF, \
width=400,foreground='red', font=fL)
self.e4 = Tix.Entry(self.w42, bd=2, width=10, textvariable=self.absorCoeff)
self.e4.event_add("<<Event>>", "<Return>", "<Leave>", "<FocusOut>")
self.e4.bind("<<Event>>",self.getAbsorCoeff)
# advanced options : w5
Tix.Label(self.w5, text=t.ADVANCED, relief=FLAT).grid(padx=20)
self.imsop = Tix.PhotoImage(file=PIC_PATH+'graduate.gif')
self.buw5 = Tix.Button(self.w5, image=self.imsop,
command=self.getAdvancedOptions)
self.buw5.grid(row=0, column=1)
def _initializeWidgets(self):
"""
Extract resquested informations from XML document.
This informations are used to initialize the widgets.
For this page default values of all widgets are necessary
included in the XML file.
"""
t = PageText()
nodeList = []
model = self.tR.mGetModel()
if self.tR.mGetModel() == "off": self.b.config(value = 'off')
else: self.b.config(value = model)
if self.tR.mGetNbDir(): self.nbdir.set(self.tR.mGetNbDir())
else:
self.nbdir.set('128')
self.tR.mSetNbDir(self.nbdir.get())
if self.tR.mGetRestart(): self.restart.set(self.tR.mGetRestart())
else:
self.restart.set('off')
self.tR.mSetRestart('off')
if self.tR.mGetTypeCoeff(): self.typeCoeff.set(self.tR.mGetTypeCoeff())
else:
self.typeCoeff.set('constant')
self.tR.mSetTypeCoeff('constant')
absorCoeff = self.tR.mGetAbsorCoeff()
if not absorCoeff: absorCoeff = 0.0
self.absorCoeff.set(absorCoeff)
self.tR.mSetAbsorCoeff(absorCoeff)
# Initialization for "Avdanced Options" parameters
if not self.tR.mGetFrequency() : self.tR.mSetFrequency(1)
if not self.tR.mGetIntensityResolution() : self.tR.mSetIntensityResolution(0)
if not self.tR.mGetTemperatureListing() : self.tR.mSetTemperatureListing(1)
if not self.tR.mGetTrs() : self.tR.mSetTrs(2)
# verouillage
# self.b.config(value = 'off')
# self.b.config(state=DISABLED, bg='grey')
#-------------------------------------------------------------------------------
# Text and messages for this page
#-------------------------------------------------------------------------------
class PageText:
"""
Storage of all texts and messages for this page.
"""
def __init__(self):
# 1) Texts
#
if Tool.GuiParam.lang == 'fr':
self.KEYWORD = "Mots clé Code_Saturne : "
self.ON = "oui"
self.OFF = "non"
self.RADIATIVE = "Transfert thermique radiatif"
self.NO_MODEL = "Pas de transferts radiatifs"
self.P1 = "Modèle P-1"
self.DOM = "Méthode des ordonnées discrètes"
self.SUITE = "Suite de calcul radiatif"
self.NB_DIRECT = "Nombre de directions"
self.COEFF_ABS = "Coefficient d'absorption"
self.FREQUENCY = "Fréquence de passage"
self.PRINT_S = "Niveau d'impression listing \nsur " \
"la résolution de la luminance"
self.PRINT_T = "Niveau d'impression listing \nsur " \
"la temperature de paroi"
self.TSRAY = "Mode de calcul du Terme Source\n"\
"radiatif explicite"
self.ADVANCED = "Options avancées"
self.MSG_VARICOEFF = "Vous devez remplir la routine USRAY3.F"
self.POPUP = "Options spécifiques"
self.VALIDATE = "Valider"
self.CANCEL = "Annuler"
self.COAL = "ATTENTION : Combustion charbon"
self.PULV_COAL = "Ce modele de rayonnement n'est pas " \
"recommandé si vous ne faites pas de combustion de charbon"
self.PULV_COAL_P1 = "Le modele P-1 est mieux adpaté pour la "\
"combustion de charbon"
else:
self.KEYWORD = "Code_Saturne key words: "
self.ON = "on"
self.OFF = "off"
self.RADIATIVE = "Thermal radiative transfer"
self.NO_MODEL = "No radiative transfers"
self.P1 = "P-1 Model"
self.DOM = "Méthode des ordonnées discrètes"
self.SUITE = "Restart of radiative calculation"
self.NB_DIRECT = "Number of directions"
self.COEFF_ABS = "Absorption coefficient"
self.FREQUENCY = "Iteration frequency"
self.PRINT_S = "Printing level for \nbrigthness resolution"
self.PRINT_T = "Printing level for \nwall temperature"
self.TSRAY = "Radiative Source Term \ncalculus "
self.ADVANCED = "Advanced options"
self.MSG_VARICOEFF = "You have to complete USRAY3.F"
self.POPUP = "Specifics options"
self.VALIDATE = "Validate"
self.CANCEL = "Cancel"
self.COAL = "WARNING : Pulverized Coal"
self.PULV_COAL = "This radiative transfer model is not " \
"recommended if you don't use Pulverized Coal model"
self.PULV_COAL_P1 = "P-1 model is better with Pulverized Coal"
# 2) Messages
#
if Tool.GuiParam.lang == 'fr':
self.MSG_MODEL = "Sélectionner le modèle de rayonnement thermique"
else:
self.MSG_MODEL = "Select the thermic radiation model"
#-------------------------------------------------------------------------------
# ThermalRadiation test case
#-------------------------------------------------------------------------------
class ThermalRadiationTestCase(unittest.TestCase):
"""
"""
def setUp(self):
"""
This method is executed before all "check" methods.
"""
## from Base.XMLengine import Case
## self.case = Case()
from Base.XMLengine import Case, XMLDocument
from Base.XMLinitialize import XMLinit
Tool.GuiParam.lang = 'en'
self.case = Case(None)
XMLinit(self.case)
self.doc = XMLDocument()
def tearDown(self):
"""
This method is executed after all "check" methods.
"""
del self.case
def checkThermalRadiationInstantiation(self):
"""
Check whether the ThermalRadiationModel class could be instantiated
"""
mdl = None
mdl = ThermalRadiationModel(self.case)
assert mdl != None, 'Could not instantiate ThermalRadiationModel'
def checkIsCoalCombustion(self):
"""
Check whether the ThermalRadiationModel class could be in coal combustion
"""
mdl = ThermalRadiationModel(self.case)
mdl.node_Coal['model'] = 'off'
assert mdl.isCoalCombustion() != 1, 'Could not verify pulverized_coal is "on"'
def checkSetModel(self):
"""
Check whether the ThermalRadiationModel class could be set model
"""
mdl = ThermalRadiationModel(self.case)
model = 'dom'
mdl.mSetModel(model)
truc = mdl.node_ray.toString()
doc = '<radiative_transfer model="dom">'\
'<absorption_coefficient type=""/>'\
'<restart status=""/>'\
'<property label="Srad" name="srad" status="on"/>'\
'<property label="Qrad" name="qrad" status="on"/>'\
'<property label="Absorp" name="absorp" status="on"/>'\
'<property label="Emiss" name="emiss" status="on"/>'\
'<property label="CoefAb" name="coefAb" status="on"/>'\
'<property label="Wall_temp" name="wall_temp" status="on"/>'\
'<property label="Flux_incident" name="flux_incident" status="on"/>'\
'<property label="Th_conductivity" name="thermal_conductivity" status="on"/>'\
'<property label="Thickness" name="thickness" status="on"/>'\
'<property label="Emissivity" name="emissivity" status="on"/>'\
'<property label="Flux_net" name="flux_net" status="on"/>'\
'<property label="Flux_convectif" name="flux_convectif" status="on"/>'\
'<property label="Coeff_ech_conv" name="coeff_ech_conv" status="on"/>'\
'</radiative_transfer>'
assert doc == truc, 'Could not set model on radiative_transfer node'
def checkGetModel(self):
"""
Check whether the ThermalRadiationModel class could be get model
"""
mdl = ThermalRadiationModel(self.case)
model = 'dom'
mdl.mSetModel(model)
assert mdl.mGetModel() == model,'Could not get model from radiative_transfer node'
def out_checkGetModelCoal(self):
"""
"""
mdl = ThermalRadiationModel(self.case)
mdl.node_Coal['model'] = 'coal_homo'
model = 'dom'
mdl.mSetModel(model)
assert mdl.mGetModelCoal(model) == 'PULV_COAL_P1',\
'Could not put good text for coal model'
def out_checkGetandSetCoalModel(self):
"""
"""
mdl = ThermalRadiationModel(self.case)
mdl.node_Coal['model'] = 'coal_homo'
model = 'dom'
mdl.mSetModel(model)
mdl.mSetCoalModel(model)
assert mdl.mGetCoalModel() == 'off','Could not get coal model'
def checkThermalRadiationNode(self):
"""
"""
mdl = ThermalRadiationModel(self.case)
mdl.node_coeff.xmlRemoveChild('radiative_transfer')
truc = mdl.node_ray.toString()
doc = '<radiative_transfer model="off">'\
'<absorption_coefficient type=""/>'\
'<restart status=""/>'\
'</radiative_transfer>'
assert doc == truc, 'Could not set radiative transfer node'
def checkThermalRadiationModel(self):
"""
"""
mdl = ThermalRadiationModel(self.case)
mdl.node_coeff.xmlRemoveChild('radiative_transfer')
mdl.node_ray['model'] = 'dom'
truc = mdl.node_ray.toString()
doc = '<radiative_transfer model="dom">'\
'<absorption_coefficient type=""/>'\
'<restart status=""/>'\
'</radiative_transfer>'
assert doc == truc, 'Could not set radiative transfer model'
def checkSetThermalRadiationAbsorCoeff(self):
"""
Check whether the ThermalRadiationModel class could be set Coefficient absorption and its type
"""
mdl = ThermalRadiationModel(self.case)
mdl.mSetModel('dom')
mdl.mSetAbsorCoeff('0.1')
mdl.mSetTypeCoeff('constant')
truc = mdl.node_ray.toString()
doc = '<radiative_transfer model="dom">'\
'<absorption_coefficient type="constant">0.1</absorption_coefficient>'\
'<restart status=""/>'\
'<property label="Srad" name="srad" status="on"/>'\
'<property label="Qrad" name="qrad" status="on"/>'\
'<property label="Absorp" name="absorp" status="on"/>'\
'<property label="Emiss" name="emiss" status="on"/>'\
'<property label="CoefAb" name="coefAb" status="on"/>'\
'<property label="Wall_temp" name="wall_temp" status="on"/>'\
'<property label="Flux_incident" name="flux_incident" status="on"/>'\
'<property label="Th_conductivity" name="thermal_conductivity" status="on"/>'\
'<property label="Thickness" name="thickness" status="on"/>'\
'<property label="Emissivity" name="emissivity" status="on"/>'\
'<property label="Flux_net" name="flux_net" status="on"/>'\
'<property label="Flux_convectif" name="flux_convectif" status="on"/>'\
'<property label="Coeff_ech_conv" name="coeff_ech_conv" status="on"/>'\
'</radiative_transfer>'
assert doc == truc, 'Could not set type of absorption_coefficient'
def checkGetThermalRadiationAbsorCoeff(self):
"""
Check whether the ThermalRadiationModel class could be get restart's status
"""
mdl = ThermalRadiationModel(self.case)
mdl.mSetModel('dom')
mdl.mSetAbsorCoeff('0.1')
mdl.mSetTypeCoeff('constant')
assert mdl.mGetAbsorCoeff() == 0.1,'Could not get value of absorption_coefficient'
assert mdl.mGetTypeCoeff() == 'constant','Could not get type of absorption_coefficient'
def checkSetThermalRadiationRestart(self):
"""
Check whether the ThermalRadiationModel class could be set restart'status node
"""
mdl = ThermalRadiationModel(self.case)
mdl.mSetModel('dom')
mdl.mSetAbsorCoeff('0.1')
mdl.mSetTypeCoeff('constant')
mdl.mSetRestart('on')
truc = mdl.node_ray.toString()
doc = '<radiative_transfer model="dom">'\
'<absorption_coefficient type="constant">0.1</absorption_coefficient>'\
'<restart status="on"/>'\
'<property label="Srad" name="srad" status="on"/>'\
'<property label="Qrad" name="qrad" status="on"/>'\
'<property label="Absorp" name="absorp" status="on"/>'\
'<property label="Emiss" name="emiss" status="on"/>'\
'<property label="CoefAb" name="coefAb" status="on"/>'\
'<property label="Wall_temp" name="wall_temp" status="on"/>'\
'<property label="Flux_incident" name="flux_incident" status="on"/>'\
'<property label="Th_conductivity" name="thermal_conductivity" status="on"/>'\
'<property label="Thickness" name="thickness" status="on"/>'\
'<property label="Emissivity" name="emissivity" status="on"/>'\
'<property label="Flux_net" name="flux_net" status="on"/>'\
'<property label="Flux_convectif" name="flux_convectif" status="on"/>'\
'<property label="Coeff_ech_conv" name="coeff_ech_conv" status="on"/>'\
'</radiative_transfer>'
assert doc == truc, 'Could not set restart'
def checkGetThermalRadiationRestart(self):
"""
Check whether the ThermalRadiationModel class could be get restart's status
"""
mdl = ThermalRadiationModel(self.case)
mdl.mSetModel('dom')
mdl.mSetAbsorCoeff('0.1')
mdl.mSetTypeCoeff('constant')
mdl.mSetRestart('on')
assert mdl.mGetRestart() == 'on','Could not get status of restart'
def checkSetNbDir(self):
"""
Check whether the ThermalRadiationModel class could be set number of directions
"""
mdl = ThermalRadiationModel(self.case)
mdl.mSetModel('dom')
mdl.mSetAbsorCoeff('0.1')
mdl.mSetTypeCoeff('constant')
mdl.mSetRestart('on')
mdl.mSetNbDir('32')
truc = mdl.node_ray.toString()
doc = '<radiative_transfer model="dom">'\
'<absorption_coefficient type="constant">0.1</absorption_coefficient>'\
'<restart status="on"/>'\
'<property label="Srad" name="srad" status="on"/>'\
'<property label="Qrad" name="qrad" status="on"/>'\
'<property label="Absorp" name="absorp" status="on"/>'\
'<property label="Emiss" name="emiss" status="on"/>'\
'<property label="CoefAb" name="coefAb" status="on"/>'\
'<property label="Wall_temp" name="wall_temp" status="on"/>'\
'<property label="Flux_incident" name="flux_incident" status="on"/>'\
'<property label="Th_conductivity" name="thermal_conductivity" status="on"/>'\
'<property label="Thickness" name="thickness" status="on"/>'\
'<property label="Emissivity" name="emissivity" status="on"/>'\
'<property label="Flux_net" name="flux_net" status="on"/>'\
'<property label="Flux_convectif" name="flux_convectif" status="on"/>'\
'<property label="Coeff_ech_conv" name="coeff_ech_conv" status="on"/>'\
'<directions_number>32</directions_number>'\
'</radiative_transfer>'
assert doc == truc, 'Could not set direction_number'
def checkGetNbDir(self):
"""
Check whether the ThermalRadiationModel class could be get number of directions
"""
mdl = ThermalRadiationModel(self.case)
mdl.mSetModel('dom')
mdl.mSetAbsorCoeff('0.1')
mdl.mSetTypeCoeff('constant')
mdl.mSetNbDir('32')
assert mdl.mGetNbDir() == '32',\
'Could not get number of directions'
def checkSetAdvancedOptions(self):
"""
Check whether the ThermalRadiationModel class could be set advanced options
"""
mdl = ThermalRadiationModel(self.case)
mdl.mSetModel('dom')
mdl.mSetAbsorCoeff('0.1')
mdl.mSetTypeCoeff('constant')
mdl.mSetRestart('on')
mdl.mSetFrequency('10')
mdl.mSetTrs('1')
mdl.mSetTemperatureListing('1')
mdl.mSetIntensityResolution('1')
truc = mdl.node_ray.toString()
doc = '<radiative_transfer model="dom">'\
'<absorption_coefficient type="constant">0.1</absorption_coefficient>'\
'<restart status="on"/>'\
'<property label="Srad" name="srad" status="on"/>'\
'<property label="Qrad" name="qrad" status="on"/>'\
'<property label="Absorp" name="absorp" status="on"/>'\
'<property label="Emiss" name="emiss" status="on"/>'\
'<property label="CoefAb" name="coefAb" status="on"/>'\
'<property label="Wall_temp" name="wall_temp" status="on"/>'\
'<property label="Flux_incident" name="flux_incident" status="on"/>'\
'<property label="Th_conductivity" name="thermal_conductivity" status="on"/>'\
'<property label="Thickness" name="thickness" status="on"/>'\
'<property label="Emissivity" name="emissivity" status="on"/>'\
'<property label="Flux_net" name="flux_net" status="on"/>'\
'<property label="Flux_convectif" name="flux_convectif" status="on"/>'\
'<property label="Coeff_ech_conv" name="coeff_ech_conv" status="on"/>'\
'<frequency>10</frequency>'\
'<thermal_radiative_source_term>1</thermal_radiative_source_term>'\
'<temperature_listing_printing>1</temperature_listing_printing>'\
'<intensity_resolution_listing_printing>1</intensity_resolution_listing_printing>'\
'</radiative_transfer>'
assert doc == truc, 'Could not set advanced options'
def checkGetAdvancedOptions(self):
"""
Check whether the ThermalRadiationModel class could be get advanced options
"""
mdl = ThermalRadiationModel(self.case)
mdl.mSetModel('dom')
mdl.mSetAbsorCoeff('0.1')
mdl.mSetTypeCoeff('constant')
mdl.mSetRestart('on')
mdl.mSetFrequency('10')
mdl.mSetTrs('1')
mdl.mSetTemperatureListing('1')
mdl.mSetIntensityResolution('1')
assert mdl.mGetFrequency() == 10,\
'Could not get advanced option frequency'
assert mdl.mGetTrs() == '1',\
'Could not get advanced option thermal source term'
assert mdl.mGetTemperatureListing() == '1',\
'Could not get advanced option temperature Listing'
assert mdl.mGetIntensityResolution() == '1',\
'Could not get advanced option intensity resolution'
def suite():
testSuite = unittest.makeSuite(ThermalRadiationTestCase, "check")
return testSuite
def runTest():
print "ThermalRadiationTestCase to be completed..."
runner = unittest.TextTestRunner()
runner.run(suite())
#-------------------------------------------------------------------------------
# End
#-------------------------------------------------------------------------------
syntax highlighted by Code2HTML, v. 0.9.1