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 import sys
6
7 from os import path
8 from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile
9 from PyFoam.Error import warning
10
12 """ The class that does the actual triggering
13 """
14
16 self.ensureGeneralOptions()
17 self.generalOpts.add_option("--write-all-timesteps",
18 action="store_true",
19 dest="writeAll",
20 default=False,
21 help="Write all the timesteps to disk")
22 self.generalOpts.add_option("--purge-write",
23 action="store",
24 type="int",
25 dest="purgeWrite",
26 default=None,
27 help="Together with write-all-timesteps determines the number of time-steps that is kept on disc. All will be kept if unset")
28 self.generalOpts.add_option("--run-until",
29 action="store",
30 type="float",
31 dest="runUntil",
32 default=None,
33 help="Change the endTime so that the case only runs until this time")
34
36 if self.opts.purgeWrite!=None and not self.opts.writeAll:
37 warning("purgeWrite of",self.opts.purgeWrite,"ignored because write-all-timesteps unused")
38
39 if self.opts.writeAll or self.opts.runUntil!=None:
40 warning("Adding Trigger and resetting to safer start-settings")
41 trig=WriteAllTrigger(sol,
42 self.opts.writeAll,
43 self.opts.purgeWrite,
44 self.opts.runUntil)
45 run.addEndTrigger(trig.resetIt)
46
48 - def __init__(self,sol,writeAll,purge,until):
49 self.control=ParsedParameterFile(path.join(sol.systemDir(),"controlDict"),
50 backup=True,
51 doMacroExpansion=True)
52
53 self.fresh=True
54
55 try:
56 if writeAll:
57 self.control["writeControl"]="timeStep"
58 self.control["writeInterval"]="1"
59 if purge!=None:
60 self.control["purgeWrite"]=purge
61
62 if until!=None:
63 self.control["endTime"]=until
64
65 self.control.writeFile()
66 except Exception:
67 e = sys.exc_info()[1]
68 warning("Restoring defaults")
69 self.control.restore()
70 raise e
71
73 if self.fresh:
74 warning("Trigger called: Resetting the controlDict")
75 self.control.restore()
76 self.fresh=False
77
78
79