From 275517e48a47f0dd7394461d1ca7ad8c84976227 Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Mon, 5 Feb 2018 10:34:27 +0100 Subject: [PATCH] Fix coefficient evaluation for facet integrals In that case you need two GridFunctions, which can be bound to the two cells. --- python/dune/perftool/pdelab/function.py | 2 +- python/dune/perftool/pdelab/localoperator.py | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/python/dune/perftool/pdelab/function.py b/python/dune/perftool/pdelab/function.py index 2f2e0292..c1032400 100644 --- a/python/dune/perftool/pdelab/function.py +++ b/python/dune/perftool/pdelab/function.py @@ -29,7 +29,7 @@ def declare_grid_function_range(gridfunction): def pymbolic_evaluate_gridfunction(name, coeff, restriction, grad): diffOrder = 1 if grad else 0 - gridfunction = name_gridfunction_member(coeff, diffOrder) + gridfunction = name_gridfunction_member(coeff, restriction, diffOrder) bind_gridfunction_to_element(gridfunction, restriction) temporary_variable(name, diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index 948356b4..244a1cae 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -157,9 +157,10 @@ def localoperator_basename(form_ident): return get_form_option("classname", form_ident) -def name_gridfunction_member(coeff, diffOrder=0): - name = "local_gridfunction_coeff{}_diff{}".format(coeff.count(), diffOrder) - define_gridfunction_member(name, coeff, diffOrder) +def name_gridfunction_member(coeff, restriction, diffOrder=0): + restr = "_n" if restriction == Restriction.POSITIVE else "" + name = "local_gridfunction_coeff{}_diff{}{}".format(coeff.count(), diffOrder, restr) + define_gridfunction_member(name, coeff, restriction, diffOrder) return name @@ -171,11 +172,11 @@ def name_gridfunction_constructor_argument(coeff): @class_member(classtag="operator") -def define_gridfunction_member(name, coeff, diffOrder): +def define_gridfunction_member(name, coeff, restriction, diffOrder): _type = type_gridfunction_template_parameter(coeff) param = name_gridfunction_constructor_argument(coeff) if diffOrder > 0: - other = name_gridfunction_member(coeff, diffOrder - 1) + other = name_gridfunction_member(coeff, restriction, diffOrder - 1) init = "derivative({})".format(other) initializer_list(name, [init], classtag="operator") return "mutable decltype({}) {};".format(init, name) @@ -741,7 +742,7 @@ def generate_localoperator_kernels(operator): # Iterate over the needed grid functions in correct order for c in sorted(filter(lambda c: c.count() > 2, form.coefficients()), key=lambda c: c.count()): - name_gridfunction_member(c) + name_gridfunction_constructor_argument(c) # Set some options! from dune.perftool.pdelab.driver import isQuadrilateral -- GitLab