Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MPI] Endless loop when using ExplicitTriangulation in 2D #932

Open
m-s-will opened this issue May 9, 2023 · 4 comments
Open

[MPI] Endless loop when using ExplicitTriangulation in 2D #932

m-s-will opened this issue May 9, 2023 · 4 comments

Comments

@m-s-will
Copy link
Contributor

m-s-will commented May 9, 2023

Describe the bug
Paraview gets stuck in an endless loop when preconditioning the ExplicitTriangulation on 2-dimensional data.

To Reproduce
Steps to reproduce the behavior:

  • Run Paraview with mpirun with more than 1 rank
  • Use the Wavelet filter to generate a 2D dataset
  • Use the Tetrahedralize to force TTK to use the ExplicitTriangulation
  • Use any filter accessing the triangulation e.g. `ScalarFieldSmoother
  • Paraview will get stuck in an endless loop with the message Re-sending global ids to neighbors... in èxchangeDistributedInternal`. The call to this function is in
    this->exchangeDistributedInternal(

This zip contains a statefile that will generate a 3D wavelet where everything works without problems. When setting the z extent to [0,0], the error appears.
wavelet_explicit.pvsm.zip

Expected behavior
It should behave as in the 3D case, by e.g. smoothing the scalar field without endlessly looping

System (please complete the following information):

  • OS: Ubuntu 22.04

  • Paraview 5.10.1, current ttk-dev

Additional information
If forcing the while(doIter)-loop in exchangeDistributedInternal to exit (e.g. by adding a step variable), the rest of the pipelien executes without problems. So it appears to correctly exchange the data, but iterCond() is still true.

@pierre-guillou
Copy link
Contributor

I've been able to reproduce this issue. The infinite loop occurs when exchanging global edge identifiers between neighbors to label edges "belonging to" ghost cells. The iterCond (here the lambda defined at ExplicitTriangulation.cpp:1254) checks that all edges are labeled (global identifiers can come from neighbors of neighbors). An infinite loop might mean that some edges cannot be labeled with a global identifier.

@eve-le-guillou
Copy link
Contributor

Hi all,

I've discussed this problem with @julien-tierny.
Currently, this algorithm isn't really useful: it is done so that if the global identifiers for vertices and cells are produced independently of the number of processes, then the global identifiers of intermediary simplices will also be produced independently.
However, at the moment, the global identifiers of vertices and cells are not created independently of the number of processes.
This begs two questions:

  • Should we keep this algorithm or create a simpler one?
  • Should we try and make the global identifier generation of vertices and cells independent of the number of processes?
    Julien was leaning more towards the second, but the decision isn't set in stone just yet.

@julien-tierny
Copy link
Collaborator

@eve-le-guillou can I close this issue? (it looks like this discussion is outdated)

@eve-le-guillou
Copy link
Contributor

The discussion is indeed outdated, however the original bug of this issue is still present (I just tested it on my machine).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants