40
41
42
43
44
45
46
47
48 USE multi_fvm_mod
51 USE intbufdef_mod
54 USE sensor_mod
55
56
57
58#include "implicit_f.inc"
59
60
61
62#include "com01_c.inc"
63#include "com04_c.inc"
64#include "com08_c.inc"
65#include "param_c.inc"
66#include "task_c.inc"
67#include "spmd.inc"
68
69
70
71 INTEGER, INTENT(in) :: ITASK
72 INTEGER, INTENT(in) :: NB_INTER_SORTED
73 INTEGER, INTENT(in) :: NSENSOR
74 INTEGER, DIMENSION(NB_INTER_SORTED), INTENT(in) :: LIST_INTER_SORTED
75 INTEGER, DIMENSION(NPARI,NINTER), INTENT(in) :: IPARI
76 INTEGER, DIMENSION(NINTER+1,NSPMD+1), INTENT(in) :: IRECVFROM
77 TYPE(inter_struct_type), DIMENSION(NINTER), INTENT(inout) :: INTER_STRUCT
78 TYPE(sorting_comm_type), DIMENSION(NINTER), INTENT(inout) :: SORT_COMM
79 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) :: SENSOR_TAB
80
81
82
83 INTEGER :: KK,N,P
84 INTEGER :: NTY,INACTI,ISENS
85 INTEGER :: NSN,NMN
86 LOGICAL :: TYPE18
87#ifdef MPI
88 INTEGER :: IERROR,STATUS(MPI_STATUS_SIZE)
89#endif
91
92 IF(itask==0.AND.nb_inter_sorted>0) THEN
93 DO kk=1,nb_inter_sorted
94 n = list_inter_sorted(kk)
95
96 nty = ipari(7,n)
97 inacti = ipari(22,n)
98 type18=.false.
99 IF(nty==7.AND.inacti==7)type18=.true.
100
101 isens = 0
102 IF(nty == 7.OR.nty == 11.OR.nty == 24.OR.nty == 25) isens = ipari(64,n)
103 IF (isens > 0) THEN
104 ts = sensor_tab(isens)%TSTART
105 ELSE
106 ts = tt
107 ENDIF
108
109 nsn = ipari(5,n)
110 nmn = ipari(6,n)
111
112
113 IF((nty==7.AND.tt>=ts).AND.(.NOT.type18))THEN
114
115 IF(nsn>0.AND.nmn==0) THEN
116 DO p = 1, nspmd
117 IF(irecvfrom(n,p)/=0) THEN
118 IF(p/=ispmd+1) THEN
119 IF(sort_comm(n)%NB(p)/=0) THEN
120#ifdef MPI
121 CALL mpi_wait(sort_comm(n)%REQ_SD2(p),status,ierror)
122 DEALLOCATE(sort_comm(n)%DATA_PROC(p)%RBUF)
123 CALL mpi_wait(sort_comm(n)%REQ_SD3(p),status,ierror)
124 DEALLOCATE(sort_comm(n)%DATA_PROC(p)%IBUF)
125 sort_comm(n)%NB(p) = 0
126#endif
127 END IF
128 ENDIF
129 ENDIF
130 ENDDO
131 ENDIF
132 ENDIF
133
134
135 IF(ALLOCATED(sort_comm(n)%COARSE_GRID) )DEALLOCATE( sort_comm(n)%COARSE_GRID )
136 IF(ALLOCATED(sort_comm(n)%MAIN_COARSE_GRID) )DEALLOCATE( sort_comm
137 IF(ALLOCATED(sort_comm(n)%GLOBAL_COARSE_CELL) )DEALLOCATE( sort_comm(n)%GLOBAL_COARSE_CELL )
138
139 IF(ALLOCATED(sort_comm(n)%SEND_SIZE_COARSE_CELL) ) DEALLOCATE( sort_comm(n)%SEND_SIZE_COARSE_CELL )
140 IF(ALLOCATED(sort_comm(n)%RCV_SIZE_COARSE_CELL) ) DEALLOCATE( sort_comm(n)%RCV_SIZE_COARSE_CELL )
141 IF(ALLOCATED(sort_comm(n)%SEND_DISPLS_COARSE_CELL) ) DEALLOCATE( sort_comm(n)%SEND_DISPLS_COARSE_CELL )
142 IF(ALLOCATED(sort_comm(n)%RCV_DISPLS_COARSE_CELL) ) DEALLOCATE( sort_comm(n)%RCV_DISPLS_COARSE_CELL )
143
144
145 IF(ALLOCATED(sort_comm(n)%KEEP_PROC) )DEALLOCATE( sort_comm(n)%KEEP_PROC )
146 IF(ALLOCATED(sort_comm(n)%CELL_LIST) )DEALLOCATE( sort_comm(n)%CELL_LIST )
147 IF(ALLOCATED(sort_comm(n)%NB_CELL_PROC) )DEALLOCATE( sort_comm(n)%NB_CELL_PROC )
148 IF(ALLOCATED(sort_comm(n)%CELL) )DEALLOCATE( sort_comm(n)%CELL )
149
150 IF(ALLOCATED(sort_comm(n)%SEND_NB_CELL) ) DEALLOCATE( sort_comm(n)%SEND_NB_CELL )
151 IF(ALLOCATED(sort_comm(n)%RCV_NB_CELL) ) DEALLOCATE( sort_comm(n)%RCV_NB_CELL )
152 IF(ALLOCATED(sort_comm(n)%SEND_DISPLS_NB_CELL) ) DEALLOCATE( sort_comm(n)%SEND_DISPLS_NB_CELL )
153 IF(ALLOCATED(sort_comm(n)%RCV_DISPLS_NB_CELL) ) DEALLOCATE( sort_comm(n)%RCV_DISPLS_NB_CELL )
154
155 IF(ALLOCATED(sort_comm(n)%SEND_SIZE_CELL) ) DEALLOCATE( sort_comm(n)%SEND_SIZE_CELL )
156 IF(ALLOCATED(sort_comm(n)%RCV_SIZE_CELL) ) DEALLOCATE( sort_comm(n)%RCV_SIZE_CELL )
157 IF(ALLOCATED(sort_comm(n)%SEND_DISPLS_CELL) ) DEALLOCATE( sort_comm(n)%SEND_DISPLS_CELL )
158 IF(ALLOCATED(sort_comm(n)%RCV_DISPLS_CELL) ) DEALLOCATE( sort_comm(n)%RCV_DISPLS_CELL )
159
160 IF(ALLOCATED(sort_comm(n)%REQUEST_NB_S) ) DEALLOCATE( sort_comm(n)%REQUEST_NB_S )
161 IF(ALLOCATED(sort_comm(n)%REQUEST_NB_R) ) DEALLOCATE( sort_comm(n)%REQUEST_NB_R )
162 IF(ALLOCATED(sort_comm(n)%NB) ) DEALLOCATE( sort_comm(n)%NB )
163 IF(ALLOCATED(sort_comm(n)%INDEX_RCV) ) DEALLOCATE( sort_comm(n)%INDEX_RCV )
164
165 IF(ALLOCATED(sort_comm(n)%SEND_NB) ) DEALLOCATE( sort_comm(n)%SEND_NB )
166 IF(ALLOCATED(sort_comm(n)%RECV_NB) ) DEALLOCATE( sort_comm(n)%RECV_NB )
167
168 IF(ALLOCATED(sort_comm(n)%REQUEST_CELL_SEND) ) DEALLOCATE( sort_comm(n)%REQUEST_CELL_SEND )
169 IF(ALLOCATED(sort_comm(n)%REQUEST_CELL_RCV) ) DEALLOCATE( sort_comm(n)%REQUEST_CELL_RCV )
170
171 IF(ALLOCATED(sort_comm(n)%IIX) )DEALLOCATE( sort_comm(n)%IIX )
172 IF(ALLOCATED(sort_comm(n)%IIY) )DEALLOCATE( sort_comm(n)%IIY )
173 IF(ALLOCATED(sort_comm(n)%IIZ) )DEALLOCATE( sort_comm(n)%IIZ )
174 IF(ALLOCATED(sort_comm(n)%LAST_NOD) )DEALLOCATE( sort_comm(n)%LAST_NOD )
175 IF(ALLOCATED(sort_comm(n)%NEXT_NOD) )DEALLOCATE( sort_comm(n)%NEXT_NOD )
176 IF(ALLOCATED(sort_comm(n)%VOXEL) )DEALLOCATE( sort_comm(n)%VOXEL )
177
178 IF(ALLOCATED(inter_struct(n)%CURV_MAX)) DEALLOCATE(inter_struct(n)%CURV_MAX)
179
180 ENDDO
183 ENDIF
185
186 RETURN
subroutine mpi_wait(ireq, status, ierr)
integer, dimension(:), allocatable nb_local_cell
logical, dimension(:,:,:), allocatable cell_bool