SCOREC / core

parallel finite element unstructured meshes
Other
179 stars 63 forks source link

Pumi mesh with mesh parts of different dimensions #340

Closed nlelong closed 2 years ago

nlelong commented 3 years ago

Hello !

I'm using PUMI as the underlying distributed mesh library in our mechanics code. On some occasions we will want to have mesh parts of different dimensions interacting with each other (e.g. beam/shell elements) in our mesh. When I try to do that with PUMI, adjacencies seem to work fine but the mesh can't be verified (it crashes). The following example tries to add a 1D element and a 2D element in a single mesh instance. I'm using the apf interface since in our code we want to be able to have multiple instances of apf::Mesh2, problematic with the pumi main API.

example.zip

Adjacency computation works fine. Is the verify function unable to consider this or did I do something wrong (I'm aware I may not be using PUMI the usual way ? Is there limitations to this use case with PUMI, especially when it comes to partitioning and migration ? Thanks a lot for your help !

cwsmith commented 3 years ago

Hello. I pushed your example code to a branch (with some cleanup)

https://github.com/SCOREC/core/blob/e0839b748ffb3b2717090d6cb70966010dc4d2da/test/nonmanifold.cc

and ran it. Note, this call https://github.com/SCOREC/core/blob/e0839b748ffb3b2717090d6cb70966010dc4d2da/test/nonmanifold.cc#L13 is required to have pumi write output; by default it is silent.

The output from running the example code is:

$ ./test/nonmanifold                                   
APF FAILED: apf::Verify: vertex with 1 adjacent edges
centroid: (0, 0, 0)
based on the following:
 - vertex is classified on a model edge
   which is adjacent to 0 model faces
   and is a manifold boundary edge
   making the vertex "exposed" at the geometric boundary
we would expect the adjacent edge count to be at least 2

The key here is that the NULL model has no topology or shape (e.g., coordinates) info; it is strictly meant for debugging. As discussed in #99, the mesh needs to be classified on a valid model. In addition to the references provided in #99 and #100, there are some notes on geometric models here: https://github.com/SCOREC/core/wiki/Geometric-Models