Skip to content

Conversation

@bd713
Copy link
Contributor

@bd713 bd713 commented Oct 5, 2025

Description

This PR introduces a complete refactoring of GEOS's mesh partitioning system with a new architecture that separates partitioning algorithms (engines) from domain decomposition strategies (partitioners).

In practice, a new DomainPartitioner abstract base class is introduced with two main specialized branches:

DomainPartitioner (Abstract Base)
├── GeometricPartitioner (Abstract)
│   ├── CartesianPartitioner (Concrete)
│   └── ParticleCartesianPartitioner (Concrete)
└── MeshPartitioner (Abstract)
    ├── CellGraphPartitioner (Concrete)
    └── LayeredMeshPartitioner (Concrete)

The mesh partitioners leverage low-level graph partitioner engines that are independent from MPI communication:

GraphPartitionEngine (Abstract Engine Interface)
├── ParMetisEngine (Concrete)
├── PTScotchEngine (Concrete)
└── NoOpEngine (Concrete)

A PartitionerManager is introduced for creating and managing partitioner instances.

XML Changes

Partitioning configuration moved from mesh-embedded to dedicated <Partitioner> section.

Before:

<Mesh>
   <VTKMesh
       file="mesh.vtu"
       partitionMethod="parmetis"
       partitionRefinement="2"  />
</Mesh>       

After:

<Partitioner>
  <CellGraphPartitioner engine="parmetis" numRefinements="1"/>
</Partitioner>
<Mesh>
  <VTKMesh file="mesh.vtu"/>
</Mesh>

Default behavior
If no partitioner is prescribed, an appropriate default is selected based on mesh type:

  • Internal meshes: CartesianPartitioner
  • External meshes: CellGraphPartitioner with ParMetis

To skip graph partition optimization, explicitly use engine="noop".

Testing & Rebaseline

Due to XML schema changes a rebaseline is required.
However no numerical impact is expected.

INFO: Total number of log files processed: 1047

INFO: No unfiltered differences were found.

All currently failing integrated tests are due to structural changes such as:

********************************************************************************
Error: /Problem
	Group has a child 'Partitioner' in the file to compare but not the baseline file.
********************************************************************************
********************************************************************************
Error: /Problem/domain
	Group has a child 'partitionManager' in the baseline file but not the file to compare.
********************************************************************************

@bd713 bd713 added the flag: requires rebaseline Requires rebaseline branch in integratedTests label Oct 7, 2025
@bd713 bd713 removed the flag: requires rebaseline Requires rebaseline branch in integratedTests label Oct 12, 2025
@bd713 bd713 added the ci: run CUDA builds Allows to triggers (costly) CUDA jobs label Oct 13, 2025
DENEL Bertrand added 2 commits October 13, 2025 23:45
@bd713 bd713 removed the ci: run CUDA builds Allows to triggers (costly) CUDA jobs label Oct 15, 2025
@bd713 bd713 force-pushed the feature/bd713/enhancePartitioner branch from 45ad26f to 5ce56de Compare October 22, 2025 17:54
@bd713 bd713 added flag: ready for review flag: requires rebaseline Requires rebaseline branch in integratedTests and removed DO NOT MERGE ! labels Oct 25, 2025
@paveltomin
Copy link
Collaborator

@bd713 why did you change some tests inputs? defaults should be fine, no?

@bd713
Copy link
Contributor Author

bd713 commented Nov 4, 2025

@bd713 why did you change some tests inputs? defaults should be fine, no?

For external meshes, the default remains unchanged: ParMetis is run once with no additional refinement iteration.
Hence, only tests that relied on a non-default partitionRefinement must be updated.

Matrix conversion:
partitionRefinement=0 => Explicitly use NoOp engine
partitionRefinement=1 (default) => No changes needed, the new default numRefinements=0 will be used, following Metis convention
partitionRefinement=3 (i.e. run ParMetis + 2 extra refinements) => Explicitly set numRefinements=2

We also have 1 test using ptscotch that needs to be edited as well.

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

Labels

changes XML input ci: run integrated tests Allows to run the integrated tests in GEOS CI flag: ready for review flag: requires rebaseline Requires rebaseline branch in integratedTests type: cleanup / refactor Non-functional change (NFC)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants