Skip to content

Conversation

@bd713
Copy link
Contributor

@bd713 bd713 commented Feb 9, 2026

Problem

The current redistributeMeshes() partitions the entire mesh (both 2D and 3D cells) all at once using graph partitioning.
However, there is no guarantee that a 2D surface element will be assigned to a rank containing its adjacent 3D face.
This can lead to configurations where 2D cells are orphaned on ranks with no access to their 3D neighbor faces.
See screenshot below for a real life illustration.
A side effect is that the nodes of these orphaned 2D surfaces are seen as owned by that rank and will prevent them from being properly ghosted in the 3D mesh.

Solution

In this PR, the redistribution workflow is refactored in 3 steps to ensure co-location of 2D and 3D cells:

  1. Separate 2D and 3D cells
  2. Redistribute 3D cells independently using existing graph partitioning routines
  3. Assign each 2D cell to the rank owning one of its 3D neighbors (deterministic tie-breaking uses minimum global ID)

NB: When using MeshDoctor splitting, the fracture elements suffer the exact same problem. These will be addressed in a separate PR.

image

DENEL Bertrand added 3 commits February 8, 2026 20:12
@bd713 bd713 self-assigned this Feb 9, 2026
@bd713 bd713 added type: bug Something isn't working ci: run integrated tests Allows to run the integrated tests in GEOS CI labels Feb 9, 2026
@bd713 bd713 changed the title Fix: 2D/3D cell co-location in parallel mesh redistribution fix: 2D/3D cell co-location in parallel mesh redistribution Feb 9, 2026
@rrsettgast
Copy link
Member

@bd713 why not just merge the 2d and 3d meshes into a single mesh object?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci: run integrated tests Allows to run the integrated tests in GEOS CI type: bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants