235
236
237
238 USE elbufdef_mod
239 USE sensor_mod
240 use element_mod , only : nixs,nixq,nixc,nixt,nixp,nixr,nixtg
241
242
243
244#include "implicit_f.inc"
245
246
247
248#include "com01_c.inc"
249#include "com04_c.inc"
250#include "com08_c.inc"
251#include "param_c.inc"
252#include "units_c.inc"
253#include "task_c.inc"
254#include "parit_c.inc"
255#include "scr17_c.inc"
256
257
258
259 INTEGER ,INTENT(IN) :: NSENSOR
260 INTEGER IPARG(,*), IPARI(*), IXS(NIXS,*), IXQ(NIXQ,*),
261 . IXC(NIXC,*), IXT(NIXT,*), IXP(NIXP,*), (NIXR,*),
262 . ITAB(*), ITABM1(*),IGRV(NIGRV,*),IBGR(*),
263 . ISKWN(LISKN,*), NPBY(NNPBY,*),ITAG(*),LPBY(*), IXTG(NIXTG,*),
264 . WEIGHT(*), IPART(*), FR_RBY2(3,*), ICFIELD(SIZFIELD,*), LCFIELD(*), TAGSLV_RBY(*)
265
267 . skew(lskew,*),ms(*),in(*),rby(nrby,*),x(3,*),
268 . v(3,*),vr(3,*),fsky(*), a(3,*) ,ar(3,*),
269 . fsav(nthvki,*), stifn(*),stifr(*),fani(3,*),
270 . dmast, dinert, bufsf(*),partsav(*)
271 TYPE(ELBUF_STRUCT_), DIMENSION(NGROUP) :: ELBUF_TAB
272 TYPE(SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
273
274
275
276 INTEGER I ,K, N,NSL,NN,IAD,ONOF,ONOF1,,IACTI,
277 .
278 .
279 . ONFELT,K1,K2,K3,K4,K5,K6,K7,IFAIL,ELT_ACTIV,PRI_OFF
281 . crit
282
283
284
285
286
287
288
289
290 k1=1+lipart1*npart+2*9*npart
291 k2=k1+numels
292 k3=k2+numelq
293 k4=k3+numelc
294 k5=k4+numelt
295 k6=k5+numelp
296 k7=k6+numelr
297
298
299
300
301
302 DO i=1,numnod
303 itag(i)=0
304 ENDDO
305
306 DO i=1,numnod
307 itag(i+numnod)=0
308 ENDDO
309
310 DO n=1,nrbykin
311 isens = npby(4,n)
312 iacti = npby(7,n)
313 IF(isens==0 .AND. iacti==1 .AND. npby(1,n)>0)
314 . itag(npby(1,n)+numnod)=n
315 ENDDO
316
317
318
319 k = 1
320 onfelt=1
321 onof1 =0
322 elt_activ =0
323 DO n=1,nrbykin
324 isens = npby(4,n)
325 iacti = npby(7,n)
326 ifail = npby(18,n)
327 crit = rby(30,n)
328 IF(isens/=0 .AND. (ifail/=1 .OR. crit < one))THEN
329 IF (iacti==0 .AND. tt <= sensor_tab(isens)%TSTART) THEN
330
331
332
333
334 IFTHEN
335 WRITE(iout,'(/a,i9,a)')' rigid body:',
336 . NPBY(6,N),' set on'
337 WRITE(ISTDO,'(/a,i9,a)')' rigid body:',
338 . NPBY(6,N),' on'
339 ENDIF
340
341 ONOF = 1 ! activate rbody
342 ONFELT= 0 ! deactivation of elements
343 PRI_OFF = 0 ! full printout
344 CALL RBYPID( IPARG ,IPARI ,MS ,IN ,
345 2 IXS ,IXQ ,IXC ,IXT ,IXP ,
346 3 IXR ,SKEW ,ITAB ,ITABM1 ,ISKWN ,
347 4 NPBY(1,N),ONOF ,ITAG ,LPBY(K) ,
348 5 X ,V ,VR ,RBY(1,N),
349 6 IXTG ,NPBY ,RBY ,LPBY ,1 ,
350 7 FR_RBY2 ,N ,ONFELT,WEIGHT ,PARTSAV ,
351 8 IPART(K3),NPBY(2,N) ,ELBUF_TAB,PRI_OFF)
352 ONOF1 = 1 ! at least 1 rbody is activated or deactivated
353 NPBY(7,N)=1
354.AND. ELSEIF (IACTI>1 TT <= SENSOR_TAB(ISENS)%TSTART) THEN
355
356
357
358
359 ONOF = -1 ! nothing against rbody (rbody was not yet deactivated)
360 ONFELT= 0 ! deactivation of elements
361 PRI_OFF = 0 ! full printout
362 CALL RBYPID( IPARG ,IPARI ,MS ,IN ,
363 2 IXS ,IXQ ,IXC ,IXT ,IXP ,
364 3 IXR ,SKEW ,ITAB ,ITABM1 ,ISKWN ,
365 4 NPBY(1,N),ONOF ,ITAG ,LPBY(K) ,
366 5 X ,V ,VR ,RBY(1,N),
367 6 IXTG ,NPBY ,RBY ,LPBY ,1 ,
368 7 FR_RBY2 ,N ,ONFELT,WEIGHT ,PARTSAV ,
369 8 IPART(K3),NPBY(2,N) ,ELBUF_TAB,PRI_OFF)
370 NPBY(7,N)=1
371 ENDIF
372 ENDIF
373 K=K+NPBY(2,N)
374 ENDDO
375.AND. IF(ONFELT==0IPARIT/=0)THEN ! reset forces of deactivated elements.
376 DO I=1,8*LSKY
377 FSKY(I)=0.0
378 ENDDO
379 ENDIF
380
381
382
383
384 K = 1
385 DO N=1,NRBYKIN
386 IACTI=NPBY(7,N)
387 ISENS=NPBY(4,N)
388 IFAIL = NPBY(18,N)
389 CRIT = RBY(30,N)
390.AND..OR. IF(ISENS/=0 (IFAIL/=1 CRIT < ONE) )THEN
391.AND. IF (IACTI == 1 TT > SENSOR_TAB(ISENS)%TSTART) THEN
392 IF( TT> ZERO)THEN
393 IACTI=4
394 NPBY(7,N)=IACTI
395 IF (ISPMD==0) THEN
396 WRITE(IOUT,'(/a,i9,a)')' rigid body:',
397 . NPBY(6,N),' will be set off within 2 cycles'
398 WRITE(ISTDO,'(/a,i9,a)')' rigid body:',
399 . NPBY(6,N),' will be set off within 2 cycles'
400 ENDIF
401
402 ONOF = -1 ! nothing against rbody
403 ONFELT= 1 ! activation of elements
404 PRI_OFF = 0 ! full printout
405 CALL RBYPID( IPARG ,IPARI ,MS ,IN ,
406 2 IXS ,IXQ ,IXC ,IXT ,IXP ,
407 3 IXR ,SKEW ,ITAB ,ITABM1 ,ISKWN ,
408 4 NPBY(1,N),ONOF ,ITAG ,LPBY(K) ,
409 5 X ,V ,VR ,RBY(1,N),
410 6 IXTG ,NPBY ,RBY ,LPBY ,1 ,
411 7 FR_RBY2 ,N ,ONFELT,WEIGHT ,PARTSAV ,
412 8 IPART(K3),NPBY(2,N) ,ELBUF_TAB, PRI_OFF)
413 ELT_ACTIV = 1 ! elts of at least 1 rby are activated
414 ELSE ! IF(TT>0.)THEN
415 IF (ISPMD==0) THEN
416 WRITE(IOUT,'(/a,i9,a)')' rigid body:',
417 . npby(6,n),' SET OFF'
418 WRITE(istdo,'(/A,I9,A)')' RIGID BODY:',
419 . npby(6,n),' OFF'
420 ENDIF
421
422 onof = 0
423 onfelt= 1
424 pri_off = 0
425 CALL rbypid( iparg ,ipari ,ms ,in ,
426 2 ixs ,ixq ,ixc ,ixt ,ixp ,
427 3 ixr ,skew ,itab ,itabm1 ,iskwn ,
428 4 npby(1,n),onof ,itag ,lpby(k) ,
429 5 x ,v ,vr ,rby(1,n),
430 6 ixtg ,npby ,rby ,lpby ,1 ,
431 7 fr_rby2 ,n ,onfelt
432 8 ipart(k3),npby(2,n) ,elbuf_tab, pri_off)
433 npby(7,n)=0
434 onof1 = 1
435 elt_activ = 1
436 ENDIF
437 ELSEIF(iacti==2)THEN
438
439
440
441
442 IF (ispmd==0) THEN
443 WRITE(iout,'(/A,I9,A)')' RIGID BODY:',
444 . npby(6,n),' SET OFF'
445 WRITE(istdo,'(/a,i9,a)')' rigid body:',
446 . NPBY(6,N),' off'
447 ENDIF
448
449 ONOF = 0 ! deactivate rbody
450 ONFELT= -1 ! nothing against elements
451 PRI_OFF = 0 ! full printout
452 CALL RBYPID( IPARG ,IPARI ,MS ,IN ,
453 2 IXS ,IXQ ,IXC ,IXT ,IXP ,
454 3 IXR ,SKEW ,ITAB ,ITABM1 ,ISKWN ,
455 4 NPBY(1,N),ONOF ,ITAG ,LPBY(K) ,
456 5 X ,V ,VR ,RBY(1,N),
457 6 IXTG ,NPBY ,RBY ,LPBY ,1 ,
458 7 FR_RBY2 ,N ,ONFELT,WEIGHT ,PARTSAV ,
459 8 IPART(K3),NPBY(2,N) ,ELBUF_TAB, PRI_OFF)
460 NPBY(7,N)=0
461 ONOF1 = 1 ! at least 1 rbody is activated or deactivated
462 ENDIF
463 ENDIF
464 K=K+NPBY(2,N)
465 ENDDO
466
467
468
469
470
471 K = 1
472 DO N=1,NRBYKIN
473 IACTI=NPBY(7,N)
474 ISENS=NPBY(4,N)
475 IFAIL = NPBY(18,N)
476 CRIT = RBY(30,N)
477.AND..AND. IF(IACTI >= 1IFAIL == 1CRIT >= ONE)THEN ! If rbody is active
478 IF(IACTI==1)THEN ! and failure is detected
479 IF(TT>0.)THEN
480 IACTI=4
481 NPBY(7,N)=IACTI
482 IF (ISPMD==0) THEN
483 WRITE(IOUT,'(/a,i9,a)')' rigid body failure : rigid body:',
484 . NPBY(6,N),' will be set off within 2 cycles'
485 WRITE(ISTDO,'(/a,i9,a)')' rigid body failure : rigid body:',
486 . NPBY(6,N),' will be set off within 2 cycles'
487 ENDIF
488
489 ONOF = -1 ! nothing against rbody
490 ONFELT= 1 ! activation of elements
491 PRI_OFF = 0 ! full printout
492 CALL RBYPID( IPARG ,IPARI ,MS ,IN ,
493 2 IXS ,IXQ ,IXC ,IXT ,IXP ,
494 3 IXR ,SKEW ,ITAB ,ITABM1 ,ISKWN ,
495 4 NPBY(1,N),ONOF ,ITAG ,LPBY(K) ,
496 5 X ,V ,VR ,RBY(1,N),
497 6 IXTG ,NPBY ,RBY ,LPBY ,1 ,
498 7 FR_RBY2 ,N ,ONFELT,WEIGHT ,PARTSAV ,
499 8 IPART(K3),NPBY(2,N) ,ELBUF_TAB, PRI_OFF)
500 ELT_ACTIV = 1 ! elts of at least 1 rby are activated
501 ELSE ! IF(TT>0.)THEN (Failure most probably does not occur at time zero)
502 IF (ISPMD==0) THEN
503 WRITE(IOUT,'(/a,i9,a)')' rigid body failure : rigid body:',
504 . NPBY(6,N),' set off'
505 WRITE(ISTDO,'(/a,i9,a)')' rigid body failure : rigid body:',
506 . NPBY(6,N),' off'
507 ENDIF
508
509 ONOF = 0 ! deactivate rbody
510 ONFELT= 1 ! activation of elements
511 PRI_OFF = 0 ! full printout
512 CALL RBYPID( IPARG ,IPARI ,MS ,IN ,
513 2 IXS ,IXQ ,IXC ,IXT ,IXP ,
514 3 IXR ,SKEW ,ITAB ,ITABM1 ,ISKWN ,
515 4 NPBY(1,N),ONOF ,ITAG ,LPBY(K) ,
516 5 X ,V ,VR ,RBY(1,N),
517 6 IXTG ,NPBY ,RBY ,LPBY ,1 ,
518 7 FR_RBY2 ,N ,ONFELT,WEIGHT ,PARTSAV ,
519 8 IPART(K3),NPBY(2,N) ,ELBUF_TAB, PRI_OFF)
520 NPBY(7,N)=0
521 ONOF1 = 1 ! at least 1 rbody is activated or deactivated
522 ENDIF
523 ELSEIF(IACTI==2)THEN
524
525
526
527
528 IF (ISPMD==0) THEN
529 WRITE(IOUT,'(/a,i9,a)')' rigid body failure : rigid body:',
530 . NPBY(6,N),' set off'
531 WRITE(ISTDO,'(/a,i9,a)')' rigid body failure : rigid body:',
532 . NPBY(6,N),' off'
533 ENDIF
534
535 ONOF = 0 ! deactivate rbody
536 ONFELT= -1 ! nothing against elements
537 PRI_OFF = 0 ! full printout
538 CALL RBYPID( IPARG ,IPARI ,MS ,IN ,
539 2 IXS ,IXQ ,IXC ,IXT ,IXP ,
540 3 IXR ,SKEW ,ITAB ,ITABM1 ,ISKWN ,
541 4 NPBY(1,N),ONOF ,ITAG ,LPBY(K) ,
542 5 X ,V ,VR ,RBY(1,N),
543 6 IXTG ,NPBY ,RBY ,LPBY ,1 ,
544 7 FR_RBY2 ,N ,ONFELT,WEIGHT ,PARTSAV ,
545 8 IPART(K3),NPBY(2,N) ,ELBUF_TAB, PRI_OFF)
546 NPBY(7,N)=0
547 ONOF1 = 1 ! at least 1 rbody is activated or deactivated
548 ENDIF
549 ENDIF
550 K=K+NPBY(2,N)
551 ENDDO
552
553
554
555
556
557 IF(ELT_ACTIV == 1)THEN
558 K = 1
559 DO N=1,NRBYKIN
560 IACTI=NPBY(7,N)
561.EQ. IF(IACTI1)THEN
562 ONOF = -1 ! nothing against rbody
563 ONFELT= 0 ! deactivation of elements
564 PRI_OFF = 1 ! printout for changed elements only
565 CALL RBYPID( IPARG ,IPARI ,MS ,IN ,
566 2 IXS ,IXQ ,IXC ,IXT ,IXP ,
567 3 IXR ,SKEW ,ITAB ,ITABM1 ,ISKWN ,
568 4 NPBY(1,N),ONOF ,ITAG ,LPBY(K) ,
569 5 X ,V ,VR ,RBY(1,N),
570 6 IXTG ,NPBY ,RBY ,LPBY ,1 ,
571 7 FR_RBY2 ,N ,ONFELT,WEIGHT ,PARTSAV ,
572 8 IPART(K3),NPBY(2,N) ,ELBUF_TAB,PRI_OFF)
573 ENDIF
574 K=K+NPBY(2,N)
575 ENDDO
576 ENDIF
577
578 DO N=1,NRBYKIN
579 IACTI=NPBY(7,N)
580 IF(IACTI>1)THEN
581 IACTI=IACTI-1
582 ENDIF
583 NPBY(7,N)=IACTI
584 ENDDO
585
586
587
588
589 IF(ONOF1==0) GOTO 200
590
591 TAGSLV_RBY(1:NUMNOD)=0
592
593 K=0
594 DO N=1,NRBYKIN
595 ONOF1=NPBY(7,N)
596 NSL=NPBY(2,N)
597 IF(ONOF1>=1)THEN
598 DO I=1,NSL
599 TAGSLV_RBY(LPBY(I+K))=N
600 ENDDO
601 ENDIF
602 K=K+NSL
603 ENDDO
604
605 DO K=1,NGRAV
606 NN =IGRV(1,K)
607 IAD=IGRV(4,K)
608 DO I=IAD,IAD+NN-1
609 N=IABS(IBGR(I))
610 IF(TAGSLV_RBY(N) /= 0)THEN
611 IBGR(I) = -N
612 ELSE
613 IBGR(I) = N
614 ENDIF
615 ENDDO
616 ENDDO
617
618 DO K=1,NLOADC
619 NN = ICFIELD(1,K)
620 IAD = ICFIELD(4,K)
621 DO I=1,NN
622 N=LCFIELD(IAD+I-1)
623 IF(TAGSLV_RBY(N) /= 0)LCFIELD(IAD+I-1) = -N
624 END DO
625 ENDDO
626
627 200 CONTINUE
628 RETURN
629
subroutine rbypid(iparg, ipari, ms, in, ixs, ixq, ixc, ixt, ixp, ixr, skew, itab, itabm1, iskwn, npby, onof, itag, lpby, x, v, vr, rby, ixtg, npbyi, rbyi, lpbyi, iacts, fr_rby2, nrb, onfelt, weight, partsav, ipartc, nsn, elbuf_tab, pri_off)