From b2e99751776399732d407a70cbb8b8e7fbf0ce5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de> Date: Mon, 22 Aug 2016 11:38:54 +0200 Subject: [PATCH] Give name to forms in heatequation.ufl --- python/dune/perftool/compile.py | 12 +++++++++-- python/dune/perftool/pdelab/driver.py | 3 +-- python/dune/perftool/pdelab/localoperator.py | 21 ++++++++++++++++---- test/heatequation/heatequation.ufl | 8 +++----- 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/python/dune/perftool/compile.py b/python/dune/perftool/compile.py index a40a1782..8e8f9f45 100644 --- a/python/dune/perftool/compile.py +++ b/python/dune/perftool/compile.py @@ -90,9 +90,18 @@ def compile_form(): with cache_context('driver', delete=True): generate_driver(formdatas[0].preprocessed_form, get_option("driver_file")) + # In case of multiple forms: Genarate one file that includes all localoperator files + if len(formdatas) > 1: + from dune.perftool.pdelab.localoperator import generate_localoperator_basefile + generate_localoperator_basefile(formdatas, data) + # Generate local operator files - for formdata in formdatas: + for index, formdata in enumerate(formdatas): with global_context(data=data, formdata=formdata): + # Make sure cache is empty + from dune.perftool.generation import delete_cache_items + delete_cache_items() + if get_option("operator_file"): from dune.perftool.pdelab.localoperator import generate_localoperator_kernels kernels = generate_localoperator_kernels(formdata, data) @@ -108,4 +117,3 @@ def compile_form(): from dune.perftool.pdelab.localoperator import generate_localoperator_file generate_localoperator_file(kernels, filename) - break diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py index 9a3ad147..011c2dac 100644 --- a/python/dune/perftool/pdelab/driver.py +++ b/python/dune/perftool/pdelab/driver.py @@ -610,8 +610,7 @@ def typedef_localoperator(name): from dune.perftool.generation import get_global_context_value data = get_global_context_value("data") formdata = get_global_context_value("formdata") - from dune.perftool.pdelab.localoperator import name_localoperator_file - filename = name_localoperator_file(formdata, data) + filename = get_option("operator_file") include_file(filename, filetag="driver") from dune.perftool.pdelab.localoperator import localoperator_basename lopname = localoperator_basename(formdata, data) diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index dde94934..b4990c0f 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -34,10 +34,13 @@ def name_form(formdata, data): def name_localoperator_file(formdata, data): - suffix = '_' + name_form(formdata, data) from dune.perftool.options import get_option - basename, extension = splitext(get_option("operator_file")) - filename = basename + suffix + extension + if len(data.forms) == 1: + filename = get_option("operator_file") + else: + suffix = '_' + name_form(formdata, data) + basename, extension = splitext(get_option("operator_file")) + filename = basename + suffix + extension return filename @@ -128,7 +131,7 @@ def name_initree_member(): @class_basename("operator") def localoperator_basename(formdata, data): form_name = name_form(formdata, data) - return "LocalOperator"+form_name.capitalize() + return "LocalOperator" + form_name.capitalize() def class_type_from_cache(classtag): @@ -447,3 +450,13 @@ def generate_localoperator_file(kernels, filename): # TODO take the name of this thing from the UFL file lop = cgen_class_from_cache("operator", members=operator_methods) generate_file(filename, "operatorfile", [param, lop]) + + +def generate_localoperator_basefile(formdatas, data): + filename = get_option("operator_file") + for formdata in formdatas: + lop_filename = name_localoperator_file(formdata, data) + include_file(lop_filename, filetag="operatorbasefile") + + from dune.perftool.file import generate_file + generate_file(filename, "operatorbasefile", []) diff --git a/test/heatequation/heatequation.ufl b/test/heatequation/heatequation.ufl index 8392d99e..d883d345 100644 --- a/test/heatequation/heatequation.ufl +++ b/test/heatequation/heatequation.ufl @@ -5,9 +5,7 @@ V = FiniteElement("CG", "triangle", 1, dirichlet_expression=g) u = TrialFunction(V) v = TestFunction(V) -# mass = (u*v)*dx -# poisson = (inner(grad(u), grad(v)) - f*v)*dx +mass = (u*v)*dx +poisson = (inner(grad(u), grad(v)) - f*v)*dx -# forms = [poisson,mass] - -forms = [(u*v)*dx,(inner(grad(u), grad(v)) - f*v)*dx] \ No newline at end of file +forms = [poisson,mass] \ No newline at end of file -- GitLab