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(,*), 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,
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 IF(nskew == 0 .AND. sub_index /= 0 ) nskew = lsubmodel(sub_index)%SKEW
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)
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)
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)
316 IF (itagnd(m)/=0)
THEN
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
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 IF(iabs(ibfv(1,j)) == npby(1,nrb).AND.
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)
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)
441 . anmode=aninfo_blind_1,
442 . i1=itab(npby(1,nrb)),
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)
577 use element_mod ,
only : nixs,nixc,nixtg,nixq
581#include "implicit_f.inc"
585#include "com01_c.inc"
586#include "com04_c.inc"
591 INTEGER IGRNRBY(*),ISOLOFF(*),ISHEOFF(*),ITRIOFF(*),
592 . IXS(NIXS,*), IXC(NIXC,*), IXTG(NIXTG,*),
593 . KNOD2ELC(*), KNOD2ELTG(*), NOD2ELC(*), NOD2ELTG(*),
594 . KNOD2ELS(*), NOD2ELS(*),KNOD2ELQ(*),IQUAOFF(*),
595 . NOD2ELQ(*) ,IXQ(NIXQ,*)
597 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
598 TYPE(),
INTENT(IN)::LSUBMODEL(*)
602 INTEGER I, ISENS, IG, NSN, II, NALL, IGU, , ID, IRBYON, IOPT, NN, JJ, NRB
603 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAG
604 CHARACTER(LEN=NCHARTITLE) :: TITR
622 CALL my_alloc(itag,numnod)
629 is_available = .false.
646 . option_titr = titr)
648 CALL hm_get_intv(
'sens_ID',isens,is_available,lsubmodel)
649 CALL hm_get_intv(
'grnd_ID',igu,is_available,lsubmodel)
650 CALL hm_get_intv(
'Ioptoff',iopt,is_available,lsubmodel)
659 IF(isens/=0) irbyon=0
661 IF(ndsolv == 1) irbyon=0
667 IF(igrnod(i)%ID == igu)
THEN
676 nsn = igrnod(ig)%NENTITY
678 itag(igrnod(ig)%ENTITY(i)) = 1
683 nn = igrnod(ig)%ENTITY(i)
684 DO jj = knod2els(nn)+1,knod2els(nn+1)
686 nall = itag(ixs(2,ii)) * itag(ixs(3,ii)) *
687 + itag(ixs(4,ii)) * itag(ixs(5,ii)) *
688 + itag(ixs(6,ii)) * itag(ixs(7,ii)) *
689 + itag(ixs(8,ii)) * itag(ixs(9,ii))
696 DO jj = knod2elc(nn)+1,knod2elc(nn+1)
698 nall = itag(ixc(2,ii)) * itag(ixc(3,ii)) *
699 + itag(ixc(4,ii)) * itag(ixc(5,ii))
706 DO jj = knod2eltg(nn)+1,knod2eltg(nn+1)
708 nall = itag(ixtg(2,ii)) * itag(ixtg(3,ii)) *
715 DO jj = knod2elq(nn)+1,knod2elq(nn+1)
717 nall = itag(ixq(2,ii)) * itag(ixq(3,ii)) *
718 + itag(ixq(4,ii)) * itag(ixq(5,ii))
727 itag(igrnod(ig)%ENTITY(i))=0
735 IF(
ALLOCATED(itag))
DEALLOCATE(itag)
749 2 IXTG ,IPARG , ISOLOFF,ISHEOFF,
750 3 ITRUOFF,IPOUOFF,IRESOFF,ITRIOFF,IGRNRBY,
751 4 IGRNOD ,ELBUF_STR,IQUAOFF,IXQ )
759 use element_mod ,
only : nixs,nixc,nixtg,nixq,nixt,nixp,nixr
765#include
"implicit_f.inc"
769#include "com01_c.inc"
770#include "com04_c.inc"
771#include "units_c.inc"
772#include "scr03_c.inc"
773#include "param_c.inc"
777 INTEGER ISOLOFF(*), ISHEOFF(*), ITRIOFF(*),ITRUOFF(*),
778 . IPOUOFF(*), IRESOFF(*),
779 . IXS(NIXS,*), IXC(NIXC,*), IXTG(NIXTG,*), IXT(NIXT,*),
780 . IXP(NIXP,*), IXR(NIXR,*),
781 . IPARG(NPARG,*),IGRNRBY(*),
782 . IQUAOFF(*),IXQ(NIXQ,*)
783 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_STR
785 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
789 INTEGER NG, MLW, ITY, NEL, NFT, IAD, I, II, IGOF, NR, IG,
790 . NSN, NALL, ISHFT, IOK, IRBYON
791 TYPE(G_BUFEL_) ,
POINTER :: GBUF
792 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAG
799 WRITE(iout,*)
' LIST OF DEACTIVATED ELEMENTS FROM RIGID BODIES'
800 WRITE(iout,*)
' ----------------------------------------------'
805 CALL my_alloc(itag,numnod)
814 nsn = igrnod(ig)%NENTITY
816 itag(igrnod(ig)%ENTITY(i))=1
820 nall = itag(ixt(2,ii)) * itag(ixt(3,ii))
827 nall = itag(ixp(2,ii)) * itag(ixp(3,ii))
834 nall = itag(ixr(2,ii)) * itag(ixr(3,ii))
842 itag(igrnod(ig)%ENTITY(i))=0
849 gbuf => elbuf_str(ng)%GBUF
858 IF(ity == 1.AND.mlw/=0)
THEN
862 IF(isoloff(ii)/=0)
THEN
863 gbuf%OFF(i)= -abs(gbuf%OFF(i))
864 IF(ipri>=5)
WRITE(iout,*)
' BRICK DEACTIVATION:',
876 IF (gbuf%OFF(i) > zero) igof=0
883 ELSEIF(ity == 2.AND.mlw/=0)
THEN
887 IF(iquaoff(ii)/=0)
THEN
888 gbuf%OFF(i)= -abs(gbuf%OFF(i))
889 IF(ipri>=5)
WRITE(iout,*)
' QUAD DEACTIVATION:',
901 IF (gbuf%OFF(i) > zero) igof=0
908 ELSEIF(ity == 3.AND.mlw/=0)
THEN
912 IF(isheoff(ii)/=0)
THEN
913 IF (gbuf%OFF(i) > zero)
THEN
914 gbuf%OFF(i) = -gbuf%OFF(i)
915 IF(ipri>=5)
WRITE(iout,*)
' SHELL DEACTIVATION:',
928 IF (gbuf%OFF(i) > zero) igof=0
939 IF(itruoff(ii)/=0)
THEN
940 gbuf%OFF(i)= -abs(gbuf%OFF(i))
941 IF(ipri>=5)
WRITE(iout,*)
' TRUSS DEACTIVATION:',
962 IF(ipouoff(ii)/=0)
THEN
963 gbuf%OFF(i)= -abs(gbuf%OFF(i))
964 IF(ipri>=5)
WRITE(iout,*)
' BEAM DEACTIVATION:',
975 IF(gbuf%OFF(i) > zero) igof=0
982 ELSEIF(ity == 6.AND.mlw/=3)
THEN
986 IF(iresoff(ii)/=0)
THEN
987 IF (gbuf%OFF(i) /= -ten) gbuf%OFF(i) = -abs(gbuf%OFF(i))
989 IF(ipri>=5)
WRITE(iout,*)
' SPRING DEACTIVATION:',
1000 IF(gbuf%OFF(i)/=zero) igof=0
1007 ELSEIF(ity == 7.AND.mlw/=0)
THEN
1012 IF(itrioff(ii)/=0)
THEN
1013 gbuf%OFF(i)= -abs(gbuf%OFF(i))
1014 IF(ipri>=5)
WRITE(iout,*)
' SH_3N DEACTIVATION:',
1026 IF (gbuf%OFF(i) > zero) igof=0
1034 IF(
ALLOCATED(itag))
DEALLOCATE(itag)
subroutine setrbyon(ixs, ixc, ixtg, igrnod, igrnrby, isoloff, isheoff, itrioff, knod2els, knod2elc, knod2eltg, nod2els, nod2elc, nod2eltg, ixq, iquaoff, knod2elq, nod2elq, lsubmodel)
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)
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)