51 USE reader_old_mod ,
ONLY : line, irec
52 USE user_id_mod ,
ONLY : id_limit
53 use element_mod ,
only : nixc,nixtg
57#include "implicit_f.inc"
62#include "remesh_c.inc"
69 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
73 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAB,ITABM1,KNOD2SH,NOD2SH
74 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IXC,IXTG,TAG
75 INTEGER IPART(4,NPART),
76 . N,IP,ID,I,J,NLEV,STAT,INDEX_PART,NPART_ADM
77 INTEGER USR2SYS,NUMNUSR1,NI,NJ,NK,NL,K,L,P,Q,QQ,
80 CHARACTER(LEN=NCHARTITLE) :: TITR
81 CHARACTER(LEN=NCHARKEY) :: KEY
82 INTEGER ,
DIMENSION(:),
ALLOCATABLE :: IPARTC
83 INTEGER ,
DIMENSION(:),
ALLOCATABLE :: IPARTTG
84 real*8 ,
DIMENSION(:),
ALLOCATABLE :: sh_angle, sh_thk
85 real*8 ,
DIMENSION(:),
ALLOCATABLE :: sh3_angle, sh3_thk
86 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SUBID_SHELL,UID_SHELL
87 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SUBID_SH3N,UID_SH3N
88 INTEGER,
DIMENSION(:),
ALLOCATABLE :: SUBID_NODES
92 DATA mess /
'OPTIONS FOR ADAPTIVE MESHING DEFINITION '/
96 ALLOCATE(itab(numnusr),itabm1(2*numnusr),
97 . ixc(nixc,numelc0),ixtg(nixtg,numeltg0),
98 . knod2sh(0:numnusr),nod2sh(4*numelc0+3*numeltg0),
99 . tag(4,numelc0+numeltg0))
117 . option_titr = titr)
132 . option_titr = titr,
136 is_available = .false.
140 CALL hm_get_intv(
'LEVEL',levelmax,is_available,lsubmodel)
141 CALL hm_get_intv(
'Iadmrule',iadmrule,is_available,lsubmodel)
142 CALL hm_get_intv(
'Istatcnd',istatcnd,is_available,lsubmodel)
146 CALL hm_get_floatv(
'Tdelay',dtadmesh,is_available,lsubmodel,unitab)
151 IF(nadmeshstat > 0) iadmstat = 1
153 IF(iadmstat /= 0) id_limit%ADMESH=id_limit%GLOBAL
167 . option_titr = titr,
170 is_available = .false.
174 CALL hm_get_intv(
'NIP',npart_adm,is_available,lsubmodel)
183 IF(ipart(1,j)==id_ip)
THEN
207 ALLOCATE (ipartc(numelc))
208 ALLOCATE (sh_angle(numelc))
209 ALLOCATE (sh_thk(numelc))
213 ALLOCATE (subid_shell(numelc),stat=stat)
214 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
217 ALLOCATE (uid_shell(numelc),stat=stat)
218 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
221 subid_shell(1:numelc) = 0
222 uid_shell(1:numelc) = 0
228 CALL cpp_shell_read(ixc,nixc,ipartc,sh_angle,sh_thk,subid_shell,uid_shell)
238 IF( ipartc(i) /= ip0)
THEN
240 IF(ipartc(i) == ipart(1,j))
THEN
254 ipart(2,ip)=ipart(2,ip)+1
258 IF(
ALLOCATED(subid_shell))
DEALLOCATE(subid_shell)
259 IF(
ALLOCATED(uid_shell))
DEALLOCATE(uid_shell)
261 ALLOCATE (iparttg(numeltg))
262 ALLOCATE (sh3_angle(numeltg))
263 ALLOCATE (sh3_thk(numeltg))
267 ALLOCATE (subid_sh3n(numeltg),stat=stat)
268 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
271 ALLOCATE (uid_sh3n(numeltg),stat=stat)
272 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
275 subid_sh3n(1:numeltg) = 0
276 uid_sh3n(1:numeltg) = 0
282 CALL cpp_sh3n_read(ixtg,nixtg,iparttg,sh3_angle,sh3_thk,subid_sh3n,uid_sh3n)
292 IF( iparttg(i) /= ip0)
THEN
294 IF(iparttg(i) == ipart(1,j))
THEN
307 ipart(3,ip)=ipart(3,ip)+1
311 IF(
ALLOCATED(subid_sh3n))
DEALLOCATE(subid_sh3n)
312 IF(
ALLOCATED(uid_sh3n))
DEALLOCATE(uid_sh3n)
316 IF(iadmstat /= 0)
RETURN
320 ALLOCATE (subid_nodes(numnusr),stat=stat)
321 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
324 subid_nodes(1:numnusr) = 0
328 CALL cpp_node_count(numnusr1)
329 CALL cpp_node_id_read(itab,subid_nodes)
334 IF (itab(i) > id_limit%ADMESH
335 . .AND. (itab(i) < id_limit%ADMESH_FT_NODE_AUTO .OR. itab(i) >= id_limit%ADMESH_LT_NODE_AUTO))
THEN
336 CALL ancmsg(msgid=1069,anmode=aninfo,msgtype=msgerror,i1=itab(i),c1=line,c2=
'/NODE')
339 IF(
ALLOCATED(subid_nodes))
DEALLOCATE(subid_nodes)
344 CALL constit(itab,itabm1,numnusr)
349 IF (ixc(nixc,i)>id_limit%ADMESH)
THEN
350 CALL ancmsg(msgid=1069,anmode=aninfo,msgtype=msgerror,
351 . i1=ixc(nixc,i),c1=line,c2=
'/SHELL')
354 ixc(j,i)=usr2sys(ixc(j,i),itabm1,mess,id)
357 IF(
ALLOCATED(ipartc))
DEALLOCATE(ipartc)
358 IF(
ALLOCATED(sh_angle))
DEALLOCATE(sh_angle)
359 IF(
ALLOCATED(sh_thk))
DEALLOCATE (sh_thk)
362 IF (ixtg(nixtg,i)>id_limit%ADMESH)
THEN
363 CALL ancmsg(msgid=1069,anmode=aninfo,msgtype=msgerror,
364 . i1=ixtg(nixtg,i),c1=line,c2=
'/SH3N')
367 ixtg(j,i)=usr2sys(ixtg(j,i),itabm1,mess,id)
370 IF(
ALLOCATED(iparttg))
DEALLOCATE(iparttg)
371 IF(
ALLOCATED(sh3_angle))
DEALLOCATE (sh3_angle)
372 IF(
ALLOCATED(sh3_thk))
DEALLOCATE (sh3_thk)
380 knod2sh(ni)=knod2sh(ni)+1
387 knod2sh(ni)=knod2sh(ni)+1
398 knod2sh(ni)=knod2sh(ni)+1
399 nod2sh(knod2sh(ni))=n
406 knod2sh(ni)=knod2sh(ni)+1
407 nod2sh(knod2sh(ni))=numelc0+n
412 knod2sh(n)=knod2sh(n-1)
423 numnod=numnod+(2**nlev-1)*(2**nlev-1)
425 IF(tag(i,n)<nlev)
THEN
426 numnod=numnod+(2**nlev-1)-(2**(tag(i,n))-1)
431 DO k=knod2sh(ni-1)+1,knod2sh(ni)
434 DO l=knod2sh(nj-1)+1,knod2sh(nj)
441 IF((nk==ni.AND.nl==nj).OR.
442 . (nl==ni.AND.nk==nj))
THEN
450 nl=ixtg(mod(j,3)+2,qq)
451 IF((nk==ni.AND.nl==nj).OR.
452 . (nl==ni.AND.nk==nj))
THEN
464 numelc =numelc +(4**(nlev+1)-1)/3
473 numnod =numnod+(2**(nlev-1)+1)*(2**nlev+1)-3*(2**nlev)
476 numnod=numnod+(2**nlev-1)-(2**(tag(i,n+numelc0))-1)
477 tag(i,n+numelc0)=nlev
480 nj=ixtg(mod(i,3)+2,n)
481 DO k=knod2sh(ni-1)+1,knod2sh(ni)
484 DO l=knod2sh(nj-1)+1,knod2sh(nj)
491 IF((nk==ni.AND.nl==nj).OR.
492 . (nl==ni.AND.nk==nj))
THEN
500 nl=ixtg(mod(j,3)+2,qq)
501 IF((nk==ni.AND.nl==nj).OR.
502 . (nl==ni.AND.nk==nj))
THEN
514 numeltg =numeltg +(4**(nlev+1)-1)/3
517 DEALLOCATE(itab,itabm1,ixc,ixtg,knod2sh,nod2sh,tag)
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)