40 1 ITASK ,V ,A ,MS ,PM ,
41 2 IPART ,IXS ,IPARTS ,KXSP ,IPARTSP ,
42 3 IRST ,SPBUF ,PARTSAV ,SOL2SPH ,IPARG ,
43 4 NGROUNC ,IGROUNC ,ELBUF_TAB,IGEO)
48 use element_mod ,
only : nixs
52#include "implicit_f.inc"
65#include "vect01_c.inc"
69 INTEGER IXS(NIXS,*), KXSP(NISP,*), ITASK,
70 . IPARTSP(*), IRST(3,*), NGROUNC, IGROUNC(*),
71 . IPARTS(*), IPARG(NPARG,*), SOL2SPH(2,*), IPART(LIPART1
74 . v(3,*), a(3,*), spbuf(nspbuf,*), ms(*), partsav(npsav,*),
76 TYPE (ELBUF_STRUCT_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
80 INTEGER I, J, IR, IS, IT, KP, NP, N, INOD, IG, NG, MG, NEL,
81 . N1, N2, N3, N4, N5, N6, N7, N8, IPRT,
82 . NELEM, OFFSET, NSPHDIR, KFT, IERROR
85 . vx1,vx2,vx3,vx4,vx5,vx6,vx7,vx8,
86 . vy1,vy2,vy3,vy4,vy5,vy6,vy7,vy8,
87 . vz1,vz2,vz3,vz4,vz5,vz6,vz7,vz8,
88 . phi1,phi2,phi3,phi4,phi5,phi6,phi7,phi8,
90 . vxi, vyi, vzi, usdt, dt05,
91 . xmass_t, xmomt_t, ymomt_t, zmomt_t, encin_t
93 TYPE(g_bufel_) ,
POINTER :: GBUF, GBUFSP
94 TYPE(L_BUFEL_) ,
POINTER :: LBUF
95 TYPE(BUF_MAT_) ,
POINTER :: MBUF
98 . a_gauss(9,9),a_gauss_tetra(9,9)
106 3 -.666666666666666,0. ,0.666666666666666,
115 6 -.833333333333333,-.5 ,-.166666666666666,
116 6 0.166666666666666,0.5 ,0.833333333333333,
118 7 -.857142857142857,-.571428571428571,-.285714285714285,
119 7 0. ,0.285714285714285,0.571428571428571,
120 7 0.857142857142857,0. ,0. ,
121 8 -.875 ,-.625 ,-.375 ,
122 8 -.125 ,0.125 ,0.375,
124 9 -.888888888888888,-.666666666666666,-.444444444444444,
125 9 -.222222222222222,0. ,0.222222222222222,
126 9 0.444444444444444,0.666666666666666,0.888888888888888/
129 1 0.250000000000000,0.000000000000000,0.000000000000000,
130 1 0.000000000000000,0.000000000000000,0.000000000000000,
131 1 0.000000000000000,0.000000000000000,0.000000000000000,
132 2 0.166666666666667,0.500000000000000,0.000000000000000,
133 2 0.000000000000000,0.000000000000000,0.000000000000000,
134 2 0.000000000000000,0.000000000000000,0.000000000000000,
135 3 0.125000000000000,0.375000000000000,0.625000000000000,
136 3 0.000000000000000,0.000000000000000,0.000000000000000,
137 3 0.000000000000000,0.000000000000000,0.000000000000000,
138 4 0.100000000000000,0.300000000000000,0.500000000000000,
139 4 0.700000000000000,0.000000000000000,0.000000000000000,
140 4 0.000000000000000,0.000000000000000,0.000000000000000,
141 5 0.083333333333333,0.250000000000000,0.416666666666667,
142 5 0.583333333333333,0.750000000000000,0.000000000000000,
143 5 0.000000000000000,0.000000000000000,0.000000000000000,
144 6 0.071428571428571,0.214285714285714,0.357142857142857,
145 6 0.500000000000000,0.642857142857143,0.785714285714286,
146 6 0.000000000000000,0.000000000000000,0.000000000000000,
147 7 0.062500000000000,0.187500000000000,0.312500000000000,
148 7 0.437500000000000,0.562500000000000,0.687500000000000,
149 7 0.812500000000000,0.000000000000000,0.000000000000000,
150 8 0.055555555555556,0.166666666666667,0.277777777777778,
151 8 0.388888888888889,0.500000000000000,0.611111111111111,
152 8 0.722222222222222,0.833333333333333,0.000000000000000,
153 9 0.050000000000000,0.150000000000000,0.250000000000000,
154 9 0.350000000000000,0.450000000000000,0.550000000000000,
155 9 0.650000000000000,0.750000000000000,0.850000000000000/
158 ALLOCATE(wpartsav(nthread,npsav,npart),stat=ierror)
160 CALL ancmsg(msgid=19,anmode=aninfo,
161 . c1=
'(SOLIDS to SPH)')
175 DO iprt=itask+1,npart,nthread
178 wpartsav(i,j,iprt)=zero
186 IF(iparg(8,ng)==1)
GOTO 250
188 DO nelem = 1,iparg(2,ng),nvsiz
191 nft =iparg(3,ng) + offset
194 ipartsph=iparg(69,ng)
196 llt=
min(nvsiz,nel-nelem+1)
197 IF(ity==1.AND.ipartsph/=0)
THEN
199 gbuf => elbuf_tab(ng)%GBUF
200 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
201 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
205 IF (iparg(28,ng)==4)
THEN
209 IF(gbuf%OFF(i)==zero) cycle
213 vx1=v(1,n1)+dt12*a(1,n1)
214 vy1=v(2,n1)+dt12*a(2,n1)
215 vz1=v(3,n1)+dt12*a(3,n1)
217 vx2=v(1,n2)+dt12*a(1,n2)
218 vy2=v(2,n2)+dt12*a(2,n2)
219 vz2=v(3,n2)+dt12*a(3,n2)
221 vx3=v(1,n3)+dt12*a(1,n3)
222 vy3=v(2,n3)+dt12*a(2,n3)
223 vz3=v(3,n3)+dt12*a(3,n3)
225 vx4=v(1,n4)+dt12*a(1,n4)
226 vy4=v(2,n4)+dt12*a(2,n4)
227 vz4=v(3,n4)+dt12*a(3,n4)
229 nsphdir=igeo(37,ixs(10,n))
231 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
233 ir=irst(1,np-first_sphsol+1)
234 is=irst(2,np-first_sphsol+1)
235 it=irst(3,np-first_sphsol+1)
236 ksi = a_gauss_tetra(ir,nsphdir)
237 eta = a_gauss_tetra(is,nsphdir)
238 zeta = a_gauss_tetra(it,nsphdir)
245 vxi=phi1*vx1+phi2*vx2+phi3*vx3+phi4*vx4
246 vyi=phi1*vy1+phi2*vy2+phi3*vy3+phi4*vy4
247 vzi=phi1*vz1+phi2*vz2+phi3*vz3+phi4*vz4
250 a(1,inod)=(vxi-v(1,inod))*usdt
251 a(2,inod)=(vyi-v(2,inod))*usdt
252 a(3,inod)=(vzi-v(3,inod))*usdt
262 IF(gbuf%OFF(i)==zero) cycle
266 vx1=v(1,n1)+dt12*a(1,n1)
267 vy1=v(2,n1)+dt12*a(2,n1)
268 vz1=v(3,n1)+dt12*a(3,n1)
270 vx2=v(1,n2)+dt12*a(1,n2)
271 vy2=v(2,n2)+dt12*a(2,n2)
272 vz2=v(3,n2)+dt12*a(3,n2)
274 vx3=v(1,n3)+dt12*a(1,n3)
275 vy3=v(2,n3)+dt12*a(2,n3)
276 vz3=v(3,n3)+dt12*a(3,n3)
278 vx4=v(1,n4)+dt12*a(1,n4)
279 vy4=v(2,n4)+dt12*a(2,n4)
280 vz4=v(3,n4)+dt12*a(3,n4)
282 vx5=v(1,n5)+dt12*a(1,n5)
283 vy5=v(2,n5)+dt12*a(2,n5)
284 vz5=v(3,n5)+dt12*a(3,n5)
290 vx7=v(1,n7)+dt12*a(1,n7)
291 vy7=v(2,n7)+dt12*a(2,n7
292 vz7=v(3,n7)+dt12*a(3,n7)
294 vx8=v(1,n8)+dt12*a(1,n8)
295 vy8=v(2,n8)+dt12*a(2,n8)
296 vz8=v(3,n8)+dt12*a(3,n8)
299 nsphdir=nint((sol2sph(2,n)-sol2sph(1,n))**third)
301 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
303 ir=irst(1,np-first_sphsol+1)
304 is=irst(2,np-first_sphsol+1)
305 it=irst(3,np-first_sphsol+1)
306 ksi = a_gauss(ir,nsphdir)
307 eta = a_gauss(is,nsphdir)
308 zeta = a_gauss(it,nsphdir)
310 phi1=(one-ksi)*(one-eta)*(one-zeta)
311 phi2=(one-ksi)*(one-eta)*(one+zeta)
312 phi3=(one+ksi)*(one-eta)*(one+zeta)
313 phi4=(one+ksi)*(one-eta)*(one-zeta)
314 phi5=(one-ksi)*(one+eta)*(one-zeta)
315 phi6=(one-ksi)*(one+eta)*(one+zeta)
316 phi7=(one+ksi)*(one+eta)*(one+zeta)
317 phi8=(one+ksi)*(one+eta)*(one-zeta)
318 vxi=one_over_8*(phi1*vx1+phi2*vx2+phi3*vx3+phi4*vx4+
319 . phi5*vx5+phi6*vx6+phi7*vx7+phi8*vx8)
320 vyi=one_over_8*(phi1*vy1+phi2*vy2+phi3*vy3+phi4*vy4+
321 . phi5*vy5+phi6*vy6+phi7*vy7+phi8*vy8)
322 vzi=one_over_8*(phi1*vz1+phi2*vz2+phi3*vz3+phi4*vz4+
323 . phi5*vz5+phi6*vz6+phi7*vz7+phi8*vz8)
326 a(1,inod)=(vxi-v(1,inod))*usdt
327 a(2,inod)=(vyi-v(2,inod))*usdt
328 a(3,inod)=(vzi-v(3,inod))*usdt
345 IF(iparg(8,ng)==1)
GOTO 350
347 DO nelem = 1,iparg(2,ng),nvsiz
350 nft =iparg(3,ng) + offset
353 ipartsph=iparg(69,ng)
355 llt=
min(nvsiz,nel-nelem+1)
356 IF(ity==1.AND.ipartsph/=0)
THEN
358 gbuf => elbuf_tab(ng)%GBUF
359 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
360 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
364 IF(gbuf%OFF(i)/=zero)
THEN
368 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
371 IF (kxsp(2,np)/=0)
THEN
373 mg =mod(-kxsp(2,np),ngroup+1)
376 vxi=v(1,inod)+dt05*a(1,inod)
377 vyi=v(2,inod)+dt05*a(2,inod)
378 vzi=v(3,inod)+dt05*a(3,inod)
379 xmass_t=xmass_t-ms(inod)
380 xmomt_t=xmomt_t-ms(inod)*vxi
381 ymomt_t=ymomt_t-ms(inod)*vyi
382 zmomt_t=zmomt_t-ms(inod)*vzi
384 . -half*ms(inod)*(vxi*vxi+vyi*vyi+vzi*vzi)
388 IF(iparg(8,mg)==1)cycle
391 gbufsp => elbuf_tab(mg)%GBUF
393 wpartsav(itask+1,1,iprt)=wpartsav(itask+1,1,iprt)
394 . -gbufsp%VOL(np-kft)*gbufsp%EINT(np-kft)
395 wpartsav(itask+1,2,iprt)=wpartsav(itask+1,2,iprt)
396 . -half*ms(inod)*(vxi*vxi+vyi*vyi+vzi*vzi)
397 wpartsav(itask+1,3,iprt)=wpartsav(itask+1,3,iprt)
399 wpartsav(itask+1,4,iprt)=wpartsav(itask+1,4,iprt)
401 wpartsav(itask+1,5,iprt)=wpartsav(itask+1,5,iprt)
403 wpartsav(itask+1,6,iprt)=wpartsav(itask+1,6,iprt)
419 encin=encin + encin_t
420 xmass=xmass + xmass_t
421 xmomt=xmomt + xmomt_t
422 ymomt=ymomt + ymomt_t
423 zmomt=zmomt + zmomt_t
424#include "lockoff.inc"
425 DO iprt=itask+1,npart,nthread
428 partsav(j,iprt)=partsav(j,iprt)+wpartsav(i,j,iprt)
435 IF(itask==0)
DEALLOCATE(wpartsav)