fix ExpInspector dependency bug and added method constructing dependency graph

This commit is contained in:
ignis 2019-05-06 22:47:30 +09:00
parent 78c5b72287
commit b644eb51c3
2 changed files with 30 additions and 10 deletions

View file

@ -385,6 +385,8 @@ class FortranProgram:
ir2 = Stage2(ir1)
print ir2
pp.pprint (ir2.dependency())
self.parser.transform(tree)

View file

@ -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]))