Actual source code: data_ex.h

  1: #ifndef PETSC_DMSWARM_DATA_EXCHANGER_H
  2: #define PETSC_DMSWARM_DATA_EXCHANGER_H

  4: #include <petscvec.h>
  5: #include <petscmat.h>

  7: typedef enum {
  8:   DEOBJECT_INITIALIZED = 0,
  9:   DEOBJECT_FINALIZED,
 10:   DEOBJECT_STATE_UNKNOWN
 11: } DMSwarmDEObjectState;

 13: typedef struct _p_DMSwarmDataEx *DMSwarmDataEx;
 14: struct _p_DMSwarmDataEx {
 15:   PetscInt             instance;
 16:   MPI_Comm             comm;
 17:   PetscMPIInt          rank;
 18:   PetscMPIInt          n_neighbour_procs;
 19:   PetscMPIInt         *neighbour_procs;          /* [n_neighbour_procs] */
 20:   PetscInt            *messages_to_be_sent;      /* [n_neighbour_procs] */
 21:   PetscInt            *message_offsets;          /* [n_neighbour_procs] */
 22:   PetscInt            *messages_to_be_recvieved; /* [n_neighbour_procs] */
 23:   size_t               unit_message_size;
 24:   void                *send_message;
 25:   PetscInt             send_message_length;
 26:   void                *recv_message;
 27:   PetscInt             recv_message_length;
 28:   PetscMPIInt         *send_tags, *recv_tags;
 29:   PetscInt             total_pack_cnt;
 30:   PetscInt            *pack_cnt; /* [n_neighbour_procs] */
 31:   DMSwarmDEObjectState topology_status;
 32:   DMSwarmDEObjectState message_lengths_status;
 33:   DMSwarmDEObjectState packer_status;
 34:   DMSwarmDEObjectState communication_status;
 35:   MPI_Status          *_stats;
 36:   MPI_Request         *_requests;
 37: };

 39: /* OBJECT_STATUS */
 40: /* #define OBJECT_INITIALIZED    0 */
 41: /* #define OBJECT_FINALIZED      1 */
 42: /* #define OBJECT_STATE_UNKNOWN  2 */

 44: extern const char *status_names[];

 46: PETSC_INTERN PetscErrorCode DMSwarmDataExCreate(MPI_Comm, const PetscInt, DMSwarmDataEx *);
 47: PETSC_INTERN PetscErrorCode DMSwarmDataExView(DMSwarmDataEx);
 48: PETSC_INTERN PetscErrorCode DMSwarmDataExDestroy(DMSwarmDataEx);
 49: PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyInitialize(DMSwarmDataEx);
 50: PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyAddNeighbour(DMSwarmDataEx, const PetscMPIInt);
 51: PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyFinalize(DMSwarmDataEx);
 52: PETSC_INTERN PetscErrorCode DMSwarmDataExInitializeSendCount(DMSwarmDataEx);
 53: PETSC_INTERN PetscErrorCode DMSwarmDataExAddToSendCount(DMSwarmDataEx, const PetscMPIInt, const PetscInt);
 54: PETSC_INTERN PetscErrorCode DMSwarmDataExFinalizeSendCount(DMSwarmDataEx);
 55: PETSC_INTERN PetscErrorCode DMSwarmDataExPackInitialize(DMSwarmDataEx, size_t);
 56: PETSC_INTERN PetscErrorCode DMSwarmDataExPackData(DMSwarmDataEx, PetscMPIInt, PetscInt, void *);
 57: PETSC_INTERN PetscErrorCode DMSwarmDataExPackFinalize(DMSwarmDataEx);
 58: PETSC_INTERN PetscErrorCode DMSwarmDataExBegin(DMSwarmDataEx);
 59: PETSC_INTERN PetscErrorCode DMSwarmDataExEnd(DMSwarmDataEx);
 60: PETSC_INTERN PetscErrorCode DMSwarmDataExGetSendData(DMSwarmDataEx, PetscInt *, void **);
 61: PETSC_INTERN PetscErrorCode DMSwarmDataExGetRecvData(DMSwarmDataEx, PetscInt *, void **);
 62: PETSC_INTERN PetscErrorCode DMSwarmDataExTopologyGetNeighbours(DMSwarmDataEx, PetscMPIInt *, PetscMPIInt *[]);

 64: #endif // PETSC_DMSWARM_DATA_EXCHANGER_H