32
33
34
35
36
37
38#include "implicit_f.inc"
39
40
41
42#include "sphcom.inc"
43
44
45
46 INTEGER KXSP(NISP,*),IXSP(KVOISPH,*),NOD2SP(*),
47 . WASPACT(*), IREDUCE, KREDUCE(*)
49 . x(3,*),spbuf(nspbuf,*), myspatrue
50
51
52
53 integer
54 . n,inod,jnod,j,nvois,m,ncand,k1,k2,nvois1,nvois2,
55 . nvoiss,nvoiss1,nvoiss2, iaux, ierror,
56 . k, l, jk, nc, js, ns, nn, nb,jj1,jj2, jj, jjj,
57 . mwa(2*kvoisph),jstor(kvoisph), jperm(kvoisph),
58 . lvoired, ig
60 . dms,dms2,dk,
61 . xi,yi,zi,di,xj,yj,zj,dj,dd,dvois(kvoisph),
62 . dwa(numsph)
63 SAVE lvoired
64
65
66 DO ns=1,nsphact
67 n=waspact(ns)
68 inod=kxsp(3,n)
69 xi=x(1,inod)
70 yi=x(2,inod)
71 zi=x(3,inod)
72 di=spbuf(1,n)
73 nvois=kxsp(5,n)
74 DO k=1,nvois
75 jnod = ixsp(k,n)
76 m =nod2sp(jnod)
77 xj=x(1,jnod)
78 yj=x(2,jnod)
79 zj=x(3,jnod)
80 dj=spbuf(1,m)
81 dms =di+dj
82 dms2=dms*dms
83 dvois(k)=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
84 dvois(k)=dvois(k)/dms2
85 END DO
86
87 CALL myqsort(nvois,dvois,jperm,ierror)
88 DO k=1,nvois
89 jstor(k) = ixsp(k,n)
90 END DO
91
92 k1=0
93 DO k=1,nvois
94 jk=jstor(jperm(k))
95 k1=k1+1
96 ixsp(k1,n) = jk
97 END DO
98
99
100
101 IF (nspbuf==15) THEN
102 spbuf(15,n)=two*sqrt(dvois(1))
103 ENDIF
104
105 END DO
106
107 lvoired = 0
108 IF(ireduce==0)GO TO 100
109
110
111
112 DO ns=1,nsphact
113 n=waspact(ns)
114 dwa(n)=one
115 nvois1 =kxsp(4,n)
116 IF(kreduce(n)/=0.OR.nvois1>lvoisph)THEN
117
118 IF(nvois1>lvoisph)THEN
119 kreduce(n)=kreduce(n)+10
120 lvoired = 1
121 END IF
122
123 inod=kxsp(3,n)
124 xi=x(1,inod)
125 yi=x(2,inod)
126 zi=x(3,inod)
127 di=spbuf(1,n)
128 nvois=kxsp(5,n)
129 DO k=1,nvois
130 jnod = ixsp(k,n)
131 m =nod2sp(jnod)
132 xj=x(1,jnod)
133 yj=x(2,jnod)
134 zj=x(3,jnod)
135 dj=spbuf(1,m)
136 dms =di+dj
137 dms2=dms*dms
138 dvois(k)=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
139 dvois(k)=dvois(k)/dms2
140 END DO
141
142 CALL myqsort(nvois,dvois,jperm,ierror)
143 DO k=1,nvois
144 jstor(k) = ixsp(k,n)
145 END DO
146
147 IF(kreduce(n) >= 10)dwa(n)=sqrt(dvois(lvoisph))
148
149 k1=0
150 DO k=1,nvois
151 jk=jstor(jperm(k))
152 k1=k1+1
153 ixsp(k1,n) = jk
154 END DO
155
156 END IF
157 END DO
158
159
160
161 IF(lvoired /= 0)THEN
162
163 DO ns=1,nsphact
164 n=waspact(ns)
165 spbuf(1,n)=
min(spbuf(1,n),dwa(n)*spbuf(1,n))
166 spbuf(8,n)=spbuf(1,n)
167 END DO
168 END IF
169
170 DO ns=1,nsphact
171 n=waspact(ns)
172
173 IF(mod(kreduce(n),10)/=0)THEN
174
175 nvois1 =kxsp(4,n)
176 nvois =kxsp(5,n)
177 inod=kxsp(3,n)
178 xi=x(1,inod)
179 yi=x(2,inod)
180 zi=x(3,inod)
181 di=spbuf(1,n)
182
183 jnod = ixsp(nvois,n)
184 m =nod2sp(jnod)
185 xj=x(1,jnod)
186 yj=x(2,jnod)
187 zj=x(3,jnod)
188 dj=spbuf(1,m)
189 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
190 dms =di+dj
191 dms2=dms*dms
192 dk=dd/dms2
193 myspatrue=
max(zero,
min(myspatrue,dk-one))
194 END IF
195
196 END DO
197
198 100 CONTINUE
199
200 RETURN
subroutine myqsort(n, a, perm, error)