xref: /petsc/src/dm/impls/swarm/data_ex.h (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
15627991aSBarry Smith #if !defined(DMSWARM_DATA_EXCHANGER_H__)
25627991aSBarry Smith #define DMSWARM_DATA_EXCHANGER_H__
3095059a4SDave May 
4095059a4SDave May #include <petscvec.h>
5095059a4SDave May #include <petscmat.h>
6095059a4SDave May 
7*9371c9d4SSatish Balay typedef enum {
8*9371c9d4SSatish Balay   DEOBJECT_INITIALIZED = 0,
9*9371c9d4SSatish Balay   DEOBJECT_FINALIZED,
10*9371c9d4SSatish Balay   DEOBJECT_STATE_UNKNOWN
11*9371c9d4SSatish Balay } DMSwarmDEObjectState;
12095059a4SDave May 
1377048351SPatrick Sanan typedef struct _p_DMSwarmDataEx *DMSwarmDataEx;
1477048351SPatrick Sanan struct _p_DMSwarmDataEx {
15095059a4SDave May   PetscInt             instance;
16095059a4SDave May   MPI_Comm             comm;
17095059a4SDave May   PetscMPIInt          rank;
18095059a4SDave May   PetscMPIInt          n_neighbour_procs;
19095059a4SDave May   PetscMPIInt         *neighbour_procs;          /* [n_neighbour_procs] */
20095059a4SDave May   PetscInt            *messages_to_be_sent;      /* [n_neighbour_procs] */
21095059a4SDave May   PetscInt            *message_offsets;          /* [n_neighbour_procs] */
22095059a4SDave May   PetscInt            *messages_to_be_recvieved; /* [n_neighbour_procs] */
23095059a4SDave May   size_t               unit_message_size;
24095059a4SDave May   void                *send_message;
25095059a4SDave May   PetscInt             send_message_length;
26095059a4SDave May   void                *recv_message;
27095059a4SDave May   PetscInt             recv_message_length;
28e4fbd051SBarry Smith   PetscMPIInt         *send_tags, *recv_tags;
29095059a4SDave May   PetscInt             total_pack_cnt;
30095059a4SDave May   PetscInt            *pack_cnt; /* [n_neighbour_procs] */
3177048351SPatrick Sanan   DMSwarmDEObjectState topology_status;
3277048351SPatrick Sanan   DMSwarmDEObjectState message_lengths_status;
3377048351SPatrick Sanan   DMSwarmDEObjectState packer_status;
3477048351SPatrick Sanan   DMSwarmDEObjectState communication_status;
35095059a4SDave May   MPI_Status          *_stats;
36095059a4SDave May   MPI_Request         *_requests;
37095059a4SDave May };
38095059a4SDave May 
39095059a4SDave May /* OBJECT_STATUS */
40d2ebda5dSSatish Balay /* #define OBJECT_INITIALIZED    0 */
41d2ebda5dSSatish Balay /* #define OBJECT_FINALIZED      1 */
42d2ebda5dSSatish Balay /* #define OBJECT_STATE_UNKNOWN  2 */
43095059a4SDave May 
44095059a4SDave May extern const char *status_names[];
45095059a4SDave May 
4677048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExCreate(MPI_Comm, const PetscInt, DMSwarmDataEx *);
4777048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExView(DMSwarmDataEx);
4877048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExDestroy(DMSwarmDataEx);
4977048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyInitialize(DMSwarmDataEx);
5077048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyAddNeighbour(DMSwarmDataEx, const PetscMPIInt);
5177048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyFinalize(DMSwarmDataEx);
5277048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExInitializeSendCount(DMSwarmDataEx);
5377048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExAddToSendCount(DMSwarmDataEx, const PetscMPIInt, const PetscInt);
5477048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExFinalizeSendCount(DMSwarmDataEx);
5577048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackInitialize(DMSwarmDataEx, size_t);
5677048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackData(DMSwarmDataEx, PetscMPIInt, PetscInt, void *);
5777048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackFinalize(DMSwarmDataEx);
5877048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExBegin(DMSwarmDataEx);
5977048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExEnd(DMSwarmDataEx);
6077048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExGetSendData(DMSwarmDataEx, PetscInt *, void **);
6177048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExGetRecvData(DMSwarmDataEx, PetscInt *, void **);
6277048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyGetNeighbours(DMSwarmDataEx, PetscMPIInt *, PetscMPIInt *[]);
63095059a4SDave May 
64095059a4SDave May #endif
65