Package PyFoam :: Package Execution :: Module GnuplotRunner
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.Execution.GnuplotRunner

  1  #  ICE Revision: $Id: GnuplotRunner.py 9327 2008-09-05 12:26:01Z bgschaid $  
  2  """Runner that outputs the residuals of the linear solver with Gnuplot""" 
  3   
  4  from StepAnalyzedCommon import StepAnalyzedCommon 
  5  from BasicRunner import BasicRunner 
  6  from BasicWatcher import BasicWatcher 
  7   
  8  from PyFoam.LogAnalysis.BoundingLogAnalyzer import BoundingLogAnalyzer 
  9  from PyFoam.LogAnalysis.RegExpLineAnalyzer import RegExpLineAnalyzer 
 10  from PyFoam.LogAnalysis.SteadyConvergedLineAnalyzer import SteadyConvergedLineAnalyzer 
 11  from PyFoam.Basics.GnuplotTimelines import GnuplotTimelines 
 12  from PyFoam.Basics.TimeLineCollection import signedMax 
 13   
 14  from os import path 
 15   
16 -class GnuplotCommon(StepAnalyzedCommon):
17 """Class that collects the Gnuplotting-Stuff for two other classes"""
18 - def __init__(self, 19 fname, 20 smallestFreq=0., 21 persist=None, 22 splitThres=2048, 23 plotLinear=True, 24 plotCont=True, 25 plotBound=True, 26 plotIterations=False, 27 plotCourant=False, 28 plotExecution=False, 29 plotDeltaT=False, 30 hardcopy=False, 31 customRegexp=None, 32 writeFiles=False, 33 raiseit=False, 34 progress=False, 35 start=None, 36 end=None):
37 """ 38 TODO: Docu 39 """ 40 StepAnalyzedCommon.__init__(self, 41 fname, 42 BoundingLogAnalyzer(doTimelines=True, 43 doFiles=writeFiles, 44 progress=progress), 45 smallestFreq=smallestFreq) 46 47 self.plots={} 48 49 if plotLinear: 50 self.plots["linear"]=GnuplotTimelines(self.getAnalyzer("Linear").lines, 51 persist=persist, 52 raiseit=raiseit, 53 forbidden=["final","iterations"], 54 start=start, 55 end=end, 56 logscale=True) 57 self.getAnalyzer("Linear").lines.setSplitting(splitThres=splitThres,splitFun=max) 58 59 self.plots["linear"].title("Residuals") 60 61 if plotCont: 62 self.plots["cont"]=GnuplotTimelines(self.getAnalyzer("Continuity").lines, 63 persist=persist, 64 alternateAxis=["Global"], 65 raiseit=raiseit, 66 start=start, 67 end=end) 68 self.plots["cont"].set_string("ylabel \"Cumulative\"") 69 self.plots["cont"].set_string("y2label \"Global\"") 70 self.getAnalyzer("Continuity").lines.setSplitting(splitThres=splitThres) 71 72 self.plots["cont"].title("Continuity") 73 74 if plotBound: 75 self.plots["bound"]=GnuplotTimelines(self.getAnalyzer("Bounding").lines, 76 persist=persist, 77 raiseit=raiseit, 78 start=start, 79 end=end) 80 self.getAnalyzer("Bounding").lines.setSplitting(splitThres=splitThres,splitFun=signedMax) 81 self.plots["bound"].title("Bounded variables") 82 83 if plotIterations: 84 self.plots["iter"]=GnuplotTimelines(self.getAnalyzer("Iterations").lines, 85 persist=persist, 86 with="steps", 87 raiseit=raiseit, 88 start=start, 89 end=end) 90 self.getAnalyzer("Iterations").lines.setSplitting(splitThres=splitThres) 91 92 self.plots["iter"].title("Iterations") 93 94 if plotCourant: 95 self.plots["courant"]=GnuplotTimelines(self.getAnalyzer("Courant").lines, 96 persist=persist, 97 raiseit=raiseit, 98 start=start, 99 end=end) 100 self.getAnalyzer("Courant").lines.setSplitting(splitThres=splitThres) 101 102 self.plots["courant"].title("Courant") 103 104 if plotDeltaT: 105 self.plots["deltaT"]=GnuplotTimelines(self.getAnalyzer("DeltaT").lines, 106 persist=persist, 107 raiseit=raiseit, 108 start=start, 109 end=end, 110 logscale=True) 111 self.getAnalyzer("DeltaT").lines.setSplitting(splitThres=splitThres) 112 113 self.plots["deltaT"].title("DeltaT") 114 115 if plotExecution: 116 self.plots["execution"]=GnuplotTimelines(self.getAnalyzer("Execution").lines, 117 persist=persist, 118 with="steps", 119 raiseit=raiseit, 120 start=start, 121 end=end) 122 self.getAnalyzer("Execution").lines.setSplitting(splitThres=splitThres) 123 124 self.plots["execution"].title("Execution Time") 125 126 if customRegexp: 127 self.plotCustom=[] 128 for i in range(len(customRegexp)): 129 name="Custom%02d" % i 130 expr=customRegexp[i] 131 titles=[] 132 theTitle="Custom %d" % i 133 options = { "persist" : persist, 134 "raiseit" : raiseit, 135 "start" : start, 136 "end" : end } 137 138 if expr[0]=="{": 139 data=eval(expr) 140 expr=data["expr"] 141 if "name" in data: 142 name+="_"+data["name"] 143 name=name.replace(" ","_").replace(path.sep,"Slash") 144 theTitle+=" - "+data["name"] 145 if "titles" in data: 146 titles=data["titles"] 147 for o in ["alternateAxis","logscale","with","ylabel","y2label"]: 148 if o in data: 149 options[o]=data[o] 150 151 self.addAnalyzer(name, 152 RegExpLineAnalyzer(name.lower(), 153 expr,titles=titles, 154 doTimelines=True, 155 doFiles=writeFiles)) 156 plotCustom=GnuplotTimelines(*[self.getAnalyzer(name).lines], 157 **options) 158 self.getAnalyzer(name).lines.setSplitting(splitThres=splitThres) 159 plotCustom.title(theTitle) 160 self.plots["custom%04d" % i]=plotCustom 161 162 163 self.reset() 164 165 self.hardcopy=hardcopy
166
167 - def timeHandle(self):
168 for p in self.plots: 169 self.plots[p].redo()
170
171 - def stopHandle(self):
172 self.timeHandle() 173 if self.hardcopy: 174 for p in self.plots: 175 self.plots[p].hardcopy(filename=p+".ps",color=True)
176
177 -class GnuplotRunner(GnuplotCommon,BasicRunner):
178 - def __init__(self, 179 argv=None, 180 smallestFreq=0., 181 persist=None, 182 plotLinear=True, 183 plotCont=True, 184 plotBound=True, 185 plotIterations=False, 186 plotCourant=False, 187 plotExecution=False, 188 plotDeltaT=False, 189 customRegexp=None, 190 hardcopy=False, 191 writeFiles=False, 192 server=False, 193 lam=None, 194 raiseit=False, 195 steady=False, 196 progress=False, 197 restart=False):
198 """@param smallestFreq: smallest Frequency of output 199 @param persist: Gnuplot window persistst after run 200 @param steady: Is it a steady run? Then stop it after convergence""" 201 BasicRunner.__init__(self, 202 argv=argv, 203 silent=progress, 204 server=server, 205 lam=lam, 206 restart=restart) 207 GnuplotCommon.__init__(self, 208 "Gnuplotting", 209 smallestFreq=smallestFreq, 210 persist=persist, 211 plotLinear=plotLinear, 212 plotCont=plotCont, 213 plotBound=plotBound, 214 plotIterations=plotIterations, 215 plotCourant=plotCourant, 216 plotExecution=plotExecution, 217 plotDeltaT=plotDeltaT, 218 customRegexp=customRegexp, 219 hardcopy=hardcopy, 220 writeFiles=writeFiles, 221 raiseit=raiseit, 222 progress=progress) 223 self.steady=steady 224 if self.steady: 225 self.steadyAnalyzer=SteadyConvergedLineAnalyzer() 226 self.addAnalyzer("Convergence",self.steadyAnalyzer)
227
228 - def lineHandle(self,line):
229 """Not to be called: Stops the solver""" 230 GnuplotCommon.lineHandle(self,line) 231 232 if self.steady: 233 if not self.steadyAnalyzer.goOn(): 234 self.stopGracefully()
235
236 - def stopHandle(self):
237 """Not to be called: Restores controlDict""" 238 GnuplotCommon.stopHandle(self) 239 BasicRunner.stopHandle(self)
240
241 -class GnuplotWatcher(GnuplotCommon,BasicWatcher):
242 - def __init__(self, 243 logfile, 244 smallestFreq=0., 245 persist=None, 246 silent=False, 247 tailLength=1000, 248 sleep=0.1, 249 plotLinear=True, 250 plotCont=True, 251 plotBound=True, 252 plotIterations=False, 253 plotCourant=False, 254 plotExecution=False, 255 plotDeltaT=False, 256 customRegexp=None, 257 writeFiles=False, 258 hardcopy=False, 259 raiseit=False, 260 progress=False, 261 start=None, 262 end=None):
263 """@param smallestFreq: smallest Frequency of output 264 @param persist: Gnuplot window persistst after run""" 265 BasicWatcher.__init__(self, 266 logfile, 267 silent=(silent or progress), 268 tailLength=tailLength, 269 sleep=sleep) 270 GnuplotCommon.__init__(self, 271 logfile, 272 smallestFreq=smallestFreq, 273 persist=persist, 274 plotLinear=plotLinear, 275 plotCont=plotCont, 276 plotBound=plotBound, 277 plotIterations=plotIterations, 278 plotCourant=plotCourant, 279 plotExecution=plotExecution, 280 plotDeltaT=plotDeltaT, 281 customRegexp=customRegexp, 282 hardcopy=hardcopy, 283 writeFiles=writeFiles, 284 raiseit=raiseit, 285 progress=progress, 286 start=start, 287 end=end)
288
289 - def startHandle(self):
290 self.bakFreq=self.freq 291 self.freq=3600
292
293 - def tailingHandle(self):
294 self.freq=self.bakFreq 295 self.oldtime=0
296