Actual source code: plexvtk.c

  1: #include <petsc/private/dmpleximpl.h>
  2: #include <../src/sys/classes/viewer/impls/vtk/vtkvimpl.h>

  4: PetscErrorCode DMPlexVTKGetCellType_Internal(DM dm, PetscInt dim, PetscInt corners, PetscInt *cellType)
  5: {
  6:   PetscFunctionBegin;
  7:   *cellType = -1;
  8:   switch (dim) {
  9:   case 0:
 10:     switch (corners) {
 11:     case 1:
 12:       *cellType = 1; /* VTK_VERTEX */
 13:       break;
 14:     default:
 15:       break;
 16:     }
 17:     break;
 18:   case 1:
 19:     switch (corners) {
 20:     case 2:
 21:       *cellType = 3; /* VTK_LINE */
 22:       break;
 23:     case 3:
 24:       *cellType = 21; /* VTK_QUADRATIC_EDGE */
 25:       break;
 26:     default:
 27:       break;
 28:     }
 29:     break;
 30:   case 2:
 31:     switch (corners) {
 32:     case 3:
 33:       *cellType = 5; /* VTK_TRIANGLE */
 34:       break;
 35:     case 4:
 36:       *cellType = 9; /* VTK_QUAD */
 37:       break;
 38:     case 6:
 39:       *cellType = 22; /* VTK_QUADRATIC_TRIANGLE */
 40:       break;
 41:     case 9:
 42:       *cellType = 23; /* VTK_QUADRATIC_QUAD */
 43:       break;
 44:     default:
 45:       break;
 46:     }
 47:     break;
 48:   case 3:
 49:     switch (corners) {
 50:     case 4:
 51:       *cellType = 10; /* VTK_TETRA */
 52:       break;
 53:     case 5:
 54:       *cellType = 14; /* VTK_PYRAMID */
 55:       break;
 56:     case 6:
 57:       *cellType = 13; /* VTK_WEDGE */
 58:       break;
 59:     case 8:
 60:       *cellType = 12; /* VTK_HEXAHEDRON */
 61:       break;
 62:     case 10:
 63:       *cellType = 24; /* VTK_QUADRATIC_TETRA */
 64:       break;
 65:     case 27:
 66:       *cellType = 29; /* VTK_QUADRATIC_HEXAHEDRON */
 67:       break;
 68:     default:
 69:       break;
 70:     }
 71:   }
 72:   PetscFunctionReturn(PETSC_SUCCESS);
 73: }

 75: /*@
 76:   DMPlexVTKWriteAll - Write a file containing all the fields that have been provided to the viewer

 78:   Collective

 80:   Input Parameters:
 81: + odm    - The `DMPLEX` specifying the mesh, passed as a `PetscObject`
 82: - viewer - viewer of type `PETSCVIEWERVTK`

 84:   Level: developer

 86:   Note:
 87:   This function is a callback used by the VTK viewer to actually write the file.
 88:   The reason for this odd model is that the VTK file format does not provide any way to write one field at a time.
 89:   Instead, metadata for the entire file needs to be available up-front before you can start writing the file.

 91: .seealso: [](ch_unstructured), `DM`, `PETSCVIEWEREXODUSII`, `DMPLEX`, `PETSCVIEWERVTK`
 92: @*/
 93: PetscErrorCode DMPlexVTKWriteAll(PetscObject odm, PetscViewer viewer)
 94: {
 95:   DM dm = (DM)odm;

 97:   PetscFunctionBegin;
100:   switch (viewer->format) {
101:   case PETSC_VIEWER_DEFAULT:
102:   case PETSC_VIEWER_VTK_VTU:
103:     PetscCall(DMPlexVTKWriteAll_VTU(dm, viewer));
104:     break;
105:   default:
106:     SETERRQ(PetscObjectComm((PetscObject)dm), PETSC_ERR_SUP, "No support for format '%s'", PetscViewerFormats[viewer->format]);
107:   }
108:   PetscFunctionReturn(PETSC_SUCCESS);
109: }