diff --git a/python/dune/perftool/pdelab/driver/timings.py b/python/dune/perftool/pdelab/driver/timings.py index cdeb6b1d5e78e8794c3973343e0c32e76535b0d4..e740a7d339785aa682dd41a68bade574f0f06d34 100644 --- a/python/dune/perftool/pdelab/driver/timings.py +++ b/python/dune/perftool/pdelab/driver/timings.py @@ -45,8 +45,18 @@ def dump_dof_numbers(stream): gvt = type_leafview() gv = name_leafview() - from dune.perftool.pdelab.driver import get_trial_element, isDG - if isDG(get_trial_element()): + 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, @@ -54,7 +64,7 @@ def dump_dof_numbers(stream): name_trial_gfs()) ] else: - return ["{} << \"{} \" << {} << \" dofs dofs \" << {}.() << std::endl;".format(stream, + return ["{} << \"{} \" << {} << \" dofs dofs \" << {}.size() << std::endl;".format(stream, level, ident, name_trial_gfs())