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