37 2 SPBUF ,ITAB ,KXSP ,IXSP ,NOD2SP ,
38 3 NPC ,PLD ,ISPHIO ,VSPHIO ,IPART ,
39 4 IPARTSP ,WASPACT ,WA ,VNORMAL ,SPH_WORK,
49#include "implicit_f.inc"
62 INTEGER (NISP,*),IXSP(KVOISPH,*),NOD2SP(*),ITAB(*),NPC(*),
63 . ISPHIO(NISPHIO,*),IPART(LIPART1
66DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT
71 . II,IPT,JJ,NPF,IFVITS,
73 . IPPV,J,M,JNOD,IMPOSE,JMPOSE,
74 . nvois,ij,np,k,jmpose2,nn
77 . pentv,vx,vy,vz,vn,vt,ux,uy,uz,un1,nx,ny,nz,
79 . xi,yi,zi,xj,yj,zj,dmin,dd,dtinv,
80 . di,rhoi,dj,rhoj,dij,
81 . vxi,vyi,vzi,vxj,vyj,vzj,
83 . wght,wgrad(3),wgrdx,wgrdy,wgrdz,
84 . dxx,dxy,dxz,dyx,dyy,dyz,dzx,dzy,dzz,dt1d2,
85 . exx,exy,exz,eyx,eyy,eyz,ezx,ezy,ezz,
86 . alphai,alphaxi,alphayi,alphazi,alphai2,xp,yp,zp
90 my_real ,
DIMENSION(:,:),
ALLOCATABLE :: DSPHR
91 TYPE(SPH_WORK_) :: SPH_WORK
107 npf = (npc(ifvits+1)-npc(ifvits))/2
109 IF (t05<=pld(ii))
THEN
110 pentv=(pld(ii+3)-pld(ii+1))/(pld(ii+2)-pld(ii))
111 vn =pld(ii+1)+pentv*(t05-pld(ii))
112 ELSEIF (t05>=pld(ii+2*(npf-1)))
THEN
114 pentv=(pld(jj+1)-pld(jj-1))/(pld(jj)-pld(jj-2))
115 vn =pld(jj+1)+
max(-pld(jj+1),pentv*(t05-pld(jj)))
118 IF (pld(ii)<=t05.AND.t05<=pld(ii+2))
THEN
119 pentv=(pld(ii+3)-pld(ii+1))/(pld(ii+2)-pld(ii))
120 vn =pld(ii+1)+pentv*(t05-pld(ii))
138 impose=kxsp(2,n)/(ngroup+1)
140 itype=isphio(1,impose)
146 ux=v(1,inod)+a(1,inod)*dt12
147 uy=v(2,inod)+a(2,inod)*dt12
148 uz=v(3,inod)+a(3,inod)*dt12
152 un1=ux*nx+uy*ny+uz*nz
156 wfextt=wfextt+half*ms(inod)*
157 . ((vx*vx+vy*vy+vz*vz)-(ux*ux+uy*uy+uz*uz))
158 a(1,inod)=(vx-v(1,inod))*dtinv
159 a(2,inod)=(vy-v(2,inod))*dtinv
160 a(3,inod)=(vz-v(3,inod))*dtinv
169 ALLOCATE(sph_work%ASPHR(3,
nsphr))
170 ALLOCATE(dsphr(12,
nsphr))
173 . spbuf,v,a,sph_work%ASPHR,dsphr)
181 impose=kxsp(2,n)/(ngroup+1)
184 IF(isphio(1,impose)==2.OR.isphio(1,impose)
200 jmpose=kxsp(2,m)/(ngroup+1)
205 IF(isphio(1,jmpose) == 1)lbool=.true.
211 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
219 jmpose = nint(xsphr(12,nn))
221 jmpose2=isphio(1,jmpose)
225 IF(jmpose2==0.OR.jmpose2==1)
THEN
229 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
247 CALL weight0(xp,yp,zp,xp,yp,zp,di,wght)
248 vj=spbuf(12,np)/
max(em20,rhoi)
260 jmpose=kxsp(2,m)/(ngroup+1)
265 IF(isphio(1,jmpose) == 1)lbool=.true.
274 CALL weight1(xp,yp,zp,xj,yj,zj,dij,wght,wgrad)
275 vj=spbuf(12,m)/
max(em20,rhoj)
276 alphai =alphai +vj*wght
277 alphaxi=alphaxi+vj*wgrad(1)
278 alphayi=alphayi+vj*wgrad(2)
279 alphazi=alphazi+vj*wgrad(3)
283 jmpose = nint(xsphr(12,nn))
286 jmpose2=isphio(1,jmpose)
290 IF(jmpose2==0.OR.jmpose2==1)
THEN
297 CALL weight1(xp,yp,zp,xj,yj,zj,dij,wght,wgrad)
298 vj=xsphr(8,nn)/
max(em20,rhoj)
299 alphai =alphai +vj*wght
300 alphaxi=alphaxi+vj*wgrad(1)
301 alphayi=alphayi+vj*wgrad(2)
302 alphazi=alphazi+vj*wgrad(3)
307 alphai =one/
max(em20,alphai)
308 alphai2=alphai*alphai
309 alphaxi=-alphaxi*alphai2
310 alphayi=-alphayi*alphai2
311 alphazi=-alphazi*alphai2
313 vx =v(1,ippv)+dt12*a(1,ippv)
314 vy =v(2,ippv)+dt12*a(2,ippv)
315 vz =v(3,ippv)+dt12*a(3,ippv)
330 jmpose=kxsp(2,m)/(ngroup+1)
335 IF(isphio(1,jmpose) == 1)lbool=.true.
344 CALL weight1(xp,yp,zp,xj,yj,zj,dij,wght,wgrad)
345 wgrdx=wgrad(1)*alphai+wght*alphaxi
346 wgrdy=wgrad(2)*alphai+wght*alphayi
347 wgrdz=wgrad(3)*alphai+wght*alphazi
348 vj=spbuf(12,m)/
max(em20,rhoj)
349 vxj =v(1,jnod)+dt12*a(1,jnod)
350 vyj =v(2,jnod)+dt12*a(2,jnod)
351 vzj =v(3,jnod)+dt12*a(3,jnod)
367 jmpose = nint(xsphr(12,nn))
369 jmpose2=isphio(1,jmpose)
373 IF(jmpose2==0.OR.jmpose2==1)
THEN
380 CALL weight1(xp,yp,zp,xj,yj,zj,dij,wght,wgrad)
381 wgrdx=wgrad(1)*alphai+wght*alphaxi
382 wgrdy=wgrad(2)*alphai+wght*alphayi
383 wgrdz=wgrad(3)*alphai+wght*alphazi
384 vj=xsphr(8,nn)/
max(em20,rhoj)
385 vxj =xsphr(9,nn)+dt12*sph_work%ASPHR(1,nn)
386 vyj =xsphr(10,nn)+dt12*sph_work%ASPHR(2,nn)
387 vzj =xsphr(11,nn)+dt12*sph_work%ASPHR(3,nn)
425 vx=vx+(dxx*(xi-xp)+dxy*(yi-yp)+dxz*(zi-zp))
426 vy=vy+(dyx*(xi-xp)+dyy*(yi-yp)+dyz*(zi-zp))
427 vz=vz+(dzx*(xi-xp)+dzy*(yi-yp)+dzz*(zi-zp))
429 ps=vx*vnormal(1,n)+vy*vnormal(2,n)+vz*vnormal(3,n)
433 vx=vx-ps*vnormal(1,n)
434 vy=vy-ps*vnormal(2,n)
435 vz=vz-ps*vnormal(3,n)
437 ux=v(1,inod)+a(1,inod)*dt12
438 uy=v(2,inod)+a(2,inod)*dt12
439 uz=v(3,inod)+a(3,inod)*dt12
442 wfextt=wfextt+half*ms(inod)*(vt-(ux*ux+uy*uy+uz*uz))
443 a(1,inod)=(vx-v(1,inod))*dtinv
444 a(2,inod)=(vy-v(2,inod))*dtinv
445 a(3,inod)=(vz-v(3,inod))*dtinv
453 DEALLOCATE(sph_work%ASPHR,dsphr)