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,
72 . k, jk, nc, js, ns, nn, nb,jj1,jj2, jj, jjj,
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)
334 dvois(k) = kxsp(8,nod2sp(jk))
336 dvois(k) = nint(xsphr(6,-jk))
339 CALL myqsort(nvois1,dvois,jperm,ierror)
344 ixsp(k,n) = jstor(jperm(k))
349 DO ns=itask+1,nsp2sort,nthread
360 DO k=nvois2+1,nvois2+nvoiss
372 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
373 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
378 mwa(kvoisph+nvoiss2)=jk
381 nc=mod(-jk,nspcond+1)
390 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
391 IF (nint(xsphr(13,m))/=0.AND.dd<dms2)
THEN
396 mwa(kvoisph+nvoiss2)=jk
402 ixsp(nvois2+j,n)=mwa(j)
405 ixsp(nvois2+nvoiss1+j,n)=mwa(kvoisph+j)
410 jk = ixsp(nvois2+k,n)
419 nc=mod(-jk,nspcond+1)
420 dvois(k) = xsphr(6,m)
424 CALL myqsort(nvoiss1,dvois,jperm,ierror
426 jstor(k) = ixsp(nvois2+k,n)
429 ixsp(nvois2+k,n) = jstor(jperm(k))
435 mwa(k) = jstor(jperm(k))
442 IF(nint(dvois(k))/=m)
THEN
449 IF(mwa(jj)>mwa(jjj))
THEN
453 iaux = ixsp(nvois2+jj,n)
454 ixsp(nvois2+jj,n) = ixsp(nvois2+jjj,n)
455 ixsp(nvois2+jjj,n) = iaux
473 IF(mwa(jj)>mwa(jjj))
THEN
477 iaux = ixsp(nvois2+jj,n)
478 ixsp(nvois2+jj,n) = ixsp(nvois2+jjj,n)
479 ixsp(nvois2+jjj,n) = iaux
489 DO ns=itask+1,nsp2sort,nthread
505 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
506 dms =spbuf(1,n)+spbuf(1,m)
508 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
513 mwa(kvoisph+nvois2)=jnod
520 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
521 dms =spbuf(1,n)+xsphr(2,nn)
523 IF (nint(xsphr(13,nn))/=0.AND.dd<dms2)
THEN
529 mwa(kvoisph+nvois2)=jnod
539 ixsp(nvois1+j,n)=mwa(kvoisph+j)
544 DO ns=itask+1,nsp2sort,nthread
555 DO k=nvois2+1,nvois2+nvoiss
567 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
568 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
573 mwa(kvoisph+nvoiss2)=jk
576 nc=mod(-jk,nspcond+1)
585 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
586 IF (nint(xsphr(13,m))/=0.AND.dd<dms2)
THEN
591 mwa(kvoisph+nvoiss2)=jk
597 ixsp(nvois2+j,n)=mwa(j)
600 ixsp(nvois2+nvoiss1+j,n)=mwa(kvoisph+j)
602 ENDDO ! ns=itask+1,nsp2sort,nthread
607 IF(lgauge(1,ig) > -(numels+1))cycle
622 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
625 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
637 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
640 IF (nint(xsphr(13,nn))/=0.AND.dd<dms2)
THEN
646 mwa(kvoisph+nvois2)=jnod
656 ixsp(nvois1+j,n)=mwa(kvoisph+j)
664 DO k=nvois2+1,nvois2+nvoiss
676 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
677 IF (kxsp(2,m)/=0.AND.dd<dms2)
THEN
682 mwa(kvoisph+nvoiss2)=jk
685 nc=mod(-jk,nspcond+1)
694 dd=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
695 IF (nint(xsphr(13,m))/=0.AND.dd<dms2)
THEN
700 mwa(kvoisph+nvoiss2)=jk
706 ixsp(nvois2+j,n)=mwa(j)
709 ixsp(nvois2+nvoiss1+j,n)=mwa(kvoisph+j)