xref: /petsc/src/dm/impls/swarm/data_bucket.h (revision a2d1c72953c0f87e91907216c13a68a977389232)
152849c42SDave May 
252849c42SDave May #ifndef __DATA_BUCKET_H__
352849c42SDave May #define __DATA_BUCKET_H__
452849c42SDave May 
552849c42SDave May 
652849c42SDave May #include <petsc.h>
74b46c5e1SDave May #include <petsc/private/dmswarmimpl.h>    /*I   "petscdmswarm.h"   I*/
852849c42SDave May 
952849c42SDave May 
1052849c42SDave May #define DATAFIELD_POINT_ACCESS_GUARD
1152849c42SDave May 
1252849c42SDave May /* Logging flag */
134b46c5e1SDave May #define DATA_BUCKET_LOG
1452849c42SDave May 
1552849c42SDave May 
1652849c42SDave May typedef enum { DATABUCKET_VIEW_STDOUT=0, DATABUCKET_VIEW_ASCII, DATABUCKET_VIEW_BINARY, DATABUCKET_VIEW_HDF5 } DataBucketViewType;
1752849c42SDave May 
1852849c42SDave May 
1952849c42SDave May 
2052849c42SDave May struct _p_DataField {
2152849c42SDave May 	char          *registeration_function;
225c18a9d6SDave May 	PetscInt      L;
2352849c42SDave May 	PetscBool     active;
2452849c42SDave May 	size_t        atomic_size;
2552849c42SDave May 	char          *name; /* what are they called */
2652849c42SDave May 	void          *data; /* the data - an array of structs */
274b46c5e1SDave May   PetscDataType petsc_type;
2852849c42SDave May };
2952849c42SDave May 
3052849c42SDave May struct _p_DataBucket {
315c18a9d6SDave May 	PetscInt  L; /* number in use */
325c18a9d6SDave May 	PetscInt  buffer; /* memory buffer used for re-allocation */
335c18a9d6SDave May 	PetscInt  allocated;  /* number allocated, this will equal datafield->L */
3452849c42SDave May 	PetscBool finalised; /* DEPRECIATED */
355c18a9d6SDave May 	PetscInt  nfields; /* how many fields of this type */
3652849c42SDave May 	DataField *field; /* the data */
3752849c42SDave May };
3852849c42SDave May 
3952849c42SDave May #define __DATATFIELD_point_access(data,index,atomic_size) (void*)((char*)(data) + (index)*(atomic_size))
4052849c42SDave May #define __DATATFIELD_point_access_offset(data,index,atomic_size,offset) (void*)((char*)(data) + (index)*(atomic_size) + (offset))
4152849c42SDave May 
4252849c42SDave May 
4352849c42SDave May 
442eac95f8SDave May PetscErrorCode StringInList(const char name[],const PetscInt N,const DataField gfield[],PetscBool *val);
452eac95f8SDave May PetscErrorCode StringFindInList(const char name[],const PetscInt N,const DataField gfield[],PetscInt *index);
4652849c42SDave May 
472eac95f8SDave May PetscErrorCode DataFieldCreate(const char registeration_function[],const char name[],const size_t size,const PetscInt L,DataField *DF);
482eac95f8SDave May PetscErrorCode DataFieldDestroy(DataField *DF);
492eac95f8SDave May PetscErrorCode DataBucketCreate(DataBucket *DB);
502eac95f8SDave May PetscErrorCode DataBucketDestroy(DataBucket *DB);
512eac95f8SDave May PetscErrorCode DataBucketRegisterField(
5252849c42SDave May 															DataBucket db,
5352849c42SDave May 															const char registeration_function[],
5452849c42SDave May 															const char field_name[],
5552849c42SDave May 															size_t atomic_size,DataField *_gfield );
5652849c42SDave May 
5752849c42SDave May 
587fbf63aeSDave May PetscErrorCode DataFieldGetNumEntries(DataField df,PetscInt *sum);
597fbf63aeSDave May PetscErrorCode DataFieldSetSize(DataField df,const PetscInt new_L);
607fbf63aeSDave May PetscErrorCode DataFieldZeroBlock(DataField df,const PetscInt start,const PetscInt end);
617fbf63aeSDave May PetscErrorCode DataFieldGetAccess(const DataField gfield);
627fbf63aeSDave May PetscErrorCode DataFieldAccessPoint(const DataField gfield,const PetscInt pid,void **ctx_p);
637fbf63aeSDave May PetscErrorCode DataFieldAccessPointOffset(const DataField gfield,const size_t offset,const PetscInt pid,void **ctx_p);
647fbf63aeSDave May PetscErrorCode DataFieldRestoreAccess(DataField gfield);
657fbf63aeSDave May PetscErrorCode DataFieldVerifyAccess(const DataField gfield,const size_t size);
667fbf63aeSDave May PetscErrorCode DataFieldGetAtomicSize(const DataField gfield,size_t *size);
6752849c42SDave May 
687fbf63aeSDave May PetscErrorCode DataFieldGetEntries(const DataField gfield,void **data);
697fbf63aeSDave May PetscErrorCode DataFieldRestoreEntries(const DataField gfield,void **data);
7052849c42SDave May 
717fbf63aeSDave May PetscErrorCode DataFieldInsertPoint(const DataField field,const PetscInt index,const void *ctx);
72*a2d1c729SDave May PetscErrorCode DataFieldCopyPoint(const PetscInt pid_x,const DataField field_x,const PetscInt pid_y,const DataField field_y);
737fbf63aeSDave May PetscErrorCode DataFieldZeroPoint(const DataField field,const PetscInt index);
7452849c42SDave May 
752eac95f8SDave May PetscErrorCode DataBucketGetDataFieldByName(DataBucket db,const char name[],DataField *gfield);
767fbf63aeSDave May PetscErrorCode DataBucketQueryDataFieldByName(DataBucket db,const char name[],PetscBool *found);
777fbf63aeSDave May PetscErrorCode DataBucketFinalize(DataBucket db);
787fbf63aeSDave May PetscErrorCode DataBucketSetInitialSizes(DataBucket db,const PetscInt L,const PetscInt buffer);
797fbf63aeSDave May PetscErrorCode DataBucketSetSizes(DataBucket db,const PetscInt L,const PetscInt buffer);
807fbf63aeSDave May PetscErrorCode DataBucketGetSizes(DataBucket db,PetscInt *L,PetscInt *buffer,PetscInt *allocated);
817fbf63aeSDave May PetscErrorCode DataBucketGetGlobalSizes(MPI_Comm comm,DataBucket db,PetscInt *L,PetscInt *buffer,PetscInt *allocated);
827fbf63aeSDave May PetscErrorCode DataBucketGetDataFields(DataBucket db,PetscInt *L,DataField *fields[]);
8352849c42SDave May 
84*a2d1c729SDave May PetscErrorCode DataBucketCopyPoint(const DataBucket xb,const PetscInt pid_x,const DataBucket yb,const PetscInt pid_y);
857fbf63aeSDave May PetscErrorCode DataBucketCreateFromSubset(DataBucket DBIn,const PetscInt N,const PetscInt list[],DataBucket *DB);
867fbf63aeSDave May PetscErrorCode DataBucketZeroPoint(const DataBucket db,const PetscInt index);
8752849c42SDave May 
887fbf63aeSDave May //PetscErrorCode DataBucketLoadFromFile(const char filename[],DataBucketViewType type,DataBucket *db);
897fbf63aeSDave May PetscErrorCode DataBucketLoadFromFile(MPI_Comm comm,const char filename[],DataBucketViewType type,DataBucket *db);
907fbf63aeSDave May //PetscErrorCode DataBucketView(DataBucket db,const char filename[],DataBucketViewType type);
917fbf63aeSDave May PetscErrorCode DataBucketView(MPI_Comm comm,DataBucket db,const char filename[],DataBucketViewType type);
9252849c42SDave May 
937fbf63aeSDave May PetscErrorCode DataBucketAddPoint(DataBucket db);
947fbf63aeSDave May PetscErrorCode DataBucketRemovePoint(DataBucket db);
957fbf63aeSDave May PetscErrorCode DataBucketRemovePointAtIndex(const DataBucket db,const PetscInt index);
9652849c42SDave May 
977fbf63aeSDave May PetscErrorCode DataBucketDuplicateFields(DataBucket dbA,DataBucket *dbB);
987fbf63aeSDave May PetscErrorCode DataBucketInsertValues(DataBucket db1,DataBucket db2);
9952849c42SDave May 
10052849c42SDave May /* helpers for parallel send/recv */
1017fbf63aeSDave May PetscErrorCode DataBucketCreatePackedArray(DataBucket db,size_t *bytes,void **buf);
1027fbf63aeSDave May PetscErrorCode DataBucketDestroyPackedArray(DataBucket db,void **buf);
1037fbf63aeSDave May PetscErrorCode DataBucketFillPackedArray(DataBucket db,const PetscInt index,void *buf);
1047fbf63aeSDave May PetscErrorCode DataBucketInsertPackedArray(DataBucket db,const PetscInt idx,void *data);
10552849c42SDave May 
10652849c42SDave May 
10752849c42SDave May #endif
10852849c42SDave May 
109