51 2 IGRNOD ,IGRSURF ,IBFV ,IGRV ,IBGR ,
52 3 SENSORS ,IMERGE ,UNITAB ,ISKN ,NOM_OPT ,
53 4 NUMSL ,KNOD2ELS,KNOD2ELC,KNOD2ELTG,KNOD2EL1D,
54 5 KNOD2ELQ ,ITAGND ,ICDNS10 ,LSUBMODEL,ICFIELD ,
73#include "implicit_f.inc"
77#include "analyse_name.inc"
92 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
93 INTEGER NPBY(NNPBY,*), LPBY(*), ITAB(*), ITABM1(*)
95 INTEGER IGRV(NIGRV,*),IBGR(*),IMERGE(*),
96 . ISKN(LISKN,*),NUMSL,
97 . knod2els(*),knod2elc(*),knod2eltg(*),knod2el1d(*),knod2elq(*),
98 . itagnd(*),icdns10(*), icfield(sizfield,*), lcfield(*)
100 INTEGER NOM_OPT(LNOPT1,*)
102 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
103 TYPE (SURF_) ,
TARGET,
DIMENSION(NSURF) :: IGRSURF
104 TYPE (SUBMODEL_DATA),
INTENT(IN)::LSUBMODEL(*)
105 TYPE (SENSORS_) ,
INTENT(IN) :: SENSORS
109 INTEGER I, J, K, N, NSL, NSL0, NSKEW, IC,
110 . ispher, igu,igs,isens,
id,icdg,
111 .
jc,uid,iflagunit,sub_index,nrb,
113 INTEGER IDSURF, ISU, NN, IAD, M, IOPT, IEXPAMS, NEL
115 CHARACTER(LEN=NCHARTITLE)::TITR,TITR1
116 CHARACTER(LEN=NCHARKEY)::KEY
117 my_real BID, MASS, I1, I2, I3, I12, I23, I13, FN, FT, EXPN, EXPT
118 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAG
119 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: TABSL
120 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
125 INTEGER USR2SYS,NGR2USR,NODGRNR6
163 DATA mess/
'RIGID BODY DEFINITION '/
166 CALL my_alloc(tabsl,2,numsl)
174 is_available = .false.
177 CALL my_alloc(itag,numnod)
190 nrb_r2r = nrb_r2r + 1
191 IF (nsubdom > 0)
THEN
199 . option_titr = titr,
201 . submodel_index = sub_index)
207 IF (unitab%UNIT_ID(j) == uid)
THEN
212 IF (uid/=0.AND.iflagunit == 0)
THEN
213 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
214 . i2=uid,i1=
id,c1=
'RIGID BODY',
220 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,nrb),ltitr)
222 CALL hm_get_intv(
'node_ID',npby(1,nrb),is_available,lsubmodel)
223 CALL hm_get_intv(
'sens_ID',isens,is_available,lsubmodel)
224 CALL hm_get_intv(
'Skew_ID',nskew,is_available,lsubmodel)
225 CALL hm_get_intv('ispher
',ISPHER,IS_AVAILABLE,LSUBMODEL)
226 CALL HM_GET_INTV('grnd_id
',IGU,IS_AVAILABLE,LSUBMODEL)
227 CALL HM_GET_INTV('ikrem
',IKREM,IS_AVAILABLE,LSUBMODEL)
228 CALL HM_GET_INTV('icog
',ICDG,IS_AVAILABLE,LSUBMODEL)
229 CALL HM_GET_INTV('surf_id
',IDSURF,IS_AVAILABLE,LSUBMODEL)
230 CALL HM_GET_FLOATV('mass
',MASS,IS_AVAILABLE,LSUBMODEL,UNITAB)
232 IF(ISPHER == 0) ISPHER=2
235.AND.
IF(NSKEW == 0 SUB_INDEX /= 0 ) NSKEW = LSUBMODEL(SUB_INDEX)%SKEW
236 DO J=0,NUMSKW+MIN(1,NSPCOND)*NUMSPH+NSUBMOD
237 IF(NSKEW == ISKN(4,J+1)) THEN
242 CALL ANCMSG(MSGID=137,ANMODE=ANINFO,MSGTYPE=MSGERROR,
245 . I2=NSKEW,I1=ID,C3=TITR)
252 INGR2USR => IGRSURF(1:NSURF)%ID
253 ISU=NGR2USR(IDSURF,INGR2USR,NSURF)
255 CALL ANCMSG(MSGID=158,ANMODE=ANINFO,MSGTYPE=MSGERROR,
256 . I2=IDSURF,I1=ID,C1=TITR)
257 ELSEIF (IGRSURF(ISU)%TYPE/=101) THEN
258 TITR1 = IGRSURF(IGS)%TITLE
259 CALL ANCMSG(MSGID=159,ANMODE=ANINFO,MSGTYPE=MSGERROR,
260 . I2=IDSURF,C2=TITR1,I1=ID,C1=TITR)
265 CALL HM_GET_FLOATV('jxx
',I1,IS_AVAILABLE,LSUBMODEL,UNITAB)
266 CALL HM_GET_FLOATV('jyy
',I2,IS_AVAILABLE,LSUBMODEL,UNITAB)
267 CALL HM_GET_FLOATV('jzz
',I3,IS_AVAILABLE,LSUBMODEL,UNITAB)
271 CALL HM_GET_FLOATV('jxy
',I12,IS_AVAILABLE,LSUBMODEL,UNITAB)
272 CALL HM_GET_FLOATV('jyz
',I23,IS_AVAILABLE,LSUBMODEL,UNITAB)
273 CALL HM_GET_FLOATV('jxz
',I13,IS_AVAILABLE,LSUBMODEL,UNITAB)
275 CALL HM_GET_INTV('ioptoff
',IOPT,IS_AVAILABLE,LSUBMODEL)
276 CALL HM_GET_INTV('iexpams
',IEXPAMS,IS_AVAILABLE,LSUBMODEL)
278 CALL HM_GET_INTV('ifail
',IFAIL,IS_AVAILABLE,LSUBMODEL)
281 CALL HM_GET_FLOATV('fn
',FN,IS_AVAILABLE,LSUBMODEL,UNITAB)
282 CALL HM_GET_FLOATV('ft
',FT,IS_AVAILABLE,LSUBMODEL,UNITAB)
283 CALL HM_GET_FLOATV('expn
',EXPN,IS_AVAILABLE,LSUBMODEL,UNITAB)
284 CALL HM_GET_FLOATV('expt
',EXPT,IS_AVAILABLE,LSUBMODEL,UNITAB)
287 IF(EXPN==ZERO) EXPN=TWO
288 IF(EXPT==ZERO) EXPT=TWO
298 NPBY(1,NRB)= USR2SYS(NPBY(1,NRB),ITABM1,MESS,ID)
301 IF (NPBY(1,NRB) == IMERGE(JC)) NPBY(1,NRB)=IMERGE(NUMCNOD+JC)
303 CALL ANODSET(NPBY(1,NRB), CHECK_RB_M)
307 NSL = NODGRNR6(M,IGU,IGS,LPBY(K+1),IGRNOD,ITABM1,MESS,ID)
314 CALL RIGMODIF_ND(NSL,LPBY(K+1),ITAGND,ICDNS10,ID,TITR,ITAB)
316 IF (ITAGND(M)/=0) THEN
317 CALL ANCMSG(MSGID=1211,
329 CALL ANODSET(LPBY(J+K), CHECK_RB_S)
330 TABSL(1,J+K)=ITAB(LPBY(J+K))
335 DO I=1,SENSORS%NSENSOR
336 IF (ISENS == SENSORS%SENSOR_TAB(I)%SENS_ID) NPBY(4,NRB)=I
338 IF(NPBY(4,NRB) == 0)THEN
339 TITR1 = IGRSURF(IGS)%TITLE
340 CALL ANCMSG(MSGID=159,ANMODE=ANINFO,MSGTYPE=MSGERROR,
341 . I2=ISENS,C2=TITR1,I1=ID,C1=TITR)
366 ELSEIF(IEXPAMS==2)THEN
371 IF (NSUBDOM > 0) NSL0 = IGRNOD(IGS)%R2R_ALL
373 CALL ANCMSG(MSGID=352,
374 . MSGTYPE=MSGWARNING,
375 . ANMODE=ANINFO_BLIND_2,
380 CALL SPMDSET(NRB,NPBY,NNPBY,LPBY,NSL,K)
384 WRITE(IOUT,1100) ID,TRIM(TITR),ISENS,ITAB(NPBY(1,NRB)),NSL,
387 WRITE(IOUT,1111) ID,TRIM(TITR),ITAB(NPBY(1,NRB)),NSL,
388 . IDSURF,ISKN(4,NSKEW),ISPHER,IKREM,ICDG,
393 WRITE(IOUT,1102) ID,TRIM(TITR),ISENS,ITAB(NPBY(1,NRB)),NSL,
396 WRITE(IOUT,1112) ID,TRIM(TITR),ITAB(NPBY(1,NRB)),NSL,
397 . IDSURF,ISKN(4,NSKEW),ISPHER,IKREM,ICDG,
404 WRITE(IOUT,1152) FN, EXPN, FT, EXPT
407 WRITE(IOUT,1202) (ITAB(LPBY(I+K)),I=1,NSL)
413.AND.
IF(IABS(IBFV(1,J)) == NPBY(1,NRB)
414 . IBFV(2,J)-10*(IBFV(2,J)/10)>=4)THEN
421 NEL=KNOD2ELS(NPBY(1,NRB)+1) -KNOD2ELS(NPBY(1,NRB))
422 . +KNOD2ELC(NPBY(1,NRB)+1) -KNOD2ELC(NPBY(1,NRB))
423 . +KNOD2ELTG(NPBY(1,NRB)+1)-KNOD2ELTG(NPBY(1,NRB))
424 . +KNOD2EL1D(NPBY(1,NRB)+1)-KNOD2EL1D(NPBY(1,NRB))
425 . +KNOD2ELQ(NPBY(1,NRB)+1)-KNOD2ELQ(NPBY(1,NRB))
429 CALL FRETITL2(TITR,NOM_OPT(LNOPT1-LTITR+1,NRB),LTITR)
430 CALL ANCMSG(MSGID=448,
431 . MSGTYPE=MSGWARNING,
432 . ANMODE=ANINFO_BLIND_2,
433 . I1=ITAB(NPBY(1,NRB)),
438 CALL FRETITL2(TITR,NOM_OPT(LNOPT1-LTITR+1,NRB),LTITR)
439 CALL ANCMSG(MSGID=1066,
441 . ANMODE=ANINFO_BLIND_1,
442 . I1=ITAB(NPBY(1,NRB)),
447 END IF ! IF(KEY=='')THEN
452 CALL UDOUBLE(NPBY(6,1),NNPBY,NRBYKIN,MESS,0,BID)
458 CALL NEWDBL(NPBY(1,1),NNPBY,NRBYKIN,ITAB,442,ANINFO_BLIND_1,
483 IF(ITAG(N) == 1)IBGR(I+IAD-1) = -N
492 IF(ITAG(N) == 1)LCFIELD(IAD+I-1) = -N
496 IF(ALLOCATED(ITAG)) DEALLOCATE(ITAG)
497 IF(ALLOCATED(TABSL))DEALLOCATE(TABSL)
502 . ' rigid body definitions
'/
503 . ' ----------------------
'/)
5041100 FORMAT( /5X,'rigid body
id ',I10,1X,A
506 . /10X,'primary node
',I10
507 . /10X,'number of nodes
',I10
508 . /10X,'surface linked to body ',i10
509 . /10x,
'SPHERICAL INERTIA FLAG ',i10)
5101102
FORMAT( /5x,
'RIGID BODY ID ',i10,1x,a
512 . /10x,
'PRIMARY NODE ',i10
513 . /10x,
'NUMBER OF NODES ',i10
514 . /10x,
'SURFACE LINKED TO BODY ',i10
515 . /10x,
'SPHERICAL INERTIA FLAG ',i10)
5161103
FORMAT( /10x,
'NO AMS EXPANSION OVERALL THE RBODY ')
5171111
FORMAT( /5x,
'RIGID BODY ID ',i10,1x,a
518 . /10x,
'PRIMARY NODE ',i10
519 . /10x,
'NUMBER OF NODES ',i10
520 . /10x,
'SURFACE LINKED TO BODY ',i10
521 . /10x,
'SKEW NUMBER ',i10
522 . /10x,
'SPHERICAL INERTIA FLAG ',i10
523 . /10x,
'REMOVE SECONDARY NODES FROM RIGID WALL(IF=0)',i10
524 . /10x,
'CENTER OF MASS FLAG ',i10
525 . /10x,
'ADDED MASS ',1pg20.4
526 . /10x,
'ADDED INERTIA ',1p6g20.4)
5271112
FORMAT( /5x,
'RIGID BODY ID ',i10,1x,a
528 . /10x,
'PRIMARY NODE ',i10
529 . /10x,
'NUMBER OF NODES ',i10
530 . /10x,
'SURFACE LINKED TO BODY ',i10
531 . /10x,
'SKEW NUMBER ',i10
532 . /10x,
'SPHERICAL INERTIA FLAG ',i10
533 . /10x,
'REMOVE SECONDARY NODES FROM RIGID WALL(IF=0)',i10
534 . /10x,
'CENTER OF MASS FLAG ',i10
535 . /10x,
'ADDED MASS ',1pg20.4
536 . /10x,
'ADDED INERTIA ',1p6g20.4)
5371151
FORMAT(/10x,
'FAILURE CRITERIA : ')
5381152
FORMAT(/10x,
'NORMAL FORCE AT FAILURE. . . . . . . . . . . . .',1pg20.4
539 . /10x,
'FAILURE EXPONENT PARAMETER IN NORMAL DIRECTION ',1pg20.4
540 . /10x,
'SHEAR FORCE AT FAILURE . . . . . . . . . . . . .',1pg20.4
541 . /10x,
'FAILURE EXPONENT PARAMETER IN SHEAR DIRECTION ',1pg20.4)
5421201
FORMAT(/10x,
'SECONDARY NODES ')
5431202
FORMAT( 10x,10i10)
561 SUBROUTINE setrbyon(IXS ,IXC ,IXTG ,IGRNOD ,IGRNRBY ,
562 2 ISOLOFF ,ISHEOFF ,ITRIOFF,KNOD2ELS,KNOD2ELC,
563 3 KNOD2ELTG,NOD2ELS ,NOD2ELC,NOD2ELTG,IXQ ,
564 4 IQUAOFF ,KNOD2ELQ,NOD2ELQ,LSUBMODEL)
580#include
"implicit_f.inc"
584#include "com01_c.inc"
585#include "com04_c.inc"
590 INTEGER IGRNRBY(*),ISOLOFF(*),ISHEOFF(*),ITRIOFF(*),
591 . IXS(NIXS,*), IXC(NIXC,*), IXTG(NIXTG,*),
592 . KNOD2ELC(*), KNOD2ELTG(*), NOD2ELC(*), NOD2ELTG(*),
593 . KNOD2ELS(*), NOD2ELS(*),KNOD2ELQ(*),IQUAOFF(*),
594 . NOD2ELQ(*) ,IXQ(NIXQ,*)
596 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
597 TYPE(SUBMODEL_DATA),
INTENT(IN)::LSUBMODEL(*)
601 INTEGER I, ISENS, IG, NSN, II, NALL, IGU, N, ID, IRBYON, IOPT, NN, JJ, NRB
602 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAG
603 CHARACTER(LEN=NCHARTITLE) :: TITR
621 CALL my_alloc(itag,numnod)
628 is_available = .false.
645 . option_titr = titr)
647 CALL hm_get_intv(
'sens_ID',isens,is_available,lsubmodel)
648 CALL hm_get_intv(
'grnd_ID',igu,is_available,lsubmodel
649 CALL hm_get_intv(
'Ioptoff',iopt,is_available,lsubmodel)
658 IF(isens/=0) irbyon=0
660 IF(ndsolv == 1) irbyon=0
666 IF(igrnod(i)%ID == igu)
THEN
675 nsn = igrnod(ig)%NENTITY
677 itag(igrnod(ig)%ENTITY(i)) = 1
682 nn = igrnod(ig)%ENTITY(i)
683 DO jj = knod2els(nn)+1,knod2els(nn+1)
685 nall = itag(ixs(2,ii)) * itag(ixs(3,ii)) *
686 + itag(ixs(4,ii)) * itag(ixs(5,ii)) *
687 + itag(ixs(6,ii)) * itag(ixs(7,ii)) *
688 + itag(ixs(8,ii)) * itag(ixs(9,ii))
695 DO jj = knod2elc(nn)+1,knod2elc(nn+1)
697 nall = itag(ixc(2,ii)) * itag(ixc(3,ii
698 + itag(ixc(4,ii)) * itag(ixc(5,ii))
705 DO jj = knod2eltg(nn)+1,knod2eltg(nn+1)
707 nall = itag(ixtg(2,ii)) * itag(ixtg(3,ii)) *
714 DO jj = knod2elq(nn)+1,knod2elq(nn+1)
716 nall = itag(ixq(2,ii)) * itag(ixq(3,ii)) *
717 + itag(ixq(4,ii)) * itag(ixq(5,ii))
726 itag(igrnod(ig)%ENTITY(i))=0
734 IF(
ALLOCATED(itag))
DEALLOCATE(itag)
748 2 IXTG ,IPARG , ISOLOFF,ISHEOFF,
749 3 ITRUOFF,IPOUOFF,IRESOFF,ITRIOFF,IGRNRBY,
750 4 IGRNOD ,ELBUF_STR,IQUAOFF,IXQ )
763#include "implicit_f.inc"
767#include "com01_c.inc"
768#include "com04_c.inc"
769#include "units_c.inc"
770#include "scr03_c.inc"
771#include "param_c.inc"
775 INTEGER ISOLOFF(*), ISHEOFF(*), ITRIOFF(*),ITRUOFF(*),
776 . IPOUOFF(*), IRESOFF(*),
777 . IXS(NIXS,*), IXC(NIXC,*), IXTG(NIXTG,*), IXT(NIXT,*),
778 . IXP(NIXP,*), IXR(NIXR,*),
779 . IPARG(NPARG,*),IGRNRBY(*),
780 . IQUAOFF(*),IXQ(NIXQ,*)
781 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_STR
783 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
787 INTEGER NG, MLW, ITY, NEL, NFT, IAD, I, II, IGOF, NR, IG,
788 . NSN, NALL, ISHFT, IOK, IRBYON
789 TYPE(G_BUFEL_) ,
POINTER :: GBUF
790 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAG
797 WRITE(iout,*)
' LIST OF DEACTIVATED ELEMENTS FROM RIGID BODIES'
798 WRITE(iout,*)
' ----------------------------------------------'
803 CALL my_alloc(itag,numnod)
812 nsn = igrnod(ig)%NENTITY
814 itag(igrnod(ig)%ENTITY(i))=1
818 nall = itag(ixt(2,ii)) * itag(ixt(3,ii))
825 nall = itag(ixp(2,ii)) * itag(ixp(3,ii))
832 nall = itag(ixr(2,ii)) * itag(ixr(3,ii))
840 itag(igrnod(ig)%ENTITY(i))=0
847 gbuf => elbuf_str(ng)%GBUF
856 IF(ity == 1.AND.mlw/=0)
THEN
860 IF(isoloff(ii)/=0)
THEN
861 gbuf%OFF(i)= -abs(gbuf%OFF(i))
862 IF(ipri>=5)
WRITE(iout,*)' brick deactivation:
',
874 IF (GBUF%OFF(I) > ZERO) IGOF=0
881.AND.
ELSEIF(ITY == 2MLW/=0)THEN ! loi0, pas de off
885 IF(IQUAOFF(II)/=0)THEN
886 GBUF%OFF(I)= -ABS(GBUF%OFF(I))
887 IF(IPRI>=5) WRITE(IOUT,*)' quad deactivation:
',
899 IF (GBUF%OFF(I) > ZERO) IGOF=0
906.AND.
ELSEIF(ITY == 3MLW/=0)THEN ! loi0, pas de off
910 IF(ISHEOFF(II)/=0)THEN
911 IF (GBUF%OFF(I) > ZERO)THEN
912 GBUF%OFF(I) = -GBUF%OFF(I)
913 IF(IPRI>=5) WRITE(IOUT,*)' shell deactivation:
',
926 IF (GBUF%OFF(I) > ZERO) IGOF=0
937 IF(ITRUOFF(II)/=0)THEN
938 GBUF%OFF(I)= -ABS(GBUF%OFF(I))
939 IF(IPRI>=5) WRITE(IOUT,*)' truss deactivation:
',
960 IF(IPOUOFF(II)/=0)THEN
961 GBUF%OFF(I)= -ABS(GBUF%OFF(I))
962 IF(IPRI>=5) WRITE(IOUT,*)' beam deactivation:
',
973 IF(GBUF%OFF(I) > ZERO) IGOF=0
980.AND.
ELSEIF(ITY == 6MLW/=3)THEN
984 IF(IRESOFF(II)/=0)THEN
985 IF (GBUF%OFF(I) /= -TEN) GBUF%OFF(I) = -ABS(GBUF%OFF(I))
987 IF(IPRI>=5) WRITE(IOUT,*)' spring deactivation:
',
998 IF(GBUF%OFF(I)/=ZERO) IGOF=0
1005.AND.
ELSEIF(ITY == 7MLW/=0)THEN ! loi0, pas de off
1010 IF(ITRIOFF(II)/=0)THEN
1011 GBUF%OFF(I)= -ABS(GBUF%OFF(I))
1012 IF(IPRI>=5) WRITE(IOUT,*)' sh_3n deactivation:',
1024 IF (gbuf%OFF(i) > zero) igof=0
1032 IF(
ALLOCATED(itag))
DEALLOCATE(itag)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
subroutine setrbyon(ixs, ixc, ixtg, igrnod, igrnrby, isoloff, isheoff, itrioff, knod2els, knod2elc, knod2eltg, nod2els, nod2elc, nod2eltg, ixq, iquaoff, knod2elq, nod2elq, lsubmodel)
subroutine seteloff(ixs, ixc, ixt, ixp, ixr, ixtg, iparg, isoloff, isheoff, itruoff, ipouoff, iresoff, itrioff, igrnrby, igrnod, elbuf_str, iquaoff, ixq)
subroutine hm_read_rbody(rby, npby, lpby, itab, itabm1, igrnod, igrsurf, ibfv, igrv, ibgr, sensors, imerge, unitab, iskn, nom_opt, numsl, knod2els, knod2elc, knod2eltg, knod2el1d, knod2elq, itagnd, icdns10, lsubmodel, icfield, lcfield)
integer, parameter nchartitle
integer, parameter ncharkey
integer, dimension(:), allocatable tagrby
subroutine hm_sz_r2r(tag, val, lsubmodel)
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)