Actual source code: viewerhdf5impl.h

  1: #ifndef __VIEWERHDF5IMPL_H

  4: #if defined(H5_VERSION)
  5: #  error "viewerhdf5impl.h must be included *before* any other HDF5 headers"
  6: #else
  7: #  define H5_USE_18_API
  8: #endif
  9: #include <petscviewerhdf5.h>
 10: #include <petsc/private/viewerimpl.h>

 12: #if defined(PETSC_HAVE_HDF5)

 14: /*
 15:   HDF5 function specifications usually read:
 16:   Returns a non-negative value if successful; otherwise returns a negative value.
 17:   (see e.g. https://support.hdfgroup.org/HDF5/doc/RM/RM_H5O.html#Object-Close)
 18: */
 19: #define PetscStackCallHDF5(func,args) do {                        \
 20:     herr_t _status;                                               \
 22:   } while (0)

 24: #define PetscStackCallHDF5ReturnNoCheck(ret,func,args) do {       \
 25:     PetscStackPush(#func);ret = func args;PetscStackPop;          \
 26:   } while (0)

 28: #define PetscStackCallHDF5Return(ret,func,args) do {              \
 30:   } while (0)

 32: typedef struct PetscViewerHDF5GroupList {
 33:   const char       *name;
 34:   struct PetscViewerHDF5GroupList *next;
 35: } PetscViewerHDF5GroupList;

 37: typedef struct {
 38:   char          *filename;
 39:   PetscFileMode btype;
 40:   hid_t         file_id;
 41:   hid_t         dxpl_id;   /* H5P_DATASET_XFER property list controlling raw data transfer (read/write). Properties are modified using H5Pset_dxpl_* functions. */
 42:   PetscBool     timestepping;    /* Flag to indicate whether objects are stored by tiem index */
 43:   PetscInt      timestep;        /* The time index to look for an object at */
 44:   PetscBool     defTimestepping; /* Default if timestepping attribute is not found. Support for legacy files with no timestepping attribute */
 45:   PetscViewerHDF5GroupList *groups;
 46:   PetscBool     basedimension2;  /* save vectors and DMDA vectors with a dimension of at least 2 even if the bs/dof is 1 */
 47:   PetscBool     spoutput;        /* write data in single precision even if PETSc is compiled with double precision PetscReal */
 48:   PetscBool     horizontal;      /* store column vectors as blocks (needed for MATDENSE I/O) */
 49: } PetscViewer_HDF5;

 51: PETSC_EXTERN PetscErrorCode PetscViewerHDF5CheckTimestepping_Internal(PetscViewer, const char[]); /* currently used in src/dm/impls/da/gr2.c so needs to be extern */
 52: #endif
 53: #endif