34 . IMERGE2,IADMERGE2,IMERGE0,NMERGE_TOT)
39#include "implicit_f.inc"
49 INTEGER (NUMNOD), ITABM1(2*NUMNOD),IMERGE(*),
50 . imerge2(numnod+1),iadmerge2(numnod+1),imerge0(numcnod),nmerge_tot
53 . x(3,numnod),cmerge(*)
57 INTEGER I,J,,M,N,I1,IB,IG,JG,J1,JK,KK,KP,N1,N2,NC,NS,NN,NM,
58 . ibz1,ibz,iby1,iby,ibx1,ibx,ks,numnod1,numcnod1,
59 . nbox,nboy,nboz,nbx,nby,nbz,nband,iboite,nmerged_old
62 . nobx(numnod),noby(numnod),nobz
63 . nobcx(numcnod),nobcy(numcnod),nobcz(numcnod),
64 . lbuf(numnod),iadmerge2tmp(numnod+1)
66 INTEGER,
DIMENSION(:),
POINTER :: ITABC
67 INTEGER,
DIMENSION(:),
ALLOCATABLE ::
68 . npx,ipx,npy,ipy,npz,ipz,npcx,ipcx,npcy,ipcy,npcz,ipcz,
72 . xi, yi, zi, xj, yj, zj, dk,
73 . dist2,dvois,dbuc,eps,xmin,xmax,ymin,
ymax,zmin,
74 . zmax,dmx,dmy,dmz,dmerge,ddd(numcnod)
88 IF (numcnod <= 1)
RETURN
90 numnod1 = numnod0-numcnod
91 itabc => itab(numnod1+1:numnod0)
95 dbuc =
max(dbuc,cmerge(n))
109 xmin=
min(xmin,x(1,nn))
110 ymin=
min(ymin,x(2,nn))
111 zmin=
min(zmin,x(3,nn))
112 xmax=
max(xmax,x(1,nn))
114 zmax=
max(zmax,x(3,nn))
128 nbx =
max(1,int(dmx/dbuc))
129 nby =
max(1,int(dmy/dbuc))
130 nbz =
max(1,int(dmz/dbuc))
134 nobx(n) = (x(1,nn)-xmin)/dbuc
135 noby(n) = (x(2,nn)-ymin)/dbuc
136 nobz(n) = (x(3,nn)-zmin)/dbuc
141 nobcx(n) = (x(1,nn)-xmin)/dbuc
142 nobcy(n) = (x(2,nn)-ymin)/dbuc
143 nobcz(n) = (x(3,nn)-zmin)/dbuc
146 nband =
max(nbx, nby,nbz) + 1
148 ALLOCATE(npx(0:numcnod+nband) , npy(0:3*(numcnod+nband)),
149 . npz(0:9*(numcnod+nband)) , ipx(numcnod+nband) ,
150 . ipy(numcnod+nband) , ipz(numcnod+nband) ,
151 . npcx(0:numcnod+nband) , npcy(0:numcnod+nband) ,
152 . npcz(0:numcnod+nband) , ipcx(numcnod+nband) ,
153 . ipcy(numcnod+nband) , ipcz(numcnod+nband) ,
154 . imergetmp(numcnod))
156 npx(0:numcnod+nband) = 0
157 npy(0:3*(numcnod+nband)) = 0
158 npz(0:9*(numcnod+nband)) = 0
159 ipx(numcnod+nband) = 0
160 ipy(numcnod+nband) = 0
161 ipz(numcnod+nband) = 0
162 npcx(0:numcnod+nband) = 0
163 npcy(0:numcnod+nband) = 0
164 npcz(0:numcnod+nband) = 0
165 ipcx(numcnod+nband) = 0
166 ipcy(numcnod+nband) = 0
167 ipcz(numcnod+nband) = 0
168 imergetmp(1:numcnod) = 0
181 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
182 npx(nbox)=npx(nbox)+1
186 npx(ib)=npx(ib)+npx(ib-1)
195 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
196 npx(nbox)=npx(nbox)+1
208 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
209 npcx(nbox)=npcx(nbox)+1
213 npcx(ib)=npcx(ib)+npcx(ib-1)
221 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
222 npcx(nbox)=npcx(nbox)+1
229 DO kp= npcx(ibx-1)+1,npcx(ibx)
230 IF(ipcx(kp)> 0)iboite =1
237 DO ks=npx(
max(ibx-2,0))+1,npx(
min(ibx+1,nbx+1))
241 IF(nboy >= 1 .AND. nboy <= nby+1)
THEN
242 npy(nboy)=npy(nboy)+1
246 npy(iby)=npy(iby)+npy(iby-1)
251 DO ks=npx(
max(ibx-2,0))+1,npx(
min(ibx+1,nbx+1))
255 IF(nboy >= 1 .AND. nboy <= nby+1)
THEN
256 npy(nboy)=npy(nboy)+1
266 DO ks=npcx(ibx-1)+1,npcx(ibx)
270 IF(nboy >= 1.AND.nboy <= nby+1)
THEN
271 npcy(nboy)=npcy(nboy)+1
276 npcy(iby)=npcy(iby)+npcy(iby-1)
280 npcy(iby)=npcy(iby-1)
282 DO ks=npcx(ibx-1)+1,npcx(ibx)
286 IF(nboy >= 1.AND. nboy <= nby+1)
THEN
287 npcy(nboy)=npcy(nboy)+1
296 DO kp= npcy(iby-1)+1,npcy(iby)
297 IF(ipcy(kp) > 0)iboite = 1
304 DO ks=npy(
max(iby-2,0))+1,npy(
min(iby+1, nby+1))
308 IF(nboz >= 1.AND.nboz <= nbz+1)
THEN
313 npz(ibz)=npz(ibz)+npz(ibz-1)
318 DO ks=npy(
max(iby-2,0))+1,npy(
min(iby+1, nby+1))
322 IF(nboz >= 1 .AND. nboz <= nbz
THEN
323 npz(nboz)=npz(nboz)+1
333 DO ks=npcy(iby-1)+1,npcy(iby)
336 IF(nboz >= 1.AND.nboz <= nbz+1)
THEN
337 npcz(nboz)=npcz(nboz)+1
341 npcz(ibz)=npcz(ibz)+npcz(ibz-1)
344 npcz(ibz)=npcz(ibz-1)
346 DO ks=npcy(iby-1)+1,npcy(iby)
349 IF(nboz >= 1.AND. nboz <= nbz+1)
THEN
350 npcz(nboz)=npcz(nboz)+1
358 DO kp= npcz(ibz-1)+1,npcz(ibz)
361 DO ks=npz(
max(ibz-2,0))+1,npz(
min(ibz+1,nbz+1))
364 IF (nc /= ns .AND. (imergetmp(nc) == 0 .and.
365 . imergetmp(ns) == 0))
THEN
371 dmerge = cmerge(nc)*cmerge(nc)
376 dist2=xj**2 + yj**2 + zj**2
378 IF(itabc(nc)/=itabc(ns).AND.dist2<=dmerge)
THEN
379 IF(imergetmp(nc) == 0)
THEN
380 imergetmp(nc) = itabc(ns)
383 ELSEIF(dist2 < dvois)
THEN
384 imergetmp(nc) = itabc(ns)
405 nmerged_old = nmerged
409 IF (imergetmp(i) > 0 .AND. imerge0(i) == 0)
THEN
411 imerge(nmerge_tot+nm) =
usrtosc(imergetmp(i),itabm1)
412 imerge(nm) =
usrtosc(itabc(i) ,itabm1)
424 IF (nmerged - nmerged_old > 0)
THEN
427 IF (imerge(nmerge_tot+i) > 0)
THEN
428 n = imerge(nmerge_tot+i)
429 lbuf(n) = lbuf(n) + 1
437 iadmerge2tmp(i) = iadmerge2tmp(i-1) + lbuf(i-1)
440 DO i = nmerged_old+1,numcnod
441 IF (imerge(nmerge_tot+i) > 0)
THEN
442 n = imerge(nmerge_tot+i)
443 imerge2(iadmerge2tmp(n)) = imerge(i)
444 iadmerge2tmp(n)=iadmerge2tmp(n)+1
449 WRITE(iout,
'(//A/A//A/)')titre(207),titre(115),titre(208)
452 DO n=nmerged_old+1,nmerged,50
456 WRITE(iout,
'(5X,I10,8X,I10)'
457 . itab(imerge(i)),itab(imerge(nmerge_tot+i))
464 WRITE(iout,
'(//A/A//A/)')titre(209),titre(115),titre(210)
467 IF (imergetmp(i) == 0 .AND. imerge0(i) == 0)
THEN
468 WRITE(iout,
'(5X,I10)') itabc(i)
472 DEALLOCATE(npx ,npy ,npz ,ipx ,ipy ,ipz ,
473 . npcx ,npcy ,npcz ,ipcx ,ipcy ,ipcz ,