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: }