The tabulate_tensor signatures are inconsistent in how the different arguments are treated in the face of multiple cells.
In the interior_facet_integral, there are explicitly named arguments vertex_coordinates_0 and a vertex_coordinates_1, while in custom_integral, a single flat vertex_coordinates array is used with coordinates from two cells being packed into that array in the MultiMeshAssembler. In all tabulate_tensor signatures, the dofs are passed in a single "double**w" where the first dimension is the function id and the second is the dof numbering with dofs from two cells in intererior_facet_integral packed contiguously. I don't intend to go through everything and make it consistent in one go, but I think that for changes that will happen in the near and far future we should aim for a single philisophy and move towards that when we add something new or modify something old. >From the code generation perspective I think it doesn't matter a lot, it's more important to keep the dolfin side clean and easy to edit. Packing every array flat keeps the ufc signatures flexible but moves complexity over to documentation and conventions. The implementation in dolfin may or may not be more complex because flat arrays are easy to create and copy but harder to populate with more manual indexing perhaps. This can also be a question of performance, we should avoid unnecessary work in the inner loops of assemblers. Here are the candidates with dimensions in comments (consts removed for clarity): // element tensor(s) double* A // [sum of packed element tensor size for each domain] // dofs of coefficient functions (num_dofs_for_this_coefficient varies) double ** w // [num_coefficients][num_dofs_for_this_coefficient*num_domains] // coordinates of cell vertices (should also be generalized to coordinate_dofs) double* vertex_coordinates // [num_domains*num_cell_vertices*gdim] double* vertex_coordinates_0 // [num_cell_vertices*gdim] double* vertex_coordinates_1 // ditto // quadrature rules double* quadrature_points // [num_points] double* quadrature_weights // [num_points*gdim] // geometric quantities double* facet_normals // [num_points*gdim]? Martin
_______________________________________________ fenics mailing list [email protected] http://fenicsproject.org/mailman/listinfo/fenics
