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