41 SUBROUTINE rbypid(IPARG ,IPARI ,MS ,IN ,
42 . IXS ,IXQ ,IXC ,IXT ,IXP ,
43 . IXR ,SKEW ,ITAB ,ITABM1,ISKWN ,
44 . NPBY ,ONOF ,ITAG ,LPBY ,
46 . IXTG ,NPBYI,RBYI ,LPBYI ,IACTS ,
47 . FR_RBY2 ,NRB ,ONFELT,WEIGHT,PARTSAV,
48 . IPARTC ,NSN ,ELBUF_TAB,PRI_OFF)
53 use element_mod ,
only : nixs,nixq,nixc,nixt,nixp,nixr,nixtg
57#include "implicit_f.inc"
71 INTEGER IPARG(NPARG,*), IPARI(*), IXS(NIXS,*), IXQ(NIXQ,*),
72 . IXC(NIXC,*), IXT(NIXT,*), IXP(NIXP,*), IXR(NIXR,*),
73 . ITAB(*), ITABM1(*),IXTG(NIXTG,*),NRB, NSN,
74 . ISKWN(LISKN,*), NPBY(*),ITAG(*),LPBY(*),NPBYI(*) ,LPBYI(*),
75 . WEIGHT(*), FR_RBY2(3,*), IPARTC(*)
76 INTEGER ONOF,IACTS, ONFELT,
77 INTEGER,
INTENT(IN) :: PRI_OFF
80 . skew(lskew,*),ms(*),in(*),partsav(npsav,*),
81 . x(3,*),v(3,*),vr(3,*),rby(*),rbyi(nrby,*)
82 TYPE(elbuf_struct_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
86 INTEGER , II, NG, ITY, NEL, NFT, IAD, IGOF, N, NI,
87 . M, ISPH, NALL,MLW, K, PMAIN, TAG,
88 . MX,ICOMM(NSPMD+2),ISTRAIN,NPT,IHBE, ID
91 . xmom, ymom, zmom,ii1,ii2,ii3,ii4,ii5,ii6,ii7,ii8,ii9,
92 . ig1,ig2,ig3,ig4,ig5,ig6,ig7,ig8,ig9,
93 . xxmom, yymom, zzmom, wa1, wa2, wa3,
96 . f1(nsn), f2(nsn), f3(nsn), f4(nsn),
97 . f5(nsn), f6(nsn), off_old
98 DOUBLE PRECISION RBF6(6,6)
100 .
DIMENSION(:),
POINTER :: OFFG
101 TYPE(G_BUFEL_) ,
POINTER :: GBUF
108 pmain = abs(fr_rby2(3,nrb))
111 IF(ispmd+1/=pmain) icomm(ispmd+1) = tag
117 icomm(nspmd+2) = pmain
132 ELSEIF(onof == 1)
THEN
142 xxmom = vr(1,m)*in(m)
143 yymom = vr(2,m)*in(m)
144 zzmom = vr(3,m)*in(m)
153 zzmom = vr(3,m)*in(m)
160 xxmom = vr(1,m)*in(m)
165 CALL rbyact(rby ,m ,lpby ,nsn ,ms ,
166 . in ,x ,itab ,skew ,isph ,
167 . itag(1+numnod),npbyi,rbyi ,lpbyi ,
168 . pmain,icomm,weight,id )
177 IF(itag(numnod+n) > 0.AND.weight(n) == 1)
THEN
187 ii1=rbyi(10,ni)*rbyi(1,ni)
188 ii2=rbyi(10,ni)*rbyi(2,ni)
189 ii3=rbyi(10,ni)*rbyi(3,ni)
190 ii4=rbyi(11,ni)*rbyi(4,ni)
191 ii5=rbyi(11,ni)*rbyi(5,ni)
192 ii6=rbyi(11,ni)*rbyi(6,ni)
194 ii8=rbyi(12,ni)*rbyi(8,ni)
195 ii9=rbyi(12,ni)*rbyi(9,ni)
197 ig1=rbyi(1,ni)*ii1+rbyi(4,ni)*ii4+rbyi(7,ni)*ii7
198 ig2=rbyi(1,ni)*ii2+rbyi(4,ni)*ii5+rbyi(7,ni)*ii8
199 ig3=rbyi(1,ni)*ii3+rbyi(4,ni)*ii6+rbyi(7,ni)*ii9
200 ig4=rbyi(2,ni)*ii1+rbyi(5,ni)*ii4+rbyi(8,ni)*ii7
201 ig5=rbyi(2,ni)*ii2+rbyi(5,ni)*ii5+rbyi(8,ni)*ii8
202 ig6=rbyi(2,ni)*ii3+rbyi(5,ni)*ii6+rbyi(8,ni)*ii9
203 ig7=rbyi(3,ni)*ii1+rbyi(6,ni)*ii4+rbyi(9,ni)*ii7
204 ig8=rbyi(3,ni)*ii2+rbyi(6,ni)*ii5+rbyi(9,ni)*ii8
205 ig9=rbyi(3,ni)*ii3+rbyi(6,ni)*ii6+rbyi(9,ni)*ii9
207 f4(i) = vr(1,n)*ig1 + vr(2,n)*ig2 + vr(3,n)*ig3
208 . +(x(2,n)-x(2,m))*v(3,n)*ms(n)
209 . -(x(3,n)-x(3,m))*v(2,n)*ms(n)
210 f5(i) = vr(1,n)*ig4 + vr(2,n)*ig5 + vr(3,n)*ig6
211 . +(x(3,n)-x(3,m))*v(1,n)*ms(n)
212 . -(x(1,n)-x(1,m))*v(3,n)*ms(n)
213 f6(i) = vr(1,n)*ig7 + vr(2,n)*ig8 + vr(3,n)*ig9
214 . +(x(1,n)-x(1,m))*v(2,n)*ms(n)
215 . -(x(2,n)-x(2,m))*v(1,n)*ms(n)
234 f4(i) = vr(1,n)*in(n)
235 . +(x(2,n)-x(2,m))*v(3,n)*ms(n)
236 . -(x(3,n)-x(3,m))*v(2,n)*ms(n)
237 f5(i) = vr(2,n)*in(n)
238 . +(x(3,n)-x(3,m))*v(1,n)*ms(n)
239 . -(x(1,n)-x(1,m))*v(3,n)*ms(n)
240 f6(i) = vr(3,n)*in(n)
241 . +(x(1,n)-x(1,m))*v(2,n)*ms(n)
242 . -(x(2,n)-x(2,m))*v(1,n)*ms(n)
266 IF(itag(numnod+n) > 0.AND.weight(n) == 1)
THEN
278 . +(x(2,n)-x(2,m))*v(3,n)*ms(n)
279 . -(x(3,n)-x(3,m))*v(2,n)*ms(n)
281 . +(x(3,n)-x(3,m))*v(1,n)*ms(n)
282 . -(x(1,n)-x(1,m))*v(3,n)*ms(n)
284 . +(x(1,n)-x(1,m))*v(2,n)*ms(n)
285 . -(x(2,n)-x(2,m))*v(1,n)*ms(n)
287 ELSEIF(itag(numnod+n) == 0.AND.weight(n) == 1)
THEN
293 f4(i) = vr(1,n)*in(n)
294 . +(x(2,n)-x(2,m))*v(3,n)*ms(n)
295 . -(x(3,n)-x(3,m))*v(2,n)*ms(n)
296 f5(i) = vr(2,n)*in(n)
297 . +(x(3,n)-x(3,m))*v(1,n)*ms(n)
298 . -(x(1,n)-x(1,m))*v(3,n)*ms(n)
299 f6(i) = vr(3,n)*in(n)
300 . +(x(1,n)-x(1,m))*v(2,n)*ms(n)
301 . -(x(2,n)-x(2,m))*v(1,n)*ms(n)
316 IF(itag(numnod+n) > 0.AND.weight(n) == 1)
THEN
323 ii1=rbyi(10,ni)*rbyi(1,ni)
324 ii5=rbyi(11,ni)*rbyi(5,ni)
325 ii6=rbyi(11,ni)*rbyi(6,ni)
326 ii8=rbyi(12,ni)*rbyi(8,ni)
327 ii9=rbyi(12,ni)*rbyi(9,ni)
330 ig5=rbyi(5,ni)*ii5+rbyi(8,ni)*ii8
331 ig6=rbyi(5,ni)*ii6+rbyi(8,ni)*ii9
332 ig8=rbyi(6,ni)*ii5+rbyi(9,ni)*ii8
333 ig9=rbyi(6,ni)*ii6+rbyi(9,ni)*ii9
335 f4(i) = vr(1,n)*ig1+(x(2,n)-x(2,m))*v(3,n)*ms(n)
336 . -(x(3,n)-x(3,m))*v(2,n)*ms(n)
339 f5(i) = vr(2,n)*ig5 + vr(3,n)*ig6
340 f6(i) = vr(2,n)*ig8 + vr(3,n)*ig9
341 ELSEIF(itag(numnod+n) == 0.AND.weight(n) == 1)
THEN
346 f4(i) = vr(1,n)*in(n)+(x(2,n)-x(2,m))*v(3,n)*ms(n)
347 . -(x(3,n)-x(3,m))*v(2,n)*ms(n)
350 f5(i) = vr(2,n)*in(n)
351 f6(i) = vr(3,n)*in(n)
390 + rbf6(1,1)+rbf6(1,2)+rbf6(1,3)+
391 + rbf6(1,4)+rbf6(1,5)+rbf6(1,6)
393 + rbf6(2,1)+rbf6(2,2)+rbf6(2,3)+
394 + rbf6(2,4)+rbf6(2,5)+rbf6(2,6)
396 + rbf6(3,1)+rbf6(3,2)+rbf6(3,3)+
397 + rbf6(3,4)+rbf6(3,5)+rbf6(3,6)
399 + rbf6(4,1)+rbf6(4,2)+rbf6(4,3)+
400 + rbf6(4,4)+rbf6(4,5)+rbf6(4,6)
402 + rbf6(5,1)+rbf6(5,2)+rbf6(5,3)+
403 + rbf6(5,4)+rbf6(5,5)+rbf6(5,6)
405 + rbf6(6,1)+rbf6(6,2)+rbf6(6,3)+
406 + rbf6(6,4)+rbf6(6,5)+rbf6(6,6)
409 v(1,m) = xmom / ms(m)
410 v(2,m) = ymom / ms(m)
411 v(3,m) = zmom / ms(m)
416 xxmom=rby(1)*wa1+rby(2)*wa2+rby(3)*wa3
417 yymom=rby(4)*wa1+rby(5)*wa2+rby(6)*wa3
418 zzmom=rby(7)*wa1+rby(8)*wa2+rby(9)*wa3
419 wa1 = xxmom / rby(10)
420 wa2 = yymom / rby(11)
421 wa3 = zzmom / rby(12)
423 vr(1,m)=rby(1)*wa1+rby
424 vr(2,m)=rby(2)*wa1+rby(5)*wa2+rby(8)*wa3
425 vr(3,m)=rby(3)*wa1+rby(6)*wa2+rby(9)*wa3
431 vr(1,m)=rby(1)*wa1+rby(4)*wa2+rby(7)*wa3
438 IF(onfelt == 0.OR.onfelt == 1)
THEN
454 gbuf => elbuf_tab(ng)%GBUF
458 IF(ity == 1.AND.mlw /= 0)
THEN
459 offg => elbuf_tab(ng)%GBUF%OFF
462 nall = itag(ixs(2,ii)) * itag(ixs(3,ii)) *
463 + itag(ixs(4,ii)) * itag(ixs(5,ii)) *
464 + itag(ixs(6,ii)) * itag(ixs(7,ii)) *
465 + itag(ixs(8,ii)) * itag(ixs(9,ii))
468 IF (onfelt == 1)
THEN
469 offg(i) = abs(offg(i))
470 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
471 .
WRITE(iout,*)
' BRICK ACTIVATION:',ixs(11,ii)
472 ELSEIF(onfelt == 0)
THEN
473 offg(i) = -abs(offg(i))
474 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
475 .
WRITE(iout,*)
' BRICK DEACTIVATION:',ixs(11,ii)
485 IF (offg(i) > zero) igof=0
491 ELSEIF(ity == 2.AND.mlw /= 0)
THEN
492 offg => elbuf_tab(ng)%GBUF%OFF
495 nall = itag(ixq(2,ii)) * itag(ixq(3,ii)) *
496 + itag(ixq(4,ii)) * itag(ixq(5,ii))
499 IF (onfelt == 1)
THEN
500 offg(i) = abs(offg(i))
501 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
502 .
WRITE(iout,*)
' QUAD ACTIVATION:',ixq(7,ii)
503 ELSEIF(onfelt == 0)
THEN
504 offg(i) = -abs(offg(i))
505 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
506 .
WRITE(iout,*)
' QUAD DEACTIVATION:',ixq(7,ii)
516 IF (offg(i) > zero) igof=0
522 ELSEIF(ity == 3.AND.mlw /= 0)
THEN
523 offg => elbuf_tab(ng)%GBUF%OFF
524 istrain = iparg(44,ng)
525 npt = iabs(iparg(6,ng))
529 nall = itag(ixc(2,ii)) * itag(ixc(3,ii)) *
530 + itag(ixc(4,ii)) * itag(ixc(5,ii))
534 IF (offg(i) < zero)
THEN
537 partsav(24,mx) = partsav(24,mx)
538 . - gbuf%EINT(i) - gbuf%EINT(i+nel)
540 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
541 .
WRITE(iout,*)
' SHELL ACTIVATION:',ixc(7,ii)
542 ELSEIF(onfelt == 0)
THEN
543 IF (offg(i) > zero)
THEN
546 partsav(24,mx) = partsav(24,mx)
547 . + gbuf%EINT(i) + gbuf%EINT(i+nel)
549 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
550 .
WRITE(iout,*)
' SHELL DEACTIVATION:',ixc(7,ii)
559 IF (offg(i) > zero) igof=0
565 ELSEIF(ity == 4.AND.(iacts == 1.OR.codvers>=44))
THEN
566 offg => elbuf_tab(ng)%GBUF%OFF
569 nall = itag(ixt(2,ii)) * itag(ixt(3,ii))
573 offg(i) = abs(offg(i))
574 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
575 .
WRITE(iout,*)
' TRUSS ACTIVATION:',ixt(5,ii)
576 ELSEIF(onfelt == 0)
THEN
577 offg(i) = -abs(offg(i))
578 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
579 .
WRITE(iout,*)
' TRUSS DEACTIVATION:',ixt(5,ii)
595 ELSEIF(ity == 5.AND.(iacts == 1.OR.codvers>=44))
THEN
596 offg => elbuf_tab(ng)%GBUF%OFF
599 nall = itag(ixp(2,ii)) * itag(ixp(3,ii))
603 offg(i) = abs(offg(i))
604 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
605 .
WRITE(iout,*)
' BEAM ACTIVATION:',ixp(6,ii)
606 ELSEIF(onfelt == 0)
THEN
607 offg(i) = -abs(offg(i))
608 IF ((pri_off==0).OR.(off_old*offg(i)<zero))
609 .
WRITE(iout,*)' beam deactivation:
',IXP(6,II)
618 IF (OFFG(I) > ZERO) IGOF=0
624.AND..AND.
ELSEIF(ITY == 6MLW /= 3
625.OR.
. (IACTS == 1CODVERS>=44))THEN
626 OFFG => ELBUF_TAB(NG)%GBUF%OFF
629 NALL = ITAG(IXR(2,II)) * ITAG(IXR(3,II))
635 . OFFG(I)= ABS(OFFG(I))
636.OR.
IF ((PRI_OFF==0)(OFF_OLD*OFFG(I)<ZERO))
637 . WRITE(IOUT,*)' spring activation:
',IXR(NIXR,II)
638 ELSEIF(ONFELT == 0)THEN
641 . OFFG(I) = -ABS(OFFG(I))
642.OR.
IF ((PRI_OFF==0)(OFF_OLD*OFFG(I)<ZERO))
643 . WRITE(IOUT,*)' spring deactivation:
',IXR(NIXR,II)
652 IF(OFFG(I) /= ZERO) IGOF=0
658.AND.
ELSEIF (ITY == 7 MLW /= 0) THEN ! void material, off not used
659 OFFG => ELBUF_TAB(NG)%GBUF%OFF
660 ISTRAIN = IPARG(44,NG)
661 NPT = IABS(IPARG(6,NG))
664 NALL = ITAG(IXTG(2,II)) * ITAG(IXTG(3,II)) *
668 IF (ONFELT == 1) THEN
669 OFFG(I) = ABS(OFFG(I))
670.OR.
IF ((PRI_OFF==0)(OFF_OLD*OFFG(I)<ZERO))
671 . WRITE(IOUT,*)' sh_3n activation:
',IXTG(6,II)
672 ELSEIF(ONFELT == 0)THEN
673 OFFG(I) = -ABS(OFFG(I))
674.OR.
IF ((PRI_OFF==0)(OFF_OLD*OFFG(I)<ZERO))
675 . WRITE(IOUT,*)' sh_3n deactivation:
',IXTG(6,II)
684 IF (OFFG(I) > ZERO) IGOF=0
697.OR.
ENDIF ! IF(ONFELT == 0ONFELT == 1)THEN
703 IF (ISPMD /= 0) CALL SPMD_CHKW(IWIOUT,IOUT)
704 CALL SPMD_GLOB_ISUM9(IWIOUT,1)
705 CALL SPMD_IBCAST(IWIOUT,IWIOUT,1,1,0,2)
707 CALL SPMD_WIOUT(IOUT,IWIOUT)