Actual source code: viewercgnsimpl.h
1: #pragma once
3: #include <petsc/private/viewerimpl.h>
4: #include <cgnstypes.h>
5: #include <cgnslib.h>
7: PETSC_EXTERN PetscLogEvent PETSC_VIEWER_CGNS_Open, PETSC_VIEWER_CGNS_Close, PETSC_VIEWER_CGNS_ReadMeta, PETSC_VIEWER_CGNS_WriteMeta, PETSC_VIEWER_CGNS_ReadData, PETSC_VIEWER_CGNS_WriteData;
9: typedef struct {
10: char *filename_template;
11: char *filename;
12: PetscFileMode btype;
13: int file_num;
14: const PetscInt *node_l2g;
15: int base, zone;
16: CGNS_ENUMT(GridLocation_t) grid_loc;
17: PetscInt num_local_nodes, nStart, nEnd;
18: PetscInt eStart, eEnd;
19: PetscScalar *nodal_field;
20: PetscSegBuffer output_steps;
21: PetscSegBuffer output_times;
22: PetscInt previous_output_step;
23: PetscInt batch_size;
25: // Solution reading information
26: PetscInt solution_index; // User set solution index
27: int solution_file_index; // CGNS file solution index for direct access
28: int solution_file_pointer_index; // CGNS file solution index for FlowSolutionPointers (and other related arrays), index by 1
29: char *solution_name;
30: } PetscViewer_CGNS;
32: #define PetscCallCGNS(ierr) \
33: do { \
34: int _cgns_ier = (ierr); \
35: PetscCheck(!_cgns_ier, PETSC_COMM_SELF, PETSC_ERR_LIB, "CGNS error %d %s", _cgns_ier, cg_get_error()); \
36: } while (0)
38: #define PetscCallCGNSOpen(ierr, o1, o2) \
39: do { \
40: PetscCall(PetscLogEventBegin(PETSC_VIEWER_CGNS_Open, o1, o2, 0, 0)); \
41: PetscCallCGNS((ierr)); \
42: PetscCall(PetscLogEventEnd(PETSC_VIEWER_CGNS_Open, o1, o2, 0, 0)); \
43: } while (0)
45: #define PetscCallCGNSClose(ierr, o1, o2) \
46: do { \
47: PetscCall(PetscLogEventBegin(PETSC_VIEWER_CGNS_Close, o1, o2, 0, 0)); \
48: PetscCallCGNS((ierr)); \
49: PetscCall(PetscLogEventEnd(PETSC_VIEWER_CGNS_Close, o1, o2, 0, 0)); \
50: } while (0)
52: #define PetscCallCGNSRead(ierr, o1, o2) \
53: do { \
54: PetscCall(PetscLogEventBegin(PETSC_VIEWER_CGNS_ReadMeta, o1, o2, 0, 0)); \
55: PetscCallCGNS((ierr)); \
56: PetscCall(PetscLogEventEnd(PETSC_VIEWER_CGNS_ReadMeta, o1, o2, 0, 0)); \
57: } while (0)
59: #define PetscCallCGNSReadData(ierr, o1, o2) \
60: do { \
61: PetscCall(PetscLogEventBegin(PETSC_VIEWER_CGNS_ReadData, o1, o2, 0, 0)); \
62: PetscCallCGNS((ierr)); \
63: PetscCall(PetscLogEventEnd(PETSC_VIEWER_CGNS_ReadData, o1, o2, 0, 0)); \
64: } while (0)
66: #define PetscCallCGNSWrite(ierr, o1, o2) \
67: do { \
68: PetscCall(PetscLogEventBegin(PETSC_VIEWER_CGNS_WriteMeta, o1, o2, 0, 0)); \
69: PetscCallCGNS((ierr)); \
70: PetscCall(PetscLogEventEnd(PETSC_VIEWER_CGNS_WriteMeta, o1, o2, 0, 0)); \
71: } while (0)
73: #define PetscCallCGNSWriteData(ierr, o1, o2) \
74: do { \
75: PetscCall(PetscLogEventBegin(PETSC_VIEWER_CGNS_WriteData, o1, o2, 0, 0)); \
76: PetscCallCGNS((ierr)); \
77: PetscCall(PetscLogEventEnd(PETSC_VIEWER_CGNS_WriteData, o1, o2, 0, 0)); \
78: } while (0)
80: #if !defined(PRIdCGSIZE)
81: #if CG_SIZEOF_SIZE == 32
82: // cgsize_t is defined as int
83: #define MPIU_CGSIZE MPI_INT
84: #define PRIdCGSIZE "d"
85: #else
86: #if defined(_WIN32)
87: // cgsize_t is defined as __int64, which is synonymous with long long
88: #define MPIU_CGSIZE MPI_LONG_LONG
89: #define PRIdCGSIZE "lld"
90: #else
91: // cgsize_t is defined as long
92: #define MPIU_CGSIZE MPI_LONG
93: #define PRIdCGSIZE "ld"
94: #endif
95: #endif
96: #else
97: #if CG_SIZEOF_SIZE == 32
98: // cgsize_t is defined as int32_t
99: #define MPIU_CGSIZE MPI_INT32_T
100: #else
101: // cgsize_t is defined as int64_t
102: #define MPIU_CGSIZE MPI_INT64_T
103: #endif
104: #endif
106: PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode PetscViewerCGNSRegisterLogEvents_Internal();
107: PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode PetscViewerCGNSCheckBatch_Internal(PetscViewer);
108: PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode PetscViewerCGNSFileOpen_Internal(PetscViewer, PetscInt);
109: PETSC_SINGLE_LIBRARY_INTERN PetscErrorCode PetscViewerCGNSGetSolutionFileIndex_Internal(PetscViewer, int *);