Package PyFoam :: Package LogAnalysis :: Module LinearSolverLineAnalyzer
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.LogAnalysis.LinearSolverLineAnalyzer

  1  #  ICE Revision: $Id$ 
  2  """Analyze information from the linear solver""" 
  3   
  4  import re 
  5   
  6  linearRegExp="^(.+):  Solving for (.+), Initial residual = (.+), Final residual = (.+), No Iterations ([0-9]+).*$" 
  7   
  8  # from FileLineAnalyzer import FileLineAnalyzer 
  9  # from TimeLineLineAnalyzer import TimeLineLineAnalyzer 
 10   
 11  from .GeneralLineAnalyzer import GeneralLineAnalyzer 
 12   
13 -class GeneralLinearSolverLineAnalyzer(GeneralLineAnalyzer):
14 """Parses for information about the linear solver 15 16 Files of the form linear_<var> are written, where <var> is the 17 variable for which the solver was used""" 18
19 - def __init__(self, 20 doTimelines=True, 21 doFiles=True, 22 singleFile=False, 23 startTime=None, 24 endTime=None):
25 GeneralLineAnalyzer.__init__(self, 26 titles=["Initial","Final","Iterations"], 27 doTimelines=doTimelines, 28 doFiles=doFiles, 29 singleFile=singleFile, 30 startTime=startTime, 31 endTime=endTime) 32 self.exp=re.compile(linearRegExp) 33 34 if self.doTimelines: 35 self.lines.setDefault(1.) 36 self.lines.setExtend(True)
37
38 - def addToFiles(self,match):
39 solver=match.groups()[0] 40 name=self.fName(match.groups()[1]) 41 rest=match.groups()[2:] 42 self.files.write("linear_"+name,self.getTime(),rest)
43
44 - def addToTimelines(self,match):
45 name=self.fName(match.groups()[1]) 46 resid=match.groups()[2] 47 final=match.groups()[3] 48 iter=match.groups()[4] 49 if resid[0]!="(": 50 # regular linear solver 51 self.lines.setValue(name,resid) 52 53 self.lines.setAccumulator(name+"_final","last") 54 self.lines.setValue(name+"_final",final) 55 else: 56 # 1.6-ext block-coupled solver 57 resids=resid[1:-1].split() 58 finals=resid[1:-1].split() 59 for i in range(len(resids)): 60 nm="%s[%d]" % (name,i) 61 self.lines.setValue(nm,resids[i]) 62 63 self.lines.setAccumulator(nm+"_final","last") 64 self.lines.setValue(nm+"_final",finals[i]) 65 66 self.lines.setAccumulator(name+"_iterations","sum") 67 self.lines.setValue(name+"_iterations",iter)
68
69 -class GeneralLinearSolverIterationsLineAnalyzer(GeneralLinearSolverLineAnalyzer):
70 """Parses information about the linear solver and collects the iterations""" 71
72 - def __init__(self, 73 doTimelines=True, 74 doFiles=True, 75 singleFile=False, 76 startTime=None, 77 endTime=None):
78 GeneralLinearSolverLineAnalyzer.__init__(self, 79 doTimelines=doTimelines, 80 doFiles=doFiles, 81 singleFile=singleFile, 82 startTime=startTime, 83 endTime=endTime)
84
85 - def addToFiles(self,match):
86 pass
87
88 - def addToTimelines(self,match):
89 name=self.fName(match.groups()[1]) 90 iter=match.groups()[4] 91 92 self.lines.setAccumulator(name,"sum") 93 self.lines.setValue(name,iter)
94 95
96 -class LinearSolverLineAnalyzer(GeneralLinearSolverLineAnalyzer):
97 """Parses for information about the linear solver 98 99 Files of the form linear_<var> are written, where <var> is the 100 variable for which the solver was used""" 101
102 - def __init__(self):
103 GeneralLinearSolverLineAnalyzer.__init__(self,doTimelines=False)
104
105 -class TimeLineLinearSolverLineAnalyzer(GeneralLinearSolverLineAnalyzer):
106 """Parses for imformation about the linear solver and collects the residuals in timelines""" 107
108 - def __init__(self):
109 GeneralLinearSolverLineAnalyzer.__init__(self,doFiles=False)
110
111 -class TimeLineLinearIterationsSolverLineAnalyzer(GeneralLinearSolverIterationsLineAnalyzer):
112 """Parses for information about the linear solver and collects the iterations in timelines""" 113
114 - def __init__(self):
116 117 # Should work with Python3 and Python2 118