55 2 ISUBMOD,IGRSLIN,IGRSURF,X ,IXS ,
56 3 IXQ ,IXC ,IXT ,IXP ,IXR ,
57 4 IXTG ,IPART ,IPARTS ,IPARTQ ,IPARTC ,
58 5 IPARTT ,IPARTP ,IPARTR ,IPARTTG,
59 6 NSEGS , FLAG ,SKEW ,ISKN ,
60 7 UNITAB ,IBOX ,RTRANS ,LSUBMODEL,
61 8 IPARTX ,KXX ,IXX ,IADBOXMAX,SUBSET,
62 9 IGRTRUSS,IGRBEAM,IGRSPRING,NSETS,MAP_TABLES)
76 USE reader_old_mod ,
ONLY : line, kline
80#include "implicit_f.inc"
91 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
93 . IXS(NIXS,*),IXQ(NIXQ,*),IXC(NIXC,*),IXT(NIXT,*),
94 . IXP(NIXP,*),IXR(NIXR,*),IXTG(NIXTG,*),IPARTS(*),
95 . IPARTQ(*),IPARTC(*),IPARTT(*),IPARTP(*),IPARTR(*),
96 . IPARTTG(*),IPART(LIPART1,*),
97 . ITAB(*),ISUBMOD(*),FLAG,NSEGS,ISKN(LISKN,*),
98 . IPARTX(*),KXX(NIXX,*),
99 . IXX(*),IADBOXMAX,NSETS
101 . x(3,*),skew(lskew,*),rtrans(*)
103 TYPE(MAPPING_STRUCT_),
INTENT(IN) :: MAP_TABLES
105 TYPE (SUBSET_) ,
DIMENSION(NSUBS) :: SUBSET
106 TYPE (GROUP_) ,
DIMENSION(NGRTRUS) :: IGRTRUSS
107 TYPE (GROUP_) ,
DIMENSION(NGRBEAM) :: IGRBEAM
108 TYPE (GROUP_) ,
DIMENSION(NGRSPRI) :: IGRSPRING
109 TYPE (SURF_) ,
DIMENSION(NSURF+NSETS) :: IGRSURF
110 TYPE (SURF_) ,
DIMENSION(NSLIN+NSETS) :: IGRSLIN
111 TYPE (BOX_) ,
DIMENSION(NBBOX) :: IBOX
115 INTEGER I,II,K,L,J,JC,JJ,KK,ISU,ID,NSEG,NSEG0,NSEGV,N1,N2,NUMEL,
116 . ok,igs,igrs,jrec,iad0,ne,ityp,
117 . it0,it1,it2,it3,it4,it5,it6,it7,sbufbox,uid,iflagunit,
118 . isk,boxtype,j2(2),it8,sub_id,ibufsiz,nindx,stat,
119 . intmax,iadbox,list_line(nslin),iseg,ibid,nseg_tot,nn,line_nseg0,sub_index
121 . xmin,xmax,ymin,
ymax,zmin,zmax,bid,fac_l,
122 . diam,xp1,yp1,zp1,xp2,yp2,zp2
123 CHARACTER(LEN=NCHARTITLE) :: TITR,TITR1,STRING
124 CHARACTER(LEN=NCHARKEY) :: KEY,KEY2
126 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFBOX, BUFTMP, INDX,TAGT ,TAGP
127 LOGICAL :: FLAG_GRBRIC
128 INTEGER :: MODE, NENTITY
129 TYPE(
part_type),
DIMENSION(:),
ALLOCATABLE :: SURF_ELM
130 LOGICAL IS_AVAILABLE, IS_ENCRYPTED, lERROR
163 DATA MESS/
'LINE DEFINITION '/
164 DATA INTMAX /2147483647/
178 flag_grbric = .false.
180 ALLOCATE(buftmp(ibufsiz),indx(ibufsiz),stat=stat)
181 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'BUFTMP')
191 . option_titr = titr ,
198 igrslin(igs)%NSEG = 0
199 igrslin(igs)%TYPE = 0
200 igrslin(igs)%LEVEL = 0
201 igrslin(igs)%NSEG_R2R_ALL = 0
202 igrslin(igs)%NSEG_R2R_SHARE = 0
205 igrslin(igs)%LEVEL = 1
206 igrslin(igs)%TITLE = titr
207 IF(key(1:4) ==
'LINE')
THEN
208 igrslin(igs)%NSEG = -1
209 igrslin(igs)%LEVEL = 0
211 ELSEIF(key(1:3) ==
'SEG')
THEN
214 CALL hm_get_intv(
'segmax',nseg,is_available,lsubmodel)
215 igrslin(igs)%NSEG = nseg
216 CALL my_alloc(igrslin(igs)%NODES,nseg,2)
217 igrslin(igs)%NODES(1:nseg,1:2) = 0
218 CALL my_alloc(igrslin(igs)%ELTYP,nseg)
219 igrslin(igs)%ELTYP(1:nseg) = 0
220 CALL my_alloc(igrslin
221 igrslin(igs)%ELEM(1:nseg) = 0
222 CALL my_alloc(igrslin(igs)%PROC,nseg)
223 igrslin(igs)%PROC(1:nseg) = 0
226 CALL hm_get_intv (
'segmax' ,nentity,is_available,lsubmodel)
230 igrslin(igs)%NODES(kk,1) = usr2sys(n1,itabm1,mess,id)
231 igrslin(igs)%NODES(kk,2) = usr2sys(n2,itabm1,mess,id)
232 igrslin(igs)%ELTYP(kk) = 0
233 igrslin(igs)%ELEM(kk) = 0
236 ELSEIF(key(1:4) ==
'PART'.OR.key(1:6) ==
'SUBSET'.OR. key(1:3) ==
'MAT' .OR.key(1:4) ==
'PROP')
THEN
239 IF (flag == 0) igrslin(igs)%NSEG = 0
240 ELSEIF(key(1:3) ==
'BOX'.AND.nbbox == 0 .AND.(key2(1:5) /=
'RECTA'.AND.key2(1:5) /=
'CYLIN'.AND.key2(1:5) /=
'SPHER'))
THEN
243 ELSEIF(key(1:2) ==
'GR'.OR.key(1:4) ==
'WIRE')
THEN
246 IF (flag == 0) igrslin(igs)%NSEG = 0
247 ELSEIF(key(1:4) ==
'SURF'.OR.key(1:4) ==
'EDGE')
THEN
250 IF (flag == 0) igrslin(igs)%NSEG = 0
251 ELSEIF(key(1:6) ==
'SUBMOD')
THEN
254 IF (flag == 0) igrslin(igs)%NSEG = 0
255 ELSEIF(key(1:3) ==
'BOX'.AND.(key2(1:5) ==
'RECTA'.OR. key2(1:5) ==
'CYLIN'.OR.key2(1:5) ==
'SPHER'))
THEN
260 ELSEIF(key(1:3) ==
'BOX' .AND. nbbox > 0)
THEN
270 string =
"/LINE/"//key(1:len_trim(key)-1)
271 IF(len_trim(key2)>1)string = string//key2(1:len_trim(key2)-1)
272 CALL ancmsg(msgid=688,anmode=aninfo,msgtype=msgerror,i1=id, c1=titr, c2=string)
282 list_line(igs) = igrslin(igs)%ID
302 ALLOCATE(tagt(numelt),stat=stat)
303 ALLOCATE(tagp(numelp),stat=stat)
309 ELSEIF (flag == 1)
THEN
310 ALLOCATE(bufbox(iadboxmax))
311 bufbox(1:iadboxmax) = 0
313 sbufbox = int(intmax)
319 . option_titr = titr ,
326 IF(key(1:3) ==
'BOX'.AND. nbbox > 0)
THEN
331 IF (unitab%UNIT_ID(j) == uid)
THEN
332 fac_l = unitab%FAC_L(j)
337 IF (uid/=0.AND.iflagunit==0)
THEN
338 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,i2=uid,i1=id,c1=
'LINE',c2=
'LINE',c3=titr)
342 nseg0 = igrslin(igs)%NSEG
343 CALL my_alloc(igrslin(igs)%NODES,nseg0,2)
344 igrslin(igs)%NODES(1:nseg0,1:2) = 0
345 CALL my_alloc(igrslin(igs)%ELTYP,nseg0)
346 igrslin(igs)%ELTYP(1:nseg0) = 0
347 CALL my_alloc(igrslin(igs)%ELEM,nseg0)
348 igrslin(igs)%ELEM(1:nseg0) = 0
349 CALL my_alloc(igrslin(igs)%PROC,nseg0
350 igrslin(igs)%PROC(1:nseg0) = 0
354 .
CALL hm_bigsbox(numelt ,ixt ,nixt ,2 ,3 ,4 ,
355 . x ,nseg ,flag ,skew ,
357 . id ,bufbox ,igrslin(igs),iadbox, key ,
358 . sbufbox,titr ,mess ,tagt,
360 iadboxmax =
max(iadbox,iadboxmax)
361 IF (iadbox>sbufbox .OR. iadbox<0)
362 .
CALL ancmsg(msgid=1007,msgtype=msgerror,anmode=anstop)
364 .
CALL hm_bigsbox(numelp ,ixp ,nixp ,2 ,3 ,5 ,
365 . x ,nseg ,flag ,skew,
366 . iskn ,0 ,itabm1 ,ibox ,
368 . sbufbox,titr ,mess ,tagp ,
370 IF (iadbox>sbufbox .OR. iadbox<0)
371 .
CALL ancmsg(msgid=1007,msgtype=msgerror,anmode=anstop)
372 iadboxmax =
max(iadbox,iadboxmax)
374 igrslin(igs)%NSEG = nseg
375 ELSEIF (flag == 1)
THEN
376 igrslin(igs)%NSEG = nseg
380 DEALLOCATE(tagt,tagp)
381 IF(
ALLOCATED(bufbox))
DEALLOCATE(bufbox)
387 IF(it2/=0.OR.it6/=0)
THEN
388 ALLOCATE( surf_elm(npart) )
391 1 numelt ,numelp ,numelr ,npart ,ibid ,
392 2 ibid ,ibid ,ipartt ,ipartp ,ipartr ,
400 CALL HM_OPTION_READ_KEY(LSUBMODEL,
402 . OPTION_TITR = TITR ,
408 IF (KEY(1:4) == 'part.OR.
'KEY(1:6) == 'subset.OR.
' KEY(1:3) == 'mat.OR.
' KEY(1:4) == 'prop
') THEN
409 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
410 NSEG0 = IGRSLIN(IGS)%NSEG
411 CALL MY_ALLOC(IGRSLIN(IGS)%NODES,NSEG0,2)
412 IGRSLIN(IGS)%NODES(1:NSEG0,1:2) = 0
413 CALL MY_ALLOC(IGRSLIN(IGS)%ELTYP,NSEG0)
414 IGRSLIN(IGS)%ELTYP(1:NSEG0) = 0
415 CALL MY_ALLOC(IGRSLIN(IGS)%ELEM,NSEG0)
416 IGRSLIN(IGS)%ELEM(1:NSEG0) = 0
417 CALL MY_ALLOC(IGRSLIN(IGS)%PROC,NSEG0)
418 IGRSLIN(IGS)%PROC(1:NSEG0) = 0
420 CALL HM_TAGPART2(BUFTMP,IPART ,KEY ,
421 . IGRSLIN(IGS)%ID,TITR,TITR1,INDX,NINDX ,
422 . FLAG,SUBSET,LSUBMODEL,MAP_TABLES%IPARTM)
423 CALL SURFTAG(NUMELT,IXT,NIXT,2,3,4,IPARTT,
424 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
426 CALL SURFTAG(NUMELP,IXP,NIXP,2,3,5,IPARTP,
427 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
429 IF (KEY(1:3) /= 'mat
')
430 . CALL SURFTAG(NUMELR,IXR,NIXR,2,3,6,IPARTR,
431 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
433 IF (KEY(1:4) == 'part
')
434 . CALL SURFTAGX(NUMELX,IXX,KXX,NIXX,8,IPARTX,
435 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG)
436 IF (FLAG == 0) IGRSLIN(IGS)%NSEG = NSEG
438 ! reset BUFTMP to 0 (only where it was set to 1/-1)
451 CALL HM_OPTION_START('/line
')
454 CALL HM_OPTION_READ_KEY(LSUBMODEL,
456 . OPTION_TITR = TITR ,
461 IF (KEY(1:6)=='submod
') THEN
462 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
463 NSEG0 = IGRSLIN(IGS)%NSEG
464 CALL MY_ALLOC(IGRSLIN(IGS)%NODES,NSEG0,2)
465 IGRSLIN(IGS)%NODES(1:NSEG0,1:2) = 0
466 CALL MY_ALLOC(IGRSLIN(IGS)%ELTYP,NSEG0)
467 IGRSLIN(IGS)%ELTYP(1:NSEG0) = 0
468 CALL MY_ALLOC(IGRSLIN(IGS)%ELEM,NSEG0)
469 IGRSLIN(IGS)%ELEM(1:NSEG0) = 0
470 CALL MY_ALLOC(IGRSLIN(IGS)%PROC,NSEG0)
471 IGRSLIN(IGS)%PROC(1:NSEG0) = 0
474 CALL HM_SUBMODPART(ISUBMOD,BUFTMP,IPART,ID ,FLAG ,
475 . MESS ,TITR ,TITR1,INDX,NINDX,
477 CALL SURFTAG(NUMELT,IXT,NIXT,2,3,4,IPARTT,
478 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
480 CALL SURFTAG(NUMELP,IXP,NIXP,2,3,5,IPARTP,
481 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
483 CALL SURFTAG(NUMELR,IXR,NIXR,2,3,6,IPARTR,
484 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
486 IF (FLAG == 0) IGRSLIN(IGS)%NSEG = NSEG
499 CALL HM_OPTION_START('/line
')
502 CALL HM_OPTION_READ_KEY(LSUBMODEL,
504 . OPTION_TITR = TITR ,
508 IF (KEY(1:4) == 'surf.OR.
' KEY(1:4) == 'edge
') THEN
512 CALL HM_GET_INTV ('idsmax
' ,NENTITY,IS_AVAILABLE,LSUBMODEL)
514 CALL HM_GET_INT_ARRAY_INDEX ('ids
' ,JJ ,KK,IS_AVAILABLE,LSUBMODEL)
518 IF (JJ == IGRSURF(K)%ID) THEN
524 NSEG0=NSEG0+IGRSURF(IGRS)%NSEG
525 DO K=0,IGRSURF(IGRS)%NSEG-1
526 BUFTMP(IAD0+6*K) = IGRSURF(IGRS)%NODES(K+1,1)
527 BUFTMP(IAD0+6*K+1) = IGRSURF(IGRS)%NODES(K+1,2)
528 BUFTMP(IAD0+6*K+2) = IGRSURF(IGRS)%NODES(K+1,3)
529 BUFTMP(IAD0+6*K+3) = IGRSURF(IGRS)%NODES(K+1,4)
530 BUFTMP(IAD0+6*K+4) = IGRSURF(IGRS)%ELTYP(K+1)
531 BUFTMP(IAD0+6*K+5) = IGRSURF(IGRS)%ELEM(K+1)
534 INDX(NINDX)=IAD0+6*K+JJ-1
537 IAD0=IAD0+6*IGRSURF(IGRS)%NSEG
541 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
542 CALL MY_ALLOC(IGRSLIN(IGS)%NODES, IGRSLIN(IGS)%NSEG,2)
543 IGRSLIN(IGS)%NODES(1:IGRSLIN(IGS)%NSEG,1:2) = 0
544 CALL MY_ALLOC(IGRSLIN(IGS)%ELTYP,IGRSLIN(IGS)%NSEG)
545 IGRSLIN(IGS)%ELTYP(1:IGRSLIN(IGS)%NSEG) = 0
546 CALL MY_ALLOC(IGRSLIN(IGS)%ELEM,IGRSLIN(IGS)%NSEG)
547 IGRSLIN(IGS)%ELEM(1:IGRSLIN(IGS)%NSEG) = 0
548 CALL MY_ALLOC(IGRSLIN(IGS)%PROC,IGRSLIN(IGS)%NSEG)
549 IGRSLIN(IGS)%PROC(1:IGRSLIN(IGS)%NSEG) = 0
553 IF (FLAG == 1) LINE_NSEG0 = IGRSLIN(IGS)%NSEG
554 CALL LINEDGE(NSEG0 ,NSEG ,BUFTMP,IGRSLIN(IGS)%NODES ,KEY,
555 . FLAG ,IGRSLIN(IGS)%ELTYP,IGRSLIN(IGS)%ELEM,
558 IF (FLAG == 0) IGRSLIN(IGS)%NSEG = NSEG
560 !reset BUFTMP to 0 (only where it was set to 1/-1)
571 CALL HM_OPTION_START('/line')
576 . option_titr = titr ,
582 IF (key(1:2) ==
'GR'.OR.key(1:4) ==
'WIRE')
THEN
584 nseg0 = igrslin(igs)%NSEG
585 CALL my_alloc(igrslin(igs)%NODES,nseg0,2)
586 igrslin(igs)%NODES(1:nseg0,1:2) = 0
587 CALL my_alloc(igrslin(igs)%ELTYP,igrslin(igs)%NSEG)
588 igrslin(igs)%ELTYP(1:igrslin(igs)%NSEG) = 0
589 CALL my_alloc(igrslin(igs)%ELEM,igrslin(igs)%NSEG)
590 igrslin(igs)%ELEM(1:igrslin(igs)%NSEG) = 0
591 CALL my_alloc(igrslin(igs)%PROC,nseg0)
592 igrslin(igs)%PROC(1:nseg0) = 0
594 IF(key(1:6) ==
'GRSPRI')
THEN
596 CALL hm_surfgr2(ngrspri,key(1:6),numel,igrslin(igs)%ID,
597 . igrspring,buftmp,titr,titr1,
598 . indx,nindx,flag,ibid,ibid,
599 . ibid,ibid,flag_grbric,lsubmodel)
600 CALL surftage(numelr,ixr,nixr,2,3,6,
601 . buftmp,igrslin(igs),nseg,flag,
602 . indx,nindx,nseg_tot)
603 ELSEIF(key(1:6) ==
'GRTRUS')
THEN
605 CALL hm_surfgr2(ngrtrus,key(1:6),numel,igrslin(igs)%ID,
606 . igrtruss,buftmp,titr,titr1,
607 . indx,nindx,flag,ibid,ibid,
608 . ibid,ibid,flag_grbric,lsubmodel)
609 CALL surftage(numelt,ixt,nixt,2,3,4,
610 . buftmp,igrslin(igs),nseg,flag,
611 . indx,nindx,nseg_tot)
612 ELSEIF(key(1:6) ==
'GRBEAM')
THEN
614 CALL hm_surfgr2(ngrbeam,key(1:6),numel,igrslin(igs)%ID,
615 . igrbeam,buftmp,titr,titr1,
616 . indx,nindx,flag,ibid,ibid,
617 . ibid,ibid,flag_grbric,lsubmodel)
618 CALL surftage(numelp,ixp,nixp,2,3,5,
619 . buftmp,igrslin(igs),nseg,flag,
620 . indx,nindx,nseg_tot)
622 IF (flag == 0) igrslin(igs)%NSEG = nseg
633 DEALLOCATE(buftmp,indx)
634 IF(it2/=0.OR.it6/=0)
THEN
638 DEALLOCATE( surf_elm )
643 CALL ancmsg(msgid=189,msgtype=msgerror,anmode=aninfo,i1=igrslin(igs)%ID)