61 2 IGRSURF ,IXS ,IXQ ,IXC ,IXT ,
63 4 ,IPART ,IPARTS ,IPARTQ ,IPARTC ,
64 5 IPARTT ,IPARTP ,IPARTR ,IPARTTG ,X ,
66 7 BUFSF ,KNOD2ELS,NOD2ELS ,SH4TREE ,SH3TREE ,
67 8 ISUBMOD ,FLAG ,UNITAB ,IBOX ,
68 9 IXS10 ,IXS16 , IXS20 ,RTRANS ,
69 A LSUBMODEL,KNOD2ELC,NOD2ELC,KNOD2ELTG,NOD2ELTG,
70 B KXIG3D ,IXIG3D ,IPARTIG3D,
71 C KNOT ,IGEO ,WIGE ,KNOD2ELIG3D,NOD2ELIG3D,
72 D V ,NIGE ,RIGE ,XIGE ,
73 E VIGE ,IADTABIGE,DECALIGEO,IADBOXMAX,KNOD2ELQ,
74 F NOD2ELQ ,SUBSET ,IGRBRIC ,IGRSH4N ,IGRSH3N,
75 G KNOTLOCPC,KNOTLOCEL,NSETS,MAP_TABLES)
92#include "implicit_f.inc"
100#include "remesh_c.inc"
101#include "ige3d_c.inc"
103#include "tabsiz_c.inc"
107 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
108 INTEGER ITABM1(SITABM1),
109 . IXS(NIXS,NUMELS),IXQ(NIXQ,NUMELQ),IXC(NIXC,NUMELX),IXT(NIXT,NUMELT),
110 . IXP(NIXP,NUMELP),IXR(NIXR,NUMELR),IXTG(NIXTG,nUMELTG),IPARTS(NUMELS),
111 . IPARTQ(NUMELQ),IPARTC(NUMELC),IPARTT(*),IPARTP(NUMELP),IPARTR(NUMELR),
112 . IPARTTG(NUMELTG),IPART(LIPART1,NPART+),ITAB(NUMNOD),
113 . ISKN(,SISKWN/LISKN),MFI,KNOD2ELS(NUMNOD
122INTEGER FLAG,IADTABIGE,DECALIGEO,
124 my_real x(3,numnod),skew(lskew,sskew/lskew),bufsf(lisurf1*nsurf),
125 . rtrans(ntransf,nrtrans),v(3,numnod),rige(*),xige(*),vige(*),
126 . wige(*),knot(*),knotlocpc(*),knotlocel(*)
128 TYPE(MAPPING_STRUCT_),
INTENT(IN) :: MAP_TABLES
130 TYPE (SUBSET_) ,
DIMENSION(NSUBS) :: SUBSET
131 TYPE (GROUP_) ,
DIMENSION(NGRBRIC) :: IGRBRIC
132 TYPE (GROUP_) ,
DIMENSION(NGRSHEL) :: IGRSH4N
133 TYPE (GROUP_)
DIMENSION(NGRSH3N)
134TYPE (SURF_) ,
DIMENSION(NSURF+NSETS) :: IGRSURF
135 TYPE (BOX_) ,
DIMENSION(NBBOX) :: IBOX
139 INTEGER J,JJ,I,K,L,II,KK,ISU,ID,NSEG,NOSYS,NTOT,
140 . iter,igs,igrs,nsu,cont,iad0,iadv,
141 . iadfin,it0,it1,it2,it3,it4,it5,it6,it7,ipp,n1,n2,
142 . nsegv,ne,ityp,iskew,mad,srftyp,refmad,dgr,dgr1,
143 .
jc, iext,uid,iflagunit,
144 . isk,boxtype,j2(2),it8,sbufbox,it9,iadpl,sub_id,
145 . ifre,numel,intmax,ibufsiz,nindx,stat,nsegige,
146 . iadbox,n3,n4,nseg0,
147 . list_surf(nsurf),nseg_tot,nn,nentity,
150 . xmin,xmax,ymin,
ymax,zmin,zmax,bid,
151 . s_a,s_b,s_c,xg,yg,zg,fac_l,diam,xp1,yp1,zp1,xp2,yp2,zp2
152 CHARACTER(LEN=NCHARTITLE) :: TITR,STRING
154 CHARACTER(LEN=NCHARKEY) :: KEY,KEY2,KEY3
155 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BUFBOX, BUFTMP, INDX ,TAGSHELLBOXC,TAGSHELLBOXG
156 my_real :: VECTX,VECTY,VECTZ,VECT
157 DOUBLE PRECISION RSBUFBOX
158 CHARACTER(LEN=NCHARTITLE) :: TITR1
159 LOGICAL :: FLAG_GRBRIC, lFOUND, IS_AVAILABLE, IS_ENCRYPTED, lERROR, l1104
160 INTEGER :: ID_PART,MODE
162 INTEGER :: NINDX_SOL, NINDX_SOL10
163 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDX_SOL
164TYPE(PART_TYPE),
DIMENSION(:),
ALLOCATABLE :: SURF_ELM
186 DATA MESS/
'SURFACE DEFINITION '/
187 DATA INTMAX /2147483647/
224! ityp = 6 - line of springs
243 ibufsiz=numelc+numeltg+6*numels+npart
244 ALLOCATE(buftmp(ibufsiz),indx(ibufsiz),stat=stat)
245 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
260 . option_titr = titr ,
268 igrsurf(igs)%NSEG = 0
269 igrsurf(igs)%NSEG_IGE = 0
270 igrsurf(igs)%IAD_IGE = 0
271 igrsurf(igs)%TYPE = 0
272 igrsurf(igs)%ID_MADYMO = 0
273 igrsurf(igs)%IAD_BUFR = 0
274 igrsurf(igs)%NB_MADYMO = 0
275 igrsurf(igs)%TYPE_MADYMO = 0
276 igrsurf(igs)%LEVEL = 0
277 igrsurf(igs)%TH_SURF = 0
278 igrsurf(igs)%ISH4N3N = 0
279 igrsurf(igs)%NSEG_R2R_ALL = 0
280 igrsurf(igs)%NSEG_R2R_SHARE = 0
284 igrsurf(igs)%TITLE=titr
285 IF(key(1:4)==
'SURF' .OR. key(1:5)==
'DSURF')
THEN
290 ELSEIF(key(1:3)==
'SEG')
THEN
292 IF (flag == 0) igrsurf(igs)%NSEG=0
294 nseg0 = igrsurf(igs)%NSEG
295 CALL my_alloc(igrsurf(igs)%NODES,nseg0,4)
296 igrsurf(igs)%NODES(1:nseg0,1:4) = 0
297 CALL my_alloc(igrsurf(igs)%ELTYP,nseg0)
298 igrsurf(igs)%ELTYP(1:nseg0) = 0
299 CALL my_alloc(igrsurf(igs)%ELEM,nseg0)
300 igrsurf(igs)%ELEM(1:nseg0) = 0
303 CALL hm_get_intv (
'segmax' ,nentity,is_available,lsubmodel)
308 CALL HM_GET_INT_ARRAY_INDEX('n2
',N2,KK,IS_AVAILABLE,LSUBMODEL)
309 N1 = USR2SYS(N1,ITABM1,MESS,ID)
310 N2 = USR2SYS(N2,ITABM1,MESS,ID)
312.OR.
IF(NUMELS10>0FLAG==1) THEN
313 CALL HM_GET_INT_ARRAY_INDEX('n3
',N3,KK,IS_AVAILABLE,LSUBMODEL)
314 CALL HM_GET_INT_ARRAY_INDEX('n4
',N4,KK,IS_AVAILABLE,LSUBMODEL)
316 N3 = USR2SYS(N3,ITABM1,MESS,ID)
318 N4 = USR2SYS(N4,ITABM1,MESS,ID)
327.AND..AND..AND.
IF(NUMELS10 > 0N2D==0N3==N4N3/=0) THEN
328 NSEG0 = IGRSURF(IGS)%NSEG
330 CALL HM_GET_INT_ARRAY_INDEX('n1
',N1,KK,IS_AVAILABLE,LSUBMODEL)
331 CALL HM_GET_INT_ARRAY_INDEX('n2
',N2,KK,IS_AVAILABLE,LSUBMODEL)
332 N1 = USR2SYS(N1,ITABM1,MESS,ID)
333 N2 = USR2SYS(N2,ITABM1,MESS,ID)
335 CALL TSURFTAG(IXS ,IXS10 ,IGRSURF(IGS),FLAG ,NSEG ,
336 2 KNOD2ELS,NOD2ELS ,N1 ,N2 ,N3 ,
341 NSEG0 = IGRSURF(IGS)%NSEG
343 . N1 ,N2 ,N3 ,N4 ,NSEG0,
344 . NSEG,IGRSURF(IGS)%NODES,IGRSURF(IGS)%ELTYP,IGRSURF(IGS)%ELEM,0,0)
348 IGRSURF(IGS)%NSEG = NSEG
352 ELSEIF(KEY(1:6)=='subset.OR.
' KEY(1:4)=='part.OR.
'
353 . KEY(1:3)=='mat.OR.
' KEY(1:4)=='prop.OR.
'
354 . KEY(1:6)=='grbric
')THEN
357 IF (FLAG == 0) IGRSURF(IGS)%NSEG=0
359 ELSEIF(KEY(1:3) == 'box.AND..AND.
'NBBOX == 0
360 . (KEY2(1:5) /= 'recta.AND.
'
361 . KEY2(1:5) /= 'cylin.AND.
'KEY2(1:5) /= 'spher
'))THEN
364 ELSEIF(KEY(1:2)=='gr
')THEN
367 IF (FLAG == 0) IGRSURF(IGS)%NSEG=0
369 ELSEIF(KEY(1:6)=='ellips.OR.
'KEY(1:8)=='mdellips
')THEN
372 IF (FLAG == 0) IGRSURF(IGS)%NSEG=1
375 NSEG0 = IGRSURF(IGS)%NSEG
376 CALL MY_ALLOC(IGRSURF(IGS)%NODES,NSEG0,4)
377 IGRSURF(IGS)%NODES(1:NSEG0,1:4) = 0
378 CALL MY_ALLOC(IGRSURF(IGS)%ELTYP,NSEG0)
379 IGRSURF(IGS)%ELTYP(1:NSEG0) = 0
380 CALL MY_ALLOC(IGRSURF(IGS)%ELEM,NSEG0)
381 IGRSURF(IGS)%ELEM(1:NSEG0) = 0
383 ELSEIF(KEY(1:6)=='submod
')THEN
386 IF (FLAG == 0) IGRSURF(IGS)%NSEG=0
388 ELSEIF(KEY(1:3)=='box.AND.
'(KEY2(1:5) == 'recta.OR.
'
389 . KEY2(1:5) == 'cylin.OR.
'KEY2(1:5) == 'spher
'))THEN
393 ELSEIF(KEY(1:3) == 'box.AND.
' NBBOX > 0)THEN
396 IF (FLAG == 0) IGRSURF(IGS)%NSEG=0
398 ELSEIF(KEY(1:6)=='plane
')THEN
401 IF (FLAG == 0) IGRSURF(IGS)%NSEG=0
410 STRING = "/SURF/"//KEY(1:LEN_TRIM(KEY))
411 IF(LEN_TRIM(KEY2)>1)STRING = STRING//KEY2(1:LEN_TRIM(KEY2))
412 CALL ANCMSG(MSGID=686,ANMODE=ANINFO,MSGTYPE=MSGERROR,I1=ID, C1=TITR, C2=STRING)
416 ENDDO ! I=1,NLINE(KCUR)
418 NUMEL = NUMELC+NUMELTG
425 LIST_SURF(IGS) = IGRSURF(IGS)%ID
427 CALL UDOUBLE_IGR(LIST_SURF,NSURF,MESS,0,BID)
433 !no longer supported with new reader based on CFG files
439 !no longer supported with new reader based on CFG files
445 ALLOCATE(TAGSHELLBOXC(NUMELC),STAT=stat)
446 ALLOCATE(TAGSHELLBOXG(NUMELTG),STAT=stat)
447 TAGSHELLBOXC(1:NUMELC) = 0
448 TAGSHELLBOXG(1:NUMELTG) = 0
453 ELSEIF (FLAG == 1) THEN
454 ALLOCATE(BUFBOX(IADBOXMAX))
455 BUFBOX(1:IADBOXMAX) = 0
457 SBUFBOX = INT(INTMAX)
459 CALL HM_OPTION_START('/surf
')
461 CALL HM_OPTION_READ_KEY(LSUBMODEL,
463 . OPTION_TITR = TITR ,
469 IF(KEY(1:3) == 'box.AND.
' NBBOX > 0)THEN
474 IF (UNITAB%UNIT_ID(J) == UID) THEN
475 FAC_L = UNITAB%FAC_L(J)
480.AND.
IF (UID/=0IFLAGUNIT==0) THEN
481 CALL ANCMSG(MSGID=659,ANMODE=ANINFO,MSGTYPE=MSGERROR,
482 . I2=UID,I1=ID,C1='surface
',
487 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
488 NSEG0 = IGRSURF(IGS)%NSEG
489 CALL MY_ALLOC(IGRSURF(IGS)%NODES,NSEG0,4)
490 IGRSURF(IGS)%NODES(1:NSEG0,1:4) = 0
491 CALL MY_ALLOC(IGRSURF(IGS)%ELTYP,NSEG0)
492 IGRSURF(IGS)%ELTYP(1:NSEG0) = 0
493 CALL MY_ALLOC(IGRSURF(IGS)%ELEM,NSEG0)
494 IGRSURF(IGS)%ELEM(1:NSEG0) = 0
499 . CALL HM_BIGSBOX(NUMEL ,IXC ,NIXC ,2 ,5 ,3 ,
500 . X , NSEG ,FLAG ,SKEW,
501 . ISKN ,1 ,ITABM1 ,IBOX ,
502 . ID ,BUFBOX,IGRSURF(IGS),IADBOX,KEY ,
503 . SBUFBOX,TITR ,MESS ,TAGSHELLBOXC,
506 IADBOXMAX = MAX(IADBOX,IADBOXMAX)
508.OR.
IF (IADBOX>SBUFBOX IADBOX<0)
509 . CALL ANCMSG(MSGID=1007, MSGTYPE=MSGERROR,ANMODE=ANSTOP)
513 . CALL HM_BIGSBOX(NUMEL ,IXTG ,NIXTG ,2 ,4 ,7 ,
514 . X , NSEG ,FLAG ,SKEW,
515 . ISKN ,1 ,ITABM1 ,IBOX ,
516 . ID ,BUFBOX,IGRSURF(IGS),IADBOX,KEY ,
517 . SBUFBOX,TITR ,MESS ,TAGSHELLBOXG,
519.OR.
IF (IADBOX>SBUFBOX IADBOX<0)
520 . CALL ANCMSG(MSGID=1007, MSGTYPE=MSGERROR,ANMODE=ANSTOP)
522 IADBOXMAX = MAX(IADBOX,IADBOXMAX)
525 IF(KEY2(1:3)=='ext
')THEN
527 ELSEIF(KEY2(1:3)=='all
')THEN
530 IGRSURF(IGS)%EXT_ALL = IEXT
533 NSEG0 = IGRSURF(IGS)%NSEG
534 CALL SBOXBOXSURF(IXS ,X ,NSEG,
535 . KNOD2ELS ,NOD2ELS,IEXT ,FLAG,
536 . IXS10 ,IXS16 ,IXS20,SKEW ,IBOX,
537 . ID ,BUFBOX,IADBOX ,KEY ,
538 . SBUFBOX ,TITR ,KNOD2ELC,NOD2ELC ,IXC ,
539 . TAGSHELLBOXC ,KNOD2ELTG ,NOD2ELTG ,IXTG ,
540 . TAGSHELLBOXG,IGRSURF(IGS),NN,NSEG0,LSUBMODEL)
543 IADBOXMAX = MAX(IADBOX,IADBOXMAX)
546 IGRSURF(IGS)%NSEG = NSEG
547 ELSEIF (FLAG == 1) THEN
548 IGRSURF(IGS)%NSEG = NSEG
551.OR.
IF (IADBOX>SBUFBOX IADBOX<0)
552 . CALL ANCMSG(MSGID=1007, MSGTYPE=MSGERROR,ANMODE=ANSTOP)
554 IF(ALLOCATED(BUFBOX))DEALLOCATE(BUFBOX)
555 DEALLOCATE(TAGSHELLBOXC,TAGSHELLBOXG)
562.OR.
IF(IT2/=0IT6/=0)THEN
563 ALLOCATE( SURF_ELM(NPART) )
565 CALL INIT_SURF_ELM(NUMELS ,NUMELS8,NUMELS10,NUMELC ,NUMELTG ,
566 1 IBID ,IBID ,IBID ,NPART ,IPARTS ,
567 2 IPARTC ,IPARTTG,IBID ,IBID ,IBID ,
574 ALLOCATE( INDX_SOL(NUMELS) )
575 ALLOCATE( INDX_SOL10(NUMELS) )
576 CALL HM_OPTION_START('/surf
')
578 CALL HM_OPTION_READ_KEY(LSUBMODEL,
580 . OPTION_TITR = TITR ,
587 NSEG0 = IGRSURF(IGS)%NSEG
588 IF (KEY(1:6)=='grbric
')THEN
589 IF(KEY2(1:3)=='ext
')THEN
593 IF(KEY2(1:4)=='free
')THEN
597.AND.
IF(IEXT==0IFRE==0)THEN !only /grbric/ext is treated
598 CALL ANCMSG(MSGID=479,
605 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
606 NSEG0 = IGRSURF(IGS)%NSEG
607 CALL MY_ALLOC(IGRSURF(IGS)%NODES,NSEG0,4)
608 IGRSURF(IGS)%NODES(1:NSEG0,1:4) = 0
609 CALL MY_ALLOC(IGRSURF(IGS)%ELTYP,NSEG0)
610 IGRSURF(IGS)%ELTYP(1:NSEG0) = 0
611 CALL MY_ALLOC(IGRSURF(IGS)%ELEM,NSEG0)
612 IGRSURF(IGS)%ELEM(1:NSEG0) = 0
615 NUMEL=NUMELS8+NUMELS10
617 CALL HM_SURFGR2(NGRBRIC ,KEY(1:6),NUMEL ,IGRSURF(IGS)%ID,
618 2 IGRBRIC ,BUFTMP ,TITR ,TITR1 ,
619 3 INDX ,NINDX ,FLAG ,NINDX_SOL,NINDX_SOL10,
620 4 INDX_SOL,INDX_SOL10 ,FLAG_GRBRIC,LSUBMODEL)
621 CALL SSURFTAG(IXS ,IPARTS ,NSEG0 ,IGRSURF(IGS),BUFTMP,
622 2 NSEG ,KNOD2ELS,NOD2ELS ,IEXT ,FLAG ,
623 3 IXS10 ,IXS16 ,IXS20 ,IFRE ,KEY ,
624 4 KNOD2ELC,NOD2ELC ,KNOD2ELTG,NOD2ELTG,
625 5 IXC ,IXTG ,IPARTC ,IPARTTG ,NINDX,
626 6 NINDX_SOL, NINDX_SOL10, INDX, INDX_SOL, INDX_SOL10,
629 IGRSURF(IGS)%NSEG = NSEG
633 IF (KEY(1:4)=='part.OR.
'KEY(1:6)=='subset.OR.
'
634 . KEY(1:3)=='mat.OR.
' KEY(1:4)=='prop
') THEN
635 IF(KEY2(1:3)=='ext
')THEN
637 ELSEIF(KEY2(1:3)=='all
')THEN
640 IGRSURF(IGS)%EXT_ALL = IEXT
641 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
643 NSEG0 = IGRSURF(IGS)%NSEG_IGE
644 CALL MY_ALLOC(IGRSURF(IGS)%NODES_IGE,NSEG0,4)
645 IGRSURF(IGS)%NODES_IGE(1:NSEG0,1:4) = 0
646 CALL MY_ALLOC(IGRSURF(IGS)%ELTYP_IGE,NSEG0)
647 IGRSURF(IGS)%ELTYP_IGE(1:NSEG0) = 0
648 CALL MY_ALLOC(IGRSURF(IGS)%ELEM_IGE,NSEG0)
649 IGRSURF(IGS)%ELEM_IGE(1:NSEG0) = 0
651 NSEG0 = IGRSURF(IGS)%NSEG
652 CALL MY_ALLOC(IGRSURF(IGS)%NODES,NSEG0,4)
653 IGRSURF(IGS)%NODES(1:NSEG0,1:4) = 0
654 CALL MY_ALLOC(IGRSURF(IGS)%ELTYP,NSEG0)
655 IGRSURF(IGS)%ELTYP(1:NSEG0) = 0
656 CALL MY_ALLOC(IGRSURF(IGS)%ELEM,NSEG0)
657 IGRSURF(IGS)%ELEM(1:NSEG0) = 0
659 IF (NVOLU + NMONVOL > 0) THEN
660 NSEG0 = IGRSURF(IGS)%NSEG
661 !Keep track of the "reversed surface" -> when /SURF/PART comes
662 !with a negative part_id
663 CALL MY_ALLOC(IGRSURF(IGS)%REVERSED, NSEG0)
667 CALL HM_TAGPART2(BUFTMP,IPART ,KEY ,
668 . IGRSURF(IGS)%ID,TITR,TITR1,INDX,NINDX ,
669 . FLAG ,SUBSET, LSUBMODEL,MAP_TABLES%IPARTM)
672 CALL SURFTAG(NUMEL,IXC,NIXC,2,5,3,IPARTC,
673 . BUFTMP,IGRSURF(IGS),NSEG,FLAG,NINDX,
676 CALL SURFTAG(NUMEL,IXTG,NIXTG,2,4,7,IPARTTG,
677 . BUFTMP,IGRSURF(IGS),NSEG,FLAG,NINDX,
681 CALL SURFTAGADM(NUMEL,IXC,NIXC,2,5,3,IPARTC,
682 . BUFTMP,IGRSURF(IGS),NSEG,IPART,
683 . KSH4TREE,SH4TREE,FLAG)
685 CALL SURFTAGADM(NUMEL,IXTG,NIXTG,2,4,7,IPARTTG,
686 . BUFTMP,IGRSURF(IGS),NSEG,IPART,
687 . KSH3TREE,SH3TREE,FLAG)
692 IF (IABS(BUFTMP(IPARTS(II)))==1)THEN
694 CALL ANCMSG(MSGID=1104,
696 . ANMODE=ANINFO_BLIND_1,
702 IF(l1104)CALL ANCMSG(MSGID=1104,
704 . ANMODE=ANINFO_BLIND_1,
710 DO II=NUMELS8+NUMELS10+1,NUMELS
711 IF (IABS(BUFTMP(IPARTS(II)))==1)THEN
712 TITR = IGRSURF(IGS)%TITLE
713 CALL ANCMSG(MSGID=651,
722 NSEG0 = IGRSURF(IGS)%NSEG
723 CALL SSURFTAG(IXS ,IPARTS ,NSEG0 ,IGRSURF(IGS),BUFTMP ,
724 2 NSEG ,KNOD2ELS,NOD2ELS ,IEXT ,FLAG ,
725 3 IXS10 ,IXS16 ,IXS20 ,IFRE ,KEY ,
726 4 KNOD2ELC,NOD2ELC ,KNOD2ELTG,NOD2ELTG,
727 5 IXC ,IXTG ,IPARTC ,IPARTTG ,NINDX,
728 6 NINDX_SOL, NINDX_SOL10, INDX, INDX_SOL, INDX_SOL10,
730 IF(NUMELIG3D/=0) THEN
731 CALL SSURFTAGIGEO(IXIG3D,IPARTIG3D,KXIG3D,
733 3 IEXT ,FLAG ,IFRE ,KEY ,
734 4 NSEGIGE,KNOT ,IGEO ,WIGE ,
735 5 X ,V, KNOD2ELIG3D,NOD2ELIG3D ,
736 6 NIGE,RIGE,XIGE,VIGE,IADTABIGE,DECALIGEO,
737 7 IGRSURF(IGS),KNOTLOCPC,KNOTLOCEL)
741 CALL QSURFTAG(IXQ ,IPARTQ , NSEG0 ,IGRSURF(IGS),BUFTMP ,
742 2 NSEG ,KNOD2ELQ,NOD2ELQ,IEXT ,FLAG ,
746 IGRSURF(IGS)%NSEG = NSEG
747 IGRSURF(IGS)%NSEG_IGE = NSEGIGE
748 NUMFAKENODIGEO=NUMFAKENODIGEO+16*NSEGIGE/9 ! same functionality as IADTABIGE
760 DEALLOCATE( INDX_SOL )
761 DEALLOCATE( INDX_SOL10 )
767 CALL HM_OPTION_START('/surf
')
769 CALL HM_OPTION_READ_KEY(LSUBMODEL,
771 . OPTION_TITR = TITR ,
777 IF (KEY(1:6)=='submod
') THEN
778 IF(KEY2(1:3)=='ext
')THEN
780 ELSEIF(KEY2(1:3)=='all
')THEN
783 IGRSURF(IGS)%EXT_ALL = IEXT
785 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
786 NSEG0 = IGRSURF(IGS)%NSEG
787 CALL MY_ALLOC(IGRSURF(IGS)%NODES,NSEG0,4)
788 IGRSURF(IGS)%NODES(1:NSEG0,1:4) = 0
789 CALL MY_ALLOC(IGRSURF(IGS)%ELTYP,NSEG0)
790 IGRSURF(IGS)%ELTYP(1:NSEG0) = 0
791 CALL MY_ALLOC(IGRSURF(IGS)%ELEM,NSEG0)
792 IGRSURF(IGS)%ELEM(1:NSEG0) = 0
793 IF (NVOLU + NMONVOL > 0) THEN
794 NSEG0 = IGRSURF(IGS)%NSEG
795 !Keep track of the "reversed surface" -> when /SURF/PART comes
796 !with a negative part_id
797 CALL MY_ALLOC(IGRSURF(IGS)%REVERSED, NSEG0)
801 CALL HM_SUBMODPART(ISUBMOD,BUFTMP ,IPART ,ID ,FLAG ,
802 . MESS ,TITR ,TITR1 ,INDX ,NINDX,
807 CALL SURFTAG(NUMEL,IXC,NIXC,2,5,3,IPARTC,
808 . BUFTMP,IGRSURF(IGS),NSEG,FLAG,NINDX,
811 CALL SURFTAG(NUMEL,IXTG,NIXTG,2,4,7,IPARTTG,
812 . BUFTMP,IGRSURF(IGS),NSEG,FLAG,NINDX,
816 CALL SURFTAGADM(NUMEL,IXC,NIXC,2,5,3,IPARTC,
817 . BUFTMP,IGRSURF(IGS),NSEG,IPART,
818 . KSH4TREE,SH4TREE,FLAG)
820 CALL SURFTAGADM(NUMEL,IXTG,NIXTG,2,4,7,IPARTTG,
821 . BUFTMP,IGRSURF(IGS),NSEG,IPART,
822 . KSH3TREE,SH3TREE,FLAG)
828 IF(IABS(BUFTMP(IPARTS(II)))==1)THEN
830 CALL ANCMSG(MSGID=1104,
832 . ANMODE=ANINFO_BLIND_1,
838 IF(l1104)CALL ANCMSG(MSGID=1104,
840 . ANMODE=ANINFO_BLIND_1,
845 DO II=NUMELS8+NUMELS10+1,NUMELS
846 IF(IABS(BUFTMP(IPARTS(II)))==1)THEN
847 CALL ANCMSG(MSGID=651,
856 NSEG0 = IGRSURF(IGS)%NSEG
857 CALL SSURFTAG(IXS ,IPARTS ,NSEG0 ,IGRSURF(IGS),BUFTMP,
858 2 NSEG ,KNOD2ELS,NOD2ELS ,IEXT ,FLAG ,
859 3 IXS10 ,IXS16 ,IXS20 ,IFRE ,KEY ,
860 4 KNOD2ELC,NOD2ELC ,KNOD2ELTG,NOD2ELTG,
861 5 IXC ,IXTG ,IPARTC ,IPARTTG ,NINDX,
862 6 NINDX_SOL, NINDX_SOL10, INDX, INDX_SOL, INDX_SOL10,
865 IGRSURF(IGS)%NSEG = NSEG
880 CALL HM_OPTION_START('/surf
')
882 CALL HM_OPTION_READ_KEY(LSUBMODEL,
884 . OPTION_TITR = TITR ,
892 IF (KEY(1:6)=='grshel
') THEN
894 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
895 NSEG0 = IGRSURF(IGS)%NSEG
896 CALL MY_ALLOC(IGRSURF(IGS)%NODES,NSEG0,4)
897 IGRSURF(IGS)%NODES(1:NSEG0,1:4) = 0
898 CALL MY_ALLOC(IGRSURF(IGS)%ELTYP,NSEG0)
899 IGRSURF(IGS)%ELTYP(1:NSEG0) = 0
900 CALL MY_ALLOC(IGRSURF(IGS)%ELEM,NSEG0)
901 IGRSURF(IGS)%ELEM(1:NSEG0) = 0
903 IF (NVOLU + NMONVOL > 0) THEN
904 NSEG0 = IGRSURF(IGS)%NSEG
905 ! Keep track of the "reversed surface" -> when /SURF/PART comes
906 ! with a negative part_id
907 CALL MY_ALLOC(IGRSURF(IGS)%REVERSED, NSEG0)
913 CALL HM_SURFGR2(NGRSHEL ,KEY(1:6),NUMEL ,IGRSURF(IGS)%ID,
914 . IGRSH4N ,BUFTMP ,TITR ,TITR1 ,
915 . INDX ,NINDX ,FLAG ,NINDX_SOL,NINDX_SOL10,
916 . INDX_SOL,INDX_SOL10 ,FLAG_GRBRIC,LSUBMODEL)
917 CALL SURFTAGE(NUMEL,IXC,NIXC,2,5,3,
918 . BUFTMP,IGRSURF(IGS),NSEG,FLAG,
919 . INDX,NINDX,NSEG_TOT)
921 IGRSURF(IGS)%NSEG = NSEG
924 ELSEIF (KEY(1:6)=='grsh3n.OR.
' KEY(1:6)=='grtria
') THEN
926 IF (FLAG == 1) THEN ! NSEG counted at FLAG = 0
927 NSEG0 = IGRSURF(IGS)%NSEG
928 CALL MY_ALLOC(IGRSURF(IGS)%NODES,NSEG0,4)
929 IGRSURF(IGS)%NODES(1:NSEG0,1:4) = 0
930 CALL MY_ALLOC(IGRSURF(IGS)%ELTYP,NSEG0)
931 IGRSURF(IGS)%ELTYP(1:NSEG0) = 0
932 CALL MY_ALLOC(IGRSURF(IGS)%ELEM,NSEG0)
933 IGRSURF(IGS)%ELEM(1:NSEG0) = 0
935 IF (NVOLU + NMONVOL > 0) THEN
936 NSEG0 = IGRSURF(IGS)%NSEG
937 ! Keep track of the "reversed surface" -> when /SURF/PART comes
938 ! with a negative part_id
939 CALL MY_ALLOC(IGRSURF(IGS)%REVERSED, NSEG0)
945 CALL HM_SURFGR2(NGRSH3N ,KEY(1:6),NUMEL ,IGRSURF(IGS)%ID,
946 . IGRSH3N ,BUFTMP ,TITR ,TITR1 ,
947 . INDX ,NINDX ,FLAG ,NINDX_SOL,NINDX_SOL10,
948 . INDX_SOL,INDX_SOL10 ,FLAG_GRBRIC,LSUBMODEL)
949 CALL SURFTAGE(NUMEL,IXTG,NIXTG,2,4,7,
950 . BUFTMP,IGRSURF(IGS),NSEG,FLAG,
951 . INDX,NINDX,NSEG_TOT)
953 IGRSURF(IGS)%NSEG = NSEG
956 !reset BUFTMP to 0 (only where it was set to 1/-1)
969.AND.
IF (IT5 /= 0 FLAG == 1)THEN
971 CALL HM_OPTION_START('/surf
')
973 CALL HM_OPTION_READ_KEY(LSUBMODEL,
975 . OPTION_TITR = TITR ,
979 . SUBMODEL_ID = SUB_ID)
980 IGRSURF(IGS)%TITLE = TITR
981 IF(KEY(1:6)=='ellips
')THEN
983 IGRSURF(IGS)%TYPE = 101
984 IGRSURF(IGS)%IAD_BUFR = MAD
987 CALL HM_GET_INTV ('skew
' ,ISKEW,IS_AVAILABLE,LSUBMODEL)
988 CALL HM_GET_INTV ('n
' ,DGR1,IS_AVAILABLE,LSUBMODEL)
989 !skew:temporary storage of user id
990 IGRSURF(IGS)%ID_MADYMO = ISKEW
991 !get internal id from user id
993 DO J=0,NUMSKW+MIN(1,NSPCOND)*NUMSPH+NSUBMOD
994 IF(ISKEW==ISKN(4,J+1)) THEN
1001 CALL ANCMSG(MSGID=184,
1013 BUFSF(MAD+7+J-1)=SKEW(J,ISKEW)
1017 CALL HM_GET_FLOATV ('xc
' ,XG,IS_AVAILABLE,LSUBMODEL,UNITAB)
1018 CALL HM_GET_FLOATV ('yc
' ,YG,IS_AVAILABLE,LSUBMODEL,UNITAB)
1019 CALL HM_GET_FLOATV ('zc
' ,ZG,IS_AVAILABLE,LSUBMODEL,UNITAB)
1020 IF(SUB_ID /= 0)CALL SUBROTPOINT(XG,YG,ZG,RTRANS,SUB_ID,LSUBMODEL)
1024 !Init application point for force and momentum
1025 !/* ellipsoides : defining center ! */
1031 CALL HM_GET_FLOATV ('a
' ,S_A,IS_AVAILABLE,LSUBMODEL,UNITAB)
1032 CALL HM_GET_FLOATV ('b
' ,S_B,IS_AVAILABLE,LSUBMODEL,UNITAB)
1033 CALL HM_GET_FLOATV ('c
' ,S_C,IS_AVAILABLE,LSUBMODEL,UNITAB)
1035.OR..OR.
IF ( S_A==0. S_B==0. S_C==0.) THEN
1036 CALL ANCMSG(MSGID=185,
1042.AND.
IF (DGR==0DGR1==0) THEN
1044 ELSEIF (DGR1==0) THEN
1054 ELSEIF (KEY(1:8)=='mdellips
')THEN
1055 IGRSURF(IGS)%ID = ID
1056 IGRSURF(IGS)%TYPE = 100
1057 IGRSURF(IGS)%IAD_BUFR = MAD
1059 CALL HM_GET_INTV ('mdellips
' ,REFMAD,IS_AVAILABLE,LSUBMODEL)
1060 !ID MaDyMo of entity which imposes the surface movement
1061 IGRSURF(IGS)%ID_MADYMO = REFMAD
1062 !Madymo syst id of entity which imposes the surface movement
1063 !(computed in Radioss Engine, when receiving Datas from MaDyMo).
1064 IGRSURF(IGS)%NB_MADYMO = 0
1073.AND.
IF (IT9 /= 0 FLAG == 1)THEN
1074 CALL HM_OPTION_START('/surf
')
1076 CALL HM_OPTION_READ_KEY(LSUBMODEL,
1078 . OPTION_TITR = TITR ,
1082 . SUBMODEL_ID = SUB_ID)
1083 IGRSURF(IGS)%TITLE = TITR
1085 DO J=1,UNITAB%NUNITS
1086 IF (UNITAB%UNIT_ID(J) == UID) THEN
1087 FAC_L = UNITAB%FAC_L(J)
1092.AND.
IF (UID/=0IFLAGUNIT==0) THEN
1093 CALL ANCMSG(MSGID=659,ANMODE=ANINFO,MSGTYPE=MSGERROR,
1094 . I2=UID,I1=ID,C1='surface
',
1099 IF(KEY(1:6)=='plane
')THEN
1100 IGRSURF(IGS)%ID = ID
1101 IGRSURF(IGS)%TYPE = 200
1102 IGRSURF(IGS)%IAD_BUFR = IADPL
1112 CALL HM_GET_FLOATV ('x_a
' ,XP1,IS_AVAILABLE,LSUBMODEL,UNITAB)
1113 CALL HM_GET_FLOATV ('y_a
' ,YP1,IS_AVAILABLE,LSUBMODEL,UNITAB)
1114 CALL HM_GET_FLOATV ('z_a
' ,ZP1,IS_AVAILABLE,LSUBMODEL,UNITAB)
1115 IF(SUB_ID /= 0)CALL SUBROTPOINT(XP1,YP1,ZP1,RTRANS,SUB_ID,LSUBMODEL)
1117 CALL HM_GET_FLOATV ('x_b
' ,XP2,IS_AVAILABLE,LSUBMODEL,UNITAB)
1118 CALL HM_GET_FLOATV ('y_b
' ,YP2,IS_AVAILABLE,LSUBMODEL,UNITAB)
1119 CALL HM_GET_FLOATV ('z_b
' ,ZP2,IS_AVAILABLE,LSUBMODEL,UNITAB)
1120 IF(SUB_ID /= 0)CALL SUBROTPOINT(XP2,YP2,ZP2,RTRANS,SUB_ID,LSUBMODEL)
1122 VECTX = (XP2-XP1)*(XP2-XP1)
1123 VECTY = (YP2-YP1)*(YP2-YP1)
1124 VECTZ = (ZP2-ZP1)*(ZP2-ZP1)
1125 VECT = SQRT(VECTX+VECTY+VECTZ)
1126 IF(VECT <= EM10)THEN
1127 CALL ANCMSG(MSGID=891,
1148 DEALLOCATE(BUFTMP,INDX)
1149.OR.
IF(IT2/=0IT6/=0)THEN
1151 CALL DEALLOCATE_SURF_ELM(NPART,SURF_ELM,MODE)
1152 DEALLOCATE( SURF_ELM )
1156 CALL ANCMSG(MSGID=189,
1159 . I1=IGRSURF(IGS)%ID)
subroutine hm_read_surf(itab, itabm1, igrsurf, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, ipart, iparts, ipartq, ipartc, ipartt, ipartp, ipartr, iparttg, x, mfi, iskn, skew, bufsf, knod2els, nod2els, sh4tree, sh3tree, isubmod, flag, unitab, ibox, ixs10, ixs16, ixs20, rtrans, lsubmodel, knod2elc, nod2elc, knod2eltg, nod2eltg, kxig3d, ixig3d, ipartig3d, knot, igeo, wige, knod2elig3d, nod2elig3d, v, nige, rige, xige, vige, iadtabige, decaligeo, iadboxmax, knod2elq, nod2elq, subset, igrbric, igrsh4n, igrsh3n, knotlocpc, knotlocel, nsets, map_tables)
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)