xref: /petsc/src/dm/impls/swarm/data_ex.h (revision fccf883b8d575dff35c78ade578d5b4ecfb79779)
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 
15 	PetscMPIInt  n_neighbour_procs;
16 	PetscMPIInt *neighbour_procs; /* [n_neighbour_procs] */
17 	PetscInt    *messages_to_be_sent; /* [n_neighbour_procs] */
18 	PetscInt    *message_offsets; /* [n_neighbour_procs] */
19 	PetscInt    *messages_to_be_recvieved; /* [n_neighbour_procs] */
20 	size_t       unit_message_size;
21 	void        *send_message;
22 	PetscInt     send_message_length;
23 	void        *recv_message;
24 	PetscInt     recv_message_length;
25 	int         *send_tags, *recv_tags;
26 	PetscInt     total_pack_cnt;
27 	PetscInt    *pack_cnt; /* [n_neighbour_procs] */
28 	DEObjectState     topology_status;
29 	DEObjectState     message_lengths_status;
30 	DEObjectState     packer_status;
31 	DEObjectState     communication_status;
32 
33 	MPI_Status  *_stats;
34 	MPI_Request *_requests;
35 };
36 
37 
38 /* OBJECT_STATUS */
39 /* #define OBJECT_INITIALIZED    0 */
40 /* #define OBJECT_FINALIZED      1 */
41 /* #define OBJECT_STATE_UNKNOWN  2 */
42 
43 extern const char *status_names[];
44 
45 PetscErrorCode DataExCreate(MPI_Comm comm,const PetscInt count, DataEx *);
46 PetscErrorCode DataExView(DataEx d);
47 PetscErrorCode DataExDestroy(DataEx d);
48 PetscErrorCode DataExTopologyInitialize(DataEx d);
49 PetscErrorCode DataExTopologyAddNeighbour(DataEx d,const PetscMPIInt proc_id);
50 PetscErrorCode DataExTopologyFinalize(DataEx d);
51 PetscErrorCode DataExInitializeSendCount(DataEx de);
52 PetscErrorCode DataExAddToSendCount(DataEx de,const PetscMPIInt proc_id,const PetscInt count);
53 PetscErrorCode DataExFinalizeSendCount(DataEx de);
54 PetscErrorCode DataExPackInitialize(DataEx de,size_t unit_message_size);
55 PetscErrorCode DataExPackData(DataEx de,PetscMPIInt proc_id,PetscInt n,void *data);
56 PetscErrorCode DataExPackFinalize(DataEx de);
57 PetscErrorCode DataExBegin(DataEx de);
58 PetscErrorCode DataExEnd(DataEx de);
59 PetscErrorCode DataExGetSendData(DataEx de,PetscInt *length,void **send);
60 PetscErrorCode DataExGetRecvData(DataEx de,PetscInt *length,void **recv);
61 PetscErrorCode DataExTopologyGetNeighbours(DataEx de,PetscMPIInt *n,PetscMPIInt *neigh[]);
62 
63 
64 #endif
65 
66