diff --git a/code/code_gen/code_gen.py b/code/code_gen/code_gen.py index 9d8953a..0fe8c29 100644 --- a/code/code_gen/code_gen.py +++ b/code/code_gen/code_gen.py @@ -385,6 +385,8 @@ class FortranProgram: ir2 = Stage2(ir1) print ir2 + pp.pprint (ir2.dependency()) + self.parser.transform(tree) diff --git a/code/code_gen/post.py b/code/code_gen/post.py index c89c5cf..81519bb 100644 --- a/code/code_gen/post.py +++ b/code/code_gen/post.py @@ -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]))