diff --git a/python/dune/codegen/sumfact/symbolic.py b/python/dune/codegen/sumfact/symbolic.py index 8b28f8f37eedb349ab3cf1f1d78e7565910990f5..a0868a5c32118ab0bd162311a5fb3a6e8d0f61a0 100644 --- a/python/dune/codegen/sumfact/symbolic.py +++ b/python/dune/codegen/sumfact/symbolic.py @@ -130,7 +130,7 @@ class VectorSumfactKernelInput(SumfactKernelInterfaceBase): @property def signature_args(self): - if get_form_option("fastdg"): + if self.interfaces[0].direct_is_possible: return tuple("const {}* fastdg{}".format(type_floatingpoint(), i) for i, _ in enumerate(remove_duplicates(self.interfaces))) else: return () @@ -385,7 +385,9 @@ class SumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable): # TODO: For now we do not vectorize SumfactKernels with different # quadrature_permutation. This should be handled like upper/lower # vectorization - return tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames) + return tuple(m.quadrature_size for m in self.matrix_sequence_quadrature_permuted) + tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames) + (self.interface.direct_is_possible,) + # return tuple(m.quadrature_size for m in self.matrix_sequence_quadrature_permuted) + tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames) + # return tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames) @property def cache_key(self): @@ -631,6 +633,8 @@ class VectorizedSumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable) assert len(set(k.predicates for k in kernels)) == 1 # Assert properties of the matrix sequence of the underlying kernels + # For now we don't mix direct and non_direct input. Could be done in an upper/lower way. + assert len(set(tuple(k.interface.direct_is_possible for k in kernels))) == 1 for i in range(kernels[0].length): assert len(set(tuple(k.matrix_sequence_quadrature_permuted[i].rows for k in kernels))) == 1 assert len(set(tuple(k.matrix_sequence_quadrature_permuted[i].cols for k in kernels))) == 1 diff --git a/test/sumfact/poisson/CMakeLists.txt b/test/sumfact/poisson/CMakeLists.txt index fb5c4ac3a73f8f20a70e5135264465d158135c68..3adde6321cc11930a69dbb166e9ba954850d55b5 100644 --- a/test/sumfact/poisson/CMakeLists.txt +++ b/test/sumfact/poisson/CMakeLists.txt @@ -71,6 +71,11 @@ if(consistent-edge-orientation_FOUND) INIFILE poisson_dg_3d_gmsh.mini ANALYZE_GRID ) + dune_add_formcompiler_system_test(UFLFILE poisson_dg_2d.ufl + BASENAME sumfact_poisson_fastdg_2d_gmsh + INIFILE poisson_fastdg_2d_gmsh.mini + ANALYZE_GRID + ) dune_add_formcompiler_system_test(UFLFILE poisson_dg_3d.ufl BASENAME sumfact_poisson_fastdg_3d_gmsh INIFILE poisson_fastdg_3d_gmsh.mini diff --git a/test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini b/test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini new file mode 100644 index 0000000000000000000000000000000000000000..56b69c773b1ce95fa6387f5313af47a94980f8c0 --- /dev/null +++ b/test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini @@ -0,0 +1,32 @@ +__name = sumfact_poisson_fastdg_2d_gmsh_{__exec_suffix} +__exec_suffix = {deg_suffix}_{quadvec_suffix}_{gradvec_suffix} + +quadvec_suffix = quadvec, nonquadvec | expand quad +gradvec_suffix = gradvec, nongradvec | expand grad +deg_suffix = deg{formcompiler.ufl_variants.degree} + +# {deg_suffix} == deg1 | exclude +{quadvec_suffix} == quadvec | exclude +# {gradvec_suffix} == gradvec | exclude + +gmshFile = square_quad.msh + +[wrapper.vtkcompare] +name = {__name} +extension = vtu + +[formcompiler] +compare_l2errorsquared = 5e-5, 5e-7 | expand deg +grid_unstructured = 1 +debug_interpolate_input = 1 + +[formcompiler.r] +numerical_jacobian = 0 +sumfact = 1 +fastdg = 1 +sumfact_regular_jacobians = 1 +vectorization_quadloop = 1, 0 | expand quad +vectorization_strategy = model, none | expand grad + +[formcompiler.ufl_variants] +degree = 1, 2 | expand deg diff --git a/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini b/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini index 7e669e5d83912489ae69b39acaaa970eb2c04023..438b8d009c56e42e9f65bd4b708e8f6acd1f6e06 100644 --- a/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini +++ b/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini @@ -7,7 +7,7 @@ deg_suffix = deg{formcompiler.ufl_variants.degree} {deg_suffix} == deg1 | exclude {quadvec_suffix} == quadvec | exclude -{gradvec_suffix} == gradvec | exclude +# {gradvec_suffix} == gradvec | exclude gmshFile = cube_hexa.msh