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