32 . IPARI,SORT_COMM,NB_REQUEST_COARSE_CELL,ARRAY_REQUEST_COARSE_CELL,LIST_INTER_COARSE_CELL)
49#include "implicit_f.inc"
64 INTEGER,
INTENT(in) :: NB_INTER_SORTED
65 INTEGER,
DIMENSION(NB_INTER_SORTED),
INTENT(in) :: LIST_INTER_SORTED
66 INTEGER,
INTENT(in) :: MODE
67 INTEGER,
DIMENSION(NINTER+1,NSPMD+1),
INTENT(in) :: ISENDTO,IRECVFROM
68 INTEGER,
DIMENSION(NPARI,NINTER),
INTENT(in) :: IPARI
70 INTEGER,
INTENT(inout) :: NB_REQUEST_COARSE_CELL
71 INTEGER,
DIMENSION(NB_INTER_SORTED),
INTENT(inout) :: ARRAY_REQUEST_COARSE_CELL
72 INTEGER,
DIMENSION(NB_INTER_SORTED),
INTENT(inout) :: LIST_INTER_COARSE_CELL
80 INTEGER STATUS(MPI_STATUS_SIZE),IERROR
81 INTEGER :: TOTAL_RCV_SIZE,TOTAL_SEND_SIZE
82 INTEGER :: LOC_PROC,ID_PROC
89 nb_request_coarse_cell = 0
90 DO kk=1,nb_inter_sorted
91 nin = list_inter_sorted(kk)
92 array_request_coarse_cell(kk) = mpi_request_null
93 IF(sort_comm(nin)%PROC_NUMBER>nspmd/2)
THEN
94 IF(irecvfrom(nin,loc_proc)==0.AND.isendto(nin,loc_proc
96 IF(.NOT.
ALLOCATED(sort_comm(nin)%SEND_SIZE_COARSE_CELL))
THEN
97 my_size = sort_comm(nin)%PROC_NUMBER
98 ALLOCATE(sort_comm(nin)%SEND_SIZE_COARSE_CELL(my_size))
101 IF(.NOT.
ALLOCATED(sort_comm(nin)%RCV_SIZE_COARSE_CELL)
THEN
102 my_size = sort_comm(nin)%PROC_NUMBER
103 ALLOCATE(sort_comm(nin)%RCV_SIZE_COARSE_CELL(my_size))
106 IF(.NOT.
ALLOCATED(sort_comm(nin)%SEND_DISPLS_COARSE_CELL))
THEN
107 my_size = sort_comm(nin)%PROC_NUMBER
108 ALLOCATE(sort_comm(nin)%SEND_DISPLS_COARSE_CELL(my_size))
111 IF(.NOT.
ALLOCATED(sort_comm(nin)%RCV_DISPLS_COARSE_CELL))
THEN
112 my_size = sort_comm(nin)%PROC_NUMBER
113 ALLOCATE(sort_comm(nin)%RCV_DISPLS_COARSE_CELL(my_size))
119 DO i=1,sort_comm(nin)%PROC_NUMBER
120 id_proc = sort_comm(nin)%PROC_LIST(i)
121 sort_comm(nin)%SEND_SIZE_COARSE_CELL(i) = 0
122 IF(isendto(nin,loc_proc)>0.AND.irecvfrom(nin,id_proc)>0)
THEN
125 sort_comm(nin)%SEND_DISPLS_COARSE_CELL(i) = 0
127 sort_comm(nin)%RCV_SIZE_COARSE_CELL(i) = 0
128 IF(irecvfrom(nin,loc_proc)>0.AND.isendto(nin,id_proc)>0)
THEN
131 sort_comm(nin)%RCV_DISPLS_COARSE_CELL(i) = total_rcv_size
132 IF(irecvfrom(nin,loc_proc)>0.AND.isendto(nin,id_proc)>0)
THEN
137 IF(.NOT.
ALLOCATED(sort_comm(nin)%GLOBAL_COARSE_CELL ) )
THEN
138 ALLOCATE(sort_comm(nin)%GLOBAL_COARSE_CELL(total_rcv_size))
140 sort_comm(nin)%SIZE_GLOBAL_COARSE_CELL = total_rcv_size
144 nb_request_coarse_cell = nb_request_coarse_cell + 1
145 list_inter_coarse_cell(nb_request_coarse_cell) = nin
148 . sort_comm(nin)%GLOBAL_COARSE_CELL,sort_comm(nin
149 . sort_comm(nin)%SEND_DISPLS_COARSE_CELL,
150 . total_rcv_size,sort_comm(nin)%RCV_SIZE_COARSE_CELL,
151 . sort_comm(nin)%RCV_DISPLS_COARSE_CELL,array_request_coarse_cell(nb_request_coarse_cell),
152 . sort_comm(nin)%COMM,sort_comm(nin)%PROC_NUMBER
160 DO kk=1,nb_request_coarse_cell
161 CALL mpi_wait(array_request_coarse_cell(kk),status,ierror)
162 nin = list_inter_coarse_cell(kk)
163 itied = ipari(85,nin)
166 DEALLOCATE( sort_comm(nin)%GLOBAL_COARSE_CELL )
167 DEALLOCATE( sort_comm(nin)%COARSE_GRID )
169 nb_request_coarse_cell = 0