diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py index 1e92e67c183c2869b39eef89646369ad9b441d30..e2993aea16412e5cba3e263acffa5399b540b07e 100644 --- a/python/dune/perftool/pdelab/driver.py +++ b/python/dune/perftool/pdelab/driver.py @@ -1785,6 +1785,26 @@ def return_statement(): return "return {};".format(fail) +def _blockstructured_degree_helper(element, op): + element._degree = op(element._degree, get_option("number_of_blocks")) + from ufl import MixedElement, VectorElement, TensorElement + if isinstance(element, VectorElement) or isinstance(element, TensorElement): + _blockstructured_degree_helper(element.sub_elements()[0], op) + elif isinstance(element, MixedElement): + for e in element.sub_elements(): + _blockstructured_degree_helper(e, op) + + +def set_blockstructured_degree(): + from operator import mul + _blockstructured_degree_helper(_driver_data["form"].coefficients()[0].ufl_element(), mul) + + +def unset_blockstructured_degree(): + from operator import floordiv + _blockstructured_degree_helper(_driver_data["form"].coefficients()[0].ufl_element(), floordiv) + + def generate_driver(formdatas, data): # The driver module uses a global dictionary for storing necessary data set_driver_data(formdatas, data)