From a76ae5f468d21e0ec9cad7d67f377e1fb1fadd67 Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Fri, 2 Feb 2018 15:12:44 +0100 Subject: [PATCH] Store local grid functions instead of global ones After consulting Steffen --- python/dune/perftool/pdelab/function.py | 16 ++-------------- python/dune/perftool/pdelab/localoperator.py | 16 ++++++++-------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/python/dune/perftool/pdelab/function.py b/python/dune/perftool/pdelab/function.py index 564b4447..2f2e0292 100644 --- a/python/dune/perftool/pdelab/function.py +++ b/python/dune/perftool/pdelab/function.py @@ -12,19 +12,6 @@ from dune.perftool.pdelab.localoperator import name_gridfunction_member import pymbolic.primitives as prim -def local_gridfunction(coeff, restriction, diffOrder): - gf = name_gridfunction_member(coeff, diffOrder) - name = "{}_local".format(gf) - define_local_gridfunction(name, gf) - bind_gridfunction_to_element(name, restriction) - return name - - -@preamble -def define_local_gridfunction(name, gf): - return "auto {} = localFunction({});".format(name, gf) - - @preamble def bind_gridfunction_to_element(gf, restriction): element = name_cell(restriction) @@ -42,7 +29,8 @@ def declare_grid_function_range(gridfunction): def pymbolic_evaluate_gridfunction(name, coeff, restriction, grad): diffOrder = 1 if grad else 0 - gridfunction = local_gridfunction(coeff, restriction, diffOrder) + gridfunction = name_gridfunction_member(coeff, diffOrder) + bind_gridfunction_to_element(gridfunction, restriction) temporary_variable(name, shape=(1,) + (world_dimension(),) * diffOrder, diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index 11c302d9..948356b4 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -158,7 +158,7 @@ def localoperator_basename(form_ident): def name_gridfunction_member(coeff, diffOrder=0): - name = "gridfunction_coeff{}_diff{}".format(coeff.count(), diffOrder) + name = "local_gridfunction_coeff{}_diff{}".format(coeff.count(), diffOrder) define_gridfunction_member(name, coeff, diffOrder) return name @@ -175,14 +175,14 @@ def define_gridfunction_member(name, coeff, diffOrder): _type = type_gridfunction_template_parameter(coeff) param = name_gridfunction_constructor_argument(coeff) if diffOrder > 0: - include_file("dune/pdelab/function/discretegridviewfunction.hh", filetag="operatorfile") - newtype = "Dune::PDELab::DiscreteGridViewFunction<typename {0}::GridFunctionSpace, typename {0}::Vector, {1}>".format(_type, diffOrder) - params = ["{}.gridFunctionSpace()".format(param), "{}.dofs()".format(param)] - initializer_list(name, params, classtag="operator") - return "{} {};".format(newtype, name) + other = name_gridfunction_member(coeff, diffOrder - 1) + init = "derivative({})".format(other) + initializer_list(name, [init], classtag="operator") + return "mutable decltype({}) {};".format(init, name) else: - initializer_list(name, [param], classtag="operator") - return "const {}& {};".format(_type, name) + init = "localFunction({})".format(param) + initializer_list(name, [init], classtag="operator") + return "mutable typename {}::LocalFunction {};".format(_type, name) @template_parameter(classtag="operator") -- GitLab