xref: /petsc/src/dm/impls/swarm/data_ex.h (revision 9a2aa9a4efd967f1ecc08c0a73da4ea1c54dbc45)
1 #ifndef __DATA_EXCHANGER_H__
2 #define __DATA_EXCHANGER_H__
3 
4 #include <petscvec.h>
5 #include <petscmat.h>
6 
7 typedef enum { DEOBJECT_INITIALIZED=0, DEOBJECT_FINALIZED, DEOBJECT_STATE_UNKNOWN } DEObjectState;
8 
9 typedef struct _p_DataEx* DataEx;
10 struct  _p_DataEx {
11 	PetscInt       instance;
12 	MPI_Comm       comm;
13 	PetscMPIInt    rank;
14 	PetscMPIInt    n_neighbour_procs;
15 	PetscMPIInt    *neighbour_procs; /* [n_neighbour_procs] */
16 	PetscInt       *messages_to_be_sent; /* [n_neighbour_procs] */
17 	PetscInt       *message_offsets; /* [n_neighbour_procs] */
18 	PetscInt       *messages_to_be_recvieved; /* [n_neighbour_procs] */
19 	size_t         unit_message_size;
20 	void           *send_message;
21 	PetscInt       send_message_length;
22 	void           *recv_message;
23 	PetscInt       recv_message_length;
24 	PetscMPIInt    *send_tags, *recv_tags;
25 	PetscInt       total_pack_cnt;
26 	PetscInt       *pack_cnt; /* [n_neighbour_procs] */
27 	DEObjectState  topology_status;
28 	DEObjectState  message_lengths_status;
29 	DEObjectState  packer_status;
30 	DEObjectState  communication_status;
31 	MPI_Status     *_stats;
32 	MPI_Request    *_requests;
33 };
34 
35 
36 /* OBJECT_STATUS */
37 /* #define OBJECT_INITIALIZED    0 */
38 /* #define OBJECT_FINALIZED      1 */
39 /* #define OBJECT_STATE_UNKNOWN  2 */
40 
41 extern const char *status_names[];
42 
43 PetscErrorCode DataExCreate(MPI_Comm,const PetscInt, DataEx *);
44 PetscErrorCode DataExView(DataEx);
45 PetscErrorCode DataExDestroy(DataEx);
46 PetscErrorCode DataExTopologyInitialize(DataEx);
47 PetscErrorCode DataExTopologyAddNeighbour(DataEx,const PetscMPIInt);
48 PetscErrorCode DataExTopologyFinalize(DataEx);
49 PetscErrorCode DataExInitializeSendCount(DataEx);
50 PetscErrorCode DataExAddToSendCount(DataEx,const PetscMPIInt,const PetscInt);
51 PetscErrorCode DataExFinalizeSendCount(DataEx);
52 PetscErrorCode DataExPackInitialize(DataEx,size_t);
53 PetscErrorCode DataExPackData(DataEx,PetscMPIInt,PetscInt,void*);
54 PetscErrorCode DataExPackFinalize(DataEx);
55 PetscErrorCode DataExBegin(DataEx);
56 PetscErrorCode DataExEnd(DataEx);
57 PetscErrorCode DataExGetSendData(DataEx,PetscInt*,void**);
58 PetscErrorCode DataExGetRecvData(DataEx,PetscInt*,void**);
59 PetscErrorCode DataExTopologyGetNeighbours(DataEx,PetscMPIInt*,PetscMPIInt *[]);
60 
61 
62 #endif
63 
64