firedrakeproject / firedrake

Firedrake is an automated system for the portable solution of partial differential equations using the finite element method (FEM)
https://firedrakeproject.org
Other
496 stars 157 forks source link

Firedrake/UFL level submesh support. #1350

Open dham opened 5 years ago

dham commented 5 years ago

This issue documents proposals for the Firedrake level of Submesh support. Probably supersedes #723 .

In the first instance, this proposal refers to the creation of sub meshes with the same cell dimension as the base mesh. Extension to lower dimension manifolds will follow.

Object creation

The following code would create a sub mesh over the closure of the cells marked 2 and 4 of the mesh m.

sm = SubMesh(m, (2,4))

A SubMesh subclasses Mesh, so it is possible to create FunctionSpaces and Functions over sm, or even to use it as the basis for another SubMesh.

Integration

The core principle is that parent meshes know how to iterate over data stored on child meshes, but the converse is not true. This means that integrals which access data defined on different domains must be defined on the common ancestor domain, and be restricted to subdomain IDs over which all the accessed data is defined.

Facet integrals demand further consideration since Coefficients and Arguments may be defined on one or both sides of the facet.

ksagiyam commented 5 years ago

Implementation of `SubMesh' seems to require some special treatments for the edge case described in the attached file.

subdomain_issue.pdf

wence- commented 5 years ago

I think the right thing to do is to transfer ownership of entities in PETSc? I don't want to extract subdomains on a root process because this is not scalable.

To rearrange ownership, you need to rewrite the pointSF of the DM. (This is what is used by Firedrake to determine which entities live in ghost region/are owned by someone else).

I think the thing to do is for the ownership selection on the submesh to proceed by everyone marking entities that they can see through the closure of their cells by their rank, then you do a reduction with MPI_MAX (this is what happens now for ownership). In your sketched case here, this would result in rank-0 owning the "shared" points on the interface.

ksagiyam commented 5 years ago

Thanks! Sounds great. I'll work on that.

MariusCausemann commented 4 years ago

Hi, I want to solve a set a equations on different domains coupled by a boundary condition. Is that already possible? And is there a an docker image with the current status, that I could use for testing? Thank you!

wence- commented 4 years ago

Hi @MariusCausemann, it is not in master yet. There are some branches that are in progress (@ksagiyam can provide more details). We only build docker images of master (docker pull firedrakeproject/firedrake:latest) I think (these are built on every successful build of master, so are reasonably up to date).

MariusCausemann commented 4 years ago

Hi wence, thank you for your fast replay. I'm trying to build an image based on the dmplex-submesh branch. Is there any example for the new submesh functionality available?

ksagiyam commented 4 years ago

Hi @MariusCausemann , dmplex-submesh branch in Firedrake depends on many other branches in PyOP2, ufl, tsfc, PETSc, and petsc4py, and we have been making some changes in the related petsc branch, so it probably fails at this moment. But firedrake/tests/submesh will give you a feel of what will become available.

MariusCausemann commented 4 years ago

Hi @ksagiyam , do you have a rough estimate when the submesh functionality will be available and added to the master branch? Looks already quit promising!

ksagiyam commented 4 years ago

Hi @MariusCausemann , I am very poor at estimating the time, but we plan to do this in a few steps; we first would like to have our branch of petsc merged to upstream, which will take a few weeks. We will then try to merge some useful functionality of submesh in Firedrake, which will allow us to extract subdomain and solve problems on the subdomain; this will hopefully be done some time next month. We will then work on coupling, using both original mesh and submesh. This work will most likely take another few months.

salazardetroya commented 4 years ago

Is there any update on the implementation of SubDomains? The corresponding branches in PETSc seem to be stuck. I am wondering if they are being the bottleneck here.

rckirby commented 4 years ago

Dear Miguel, we just got an update on this at Firedrake 2020. Koki is making a lot of progress and has some simple demos, but the Firedrake team is trying to figure out some technical/math issues about how traces should work to support boundary terms. I don’t know the status of petsc — it may or may not be a bottleneck, but it’s not the main limitation.

On Feb 19, 2020, at 1:23 PM, Miguel Salazar de Troya notifications@github.com wrote:

Is there any update on the implementation of SubDomains? The corresponding branches in PETSc seem to be stuck. I am wondering if they are being the bottleneck here.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.

salazardetroya commented 4 years ago

Thanks. Correct me if I am wrong, but it seems to be that this capability will enable several features in Firedrake. Namely, marking subdomains in a mesh, creating function spaces in submeshes, mixed dimensional problems and domain decomposition methods (#1354). What among those are priority?

federicobetti99 commented 1 year ago

Hello, is there any update on the implementation of SubDomains?