35 . DBUC,NN1,NN2,LIST1,LIST2,
36 . DDD,FLAG,LIST1_IDMERGE,LIST1_NBMERGE,LIST2_IDMERGE,
43#include "implicit_f.inc"
51 INTEGER (NUMNOD), (2*NUMNOD), IMERGE0(*), NN1, NN2,LIST1(*),
52 . LIST2(*),FLAG,LIST1_IDMERGE(*),LIST2_IDMERGE(*),LIST1_NBMERGE(*),
56 . x(3,numnod),cmerge(*),ddd(*),dbuc
60 INTEGER I,J,K,N,IB,IG,JG,KP,NC,NS,NN,
62 . NBOX,NBOY,NBOZ,NBX,NBY,NBZ,NBAND,IBOITE
65 INTEGER :: NUMNOD1, TAG
66 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: NOBX, NOBY, NOBZ
67 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: NOBCX, NOBCY, NOBCZ
68 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: TABS, TABC
70 INTEGER,
DIMENSION(:),
POINTER
71INTEGER,
DIMENSION(:),
ALLOCATABLE ::
72 . NPX,IPX,NPY,IPY,NPZ,IPZ,NPCX,IPCX,NPCY,IPCY,NPCZ,IPCZ
75 . xi, yi, zi, xj, yj, zj,
76 . dist2,dvois,eps,xmin,xmax,ymin,
ymax,zmin,
77 . zmax,dmx,dmy,dmz,dmerge
92 ALLOCATE(nobx(numnod))
93 ALLOCATE(noby(numnod))
94 ALLOCATE(nobz(numnod))
98 ALLOCATE(tabs(nb_merge_node))
99 ALLOCATE(tabc(nb_merge_node))
111 nn = usrtos(itab(n),itabm1)
112 xmin=
min(xmin,x(1,nn))
113 ymin=
min(ymin,x(2,nn))
114 zmin=
min(zmin,x(3,nn))
115 xmax=
max(xmax,x(1,nn))
117 zmax=
max(zmax,x(3,nn))
131 nbx =
max(1,int(dmx/dbuc))
132 nby =
max(1,int(dmy/dbuc))
133 nbz =
max(1,int(dmz/dbuc))
137 nn = usrtos(itab(n),itabm1)
138 nobx(i) = int( (x(1,nn)-xmin)/dbuc)
139 noby(i) = int( (x(2,nn)-ymin)/dbuc)
140 nobz(i) = int( (x(3,nn)-zmin)/dbuc)
145 numnod1 = numnod0-numcnod
146 itabc => itab(numnod1+1:numnod0)
149 nn = usrtosc(itabc(n),itabm1)
150 nobcx(n) =int( (x(1,nn)-xmin)/dbuc)
151 nobcy(n) =int( (x(2,nn)-ymin)/dbuc)
152 nobcz(n) =int( (x(3,nn)-zmin)/dbuc)
159 nn = usrtos(itab(n),itabm1)
160 nobcx(i) = int( (x(1,nn)-xmin)/dbuc)
161 nobcy(i) = int( (x(2,nn)-ymin)/dbuc)
162 nobcz(i) = int( (x(3,nn)-zmin)/dbuc)
166 nband =
max(nbx, nby,nbz) + 1
168 ALLOCATE( npx(0:nn1+nband ) , npy(0:3*(nn1+nband)),
169 . npz(0:9*(nn1+nband)) , ipx(nn1+nband) ,
170 . ipy(nn1+nband) , ipz(nn1+nband),
171 . npcx(0:nn2+nband) , npcy(0:nn2+nband) ,
172 . npcz(0:nn2+nband) , ipcx(nn2+nband) ,
173 . ipcy(nn2+nband) , ipcz(nn2+nband))
186 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
187 npx(nbox)=npx(nbox)+1
191 npx(ib)=npx(ib)+npx(ib-1)
199 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
200 npx(nbox)=npx(nbox)+1
212 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
213 npcx(nbox)=npcx(nbox)+1
217 npcx(ib)=npcx(ib)+npcx(ib-1)
225 IF(nbox >= 1.AND.nbox <= nbx+1)
THEN
226 npcx(nbox)=npcx(nbox)+1
233 DO kp= npcx(ibx-1)+1,npcx(ibx)
234 IF(ipcx(kp)> 0)iboite =1
241 DO ks=npx(
max(ibx-2,0))+1,npx(
min(ibx+1,nbx+1))
245 IF(nboy >= 1 .AND. nboy <= nby+1)
THEN
246 npy(nboy)=npy(nboy)+1
250 npy(iby)=npy(iby)+npy(iby-1)
255 DO ks=npx(
max(ibx-2,0))+1,npx(
min(ibx+1,nbx+1))
259 IF(nboy >= 1 .AND. nboy <= nby+1)
THEN
260 npy(nboy)=npy(nboy)+1
270 DO ks=npcx(ibx-1)+1,npcx(ibx)
274 IF(nboy >= 1.AND.nboy <= nby+1)
THEN
275 npcy(nboy)=npcy(nboy)+1
284 npcy(iby)=npcy(iby-1)
286 DO ks=npcx(ibx-1)+1,npcx(ibx)
290 IF(nboy >= 1.AND. nboy <= nby+1)
THEN
291 npcy(nboy)=npcy(nboy)+1
300 DO kp= npcy(iby-1)+1,npcy(iby)
301 IF(ipcy(kp) > 0)iboite = 1
308 DO ks=npy(
max(iby-2,0))+1,npy(
min(iby+1, nby+1))
312 IF(nboz >= 1.AND.nboz <= nbz+1)
THEN
313 npz(nboz)=npz(nboz)+1
317 npz(ibz)=npz(ibz)+npz(ibz-1)
322 DO ks=npy(
max(iby-2,0))+1,npy(
min(iby+1, nby+1))
326 IF(nboz >= 1 .AND. nboz <= nbz+1)
THEN
327 npz(nboz)=npz(nboz)+1
337 DO ks=npcy(iby-1)+1,npcy(iby)
340 IF(nboz >= 1.AND.nboz <= nbz+1)
THEN
341 npcz(nboz)=npcz(nboz)+1
345 npcz(ibz)=npcz(ibz)+npcz(ibz-1)
348 npcz(ibz)=npcz(ibz-1)
350 DO ks=npcy(iby-1)+1,npcy(iby)
353 IF(nboz >= 1.AND. nboz <= nbz+1)
THEN
354 npcz(nboz)=npcz(nboz)+1
363 DO kp= npcz(ibz-1)+1,npcz(ibz)
364 IF(ipcz(kp) > 0)
THEN
365 DO ks=npz(
max(ibz-2,0))+1,npz(
min(ibz+1,nbz+1))
372 ig = usrtosc(itabc(nc),itabm1)
376 dmerge = cmerge(nc)*cmerge(nc)
377 jg=usrtos(itab(ns),itabm1
381 dist2=xj**2 + yj**2 + zj**2
383 IF(imerge0(nc) == 0)
THEN
384 imerge0(nc) = itab(ns)
386 ELSEIF(dist2 < dvois)
THEN
387 imerge0(nc) = itab(ns)
397 ig=usrtos(itab(nc),itabm1)
401 jg=usrtos(itab(ns),itabm1)
405 dist2=xj**2 + yj**2 + zj**2
408 CALL decode_merge(list1_idmerge(ipz(ks)),list1_nbmerge(ipz(ks)),tabs,nb_merge_node)
412 DO j=1,list2_nbmerge(ipcz(kp))
413 DO k=1,list1_nbmerge(ipz(ks))
414 IF (abs(tabc(j)) == tabs(k))
THEN
417 dmerge = cmerge(tabs(k))*cmerge(tabs(k))
418 IF ((itab(ns)>itab(nc)).OR.((tabc(j)<0).AND.(ns/=nc
THEN
419 IF (dist2<=dmerge)
THEN
420 IF(imerge0(ipz(ks)) == 0)
THEN
421 imerge0(ipz(ks)) = itab(nc)
423 ELSEIF(imerge0(ipz(ks)) > itab(nc))
THEN
424 imerge0(ipz(ks)) = itab(nc)