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
77 use element_mod ,
only : nixs, nixq, nixc, nixt, nixp, nixr, nixtg
81#include "implicit_f.inc"
92 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
94 . IXS(NIXS,*),IXQ(NIXQ,*),(NIXC,*),IXT(NIXT,*),
95 . IXP(NIXP,*),IXR(NIXR,*),IXTG(NIXTG,*),IPARTS(*),
96 . IPARTQ(*),IPARTC(*),IPARTT(*),IPARTP(*),IPARTR(*),
97 . IPARTTG(*),IPART(LIPART1,*),
98 . ITAB(*),ISUBMOD(*),FLAG,NSEGS,ISKN(LISKN,*),
99 . IPARTX(*),KXX(NIXX,*),
100 . IXX(*),IADBOXMAX,NSETS
102 . x(3,*),skew(lskew,*),rtrans(*)
104 TYPE(MAPPING_STRUCT_),
INTENT(IN) :: MAP_TABLES
106 TYPE (SUBSET_) ,
DIMENSION(NSUBS) :: SUBSET
107 TYPE (GROUP_) ,
DIMENSION(NGRTRUS) :: IGRTRUSS
108 TYPE (GROUP_) ,
DIMENSION(NGRBEAM) :: IGRBEAM
109 TYPE (GROUP_) ,
DIMENSION(NGRSPRI) :: IGRSPRING
110 TYPE (SURF_) ,
DIMENSION(NSURF+NSETS) :: IGRSURF
111 TYPE (SURF_) ,
DIMENSION(NSLIN+NSETS) :: IGRSLIN
112 TYPE (BOX_) ,
DIMENSION(NBBOX) :: IBOX
116 INTEGER I,II,K,L,J,JC,JJ,KK,ISU,,NSEG,NSEG0,NSEGV,N1,N2,NUMEL,
117 . ok,igs,igrs,jrec,iad0,ne,ityp,
118 . it0,it1,it2,it3,it4,it5,it6,it7,sbufbox,uid,iflagunit,
119 . isk,boxtype,j2(2),it8,sub_id,ibufsiz,nindx,stat,
120 . intmax,iadbox,list_line(nslin),iseg,ibid,nseg_tot,nn,line_nseg0,sub_index
122 . xmin,xmax,ymin,
ymax,zmin,zmax,bid,fac_l,
123 . diam,xp1,yp1,zp1,xp2,yp2,zp2
124 CHARACTER(LEN=NCHARTITLE) :: TITR,TITR1,STRING
125 CHARACTER(LEN=NCHARKEY) :: KEY,KEY2
127 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFBOX, BUFTMP, INDX,TAGT ,TAGP
128 LOGICAL :: FLAG_GRBRIC
129 INTEGER :: MODE, NENTITY
130 TYPE(
part_type),
DIMENSION(:),
ALLOCATABLE :: SURF_ELM
131 LOGICAL IS_AVAILABLE, IS_ENCRYPTED, lERROR
164 DATA MESS/
'LINE DEFINITION '/
179 flag_grbric = .false.
181 ALLOCATE(buftmp(ibufsiz),indx(ibufsiz),stat=stat)
182 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'BUFTMP')
192 . option_titr = titr ,
199 igrslin(igs)%NSEG = 0
200 igrslin(igs)%TYPE = 0
201 igrslin(igs)%LEVEL = 0
202 igrslin(igs)%NSEG_R2R_ALL = 0
203 igrslin(igs)%NSEG_R2R_SHARE = 0
206 igrslin(igs)%LEVEL = 1
207 igrslin(igs)%TITLE = titr
208 IF(key(1:4) ==
'LINE')
THEN
209 igrslin(igs)%NSEG = -1
210 igrslin(igs)%LEVEL = 0
212 ELSEIF(key(1:3) ==
'SEG')
THEN
215 CALL hm_get_intv(
'segmax',nseg,is_available,lsubmodel)
216 igrslin(igs)%NSEG = nseg
217 CALL my_alloc(igrslin(igs)%NODES,nseg,2)
218 igrslin(igs)%NODES(1:nseg,1:2) = 0
219 CALL my_alloc(igrslin(igs)%ELTYP,nseg)
220 igrslin(igs)%ELTYP(1:nseg) = 0
221 CALL my_alloc(igrslin(igs)%ELEM,nseg)
222 igrslin(igs)%ELEM(1:nseg) = 0
223 CALL my_alloc(igrslin(igs)%PROC,nseg)
224 igrslin(igs)%PROC(1:nseg) = 0
227 CALL hm_get_intv (
'segmax' ,nentity,is_available,lsubmodel)
231 igrslin(igs)%NODES(kk,1) = usr2sys(n1,itabm1,mess,
id)
232 igrslin(igs)%NODES(kk,2) = usr2sys(n2,itabm1,mess,
id)
234 igrslin(igs)%ELEM(kk) = 0
237 ELSEIF(key(1:4) ==
'PART'.OR.key(1:6) ==
'SUBSET'.OR. key(1:3) ==
'MAT' .OR.key(1:4) ==
'PROP')
THEN
240 IF (flag == 0) igrslin(igs)%NSEG = 0
241 ELSEIF(key(1:3) ==
'BOX'.AND.nbbox == 0 .AND.(key2(1:5) /=
'RECTA'.AND.key2(1:5) /=
'CYLIN'.AND.key2(1:5) /=
'SPHER'))
THEN
244 ELSEIF(key(1:2) ==
'GR'.OR.key(1:4) ==
'WIRE')
THEN
247 IF (flag == 0) igrslin(igs)%NSEG = 0
248 ELSEIF(key(1:4) ==
'SURF'.OR.key(1:4) ==
'EDGE')
THEN
251 IF (flag == 0) igrslin(igs)%NSEG = 0
252 ELSEIF(key(1:6) ==
'SUBMOD')
THEN
255 IF (flag == 0) igrslin(igs)%NSEG = 0
256 ELSEIF(key(1:3) ==
'BOX'.AND.(key2(1:5) ==
'RECTA'.OR. key2(1:5) ==
'CYLIN'.OR.key2(1:5) ==
'SPHER'))
THEN
261 ELSEIF(key(1:3) ==
'BOX' .AND. nbbox > 0)
THEN
271 string =
"/LINE/"//key(1:len_trim(key)-1)
272 IF(len_trim(key2)>1)string = string//key2(1:len_trim(key2)-1)
273 CALL ancmsg(msgid=688,anmode=aninfo,msgtype=msgerror,i1=
id, c1=titr, c2=string)
283 list_line(igs) = igrslin(igs)%ID
303 ALLOCATE(tagt(numelt),stat=stat)
304 ALLOCATE(tagp(numelp),stat=stat)
310 ELSEIF (flag == 1)
THEN
311 ALLOCATE(bufbox(iadboxmax))
312 bufbox(1:iadboxmax) = 0
314 sbufbox = int(intmax)
320 . option_titr = titr ,
327 IF(key(1:3) ==
'BOX'.AND. nbbox > 0)
THEN
332 IF (unitab%UNIT_ID(j) == uid)
THEN
333 fac_l = unitab%FAC_L(j)
338 IF (uid/=0.AND.iflagunit==0)
THEN
339 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,i2=uid,i1=
id,c1=
'LINE',c2=
'LINE',c3=titr)
343 nseg0 = igrslin(igs)%NSEG
344 CALL my_alloc(igrslin(igs)%NODES,nseg0,2)
345 igrslin(igs)%NODES(1:nseg0,1:2) = 0
346 CALL my_alloc(igrslin(igs)%ELTYP,nseg0)
347 igrslin(igs)%ELTYP(1:nseg0) = 0
348 CALL my_alloc(igrslin(igs)%ELEM,nseg0)
349 igrslin(igs)%ELEM(1:nseg0) = 0
350 CALL my_alloc(igrslin(igs)%PROC,nseg0)
351 igrslin(igs)%PROC(1:nseg0) = 0
355 .
CALL hm_bigsbox(numelt ,ixt ,nixt ,2 ,3 ,4 ,
356 . x ,nseg ,flag ,skew ,
357 . iskn ,0 ,itabm1 ,ibox ,
359 . sbufbox,titr ,mess ,tagt,
361 iadboxmax =
max(iadbox,iadboxmax)
362 IF (iadbox>sbufbox .OR. iadbox<0)
363 .
CALL ancmsg(msgid=1007,msgtype=msgerror,anmode=anstop)
365 .
CALL hm_bigsbox(numelp ,ixp ,nixp ,2 ,3 ,5 ,
366 . x ,nseg ,flag ,skew,
367 . iskn ,0 ,itabm1 ,ibox ,
369 . sbufbox,titr ,mess ,tagp ,
371 IF (iadbox>sbufbox .OR. iadbox
372 .
CALL ancmsg(msgid=1007,msgtype=msgerror,anmode=anstop)
373 iadboxmax =
max(iadbox,iadboxmax)
375 igrslin(igs)%NSEG = nseg
376 ELSEIF (flag == 1)
THEN
377 igrslin(igs)%NSEG = nseg
381 DEALLOCATE(tagt,tagp)
382 IF(
ALLOCATED(bufbox))
DEALLOCATE(bufbox)
388 IF(it2/=0.OR.it6/=0)
THEN
389 ALLOCATE( surf_elm(npart) )
392 1 numelt ,numelp ,numelr ,npart ,ibid ,
393 2 ibid ,ibid ,ipartt ,ipartp ,ipartr ,
403 . option_titr = titr ,
409 IF (key(1:4) ==
'PART'.OR.key(1:6) ==
'SUBSET'.OR. key(1:3) ==
'MAT' .OR.key(1:4) ==
'PROP')
THEN
411 nseg0 = igrslin(igs)%NSEG
412 CALL my_alloc(igrslin(igs)%NODES,nseg0,2)
413 igrslin(igs)%NODES(1:nseg0,1:2) = 0
414 CALL my_alloc(igrslin(igs)%ELTYP,nseg0)
415 igrslin(igs)%ELTYP(1:nseg0) = 0
416 CALL my_alloc(igrslin(igs)%ELEM,nseg0)
417 igrslin(igs)%ELEM(1:nseg0) = 0
418 CALL my_alloc(igrslin(igs)%PROC,nseg0)
419 igrslin(igs)%PROC(1:nseg0) = 0
422 . igrslin(igs)%ID,titr,titr1,indx,nindx ,
423 . flag,subset,lsubmodel,map_tables%IPARTM)
424 CALL surftag(numelt,ixt,nixt,2,3,4,ipartt,
425 . buftmp,igrslin(igs),nseg,flag,nindx,
427 CALL surftag(numelp,ixp,nixp,2,3,5,ipartp,
428 . buftmp,igrslin(igs),nseg,flag,nindx,
430 IF (key(1:3) /= 'mat
')
431 . CALL SURFTAG(NUMELR,IXR,NIXR,2,3,6,IPARTR,
432 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
434 IF (KEY(1:4) == 'part
')
435 . CALL SURFTAGX(NUMELX,IXX,KXX,NIXX,8,IPARTX,
436 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG)
437 IF (FLAG == 0) IGRSLIN(IGS)%NSEG = NSEG
439 ! reset BUFTMP to 0 (only where it was set to 1/-1)
452 CALL HM_OPTION_START('/line
')
455 CALL HM_OPTION_READ_KEY(LSUBMODEL,
457 . OPTION_TITR = TITR ,
462 IF (KEY(1:6)=='submod
') THEN
463 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
464 NSEG0 = IGRSLIN(IGS)%NSEG
465 CALL MY_ALLOC(IGRSLIN(IGS)%NODES,NSEG0,2)
466 IGRSLIN(IGS)%NODES(1:NSEG0,1:2) = 0
467 CALL MY_ALLOC(IGRSLIN(IGS)%ELTYP,NSEG0)
468 IGRSLIN(IGS)%ELTYP(1:NSEG0) = 0
469 CALL MY_ALLOC(IGRSLIN(IGS)%ELEM,NSEG0)
470 IGRSLIN(IGS)%ELEM(1:NSEG0) = 0
471 CALL MY_ALLOC(IGRSLIN(IGS)%PROC,NSEG0)
472 IGRSLIN(IGS)%PROC(1:NSEG0) = 0
475 CALL HM_SUBMODPART(ISUBMOD,BUFTMP,IPART,ID ,FLAG ,
476 . MESS ,TITR ,TITR1,INDX,NINDX,
478 CALL SURFTAG(NUMELT,IXT,NIXT,2,3,4,IPARTT,
479 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
481 CALL SURFTAG(NUMELP,IXP,NIXP,2,3,5,IPARTP,
482 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
484 CALL SURFTAG(NUMELR,IXR,NIXR,2,3,6,IPARTR,
485 . BUFTMP,IGRSLIN(IGS),NSEG,FLAG,NINDX,
487 IF (FLAG == 0) IGRSLIN(IGS)%NSEG = NSEG
500 CALL HM_OPTION_START('/line
')
503 CALL HM_OPTION_READ_KEY(LSUBMODEL,
505 . OPTION_TITR = TITR ,
509 IF (KEY(1:4) == 'surf.OR.
' KEY(1:4) == 'edge')
THEN
513 CALL hm_get_intv (
'idsmax' ,nentity,is_available,lsubmodel)
519 IF (jj == igrsurf(k)%ID)
THEN
525 nseg0=nseg0+igrsurf(igrs)%NSEG
526 DO k=0,igrsurf(igrs)%NSEG-1
527 buftmp(iad0+6*k) = igrsurf(igrs)%NODES(k+1,1)
528 buftmp(iad0+6*k+1) = igrsurf(igrs)%NODES(k+1,2)
529 buftmp(iad0+6*k+2) = igrsurf(igrs)%NODES(k+1,3)
530 buftmp(iad0+6*k+3) = igrsurf(igrs)%NODES(k+1,4)
531 buftmp(iad0+6*k+4) = igrsurf(igrs)%ELTYP(k+1)
532 buftmp(iad0+6*k+5) = igrsurf(igrs)%ELEM(k+1)
535 indx(nindx)=iad0+6*k+jj-1
538 iad0=iad0+6*igrsurf(igrs)%NSEG
543 CALL my_alloc(igrslin(igs)%NODES, igrslin(igs)%NSEG,2)
544 igrslin(igs)%NODES(1:igrslin(igs)%NSEG,1:2) = 0
545 CALL my_alloc(igrslin(igs)%ELTYP,igrslin(igs)%NSEG)
546 igrslin(igs)%ELTYP(1:igrslin(igs)%NSEG) = 0
547 CALL my_alloc(igrslin(igs)%ELEM,igrslin(igs)%NSEG)
548 igrslin(igs)%ELEM(1:igrslin(igs)%NSEG) = 0
549 CALL my_alloc(igrslin(igs)%PROC,igrslin
550 igrslin(igs)%PROC(1:igrslin(igs)%NSEG) = 0
554 IF (flag == 1) line_nseg0 = igrslin(igs)%NSEG
555 CALL linedge(nseg0 ,nseg ,buftmp,igrslin(igs)%NODES ,key,
556 . flag ,igrslin(igs)%ELTYP,igrslin(igs)%ELEM,
559 IF (flag == 0) igrslin(igs)%NSEG = nseg
577 . option_titr = titr ,
583 IF (key(1:2) ==
'GR'.OR.key(1:4) ==
'WIRE')
THEN
585 nseg0 = igrslin(igs)%NSEG
586 CALL my_alloc(igrslin(igs)%NODES,nseg0,2)
587 igrslin(igs)%NODES(1:nseg0,1:2) = 0
588 CALL my_alloc(igrslin(igs)%ELTYP,igrslin(igs)%NSEG)
589 igrslin(igs)%ELTYP(1:igrslin(igs)%NSEG) = 0
590 CALL my_alloc(igrslin(igs)%ELEM,igrslin(igs)%NSEG)
591 igrslin(igs)%ELEM(1:igrslin(igs)%NSEG) = 0
592 CALL my_alloc(igrslin(igs)%PROC,nseg0)
593 igrslin(igs)%PROC(1:nseg0) = 0
595 IF(key(1:6) ==
'GRSPRI')
THEN
597 CALL hm_surfgr2(ngrspri,key(1:6),numel,igrslin(igs)%ID,
598 . igrspring,buftmp,titr,titr1,
599 . indx,nindx,flag,ibid,ibid,
600 . ibid,ibid,flag_grbric,lsubmodel)
601 CALL surftage(numelr,ixr,nixr,2,3,6,
602 . buftmp,igrslin(igs),nseg,flag,
603 . indx,nindx,nseg_tot)
604 ELSEIF(key(1:6) ==
'GRTRUS')
THEN
606 CALL hm_surfgr2(ngrtrus,key(1:6),numel,igrslin(igs)%ID,
607 . igrtruss,buftmp,titr,titr1,
608 . indx,nindx,flag,ibid,ibid,
609 . ibid,ibid,flag_grbric,lsubmodel)
610 CALL surftage(numelt,ixt,nixt,2,3,4,
611 . buftmp,igrslin(igs),nseg,flag,
612 . indx,nindx,nseg_tot)
613 ELSEIF(key(1:6) ==
'GRBEAM')
THEN
615 CALL hm_surfgr2(ngrbeam,key(1:6),numel,igrslin(igs)%ID,
616 . igrbeam,buftmp,titr,titr1,
617 . indx,nindx,flag,ibid,ibid,
618 . ibid,ibid,flag_grbric,lsubmodel)
619 CALL surftage(numelp,ixp,nixp,2,3,5,
620 . buftmp,igrslin(igs),nseg,flag,
621 . indx,nindx,nseg_tot)
623 IF (flag == 0) igrslin(igs)%NSEG = nseg
634 DEALLOCATE(buftmp,indx)
635 IF(it2/=0.OR.it6/=0)
THEN
639 DEALLOCATE( surf_elm )
644 CALL ancmsg(msgid=189,msgtype=msgerror,anmode=aninfo,i1=igrslin(igs)%ID)