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) ::
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
78 INTEGER :: P,P_LOC,LOCAL_RANK
79 INTEGER :: MY_SIZE,OLD_POINTER
80 INTEGER :: ADRESS,SHIFT_
82 INTEGER IERROR1,STATUS(MPI_STATUS_SIZE),IERROR
83 INTEGER :: SIZE_CELL_LIST,TOTAL_RCV_SIZE,TOTAL_SEND_SIZE
84 INTEGER :: LOC_PROC,ID_PROC
85 INTEGER :: COUNT_COMM_SIZE_CELL,ID_COMM
92 nb_request_coarse_cell = 0
93 DO kk=1,nb_inter_sorted
94 nin = list_inter_sorted(kk)
95 array_request_coarse_cell(kk) = mpi_request_null
96 IF(sort_comm(nin)%PROC_NUMBER>nspmd/2)
THEN
97 IF(irecvfrom(nin,loc_proc)==0.AND.isendto(nin,loc_proc)==0) cycle
99 IF(.NOT.
ALLOCATED(sort_comm(nin)%SEND_SIZE_COARSE_CELL))
THEN
100 my_size = sort_comm(nin)%PROC_NUMBER
101 ALLOCATE(sort_comm(nin)%SEND_SIZE_COARSE_CELL(my_size))
104 IF(.NOT.
ALLOCATED(sort_comm(nin)%RCV_SIZE_COARSE_CELL))
THEN
105 my_size = sort_comm(nin)%PROC_NUMBER
106 ALLOCATE(sort_comm(nin)%RCV_SIZE_COARSE_CELL(my_size))
109 IF(.NOT.
ALLOCATED(sort_comm(nin)%SEND_DISPLS_COARSE_CELL))
THEN
110 my_size = sort_comm(nin)%PROC_NUMBER
111 ALLOCATE(sort_comm(nin)%SEND_DISPLS_COARSE_CELL(my_size))
114 IF(.NOT.
ALLOCATED(sort_comm(nin)%RCV_DISPLS_COARSE_CELL))
THEN
115 my_size = sort_comm(nin)%PROC_NUMBER
116 ALLOCATE(sort_comm(nin)%RCV_DISPLS_COARSE_CELL(my_size))
122 DO i=1,sort_comm(nin)%PROC_NUMBER
123 id_proc = sort_comm(nin)%PROC_LIST(i)
125 IF(isendto(nin,loc_proc)>0.AND.irecvfrom(nin,id_proc)>0)
THEN
128 sort_comm(nin)%SEND_DISPLS_COARSE_CELL(i) = 0
130 sort_comm(nin)%RCV_SIZE_COARSE_CELL(i) = 0
131 IF(irecvfrom(nin,loc_proc)>0.AND.isendto(nin,id_proc)>0)
THEN
134 sort_comm(nin)%RCV_DISPLS_COARSE_CELL(i) = total_rcv_size
135 IF(irecvfrom(nin,loc_proc)>0.AND.isendto(nin,id_proc)>0)
THEN
140 IF(.NOT.
ALLOCATED(sort_comm(nin)%GLOBAL_COARSE_CELL ) )
THEN
141 ALLOCATE(sort_comm(nin)%GLOBAL_COARSE_CELL(total_rcv_size))
143 sort_comm(nin)%SIZE_GLOBAL_COARSE_CELL = total_rcv_size
147 nb_request_coarse_cell = nb_request_coarse_cell + 1
148 list_inter_coarse_cell(nb_request_coarse_cell) = nin
151 . sort_comm(nin)%GLOBAL_COARSE_CELL,sort_comm(nin)%SEND_SIZE_COARSE_CELL,total_send_size,
152 . sort_comm(nin)%SEND_DISPLS_COARSE_CELL,
153 . total_rcv_size,sort_comm(nin)%RCV_SIZE_COARSE_CELL,
154 . sort_comm(nin)%RCV_DISPLS_COARSE_CELL,array_request_coarse_cell(nb_request_coarse_cell),
155 . sort_comm(nin)%COMM,sort_comm(nin)%PROC_NUMBER)
163 DO kk=1,nb_request_coarse_cell
164 CALL mpi_wait(array_request_coarse_cell(kk),status,ierror)
165 nin = list_inter_coarse_cell(kk)
166 itied = ipari(85,nin)
169 DEALLOCATE( sort_comm(nin)%GLOBAL_COARSE_CELL )
170 DEALLOCATE( sort_comm(nin)%COARSE_GRID )
172 nb_request_coarse_cell = 0