1
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
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
168 for p in self.plots:
169 self.plots[p].redo()
170
176
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
235
240
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
290 self.bakFreq=self.freq
291 self.freq=3600
292
294 self.freq=self.bakFreq
295 self.oldtime=0
296