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