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
90 INTEGER IPART(4,NPART),TABIDS(NUMELIG3D0),
91 . N,ID,I,J,NLEV,NMUL,J10(10),STAT,NCTRLMAX
92 INTEGER USR2SYS,NUMNUSR1,IDS,NI,NJ,NK,NL,K,L,P,Q,QQ,
93 . NN,IAD,IDX1,IDY1,IDZ1,NCTRL,BID,NUM,
94 . NRAFX,NRAFY,NRAFZ,NBLINE,D1,D2,D3,N1,N2,N3
95 INTEGER ,IG,UID,SUB_ID,,RAFRULE,
96 . ,NKNOT2,NKNOT3,ITGEO,PX,PY,PZ,PID,IPID,MAXNUMGEO,
97 . NBRAFX,NBRAFY,NBRAFZ,NBIG3D_PATCH
98 INTEGER OFF_NOD(NSUBMOD), OFF_DEF(NSUBMOD)
100 CHARACTER(LEN=nchartitle) :: TITR,IDTITL
101 CHARACTER(LEN=ncharkey) :: KEY
108 DATA mess /
'OPTIONS FOR ISOGEOMETRIC MESH DEFINITION'/
118 ALLOCATE(itab(numnusr),itabm1(2*numnusr),stat=stat)
119 IF(stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'ITAB')
120 ALLOCATE (subid_nodes(numnusr),stat=stat)
121 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'SUBID_NODES')
122 subid_nodes(1:numnusr) = 0
127 ALLOCATE (igeo(npropgi,numgeo),stat=stat)
128 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'IGEO')
136 DO WHILE(kline(1:1)/=
'/')
138 READ(iin,rec=irec,err=999,fmt=
'(A)')line
142 IF(key(1:6)==
'TYPE47'.OR. key(1:5)==
'IGE3D')
THEN
145 READ(iin,rec=irec,err=999,fmt=
'(A)')line
147 READ(line,err=999,fmt=fmt_2i) intrule,rafrule
149 READ(iin,rec=irec,err=999,fmt=
'(A)')line
151 READ(line,err=999,fmt=fmt_6i)
153 igeo(40,itgeo) = iad_knot
154 igeo(41,itgeo) = d1+1
155 igeo(42,itgeo) = d2+1
156 igeo(43,itgeo) = d3+1
160 deg_max=
max(deg_max,d1+2,d2+2,d3+2)
162 READ(iin,rec=irec,err=999,fmt=
'(A)')line
164 DO WHILE(kline(1:1)/=
'/')
167 READ(iin,rec=irec,err=999,fmt=
'(A)')line
173 ALLOCATE(knot(sknot),stat=stat)
174 IF(stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'KNOT')
183 READ(iin,rec=irec,err=999,fmt=
'(A)')kline
186 READ(iin,rec=irec,err=999,fmt=
'(A)')line
187 READ(line,err=999,fmt=fmt_i)pid
188 ipid = nintri(pid,igeo,npropgi,numgeo,1)
197 IF(iadmstat /= 0) id_limit%admesh=id_limit%global
207 DO WHILE(kline(1:1)/=
'/')
213 IF(key(1:6)==
'TYPE47'.OR. key(1:5)==
'IGE3D')
THEN
215 READ(iin,rec=irec,err=999,fmt=
'(A)')line
217 READ(line,err=999,fmt=fmt_2i) intrule,rafrule
219 READ(iin,rec=irec,err=999,fmt=
'(A)')line
221 READ(line,err=999,fmt=fmt_6i)d1,d2,d3,n1,n2,n3
222 igeo(40,itgeo) = iad_knot
223 igeo(41,itgeo) = d1+1
224 igeo(42,itgeo) = d2+1
225 igeo(43,itgeo) = d3+1
234 READ(iin,rec=irec,err=999,fmt=
'(A)')line
236 READ(line,err=999,fmt=fmt_5f) r5
238 IF(iad_knot < nknot1+igeo(40,itgeo))
THEN
239 iad_knot = iad_knot + 1
240 knot(iad_knot) = r5(j)
247 READ(iin,rec=irec,err=999,fmt=
'(A)')line
251 IF(iad_knot < nknot1+nknot2+igeo(40,itgeo
THEN
252 iad_knot = iad_knot + 1
253 knot(iad_knot) = r5(j)
260 READ(iin,rec=irec,err=999,fmt='(a)
')LINE
262 READ(LINE,ERR=999,FMT=FMT_5F) R5
264 IF(IAD_KNOT < NKNOT1+NKNOT2+NKNOT3+IGEO(40,ITGEO))THEN
265 IAD_KNOT = IAD_KNOT + 1
266 KNOT(IAD_KNOT) = R5(J)
284 NBPART_IG3D = NBPART_IG3D+1
287 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
291 DO WHILE( LINE(1:1) /= '/.OR.
' LINE(1:6) == '/ige3d
')
293 IF (LINE(1:1) == '/
')THEN ! ON A ONE CHANGEMENT DE PART
295 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
298 READ(LINE,ERR=999,FMT=FMT_8I)ID,IDX1,IDY1,IDZ1,NCTRL,NBRAFX,NBRAFY,NBRAFZ
299 NBIG3D_PATCH=NBIG3D_PATCH+1
300 NCTRLMAX = MAX(NCTRLMAX,NCTRL)
302 NBFILSMAX = MAX(NBFILSMAX,NBRAFX*NBRAFY*NBRAFZ + 1)
303 NBMESHSURF = NBMESHSURF + MAX(NBRAFX-1,0) + MAX(NBRAFY-1,0) + MAX(NBRAFZ-1,0)
304 ADDELIG3D = ADDELIG3D + NBRAFX*NBRAFY*NBRAFZ
305 IREC = IREC + ((NCTRL-1)/10)+2
306 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
308 IF (LINE(1:6) == '/ige3d
')THEN ! ON A ONE CHANGEMENT DE PART
309 NBPART_IG3D = NBPART_IG3D+1
312 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
317 ALLOCATE(IXIG3D(NUM+ADDELIG3D*NCTRLMAX),STAT=stat)
318 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='ixig3d
')
321 ALLOCATE(TABCONPATCH(NBPART_IG3D),STAT=stat)
322 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
330 NBPART_IG3D = NBPART_IG3D+1
331 PTABCONPATCH => TABCONPATCH(NBPART_IG3D)
332 PTABCONPATCH%ID_TABCON=NBPART_IG3D
335 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
336 DO WHILE( LINE(1:1) /= '/.OR.
' LINE(1:6) == '/ige3d
')
338 IF (LINE(1:1) == '/
')THEN
340 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
343 READ(LINE,ERR=999,FMT=FMT_8I)ID,IDX1,IDY1,IDZ1,NCTRL,NBRAFX,NBRAFY,NBRAFZ
344 NBIG3D_PATCH=NBIG3D_PATCH+1
345 IREC = IREC + ((NCTRL-1)/10)+2
346 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
348 IF (LINE(1:6) == '/ige3d
')THEN ! ON A ONE CHANGEMENT DE PART
349 PTABCONPATCH%L_TAB_IG3D=NBIG3D_PATCH
350 ALLOCATE(PTABCONPATCH%TAB_IG3D(NBIG3D_PATCH),STAT=stat)
351 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
352 ALLOCATE(PTABCONPATCH%INITIAL_CUT(3,NBIG3D_PATCH),STAT=stat)
353 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
354 NBPART_IG3D = NBPART_IG3D+1
355 PTABCONPATCH => TABCONPATCH(NBPART_IG3D)
358 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
363 PTABCONPATCH%L_TAB_IG3D=NBIG3D_PATCH
364 ALLOCATE(PTABCONPATCH%TAB_IG3D(NBIG3D_PATCH),STAT=stat)
365 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
366 ALLOCATE(PTABCONPATCH%INITIAL_CUT(3,NBIG3D_PATCH),STAT=stat)
367 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='tabcon_patch
')
373 OFF_NOD(I) = LSUBMODEL(I)%OFF_NOD
374 OFF_DEF(I) = LSUBMODEL(I)%OFF_DEF
379 CALL CPP_NODE_COUNT(NUMNUSR1)
380 CALL CPP_NODE_ID_READ(ITAB,SUBID_NODES)
388 IF(SUBID_NODES(I) /= 0)THEN
389 IF(ITAB(I) /= 0) ITAB(I) = ITAB(I) + OFF_NOD(SUBID_NODES(I))
391 IF (ITAB(I) > id_limit%admesh
392.AND..OR.
. (ITAB(I) < id_limit%admesh_ft_node_auto ITAB(I) >= id_limit%admesh_lt_node_auto))THEN
393 CALL ANCMSG(MSGID=1069,ANMODE=ANINFO,MSGTYPE=MSGERROR,I1=ITAB(I),C1=LINE,C2='/node
')
396 IF(ALLOCATED(SUBID_NODES)) DEALLOCATE(SUBID_NODES)
402 IREC = KOPTAD(KCUR)-1
403 DO I=1,NLINE(KCUR)+NSLASH(KCUR)
405 READ(IIN,REC=IREC,ERR=999,FMT='(a)
')LINE
406 IF(LINE(1:1)=='/
')THEN
410 READ(LINE,ERR=999,FMT=FMT_I) ITAB(N)
411 IF (ITAB(N)>id_limit%admesh
412.AND..OR.
. (ITAB(N) < id_limit%admesh_ft_node_auto ITAB(N) >= id_limit%admesh_lt_node_auto))THEN
413 CALL ANCMSG(MSGID=1069,ANMODE=ANINFO,MSGTYPE=MSGERROR,I1=ITAB(N),C1=LINE,C2='/cnode
')
421 CALL CONSTIT(ITAB,ITABM1,NUMNUSR)
426 ALLOCATE(KXIG3D(NIXIG3D,NUMELIG3D0+ADDELIG3D),STAT=stat)
427 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='kxig3d
')
430 ALLOCATE(IPARTIG3D(NUMELIG3D0+ADDELIG3D),STAT=stat)
431 IF(STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='ipartig3d')
441 inod_ige = firstnod_isogeo
443 DO WHILE( i < numelig3d0 )
445 READ(iin,rec=irec,err=999,fmt=
'(A)')line
446 IF (line(1:1) ==
'/')
THEN
447 nbpart_ig3d = nbpart_ig3d+1
449 ptabconpatch => tabconpatch(nbpart_ig3d)
454 IF(ipart(4,j) == id)ids=j
461 kxig3d(1,i) =ipart(1,ids)
462 kxig3d(2,i) =ipart(2,ids)
463 maxnumgeo=
max(maxnumgeo,ipart(2,ids))
467 READ(iin,rec=irec,err=999,fmt=
'(A)')line
468 READ(line,err=999,fmt=fmt_8i) id,idx1,idy1,idz1,nctrl,nrafx,nrafy,nrafz
469 nbig3d_patch = nbig3d_patch + 1
470 ptabconpatch%TAB_IG3D(nbig3d_patch)=i
471 ptabconpatch%INITIAL_CUT(1,nbig3d_patch)=nrafx
472 ptabconpatch%INITIAL_CUT(2,nbig3d_patch)=nrafy
473 ptabconpatch%INITIAL_CUT(3,nbig3d_patch)=nrafz
474 nctrlmax =
max(nctrlmax,nctrl)
480 kxig3d(12,i)=
max(nrafx,1)
481 kxig3d(13,i)=
max(nrafy,1)
482 kxig3d(14,i)=
max(nrafz,1)
483 kxig3d(15,i)=inod_ige
484 inod_ige = inod_ige + 64
486 nbline= ((nctrl-1)/10)+1
490 READ(iin,rec=irec,err=999,fmt=
'(A)')line
491 READ(line,err=999,fmt=fmt_10i) j10
494 ixig3d(iad)=usr2sys(j10(j),itabm1,mess,id)
505 ALLOCATE(knod2elig3d(numnod+1),stat=stat)
506 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'KNOD2ELIG3D')
508 ALLOCATE(nod2elig3d(nctrlmax*numelig3d),
510 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'NOD2ELIG3D')
514 px = igeo(41,kxig3d(2,i))
515 py = igeo(42,kxig3d(2,i))
516 pz = igeo(43,kxig3d(2,i))
518 n = ixig3d(kxig3d(4,i)+k-1)
519 knod2elig3d(n) = knod2elig3d(n) + 1
524 knod2elig3d(i+1) = knod2elig3d(i+1) + knod2elig3d(i)
528 knod2elig3d(n+1)=knod2elig3d(n)
539 sknotlocpc = deg_max*3*(numnodige0+2*addelig3d*nctrlmax)*maxnumgeo
540 ALLOCATE (knotlocpc(sknotlocpc) ,stat=stat)
541 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'KNOTLOCPC')
544 sknotlocel = 2*3*(numelig3d0+addelig3d)
545 ALLOCATE (knotlocel(sknotlocel) ,stat=stat)
546 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo, msgtype=msgerror,c1=
'KNOTLOCEL')
553 . kxig3d,ixig3d,igeo,
555 . rbid,rbid,rbid,rbid,rbid,tabconpatch,0)
558 numnod=numnod + nbnewx_final
559 print*,
'NBNEWX_FINAL',nbnewx_final
560 print*,
'ADDELIG3D',addelig3d
561 numelig3d = numelig3d + addelig3d
562 IF(nbnewx_final/=0)
THEN
565 firstnod_isogeo=numnod+1
569 IF(tabconpatch(i)%L_TAB_IG3D/=0)
DEALLOCATE(tabconpatch(i)%TAB_IG3D,tabconpatch(i)%INITIAL_CUT)
572 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)