53 SUBROUTINE spbuc3(X ,KXSP ,IXSP ,NOD2SP,NSN ,
54 2 SPBUF ,MA ,JVOIS ,JSTOR ,JPERM ,
55 3 DVOIS ,IREDUCE,BMINMA,NSNR ,NSP2SORTF,
56 4 NSP2SORTL,ITASK,KREDUCE,LGAUGE ,GAUGE )
68#include "implicit_f.inc"
78 INTEGER NSN, NSNR,NSP2SORTF,NSP2SORTL
80 INTEGER KXSP(NISP,*), IXSP(KVOISPH,*), NOD2SP(*),
81 . ma(*), jvois(*), jstor(*), jperm(*), ireduce,itask,
82 . kreduce(*),lgauge(3,*)
85 . x(3,*),spbuf(nspbuf,*),dvois(*), bminma(12), gauge(llgauge,*)
89 INTEGER :: I, N, INOD,JNOD,NVOIS,NVOIS1,NVOIS2,K,M,NN,NS,MS,JK,IERROR,JTASK,MY_ADRV
92 INTEGER (KIND=8) :: NBX8,NBY8,NBZ8,RES8,LVOXEL8
97 . ((bminma(7)-bminma(10))*(bminma(8)-bminma(11))
98 . +(bminma(8)-bminma(11))*(bminma(9)-bminma(12))
99 . +(bminma(9)-bminma(12))*(bminma(7)-bminma(10))))
103 nbx = nint(aaa*(bminma(7)-bminma(10)))
104 nby = nint(aaa*(bminma(8)-bminma(11)))
105 nbz = nint(aaa*(bminma(9)-bminma(12)))
113 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
116 IF(res8 > lvoxel8)
THEN
118 aaa = aaa/((nbx8+2)*(nby8+2)*(nbz8+2))
120 nbx = int((nbx+2)*aaa)-2
121 nby = int((nby+2)*aaa)-2
122 nbz = int((nbz+2)*aaa)-2
131 res8=(nbx8+2)*(nby8+2)*(nbz8+2)
133 IF(res8 > lvoxel8)
THEN
134 nbx =
min(100,
max(nbx8,1))
135 nby =
min(100,
max(nby8,1))
136 nbz =
min(100,
max(nbz8,1))
141 DO i=
inivoxel,(nbx+2)*(nby+2)*(nbz+2)
147 ALLOCATE(
kxspr(nsnr),
ixspr(kvoisph,nsnr),stat=ierror)
149 CALL ancmsg(msgid=248,anmode=aninfo_blind)
160 1 nsn ,nsnr ,x ,bminma ,nod2sp ,
161 2 nbx ,nby ,nbz ,marge ,itask ,
162 3 ma ,spbuf ,jvois ,jstor ,jperm ,
163 4 dvois ,ireduce,nsp2sortf,nsp2sortl,
voxel1 ,
164 5 kxsp ,ixsp ,kreduce ,lgauge ,gauge ,
173 ALLOCATE(
nv(numsph*nthread),
iv(numsph*nthread),
ivs(numsph),
174 .
kv(numsph),
iaux(kvoisph*(numsph+nsnr)),
178 CALL ancmsg(msgid=248,anmode=aninfo_blind)
185 nv(itask*numsph+1:(itask+1)*numsph)=0
187 DO ns=nsp2sortf,nsp2sortl
197 DO ns=nsp2sortf,nsp2sortl
205 IF(spbuf(1,m) < spbuf(1,n) .OR.
206 . (spbuf(1,m) == spbuf(1,n) .AND. kxsp(8,m) < kxsp(8,n)) )
THEN
209 nv(my_adrv+ms)=
nv(my_adrv+ms)+1
218 DO n=itask+1,nsnr,nthread
225 print *,
'internal error'
229 nv(my_adrv+ms)=
nv(my_adrv+ms)+1
244 iv(ns+1)=
iv(ns+1)+
nv((jtask-1)*numsph+ns)
254 DO ns=nsp2sortf,nsp2sortl
259 DO ns=nsp2sortf,nsp2sortl
260 iv(jtask*numsph+ns)=
iv((jtask-1)*numsph+ns)+
nv((jtask-1)*numsph+ns)
268 DO ns=nsp2sortf,nsp2sortl
276 IF(spbuf(1,m) < spbuf(1,n) .OR.
277 . (spbuf(1,m) == spbuf(1,n) .AND. kxsp(8,m) < kxsp(8,n)) )
THEN
280 iaux(
iv(itask*numsph+ms))=inod
281 iv(itask*numsph+ms)=
iv(itask*numsph+ms)+1
290 DO n=itask+1,nsnr,nthread
297 print *,
'internal error'
301 iaux(
iv(itask*numsph+ms))=-n
302 iv(itask*numsph+ms)=
iv(itask*numsph+ms)+1
311 DO ns=nsp2sortf,nsp2sortl
327 aaa = spbuf(1,n)+spbuf(1,m)
333 aaa = spbuf(1,n)+xsphr(2,nn)
342 d2 = d1x*d1x+d1y*d1y+d1z*d1z
351 nvoiss=nvoiss+
nv((jtask-1)*numsph+ns)
354 IF(nvois>kvoisph)
THEN
366 aaa = spbuf(1,n)+spbuf(1,m)
372 aaa = spbuf(1,n)+xsphr(2,nn)
381 d2 = d1x*d1x+d1y*d1y+d1z*d1z
383 jvois(kxsp(5,n)+k)=jnod
384 dvois(kxsp(5,n)+k)=d2/aaa2
389 IF(kreduce(n)/=0 .AND. nvois > kvoisph)
THEN
392 CALL myqsort(nvois,dvois,jperm,ierror)
397 jvois(k)=jstor(jperm(k))
429 IF(nvois1>lvoisph)ireduce=1
subroutine spbuc3(x, kxsp, ixsp, nod2sp, nsn, spbuf, ma, jvois, jstor, jperm, dvois, ireduce, bminma, nsnr, nsp2sortf, nsp2sortl, itask, kreduce, lgauge, gauge)
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)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)