Actual source code: vtkvimpl.h

  1: #pragma once

  3: #include <petsc/private/viewerimpl.h>

  5: typedef struct _n_PetscViewerVTKObjectLink *PetscViewerVTKObjectLink;
  6: struct _n_PetscViewerVTKObjectLink {
  7:   PetscViewerVTKFieldType  ft;
  8:   PetscObject              vec;
  9:   PetscViewerVTKObjectLink next;
 10:   PetscInt                 field;
 11: };

 13: typedef struct {
 14:   char                    *filename;
 15:   PetscFileMode            btype;
 16:   PetscObject              dm;
 17:   PetscViewerVTKObjectLink link;
 18:   PetscErrorCode (*write)(PetscObject, PetscViewer);
 19: } PetscViewer_VTK;

 21: PETSC_EXTERN PetscErrorCode PetscViewerVTKFWrite(PetscViewer, FILE *, const void *, PetscInt, MPI_Datatype);

 23: #if defined(PETSC_HAVE_STDINT_H) /* The VTK format requires a 32-bit integer */
 24: typedef int32_t PetscVTKInt;
 25: #else /* Hope int is 32-bits */
 26: typedef int PetscVTKInt;
 27: #endif
 28: typedef unsigned char PetscVTKType;

 30: #define PETSC_VTK_INT_MAX 2147483647
 31: #define PETSC_VTK_INT_MIN -2147483647
 32: #if defined(PETSC_USE_64BIT_INDICES)
 33:   #define PetscVTKIntCheck(a) PetscCheck((a) <= PETSC_VTK_INT_MAX, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Array too long for 32-bit VTK binary format")
 34:   #define PetscVTKIntCast(a) \
 35:     (PetscVTKInt)(a); \
 36:     PetscVTKIntCheck(a)
 37: #else
 38:   #define PetscVTKIntCheck(a)
 39:   #define PetscVTKIntCast(a) a
 40: #endif

 42: /* the only problem we've encountered so far is spaces not being acceptable for paraview field names */
 43: static inline PetscErrorCode PetscViewerVTKSanitizeName_Internal(char name[], size_t maxlen)
 44: {
 45:   size_t c;

 47:   PetscFunctionBegin;
 48:   for (c = 0; c < maxlen; c++) {
 49:     char a = name[c];
 50:     if (a == '\0') break;
 51:     if (a == ' ') name[c] = '_';
 52:   }
 53:   PetscFunctionReturn(PETSC_SUCCESS);
 54: }