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