Find out to what extent the DMPlex is topologically interpolated.


#include "petscdmplex.h"   
PetscErrorCode DMPlexIsInterpolated(DM dm, DMPlexInterpolatedFlag *interpolated)
Not Collective

Input Parameter

dm - The DM object

Output Parameter

interpolated - Flag whether the DM is interpolated

Level: intermediate


Unlike DMPlexIsInterpolatedCollective(), this is NOT collective so the results can be different on different ranks in special cases. However, DMPlexInterpolate() guarantees the result is the same on all.

Unlike DMPlexIsInterpolatedCollective(), this cannot return DMPLEX_INTERPOLATED_MIXED.

Developer Notes

Initially, plex->interpolated = DMPLEX_INTERPOLATED_INVALID.

If plex->interpolated == DMPLEX_INTERPOLATED_INVALID, DMPlexIsInterpolated_Internal() is called. It checks the actual topology and sets plex->interpolated on each rank separately to one of DMPLEX_INTERPOLATED_NONE, DMPLEX_INTERPOLATED_PARTIAL or DMPLEX_INTERPOLATED_FULL.

If plex->interpolated != DMPLEX_INTERPOLATED_INVALID, this function just returns plex->interpolated.

DMPlexInterpolate() sets plex->interpolated = DMPLEX_INTERPOLATED_FULL, and DMPlexUninterpolate() sets plex->interpolated = DMPLEX_INTERPOLATED_NONE.

See Also

DMPlexInterpolate(), DMPlexIsInterpolatedCollective()