36 SUBROUTINE spclasv(X ,SPBUF ,KXSP ,IXSP ,NOD2SP ,
37 1 ISPSYM ,XSPSYM,WSP2SORT,ITASK ,MYSPATRUE,
38 2 IREDUCE,KREDUCE,LGAUGE ,GAUGE ,ISORTSP)
47#include "implicit_f.inc"
60 INTEGER KXSP(NISP,*),IXSP(KVOISPH,*),NOD2SP(*),
61 . ISPSYM(NSPCOND,*),WSP2SORT(*), ITASK, IREDUCE, KREDUCE(*),
65 . x(3,*),spbuf(nspbuf,*),xspsym(3,*), myspatrue, gauge(llgauge,*)
70 . n,inod,jnod,j,nvois,m,ncand,k1,k2,nvois1,nvois2,
71 . nvoiss,nvoiss1,nvoiss2, iaux, ierror,
73 . mwa(2*kvoisph),jstor(kvoisph), jperm(kvoisph),
77 . xi,yi,zi,di,xj,yj,zj,dj,dd,dvois(kvoisph),
80 LOGICAL :: SORTING_CONDITION
83 IF(ireduce==0)
GO TO 100
91 DO ns=itask+1,nsp2sort,nthread
96 IF(kreduce(n)/=0.OR.nvois1+nvoiss1>lvoisph)
THEN
98 IF(nvois1+nvoiss1>lvoisph)
THEN
99 kreduce(n)=kreduce(n)+10
109 ncand=kxsp(5,n)+kxsp(7,n)
127 dvois(k)=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
128 dvois(k)=dvois(k)/dms2
138 nc=mod(-jk,nspcond+1)
148 dvois(k)=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
149 dvois(k)=dvois(k)/dms2
152 sorting_condition = (.NOT.(
bool_sph_sort(n)).OR.isortsp==0.OR.nvois/=ncand)
153 IF(sorting_condition)
THEN
154 CALL myqsort(ncand,dvois,jperm,ierror)
159 DO k=1,kxsp(5,n)-kxsp(4,n)+1
160 jperm(kxsp(4,n)+k) = kxsp(5,n)-k+1
168 IF(kreduce(n) >= 10)dwa(n)=sqrt(dvois(lvoisph))
174 IF(jperm(k) <= nvois)
THEN
179 ixsp(nvois+k2,n) = jk
194 DO ns=itask+1,nsp2sort,nthread
196 spbuf(1,n)=
min(spbuf(1,n),dwa(n)*spbuf(1,n))
197 spbuf(8,n)=spbuf(1,n)
219 DO ns=itask+1,nsp2sort,nthread
222 IF(mod(kreduce(n),10)/=0)
THEN
249 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
253 myspatrue=
max(zero,
min(myspatrue,dk-one))
260 DO n = itask+1,
nsphr,nthread
267 DO n = itask+1,
nsphr,nthread
276 DO ns=itask+1,nsp2sort,nthread
292 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
293 dms =spbuf(1,n)+spbuf(1,m)
295 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
300 mwa(kvoisph+nvois2)=jnod
307 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
308 dms =spbuf(1,n)+xsphr(2,nn)
310 IF (nint(xsphr(13,nn))/=0.AND.dd<dms2)
THEN
316 mwa(kvoisph+nvois2)=jnod
326 ixsp(nvois1+j,n)=mwa(kvoisph+j)
333 dvois(k) = kxsp(8,nod2sp(jk))
335 dvois(k) = nint(xsphr(6,-jk))
338 CALL myqsort(nvois1,dvois,jperm,ierror)
343 ixsp(k,n) = jstor(jperm(k))
348 DO ns=itask+1,nsp2sort,nthread
359 DO k=nvois2+1,nvois2+nvoiss
371 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
372 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
377 mwa(kvoisph+nvoiss2)=jk
379 ELSE ! particule symetrique de particule remote
380 nc=mod(-jk,nspcond+1)
389 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
390 IF (nint(xsphr(13,m))/=0.AND.dd<dms2)
THEN
401 ixsp(nvois2+j,n)=mwa(j)
404 ixsp(nvois2+nvoiss1+j,n)=mwa(kvoisph+j)
408 jk = ixsp(nvois2+k,n)
417 nc=mod(-jk,nspcond+1)
418 dvois(k) = xsphr(6,m)
422 CALL myqsort(nvoiss1,dvois,jperm,ierror)
424 jstor(k) = ixsp(nvois2+k,n)
427 ixsp(nvois2+k,n) = jstor(jperm(k))
433 mwa(k) = jstor(jperm(k))
440 IF(nint(dvois(k))/=m)
THEN
447 IF(mwa(jj)>mwa(jjj))
THEN
451 iaux = ixsp(nvois2+jj,n)
452 ixsp(nvois2+jj,n) = ixsp(nvois2+jjj,n)
453 ixsp(nvois2+jjj,n) = iaux
471 IF(mwa(jj)>mwa(jjj))
THEN
475 iaux = ixsp(nvois2+jj,n)
476 ixsp(nvois2+jj,n) = ixsp(nvois2+jjj,n)
477 ixsp(nvois2+jjj,n) = iaux
487 DO ns=itask+1,nsp2sort,nthread
503 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
504 dms =spbuf(1,n)+spbuf(1,m)
506 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
511 mwa(kvoisph+nvois2)=jnod
518 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi
519 dms =spbuf(1,n)+xsphr(2,nn)
521 IF (nint(xsphr(13,nn))/=0.AND.dd<dms2)
THEN
527 mwa(kvoisph+nvois2)=jnod
537 ixsp(nvois1+j,n)=mwa(kvoisph+j)
542 DO ns=itask+1,nsp2sort,nthread
553 DO k=nvois2+1,nvois2+nvoiss
565 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
566 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
571 mwa(kvoisph+nvoiss2)=jk
574 nc=mod(-jk,nspcond+1)
583 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
584 IF (nint(xsphr(13,m))/=0.AND.dd<dms2)
THEN
589 mwa(kvoisph+nvoiss2)=jk
595 ixsp(nvois2+j,n)=mwa(j)
598 ixsp(nvois2+nvoiss1+j,n)=mwa(kvoisph+j)
600 ENDDO ! ns=itask+1,nsp2sort,nthread
603!$omp
DO schedule(dynamic,1)
605 IF(lgauge(1,ig) > -(numels+1))cycle
620 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
623 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
628 mwa(kvoisph+nvois2)=jnod
635 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
638 IF (nint(xsphr(13,nn))/=0.AND.dd<dms2)
THEN
644 mwa(kvoisph+nvois2)=jnod
654 ixsp(nvois1+j,n)=mwa(kvoisph+j)
662 DO k=nvois2+1,nvois2+nvoiss
674 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
675 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
680 mwa(kvoisph+nvoiss2)=jk
683 nc=mod(-jk,nspcond+1)
692 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
693 IF (nint(xsphr(13,m))/=0.AND.dd<dms2)
THEN
698 mwa(kvoisph+nvoiss2)=jk
704 ixsp(nvois2+j,n)=mwa(j)
707 ixsp(nvois2+nvoiss1+j,n)=mwa(kvoisph+j)