diff --git a/ffcx_backends/cpp.py b/ffcx_backends/cpp.py index 1631ae4..a717ac9 100644 --- a/ffcx_backends/cpp.py +++ b/ffcx_backends/cpp.py @@ -420,7 +420,8 @@ class {factory_name} }} // Data - static inline const std::vector enabled_coefficients{enabled_coefficients_init}; + static constexpr std::array + enabled_coefficients = {enabled_coefficients_init}; static constexpr bool needs_facet_permutations = {needs_facet_permutations}; }}; @@ -458,6 +459,7 @@ def generator( code["name"] = ir.expression.name vals = ", ".join("1" if i else "0" for i in ir.enabled_coefficients) + code["num_enabled_coefficients"] = str(len(ir.enabled_coefficients)) code["enabled_coefficients"] = f"{{{vals}}}" code["needs_facet_permutations"] = ( "true" if ir.expression.needs_facet_permutations else "false" @@ -469,6 +471,7 @@ def generator( implementation = integral.factory.format( factory_name=factory_name, enabled_coefficients_init=code["enabled_coefficients"], + num_enabled_coefficients=code["num_enabled_coefficients"], tabulate_tensor=code["tabulate_tensor"], needs_facet_permutations=code["needs_facet_permutations"], scalar_type=options["scalar_type"], diff --git a/test/test_cpp.py b/test/test_cpp.py index 1215776..e137726 100644 --- a/test/test_cpp.py +++ b/test/test_cpp.py @@ -15,8 +15,9 @@ def test_integral() -> None: domain = ufl.Mesh(basix.ufl.element("Lagrange", "triangle", 1, shape=(2,))) space = ufl.FunctionSpace(domain, element) u, v = ufl.TrialFunction(space), ufl.TestFunction(space) + f = ufl.Coefficient(space) - a = (ufl.inner(u, v) + ufl.inner(ufl.grad(u), ufl.grad(v))) * ufl.dx + a = (ufl.inner(u, v) + f * ufl.inner(ufl.grad(u), ufl.grad(v))) * ufl.dx opts = get_options({"language": "ffcx_backends.cpp"}) compiled_objects = compile_ufl_objects([a], opts)