1 #if !defined(__DMSWARM_DATA_BUCKET_H__) 2 #define __DMSWARM_DATA_BUCKET_H__ 3 4 #include <petsc/private/dmswarmimpl.h> /*I "petscdmswarm.h" I*/ 5 6 #define DMSWARM_DATA_BUCKET_BUFFER_DEFAULT -1 7 #define DMSWARM_DATAFIELD_POINT_ACCESS_GUARD 8 9 /* Logging flag */ 10 #define DMSWARM_DATA_BUCKET_LOG 11 12 typedef enum { 13 DATABUCKET_VIEW_STDOUT = 0, 14 DATABUCKET_VIEW_ASCII, 15 DATABUCKET_VIEW_BINARY, 16 DATABUCKET_VIEW_HDF5 17 } DMSwarmDataBucketViewType; 18 19 struct _p_DMSwarmDataField { 20 char *registration_function; 21 PetscInt L, bs; 22 PetscBool active; 23 size_t atomic_size; 24 char *name; /* what are they called */ 25 void *data; /* the data - an array of structs */ 26 PetscDataType petsc_type; 27 }; 28 29 struct _p_DMSwarmDataBucket { 30 PetscInt L; /* number in use */ 31 PetscInt buffer; /* memory buffer used for re-allocation */ 32 PetscInt allocated; /* number allocated, this will equal datafield->L */ 33 PetscBool finalised; /* DEPRECATED */ 34 PetscInt nfields; /* how many fields of this type */ 35 DMSwarmDataField *field; /* the data */ 36 }; 37 38 #define DMSWARM_DATAFIELD_point_access(data, index, atomic_size) (void *)((char *)(data) + (index) * (atomic_size)) 39 #define DMSWARM_DATAFIELD_point_access_offset(data, index, atomic_size, offset) (void *)((char *)(data) + (index) * (atomic_size) + (offset)) 40 41 PETSC_INTERN PetscErrorCode DMSwarmDataFieldStringInList(const char[], const PetscInt, const DMSwarmDataField[], PetscBool *); 42 PETSC_INTERN PetscErrorCode DMSwarmDataFieldStringFindInList(const char[], const PetscInt, const DMSwarmDataField[], PetscInt *); 43 44 PETSC_INTERN PetscErrorCode DMSwarmDataFieldCreate(const char[], const char[], const size_t, const PetscInt, DMSwarmDataField *); 45 PETSC_INTERN PetscErrorCode DMSwarmDataFieldDestroy(DMSwarmDataField *); 46 PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreate(DMSwarmDataBucket *); 47 PETSC_INTERN PetscErrorCode DMSwarmDataBucketDestroy(DMSwarmDataBucket *); 48 PETSC_INTERN PetscErrorCode DMSwarmDataBucketQueryForActiveFields(DMSwarmDataBucket, PetscBool *); 49 PETSC_INTERN PetscErrorCode DMSwarmDataBucketRegisterField(DMSwarmDataBucket, const char[], const char[], size_t, DMSwarmDataField *); 50 51 PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetNumEntries(DMSwarmDataField, PetscInt *); 52 PETSC_INTERN PetscErrorCode DMSwarmDataFieldSetBlockSize(DMSwarmDataField, PetscInt); 53 PETSC_INTERN PetscErrorCode DMSwarmDataFieldSetSize(DMSwarmDataField, const PetscInt); 54 PETSC_INTERN PetscErrorCode DMSwarmDataFieldZeroBlock(DMSwarmDataField, const PetscInt, const PetscInt); 55 PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetAccess(const DMSwarmDataField); 56 PETSC_INTERN PetscErrorCode DMSwarmDataFieldAccessPoint(const DMSwarmDataField, const PetscInt, void **); 57 PETSC_INTERN PetscErrorCode DMSwarmDataFieldAccessPointOffset(const DMSwarmDataField, const size_t, const PetscInt, void **); 58 PETSC_INTERN PetscErrorCode DMSwarmDataFieldRestoreAccess(DMSwarmDataField); 59 PETSC_INTERN PetscErrorCode DMSwarmDataFieldVerifyAccess(const DMSwarmDataField, const size_t); 60 PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetAtomicSize(const DMSwarmDataField, size_t *); 61 62 PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetEntries(const DMSwarmDataField, void **); 63 PETSC_INTERN PetscErrorCode DMSwarmDataFieldRestoreEntries(const DMSwarmDataField, void **); 64 65 PETSC_INTERN PetscErrorCode DMSwarmDataFieldInsertPoint(const DMSwarmDataField, const PetscInt, const void *); 66 PETSC_INTERN PetscErrorCode DMSwarmDataFieldCopyPoint(const PetscInt, const DMSwarmDataField, const PetscInt, const DMSwarmDataField); 67 PETSC_INTERN PetscErrorCode DMSwarmDataFieldZeroPoint(const DMSwarmDataField, const PetscInt); 68 69 PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFieldByName(DMSwarmDataBucket, const char[], DMSwarmDataField *); 70 PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFieldIdByName(DMSwarmDataBucket, const char[], PetscInt *); 71 PETSC_INTERN PetscErrorCode DMSwarmDataBucketQueryDMSwarmDataFieldByName(DMSwarmDataBucket, const char[], PetscBool *); 72 PETSC_INTERN PetscErrorCode DMSwarmDataBucketFinalize(DMSwarmDataBucket); 73 PETSC_INTERN PetscErrorCode DMSwarmDataBucketSetInitialSizes(DMSwarmDataBucket, const PetscInt, const PetscInt); 74 PETSC_INTERN PetscErrorCode DMSwarmDataBucketSetSizes(DMSwarmDataBucket, const PetscInt, const PetscInt); 75 PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetSizes(DMSwarmDataBucket, PetscInt *, PetscInt *, PetscInt *); 76 PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetGlobalSizes(MPI_Comm, DMSwarmDataBucket, PetscInt *, PetscInt *, PetscInt *); 77 PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFields(DMSwarmDataBucket, PetscInt *, DMSwarmDataField *[]); 78 79 PETSC_INTERN PetscErrorCode DMSwarmDataBucketCopyPoint(const DMSwarmDataBucket, const PetscInt, const DMSwarmDataBucket, const PetscInt); 80 PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreateFromSubset(DMSwarmDataBucket, const PetscInt, const PetscInt[], DMSwarmDataBucket *); 81 PETSC_INTERN PetscErrorCode DMSwarmDataBucketZeroPoint(const DMSwarmDataBucket, const PetscInt); 82 83 PETSC_INTERN PetscErrorCode DMSwarmDataBucketView(MPI_Comm, DMSwarmDataBucket, const char[], DMSwarmDataBucketViewType); 84 85 PETSC_INTERN PetscErrorCode DMSwarmDataBucketAddPoint(DMSwarmDataBucket); 86 PETSC_INTERN PetscErrorCode DMSwarmDataBucketRemovePoint(DMSwarmDataBucket); 87 PETSC_INTERN PetscErrorCode DMSwarmDataBucketRemovePointAtIndex(const DMSwarmDataBucket, const PetscInt); 88 89 PETSC_INTERN PetscErrorCode DMSwarmDataBucketDuplicateFields(DMSwarmDataBucket, DMSwarmDataBucket *); 90 PETSC_INTERN PetscErrorCode DMSwarmDataBucketInsertValues(DMSwarmDataBucket, DMSwarmDataBucket); 91 92 /* helpers for parallel send/recv */ 93 PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreatePackedArray(DMSwarmDataBucket, size_t *, void **); 94 PETSC_INTERN PetscErrorCode DMSwarmDataBucketDestroyPackedArray(DMSwarmDataBucket, void **); 95 PETSC_INTERN PetscErrorCode DMSwarmDataBucketFillPackedArray(DMSwarmDataBucket, const PetscInt, void *); 96 PETSC_INTERN PetscErrorCode DMSwarmDataBucketInsertPackedArray(DMSwarmDataBucket, const PetscInt, void *); 97 98 #endif 99