From 2293c748969e8b7746bec052910c0bd51adb6f15 Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Tue, 30 Jan 2018 13:11:27 +0100 Subject: [PATCH] Fixup the set_option mechanism --- python/dune/perftool/options.py | 11 ++++++++++- python/dune/perftool/pdelab/driver/__init__.py | 3 ++- .../dune/perftool/pdelab/driver/gridfunctionspace.py | 4 ---- python/dune/perftool/pdelab/driver/timings.py | 5 +---- python/dune/perftool/pdelab/localoperator.py | 8 ++++++++ 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py index 9376c6b3..c3fffbc5 100644 --- a/python/dune/perftool/options.py +++ b/python/dune/perftool/options.py @@ -192,7 +192,16 @@ def set_option(key, value): any other options. """ global _global_options - _global_options = process_options(_global_options).copy(**{key: value}) + _global_options = process_global_options(_global_options).copy(**{key: value}) + + +def set_form_option(key, value, form=None): + if form is None: + from dune.perftool.generation import get_global_context_value + form = get_global_context_value("form_identifier", 0) + if isinstance(form, int): + form = get_option("operators").split(",")[form].strip() + _form_options[form] = _form_options[form].copy(**{key: value}) def get_option(key): diff --git a/python/dune/perftool/pdelab/driver/__init__.py b/python/dune/perftool/pdelab/driver/__init__.py index d0241f53..b26af235 100644 --- a/python/dune/perftool/pdelab/driver/__init__.py +++ b/python/dune/perftool/pdelab/driver/__init__.py @@ -248,7 +248,8 @@ def generate_driver(): from dune.perftool.loopy.target import type_floatingpoint pre_include("#define HP_TIMER_OPCOUNTER {}".format(type_floatingpoint()), filetag="driver") evaluate_residual_timer() - apply_jacobian_timer() + if get_form_option("matrix_free"): + apply_jacobian_timer() elif is_stationary(): from dune.perftool.pdelab.driver.solve import dune_solve vec = dune_solve() diff --git a/python/dune/perftool/pdelab/driver/gridfunctionspace.py b/python/dune/perftool/pdelab/driver/gridfunctionspace.py index 410036b9..f95cbefe 100644 --- a/python/dune/perftool/pdelab/driver/gridfunctionspace.py +++ b/python/dune/perftool/pdelab/driver/gridfunctionspace.py @@ -50,10 +50,6 @@ def type_range(): def typedef_grid(name): dim = get_dimension() if isQuadrilateral(get_trial_element().cell()): - # For Yasp Grids the jacobian of the transformation is diagonal and constant on each cell - set_option('diagonal_transformation_matrix', True) - set_option('constant_transformation_matrix', True) - range_type = type_range() if get_option("yaspgrid_offset"): gridt = "Dune::YaspGrid<{0}, Dune::EquidistantOffsetCoordinates<{1}, {0}>>".format(dim, range_type) diff --git a/python/dune/perftool/pdelab/driver/timings.py b/python/dune/perftool/pdelab/driver/timings.py index d003c1c6..1adba1a1 100644 --- a/python/dune/perftool/pdelab/driver/timings.py +++ b/python/dune/perftool/pdelab/driver/timings.py @@ -1,6 +1,6 @@ """ Timing related generator functions """ -from dune.perftool.options import get_option, set_option +from dune.perftool.options import get_option from dune.perftool.generation import (cached, include_file, pre_include, @@ -119,9 +119,6 @@ def evaluate_residual_timer(): @preamble def apply_jacobian_timer(): - # Set the matrix_free option to True! - set_option("matrix_free", True) - formdata = get_formdata() n_go = name_gridoperator(formdata) v = name_vector(formdata) diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py index 253917ba..f038e484 100644 --- a/python/dune/perftool/pdelab/localoperator.py +++ b/python/dune/perftool/pdelab/localoperator.py @@ -718,6 +718,14 @@ def generate_localoperator_kernels(operator): from dune.perftool.pdelab.parameter import name_paramclass name_paramclass() + # Set some options! + from dune.perftool.pdelab.driver import isQuadrilateral + if isQuadrilateral(form.coefficients()[0].ufl_element().cell()): + from dune.perftool.options import set_form_option + # For Yasp Grids the jacobian of the transformation is diagonal and constant on each cell + set_form_option('diagonal_transformation_matrix', True) + set_form_option('constant_transformation_matrix', True) + # Add right base classes for stationary/instationary operators base_class('Dune::PDELab::LocalOperatorDefaultFlags', classtag="operator") from dune.perftool.pdelab.driver import is_stationary -- GitLab