xref: /petsc/src/sys/classes/viewer/impls/vtk/vtkvimpl.h (revision a69119a591a03a9d906b29c0a4e9802e4d7c9795)
1 #if !defined(_VTKVIMPL_H)
2 #define _VTKVIMPL_H
3 
4 #include <petsc/private/viewerimpl.h> /*I   "petscsys.h"   I*/
5 
6 typedef struct _n_PetscViewerVTKObjectLink *PetscViewerVTKObjectLink;
7 struct _n_PetscViewerVTKObjectLink {
8   PetscViewerVTKFieldType  ft;
9   PetscObject              vec;
10   PetscViewerVTKObjectLink next;
11   PetscInt                 field;
12 };
13 
14 typedef struct {
15   char                    *filename;
16   PetscFileMode            btype;
17   PetscObject              dm;
18   PetscViewerVTKObjectLink link;
19   PetscErrorCode (*write)(PetscObject, PetscViewer);
20 } PetscViewer_VTK;
21 
22 PETSC_EXTERN PetscErrorCode PetscViewerVTKFWrite(PetscViewer, FILE *, const void *, PetscInt, MPI_Datatype);
23 
24 #if defined(PETSC_HAVE_STDINT_H) /* The VTK format requires a 32-bit integer */
25 typedef int32_t PetscVTKInt;
26 #else /* Hope int is 32 bits */
27 typedef int PetscVTKInt;
28 #endif
29 typedef unsigned char PetscVTKType;
30 
31 #define PETSC_VTK_INT_MAX 2147483647
32 #define PETSC_VTK_INT_MIN -2147483647
33 #if defined(PETSC_USE_64BIT_INDICES)
34 #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")
35 #define PetscVTKIntCast(a) \
36   (PetscVTKInt)(a); \
37   PetscVTKIntCheck(a)
38 #else
39 #define PetscVTKIntCheck(a)
40 #define PetscVTKIntCast(a) a
41 #endif
42 
43 /* the only problem we've encountered so far is spaces not being acceptable for paraview field names */
44 static inline PetscErrorCode PetscViewerVTKSanitizeName_Internal(char name[], size_t maxlen) {
45   size_t c;
46 
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(0);
54 }
55 #endif
56