fix ExpInspector dependency bug and added method constructing dependency graph
This commit is contained in:
parent
78c5b72287
commit
b644eb51c3
2 changed files with 30 additions and 10 deletions
|
|
@ -385,6 +385,8 @@ class FortranProgram:
|
|||
ir2 = Stage2(ir1)
|
||||
print ir2
|
||||
|
||||
pp.pprint (ir2.dependency())
|
||||
|
||||
|
||||
|
||||
self.parser.transform(tree)
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ class ExpInspector(Visitor):
|
|||
|
||||
def fluc(self, tree):
|
||||
self.fluctuation = True
|
||||
self.dep.add(tree.children[0].value)
|
||||
|
||||
def var(self, tree):
|
||||
self.dep.add(tree.children[0].value)
|
||||
|
|
@ -101,9 +102,14 @@ class AveragedField (FieldBase):
|
|||
super(AveragedField,self).__init__(name, fdict)
|
||||
self.tgt = fdict[tgt]
|
||||
self.dep.add(tgt)
|
||||
self.weighted = False
|
||||
if w:
|
||||
self.weighted = True
|
||||
self.w = fdict[w]
|
||||
self.dep.add(tgt)
|
||||
self.dep.add(w)
|
||||
|
||||
def isWeighted (self):
|
||||
return self.weighted
|
||||
|
||||
class CollectDefinitions(Visitor):
|
||||
|
||||
|
|
@ -140,6 +146,7 @@ class Stage1():
|
|||
self.primary = set([])
|
||||
self.derived = {}
|
||||
self.averaged = {}
|
||||
# Construct Field objects
|
||||
CollectDefinitions( self.primary, self.derived, self.averaged ).visit(raw_tree)
|
||||
|
||||
def __repr__ (self):
|
||||
|
|
@ -154,6 +161,8 @@ class Stage2():
|
|||
self.derivative = {}
|
||||
self.averaged = {}
|
||||
|
||||
# Construct Derivative Field objects
|
||||
|
||||
dset = set([])
|
||||
for k, v in self.derived.iteritems():
|
||||
dset.update(v.derivs)
|
||||
|
|
@ -163,13 +172,29 @@ class Stage2():
|
|||
self.derived[a.name] = a
|
||||
self.derivative[tup] = a
|
||||
|
||||
# Construct Derivative Field objects
|
||||
|
||||
for w, tgts in src.averaged.iteritems():
|
||||
for t in tgts:
|
||||
AveragedField(w, t, self.derived)
|
||||
a = AveragedField(w, t, self.derived)
|
||||
self.averaged[a.name] = a
|
||||
|
||||
print "debug averaged"
|
||||
print self.averaged
|
||||
|
||||
def __repr__ (self):
|
||||
return "\n".join(map(str, [self.derived, self.derivative]))
|
||||
return "\n".join(map(str, [self.derived, self.derivative, self.averaged]))
|
||||
|
||||
def dependency (self):
|
||||
dgraph = {}
|
||||
|
||||
for k,v in self.derived.iteritems():
|
||||
dgraph[k] = v.dep
|
||||
|
||||
for k,v in self.averaged.iteritems():
|
||||
dgraph[k] = v.dep
|
||||
|
||||
return dgraph
|
||||
|
||||
|
||||
class Stage3():
|
||||
|
|
@ -180,13 +205,6 @@ class Stage3():
|
|||
self.derived = src.derived
|
||||
self.derivative = src.derivative
|
||||
|
||||
dset = set([])
|
||||
for k, v in self.derived.iteritems():
|
||||
dset.update(v.derivs)
|
||||
|
||||
for tup in dset:
|
||||
self.derivative[tup] = DerivedField(tup[0], tup[1], self.derived)
|
||||
|
||||
def __repr__ (self):
|
||||
return "\n".join(map(str, [self.derived, self.derivative]))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue