diff --git a/code/code_gen/code_gen.py b/code/code_gen/code_gen.py index 2141ba6..81f8bea 100644 --- a/code/code_gen/code_gen.py +++ b/code/code_gen/code_gen.py @@ -208,6 +208,7 @@ class ToFortran(Transformer): abs = lambda self : "dabs" rxn_rate = lambda self : "rxn_rate" + class CheckPass(Visitor): def __init__(self): @@ -348,121 +349,6 @@ class CalculateTree(Transformer): + [(k, False) for k, v in self.exp_parser.dependency.items()] ) - def array_decl (self): - - f_code = "" - - for var in self.derived.iterkeys(): - f_code = f_code + real_array_decl.format(var) + "\n" - - for var in self.derivatives.iterkeys(): - f_code = f_code + real_array_decl.format(var) + "\n" - - for var in self.averaged.iterkeys(): - f_code = f_code + avg_array_decl.format(var) + "\n" - - return f_code - - - def array_init (self): - - f_code = "" - - for var in self.derived.iterkeys(): - f_code = f_code + real_array_alloc.format(var) + "\n" - - for var in self.derivatives.iterkeys(): - f_code = f_code + real_array_alloc.format(var) + "\n" - - for var in self.averaged.iterkeys(): - f_code = f_code + avg_array_alloc.format(var) + "\n" - - return f_code - - - def array_final (self): - - f_code = "" - - for var in self.derived.iterkeys(): - f_code = f_code + real_array_free.format(var) + "\n" - - for var in self.derivatives.iterkeys(): - f_code = f_code + real_array_free.format(var) + "\n" - - for var in self.averaged.iterkeys(): - f_code = f_code + real_array_free.format(var) + "\n" - - return f_code - - - def array_pass1 (self): - - f_code = "" - - code_dict = {} - - for tup in self.derived.iteritems(): - code_dict[tup[0]] = real_array_loop.format(tup) + "\n" - - for tup in self.derivatives.iteritems(): - code_dict[tup[0]] = real_array_diff.format(tup[1]) + "\n" - - wfmt = "* {}(i,j,k)" - for k, (v,w) in self.averaged.iteritems(): - code_dict[k] = avg_array_sum.format(k, v, wfmt.format(w) if w is not None else "") + "\n" - - for var in self.sort_vars(): - f_code = f_code + code_dict[var] - - return f_code - - - def array_pass1_avg (self): - - f_code = "" - - meanw = "/ avg_{}" - - for k, (v,w) in self.averaged.iteritems(): - if k.startswith("avg"): - f_code = avg_array_divide.format(k, meanw.format(w) if w is not None else "") + "\n" + f_code - else: - f_code = f_code + avg_array_divide.format(k, meanw.format(w) if w is not None else "") + "\n" - - return f_code - - - def module_dict (self): - md = {} - md["module_name"] = "terms" - md["module_data"] = self.array_decl() - md["module_init"] = self.array_init() - md["module_finalize"] = self.array_final() - md["module_pass1"] = self.array_pass1() - md["module_pass1_avg"] = self.array_pass1_avg() - - return md - - def sort_vars (self): - order = [] - remain = set(self.derived.iterkeys()) | set(self.derivatives.iterkeys()) | set(self.averaged.iterkeys()) - - while len(remain) > 0: - for v in remain: - if len(set(self.dependency[v]) & remain) == 0: - order.append(v) - remain.remove(v) - break - - return order - - -tf=CalculateTree() - - -calc_parser = Lark(calc_grammar, parser='lalr' ) # , transformer=tf) -calc = calc_parser.parse import sys @@ -487,13 +373,6 @@ class FortranProgram: dg = self.parser.dep_graph() fd = self.parser.has_fluc() - ''' - for v in dg.iterkeys(): - fd[v] = False - - for n, d in (self.parser.definitions.iteritems()): - fd[n] = CheckPass.check(d) - ''' def isFluc (a): for x in dg[a]: @@ -613,13 +492,6 @@ class FortranProgram: return md - def calculate_pass1 (self): - return - - def calculate_pass2 (self): - return - - def main(): while True: @@ -637,7 +509,6 @@ def test(): with open("terms.input") as inputfile: terms_raw = ((inputfile.read())) - parsed_tree = (calc(terms_raw)) fp = FortranProgram(terms_raw) @@ -645,25 +516,6 @@ def test(): print mod_form.format( fp.print_program() ) - ''' - for f, ts in zip(namelist, deps): - for t in ts: - print "{} -> {}".format(f, t) - - for d, (op, phi) in ft.derivatives.iteritems(): - print "{} -> {}".format(d, phi) - - print tf.averaged - ''' - - #print mod_form.format(tf.module_dict()) - - #print "! ", tf.derived - #print "! ", tf.derivatives - #print "! ", tf.dependency - - #print "! ", tf.sort_vars() if __name__ == '__main__': test() - # main() diff --git a/code/m_terms.f90 b/code/m_terms.f90 index 0db0057..4d9b931 100644 --- a/code/m_terms.f90 +++ b/code/m_terms.f90 @@ -6,7 +6,7 @@ use m_calculate implicit none -character (len = *), parameter :: output_header="avg_fsd fsd_avg_t1 fsd_avg_t2 fsd_avg_fu fsd_avg_absk" +character (len = *), parameter :: output_header="x avg_fsd fsd_avg_t1 fsd_avg_t2 fsd_avg_fu fsd_avg_absk" real*8, allocatable, dimension(:,:,:) :: ddx_nx real*8, allocatable, dimension(:,:,:) :: t1_fsd real*8, allocatable, dimension(:,:,:) :: t2_fsd