diff --git a/python/dune/perftool/pdelab/driver/timings.py b/python/dune/perftool/pdelab/driver/timings.py index 4ba2d8318de885030240adabcf3e9e139bb20524..b8ebd5f32dd368dc23119388f352b25cff9575a0 100644 --- a/python/dune/perftool/pdelab/driver/timings.py +++ b/python/dune/perftool/pdelab/driver/timings.py @@ -44,12 +44,29 @@ def dump_dof_numbers(stream): include_file("dune/pdelab/common/partitionviewentityset.hh", filetag="driver") gvt = type_leafview() gv = name_leafview() - return ["Dune::PDELab::NonOverlappingEntitySet<{}> es({});".format(gvt, gv), - "{} << \"{} \" << {} << \" dofs dofs \" << {}.maxLocalSize() * es.size(0) << std::endl;".format(stream, - level, - ident, - name_trial_gfs()) - ] + + from dune.perftool.pdelab.driver import get_trial_element, isDG, _flatten_list + from ufl import MixedElement, TensorProductElement + element = get_trial_element() + + def _apply_to_element(element, f): + if isinstance(element, MixedElement) or isinstance(element, TensorProductElement): + return tuple(_apply_to_element(e, f) for e in element.sub_elements()) + else: + return f(element) + element_is_dg = all(_flatten_list(_apply_to_element(element, isDG))) + + if element_is_dg: + return ["Dune::PDELab::NonOverlappingEntitySet<{}> es({});".format(gvt, gv), + "{} << \"{} \" << {} << \" dofs dofs \" << {}.maxLocalSize() * es.size(0) << std::endl;".format(stream, + level, + ident, + name_trial_gfs()) + ] + else: + return ["{} << \"{} \" << {} << \" dofs dofs \" << {}.size() << std::endl;".format(stream, level, ident, + name_trial_gfs()) + ] @preamble(section="timings")