xref: /petsc/src/dm/impls/swarm/data_ex.h (revision 9dd11ecf0918283bb567d8b33a92f53ac4ea7840)
1*a4963045SJacob Faibussowitsch #pragma once
2095059a4SDave May 
3095059a4SDave May #include <petscvec.h>
4095059a4SDave May #include <petscmat.h>
5095059a4SDave May 
69371c9d4SSatish Balay typedef enum {
79371c9d4SSatish Balay   DEOBJECT_INITIALIZED = 0,
89371c9d4SSatish Balay   DEOBJECT_FINALIZED,
99371c9d4SSatish Balay   DEOBJECT_STATE_UNKNOWN
109371c9d4SSatish Balay } DMSwarmDEObjectState;
11095059a4SDave May 
1277048351SPatrick Sanan typedef struct _p_DMSwarmDataEx *DMSwarmDataEx;
1377048351SPatrick Sanan struct _p_DMSwarmDataEx {
14095059a4SDave May   PetscInt             instance;
15095059a4SDave May   MPI_Comm             comm;
16095059a4SDave May   PetscMPIInt          rank;
17095059a4SDave May   PetscMPIInt          n_neighbour_procs;
18095059a4SDave May   PetscMPIInt         *neighbour_procs;          /* [n_neighbour_procs] */
19095059a4SDave May   PetscInt            *messages_to_be_sent;      /* [n_neighbour_procs] */
20095059a4SDave May   PetscInt            *message_offsets;          /* [n_neighbour_procs] */
21095059a4SDave May   PetscInt            *messages_to_be_recvieved; /* [n_neighbour_procs] */
22095059a4SDave May   size_t               unit_message_size;
23095059a4SDave May   void                *send_message;
24095059a4SDave May   PetscInt             send_message_length;
25095059a4SDave May   void                *recv_message;
26095059a4SDave May   PetscInt             recv_message_length;
27e4fbd051SBarry Smith   PetscMPIInt         *send_tags, *recv_tags;
28095059a4SDave May   PetscInt             total_pack_cnt;
29095059a4SDave May   PetscInt            *pack_cnt; /* [n_neighbour_procs] */
3077048351SPatrick Sanan   DMSwarmDEObjectState topology_status;
3177048351SPatrick Sanan   DMSwarmDEObjectState message_lengths_status;
3277048351SPatrick Sanan   DMSwarmDEObjectState packer_status;
3377048351SPatrick Sanan   DMSwarmDEObjectState communication_status;
34095059a4SDave May   MPI_Status          *_stats;
35095059a4SDave May   MPI_Request         *_requests;
36095059a4SDave May };
37095059a4SDave May 
38095059a4SDave May /* OBJECT_STATUS */
39d2ebda5dSSatish Balay /* #define OBJECT_INITIALIZED    0 */
40d2ebda5dSSatish Balay /* #define OBJECT_FINALIZED      1 */
41d2ebda5dSSatish Balay /* #define OBJECT_STATE_UNKNOWN  2 */
42095059a4SDave May 
43095059a4SDave May extern const char *status_names[];
44095059a4SDave May 
4577048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExCreate(MPI_Comm, const PetscInt, DMSwarmDataEx *);
4677048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExView(DMSwarmDataEx);
4777048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExDestroy(DMSwarmDataEx);
4877048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyInitialize(DMSwarmDataEx);
4977048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyAddNeighbour(DMSwarmDataEx, const PetscMPIInt);
5077048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyFinalize(DMSwarmDataEx);
5177048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExInitializeSendCount(DMSwarmDataEx);
5277048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExAddToSendCount(DMSwarmDataEx, const PetscMPIInt, const PetscInt);
5377048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExFinalizeSendCount(DMSwarmDataEx);
5477048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackInitialize(DMSwarmDataEx, size_t);
5577048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackData(DMSwarmDataEx, PetscMPIInt, PetscInt, void *);
5677048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackFinalize(DMSwarmDataEx);
5777048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExBegin(DMSwarmDataEx);
5877048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExEnd(DMSwarmDataEx);
5977048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExGetSendData(DMSwarmDataEx, PetscInt *, void **);
6077048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExGetRecvData(DMSwarmDataEx, PetscInt *, void **);
6177048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyGetNeighbours(DMSwarmDataEx, PetscMPIInt *, PetscMPIInt *[]);
62