37 . X ,SPBUF ,KXSP ,IXSP ,IPARTSP ,
38 . IPARG ,NGROUNC ,IGROUNC ,ELBUF_TAB,ITASK ,
39 . NOD2SP ,SOL2SPH ,SPH2SOL ,IXS ,MS ,
40 . PM ,IADS ,ADDCNE ,FSKYD ,DMSPH ,
51#include "implicit_f.inc"
65#include "vect01_c.inc"
70 . IPARTSP(*), IPARG(NPARG,*), NGROUNC,
71 . IGROUNC(*), , IXSP(KVOISPH,*), NOD2SP(*),
72 . SOL2SPH(2,*), SPH2SOL(*), IXS(NIXS,*),
73 . IADS(8,*), (*), ICONTACT(*)
75 . x(3,*), spbuf(nspbuf,*), ms(*), pm(npropm,*), fskyd(*),
77 TYPE (ELBUF_STRUCT_),
TARGET,
DIMENSION(NGROUP) ::
81 INTEGER I, N, IP, KP, NG, MG, J, NP, KFT, IG, ,
82 . nel, offset, nvois, m, inod, jnod, nn, iprt, imat,
83 . n1, n2, n3, n4, n5, n6, n7, n8,
84 . k1, k2, k3, k4, k5, k6, k7, k8, ierror,
87 . dm, rho0, ehourt, ek, vi2, vxi, vyi, vzi,
88 . vx1, vx2, vx3, vx4, vx5, vx6, vx7, vx8,
89 . vy1, vy2, vy3, vy4, vy5, vy6, vy7, vy8,
90 . vz1, vz2, vz3, vz4, vz5, vz6, vz7, vz8
93 TYPE(g_bufel_) ,
POINTER :: GBUF, GBUFSP
94 TYPE(L_BUFEL_) ,
POINTER :: LBUF
95 TYPE(BUF_MAT_) ,
POINTER :: MBUF
100 IF(iparg(8,ng)==1)
GOTO 50
102 DO nelem = 1,iparg(2,ng),nvsiz
105 nft =iparg(3,ng) + offset
108 ipartsph=iparg(69,ng)
110 llt=
min(nvsiz,nel-nelem+1)
111 IF(ity==1.AND.ipartsph/=0)
THEN
113 gbuf => elbuf_tab(ng)%GBUF
114 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
115 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
118 IF(gbuf%OFF(i)/=zero)
THEN
120 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
123 IF(icontact(inod)/=0)
THEN
126 gbuf%OFF(i)=four_over_5
130 .
' -- PARTICLE INTO CONTACT => DELETE SOLID ELEMENT AT NEXT CYCLE',
133 .
' -- PARTICLE INTO CONTACT => DELETE SOLID ELEMENT AT NEXT CYCLE',
135#include "lockoff.inc"
157 IF(iparg(8,ng)==1)
GOTO 100
159 DO nelem = 1,iparg(2,ng),nvsiz
162 nft =iparg(3,ng) + offset
165 ipartsph=iparg(69,ng)
167 llt=
min(nvsiz,nel-nelem+1)
168 IF(ity==1.AND.ipartsph/=0)
THEN
170 gbuf => elbuf_tab(ng)%GBUF
171 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
172 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
175 IF(gbuf%OFF(i)==zero)
THEN
184 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
186 mg =mod(-kxsp(2,np),ngroup+1)
188 gbufsp => elbuf_tab(mg)%GBUF
189 kxsp(2,np) =abs(kxsp(2,np))
190 gbufsp%OFF(np-kft)=one
194 vi2= v(1,inod)*v(1,inod)
195 . +v(2,inod)*v(2,inod)
196 . +v(3,inod)*v(3,inod)
197 ek=ek+half*ms(inod)*vi2
209 dm=one_over_8*gbuf%VOL(i)*rho0
211 dmsph(n1)=dmsph(n1)+dm
212 dmsph(n2)=dmsph(n2)+dm
213 dmsph(n3)=dmsph(n3)+dm
214 dmsph(n4)=dmsph(n4)+dm
215 dmsph(n5)=dmsph(n5)+dm
216 dmsph(n6)=dmsph(n6)+dm
217 dmsph(n7)=dmsph(n7)+dm
218 dmsph(n8)=dmsph(n8)+dm
252 vxi=vx1+vx2+vx3+vx4+vx5+vx6+vx7+vx8
253 vyi=vy1+vy2+vy3+vy4+vy5+vy6+vy7+vy8
254 vzi=vz1+vz2+vz3+vz4+vz5+vz6+vz7+vz8
255 vi2=vx1*vx1+vx2*vx2+vx3*vx3+vx4*vx4
256 1 +vx5*vx5+vx6*vx6+vx7*vx7+vx8*vx8
257 2 +vy1*vy1+vy2*vy2+vy3*vy3+vy4*vy4
258 3 +vy5*vy5+vy6*vy6+vy7*vy7+vy8*vy8
259 4 +vz1*vz1+vz2*vz2+vz3*vz3+vz4*vz4
260 5 +vz5*vz5+vz6*vz6+vz7*vz7+vz8*vz8
263 ehourt=ehourt+half*dm*vi2-ek
278 nodft = 1+itask*numnod/ nthread
279 nodlt = (itask+1)*numnod/nthread
281 fskyd(addcne(n):addcne(n+1)-1)=zero
289 IF(iparg(8,ng)==1)
GOTO 200
291 DO nelem = 1,iparg(2,ng),nvsiz
294 nft =iparg(3,ng) + offset
297 ipartsph=iparg(69,ng)
299 llt=
min(nvsiz,nel-nelem+1)
300 IF(ity==1.AND.ipartsph/=0)
THEN
302 gbuf => elbuf_tab(ng)%GBUF
303 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
304 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
307 IF(gbuf%OFF(i)==zero)
THEN
316 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
318 mg =mod(-kxsp(2,np),ngroup+1)
320 gbufsp => elbuf_tab(mg)%GBUF
321 kxsp(2,np) =abs(kxsp(2,np))
322 gbufsp%OFF(np-kft)=one
326 vi2= v(1,inod)*v(1,inod)
327 . +v(2,inod)*v(2,inod)
328 . +v(3,inod)*v(3,inod)
329 ek=ek+half*ms(inod)*vi2
333 dm=one_over_8*gbuf%VOL(i)*rho0
384 vxi=vx1+vx2+vx3+vx4+vx5+vx6+vx7+vx8
385 vyi=vy1+vy2+vy3+vy4+vy5+vy6+vy7+vy8
386 vzi=vz1+vz2+vz3+vz4+vz5+vz6+vz7+vz8
387 vi2=vx1*vx1+vx2*vx2+vx3*vx3+vx4*vx4
388 1 +vx5*vx5+vx6*vx6+vx7*vx7+vx8*vx8
389 2 +vy1*vy1+vy2*vy2+vy3*vy3+vy4*vy4
390 3 +vy5*vy5+vy6*vy6+vy7*vy7+vy8*vy8
391 4 +vz1*vz1+vz2*vz2+vz3*vz3+vz4*vz4
392 5 +vz5*vz5+vz6*vz6+vz7*vz7+vz8*vz8
395 ehourt=ehourt+half*dm*vi2-ek
411#include "lockoff.inc"
428 . X ,SPBUF ,KXSP ,IXSP ,IPARTSP ,
429 . IPARG ,NGROUNC ,IGROUNC ,ELBUF_TAB,ITASK ,
430 . NOD2SP ,SOL2SPH ,SPH2SOL ,IXS ,MS ,
431 . PM ,IADS ,ADDCNE ,FSKYD ,DMSPH ,
442#include
"implicit_f.inc"
443#include "comlock.inc"
447#include "com01_c.inc"
448#include "com04_c.inc"
449#include
"param_c.inc"
450#include "scr17_c.inc"
453#include "units_c.inc"
454#include "vect01_c.inc"
458 INTEGER KXSP(NISP,*),
459 . IPARTSP(*), IPARG(NPARG,*), NGROUNC,
460 . IGROUNC(*), ITASK, IXSP(KVOISPH,*), NOD2SP(*),
461 . SOL2SPH(2,*), SPH2SOL(*), (NIXS,*),
462 . IADS(8,*), ADDCNE(*), ICONTACT(*), IPART(LIPART1,*)
464 . X(3,*), SPBUF(NSPBUF,*), MS(*), PM(NPROPM,*), FSKYD(*),
466 TYPE (ELBUF_STRUCT_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
470 INTEGER , N, IP, KP, NG, MG, J, NP, KFT, IG, NELEM,
471 . NEL, OFFSET, NVOIS, M, INOD, JNOD, NN, IPRT, IMAT
474 TYPE(g_bufel_) ,
POINTER :: GBUF
475 TYPE(L_BUFEL_) ,
POINTER :: LBUF
476 TYPE(buf_mat_) ,
POINTER :: MBUF
481 IF(iparg(8,ng)==1)
GOTO 50
483 DO nelem = 1,iparg(2,ng),nvsiz
486 nft =iparg(3,ng) + offset
489 ipartsph=iparg(69,ng)
491 llt=
min(nvsiz,nel-nelem+1)
492 IF(ity==1.AND.ipartsph/=0)
THEN
494 gbuf => elbuf_tab(ng)%GBUF
495 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
496 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
498 IF ((itsol2sph==1).OR.(nsubs==0))
THEN
502 IF(gbuf%OFF(i)/=zero)
THEN
504 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
512 IF(ipartsp(m)/=ipartsp(np))
THEN
515 gbuf%OFF(i)=four_over_5
518 WRITE(iout,5000) ixs(nixs,n)
519 WRITE(istdo,5000) ixs(nixs,n)
520#include "lockoff.inc"
525 IF(nint(xsphr(14,nn))/=ipartsp(np))
THEN
528 gbuf%OFF(i)=four_over_5
531 WRITE(iout,5000) ixs(nixs,n)
532 WRITE(istdo,5000) ixs(nixs,n)
533#include "lockoff.inc"
543 ELSEIF (itsol2sph==2)
THEN
547 IF(gbuf%OFF(i)/=zero)
THEN
549 DO kp=1,sol2sph(2,n)-sol2sph(1,n)
557 IF((ipart(3,ipartsp(m))/=ipart(3,ipartsp(np))).OR.
558 . (((ipart(3,ipartsp(m))+ipart(3,ipartsp(np)))==2*nsubs).
559 . and.(ipartsp(m)/=ipartsp(np))))
THEN
562 gbuf%OFF(i)=four_over_5
565 WRITE(iout,6000) ixs(nixs,n)
566 WRITE(istdo,6000) ixs(nixs,n)
567#include "lockoff.inc"
572 IF((ipart(3,nint(xsphr(14,nn)))/=ipart(3,ipartsp(np))).OR.
573 . (((ipart(3,ipartsp(np))+ipart(3,nint(xsphr(14,nn)))==2*nsubs).
574 . and.(nint(xsphr(14,nn))/=ipartsp(np)))))
THEN
577 gbuf%OFF(i)=four_over_5
580 WRITE(iout,6000) ixs(nixs,n)
581 WRITE(istdo,6000) ixs(nixs,n)
582#include "lockoff.inc"
603 &
' -- PARTICLE INTERACTING W/OTHER SPH PART',
604 .
' => DELETE SOLID ELEMENT AT NEXT CYCLE',i10)
606 &
' -- PARTICLE INTERACTING W/OTHER SPH PART OR SUBSET',
607 .
' => DELETE SOLID ELEMENT AT NEXT CYCLE',i10)