Package PyFoam :: Package Applications :: Module CommonSafeTrigger
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.Applications.CommonSafeTrigger

 1  """Implements a trigger that sets and resets 'safer' settings for 
 2  Steady runs""" 
 3   
 4  import re 
 5  from os import path 
 6  from optparse import OptionGroup 
 7  from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile 
 8  from PyFoam.Error import warning 
 9   
10 -class CommonSafeTrigger(object):
11 """ The class that does the actual triggering 12 """ 13
14 - def addOptions(self):
15 grp=OptionGroup(self.parser, 16 "Safe settings", 17 "Set safer settings for steady runs") 18 grp.add_option("--safe-until", 19 type="float", 20 dest="safeUntil", 21 default=None, 22 help="Sets lower under-relaxation and lower-order convection-schemes for the start of the simulation") 23 grp.add_option("--safe-relaxation-factor", 24 type="float", 25 dest="safeRelaxation", 26 default=0.5, 27 help="The factor by which the relaxation-factors should be scaled down (when calculating safe). Default: %default") 28 self.parser.add_option_group(grp)
29
30 - def addSafeTrigger(self,run,sol,steady=True):
31 if self.opts.safeUntil: 32 if not steady: 33 warning("This is an unsteady run. No safe settings set") 34 else: 35 warning("Adding Trigger and resetting to safer start-settings") 36 trig=SafeTrigger(sol,self.opts.safeRelaxation) 37 run.addTrigger(self.opts.safeUntil,trig.resetIt) 38 run.addEndTrigger(trig.resetIt)
39 40
41 -class SafeTrigger:
42 - def __init__(self,sol,factor):
43 self.solution=ParsedParameterFile(path.join(sol.systemDir(),"fvSolution"),backup=True) 44 self.schemes=ParsedParameterFile(path.join(sol.systemDir(),"fvSchemes"),backup=True) 45 46 self.fresh=True 47 48 try: 49 relax=self.solution["relaxationFactors"] 50 for var in relax: 51 relax[var]*=factor 52 53 cExp=re.compile("div\((.+),(.+)\)") 54 conv=self.schemes["divSchemes"] 55 for nm in conv: 56 if cExp.match(nm) or nm=="default": 57 conv[nm]="Gauss upwind" 58 59 self.solution.writeFile() 60 self.schemes.writeFile() 61 except Exception,e: 62 warning("Restoring defaults") 63 self.solution.restore() 64 self.schemes.restore() 65 raise e
66
67 - def resetIt(self):
68 if self.fresh: 69 warning("Trigger called: Resetting fvSchemes and fvSolution") 70 self.solution.restore() 71 self.schemes.restore() 72 self.fresh=False
73