1 """Implements a trigger that manipulates the controlDict in
2 such a way that every time-step is written to disk"""
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.ensureGeneralOptions()
15 self.generalOpts.add_option("--write-all-timesteps",
16 action="store_true",
17 dest="writeAll",
18 default=False,
19 help="Write all the timesteps to disk")
20 self.generalOpts.add_option("--purge-write",
21 action="store",
22 type="int",
23 dest="purgeWrite",
24 default=None,
25 help="Together with write-all-timesteps determines the number of time-steps that is kept on disc. All will be kept if unset")
26 self.generalOpts.add_option("--run-until",
27 action="store",
28 type="float",
29 dest="runUntil",
30 default=None,
31 help="Change the endTime so that the case only runs until this time")
32
34 if self.opts.purgeWrite!=None and not self.opts.writeAll:
35 warning("purgeWrite of",self.opts.purgeWrite,"ignored because write-all-timesteps unused")
36
37 if self.opts.writeAll or self.opts.runUntil!=None:
38 warning("Adding Trigger and resetting to safer start-settings")
39 trig=WriteAllTrigger(sol,
40 self.opts.writeAll,
41 self.opts.purgeWrite,
42 self.opts.runUntil)
43 run.addEndTrigger(trig.resetIt)
44
46 - def __init__(self,sol,writeAll,purge,until):
47 self.control=ParsedParameterFile(path.join(sol.systemDir(),"controlDict"),backup=True)
48
49 self.fresh=True
50
51 try:
52 if writeAll:
53 self.control["writeControl"]="timeStep"
54 self.control["writeInterval"]="1"
55 if purge!=None:
56 self.control["purgeWrite"]=purge
57
58 if until!=None:
59 self.control["endTime"]=until
60
61 self.control.writeFile()
62 except Exception,e:
63 warning("Restoring defaults")
64 self.control.restore()
65 raise e
66
68 if self.fresh:
69 warning("Trigger called: Resetting the controlDict")
70 self.control.restore()
71 self.fresh=False
72