xref: /petsc/src/dm/impls/swarm/data_bucket.h (revision 7fbf63ae2666fb26ca6b5671027071bf294ebbc0)
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 ERROR() {\
4052849c42SDave May printf("ERROR: %s() from line %d in %s !!\n", __FUNCTION__, __LINE__, __FILE__);\
4152849c42SDave May exit(EXIT_FAILURE);\
4252849c42SDave May }
4352849c42SDave May 
4452849c42SDave May #define __DATATFIELD_point_access(data,index,atomic_size) (void*)((char*)(data) + (index)*(atomic_size))
4552849c42SDave May #define __DATATFIELD_point_access_offset(data,index,atomic_size,offset) (void*)((char*)(data) + (index)*(atomic_size) + (offset))
4652849c42SDave May 
4752849c42SDave May 
4852849c42SDave May 
492eac95f8SDave May PetscErrorCode StringInList( const char name[], const PetscInt N, const DataField gfield[], PetscBool *val );
502eac95f8SDave May PetscErrorCode StringFindInList( const char name[], const PetscInt N, const DataField gfield[], PetscInt *index );
5152849c42SDave May 
522eac95f8SDave May PetscErrorCode DataFieldCreate( const char registeration_function[], const char name[], const size_t size, const PetscInt L, DataField *DF );
532eac95f8SDave May PetscErrorCode DataFieldDestroy( DataField *DF );
542eac95f8SDave May PetscErrorCode DataBucketCreate( DataBucket *DB );
552eac95f8SDave May PetscErrorCode DataBucketDestroy( DataBucket *DB );
562eac95f8SDave May PetscErrorCode DataBucketRegisterField(
5752849c42SDave May 															DataBucket db,
5852849c42SDave May 															const char registeration_function[],
5952849c42SDave May 															const char field_name[],
6052849c42SDave May 															size_t atomic_size, DataField *_gfield );
6152849c42SDave May 
6252849c42SDave May 
63*7fbf63aeSDave May PetscErrorCode DataFieldGetNumEntries(DataField df, PetscInt *sum);
64*7fbf63aeSDave May PetscErrorCode DataFieldSetSize( DataField df, const PetscInt new_L );
65*7fbf63aeSDave May PetscErrorCode DataFieldZeroBlock( DataField df, const PetscInt start, const PetscInt end );
66*7fbf63aeSDave May PetscErrorCode DataFieldGetAccess( const DataField gfield );
67*7fbf63aeSDave May PetscErrorCode DataFieldAccessPoint( const DataField gfield, const PetscInt pid, void **ctx_p );
68*7fbf63aeSDave May PetscErrorCode DataFieldAccessPointOffset( const DataField gfield, const size_t offset, const PetscInt pid, void **ctx_p );
69*7fbf63aeSDave May PetscErrorCode DataFieldRestoreAccess( DataField gfield );
70*7fbf63aeSDave May PetscErrorCode DataFieldVerifyAccess( const DataField gfield, const size_t size);
71*7fbf63aeSDave May PetscErrorCode DataFieldGetAtomicSize(const DataField gfield,size_t *size);
7252849c42SDave May 
73*7fbf63aeSDave May PetscErrorCode DataFieldGetEntries(const DataField gfield,void **data);
74*7fbf63aeSDave May PetscErrorCode DataFieldRestoreEntries(const DataField gfield,void **data);
7552849c42SDave May 
76*7fbf63aeSDave May PetscErrorCode DataFieldInsertPoint( const DataField field, const PetscInt index, const void *ctx );
77*7fbf63aeSDave May PetscErrorCode DataFieldCopyPoint( const PetscInt pid_x, const DataField field_x,
785c18a9d6SDave May 												const PetscInt pid_y, const DataField field_y );
79*7fbf63aeSDave May PetscErrorCode DataFieldZeroPoint( const DataField field, const PetscInt index );
8052849c42SDave May 
812eac95f8SDave May PetscErrorCode DataBucketGetDataFieldByName(DataBucket db,const char name[],DataField *gfield);
82*7fbf63aeSDave May PetscErrorCode DataBucketQueryDataFieldByName(DataBucket db,const char name[],PetscBool *found);
83*7fbf63aeSDave May PetscErrorCode DataBucketFinalize(DataBucket db);
84*7fbf63aeSDave May PetscErrorCode DataBucketSetInitialSizes( DataBucket db, const PetscInt L, const PetscInt buffer );
85*7fbf63aeSDave May PetscErrorCode DataBucketSetSizes( DataBucket db, const PetscInt L, const PetscInt buffer );
86*7fbf63aeSDave May PetscErrorCode DataBucketGetSizes( DataBucket db, PetscInt *L, PetscInt *buffer, PetscInt *allocated );
87*7fbf63aeSDave May PetscErrorCode DataBucketGetGlobalSizes(MPI_Comm comm, DataBucket db, PetscInt *L, PetscInt *buffer, PetscInt *allocated );
88*7fbf63aeSDave May PetscErrorCode DataBucketGetDataFields( DataBucket db, PetscInt *L, DataField *fields[] );
8952849c42SDave May 
90*7fbf63aeSDave May PetscErrorCode DataBucketCopyPoint( const DataBucket xb, const PetscInt pid_x,
915c18a9d6SDave May 												 const DataBucket yb, const PetscInt pid_y );
92*7fbf63aeSDave May PetscErrorCode DataBucketCreateFromSubset( DataBucket DBIn, const PetscInt N, const PetscInt list[], DataBucket *DB );
93*7fbf63aeSDave May PetscErrorCode DataBucketZeroPoint( const DataBucket db, const PetscInt index );
9452849c42SDave May 
95*7fbf63aeSDave May //PetscErrorCode DataBucketLoadFromFile(const char filename[], DataBucketViewType type, DataBucket *db);
96*7fbf63aeSDave May PetscErrorCode DataBucketLoadFromFile(MPI_Comm comm,const char filename[], DataBucketViewType type, DataBucket *db);
97*7fbf63aeSDave May //PetscErrorCode DataBucketView(DataBucket db,const char filename[],DataBucketViewType type);
98*7fbf63aeSDave May PetscErrorCode DataBucketView(MPI_Comm comm,DataBucket db,const char filename[],DataBucketViewType type);
9952849c42SDave May 
100*7fbf63aeSDave May PetscErrorCode DataBucketAddPoint( DataBucket db );
101*7fbf63aeSDave May PetscErrorCode DataBucketRemovePoint( DataBucket db );
102*7fbf63aeSDave May PetscErrorCode DataBucketRemovePointAtIndex( const DataBucket db, const PetscInt index );
10352849c42SDave May 
104*7fbf63aeSDave May PetscErrorCode DataBucketDuplicateFields(DataBucket dbA,DataBucket *dbB);
105*7fbf63aeSDave May PetscErrorCode DataBucketInsertValues(DataBucket db1,DataBucket db2);
10652849c42SDave May 
10752849c42SDave May /* helpers for parallel send/recv */
108*7fbf63aeSDave May PetscErrorCode DataBucketCreatePackedArray(DataBucket db,size_t *bytes,void **buf);
109*7fbf63aeSDave May PetscErrorCode DataBucketDestroyPackedArray(DataBucket db,void **buf);
110*7fbf63aeSDave May PetscErrorCode DataBucketFillPackedArray(DataBucket db,const PetscInt index,void *buf);
111*7fbf63aeSDave May PetscErrorCode DataBucketInsertPackedArray(DataBucket db,const PetscInt idx,void *data);
11252849c42SDave May 
11352849c42SDave May 
11452849c42SDave May #endif
11552849c42SDave May 
116