34 1 NSN ,X ,BMINMA ,NOD2SP ,
36 3 NLIST ,SPBUF ,JVOIS ,JSTOR ,JPERM ,
37 4 DVOIS ,IREDUCE ,NSPHACTF,NSPHACTL,VOXEL ,
38 5 KXSP ,IXSP ,KREDUCE ,IPARTSP ,SZ_INTP_DIST,
39 6 MAX_INTP_DIST_PART,PRE_SEARCH)
47#include "implicit_f.inc"
51 INTEGER NSPHACTF, NSPHACTL
83 INTEGER NSN,NBX,NBY,NBZ,
84 . NLIST(*),NOD2SP(*) ,
85 . VOXEL(NBX+2,NBY+2,NBZ+2),(*) ,JSTOR(*), JPERM(*) ,
86 . IREDUCE,KXSP(NISP,*), IXSP(KVOISPH,*), KREDUCE(*)
87 INTEGER ,
INTENT(IN) :: IPARTSP(NUMSPH),PRE_SEARCH,SZ_INTP_DIST
91 . spbuf(nspbuf,*),dvois(*)
92 my_real ,
INTENT(INOUT) :: max_intp_dist_part(sz_intp_dist)
96 INTEGER NB_NCN,NB_NCN1,NB_ECN,I,J,DIR,NB_NC,NB_EC,
97 . N1,N2,N3,N4,NN,NE,K,L,II,JJ,JS,NS,N,
98 . nsnf, nsnl,nvois, ig, il,nvoimax
101 . dx,dy,dz,xs,ys,zs,xx,sx,sy,sz,s2,xn,yn,zn,
102 . xmin, xmax,ymin,
ymax,zmin, zmax, tz,
103 . d1x,d1y,d1z,d2,a2,alpha_marge,distmax
105 INTEGER LAST_NOD(NSN)
106 INTEGER IX,IY,IZ,NEXT,
107 . IX1,IY1,IZ1,IX2,IY2,IZ2
108 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IIX,IIY,IIZ
110 . XMINB,YMINB,ZMINB,XMAXB,YMAXB,ZMAXB,
111 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,aaa,bbb,
113 INTEGER FIRST,NEW,LAST
114 INTEGER IPART_I,IPART_JS
115 SAVE iix,iiy,iiz,distmax
127 alpha_marge = sqrt(one +spasort)
159 distmax =
max(distmax,spbuf(1,j))
162 IF(x(1,nn) < xmin) cycle
163 IF(x(1,nn) > xmax) cycle
164 IF(x(2,nn) < ymin) cycle
165 IF(x(2,nn) >
ymax) cycle
166 IF(x(3,nn) < zmin) cycle
167 IF(x(3,nn) > zmax) cycle
169 iix(i)=int(nbx*(x(1,nn)-xminb)/(xmaxb-xminb))
170 iiy(i)=int(nby*(x(2,nn)-yminb)/(ymaxb-yminb))
171 iiz(i)=int(nbz*(x(3,nn)-zminb)/(zmaxb-zminb))
173 iix(i)=
max(1,2+
min(nbx,iix(i)))
174 iiy(i)=
max(1,2+
min(nby,iiy(i)))
175 iiz(i)=
max(1,2+
min(nbz,iiz(i)))
177 first = voxel(iix(i),iiy(i),iiz(i))
180 voxel(iix(i),iiy(i),iiz(i)) = i
183 ELSEIF(last_nod(first) == 0)
THEN
192 last = last_nod(first)
206 DO ne = nsphactf,nsphactl
217 aaa = (spbuf(1,j)+distmax)* alpha_marge
221 ix1=int(nbx*(x(1,nn)-aaa-xminb)/(xmaxb-xminb))
222 iy1=int(nby*(x(2,nn)-aaa-yminb)/(ymaxb-yminb))
223 iz1=int(nbz*(x(3,nn)-aaa-zminb)/(zmaxb-zminb))
229 ix2=int(nbx*(x(1,nn)+aaa-xminb)/(xmaxb-xminb))
230 iy2=int(nby*(x(2,nn)+aaa-yminb)/(ymaxb-yminb))
231 iz2=int(nbz*(x(3,nn)+aaa-zminb)/(zmaxb-zminb))
264 bbb = aaa * alpha_marge
266 IF(xs<=x(1,nn)-bbb)
GOTO 200
267 IF(xs>=x(1,nn)+bbb)
GOTO 200
268 IF(ys<=x(2,nn)-bbb)
GOTO 200
269 IF(ys>=x(2,nn)+bbb)
GOTO 200
270 IF(zs<=x(3,nn)-bbb)
GOTO 200
271 IF(zs>=x(3,nn)+bbb)
GOTO 200
278 d2 = d1x*d1x+d1y*d1y+d1z*d1z
280 IF(js==j.or.d2 > a2)
GOTO 200
289 IF (ipart_i==ipart_js) min_dist =
min(min_dist,sqrt(d2))
303 IF (pre_search==0)
THEN
308 CALL sppro31(j ,kxsp ,ixsp ,nod2sp,jvois,
309 . jstor,jperm ,dvois,ireduce,kreduce)
312 max_intp_dist_part(ipart_i) =
max(max_intp_dist_part(ipart_i),min_dist)
313 nvoimax =
max(nvoimax,nvois)
329 DO i=nsphactf,nsphactl
331 voxel(iix(i),iiy(i),iiz(i))=0
subroutine sptrivox(nsn, x, bminma, nod2sp, nbx, nby, nbz, nlist, spbuf, jvois, jstor, jperm, dvois, ireduce, nsphactf, nsphactl, voxel, kxsp, ixsp, kreduce, ipartsp, sz_intp_dist, max_intp_dist_part, pre_search)