diff --git a/python/dune/perftool/pdelab/driver/constraints.py b/python/dune/perftool/pdelab/driver/constraints.py index e3a96df485dc382761587e0950764372102869a6..ddb880ee2d0d667547d3883a137dc886d244a823 100644 --- a/python/dune/perftool/pdelab/driver/constraints.py +++ b/python/dune/perftool/pdelab/driver/constraints.py @@ -13,6 +13,7 @@ from dune.perftool.pdelab.driver.gridfunctionspace import (name_gfs, preprocess_leaf_data, ) +from ufl.classes import Expr from ufl import FiniteElement, MixedElement, TensorElement, VectorElement, TensorProductElement @@ -24,8 +25,11 @@ def name_assembled_constraints(): def has_dirichlet_constraints(is_dirichlet): - if isinstance(is_dirichlet, (list, tuple)): - return any(bool(d) for d in is_dirichlet) + if isinstance(is_dirichlet, (tuple, list)): + return any(has_dirichlet_constraints(d) for d in is_dirichlet) + + if isinstance(is_dirichlet, Expr): + return True else: return bool(is_dirichlet) diff --git a/python/dune/perftool/pdelab/driver/gridfunctionspace.py b/python/dune/perftool/pdelab/driver/gridfunctionspace.py index a4ae3604c06af34a774ba0494751085fcffc1a9e..eb8688e01dfeede43d13c166b838b357841599eb 100644 --- a/python/dune/perftool/pdelab/driver/gridfunctionspace.py +++ b/python/dune/perftool/pdelab/driver/gridfunctionspace.py @@ -324,7 +324,8 @@ def typedef_gfs(element, is_dirichlet, name, root): vb = type_vectorbackend(element, root) gv = type_leafview() fem = type_fem(element) - cass = type_constraintsassembler(bool(is_dirichlet[0])) + from dune.perftool.pdelab.driver.constraints import has_dirichlet_constraints + cass = type_constraintsassembler(has_dirichlet_constraints(is_dirichlet)) return "using {} = Dune::PDELab::GridFunctionSpace<{}, {}, {}, {}>;".format(name, gv, fem, cass, vb)