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
10 """ The class that does the actual triggering
11 """
12
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
34
35
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
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