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
11 """ The class that does the actual triggering
12 """
13
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
39
40
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
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