Date: 2026-03-31T05:46:04+00:00

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 *);