classes for primary fields and averaged fields
This commit is contained in:
parent
1ff03e8f50
commit
78c5b72287
1 changed files with 56 additions and 2 deletions
|
|
@ -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 '''
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue