xref: /petsc/src/dm/impls/swarm/data_ex.h (revision 5627991adfa0dae03dda7a34b1ec5f8d16d5e5f7)
1*5627991aSBarry Smith #if !defined(DMSWARM_DATA_EXCHANGER_H__)
2*5627991aSBarry Smith #define DMSWARM_DATA_EXCHANGER_H__
3095059a4SDave May 
4095059a4SDave May #include <petscvec.h>
5095059a4SDave May #include <petscmat.h>
6095059a4SDave May 
777048351SPatrick Sanan typedef enum { DEOBJECT_INITIALIZED=0, DEOBJECT_FINALIZED, DEOBJECT_STATE_UNKNOWN } DMSwarmDEObjectState;
8095059a4SDave May 
977048351SPatrick Sanan typedef struct _p_DMSwarmDataEx* DMSwarmDataEx;
1077048351SPatrick Sanan struct  _p_DMSwarmDataEx {
11095059a4SDave May         PetscInt              instance;
12095059a4SDave May         MPI_Comm              comm;
13095059a4SDave May         PetscMPIInt           rank;
14095059a4SDave May         PetscMPIInt           n_neighbour_procs;
15095059a4SDave May         PetscMPIInt           *neighbour_procs;          /* [n_neighbour_procs] */
16095059a4SDave May         PetscInt              *messages_to_be_sent;      /* [n_neighbour_procs] */
17095059a4SDave May         PetscInt              *message_offsets;          /* [n_neighbour_procs] */
18095059a4SDave May         PetscInt              *messages_to_be_recvieved; /* [n_neighbour_procs] */
19095059a4SDave May         size_t                unit_message_size;
20095059a4SDave May         void                  *send_message;
21095059a4SDave May         PetscInt              send_message_length;
22095059a4SDave May         void                  *recv_message;
23095059a4SDave May         PetscInt              recv_message_length;
24e4fbd051SBarry Smith         PetscMPIInt           *send_tags, *recv_tags;
25095059a4SDave May         PetscInt              total_pack_cnt;
26095059a4SDave May         PetscInt              *pack_cnt;                 /* [n_neighbour_procs] */
2777048351SPatrick Sanan         DMSwarmDEObjectState  topology_status;
2877048351SPatrick Sanan         DMSwarmDEObjectState  message_lengths_status;
2977048351SPatrick Sanan         DMSwarmDEObjectState  packer_status;
3077048351SPatrick Sanan         DMSwarmDEObjectState  communication_status;
31095059a4SDave May         MPI_Status            *_stats;
32095059a4SDave May         MPI_Request           *_requests;
33095059a4SDave May };
34095059a4SDave May 
35095059a4SDave May /* OBJECT_STATUS */
36d2ebda5dSSatish Balay /* #define OBJECT_INITIALIZED    0 */
37d2ebda5dSSatish Balay /* #define OBJECT_FINALIZED      1 */
38d2ebda5dSSatish Balay /* #define OBJECT_STATE_UNKNOWN  2 */
39095059a4SDave May 
40095059a4SDave May extern const char *status_names[];
41095059a4SDave May 
4277048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExCreate(MPI_Comm,const PetscInt, DMSwarmDataEx *);
4377048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExView(DMSwarmDataEx);
4477048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExDestroy(DMSwarmDataEx);
4577048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyInitialize(DMSwarmDataEx);
4677048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyAddNeighbour(DMSwarmDataEx,const PetscMPIInt);
4777048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyFinalize(DMSwarmDataEx);
4877048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExInitializeSendCount(DMSwarmDataEx);
4977048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExAddToSendCount(DMSwarmDataEx,const PetscMPIInt,const PetscInt);
5077048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExFinalizeSendCount(DMSwarmDataEx);
5177048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackInitialize(DMSwarmDataEx,size_t);
5277048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackData(DMSwarmDataEx,PetscMPIInt,PetscInt,void*);
5377048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackFinalize(DMSwarmDataEx);
5477048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExBegin(DMSwarmDataEx);
5577048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExEnd(DMSwarmDataEx);
5677048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExGetSendData(DMSwarmDataEx,PetscInt*,void**);
5777048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExGetRecvData(DMSwarmDataEx,PetscInt*,void**);
5877048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyGetNeighbours(DMSwarmDataEx,PetscMPIInt*,PetscMPIInt *[]);
59095059a4SDave May 
60095059a4SDave May #endif
61