34 SUBROUTINE merge(X ,ITAB ,ITABM1 ,CMERGE ,IMERGE,
35 . IMERGE2,IADMERGE2,NMERGE_TOT)
40#include "implicit_f.inc"
50 INTEGER ITAB(NUMNOD), ITABM1(2*NUMNOD),IMERGE(*),
51 . imerge2(numnod+1),iadmerge2(numnod+1),nmerge_tot
54 . x(3,numnod),cmerge(*)
58 INTEGER I,J,K,M,N,I1,IB,IG,JG,J1,JK,,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
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 :: NOBCY
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)
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))
100 numnod1 = numnod0-numcnod
101 itabc => itab(numnod1+1:numnod0)
105 dbuc =
max(dbuc,cmerge(n))
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))
138 nbx =
max(1,int(dmx/dbuc))
139 nby =
max(1,int(dmy/dbuc))
140 nbz =
max(1,int(dmz/dbuc))
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
151 nobcx(n) = (x(1,nn)-xmin)/dbuc
152 nobcy(n) = (x(2,nn)-ymin)/dbuc
153 nobcz(n) = (x(3,nn)-zmin)/dbuc
156 nband =
max(nbx, nby,nbz) + 1
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),
165 imerge0(1:numcnod) = 0
177 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
178 npx(nbox)=npx(nbox)+1
182 npx(ib)=npx(ib)+npx(ib-1)
190 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
191 npx(nbox)=npx(nbox)+1
203 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
204 npcx(nbox)=npcx(nbox)+1
208 npcx(ib)=npcx(ib)+npcx(ib-1)
216 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
217 npcx(nbox)=npcx(nbox)+1
224 DO kp= npcx(ibx-1)+1,npcx(ibx)
225 IF(ipcx(kp)> 0)iboite =1
232 DO ks=npx(
max(ibx-2,0))+1,npx(
min(ibx+1,nbx+1))
236 IF(nboy >= 1 .AND. nboy <= nby+1)
THEN
237 npy(nboy)=npy(nboy)+1
241 npy(iby)=npy(iby)+npy(iby-1)
246 DO ks=npx(
max(ibx-2,0))+1,npx(
min(ibx+1,nbx+1))
250 IF(nboy >= 1 .AND. nboy <= nby+1)
THEN
261 DO ks=npcx(ibx-1)+1,npcx(ibx)
265 IF(nboy >= 1.AND.nboy <= nby+1)
THEN
266 npcy(nboy)=npcy(nboy)+1
271 npcy(iby)=npcy(iby)+npcy(iby-1)
275 npcy(iby)=npcy(iby-1)
277 DO ks=npcx(ibx-1)+1,npcx(ibx)
281 IF(nboy >= 1.AND. nboy <= nby+1)
THEN
282 npcy(nboy)=npcy(nboy)+1
291 DO kp= npcy(iby-1)+1,npcy(iby)
292 IF(ipcy(kp) > 0)iboite = 1
299 DO ks=npy(
max(iby-2,0))+1,npy(
min(iby+1, nby+1))
303 IF(nboz >= 1.AND.nboz <= nbz+1)
THEN
304 npz(nboz)=npz(nboz)+1
308 npz(ibz)=npz(ibz)+npz(ibz-1)
313 DO ks=npy(
max(iby-2,0))+1,npy(
min(iby+1, nby+1))
317 IF(nboz >= 1 .AND. nboz <= nbz+1)
THEN
318 npz(nboz)=npz(nboz)+1
328 DO ks=npcy(iby-1)+1,npcy(iby)
331 IF(nboz >= 1.AND.nboz
THEN
332 npcz(nboz)=npcz(nboz)+1
336 npcz(ibz)=npcz(ibz)+npcz(ibz-1)
339 npcz(ibz)=npcz(ibz-1)
341 DO ks=npcy(iby-1)+1,npcy(iby)
344 IF(nboz >= 1.AND. nboz <= nbz+1)
THEN
345 npcz(nboz)=npcz(nboz)+1
354 DO kp= npcz(ibz-1)+1,npcz(ibz)
357 DO ks=npz(
max(ibz-2,0))+1,npz(
min(ibz+1,nbz+1))
363 dmerge = cmerge(nc)*cmerge(nc)
368 dist2=xj**2 + yj**2 + zj**2
370 IF(itabc(nc)/=itab(ns).AND.dist2<=dmerge)
THEN
372 imerge0(nc) = itab(ns)
375 ELSEIF(dist2 < dvois)
THEN
376 imerge0(nc) = itab(ns)
396 IF (imerge0(i) > 0)
THEN
398 imerge(nmerge_tot+nm) =
usrtosc(imerge0(i),itabm1)
399 imerge(nm) =
usrtosc(itabc(i) ,itabm1)
414 IF (imerge(nmerge_tot+i) > 0)
THEN
415 n = imerge(nmerge_tot+i)
416 lbuf(n) = lbuf(n) + 1
422 iadmerge2(i) = iadmerge2(i-1) + lbuf(i-1)
423 iadmerge2tmp(i) = iadmerge2tmp(i-1) + lbuf(i-1)
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
434 WRITE(iout,
'(//A/A//A/)')titre(114),titre(115),titre(116)
440 WRITE(iout,
'(5X,I10,8X,I10)')
441 . itab(imerge(i)),itab(imerge(nmerge_tot+i))
445 DEALLOCATE(npx ,npy ,npz ,ipx ,ipy ,ipz ,
446 . npcx ,npcy ,npcz ,ipcx ,ipcy ,ipcz )
451 . imerge2,iadmerge2,imerge0,nmerge_tot)
460 DEALLOCATE(iadmerge2tmp)
subroutine merge_node(x, itab, itabm1, imerge, imerge2, iadmerge2, nmerge_tot, merge_node_tab, merge_node_tol, nmerge_node_cand, nmerge_node_dest, ixs, ixs10, ixs20, ixs16, ixq, ixc, ixt, ixp, ixr, ixtg, eani, igrnod)