From 78c5b72287da676c62f08c053b91d0f6b51261aa Mon Sep 17 00:00:00 2001 From: ignis Date: Mon, 6 May 2019 17:51:19 +0900 Subject: [PATCH] classes for primary fields and averaged fields --- code/code_gen/post.py | 58 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/code/code_gen/post.py b/code/code_gen/post.py index e96002b..c89c5cf 100644 --- a/code/code_gen/post.py +++ b/code/code_gen/post.py @@ -40,6 +40,9 @@ class FieldBase (object): def depends_on (self, a): return (a in self.dep) + def is_fluctuation (self): + return False + def __repr__ (self): return self.name @@ -65,6 +68,16 @@ class Field (FieldBase): return (a in self.dep) +class PrimaryField (FieldBase): + + def __init__ (self, name, fdict): + super(PrimaryField,self).__init__(name, fdict) + self.derivs = set([]) + + def code (self): + return "" + + class DerivedField (FieldBase): def __init__ (self, op, v, fdict): @@ -77,6 +90,21 @@ class DerivedField (FieldBase): def code (self): return "call {0} ( {2}, {1} )".format(self.op, self.v, self.array) + +class AveragedField (FieldBase): + + def __init__ (self, w, tgt, fdict): + if w: + name = "{}_avg_{}".format(w, tgt) + else: + name = "avg_{}".format(tgt) + super(AveragedField,self).__init__(name, fdict) + self.tgt = fdict[tgt] + self.dep.add(tgt) + if w: + self.w = fdict[w] + self.dep.add(tgt) + class CollectDefinitions(Visitor): def __init__ (self, primary, derived, averaged): @@ -87,6 +115,7 @@ class CollectDefinitions(Visitor): def varlist(self, tree): for v in tree.children: self.primary.add(v.value) + self.derived[v.value] = PrimaryField(v.value, self.derived) def assign_var (self, tree): lval, rval = tree.children @@ -123,6 +152,33 @@ class Stage2(): self.src = src self.derived = src.derived self.derivative = {} + self.averaged = {} + + dset = set([]) + for k, v in self.derived.iteritems(): + dset.update(v.derivs) + + for tup in dset: + a = DerivedField(tup[0], tup[1], self.derived) + self.derived[a.name] = a + self.derivative[tup] = a + + for w, tgts in src.averaged.iteritems(): + for t in tgts: + AveragedField(w, t, self.derived) + + def __repr__ (self): + return "\n".join(map(str, [self.derived, self.derivative])) + + + +class Stage3(): + ''' analyze fluctuation ''' + + def __init__ (self, src): + self.src = src + self.derived = src.derived + self.derivative = src.derivative dset = set([]) for k, v in self.derived.iteritems(): @@ -136,8 +192,6 @@ class Stage2(): -class Stage3(): - ''' analyze fluctuation ''' class Stage4(): ''' pass1 and pass2 seperation and calculation ordering '''