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