1*77048351SPatrick Sanan #ifndef __DMSWARM_DATA_EXCHANGER_H__ 2*77048351SPatrick Sanan #define __DMSWARM_DATA_EXCHANGER_H__ 3095059a4SDave May 4095059a4SDave May #include <petscvec.h> 5095059a4SDave May #include <petscmat.h> 6095059a4SDave May 7*77048351SPatrick Sanan typedef enum { DEOBJECT_INITIALIZED=0, DEOBJECT_FINALIZED, DEOBJECT_STATE_UNKNOWN } DMSwarmDEObjectState; 8095059a4SDave May 9*77048351SPatrick Sanan typedef struct _p_DMSwarmDataEx* DMSwarmDataEx; 10*77048351SPatrick 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] */ 27*77048351SPatrick Sanan DMSwarmDEObjectState topology_status; 28*77048351SPatrick Sanan DMSwarmDEObjectState message_lengths_status; 29*77048351SPatrick Sanan DMSwarmDEObjectState packer_status; 30*77048351SPatrick 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 42*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExCreate(MPI_Comm,const PetscInt, DMSwarmDataEx *); 43*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExView(DMSwarmDataEx); 44*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExDestroy(DMSwarmDataEx); 45*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyInitialize(DMSwarmDataEx); 46*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyAddNeighbour(DMSwarmDataEx,const PetscMPIInt); 47*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyFinalize(DMSwarmDataEx); 48*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExInitializeSendCount(DMSwarmDataEx); 49*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExAddToSendCount(DMSwarmDataEx,const PetscMPIInt,const PetscInt); 50*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExFinalizeSendCount(DMSwarmDataEx); 51*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackInitialize(DMSwarmDataEx,size_t); 52*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackData(DMSwarmDataEx,PetscMPIInt,PetscInt,void*); 53*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExPackFinalize(DMSwarmDataEx); 54*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExBegin(DMSwarmDataEx); 55*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExEnd(DMSwarmDataEx); 56*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExGetSendData(DMSwarmDataEx,PetscInt*,void**); 57*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExGetRecvData(DMSwarmDataEx,PetscInt*,void**); 58*77048351SPatrick Sanan PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyGetNeighbours(DMSwarmDataEx,PetscMPIInt*,PetscMPIInt *[]); 59095059a4SDave May 60095059a4SDave May #endif 61