xref: /petsc/src/dm/impls/swarm/data_bucket.h (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
177048351SPatrick Sanan #if !defined(__DMSWARM_DATA_BUCKET_H__)
277048351SPatrick Sanan #define __DMSWARM_DATA_BUCKET_H__
352849c42SDave May 
44b46c5e1SDave May #include <petsc/private/dmswarmimpl.h> /*I   "petscdmswarm.h"   I*/
552849c42SDave May 
677048351SPatrick Sanan #define DMSWARM_DATA_BUCKET_BUFFER_DEFAULT -1
777048351SPatrick Sanan #define DMSWARM_DATAFIELD_POINT_ACCESS_GUARD
852849c42SDave May 
952849c42SDave May /* Logging flag */
1077048351SPatrick Sanan #define DMSWARM_DATA_BUCKET_LOG
1152849c42SDave May 
12*9371c9d4SSatish Balay typedef enum {
13*9371c9d4SSatish Balay   DATABUCKET_VIEW_STDOUT = 0,
14*9371c9d4SSatish Balay   DATABUCKET_VIEW_ASCII,
15*9371c9d4SSatish Balay   DATABUCKET_VIEW_BINARY,
16*9371c9d4SSatish Balay   DATABUCKET_VIEW_HDF5
17*9371c9d4SSatish Balay } DMSwarmDataBucketViewType;
1852849c42SDave May 
1977048351SPatrick Sanan struct _p_DMSwarmDataField {
20ee71fbaeSPatrick Sanan   char         *registration_function;
2152c3ed93SDave May   PetscInt      L, bs;
2252849c42SDave May   PetscBool     active;
2352849c42SDave May   size_t        atomic_size;
2452849c42SDave May   char         *name; /* what are they called */
2552849c42SDave May   void         *data; /* the data - an array of structs */
264b46c5e1SDave May   PetscDataType petsc_type;
2752849c42SDave May };
2852849c42SDave May 
2977048351SPatrick Sanan struct _p_DMSwarmDataBucket {
305c18a9d6SDave May   PetscInt          L;         /* number in use */
315c18a9d6SDave May   PetscInt          buffer;    /* memory buffer used for re-allocation */
325c18a9d6SDave May   PetscInt          allocated; /* number allocated, this will equal datafield->L */
3377048351SPatrick Sanan   PetscBool         finalised; /* DEPRECATED */
345c18a9d6SDave May   PetscInt          nfields;   /* how many fields of this type */
3577048351SPatrick Sanan   DMSwarmDataField *field;     /* the data */
3652849c42SDave May };
3752849c42SDave May 
3877048351SPatrick Sanan #define DMSWARM_DATAFIELD_point_access(data, index, atomic_size)                (void *)((char *)(data) + (index) * (atomic_size))
3977048351SPatrick Sanan #define DMSWARM_DATAFIELD_point_access_offset(data, index, atomic_size, offset) (void *)((char *)(data) + (index) * (atomic_size) + (offset))
4052849c42SDave May 
415627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldStringInList(const char[], const PetscInt, const DMSwarmDataField[], PetscBool *);
425627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldStringFindInList(const char[], const PetscInt, const DMSwarmDataField[], PetscInt *);
4352849c42SDave May 
445627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldCreate(const char[], const char[], const size_t, const PetscInt, DMSwarmDataField *);
455627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldDestroy(DMSwarmDataField *);
465627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreate(DMSwarmDataBucket *);
475627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketDestroy(DMSwarmDataBucket *);
485627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketQueryForActiveFields(DMSwarmDataBucket, PetscBool *);
495627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketRegisterField(DMSwarmDataBucket, const char[], const char[], size_t, DMSwarmDataField *);
5052849c42SDave May 
515627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetNumEntries(DMSwarmDataField, PetscInt *);
525627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldSetBlockSize(DMSwarmDataField, PetscInt);
535627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldSetSize(DMSwarmDataField, const PetscInt);
545627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldZeroBlock(DMSwarmDataField, const PetscInt, const PetscInt);
555627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetAccess(const DMSwarmDataField);
565627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldAccessPoint(const DMSwarmDataField, const PetscInt, void **);
575627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldAccessPointOffset(const DMSwarmDataField, const size_t, const PetscInt, void **);
585627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldRestoreAccess(DMSwarmDataField);
595627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldVerifyAccess(const DMSwarmDataField, const size_t);
605627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetAtomicSize(const DMSwarmDataField, size_t *);
6152849c42SDave May 
625627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetEntries(const DMSwarmDataField, void **);
635627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldRestoreEntries(const DMSwarmDataField, void **);
6452849c42SDave May 
655627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldInsertPoint(const DMSwarmDataField, const PetscInt, const void *);
665627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldCopyPoint(const PetscInt, const DMSwarmDataField, const PetscInt, const DMSwarmDataField);
675627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldZeroPoint(const DMSwarmDataField, const PetscInt);
6852849c42SDave May 
695627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFieldByName(DMSwarmDataBucket, const char[], DMSwarmDataField *);
702e956fe4SStefano Zampini PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFieldIdByName(DMSwarmDataBucket, const char[], PetscInt *);
715627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketQueryDMSwarmDataFieldByName(DMSwarmDataBucket, const char[], PetscBool *);
725627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketFinalize(DMSwarmDataBucket);
735627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketSetInitialSizes(DMSwarmDataBucket, const PetscInt, const PetscInt);
745627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketSetSizes(DMSwarmDataBucket, const PetscInt, const PetscInt);
755627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetSizes(DMSwarmDataBucket, PetscInt *, PetscInt *, PetscInt *);
765627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetGlobalSizes(MPI_Comm, DMSwarmDataBucket, PetscInt *, PetscInt *, PetscInt *);
775627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFields(DMSwarmDataBucket, PetscInt *, DMSwarmDataField *[]);
7852849c42SDave May 
795627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketCopyPoint(const DMSwarmDataBucket, const PetscInt, const DMSwarmDataBucket, const PetscInt);
805627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreateFromSubset(DMSwarmDataBucket, const PetscInt, const PetscInt[], DMSwarmDataBucket *);
815627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketZeroPoint(const DMSwarmDataBucket, const PetscInt);
8252849c42SDave May 
835627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketView(MPI_Comm, DMSwarmDataBucket, const char[], DMSwarmDataBucketViewType);
8452849c42SDave May 
855627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketAddPoint(DMSwarmDataBucket);
865627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketRemovePoint(DMSwarmDataBucket);
875627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketRemovePointAtIndex(const DMSwarmDataBucket, const PetscInt);
8852849c42SDave May 
895627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketDuplicateFields(DMSwarmDataBucket, DMSwarmDataBucket *);
905627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketInsertValues(DMSwarmDataBucket, DMSwarmDataBucket);
9152849c42SDave May 
9252849c42SDave May /* helpers for parallel send/recv */
935627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreatePackedArray(DMSwarmDataBucket, size_t *, void **);
945627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketDestroyPackedArray(DMSwarmDataBucket, void **);
955627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketFillPackedArray(DMSwarmDataBucket, const PetscInt, void *);
965627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketInsertPackedArray(DMSwarmDataBucket, const PetscInt, void *);
9752849c42SDave May 
9852849c42SDave May #endif
99