classes for primary fields and averaged fields

This commit is contained in:
ignis 2019-05-06 17:51:19 +09:00
parent 1ff03e8f50
commit 78c5b72287

View file

@ -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 '''