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