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