37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "units_c.inc"
45#include "com04_c.inc"
46#include "titr_c.inc"
47
48
49
50 INTEGER ITAB(NUMNOD), ITABM1(2*NUMNOD),IMERGE(*),
51 . IMERGE2(NUMNOD+1),IADMERGE2(NUMNOD+1),NMERGE_TOT
52 TARGET itab
54 . x(3,numnod),cmerge(*)
55
56
57
58 INTEGER I,J,K,M,N,I1,IB,IG,JG,J1,JK,KK,KP,N1,N2,NC,NS,NN,NM,
59 . IBZ1,IBZ,IBY1,IBY,IBX1,IBX,KS,NUMNOD1,NUMCNOD1,
60 . NBOX,NBOY,NBOZ,NBX,NBY,NBZ,NBAND,IBOITE
61
62 INTEGER, DIMENSION(:),POINTER :: ITABC
63 INTEGER, DIMENSION(:),ALLOCATABLE ::
64 . NPX,IPX,NPY,IPY,NPZ,IPZ,NPCX,IPCX,NPCY,IPCY,NPCZ,IPCZ,IMERGE0
65 INTEGER,DIMENSION(:), ALLOCATABLE :: NOBX
66 INTEGER,DIMENSION(:), ALLOCATABLE :: NOBY
67 INTEGER,DIMENSION(:), ALLOCATABLE :: NOBZ
68 INTEGER,DIMENSION(:), ALLOCATABLE :: NOBCX
69 INTEGER,DIMENSION(:), ALLOCATABLE ::
70 INTEGER,DIMENSION(:), ALLOCATABLE :: NOBCZ
71 INTEGER,DIMENSION(:), ALLOCATABLE :: LBUF
72 INTEGER,DIMENSION(:), ALLOCATABLE :: IADMERGE2TMP
74 . xi, yi, zi, xj, yj, zj, dk,
75 . dist2,dvois,dbuc,eps,xmin,xmax,ymin,
ymax,zmin,
76 . zmax,dmx,dmy,dmz,dmerge,ddd(numcnod)
77
78 INTEGER
79 . USRTOS,USRTOSC
81
82
83 ALLOCATE(nobx(numnod))
84 ALLOCATE(noby(numnod))
85 ALLOCATE(nobz(numnod))
86 ALLOCATE(nobcx(numcnod))
87 ALLOCATE(nobcy(numcnod))
88 ALLOCATE(nobcz(numcnod))
89 ALLOCATE(lbuf(numnod))
90 ALLOCATE(iadmerge2tmp(numnod+1))
91
92 DO n=1,2*numcnod
93 imerge(n) = 0
94 END DO
95 DO n=1,numnod+1
96 imerge2(n) = 0
97 iadmerge2(n) = 0
98 END DO
99
100 numnod1 = numnod0-numcnod
101 itabc => itab(numnod1+1:numnod0)
102 dbuc = zero
103 DO n=1,numcnod
105 dbuc =
max(dbuc,cmerge(n))
106 ENDDO
107
108 dbuc = two*dbuc
109 eps=em3*dbuc
110 xmin=ep30
111 xmax=-ep30
112 ymin=ep30
114 zmin=ep30
115 zmax=-ep30
116
117 DO n=1,numnod0
118 nn =
usrtos(itab(n),itabm1)
119 xmin=
min(xmin,x(1,nn))
120 ymin=
min(ymin,x(2,nn))
121 zmin=
min(zmin,x(3,nn))
122 xmax=
max(xmax,x(1,nn
124 zmax=
max(zmax,x(3,nn))
125 ENDDO
126
127 xmin=xmin-eps
128 ymin=ymin-eps
129 zmin=zmin-eps
130 xmax=xmax+eps
132 zmax=zmax+eps
133
134 dmx=xmax-xmin
136 dmz=zmax-zmin
137
138 nbx =
max(1,int(dmx/dbuc))
139 nby =
max(1,int(dmy/dbuc))
140 nbz =
max(1,int(dmz/dbuc))
141
142 DO n=1,numnod1
143 nn =
usrtos(itab(n),itabm1)
144 nobx(n) = (x(1,nn)-xmin)/dbuc
145 noby(n) = (x(2,nn)-ymin)/dbuc
146 nobz(n) = (x(3,nn)-zmin)/dbuc
147 ENDDO
148
149 DO n=1,numcnod
151 nobcx(n) = (x(1,nn)-xmin)/dbuc
152 nobcy(n) = (x(2,nn)-ymin)/dbuc
153 nobcz(n) = (x(3,nn)-zmin)/dbuc
154 ENDDO
155
156 nband =
max(nbx, nby,nbz) + 1
157
158 ALLOCATE( npx(0:numnod1+nband ) , npy(0:3*(numnod1+nband)),
159 . npz(0:9*(numnod1+nband)) , ipx(numnod1+nband) ,
160 . ipy(numnod1+nband) , ipz(numnod1+nband),
161 . npcx(0:numcnod+nband) , npcy(0:numcnod+nband) ,
162 . npcz(0:numcnod+nband) , ipcx(numcnod+nband) ,
163 . ipcy(numcnod+nband) , ipcz(numcnod+nband),
164 . imerge0(numcnod))
165 imerge0(1:numcnod) = 0
166
167
168
169
170
171
172 DO ib=0,nbx+1
173 npx(ib)=0
174 ENDDO
175 DO n=1,numnod1
176 nbox=nobx(n)+1
177 IF(nbox >= 1.AND.nbox <= nbx+1)THEN
178 npx(nbox)=npx(nbox)+1
179 ENDIF
180 ENDDO
181 DO ib=1,nbx+1
182 npx(ib)=npx(ib)+npx(ib-1)
183 ENDDO
184 DO ib=nbx+1,1,-1
185 npx(ib)=npx(ib-1)
186 ENDDO
187 DO n=1,numnod1
188 nbox=nobx(n)+1
189
190 IF(nbox >= 1.AND.nbox <= nbx+1)THEN
191 npx(nbox)=npx(nbox)+1
192 ipx(npx(nbox))=n
193 ENDIF
194 ENDDO
195
196
197
198 DO ib=0,nbx+1
199 npcx(ib)=0
200 ENDDO
201 DO n=1,numcnod
202 nbox=nobcx(n)+1
203 IF(nbox >= 1.AND.nbox <= nbx+1)THEN
204 npcx(nbox)=npcx(nbox)+1
205 ENDIF
206 ENDDO
207 DO ib=1,nbx+1
208 npcx(ib)=npcx(ib)+npcx(ib-1)
209 ENDDO
210 DO ib=nbx+1,1,-1
211 npcx(ib)=npcx(ib-1)
212 ENDDO
213 DO n=1,numcnod
214 nbox=nobcx(n)+1
215
216 IF(nbox >= 1.AND.nbox <= nbx+1)THEN
217 npcx(nbox)=npcx(nbox)+1
218 ipcx(npcx(nbox))=n
219 ENDIF
220 ENDDO
221
222 DO ibx=1,nbx+1
223 iboite = 0
224 DO kp= npcx(ibx-1)+1,npcx(ibx)
225 IF(ipcx(kp)> 0)iboite =1
226 ENDDO
227
228 IF(iboite > 0) THEN
229 DO iby=0,nby+1
230 npy(iby)=0
231 ENDDO
232 DO ks=npx(
max(ibx-2,0))+1,npx(
min(ibx+1,nbx+1))
233 n =ipx(ks)
234 nboy=noby(n)+1
235
236 IF(nboy >= 1 .AND. nboy <= nby+1)THEN
237 npy(nboy)=npy(nboy)+1
238 ENDIF
239 ENDDO
240 DO iby=1,nby+1
241 npy(iby)=npy(iby)+npy(iby-1)
242 ENDDO
243 DO iby=nby+1,1,-1
244 npy(iby)=npy(iby-1)
245 ENDDO
246 DO ks=npx(
max(ibx-2,0))+1,npx(
min(ibx+1,nbx+1))
247 n =ipx(ks)
248 nboy=noby(n)+1
249
250 IF(nboy >= 1 .AND. nboy <= nby+1)THEN
251 npy(nboy)=npy(nboy)+1
252 ipy(npy(nboy))=n
253 ENDIF
254 ENDDO
255
256
257
258 DO iby=0,nby+1
259 npcy(iby)=0
260 ENDDO
261 DO ks=npcx(ibx-1)+1,npcx(ibx)
262 n =ipcx(ks)
263 nboy=nobcy(n)+1
264
265 IF(nboy >= 1.AND.nboy <= nby+1)THEN
266 npcy(nboy)=npcy(nboy)+1
267 ENDIF
268 ENDDO
269
270 DO iby=1,nby+1
271 npcy(iby)=npcy(iby)+npcy(iby-1)
272 ENDDO
273
274 DO iby=nby+1,1,-1
275 npcy(iby)=npcy(iby-1)
276 ENDDO
277 DO ks=npcx(ibx-1)+1,npcx(ibx)
278 n =ipcx(ks)
279 nboy=nobcy(n)+1
280
281 IF(nboy >= 1.AND. nboy <= nby+1)THEN
282 npcy(nboy)=npcy(nboy)+1
283 ipcy(npcy(nboy))=n
284 ENDIF
285 ENDDO
286
287
288
289 DO iby=1,nby+1
290 iboite = 0
291 DO kp= npcy(iby-1)+1,npcy(iby)
292 IF(ipcy(kp) > 0)iboite = 1
293 ENDDO
294
295 IF(iboite > 0) THEN
296 DO ibz=0,nbz+1
297 npz(ibz)=0
298 ENDDO
299 DO ks=npy(
max(iby-2,0))+1,npy(
min(iby+1, nby+1))
300 n =ipy(ks)
301 nboz=nobz(n)+1
302
303 IF(nboz >= 1.AND.nboz <= nbz+1)THEN
304 npz(nboz)=npz(nboz)+1
305 ENDIF
306 ENDDO
307 DO ibz=1,nbz+1
308 npz(ibz)=npz(ibz)+npz(ibz-1)
309 ENDDO
310 DO ibz=nbz+1,1,-1
311 npz(ibz)=npz(ibz-1)
312 ENDDO
313 DO ks=npy(
max(iby-2,0))+1,npy(
min(iby+1, nby+1))
314 n =ipy(ks)
315 nboz=nobz(n)+1
316
317 IF(nboz >= 1 .AND. nboz <= nbz+1)THEN
318 npz(nboz)=npz(nboz)+1
319 ipz(npz(nboz))=n
320 ENDIF
321 ENDDO
322
323
324
325 DO ibz=0,nbz+1
326 npcz(ibz)=0
327 ENDDO
328 DO ks=npcy(iby-1)+1,npcy(iby)
329 n =ipcy(ks)
330 nboz=nobcz(n)+1
331 IF(nboz >= 1.AND.nboz <= nbz+1)THEN
332 npcz(nboz)=npcz(nboz)+1
333 ENDIF
334 ENDDO
335 DO ibz=1,nbz+1
336 npcz(ibz)=npcz(ibz)+npcz(ibz-1)
337 ENDDO
338 DO ibz=nbz+1,1,-1
339 npcz(ibz)=npcz(ibz-1)
340 ENDDO
341 DO ks=npcy(iby-1)+1,npcy(iby)
342 n =ipcy(ks)
343 nboz=nobcz(n)+1
344 IF(nboz >= 1.AND. nboz <= nbz+1)THEN
345 npcz(nboz)=npcz(nboz)+1
346 ipcz(npcz(nboz))=n
347 ENDIF
348 ENDDO
349
350
351
352 dvois = huge(dvois)
353 DO ibz=1,nbz+1
354 DO kp= npcz(ibz-1)+1,npcz(ibz)
355 nc =ipcz(kp)
356 IF(nc > 0) THEN
357 DO ks=npz(
max(ibz-2,0))+1,npz(
min(ibz+1,nbz+1))
358 ns =ipz(ks)
360 xi =x(1,ig)
361 yi =x(2,ig)
362 zi =x(3,ig)
363 dmerge = cmerge(nc)*cmerge(nc)
364 jg=
usrtos(itab(ns),itabm1)
365 xj =(x(1,jg)-xi)
366 yj =(x(2,jg)-yi)
367 zj =(x(3,jg)-zi)
368 dist2=xj**2 + yj**2 + zj**2
369 ddd(nc) = dist2
370 IF(itabc(nc)/=itab(ns).AND.dist2<=dmerge)THEN
371 IF(imerge0(nc) == 0) THEN
372 imerge0(nc) = itab(ns)
373 dvois = dist2
374 ddd(nc) = dist2
375 ELSEIF(dist2 < dvois)THEN
376 imerge0(nc) = itab(ns)
377 dvois = dist2
378 ddd(nc) = dist2
379 ENDIF
380 ENDIF
381 ENDDO
382 ENDIF
383 ENDDO
384
385 ENDDO
386
387 ENDIF
388 ENDDO
389 ENDIF
390 ENDDO
391
392
393
394 nm = 0
395 DO i= 1,numcnod
396 IF (imerge0(i) > 0) THEN
397 nm = nm+1
398 imerge(nmerge_tot+nm) =
usrtosc(imerge0(i),itabm1)
399 imerge(nm) =
usrtosc(itabc(i) ,itabm1)
400
401
402
403! . anmode=aninfo_blind_1,
404
405 ENDIF
406 ENDDO
407 nmerged = nm
408
409
410
411 IF (nm > 0) THEN
412 lbuf = 0
413 DO i = 1,numcnod
414 IF (imerge(nmerge_tot+i) > 0) THEN
415 n = imerge(nmerge_tot+i)
416 lbuf(n) = lbuf(n) + 1
417 ENDIF
418 ENDDO
419 iadmerge2(1) = 1
420 iadmerge2tmp(1) = 1
421 DO i = 2,numnod+1
422 iadmerge2(i) = iadmerge2(i-1) + lbuf(i-1)
423 iadmerge2tmp(i) = iadmerge2tmp(i-1) + lbuf(i-1)
424 ENDDO
425 DO i = 1,numcnod
426 IF (imerge(nmerge_tot+i) > 0) THEN
427 n = imerge(nmerge_tot+i)
428 imerge2(iadmerge2tmp(n)) = imerge(i)
429 iadmerge2tmp(n)=iadmerge2tmp(n)+1
430 ENDIF
431 ENDDO
432 ENDIF
433
434 WRITE(iout,'(//A/A//A/)')titre(114),titre(115),titre(116)
435 j=0
436 DO n=1,nmerged,50
437 j=j+50
439 DO i=n,j
440 WRITE(iout,'(5X,I10,8X,I10)')
441 . itab(imerge(i)),itab(imerge(nmerge_tot+i))
442 ENDDO
443 ENDDO
444
445 DEALLOCATE(npx ,npy ,npz ,ipx ,ipy ,ipz ,
446 . npcx ,npcy ,npcz ,ipcx ,ipcy ,ipcz )
447
448
449
451 . imerge2,iadmerge2,imerge0,nmerge_tot)
452 DEALLOCATE(imerge0)
453 DEALLOCATE(nobx)
454 DEALLOCATE(noby)
455 DEALLOCATE(nobz)
456 DEALLOCATE(nobcx)
457 DEALLOCATE(nobcy)
458 DEALLOCATE(nobcz)
459 DEALLOCATE(lbuf)
460 DEALLOCATE(iadmerge2tmp)
461 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
integer function usrtosc(iu, itabm1)
subroutine merge_cnod_cnod(x, itab, itabm1, cmerge, imerge, imerge2, iadmerge2, imerge0, nmerge_tot)
integer function usrtos(iu, itabm1)