xref: /petsc/src/dm/impls/swarm/data_bucket.h (revision 5627991adfa0dae03dda7a34b1ec5f8d16d5e5f7)
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 
1277048351SPatrick Sanan typedef enum { DATABUCKET_VIEW_STDOUT=0, DATABUCKET_VIEW_ASCII, DATABUCKET_VIEW_BINARY, DATABUCKET_VIEW_HDF5 } DMSwarmDataBucketViewType;
1352849c42SDave May 
1477048351SPatrick Sanan struct _p_DMSwarmDataField {
15ee71fbaeSPatrick Sanan         char          *registration_function;
1652c3ed93SDave May         PetscInt      L,bs;
1752849c42SDave May         PetscBool     active;
1852849c42SDave May         size_t        atomic_size;
1952849c42SDave May         char          *name; /* what are they called */
2052849c42SDave May         void          *data; /* the data - an array of structs */
214b46c5e1SDave May   PetscDataType petsc_type;
2252849c42SDave May };
2352849c42SDave May 
2477048351SPatrick Sanan struct _p_DMSwarmDataBucket {
255c18a9d6SDave May         PetscInt  L;             /* number in use */
265c18a9d6SDave May         PetscInt  buffer;        /* memory buffer used for re-allocation */
275c18a9d6SDave May         PetscInt  allocated;     /* number allocated, this will equal datafield->L */
2877048351SPatrick Sanan         PetscBool finalised;     /* DEPRECATED */
295c18a9d6SDave May         PetscInt  nfields;       /* how many fields of this type */
3077048351SPatrick Sanan         DMSwarmDataField *field; /* the data */
3152849c42SDave May };
3252849c42SDave May 
3377048351SPatrick Sanan #define DMSWARM_DATAFIELD_point_access(data,index,atomic_size) (void*)((char*)(data) + (index)*(atomic_size))
3477048351SPatrick Sanan #define DMSWARM_DATAFIELD_point_access_offset(data,index,atomic_size,offset) (void*)((char*)(data) + (index)*(atomic_size) + (offset))
3552849c42SDave May 
36*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldStringInList(const char [],const PetscInt ,const DMSwarmDataField [],PetscBool *);
37*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldStringFindInList(const char [],const PetscInt,const DMSwarmDataField [],PetscInt *);
3852849c42SDave May 
39*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldCreate(const char [],const char [],const size_t,const PetscInt,DMSwarmDataField *);
40*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldDestroy(DMSwarmDataField *);
41*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreate(DMSwarmDataBucket *);
42*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketDestroy(DMSwarmDataBucket *);
43*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketQueryForActiveFields(DMSwarmDataBucket,PetscBool *);
44*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketRegisterField(DMSwarmDataBucket,const char [],const char [],size_t,DMSwarmDataField *);
4552849c42SDave May 
46*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetNumEntries(DMSwarmDataField,PetscInt *);
47*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldSetBlockSize(DMSwarmDataField,PetscInt);
48*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldSetSize(DMSwarmDataField,const PetscInt);
49*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldZeroBlock(DMSwarmDataField,const PetscInt,const PetscInt);
50*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetAccess(const DMSwarmDataField);
51*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldAccessPoint(const DMSwarmDataField,const PetscInt,void **);
52*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldAccessPointOffset(const DMSwarmDataField,const size_t,const PetscInt,void **);
53*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldRestoreAccess(DMSwarmDataField);
54*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldVerifyAccess(const DMSwarmDataField,const size_t);
55*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetAtomicSize(const DMSwarmDataField,size_t *);
5652849c42SDave May 
57*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetEntries(const DMSwarmDataField,void **);
58*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldRestoreEntries(const DMSwarmDataField,void **);
5952849c42SDave May 
60*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldInsertPoint(const DMSwarmDataField,const PetscInt,const void *);
61*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldCopyPoint(const PetscInt,const DMSwarmDataField,const PetscInt,const DMSwarmDataField);
62*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataFieldZeroPoint(const DMSwarmDataField,const PetscInt);
6352849c42SDave May 
64*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFieldByName(DMSwarmDataBucket,const char [],DMSwarmDataField *);
65*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketQueryDMSwarmDataFieldByName(DMSwarmDataBucket,const char [],PetscBool *);
66*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketFinalize(DMSwarmDataBucket);
67*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketSetInitialSizes(DMSwarmDataBucket,const PetscInt,const PetscInt);
68*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketSetSizes(DMSwarmDataBucket,const PetscInt,const PetscInt);
69*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetSizes(DMSwarmDataBucket,PetscInt *,PetscInt *,PetscInt *);
70*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetGlobalSizes(MPI_Comm,DMSwarmDataBucket,PetscInt *,PetscInt *,PetscInt *);
71*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFields(DMSwarmDataBucket,PetscInt *,DMSwarmDataField *[]);
7252849c42SDave May 
73*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketCopyPoint(const DMSwarmDataBucket,const PetscInt,const DMSwarmDataBucket,const PetscInt);
74*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreateFromSubset(DMSwarmDataBucket,const PetscInt,const PetscInt [],DMSwarmDataBucket *);
75*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketZeroPoint(const DMSwarmDataBucket,const PetscInt);
7652849c42SDave May 
77*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketView(MPI_Comm,DMSwarmDataBucket,const char [],DMSwarmDataBucketViewType);
7852849c42SDave May 
79*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketAddPoint(DMSwarmDataBucket);
80*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketRemovePoint(DMSwarmDataBucket);
81*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketRemovePointAtIndex(const DMSwarmDataBucket,const PetscInt);
8252849c42SDave May 
83*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketDuplicateFields(DMSwarmDataBucket,DMSwarmDataBucket *);
84*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketInsertValues(DMSwarmDataBucket,DMSwarmDataBucket);
8552849c42SDave May 
8652849c42SDave May /* helpers for parallel send/recv */
87*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreatePackedArray(DMSwarmDataBucket,size_t *,void **);
88*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketDestroyPackedArray(DMSwarmDataBucket,void **);
89*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketFillPackedArray(DMSwarmDataBucket,const PetscInt,void *);
90*5627991aSBarry Smith PETSC_INTERN PetscErrorCode DMSwarmDataBucketInsertPackedArray(DMSwarmDataBucket,const PetscInt,void *);
9152849c42SDave May 
9252849c42SDave May #endif
93