39 1 ITASK ,V ,A ,MS ,PM ,
40 2 IPART ,IXS ,IPARTS ,KXSP ,IPARTSP ,
41 3 IRST ,SPBUF ,PARTSAV ,SOL2SPH ,IPARG ,
42 4 NGROUNC ,IGROUNC ,ELBUF_TAB,IGEO)
50#include "implicit_f.inc"
63#include "vect01_c.inc"
67 INTEGER IXS(NIXS,*), KXSP(NISP,*), ITASK,
68 . IPARTSP(*), (3,*), NGROUNC, IGROUNC(*),
69 . IPARTS(*), IPARG(NPARG,*), SOL2SPH(2,*), IPART(LIPART1,*),
72 . v(3,*), a(3,*), spbuf(nspbuf,*), ms(*), partsav(npsav,*),
74 TYPE (ELBUF_STRUCT_),
TARGET,
DIMENSION(NGROUP) ::
78 INTEGER I, J, IR, IS, IT, KP, NP, N, INOD, IG, NG, MG, NEL,
79 . N1, N2, N3, N4, N5, N6, N7, N8, IPRT, IMAT,
80 . NELEM, OFFSET, NSPHDIR, KFT, IERROR
83 . vx1,vx2,vx3,vx4,vx5,vx6,vx7,vx8,
84 . vy1,vy2,vy3,vy4,vy5,vy6,vy7,vy8,
85 . vz1,vz2,vz3,vz4,vz5,vz6,vz7,vz8,
86 . phi1,phi2,phi3,phi4,phi5,phi6,phi7,phi8,
88 . vxi, vyi, vzi, usdt, dt05,
89 . xmass_t, xmomt_t, ymomt_t, zmomt_t, encin_t,
92 TYPE(g_bufel_) ,
POINTER :: GBUF, GBUFSP
93 TYPE(L_BUFEL_) ,
POINTER :: LBUF
94 TYPE(BUF_MAT_) ,
POINTER :: MBUF
97 . a_gauss(9,9),a_gauss_tetra(9,9)
105 3 -.666666666666666,0. ,0.666666666666666,
114 6 -.833333333333333,-.5 ,-.166666666666666,
115 6 0.166666666666666,0.5 ,0.833333333333333,
117 7 -.857142857142857,-.571428571428571,-.285714285714285,
118 7 0. ,0.285714285714285,0.571428571428571,
119 7 0.857142857142857,0. ,0. ,
120 8 -.875 ,-.625 ,-.375 ,
121 8 -.125 ,0.125 ,0.375,
123 9 -.888888888888888,-.666666666666666,-.444444444444444,
125 9 0.444444444444444,0.666666666666666,0.888888888888888/
128 1 0.250000000000000,0.000000000000000,0.000000000000000,
129 1 0.000000000000000,0.000000000000000,0.000000000000000,
130 1 0.000000000000000,0.000000000000000,0.000000000000000,
131 2 0.166666666666667,0.500000000000000,0.000000000000000,
132 2 0.000000000000000,0.000000000000000,0.000000000000000,
133 2 0.000000000000000,0.000000000000000,0.000000000000000,
134 3 0.125000000000000,0.375000000000000,0.625000000000000,
135 3 0.000000000000000,0.000000000000000,0.000000000000000,
136 3 0.000000000000000,0.000000000000000,0.000000000000000,
137 4 0.100000000000000,0.300000000000000,0.500000000000000,
138 4 0.700000000000000,0.000000000000000,0.000000000000000,
139 4 0.000000000000000,0.000000000000000,0.000000000000000,
140 5 0.083333333333333,0.250000000000000,0.416666666666667,
141 5 0.583333333333333,0.750000000000000,0.000000000000000,
142 5 0.000000000000000,0.000000000000000,0.000000000000000,
143 6 0.071428571428571,0.214285714285714,0.357142857142857,
144 6 0.500000000000000,0.642857142857143,0.785714285714286,
145 6 0.000000000000000,0.000000000000000,0.000000000000000,
146 7 0.062500000000000,0.187500000000000,0.312500000000000,
147 7 0.437500000000000,0.562500000000000,0.687500000000000,
148 7 0.812500000000000,0.000000000000000,0.000000000000000,
149 8 0.055555555555556,0.166666666666667,0.277777777777778,
150 8 0.388888888888889,0.500000000000000,0.611111111111111,
151 8 0.722222222222222,0.833333333333333,0.000000000000000,
152 9 0.050000000000000,0.150000000000000,0.250000000000000,
153 9 0.350000000000000,0.450000000000000,0.550000000000000,
154 9 0.650000000000000,0.750000000000000,0.850000000000000/
157 ALLOCATE(wpartsav(nthread,npsav,npart),stat=ierror)
159 CALL ancmsg(msgid=19,anmode=aninfo,
160 . c1=
'(SOLIDS to SPH)')
174 DO iprt=itask+1,npart,nthread
177 wpartsav(i,j,iprt)=zero
185 IF(iparg(8,ng)==1)
GOTO 250
187 DO nelem = 1,iparg(2,ng),nvsiz
190 nft =iparg(3,ng) + offset
193 ipartsph=iparg(69,ng)
195 llt=
min(nvsiz,nel-nelem+1)
196 IF(ity==1.AND.ipartsph/=0)
THEN
198 gbuf => elbuf_tab(ng)%GBUF
199 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
200 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
204 IF (iparg(28,ng)==4)
THEN
208 IF(gbuf%OFF(i)==zero) cycle
212 vx1=v(1,n1)+dt12*a(1,n1)
213 vy1=v(2,n1)+dt12*a(2,n1)
214 vz1=v(3,n1)+dt12*a(3,n1)
216 vx2=v(1,n2)+dt12*a(1,n2)
217 vy2=v(2,n2)+dt12*a(2,n2)
218 vz2=v(3,n2)+dt12*a(3,n2)
220 vx3=v(1,n3)+dt12*a(1,n3)
221 vy3=v(2,n3)+dt12*a(2,n3)
222 vz3=v(3,n3)+dt12*a(3,n3)
224 vx4=v(1,n4)+dt12*a(1,n4)
225 vy4=v(2,n4)+dt12*a(2,n4)
226 vz4=v(3,n4)+dt12*a(3,n4)
228 nsphdir=igeo(37,ixs(10,n))
230 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
232 ir=irst(1,np-first_sphsol+1)
233 is=irst(2,np-first_sphsol+1)
234 it=irst(3,np-first_sphsol+1)
235 ksi = a_gauss_tetra(ir,nsphdir)
236 eta = a_gauss_tetra(is,nsphdir)
237 zeta = a_gauss_tetra(it,nsphdir)
244 vxi=phi1*vx1+phi2*vx2+phi3*vx3+phi4*vx4
245 vyi=phi1*vy1+phi2*vy2+phi3*vy3+phi4*vy4
246 vzi=phi1*vz1+phi2*vz2+phi3*vz3+phi4*vz4
249 a(1,inod)=(vxi-v(1,inod))*usdt
250 a(2,inod)=(vyi-v(2,inod))*usdt
251 a(3,inod)=(vzi-v(3,inod))*usdt
261 IF(gbuf%OFF(i)==zero) cycle
265 vx1=v(1,n1)+dt12*a(1,n1)
266 vy1=v(2,n1)+dt12*a(2,n1)
269 vx2=v(1,n2)+dt12*a(1,n2)
270 vy2=v(2,n2)+dt12*a(2,n2)
271 vz2=v(3,n2)+dt12*a(3,n2)
273 vx3=v(1,n3)+dt12*a(1,n3)
274 vy3=v(2,n3)+dt12*a(2,n3)
275 vz3=v(3,n3)+dt12*a(3,n3)
277 vx4=v(1,n4)+dt12*a(1,n4)
278 vy4=v(2,n4)+dt12*a(2,n4)
279 vz4=v(3,n4)+dt12*a(3,n4)
281 vx5=v(1,n5)+dt12*a(1,n5)
282 vy5=v(2,n5)+dt12*a(2,n5)
283 vz5=v(3,n5)+dt12*a(3,n5)
285 vx6=v(1,n6)+dt12*a(1,n6)
286 vy6=v(2,n6)+dt12*a(2,n6)
287 vz6=v(3,n6)+dt12*a(3,n6)
289 vx7=v(1,n7)+dt12*a(1,n7)
290 vy7=v(2,n7)+dt12*a(2,n7)
291 vz7=v(3,n7)+dt12*a(3,n7)
293 vx8=v(1,n8)+dt12*a(1,n8)
294 vy8=v(2,n8)+dt12*a(2,n8)
295 vz8=v(3,n8)+dt12*a(3,n8)
298 nsphdir=nint((sol2sph(2,n)-sol2sph(1,n))**third)
300 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
302 ir=irst(1,np-first_sphsol+1)
303 is=irst(2,np-first_sphsol+1)
304 it=irst(3,np-first_sphsol+1)
305 ksi = a_gauss(ir,nsphdir)
306 eta = a_gauss(is,nsphdir)
307 zeta = a_gauss(it,nsphdir)
309 phi1=(one-ksi)*(one-eta)*(one-zeta)
310 phi2=(one-ksi)*(one-eta)*(one+zeta)
311 phi3=(one+ksi)*(one-eta)*(one+zeta)
312 phi4=(one+ksi)*(one-eta)*(one-zeta)
313 phi5=(one-ksi)*(one+eta)*(one-zeta)
314 phi6=(one-ksi)*(one+eta)*(one+zeta)
315 phi7=(one+ksi)*(one+eta)*(one+zeta)
316 phi8=(one+ksi)*(one+eta)*(one-zeta)
317 vxi=one_over_8*(phi1*vx1+phi2*vx2+phi3*vx3+phi4*vx4+
318 . phi5*vx5+phi6*vx6+phi7*vx7+phi8*vx8)
319 vyi=one_over_8*(phi1*vy1+phi2*vy2+phi3*vy3+phi4*vy4+
320 . phi5*vy5+phi6*vy6+phi7*vy7+phi8*vy8)
321 vzi=one_over_8*(phi1*vz1+phi2*vz2+phi3*vz3+phi4*vz4+
322 . phi5*vz5+phi6*vz6+phi7*vz7+phi8*vz8)
325 a(1,inod)=(vxi-v(1,inod
326 a(2,inod)=(vyi-v(2,inod))*usdt
327 a(3,inod)=(vzi-v(3,inod))*usdt
344 IF(iparg(8,ng)==1)
GOTO 350
346 DO nelem = 1,iparg(2,ng),nvsiz
349 nft =iparg(3,ng) + offset
352 ipartsph=iparg(69,ng)
354 llt=
min(nvsiz,nel-nelem+1)
355 IF(ity==1.AND.ipartsph/=0)
THEN
357 gbuf => elbuf_tab(ng)%GBUF
358 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
359 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
363 IF(gbuf%OFF(i)/=zero)
THEN
367 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
370 mg =mod(-kxsp(2,np),ngroup+1)
373 vxi=v(1,inod)+dt05*a(1,inod)
374 vyi=v(2,inod)+dt05*a(2,inod)
375 vzi=v(3,inod)+dt05*a(3,inod)
376 xmass_t=xmass_t-ms(inod)
377 xmomt_t=xmomt_t-ms(inod)*vxi
378 ymomt_t=ymomt_t-ms(inod)*vyi
379 zmomt_t=zmomt_t-ms(inod)*vzi
381 . -half*ms(inod)*(vxi*vxi+vyi*vyi+vzi*vzi)
385 IF(iparg(8,mg)==1)cycle
388 gbufsp => elbuf_tab(mg)%GBUF
390 wpartsav(itask+1,1,iprt)=wpartsav(itask+1,1,iprt)
391 . -gbufsp%VOL(np-kft)*gbufsp%EINT(np-kft)
392 wpartsav(itask+1,2,iprt)=wpartsav(itask+1,2,iprt)
393 . -half*ms(inod)*(vxi*vxi+vyi*vyi+vzi*vzi)
394 wpartsav(itask+1,3,iprt)=wpartsav(itask+1,3,iprt)
396 wpartsav(itask+1,4,iprt)=wpartsav(itask+1,4,iprt)
398 wpartsav(itask+1,5,iprt
400 wpartsav(itask+1,6,iprt)=wpartsav(itask+1,6,iprt)
415 xmass=xmass + xmass_t
416 xmomt=xmomt + xmomt_t
417 ymomt=ymomt + ymomt_t
418 zmomt=zmomt + zmomt_t
419#include "lockoff.inc"
420 DO iprt=itask+1,npart,nthread
423 partsav(j,iprt)=partsav(j,iprt)+wpartsav(i,j,iprt)
430 IF(itask==0)
DEALLOCATE(wpartsav)