Actual source code: dmglvis.c

  1: /* Routines to visualize DMs through GLVis */

  3: #include <petsc/private/dmimpl.h>
  4: #include <petsc/private/glvisviewerimpl.h>

  6: PetscErrorCode DMView_GLVis(DM dm, PetscViewer viewer, PetscErrorCode (*DMView_GLVis_ASCII)(DM, PetscViewer))
  7: {
  8:   PetscBool isglvis, isascii;

 12:   PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERGLVIS, &isglvis);
 13:   PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &isascii);
 15:   if (isglvis) {
 16:     PetscViewerGLVisType type;
 17:     PetscViewer          view;

 19:     PetscViewerGLVisGetType_Private(viewer, &type);
 20:     PetscViewerGLVisGetDMWindow_Private(viewer, &view);
 21:     if (!view) return 0; /* socket window has been closed */
 22:     if (type == PETSC_VIEWER_GLVIS_SOCKET) {
 23:       PetscMPIInt size, rank;
 24:       PetscInt    sdim;
 25:       const char *name;

 27:       MPI_Comm_size(PetscObjectComm((PetscObject)dm), &size);
 28:       MPI_Comm_rank(PetscObjectComm((PetscObject)dm), &rank);
 29:       DMGetCoordinateDim(dm, &sdim);
 30:       PetscObjectGetName((PetscObject)dm, &name);

 32:       PetscGLVisCollectiveBegin(PetscObjectComm((PetscObject)dm), &view);
 33:       PetscViewerASCIIPrintf(view, "parallel %d %d\nmesh\n", size, rank);
 34:       DMView_GLVis_ASCII(dm, view);
 35:       PetscViewerGLVisInitWindow_Private(view, PETSC_TRUE, sdim, name);
 36:       PetscGLVisCollectiveEnd(PetscObjectComm((PetscObject)dm), &view);
 37:     } else {
 38:       DMView_GLVis_ASCII(dm, view);
 39:     }
 40:     PetscViewerGLVisRestoreDMWindow_Private(viewer, &view);
 41:   } else {
 42:     DMView_GLVis_ASCII(dm, viewer);
 43:   }
 44:   return 0;
 45: }