37 1 IXC ,PM ,GEO ,INUM ,ISEL ,
38 2 ITR1 ,EADD ,INDEX ,ITRI ,XNUM ,
39 3 IPARTC ,ND ,THK ,IGRSURF,IGRSH4N,
40 4 CEP ,XEP ,IGEO ,IPM ,
41 5 IPART ,SH4TREE ,NOD2ELC ,ISHEOFF,SH4TRIM,
42 6 TAGPRT_SMS, LGAUGE,IWORKSH ,MAT_PARAM,
43 7 STACK ,DRAPE ,RNOISE ,SH4ANG,DRAPEG, PTSHEL,
75 use element_mod ,
only : nixc
79#include "implicit_f.inc"
83#include "vect01_c.inc"
85#include "com_xfem1.inc"
87#include "remesh_c.inc"
96 INTEGER IXC(NIXC,*),ISEL(*),INUM(9,*),IPARTC(*), ISHEOFF(*),
97 . (*),ITR1(*),INDEX(*),ITRI(8,*),
99 . IGEO(NPROPGI,*),IPM(NPROPMI,*),IPART(LIPART1,*),
100 . SH4TREE(KSH4TREE,*), NOD2ELC(*), SH4TRIM(*),
101 . TAGPRT_SMS(*) ,LGAUGE(3,*),
103 INTEGER ,
DIMENSION(NUMELC) ,
INTENT(INOUT):: PTSHEL
104 INTEGER ,
INTENT(IN) :: DAMP_RANGE_PART(NPART)
107 . PM(NPROPM,*), GEO(NPROPG,*),XNUM(*),THK(*), RNOISE(NPERTURB,*),
110 TYPE (STACK_PLY) :: STACK
111 TYPE (DRAPE_) ,
TARGET :: DRAPE (NUMELC_DRAPE + NUMELTG_DRAPE)
112 TYPE (DRAPEG_) :: DRAPEG
113 TYPE (DRAPE_) ,
DIMENSION(:),
ALLOCATABLE :: XNUM_DRAPE
114 TYPE (DRAPEG_) :: XNUM_DRAPEG
115 TYPE (MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
117 TYPE (GROUP_) ,
DIMENSION(NGRSHEL) :: IGRSH4N
118 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
122 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ISTOR
124 INTEGER I, K, MLN, ISSN, NPN, NN,IGTYP,
127 . ithk, ipla,ii1,jj1,ii2,jj2,jj,ii3,jj3,
128 . mskmln,msknpn,mskihb,mskisn,mskirb,mode,icsen,irb,
129 . mskist,mskipl,mskith,mskmid,mskpid,mskirp,msktyp,irep,
130 . ipt,imatly,ii0,jj0,ilev,prt,iadm,ii4,jj4,n1,
131 . nfail,ifail,ixfem,inum_r2r(1+r2r_siu*numelc),
133 . isubstack ,ippid,nb_law58,ipmat,
134 . ipert,stat,nslice,kk,npt_drp,ie,ie0
135 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: INUM_WORKC
136 my_real,
DIMENSION(:),
ALLOCATABLE :: ANGLE
137 EXTERNAL ,MY_SHIFTR,MY_AND
138 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND,IPIDL
139 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX2, INUM_PTSHEL
141 my_real,
DIMENSION(:,:),
ALLOCATABLE :: XNUM_RNOISE
143 TYPE (DRAPE_PLY_) ,
POINTER :: DRAPE_PLY
146 DATA mskmln /o
'07770000000'/
147 DATA msktyp /o
'00007770000'/
148 DATA mskihb /o
'00000007000'/
149 DATA mskisn /o
'00000000700'/
150 DATA mskist /o
'00000000070'/
151 DATA mskipl /o
'00000000007'/
153 DATA mskith /o
'10000000000'/
154 DATA mskirp /o
'07000000000'/
155 DATA msknpn /o
'00777000000'/
156 DATA mskirb /o
'00000000007'/
158 DATA mskmid /o
'07777777777'/
160 DATA mskpid /o
'07777777777'/
164 ALLOCATE(angle(numelc))
165 ALLOCATE(inum_workc(3,numelc))
167 ALLOCATE( istor(ksh4tree+1,numelc) )
169 ALLOCATE( istor(0,0) )
171 IF (ndrape > 0 .AND. numelc_drape > 0)
THEN
172 ALLOCATE(xnum_drape(numelc))
173 ALLOCATE(xnum_drapeg%INDX(numelc))
178 npt_drp = drape(ie)%NPLY_DRAPE
180 ALLOCATE(xnum_drape(i)%INDX_PLY(npt))
181 ALLOCATE(xnum_drape(i)%DRAPE_PLY(npt_drp))
182 xnum_drape(i)%INDX_PLY = 0
183 xnum_drape(i)%INDX_PLY = 0
185 nslice = drape(ie)%DRAPE_PLY(j)%NSLICE
186 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE(nslice,2))
187 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE(nslice,2))
188 xnum_drape(i)%DRAPE_PLY(j)%RDRAPE = 0
189 xnum_drape(i)%DRAPE_PLY(j)%IDRAPE = 0
193 ALLOCATE( xnum_drape(0) )
195 IF(abs(isigi) == 3 .OR. abs(isigi) == 4 .OR. abs(isigi) == 5)
THEN
196 ALLOCATE(inum_ptshel(numelc))
199 ALLOCATE(inum_ptshel(0))
202 IF (nperturb > 0)
THEN
203 ALLOCATE(xnum_rnoise(nperturb,numelc),stat=stat)
204 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
209 CALL my_alloc(index2,numelc)
211 IF(ndrape > 0 .AND. numelc_drape > 0)
THEN
227 IF (nsubdom>0) inum_r2r(i) =
tag_elcf(i)
228 inum_workc(1,i) = iworksh(1,i)
229 inum_workc(2,i) = iworksh(2,i)
230 inum_workc(3,i) = iworksh(3,i)
231 IF (nperturb > 0)
THEN
232 DO ipert = 1, nperturb
233 xnum_rnoise(ipert,i) = rnoise(ipert,i)
239 xnum_drapeg%INDX(i) = drapeg%INDX(i)
242 xnum_drape(i)% NPLY = npt
243 xnum_drape(i)%INDX_PLY(1:npt) = drape(ie)%INDX_PLY(1:npt)
244 npt = drape(ie)%NPLY_DRAPE
245 xnum_drape(i)%NPLY_DRAPE = npt
246 xnum_drape(i)%THICK = drape(ie)%THICK
248 drape_ply => drape(ie)%DRAPE_PLY(jj)
249 nslice = drape_ply%NSLICE
253 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,1)=drape_ply%IDRAPE(kk,1)
254 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,2)=drape_ply%IDRAPE(kk,2)
255 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,1)=drape_ply%RDRAPE(kk,1)
256 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,2)=drape_ply%RDRAPE(kk,2)
258 DEALLOCATE(drape_ply%IDRAPE, drape_ply%RDRAPE)
260 DEALLOCATE(drape(ie)%DRAPE_PLY)
261 DEALLOCATE(drape(ie)%INDX_PLY)
279 IF (nsubdom>0) inum_r2r(i) =
tag_elcf(i)
280 inum_workc(1,i) = iworksh(1,i)
281 inum_workc(2,i) = iworksh(2,i)
282 inum_workc(3,i) = iworksh(3,i)
283 IF (nperturb > 0)
THEN
284 DO ipert = 1, nperturb
285 xnum_rnoise(ipert,i) = rnoise(ipert,i)
291 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
292 inum_ptshel(1:numelc) = ptshel(1:numelc)
298 istor(k,i)=sh4tree(k,i)
303 istor(ksh4tree+1,i)=sh4trim(i)
327 IF(ilev<0)ilev=-ilev-1
334 mln = nint(pm(19,mid))
336 jthe = nint(pm(71,mid))
338 ihbe = nint(geo(171,pid))
339 ithk = nint(geo(35,pid))
340 ipla = nint(geo(39,pid))
342 ishxfem_ply = igeo(19,pid)
346 IF (igtyp == 11)
THEN
348 imatly = igeo(100+ipt,pid)
349 nfail =
max(nfail,mat_param(imatly)%NFAIL)
353 ixfem = mat_param(mid)%IXFEM
355 ELSEIF(igtyp == 17)
THEN
357 isubstack =iworksh(3, ii)
364 ipidl = stack%IGEO(ippid + ipt ,isubstack)
365 imatly = igeo(101,ipidl)
366 nfail =
max(nfail,mat_param(imatly)%NFAIL)
368 ELSEIF(igtyp == 51 )
THEN
374 isubstack = iworksh(3, ii)
377 ipidl = stack%IGEO(ippid + ipt,isubstack)
378 imatly = igeo(101,ipidl)
379 nfail =
max(nfail,mat_param(imatly)%NFAIL)
381 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
384 IF (nb_law58 == npn)
THEN
386 ELSEIF (nb_law58 > 0)
THEN
389 ELSEIF(igtyp == 52)
THEN
395 isubstack = iworksh(3, ii)
399 ipidl = stack%IGEO(ippid + ipt,isubstack)
400 imatly = stack%IGEO(ipmat + ipt,isubstack)
401 nfail =
max(nfail,mat_param(imatly)%NFAIL)
403 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
406 IF (nb_law58 == npn)
THEN
408 ELSEIF (nb_law58 > 0)
THEN
413 nfail = mat_param(mid)%NFAIL
416 ixfem = mat_param(mid)%IXFEM
423 IF (nfail > 0) ifail = 1
426 iexpan = ipm(218, mid)
428 IF (icsen > 0) icsen=1
429 IF(npn == 0.AND.(mln == 36.OR.mln == 86))
THEN
433 ELSEIF(npn == 0.AND.mln == 2)
THEN
441 ELSEIF(mln == 32)
THEN
446 istrain = nint(geo(11,pid))
447 IF(mln == 19.OR.mln>=25.OR.mln == 15)istrain = 1
448 issn = iabs(nint(geo(3,pid)))
459 IF(tagprt_sms(ipartc(ii))/=0)jsms=1
470 istrain= my_shiftl(istrain,3)
471 issn = my_shiftl(issn,6)
472 ihbe = my_shiftl(ihbe,9)
473 igtyp = my_shiftl(igtyp,12)
474 mln = my_shiftl(mln,21)
475 itri(3,i)=ipla+istrain+issn+ihbe+igtyp+mln
481 ishxfem_ply = my_shiftl(ishxfem_ply,10)
482 ifail = my_shiftl(ifail,11)
483 iexpan = my_shiftl(iexpan,14)
484 jthe = my_shiftl(jthe,15)
485 icsen= my_shiftl(icsen,16)
486 npn = my_shiftl(npn,17)
487 irep = my_shiftl(irep,26)
488 ithk = my_shiftl(ithk,30)
489 IF(ixfem > 0) ixfem = my_shiftl(ixfem,9)
491 itri(4,i)=ithk+irep+npn+icsen+jthe+iexpan+irb+ifail+ishxfem_ply
501 itri(7,i) = iworksh(2,i)
503 itri(8,i )= damp_range_part(ipartc(ii))
507 CALL my_orders( mode, work, itri, index, numelc , 8)
510 ipartc(i) =inum(1,index(i))
511 isheoff(i)=inum(2,index(i))
512 IF (nsubdom>0)
tag_elcf(i)=inum_r2r(index(i))
513 thk(i) =xnum(index(i))
523 ixc(k,i)=inum(k+2,index(i))
526 IF(ndrape > 0 .AND. numelc_drape > 0 )
THEN
529 iworksh(1,i)= inum_workc(1,index(i))
530 iworksh(2,i)= inum_workc(2,index(i))
531 iworksh(3,i)= inum_workc(3,index(i))
532 IF (nperturb > 0)
THEN
533 DO ipert = 1, nperturb
534 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
537 sh4ang(i)=angle(index(i))
539 ie0 = xnum_drapeg%INDX(index(i))
543 npt = xnum_drape(index(i))% NPLY
546 ALLOCATE(drape(ie)%INDX_PLY(npt))
547 drape(ie)%INDX_PLY(1:npt) = xnum_drape(index(i))%INDX_PLY(1:npt)
548 npt = xnum_drape(index(i))%NPLY_DRAPE
549 ALLOCATE(drape(ie)%DRAPE_PLY(npt))
550 drape(ie)%NPLY_DRAPE= npt
551 drape(ie)%THICK = xnum_drape(index(i))%THICK
553 drape_ply => drape(ie)%DRAPE_PLY(jj)
554 nslice = xnum_drape(index(i))%DRAPE_PLY(jj)%NSLICE
555 drape_ply%NSLICE = nslice
556 drape_ply%IPID = xnum_drape(index(i))%DRAPE_PLY(jj)%IPID
557 ALLOCATE(drape_ply%IDRAPE(nslice,2), drape_ply%RDRAPE(nslice,2))
559 drape_ply%IDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,1)
560 drape_ply%IDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,2)
561 drape_ply%RDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,1)
562 drape_ply%RDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,2)
568 iworksh(1,i)= inum_workc(1,index(i))
569 iworksh(2,i)= inum_workc(2,index(i))
570 iworksh(3,i)= inum_workc(3,index(i))
571 IF (nperturb > 0)
THEN
572 DO ipert = 1, nperturb
573 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
576 sh4ang(i)=angle(index(i))
579 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
581 ptshel(i) = inum_ptshel(index(i))
588 sh4tree(k,i)=istor(k,index(i))
593 sh4trim(i)=istor(ksh4tree+1,index(i))
607 IF(sh4tree(1,i) /= 0)
608 . sh4tree(1,i)=itr1(sh4tree(1,i))
609 IF(sh4tree(2,i) /= 0)
610 . sh4tree(2,i)=itr1(sh4tree(2,i))
619 IF(igrsurf(i)%ELTYP(j) == 3)
620 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
629 IF(n1 > 0) lgauge(3,i)=-itr1(n1)
636 nn=igrsh4n(i)%NENTITY
638 igrsh4n(i)%ENTITY(j) = itr1(igrsh4n(i)%ENTITY(j))
645 IF (nod2elc(i) /= 0) nod2elc(i)=itr1(nod2elc(i))
654 jj0=itri(1,index(i-1))
656 jj =itri(2,index(i-1))
658 jj1=itri(3,index(i-1))
660 jj2=itri(4,index(i-1))
662 jj3=itri(5,index(i-1))
664 jj4=itri(6,index(i-1))
667 jj5=itri(7,index(i-1))
670 jj6=itri(8,index(i-1))
674 * ii2/=jj2.OR.ii3 /= jj3.OR.ii4 /= jj4.OR.ii5 /= jj5 .or.
680 eadd(nd+1) = numelc+1
683 IF (nperturb > 0)
THEN
684 IF (
ALLOCATED(xnum_rnoise))
DEALLOCATE(xnum_rnoise)
689 IF(ndrape > 0 .AND. numelc_drape > 0)
THEN
691 ie = xnum_drapeg%INDX(i)
693 npt_drp = xnum_drape(i)%NPLY_DRAPE
695 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE)
696 DEALLOCATE(xnum_drape(i)%DRAPE_PLY
698 DEALLOCATE(xnum_drape(i)%DRAPE_PLY,xnum_drape(i)%INDX_PLY)
700 DEALLOCATE( xnum_drape ,xnum_drapeg%INDX)
702 DEALLOCATE( xnum_drape )
704 IF(
ALLOCATED(inum_ptshel))
DEALLOCATE(inum_ptshel)
706 DEALLOCATE(angle,inum_workc)