54 1 ITAB ,ITABM1 ,IGRNOD ,
55 2 ISUBMOD ,X ,GEO ,IXS ,
56 3 IXQ ,IXC ,IXT ,IXP ,IXR ,
58 5 IPARTS ,IPARTQ ,IPARTC ,IPARTT ,IPARTP ,
59 6 IPARTR ,IPARTG ,IPARTSP ,KXSP ,
60 7 FLAG ,MAXNNOD ,SKEW ,ISKN ,
61 8 UNITAB ,IBOX ,IXS10 ,IXS20 ,
62 9 IXS16 ,RTRANS ,LSUBMODEL,IXX ,
63 A KXX ,IPARTX ,IADBOXMAX,IGRSLIN,SUBSET ,
64 B IGRBRIC ,IGRQUAD ,IGRSH4N ,IGRSH3N ,IGRTRUSS,
65 C IGRBEAM ,IGRSPRING,IGRSURF,NSETS )
81#include
"implicit_f.inc"
92 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
94 . IXS(NIXS,*),IXQ(NIXQ,*),IXC(NIXC,*),IXT(NIXT,*),
95 . IXP(NIXP,*),IXR(NIXR,*),IXTG(NIXTG,*),IPARTS(*),
96 . IPARTQ(*),IPARTC(*),IPARTT(*),IPARTP(*),IPARTR(*),
97 . IPARTG(*),IPART(LIPART1,*),ITAB(*),
98 . IXS10(6,*) ,IXS20(12,*) ,IXS16(8,*),
99 . KXSP(NISP,*),IPARTSP(*),ISUBMOD(*),ISKN(LISKN,*),
100 . IXX(*),KXX(*),IPARTX(*),IADBOXMAX,NSETS
103 . X(3,*),GEO(NPROPG,*),SKEW(LSKEW,*),RTRANS(*)
106 TYPE (SUBSET_) ,
DIMENSION(NSUBS) :: SUBSET
107 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRNOD) :: IGRNOD
108 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRQUAD) :: IGRQUAD
109 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRBRIC) :: IGRBRIC
110 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRSHEL) :: IGRSH4N
111 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRSH3N) :: IGRSH3N
112 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRTRUS) :: IGRTRUSS
113 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRBEAM) :: IGRBEAM
114 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRSPRI) :: IGRSPRING
115 TYPE (SURF_) ,
TARGET,
DIMENSION(NSURF) :: IGRSURF
116 TYPE (SURF_) ,
TARGET,
DIMENSION(NSLIN) :: IGRSLIN
117 TYPE (BOX_) ,
DIMENSION(NBBOX) :: IBOX
121 INTEGER J10(10),ID_SUB
122 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFTMP
123 INTEGER I,J,K,II,KK,N1,N2,ISU,ID,JREC,NNOD,NL,NTRI,IGS,IGRS,
124 . ok,it0,it1,it2,it3,it4,it5,it6,
125 . flag_fmt,flag_fmt_tmp,ifix_tmp,stat,it7,uid,iflagunit,
126 . it8,sub_id,iadbox,nn,list_igr(ngrnod),idmin,idmax,offset,
127 . it9,idb,nentity,nlines,jj
130 . xmin,xmax,ymin,
ymax,zmin,zmax,bid,fac_l
131 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFTMP2
132 CHARACTER(LEN=NCHARTITLE) :: TITR, TITR1
133 CHARACTER(LEN=NCHARKEY) :: KEY,
135 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFBOX
140 INTEGER USR2SYS,ULIST2S,LISTCNT
142 DATA mess/
'NODE GROUP DEFINITION '/
167 ALLOCATE(buftmp(2*numnod + npart))
168 is_available = .false.
193 . option_titr = titr ,
204 igrnod(igs)%NENTITY = 0
205 igrnod(igs)%GRTYPE = 0
206 igrnod(igs)%SORTED = 0
207 igrnod(igs)%GRPGRP = 0
208 igrnod(igs)%LEVEL = 0
209 igrnod(igs)%R2R_ALL = 0
210 igrnod(igs)%R2R_SHARE = 0
218 igrnod(igs)%TITLE = titr
223 IF(key(1:7) ==
'GRNODNS')
THEN
225 igrnod(igs)%NENTITY=-1
232 ELSEIF(key(1:5) ==
'GRNOD')
THEN
233 igrnod(igs)%NENTITY=-1
239 ELSEIF(key(1:6) ==
'NODENS')
THEN
242 CALL hm_get_intv(
'idsmax' ,nentity,is_available,lsubmodel)
249 igrnod(igs)%NENTITY=nnod
251 IF (.NOT.
ALLOCATED(igrnod(igs)%ENTITY))
252 .
CALL my_alloc(igrnod(igs)%ENTITY,nnod)
254 maxnnod =
max(nnod,maxnnod)
257 CALL hm_get_intv(
'idsmax' ,nentity,is_available,lsubmodel)
262 igrnod(igs)%ENTITY(nn) = usr2sys(jj,itabm1,mess,id)
268 ELSEIF(key(1:4) ==
'NODE' .OR. key(1:5) ==
'CNODE')
THEN
272 CALL hm_get_intv(
'idsmax' ,nentity,is_available,lsubmodel)
273 IF(is_available)nnod = nnod + nentity
274 igrnod(igs)%NENTITY=nnod
276 IF( .NOT.
ALLOCATED(igrnod(igs)%ENTITY))
277 .
CALL my_alloc(igrnod(igs)%ENTITY,nnod)
279 maxnnod =
max(nnod,maxnnod)
282 CALL hm_get_intv(
'idsmax' ,nentity,is_available,lsubmodel)
287 igrnod(igs)%ENTITY(nn) = jj
293 ELSEIF(key(1:4) ==
'PART'.OR.key(1:6) ==
'SUBSET'.OR.
294 . key(1:3) ==
'MAT' .OR.key(1:4) ==
'PROP')
THEN
296 IF (flag == 0) igrnod(igs)%NENTITY=0
300 ELSEIF((key(1:3) ==
'BOX' .AND. nbbox == 0 .AND.
301 . (key2(1:5) /=
'RECTA'.AND.
302 . key2(1:5) /=
'CYLIN'.AND.key2(1:5) /=
'SPHER')).OR.
303 . key(1:4) ==
'GENE'.OR.key(1:4) ==
'BOXA')
THEN
305 IF (flag == 0) igrnod(igs)%NENTITY=0
309 ELSEIF(key(1:2) ==
'GR'.OR.key(1:4) ==
'SURF'.OR.key(1:4) ==
'LINE')
THEN
311 IF (flag == 0) igrnod(igs)%NENTITY=0
315 ELSEIF(key(1:6) ==
'SUBMOD')
THEN
317 IF (flag == 0) igrnod(igs)%NENTITY=0
321 ELSEIF(key(1:3) ==
'BOX'.AND.(key2(1:5) == 'recta.OR.
'
322 . KEY2(1:5) == 'cylin.OR.
'KEY2(1:5) == 'spher
'))THEN
327 IF (FLAG == 0) IGRNOD(IGS)%NENTITY=0
329 !-----------------------------------------------------------------
331 ELSEIF(KEY(1:3) == 'box.AND.
' NBBOX > 0)THEN
334 !-----------------------------------------------------------------
335 ! GRNOD from GEN_INCR
336 ELSEIF(KEY(1:8) == 'gen_incr
')THEN
338 IF (FLAG == 0) IGRNOD(IGS)%NENTITY=0
348 LIST_IGR(IGS) = IGRNOD(IGS)%ID
350 CALL UDOUBLE_IGR(LIST_IGR,NGRNOD,MESS,0,BID)
355.AND.
IF (IT1 /= 0 FLAG == 1)THEN
357 ALLOCATE(BUFTMP2(MAXNNOD*2),STAT=stat)
359 CALL ANCMSG(MSGID=727,
366 IF (IGRNOD(I)%GRPGRP == 1) THEN
368 NNOD=IGRNOD(I)%NENTITY
369 NTRI=IGRNOD(I)%SORTED
370.AND.
IF (NNOD > 0 NTRI == 0)THEN
373 NN = IGRNOD(I)%ENTITY(NNOD)
374 IGRNOD(I)%ENTITY(NNOD)=USR2SYS(NN,ITABM1,MESS,ID)
380 BUFTMP2(1:2*NNOD) = 0
381 NNOD=ULIST2S(IGRNOD(I)%ENTITY,NNOD,ITABM1,MESS,BUFTMP2,ID)
382 IGRNOD(I)%NENTITY=NNOD
388.AND.
ENDIF ! IF (IT1 /= 0 FLAG == 1)THEN
394 CALL HM_OPTION_START('/grnod
')
397 CALL HM_OPTION_READ_KEY(LSUBMODEL,
399 . OPTION_TITR = TITR ,
410 IF((KEY(1:3) == 'box.AND.
'(KEY2(1:5) /= 'recta.AND.
'
411 . KEY2(1:5) /= 'cylin.AND.
'KEY2(1:5) /= 'spher.AND.
')
412.OR.
. NBBOX == 0) (KEY(1:4) == 'boxa
'))THEN
413 ! No longer supported, ERROR MESSAGE
417 ELSEIF (KEY(1:4) == 'gene
') THEN
420 CALL HM_GET_INTV('grnodgenarrcnt
' ,NENTITY,IS_AVAILABLE,LSUBMODEL)
422 CALL HM_GET_INT_ARRAY_INDEX('ifirst
',N1 ,KK ,IS_AVAILABLE,LSUBMODEL)
423 CALL HM_GET_INT_ARRAY_INDEX('ilast
' ,N2 ,KK ,IS_AVAILABLE,LSUBMODEL)
426.AND.
IF (ITAB(K) >= N1 ITAB(K) <= N2) BUFTMP(K)=1
434 IF (BUFTMP(J) == 1) NNOD = NNOD+1
436 IGRNOD(IGS)%NENTITY=NNOD
437 CALL MY_ALLOC(IGRNOD(IGS)%ENTITY,NNOD)
441 IF (BUFTMP(J) == 1)THEN
443 IGRNOD(IGS)%ENTITY(NN)=J
456 ! Error message, obsolete
467 ELSEIF (FLAG == 1) THEN
468 ALLOCATE(BUFBOX(IADBOXMAX))
469 BUFBOX(1:IADBOXMAX) = 0
472 CALL HM_OPTION_START('/grnod
')
475 CALL HM_OPTION_READ_KEY(LSUBMODEL,
477 . OPTION_TITR = TITR ,
486 IF (KEY(1:3) == 'box.AND.
' NBBOX > 0) THEN
490 IF (UNITAB%UNIT_ID(J) == UID) THEN
491 FAC_L = UNITAB%FAC_L(J)
496.AND.
IF (UID/=0IFLAGUNIT==0) THEN
497 CALL ANCMSG(MSGID=659,ANMODE=ANINFO,MSGTYPE=MSGERROR,
498 . I2=UID,I1=ID,C1='node group
',
503 CALL HM_GET_INT_ARRAY_INDEX('ids
' ,IDB ,1,IS_AVAILABLE,LSUBMODEL)
504 CALL HM_BIGBOX(X ,FLAG,NNOD ,
505 . SKEW,IGS ,ISKN ,ITABM1,IBOX ,
506 . ID ,BUFBOX,IADBOX,TITR,KEY,NN,
507 . IADBOXMAX,IGRNOD,IDB)
509 IADBOXMAX = MAX(IADBOX,IADBOXMAX)
511 IGRNOD(IGS)%NENTITY=NNOD
512 CALL MY_ALLOC(IGRNOD(IGS)%ENTITY,NNOD)
513 IGRNOD(IGS)%ENTITY = 0
514 ELSEIF (FLAG == 1) THEN
515 IGRNOD(IGS)%NENTITY=NNOD
516 ENDIF ! IF (FLAG == 0)
520 IF(ALLOCATED(BUFBOX))DEALLOCATE(BUFBOX)
527 CALL HM_OPTION_START('/grnod
')
529 CALL HM_OPTION_READ_KEY(LSUBMODEL,
531 . OPTION_TITR = TITR ,
538 IF (KEY(1:4) == 'part.OR.
'KEY(1:6) == 'subset.OR.
'KEY(1:3) == 'mat.OR.
' KEY(1:4) == 'prop
') THEN
541 CALL HM_TAGPART(BUFTMP ,IPART ,KEY ,IGRNOD(IGS)%ID,TITR ,TITR1 ,FLAG ,SUBSET, LSUBMODEL)
544 CALL TAGNODS(IXS,IXS10,IXS20,IXS16,IPARTS,BUFTMP,IGRNOD(IGS)%ID,TITR)
545 CALL TAGNOD(IXQ,NIXQ,2,5,NUMELQ,IPARTQ,BUFTMP,NPART)
546 CALL TAGNOD(IXC,NIXC,2,5,NUMELC,IPARTC,BUFTMP,NPART)
547 CALL TAGNOD(IXTG,NIXTG,2,4,NUMELTG,IPARTG,BUFTMP,NPART)
548 CALL TAGNOD(IXT,NIXT,2,3,NUMELT,IPARTT,BUFTMP,NPART)
549 CALL TAGNOD(IXP,NIXP,2,3,NUMELP,IPARTP,BUFTMP,NPART)
550 CALL TAGNODR(IXR,GEO,NUMELR,IPARTR,BUFTMP,NPART)
551 CALL TAGNOD(KXSP,NISP,3,3,NUMSPH,IPARTSP,BUFTMP,NPART)
552 CALL TAGNODX(IXX,KXX,NUMELX,IPARTX,BUFTMP,NPART)
557 IF (BUFTMP(J+NPART) /= 0) NNOD=NNOD+1
559 IGRNOD(IGS)%NENTITY=NNOD
560 CALL MY_ALLOC(IGRNOD(IGS)%ENTITY,NNOD)
564 IF (BUFTMP(J+NPART) /= 0)THEN
566 IGRNOD(IGS)%ENTITY(NN) = J
579 CALL HM_OPTION_START('/grnod
')
581 CALL HM_OPTION_READ_KEY(LSUBMODEL,
583 . OPTION_TITR = TITR ,
591 IF(KEY(1:6) == 'submod
')THEN
592 CALL HM_SUBMODGRN(ITAB ,ITABM1 ,ISUBMOD ,ID ,
593 . NNOD ,MESS ,FLAG ,TITR ,
594 . TITR1 ,LSUBMODEL ,IGRNOD(IGS),NN )
596 IGRNOD(IGS)%NENTITY=NNOD
597 CALL MY_ALLOC(IGRNOD(IGS)%ENTITY,NNOD)
598 IGRNOD(IGS)%ENTITY = 0
608 CALL HM_OPTION_START('/grnod
')
610 CALL HM_OPTION_READ_KEY(LSUBMODEL,
612 . OPTION_TITR = TITR ,
620 IF(KEY(1:5) == 'grnod
')THEN
622 ELSEIF(KEY(1:2) == 'gr.OR.
' KEY(1:4) == 'surf' .OR. key(1:4) ==
'LINE')
THEN
625 IF(key(1:6) ==
'GRBRIC')
THEN
626 CALL hm_elngrs(ixs,ixs10,ixs20,ixs16,ngrbric,key(1:6),
627 . id ,igrbric,buftmp,titr,
629 ELSEIF(key(1:6) ==
'GRQUAD')
THEN
630 CALL hm_elngr(ixq,nixq,2,5,ngrquad,key(1:6),
631 . id,igrquad,buftmp,titr,
633 ELSEIF(key(1:6) ==
'GRSHEL')
THEN
634 CALL hm_elngr(ixc,nixc,2,5,ngrshel,key(1:6),
635 . id,igrsh4n,buftmp,titr,
637 ELSEIF(key(1:6) ==
'GRTRUS')
THEN
638 CALL hm_elngr(ixt,nixt,2,3,ngrtrus,key(1:6),
639 . id,igrtruss,buftmp,titr,
641 ELSEIF(key(1:6) ==
'GRBEAM')
THEN
642 CALL hm_elngr(ixp,nixp,2,3,ngrbeam,key(1:6),
643 . id,igrbeam,buftmp,titr,
645 ELSEIF(key(1:6) ==
'GRSPRI')
THEN
647 . igrspring,buftmp,titr,
649 ELSEIF(key(1:6) ==
'GRSH3N' .OR. key(1:6) ==
'GRTRIA')
THEN
650 CALL hm_elngr(ixtg,nixtg,2,4,ngrsh3n,key(1:6),
651 . id,igrsh3n,buftmp,titr,
653 ELSEIF(key(1:4) ==
'SURF')
THEN
655 ELSEIF(key(1:4) ==
'LINE')
THEN
656 CALL hm_linengr(id,igrslin,buftmp,titr,nsets,lsubmodel)
662 IF (buftmp(j) /= 0) nnod
664 igrnod(igs)%NENTITY=nnod
665 CALL my_alloc(igrnod(igs)%ENTITY,nnod)
666 igrnod(igs)%ENTITY = 0
669 IF (buftmp(j) /= 0)
THEN
671 igrnod(igs)%ENTITY(nn)=j
688 . option_titr = titr ,
699 IF (key(1:8) ==
'GEN_INCR')
THEN
701 CALL hm_get_intv (
'grnodGenArrCnt' ,nlines,is_available,lsubmodel)
706 DO j=idmin, idmax , offset
710 IF(id<idmin .OR. id>idmax) cycle
711 IF(mod(id-idmin,offset)==0) buftmp(k) = 1
720 IF (buftmp(j) == 1) nnod=nnod+1
722 igrnod(igs)%NENTITY=nnod
723 CALL my_alloc(igrnod(igs)%ENTITY,nnod)
727 IF (buftmp(j) == 1)
THEN
729 igrnod(igs)%ENTITY(nn)
subroutine hm_lecgrn(itab, itabm1, igrnod, isubmod, x, geo, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, ipart, iparts, ipartq, ipartc, ipartt, ipartp, ipartr, ipartg, ipartsp, kxsp, flag, maxnnod, skew, iskn, unitab, ibox, ixs10, ixs20, ixs16, rtrans, lsubmodel, ixx, kxx, ipartx, iadboxmax, igrslin, subset, igrbric, igrquad, igrsh4n, igrsh3n, igrtruss, igrbeam, igrspring, igrsurf, nsets)