xref: /petsc/src/dm/impls/swarm/data_bucket.h (revision 7704835140d42142b99256ee2b931579d17cc6bb)
1*77048351SPatrick Sanan #if !defined(__DMSWARM_DATA_BUCKET_H__)
2*77048351SPatrick Sanan #define __DMSWARM_DATA_BUCKET_H__
352849c42SDave May 
44b46c5e1SDave May #include <petsc/private/dmswarmimpl.h>    /*I   "petscdmswarm.h"   I*/
552849c42SDave May 
6*77048351SPatrick Sanan #define DMSWARM_DATA_BUCKET_BUFFER_DEFAULT -1
7*77048351SPatrick Sanan #define DMSWARM_DATAFIELD_POINT_ACCESS_GUARD
852849c42SDave May 
952849c42SDave May /* Logging flag */
10*77048351SPatrick Sanan #define DMSWARM_DATA_BUCKET_LOG
1152849c42SDave May 
12*77048351SPatrick Sanan typedef enum { DATABUCKET_VIEW_STDOUT=0, DATABUCKET_VIEW_ASCII, DATABUCKET_VIEW_BINARY, DATABUCKET_VIEW_HDF5 } DMSwarmDataBucketViewType;
1352849c42SDave May 
14*77048351SPatrick Sanan struct _p_DMSwarmDataField {
1552849c42SDave May 	char          *registeration_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 
24*77048351SPatrick 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 */
28*77048351SPatrick Sanan 	PetscBool finalised;     /* DEPRECATED */
295c18a9d6SDave May 	PetscInt  nfields;       /* how many fields of this type */
30*77048351SPatrick Sanan 	DMSwarmDataField *field; /* the data */
3152849c42SDave May };
3252849c42SDave May 
33*77048351SPatrick Sanan #define DMSWARM_DATAFIELD_point_access(data,index,atomic_size) (void*)((char*)(data) + (index)*(atomic_size))
34*77048351SPatrick Sanan #define DMSWARM_DATAFIELD_point_access_offset(data,index,atomic_size,offset) (void*)((char*)(data) + (index)*(atomic_size) + (offset))
3552849c42SDave May 
36*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldStringInList(const char name[],const PetscInt N,const DMSwarmDataField gfield[],PetscBool *val);
37*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldStringFindInList(const char name[],const PetscInt N,const DMSwarmDataField gfield[],PetscInt *index);
3852849c42SDave May 
39*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldCreate(const char registeration_function[],const char name[],const size_t size,const PetscInt L,DMSwarmDataField *DF);
40*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldDestroy(DMSwarmDataField *DF);
41*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreate(DMSwarmDataBucket *DB);
42*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketDestroy(DMSwarmDataBucket *DB);
43*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketQueryForActiveFields(DMSwarmDataBucket db,PetscBool *any_active_fields);
44*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketRegisterField(DMSwarmDataBucket db,const char registeration_function[],const char field_name[],size_t atomic_size,DMSwarmDataField *_gfield);
4552849c42SDave May 
46*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetNumEntries(DMSwarmDataField df,PetscInt *sum);
47*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldSetBlockSize(DMSwarmDataField df,PetscInt blocksize);
48*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldSetSize(DMSwarmDataField df,const PetscInt new_L);
49*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldZeroBlock(DMSwarmDataField df,const PetscInt start,const PetscInt end);
50*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetAccess(const DMSwarmDataField gfield);
51*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldAccessPoint(const DMSwarmDataField gfield,const PetscInt pid,void **ctx_p);
52*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldAccessPointOffset(const DMSwarmDataField gfield,const size_t offset,const PetscInt pid,void **ctx_p);
53*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldRestoreAccess(DMSwarmDataField gfield);
54*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldVerifyAccess(const DMSwarmDataField gfield,const size_t size);
55*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetAtomicSize(const DMSwarmDataField gfield,size_t *size);
5652849c42SDave May 
57*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldGetEntries(const DMSwarmDataField gfield,void **data);
58*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldRestoreEntries(const DMSwarmDataField gfield,void **data);
5952849c42SDave May 
60*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldInsertPoint(const DMSwarmDataField field,const PetscInt index,const void *ctx);
61*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldCopyPoint(const PetscInt pid_x,const DMSwarmDataField field_x,const PetscInt pid_y,const DMSwarmDataField field_y);
62*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataFieldZeroPoint(const DMSwarmDataField field,const PetscInt index);
6352849c42SDave May 
64*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFieldByName(DMSwarmDataBucket db,const char name[],DMSwarmDataField *gfield);
65*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketQueryDMSwarmDataFieldByName(DMSwarmDataBucket db,const char name[],PetscBool *found);
66*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketFinalize(DMSwarmDataBucket db);
67*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketSetInitialSizes(DMSwarmDataBucket db,const PetscInt L,const PetscInt buffer);
68*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketSetSizes(DMSwarmDataBucket db,const PetscInt L,const PetscInt buffer);
69*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetSizes(DMSwarmDataBucket db,PetscInt *L,PetscInt *buffer,PetscInt *allocated);
70*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetGlobalSizes(MPI_Comm comm,DMSwarmDataBucket db,PetscInt *L,PetscInt *buffer,PetscInt *allocated);
71*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketGetDMSwarmDataFields(DMSwarmDataBucket db,PetscInt *L,DMSwarmDataField *fields[]);
7252849c42SDave May 
73*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketCopyPoint(const DMSwarmDataBucket xb,const PetscInt pid_x,const DMSwarmDataBucket yb,const PetscInt pid_y);
74*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreateFromSubset(DMSwarmDataBucket DBIn,const PetscInt N,const PetscInt list[],DMSwarmDataBucket *DB);
75*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketZeroPoint(const DMSwarmDataBucket db,const PetscInt index);
7652849c42SDave May 
77*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketView(MPI_Comm comm,DMSwarmDataBucket db,const char filename[],DMSwarmDataBucketViewType type);
7852849c42SDave May 
79*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketAddPoint(DMSwarmDataBucket db);
80*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketRemovePoint(DMSwarmDataBucket db);
81*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketRemovePointAtIndex(const DMSwarmDataBucket db,const PetscInt index);
8252849c42SDave May 
83*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketDuplicateFields(DMSwarmDataBucket dbA,DMSwarmDataBucket *dbB);
84*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketInsertValues(DMSwarmDataBucket db1,DMSwarmDataBucket db2);
8552849c42SDave May 
8652849c42SDave May /* helpers for parallel send/recv */
87*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketCreatePackedArray(DMSwarmDataBucket db,size_t *bytes,void **buf);
88*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketDestroyPackedArray(DMSwarmDataBucket db,void **buf);
89*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketFillPackedArray(DMSwarmDataBucket db,const PetscInt index,void *buf);
90*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataBucketInsertPackedArray(DMSwarmDataBucket db,const PetscInt idx,void *data);
9152849c42SDave May 
9252849c42SDave May #endif
93