Package PyFoam :: Package Applications :: Module CommonWriteAllTrigger
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.Applications.CommonWriteAllTrigger

 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   
11 -class CommonWriteAllTrigger(object):
12 """ The class that does the actual triggering 13 """ 14
15 - def addOptions(self):
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
35 - def addWriteAllTrigger(self,run,sol):
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
47 -class WriteAllTrigger:
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] # Needed because python 2.5 does not support 'as e' 68 warning("Restoring defaults") 69 self.control.restore() 70 raise e
71
72 - def resetIt(self):
73 if self.fresh: 74 warning("Trigger called: Resetting the controlDict") 75 self.control.restore() 76 self.fresh=False
77 78 # Should work with Python3 and Python2 79