59 USE format_mod ,
ONLY : fmt_10i, fmt_8i, fmt_i, fmt_6i, fmt_5f, fmt_2i
60 USE reader_old_mod ,
ONLY : kpart,kprop,kcnode,kige3d,kcur,irec,nslash,koptad,nline,line,kline
61 USE user_id_mod ,
ONLY : id_limit
65#include "implicit_f.inc"
71#include "remesh_c.inc"
74#include "tabsiz_c.inc"
84 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAB,ITABM1,SUBID_NODES
85 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: KXIG3D,IGEO
86 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IPARTIG3D,IXIG3D,KNOD2ELIG3D,NOD2ELIG3D
87 my_real,
DIMENSION(:),
ALLOCATABLE :: knotlocpc,knotlocel,knot
89 TYPE(),
POINTER :: PTABCONPATCH
90 INTEGER :: IPART(4,NPART), N,ID,I,J,J10(10),STAT,
91 INTEGER USR2SYS,NUMNUSR1,IDS,K,
92 . IAD,IDX1,IDY1,IDZ1,NCTRL,BID,NUM,
93 . NRAFX,NRAFY,NRAFZ,NBLINE,D1,D2,D3,N1,N2,N3
94 INTEGER IAD_KNOT,IG,UID,SUB_ID,INTRULE,RAFRULE,
95 . NKNOT1,NKNOT2,NKNOT3,ITGEO,PX,PY,PZ,PID,IPID,MAXNUMGEO,
96 . NBRAFX,NBRAFY,NBRAFZ,NBIG3D_PATCH
97 INTEGER OFF_NOD(NSUBMOD), OFF_DEF(NSUBMOD)
99 CHARACTER(LEN=nchartitle) :: TITR,IDTITL
100 CHARACTER(LEN=ncharkey) :: KEY
107 DATA mess /
'OPTIONS FOR ISOGEOMETRIC MESH DEFINITION'
117 ALLOCATE(itab(numnusr),itabm1(2*numnusr),stat=stat)
118 IF(stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'ITAB')
119 ALLOCATE (subid_nodes(numnusr),stat=stat)
120 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'SUBID_NODES')
121 subid_nodes(1:numnusr) = 0
126 ALLOCATE (igeo(npropgi,numgeo),stat=stat)
127 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'IGEO')
135 DO WHILE(kline(1:1)/=
'/')
137 READ(iin,rec=irec,err=999,fmt=
'(A)')line
141 IF(key(1:6)==
'TYPE47'.OR. key(1:5)==
'IGE3D')
THEN
144 READ(iin,rec=irec,err=999,fmt=
'(A)')line
146 READ(line,err=999,fmt=fmt_2i) intrule,rafrule
148 READ(iin,rec=irec,err=999,fmt=
'(A)')line
150 READ(line,err=999,fmt=fmt_6i)
152 igeo(40,itgeo) = iad_knot
153 igeo(41,itgeo) = d1+1
154 igeo(42,itgeo) = d2+1
155 igeo(43,itgeo) = d3+1
159 deg_max=
max(deg_max,d1+2,d2+2,d3+2)
161 READ(iin,rec=irec,err=999,fmt=
'(A)')line
163 DO WHILE(kline(1:1)/=
'/')
166 READ(iin,rec=irec,err=999,fmt=
'(A)')line
172 ALLOCATE(knot(sknot),stat=stat)
173 IF(stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror
'KNOT'
182 READ(iin,rec=irec,err=999,fmt=
'(A)')kline
185 READ(iin,rec=irec,err=999,fmt=
'(A)')line
186 READ(line,err=999,fmt=fmt_i)pid
187 ipid = nintri(pid,igeo,npropgi,numgeo,1)
196 IF(iadmstat /= 0) id_limit%admesh=id_limit%global
206 DO WHILE(KLINE(1:1)/='/
')
208 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
211 CALL FREDEC_2KEY_4ID_T(KEY,IG,UID,BID,SUB_ID,IDTITL)
212 IF(KEY(1:6)=='type47.OR.
' KEY(1:5)=='ige3d
')THEN
214 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
216 READ(LINE,ERR=999,FMT=FMT_2I) INTRULE,RAFRULE
218 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
220 READ(LINE,ERR=999,FMT=FMT_6I)D1,D2,D3,N1,N2,N3
221 IGEO(40,ITGEO) = IAD_KNOT
222 IGEO(41,ITGEO) = D1+1
223 IGEO(42,ITGEO) = D2+1
224 IGEO(43,ITGEO) = D3+1
233 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
235 READ(LINE,ERR=999,FMT=FMT_5F) R5
237 IF(IAD_KNOT < NKNOT1+IGEO(40,ITGEO))THEN
238 IAD_KNOT = IAD_KNOT + 1
239 KNOT(IAD_KNOT) = R5(J)
246 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
248 READ(LINE,ERR=999,FMT=FMT_5F) R5
250 IF(IAD_KNOT < NKNOT1+NKNOT2+IGEO(40,ITGEO))THEN
251 IAD_KNOT = IAD_KNOT + 1
252 KNOT(IAD_KNOT) = R5(J)
259 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
261 READ(LINE,ERR=999,FMT=FMT_5F) R5
263 IF(IAD_KNOT < NKNOT1+NKNOT2+NKNOT3+IGEO(40,ITGEO))THEN
264 IAD_KNOT = IAD_KNOT + 1
265 KNOT(IAD_KNOT) = R5(J)
283 NBPART_IG3D = NBPART_IG3D+1
286 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
290 DO WHILE( LINE(1:1) /= '/.OR.
' LINE(1:6) == '/ige3d
')
292 IF (LINE(1:1) == '/
')THEN ! ON A ONE CHANGEMENT DE PART
294 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
297 READ(LINE,ERR=999,FMT=FMT_8I)ID,IDX1,IDY1,IDZ1,NCTRL,NBRAFX,NBRAFY,NBRAFZ
298 NBIG3D_PATCH=NBIG3D_PATCH+1
299 NCTRLMAX = MAX(NCTRLMAX,NCTRL)
301 NBFILSMAX = MAX(NBFILSMAX,NBRAFX*NBRAFY*NBRAFZ + 1)
302 NBMESHSURF = NBMESHSURF + MAX(NBRAFX-1,0) + MAX(NBRAFY-1,0) + MAX(NBRAFZ-1,0)
303 ADDELIG3D = ADDELIG3D + NBRAFX*NBRAFY*NBRAFZ
304 IREC = IREC + ((NCTRL-1)/10)+2
305 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
307 IF (LINE(1:6) == '')THEN ! ON A ONE CHANGEMENT DE PART
308 NBPART_IG3D = NBPART_IG3D+1
311 READ(IIN,REC=IREC,ERR=999,FMT='')LINE
316 ALLOCATE(IXIG3D(NUM+ADDELIG3D*NCTRLMAX),STAT=stat)
317 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='ixig3d
')
320 ALLOCATE(TABCONPATCH(NBPART_IG3D),STAT=stat)
321 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
329 NBPART_IG3D = NBPART_IG3D+1
330 PTABCONPATCH => TABCONPATCH(NBPART_IG3D)
331 PTABCONPATCH%ID_TABCON=NBPART_IG3D
334 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
335 DO WHILE( LINE(1:1) /= '/.OR.
' LINE(1:6) == '/ige3d
')
337 IF (LINE(1:1) == '/
')THEN
339 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
342 READ(LINE,ERR=999,FMT=FMT_8I)ID,IDX1,IDY1,IDZ1,NCTRL,NBRAFX,NBRAFY,NBRAFZ
343 NBIG3D_PATCH=NBIG3D_PATCH+1
344 IREC = IREC + ((NCTRL-1)/10)+2
345 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
347 IF (LINE(1:6) == '/ige3d
')THEN ! ON A ONE CHANGEMENT DE PART
348 PTABCONPATCH%L_TAB_IG3D=NBIG3D_PATCH
349 ALLOCATE(PTABCONPATCH%TAB_IG3D(NBIG3D_PATCH),STAT=stat)
350 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
351 ALLOCATE(PTABCONPATCH%INITIAL_CUT(3,NBIG3D_PATCH),STAT=stat)
352 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
353 NBPART_IG3D = NBPART_IG3D+1
354 PTABCONPATCH => TABCONPATCH(NBPART_IG3D)
357 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
362 PTABCONPATCH%L_TAB_IG3D=NBIG3D_PATCH
363 ALLOCATE(PTABCONPATCH%TAB_IG3D(NBIG3D_PATCH),STAT=stat)
364 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
365 ALLOCATE(PTABCONPATCH%INITIAL_CUT(3,NBIG3D_PATCH),STAT=stat)
366 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
372 OFF_NOD(I) = LSUBMODEL(I)%OFF_NOD
373 OFF_DEF(I) = LSUBMODEL(I)%OFF_DEF
378 CALL CPP_NODE_COUNT(NUMNUSR1)
379 CALL CPP_NODE_ID_READ(ITAB,SUBID_NODES)
387 IF(SUBID_NODES(I) /= 0)THEN
388 IF(ITAB(I) /= 0) ITAB(I) = ITAB(I) + OFF_NOD(SUBID_NODES(I))
390 IF (ITAB(I) > id_limit%admesh
391.AND..OR.
. (ITAB(I) < id_limit%admesh_ft_node_auto ITAB(I) >= id_limit%admesh_lt_node_auto))THEN
392 CALL ANCMSG(MSGID=1069,ANMODE=ANINFO,MSGTYPE=MSGERROR,I1=ITAB(I),C1=LINE,C2='/node
')
395 IF(ALLOCATED(SUBID_NODES)) DEALLOCATE(SUBID_NODES)
401 IREC = KOPTAD(KCUR)-1
402 DO I=1,NLINE(KCUR)+NSLASH(KCUR)
404 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
405 IF(LINE(1:1)=='/
')THEN
409 READ(LINE,ERR=999,FMT=FMT_I) ITAB(N)
410 IF (ITAB(N)>id_limit%admesh
411.AND..OR.
. (ITAB(N) < id_limit%admesh_ft_node_auto ITAB(N) >= id_limit%admesh_lt_node_auto))THEN
412 CALL ANCMSG(MSGID=1069,ANMODE=ANINFO,MSGTYPE=MSGERROR,I1=ITAB(N),C1=LINE,C2='/cnode
')
420 CALL CONSTIT(ITAB,ITABM1,NUMNUSR)
425 ALLOCATE(KXIG3D(NIXIG3D,NUMELIG3D0+ADDELIG3D),STAT=stat)
426 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='kxig3d
')
429 ALLOCATE(IPARTIG3D(NUMELIG3D0+ADDELIG3D),STAT=stat)
430 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='ipartig3d
')
440 INOD_IGE = FIRSTNOD_ISOGEO
442 DO WHILE( I < NUMELIG3D0 )
444 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
445 IF (LINE(1:1) == '/
')THEN
446 NBPART_IG3D = NBPART_IG3D+1
448 PTABCONPATCH => TABCONPATCH(NBPART_IG3D)
453 IF(IPART(4,J) == ID)IDS=J
460 KXIG3D(1,I) =IPART(1,IDS) ! ON SE FICHE DU 1 (PM)
461 KXIG3D(2,I) =IPART(2,IDS)
462 MAXNUMGEO=MAX(MAXNUMGEO,IPART(2,IDS))
466 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
467 READ(LINE,ERR=999,FMT=FMT_8I) ID,IDX1,IDY1,IDZ1,NCTRL,NRAFX,NRAFY,NRAFZ
468 NBIG3D_PATCH = NBIG3D_PATCH + 1
469 PTABCONPATCH%TAB_IG3D(NBIG3D_PATCH)=I ! ID
470 PTABCONPATCH%INITIAL_CUT(1,NBIG3D_PATCH)=NRAFX
471 PTABCONPATCH%INITIAL_CUT(2,NBIG3D_PATCH)=NRAFY
472 PTABCONPATCH%INITIAL_CUT(3,NBIG3D_PATCH)=NRAFZ
473 NCTRLMAX = MAX(NCTRLMAX,NCTRL)
479 KXIG3D(12,I)=MAX(NRAFX,1)
480 KXIG3D(13,I)=MAX(NRAFY,1)
481 KXIG3D(14,I)=MAX(NRAFZ,1)
482 KXIG3D(15,I)=INOD_IGE
483 INOD_IGE = INOD_IGE + 64
485 NBLINE= ((NCTRL-1)/10)+1
489 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
490 READ(LINE,ERR=999,FMT=FMT_10I) J10
493 IXIG3D(IAD)=USR2SYS(J10(J),ITABM1,MESS,ID)
504 ALLOCATE(KNOD2ELIG3D(NUMNOD+1),STAT=stat)
505 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='knod2elig3d
')
507 ALLOCATE(NOD2ELIG3D(NCTRLMAX*NUMELIG3D),
509 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='nod2elig3d
')
513 PX = IGEO(41,KXIG3D(2,I))
514 PY = IGEO(42,KXIG3D(2,I))
515 PZ = IGEO(43,KXIG3D(2,I))
517 N = IXIG3D(KXIG3D(4,I)+K-1)
518 KNOD2ELIG3D(N) = KNOD2ELIG3D(N) + 1
523 KNOD2ELIG3D(I+1) = KNOD2ELIG3D(I+1) + KNOD2ELIG3D(I)
527 KNOD2ELIG3D(N+1)=KNOD2ELIG3D(N)
535 SKNOTLOCPC = DEG_MAX*3*(NUMNODIGE0+2*ADDELIG3D*NCTRLMAX)*MAXNUMGEO ! CAN BE FURTHER IMPROVED
536 ALLOCATE (KNOTLOCPC(SKNOTLOCPC) ,STAT=stat)
537 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='knotlocpc
')
540 SKNOTLOCEL = 2*3*(NUMELIG3D0+ADDELIG3D)
541 ALLOCATE (KNOTLOCEL(SKNOTLOCEL) ,STAT=stat)
542 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO, MSGTYPE=MSGERROR,C1='knotlocel
')
548 CALL PRERAFIG3D(KNOT,KNOTLOCPC,KNOTLOCEL,
549 . KXIG3D,IXIG3D,IGEO,
551 . RBID,RBID,RBID,RBID,RBID,TABCONPATCH,0)
554 NUMNOD=NUMNOD + NBNEWX_FINAL
555 print*,'nbnewx_final
',NBNEWX_FINAL
556 print*,'addelig3d
',ADDELIG3D
557 NUMELIG3D = NUMELIG3D + ADDELIG3D
558 IF(NBNEWX_FINAL/=0) THEN
561 FIRSTNOD_ISOGEO=NUMNOD+1
565 IF(TABCONPATCH(I)%L_TAB_IG3D/=0) DEALLOCATE(TABCONPATCH(I)%TAB_IG3D,TABCONPATCH(I)%INITIAL_CUT)
568 DEALLOCATE(ITAB,ITABM1,IGEO,KXIG3D,IXIG3D,IPARTIG3D,KNOT,KNOTLOCPC,KNOTLOCEL,KNOD2ELIG3D,NOD2ELIG3D,TABCONPATCH)
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)