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