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