42
43
44
46 USE intbufdef_mod
49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "com01_c.inc"
57#include "com04_c.inc"
58#include "param_c.inc"
59#include "lagmult.inc"
60#include "r2r_c.inc"
61
62
63
64 INTEGER PROC, NBDDACC, NBDDKIN, NBDDNRB,NRBYKIN_L, NBDDNCJ,
65 . NBDDNRBM, NLAGF_L,NRBYMK_L ,NBDDNRBYM, NBDDNORT,
66 . NBDDNOR_MAX, NBCCNOR, NBCCFR25, NBDDEDGT,NBDDEDG_MAX,NRTMX25,
67 . NPBY(NNPBY,*), LJOINT(*),
68 . IBVEL(NBVELP,*) , IADLL(*), LLL(*),FRONT_RM(NRBYM
69
70
71INTEGER, INTENT(IN) :: NUMNOD_L
72 INTEGER, DIMENSION(NUMNOD_L), INTENT(IN) :: NODGLOB
73 INTEGER, DIMENSION(NUMNOD), INTENT(IN) :: NODLOCAL
74 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
75 TYPE(INTERSURFP) :: INTERCEP(3,NINTER)
76 TYPE (NLOCAL_STR_), TARGET, INTENT(IN) :: NLOC_DMG
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 INTEGER NLOCAL
93
94
95
96 INTEGER I, P, N, M, NSN, K, J,
97 . IC, IK0, IKN, IK,
98 . IFRLAG(NSPMD),CPT,
99 . NADMSR, NADMSR_L, NI, NTY, NI25, NBDDNOR, NRTM, ISHIFT,
100 . N1, N2, N3, N4, ISBOUND,
101 . NRTM_L, NBDDEDG, II, NB
102 INTEGER, DIMENSION(:), ALLOCATABLE :: , TAG_MS, ITAG
103 INTEGER TAGP(NSPMD)
104
105
106 ALLOCATE( itag(numnod) )
107
108
109
110
111 nbddacc = 0
112 nbddkin = 0
113 cpt = 0
114
115 DO ii = 1,numnod_l
116 i = nodglob(ii)
118
120
121
122
123
124 nbddacc = nbddacc + (cpt - 1)
125 ELSE
126 IF(proc/=1)THEN
127
128 nbddkin = nbddkin + 1
129
130 nbddacc = nbddacc + (cpt - 2)
131 ELSE
132
133 nbddkin = nbddkin + (cpt - 1)
134 ENDIF
135 ENDIF
136 ENDDO
137
138
139
140 sdd_r2r_elem = 0
141 IF ((nsubdom>0).AND.(iddom==0)) THEN
142 IF (nloc_dmg%IMOD > 0) THEN
143 sdd_r2r_elem = 4*(nbddkin + nbddacc)
144 ELSE
145 sdd_r2r_elem = 2*(nbddkin + nbddacc)
146 ENDIF
147 ENDIF
148
149
150
151 nbddnrb = 0
152 nrbykin_l = 0
153 DO n = 1, nrbykin
154 m=npby(1,n)
155 IF(nodlocal(m)/=0.AND.nodlocal(m)<=numnod_l)THEN
156 nrbykin_l = nrbykin_l + 1
157 DO p = 1, nspmd
158 IF(p/=proc) THEN
160 nbddnrb = nbddnrb + 1
161 ENDIF
162 ENDIF
163 ENDDO
164 ENDIF
165 ENDDO
166
167
168
169 nbddncj = 0
170 k = 1
171 DO n = 1, njoint
172 nsn=ljoint(k)
173 DO j = 1, nsn
174 m = ljoint(k+j)
175 IF(proc/=1) THEN
176
177 IF(nodlocal(m)/=0.AND.nodlocal(m)<=numnod_l)THEN
178 nbddncj = nbddncj + 1
179 END IF
180 ELSE
181
182 DO p = 2, nspmd
184 nbddncj = nbddncj + 1
185 ENDIF
186 END DO
187 END IF
188 END DO
189 k = k + nsn + 1
190 END DO
191
192
193
194 nbddnrbm = 0
195 DO n = 1, nibvel
196 m=ibvel(4,n)
197 IF(nodlocal(m)/=0.AND.nodlocal(m)<=numnod_l)THEN
198 DO p = 1, nspmd
199 IF(p/=proc) THEN
201 nbddnrbm = nbddnrbm + 1
202 ENDIF
203 ENDIF
204 ENDDO
205 ENDIF
206 ENDDO
207
208
209
210 nbddnrbym = 0
211 nrbymk_l = 0
212 DO n = 1, nrbym
213 IF(mod(front_rm(n,proc),10)==1)THEN
214 nrbymk_l = nrbymk_l + 1
215 DO p = 1, nspmd
216 IF(p/=proc) THEN
217 IF(mod(front_rm(n,p),10)==1) THEN
218 nbddnrbym = nbddnrbym + 1
219 ENDIF
220 ENDIF
221 ENDDO
222 ENDIF
223 ENDDO
224
225
226
227 IF(lag_ncf>0) THEN
228 DO n = 1, numnod
229 itag(n) = 0
230 END DO
231 DO p = 1, nspmd
232 ifrlag(p) = 0
233 END DO
234 DO ic = 1, lag_ncf
235 ik0 = iadll(ic)
236 ikn = iadll(ic+1)-1
237 DO ik = ik0,ikn
238 n = lll(ik)
239 IF(itag(n)==0) THEN
240 itag(n) = 1
241 DO p = 1, nspmd
243 ifrlag(p) = ifrlag(p) + 1
244 GOTO 100
245 END IF
246 END DO
247 100 CONTINUE
248 END IF
249 END DO
250 END DO
251 nlagf_l = ifrlag(proc)
252 END IF
253
254
255 DEALLOCATE( itag )
256
257
258
259
260 nbccfr25 = 0
261 nbccnor = 0
262
263 nbddnor_max = 0
264 nbddnort = 0
265 IF(ninter25/=0)THEN
266
267 ni25=0
268 ishift = 0
269
270 DO ni=1,ninter
271 nty=ipari(7,ni)
272 IF(nty/=25) cycle
273
274 nbddnor = 0
275
276 ni25=ni25+1
277
278 nrtm =ipari(4,ni)
279 nadmsr=ipari(67,ni)
280
281 ALLOCATE(tag_sm(nadmsr),tag_ms(nadmsr))
282 tag_sm(1:nadmsr)=0
283
284 nadmsr_l=0
285 DO k=1,nrtm
286 n1 = intbuf_tab(ni)%ADMSR(4*(k-1)+1)
287 n2 = intbuf_tab(ni)%ADMSR(4*(k-1)+2)
288 n3 = intbuf_tab(ni)%ADMSR(4*(k-1)+3)
289 n4 = intbuf_tab(ni)%ADMSR(4*(k-1)+4)
290 IF(intercep(1,ni)%P(k)==proc)THEN
291 IF(tag_sm(n1)==0)THEN
292 nadmsr_l=nadmsr_l+1
293 tag_sm(n1)=nadmsr_l
294 END IF
295 IF(tag_sm(n2)==0)THEN
296 nadmsr_l=nadmsr_l+1
297 tag_sm(n2)=nadmsr_l
298 END IF
299 IF(tag_sm(n3)==0)THEN
300 nadmsr_l=nadmsr_l+1
301 tag_sm(n3)=nadmsr_l
302 END IF
303 IF(tag_sm(n4)==0)THEN
304 nadmsr_l=nadmsr_l+1
305 tag_sm(n4)=nadmsr_l
306 END IF
307 ENDIF
308 ENDDO
309
310 DO i = 1, nadmsr
311 k = tag_sm(i)
312 IF(k/=0)THEN
313 tag_ms(k)=i
314 END IF
315 END DO
316 DO i = 1, nadmsr_l
317 n = tag_ms(i) + ishift
318 isbound=0
319 tagp(1:nspmd)=0
320 nb = 0
321 DO j = addcsrect(n), addcsrect(n+1)-1
322 k = csrect(j)
323 p = intercep(1,ni)%P(k)
324 nb = nb+1
325 IF(p /= proc.AND.tagp(p)==0) THEN
326 nbddnor = nbddnor + 1
327 isbound = 1
328 tagp(p) = 1
329 ENDIF
330 ENDDO
331 nbccfr25 = nbccfr25 + nb*isbound
332 nbccnor = nbccnor + nb
333 ENDDO
334 ishift=ishift+nadmsr
335
336 nbddnor_max =
max(nbddnor_max,nbddnor)
337 nbddnort = nbddnort+nbddnor
338
339
340 DEALLOCATE(tag_sm, tag_ms)
341
342 END DO
343
344 END IF
345
346
347
348
349 nbddedg_max = 0
350 nbddedgt = 0
351
352 nrtmx25=0
353 IF(ninter25/=0)THEN
354
355 ni25=0
356
357 DO ni=1,ninter
358 nty=ipari(7,ni)
359 IF(nty/=25) cycle
360
361 nbddedg = 0
362
363 ni25=ni25+1
364
365 nrtm =ipari(4,ni)
366
367 ALLOCATE(tag_sm(nrtm),tag_ms(nrtm))
368 tag_sm(1:nrtm)=0
369
370 nrtm_l=0
371 DO k=1,nrtm
372 IF(intercep(1,ni)%P(k)==proc)THEN
373 nrtm_l=nrtm_l+1
374 tag_sm(k)=nrtm_l
375 ENDIF
376 ENDDO
377
378 nrtmx25 =
max(nrtmx25,nrtm_l)
379
380 DO i = 1, nrtm
381 k = tag_sm(i)
382 IF(k/=0)THEN
383 tag_ms(k)=i
384 END IF
385 END DO
386
387 DO i = 1, nrtm_l
388 n = tag_ms(i)
389
390 DO j = 1,4
391 k = intbuf_tab(ni)%MVOISIN(4*(n-1)+j)
392 IF(k/=0)THEN
393 p = intercep(1,ni)%P(k)
394 IF(p /= proc) THEN
395 nbddedg = nbddedg + 1
396 ENDIF
397 ENDIF
398 ENDDO
399 ENDDO
400
401 nbddedg_max =
max(nbddedg_max,nbddedg)
402 nbddedgt = nbddedgt+nbddedg
403
404 DEALLOCATE(tag_sm,tag_ms)
405
406 END DO
407
408 END IF
409
410 RETURN
integer, dimension(:), allocatable flagkin