34 SUBROUTINE sphreqs(NSEG ,ISEG ,X ,NCEL ,IXP ,
35 2 LONFSPH ,KXSP ,NSX ,ISX ,NSY ,
36 3 ISY ,NSZ ,ISZ ,NPX ,IPX ,
37 4 NPY ,IPY ,NPZ ,IPZ ,DPS ,
38 5 WNORMAL ,DT_OLD,MASS_CUM,V,SPBUF ,
43#include "implicit_f.inc"
52 INTEGER NSEG,ISEG(,*),NCEL,IXP(*),
53 . LONFSPH(*),KXSP(NISP,*),
54 . NSX(0:*),ISX(*),NSY(0:*),ISY(*),NSZ(0:*),ISZ(*),
55 . NPX(0:*),IPX(*),NPY(0:*),IPY(*),NPZ(0:*),IPZ(*),ITYPE
57 . x(3,*),dps(*),wnormal
62 . NBX,NBY,NBZ,NBAUX,NBAUY,NBAUZ,
63 . NBX1,NBY1,NBZ1,NBX2,NBY2,NBZ2
67 . dboitex,dboitey,dboitez,xi,yi,zi,nn,xx(12),dps_old
69 dps_old = -huge(dps_old)
74 dboitex=
max(em20,(xbmax-xbmin)/nbox)
75 dboitey=
max(em20,(ybmax-ybmin)/nboy)
76 dboitez=
max(em20,(zbmax-zbmin)/nboz)
83 in=kxsp(3,lonfsph(ixp(n)))
85 nbx=int((xi-xbmin)/dboitex)+1
87 IF(nbx>=1.AND.nbx<=nbox+1)
THEN
92 npx(ib)=npx(ib)+npx(ib-1)
98 in=kxsp(3,lonfsph(ixp(n)))
100 nbx=int((xi-xbmin)/dboitex)+1
102 IF(nbx>=1.AND.nbx<=nbox+1)
THEN
115 nbx1=int((xi-xbmin)/dboitex)+1
118 nbx2=int((xi-xbmin)/dboitex)+1
121 nbx3=int((xi-xbmin)/dboitex)+1
124 nbx4=int((xi-xbmin)/dboitex)+1
126 DO nbaux=
min(nbx1,nbx2,nbx3,nbx4)-1,
127 .
max(nbx1,nbx2,nbx3,nbx4)+1
128 IF(nbaux>=1.AND.nbaux<=nbox+1)
THEN
129 nsx(nbaux)=nsx(nbaux)+1
134 nsx(ib)=nsx(ib)+nsx(ib-1)
142 nbx1=int((xi-xbmin)/dboitex)+1
145 nbx2=int((xi-xbmin)/dboitex)+1
148 nbx3=int((xi-xbmin)/dboitex)+1
151 nbx4=int((xi-xbmin)/dboitex)+1
153 DO nbaux=
min(nbx1,nbx2,nbx3,nbx4)-1,
154 .
max(nbx1,nbx2,nbx3,nbx4)+1
155 IF(nbaux>=1.AND.nbaux<=nbox+1)
THEN
156 nsx(nbaux)=nsx(nbaux)+1
166 DO ks=npx(ibx-1)+1,npx(ibx)
168 in=kxsp(3,lonfsph(ixp(n)))
170 nby=int((yi-ybmin)/dboitey)+1
172 IF(nby>=1.AND.nby<=nboy+1)
THEN
177 npy(iby)=npy(iby)+npy(iby-1)
182 DO ks=npx(ibx-1)+1,npx(ibx)
184 in=kxsp(3,lonfsph(ixp(n)))
186 nby=int((yi-ybmin)/dboitey)+1
188 IF(nby>=1.AND.nby<=nboy+1)
THEN
197 DO ks=nsx(ibx-1)+1,nsx(ibx)
201 nby1=int((yi-ybmin)/dboitey)+1
204 nby2=int((yi-ybmin)/dboitey)+1
207 nby3=int((yi-ybmin)/dboitey)+1
210 nby4=int((yi-ybmin)/dboitey)+1
212 DO nbauy=
min(nby1,nby2,nby3,nby4)-1,
213 .
max(nby1,nby2,nby3,nby4)+1
214 IF(nbauy>=1.AND.nbauy<=nboy+1)
THEN
215 nsy(nbauy)=nsy(nbauy)+1
221 nsy(iby)=nsy(iby)+nsy(iby-1)
227 DO ks=nsx(ibx-1)+1,nsx(ibx)
231 nby1=int((yi-ybmin)/dboitey)+1
234 nby2=int((yi-ybmin)/dboitey)+1
237 nby3=int((yi-ybmin)/dboitey)+1
240 nby4=int((yi-ybmin)/dboitey)+1
242 DO nbauy=
min(nby1,nby2,nby3,nby4)-1,
243 .
max(nby1,nby2,nby3,nby4)+1
244 IF(nbauy>=1.AND.nbauy<=nboy+1)
THEN
245 nsy(nbauy)=nsy(nbauy)+1
256 DO ks=npy(iby-1)+1,npy(iby)
258 in=kxsp(3,lonfsph(ixp(n)))
260 nbz=int((zi-zbmin)/dboitez)+1
262 IF(nbz>=1.AND.nbz<=nboz+1)
THEN
267 npz(ibz)=npz(ibz)+npz(ibz-1)
272 DO ks=npy(iby-1)+1,npy(iby)
274 in=kxsp(3,lonfsph(ixp(n)))
276 nbz=int((zi-zbmin)/dboitez)+1
278 IF(nbz>=1.AND.nbz<=nboz+1)
THEN
287 DO ks=nsy(iby-1)+1,nsy(iby)
291 nbz1=int((zi-zbmin)/dboitez)+1
294 nbz2=int((zi-zbmin)/dboitez)+1
297 nbz3=int((zi-zbmin)/dboitez)+1
300 nbz4=int((zi-zbmin)/dboitez)+1
302 DO nbauz=
min(nbz1,nbz2,nbz3,nbz4)-1,
303 .
max(nbz1,nbz2,nbz3,nbz4)+1
304 IF(nbauz>=1.AND.nbauz<=nboz+1)
THEN
305 nsz(nbauz)=nsz(nbauz)+1
310 nsz(ibz)=nsz(ibz)+nsz(ibz-1)
315 DO ks=nsy(iby-1)+1,nsy(iby)
319 nbz1=int((zi-zbmin)/dboitez)+1
322 nbz2=int((zi-zbmin)/dboitez)+1
325 nbz3=int((zi-zbmin)/dboitez)+1
328 nbz4=int((zi-zbmin)/dboitez)+1
330 DO nbauz=
min(nbz1,nbz2,nbz3,nbz4)-1,
331 .
max(nbz1,nbz2,nbz3,nbz4)+1
332 IF(nbauz>=1.AND.nbauz<=nboz+1)
THEN
333 nsz(nbauz)=nsz(nbauz)+1
340 DO kp=npz(ibz-1)+1,npz(ibz)
345 wnormal(1,lonfsph(ixp(np)))=zero
346 wnormal(2,lonfsph(ixp(np)))=zero
347 wnormal(3,lonfsph(ixp(np)))=zero
348 in=kxsp(3,lonfsph(ixp(np)))
349 xi =x(1,in)-dt_old*v(1,in)
350 yi =x(2,in)-dt_old*v(2,in)
351 zi =x(3,in)-dt_old*v(3,in)
353 DO ks=nsz(ibz-1)+1,nsz(ibz)
357 xx(3*(j-1)+1)=x(1,in)-dt_old*v(1,in)
358 xx(3*(j-1)+2)=x(2,in)-dt_old*v(2,in)
359 xx(3*(j-1)+3)=x(3,in)-dt_old*v(3,in)
361 IF (iseg(3,ns)/=iseg(4,ns))
THEN
366 CALL sph_nodseg(xi,yi,zi,xx,tflag,np,lonfsph,ixp,dps,wnormal,0)
372 wnormal(1,lonfsph(ixp(np)))=zero
373 wnormal(2,lonfsph(ixp(np)))=zero
374 wnormal(3,lonfsph(ixp(np)))=zero
375 in=kxsp(3,lonfsph(ixp(np)))
380 DO ks=nsz(ibz-1)+1,nsz(ibz)
384 xx(3*(j-1)+1)=x(1,in)
385 xx(3*(j-1)+2)=x(2,in)
386 xx(3*(j-1)+3)=x(3,in)
388 IF (iseg(3,ns)/=iseg(4,ns))
THEN
393 CALL sph_nodseg(xi,yi,zi,xx,tflag,np,lonfsph,ixp,dps,wnormal,0)
398 IF (dps_old*dps(np)<zero)
THEN
400 IF (itype/=4) dps_old = -dps_old
402 IF (dps_old>zero) mass_cum = mass_cum-spbuf(12,n)
404 IF (dps_old<zero) mass_cum = mass_cum+spbuf(12,n)
408 nn=wnormal(1,lonfsph(ixp(np)))*wnormal(1,lonfsph(ixp(np)))
409 . +wnormal(2,lonfsph(ixp(np)))*wnormal(2,lonfsph(ixp(np)))
410 . +wnormal(3,lonfsph(ixp(np)))*wnormal(3,lonfsph(ixp(np)))
411 nn=one/
max(em20,sqrt(nn))
412 wnormal(1,lonfsph(ixp(np)))=wnormal(1,lonfsph(ixp(np)))*nn
413 wnormal(2,lonfsph(ixp(np)))=wnormal(2,lonfsph(ixp(np)))*nn
414 wnormal(3,lonfsph(ixp(np)))=wnormal(3,lonfsph(ixp(np)))*nn