# -*- 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 lagrangian two phase flow modelling management. This module contains the following classes and function: - LagrangianModel - LagrangianView - PageText - LagrangianTestCase """ #------------------------------------------------------------------------------- # Library modules import #------------------------------------------------------------------------------- import sys, unittest import Tix 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 #------------------------------------------------------------------------------- # lagrangian model class #------------------------------------------------------------------------------- class LagrangianModel: """ """ def __init__(self, case): """ Constructor. """ self.case = case nModels = self.case.xmlGetNode('thermophysical_models') self.node_gas = nModels.xmlGetNode('gas_combustion', 'model') self.node_coal = nModels.xmlGetNode('pulverized_coal', 'model') self.node_joule = nModels.xmlGetNode('joule_effect', 'model') self.node_therm = nModels.xmlGetNode('thermal_scalar', 'model') self.node_lagr = self.case.xmlGetNode('lagrangian') self.lagrangianModel = ('off', 'one_way', 'two_way', 'frozen') # def getTurbulenceModel(self): # """ # Return the turbulence model. Warning, this method doesn't handle # the initial default value of the turbulence model. Therefore, in # the XMLmodel class, the order of the call TurbulenceModel, and # LagrangianModel should not be change. # """ # turb = nModels.xmlGetNode('turbulence', 'model') # if not turb: exit(1) # model = turb['model'] # if not model: exit(1) # return model def defaultLagrangianValues(self): """ Return in a dictionnary which contains default values. """ default = {} default['model'] = "off" return default def getAllLagrangianModels(self): """ Return all defined lagrangian models in a tuple. """ return self.lagrangianModel def lagrangianModelsList(self): """ Create a tuple with the lagrangian models allowed by the analysis features. """ import Turbulence model = Turbulence.TurbulenceModel(self.case).getTurbulenceModel() del Turbulence if model not in ('off', 'k-epsilon', 'k-epsilon-PL', 'Rij-epsilon', 'Rij-SSG', 'v2f-phi', 'k-omega-SST'): return ('off',) else: return self.lagrangianModel def setLagrangianModel(self, model): """ Update the lagrangian model markup from the XML document. """ if model not in self.lagrangianModelsList(): #TODO MSG sys.exit(1) self.node_lagr['model'] = model if model == 'off': import CoalCombustion coal = CoalCombustion.CoalCombustionModel(self.case).getCoalCombustionModel() if coal == 'coal_lagr': CoalCombustion.CoalCombustionModel(self.case).setCoalCombustion('off') del CoalCombustion def getLagrangianModel(self): """ Return the current lagrangian model. """ model = self.node_lagr['model'] if model not in self.lagrangianModelsList(): model = self.defaultLagrangianValues()['model'] self.setLagrangianModel(model) return model #------------------------------------------------------------------------------- # Main view class #------------------------------------------------------------------------------- class LagrangianView(TkPage.Page): """ Class to open Lagrangian Page. """ def _dependsPages(self, name): """ Construction of the list of dependencies Pages. """ pass def _tkControlVariables(self): """ Tkinter variables declaration. """ self.lagrangian = StringVar() def _pageControl(self): """ Instantiate the lagrangian modelling class. """ self.model = LagrangianModel(self.case) def putLagrangianModel(self, event=None): """ """ self.model.setLagrangianModel(self.lagrangian.get()) def _createWidgets(self): """ Create the Page layout. """ t = PageText() lf = Tix.LabelFrame(self.myPage, bd=2, label=t.LAGRANGIAN, relief=FLAT) lf.label.config(font=fT) lf.pack(side=TOP, fill=X, padx=10, pady=10) # Button for the lagrangian modelling choice # self.b = Tix.OptionMenu(lf.frame, options='menubutton.width 45') self.b.menubutton.config(bd=2, relief=RAISED) self.balloon.bind_widget(self.b, statusmsg=t.MSG_LAGR, balloonmsg=t.KEYWORD+'IILAGR') self.b.pack(side=TOP, pady=15, padx=10) self.b.add_command('off', label=t.NO_LAGR) self.b.add_separator('') self.b.add_command('one_way', label=t.ONE_WAY) self.b.add_command('two_way', label=t.TWO_WAY) self.b.add_command('frozen', label=t.FROZEN) self.b.config(variable=self.lagrangian , command= self.putLagrangianModel) 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. """ # Update the lagrangian list with the analysis features # for mdl in self.model.lagrangianModel: if mdl not in self.model.lagrangianModelsList(): self.b.disable(mdl) # Select the lagrangian model # model = self.model.getLagrangianModel() self.b.config(value=model) #------------------------------------------------------------------------------- # 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.LAGRANGIAN = "Écoulement multiphasique Eulérien/Lagangien" self.KEYWORD = "Mots clé Code_Saturne : " self.NO_LAGR = "Pas de modélisation lagrangienne" self.ONE_WAY = "Couplage simple" self.TWO_WAY = "Couplage retour" self.FROZEN = "Particules sur champs figés" else: self.LAGRANGIAN = "Eulerian/Lagangian Multi-phase Treatment" self.KEYWORD = "Code_Saturne key words: " self.NO_LAGR = "No lagrangian modelling" self.ONE_WAY = "One way coupling" self.TWO_WAY = "Two way coupling" self.FROZEN = "Particles on frozen fields" # 2) Messages # if Tool.GuiParam.lang == 'fr': self.MSG_LAGR = "Sélectionner un modèle lagrangien" else: self.MSG_LAGR = "Select a lagrangian modelling" #------------------------------------------------------------------------------- # Lagrangian test case #------------------------------------------------------------------------------- class LagrangianTestCase(unittest.TestCase): """ """ def setUp(self): """ This method is executed before all "check" methods. """ from Base.XMLengine import Case from Base.XMLinitialize import XMLinit self.case = Case() XMLinit(self.case) def tearDown(self): """ This method is executed after all "check" methods. """ del self.case def checkLagrangianInstantiation(self): """ Check whether the LagrangianModel class could be instantiated """ model = None model = LagrangianModel(self.case) assert model != None, 'Could not instantiate LagrangianModel' def checkLagrangianModelsList(self): """ Check whether the LagrangianModelsList could be get """ mdl = LagrangianModel(self.case) self.case.xmlGetNode('turbulence')['model'] = 'LES_Smagorinsky' assert mdl.lagrangianModelsList() == ('off',),\ 'Could not use the lagrangianModelsList method' def suite(): testSuite = unittest.makeSuite(LagrangianTestCase, "check") return testSuite def runTest(): print "LagrangianTestCase to be completed..." runner = unittest.TextTestRunner() runner.run(suite()) #------------------------------------------------------------------------------- # End #-------------------------------------------------------------------------------