On 16 Jul 2021, at 17:30, Sagiyama, Koki <k.sagiyama@imperial.ac.uk> wrote:
Hi Abhishek,
There seems to be a few missing pieces to naturally apply edge boundary conditions in Firedrake, for instance: • EDGE_SETS_LABEL, which is to map edge markers (in your case 1001, 1002, etc) to associated edge entities in the mesh, is not automatically constructed (I think) (Firedrake does construct FACE_SETS_LABEL, which is the facet counterpart), • `bc.nodes` eventually calls `dmcommon.facet_closure_nodes` (https://github.com/firedrakeproject/firedrake/blob/master/firedrake/cython/d...) with given subdomain markers to collect all facet nodes on which we would like to enforce values on, but we would need to generalise this function for edges.
FWIW if you don't need variable layer extruded meshes, that code (in dmcommon) is completely generic and will work for marked edges you would need to use the EDGE_SETS_LABEL name and also in dmcommon.complete_facet_labels call DMPlexLabelComplete on the EDGE_SETS_LABEL as well. So I think would actually not be a lot of work to support edge-based dirichlet data. Although perhaps one would want to pick a new name. Lawrence