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 )
78 use element_mod ,
only : nixs, nixq, nixc, nixt, nixp, nixr, nixtg
82#include "implicit_f.inc"
93 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
95 . IXS(NIXS,*),IXQ(NIXQ,*),IXC(NIXC,*),IXT(NIXT,*),
96 . IXP(NIXP,*),IXR(NIXR,*),IXTG(NIXTG,*),IPARTS(*),
97 . IPARTQ(*),IPARTC(*),IPARTT(*),IPARTP(*),IPARTR(*),
98 . IPARTG(*),IPART(LIPART1,*),ITAB(*),
99 . IXS10(6,*) ,IXS20(12,*) ,IXS16(8,*),
100 . KXSP(NISP,*),IPARTSP(*),ISUBMOD(*),ISKN(LISKN,*),
101 . IXX(*),KXX(*),IPARTX(*),IADBOXMAX,NSETS
104 . X(3,*),GEO(NPROPG,*),SKEW(LSKEW,*),RTRANS(*)
107 TYPE (SUBSET_) ,
DIMENSION(NSUBS) :: SUBSET
108 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRNOD) :: IGRNOD
109 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRQUAD) :: IGRQUAD
110 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRBRIC) :: IGRBRIC
111 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRSHEL) :: IGRSH4N
112 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRSH3N) :: IGRSH3N
113 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRTRUS) :: IGRTRUSS
114 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRBEAM) :: IGRBEAM
115 TYPE (GROUP_) ,
TARGETDIMENSION(NGRSPRI)
116TYPE (SURF_) ,
TARGET,
DIMENSION(NSURF) :: IGRSURF
117 TYPE (SURF_) ,
TARGET,
DIMENSION(NSLIN) :: IGRSLIN
118 TYPE (BOX_) ,
DIMENSION(NBBOX) :: IBOX
122 INTEGER J10(10),ID_SUB
123 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFTMP
124 INTEGER I,J,K,II,KK,N1,N2,ISU,ID,JREC,NNOD,NL,NTRI,IGS,IGRS,
125 . ok,it0,it1,it2,it3,it4,it5,it6,
126 . flag_fmt,flag_fmt_tmp,ifix_tmp,stat,it7,uid,iflagunit,
127 . it8,sub_id,iadbox,nn,list_igr(ngrnod),idmin,idmax,offset,
128 . it9,idb,nentity,nlines,jj
131 . xmin,xmax,ymin,
ymax,zmin,zmax,bid,fac_l
132 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFTMP2
133 CHARACTER(LEN=NCHARTITLE) :: TITR, TITR1
134 CHARACTER(LEN=NCHARKEY) :: KEY,KEY2
136 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFBOX
141 INTEGER USR2SYS,ULIST2S,LISTCNT
143 DATA mess/
'NODE GROUP DEFINITION '/
168 ALLOCATE(buftmp(2*numnod + npart))
169 is_available = .false.
194 . option_titr = titr ,
205 igrnod(igs)%NENTITY = 0
206 igrnod(igs)%GRTYPE = 0
207 igrnod(igs)%SORTED = 0
208 igrnod(igs)%GRPGRP = 0
209 igrnod(igs)%LEVEL = 0
210 igrnod(igs)%R2R_ALL = 0
211 igrnod(igs)%R2R_SHARE = 0
219 igrnod(igs)%TITLE = titr
224 IF(key(1:7) ==
'GRNODNS')
THEN
226 igrnod(igs)%NENTITY=-1
233 ELSEIF(key(1:5) ==
'GRNOD')
THEN
234 igrnod(igs)%NENTITY=-1
240 ELSEIF(key(1:6) ==
'NODENS')
THEN
243 CALL hm_get_intv(
'idsmax' ,nentity,is_available,lsubmodel)
250 igrnod(igs)%NENTITY=nnod
252 IF (.NOT.
ALLOCATED(igrnod(igs)%ENTITY))
253 .
CALL my_alloc(igrnod(igs)%ENTITY,nnod)
255 maxnnod =
max(nnod,maxnnod)
258 CALL hm_get_intv(
'idsmax' ,nentity,is_available,lsubmodel)
263 igrnod(igs)%ENTITY(nn) = usr2sys(jj,itabm1,mess,id)
269 ELSEIF(key(1:4) ==
'NODE' .OR. key(1:5) ==
'CNODE')
THEN
273 CALL hm_get_intv(
'idsmax' ,nentity,is_available,lsubmodel)
274 IF(is_available)nnod = nnod + nentity
275 igrnod(igs)%NENTITY=nnod
277 IF( .NOT.
ALLOCATED(igrnod(igs)%ENTITY))
278 .
CALL my_alloc(igrnod(igs)%ENTITY,nnod)
280 maxnnod =
max(nnod,maxnnod)
283 CALL hm_get_intv(
'idsmax' ,nentity,is_available,lsubmodel)
288 igrnod(igs)%ENTITY(nn) = jj
292 !-----------------------------------------------------------------
294 ELSEIF(key(1:4) ==
'PART'.OR.key(1:6) ==
'SUBSET'.OR.
295 . key(1:3) ==
'MAT' .OR.key(1:4) ==
'PROP')
THEN
297 IF (flag == 0) igrnod(igs)%NENTITY=0
301 ELSEIF((key(1:3) ==
'BOX' .AND. nbbox == 0 .AND.
302 . (key2(1:5) /=
'RECTA'.AND.
303 . key2(1:5) /=
'CYLIN'.AND.key2(1:5) /=
'SPHER')).OR.
304 . key(1:4) ==
'GENE'.OR.key(1:4) ==
'BOXA')
THEN
306 IF (flag == 0) igrnod(igs)%NENTITY=0
310 ELSEIF(key(1:2) ==
'GR'.OR.key(1:4) ==
'SURF'.OR.key(1:4) ==
'LINE')
THEN
312 IF (flag == 0) igrnod(igs)%NENTITY=0
316 ELSEIF(key(1:6) ==
'SUBMOD')
THEN
318 IF (flag == 0) igrnod(igs)%NENTITY=0
322 ELSEIF(key(1:3) ==
'BOX'.AND.(key2(1:5) ==
'RECTA'.OR.
323 . key2(1:5) ==
'CYLIN'.OR.key2(1:5) ==
'SPHER'))
THEN
328 IF (flag == 0) igrnod(igs)%NENTITY=0
332 ELSEIF(key(1:3) ==
'BOX' .AND. nbbox > 0)
THEN
337 ELSEIF(key(1:8) ==
'GEN_INCR')
THEN
339 IF (flag == 0) igrnod(igs)%NENTITY=0
349 list_igr(igs) = igrnod(igs)%ID
356 IF (it1 /= 0 .AND. flag == 1)
THEN
358 ALLOCATE(buftmp2(maxnnod*2),stat=stat)
367 IF (igrnod(i)%GRPGRP == 1)
THEN
369 nnod=igrnod(i)%NENTITY
370 ntri=igrnod(i)%SORTED
371 IF (nnod > 0 .AND. ntri == 0)
THEN
374 nn = igrnod(i)%ENTITY(nnod)
375 igrnod(i)%ENTITY(nnod)=usr2sys(nn,itabm1,mess,id)
381 buftmp2(1:2*nnod) = 0
382 nnod=ulist2s(igrnod(i)%ENTITY,nnod,itabm1,mess,buftmp2,id)
383 igrnod(i)%NENTITY=nnod
389 ENDIF !
IF (it1 /= 0 .AND. flag == 1)
THEN
400 . option_titr = titr ,
411 IF((key(1:3) ==
'BOX'.AND.(key2(1:5) /=
'RECTA'.AND.
412 . key2(1:5) /=
'CYLIN'.AND.key2(1:5) /=
'SPHER').AND.
413 . nbbox == 0) .OR. (key(1:4) ==
'BOXA'))
THEN
418 ELSEIF (key(1:4) ==
'GENE')
THEN
421 CALL hm_get_intv(
'grnodGenArrCnt' ,nentity,is_available,lsubmodel)
427 IF (itab(k) >= n1 .AND. itab(k) <= n2) buftmp(k)=1
435 IF (buftmp(j) == 1) nnod = nnod+1
437 igrnod(igs)%NENTITY=nnod
438 CALL my_alloc(igrnod(igs)%ENTITY,nnod)
442 IF (buftmp(j) == 1)
THEN
444 igrnod(igs)%ENTITY(nn)=j
468 ELSEIF (flag == 1)
THEN
469 ALLOCATE(bufbox(iadboxmax))
470 bufbox(1:iadboxmax) = 0
478 . option_titr = titr ,
487 IF (key(1:3) ==
'BOX' .AND. nbbox > 0)
THEN
491 IF (unitab%UNIT_ID(j) == uid)
THEN
492 fac_l = unitab%FAC_L(j)
497 IF (uid/=0.AND.iflagunit==0)
THEN
498 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
499 . i2=uid,i1=id,c1=
'NODE GROUP',
506 . skew,igs ,iskn ,itabm1,ibox ,
507 . id ,bufbox,iadbox,titr,key,nn,
508 . iadboxmax,igrnod,idb)
510 iadboxmax =
max(iadbox,iadboxmax)
512 igrnod(igs)%NENTITY=nnod
513 CALL my_alloc(igrnod(igs)%ENTITY,nnod)
515 ELSEIF (flag == 1)
THEN
516 igrnod(igs)%NENTITY=nnod
521 IF(
ALLOCATED(bufbox))
DEALLOCATE(bufbox)
532 . option_titr = titr ,
539 IF (key(1:4) ==
'PART'.OR.key(1:6) ==
'SUBSET'.OR.key(1:3) ==
'MAT' .OR.key(1:4) ==
'PROP')
THEN
542 CALL hm_tagpart(buftmp ,ipart ,key ,igrnod(igs)%ID,titr ,titr1 ,flag ,subset, lsubmodel)
545 CALL tagnods(ixs,ixs10,ixs20,ixs16,iparts,buftmp,igrnod(igs)%ID,titr)
546 CALL tagnod(ixq,nixq,2,5,numelq,ipartq,buftmp,npart)
547 CALL tagnod(ixc,nixc,2,5,numelc,ipartc,buftmp,npart)
548 CALL tagnod(ixtg,nixtg,2,4,numeltg,ipartg,buftmp,npart)
549 CALL tagnod(ixt,nixt,2,3,numelt,ipartt,buftmp,npart)
550 CALL tagnod(ixp,nixp,2,3,numelp,ipartp,buftmp,npart)
551 CALL tagnodr(ixr,geo,numelr,ipartr,buftmp,npart)
552 CALL tagnod(kxsp,nisp,3,3,numsph,ipartsp,buftmp,npart)
553 CALL tagnodx(ixx,kxx,numelx,ipartx,buftmp,npart)
558 IF (buftmp(j+npart) /= 0) nnod=nnod+1
560 igrnod(igs)%NENTITY=nnod
561 CALL my_alloc(igrnod(igs)%ENTITY,nnod)
565 IF (buftmp(j+npart) /= 0)
THEN
567 igrnod(igs)%ENTITY(nn) = j
584 . option_titr = titr ,
592 IF(key(1:6) ==
'SUBMOD')
THEN
594 . nnod ,mess ,flag ,titr ,
595 . titr1 ,lsubmodel ,igrnod(igs),nn )
597 igrnod(igs)%NENTITY=nnod
598 CALL my_alloc(igrnod(igs)%ENTITY,nnod)
599 igrnod(igs)%ENTITY = 0
613 . option_titr = titr ,
621 IF(key(1:5) ==
'GRNOD')
THEN
623 ELSEIF(key(1:2) ==
'GR' .OR. key(1:4) ==
'SURF' .OR. key(1:4) ==
'LINE')
THEN
626 IF(key(1:6) ==
'GRBRIC')
THEN
627 CALL hm_elngrs(ixs,ixs10,ixs20,ixs16,ngrbric,key(1:6),
628 . id ,igrbric,buftmp,titr,
630 ELSEIF(key(1:6) ==
'GRQUAD')
THEN
631 CALL hm_elngr(ixq,nixq,2,5,ngrquad,key(1:6),
634 ELSEIF(key(1:6) ==
'GRSHEL')
THEN
635 CALL hm_elngr(ixc,nixc,2,5,ngrshel,key(1:6),
636 . id,igrsh4n,buftmp,titr,
638 ELSEIF(key(1:6) ==
'GRTRUS')
THEN
639 CALL hm_elngr(ixt,nixt,2,3,ngrtrus,key(1:6),
640 . id,igrtruss,buftmp,titr,
642 ELSEIF(key(1:6) ==
'GRBEAM')
THEN
643 CALL hm_elngr(ixp,nixp,2,3,ngrbeam,key(1:6),
644 . id,igrbeam,buftmp,titr,
646 ELSEIF(key(1:6) ==
'GRSPRI')
THEN
648 . igrspring,buftmp,titr,
650 ELSEIF(key(1:6) ==
'GRSH3N' .OR. key(1:6) ==
'GRTRIA')
THEN
651 CALL hm_elngr(ixtg,nixtg,2,4,ngrsh3n,key(1:6),
652 . id,igrsh3n,buftmp,titr,
654 ELSEIF(key(1:4) ==
'SURF')
THEN
655 CALL hm_surfnod(id,igrsurf,buftmp,titr,nsets,lsubmodel)
656 ELSEIF(key(1:4) ==
'LINE')
THEN
657 CALL hm_linengr(id,igrslin,buftmp,titr,nsets,lsubmodel)
663 IF (buftmp(j) /= 0) nnod=nnod+1
665 igrnod(igs)%NENTITY=nnod
666 CALL my_alloc(igrnod(igs)%ENTITY,nnod)
667 igrnod(igs)%ENTITY = 0
670 IF (buftmp(j) /= 0)
THEN
672 igrnod(igs)%ENTITY(nn)=j
689 . option_titr = titr ,
700 IF (key(1:8) ==
'GEN_INCR')
THEN
702 CALL hm_get_intv (
'grnodGenArrCnt' ,nlines,is_available,lsubmodel)
707 DO j=idmin, idmax , offset
711 IF(id<idmin .OR. id>idmax) cycle
712 IF(mod(id-idmin,offset)==0) buftmp(k) = 1
721 IF (buftmp(j) == 1) nnod=nnod+1
723 igrnod(igs)%NENTITY=nnod
724 CALL my_alloc(igrnod(igs)%ENTITY,nnod)
728 IF (buftmp(j) == 1)
THEN
730 igrnod(igs)%ENTITY(nn)=j