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