37 1 IXTG ,PM ,GEO ,INUM ,ISEL ,
38 2 ITR1 ,EADD ,INDEX ,ITRI ,XNUM ,
39 3 IPARTTG ,ND ,THK ,IGRSURF ,IGRSH3N ,
40 4 CEP ,XEP ,IXTG1 ,ICNOD ,
41 5 IGEO ,IPM ,IPART ,SH3TREE ,NOD2ELTG,
42 6 ITRIOFF ,SH3TRIM ,TAGPRT_SMS,MAT_PARAM,
43 7 IWORKSH , STACK ,DRAPE ,RNOISE,
44 8 MULTI_FVM ,SH3ANG,DRAPEG , PTSH3N )
76#include "implicit_f.inc"
82#include "com_xfem1.inc"
84#include "vect01_c.inc"
85#include "remesh_c.inc"
93 . ixtg(nixtg,*),isel(*),inum(10,*),nd,icnod(*),ixtg1(4,*),
94 . eadd(*), itr1(*), index(*), itri(7,*),iparttg(*),
97 . igeo(npropgi,*),ipm(npropmi,*), ipart(lipart1,*),
98 . sh3tree(ksh3tree,*), nod2eltg(*), sh3trim(*),
99 . tagprt_sms(*),iworksh(3,*)
100 INTEGER ,
DIMENSION(NUMELTG) ,
INTENT(INOUT):: PTSH3N
103 . PM(NPROPM,*), GEO(NPROPG,*), XNUM(*), THK(*), RNOISE(,*),
106 TYPE (STACK_PLY) :: STACK
107 TYPE(MULTI_FVM_STRUCT) :: MULTI_FVM
108 TYPE (DRAPE_) ,
TARGET :: DRAPE(NUMELC_DRAPE + NUMELTG_DRAPE)
109 TYPE (DRAPEG_) :: DRAPEG
110 TYPE (
drape_) ,
DIMENSION(:) ,
ALLOCATABLE :: xnum_drape
111 TYPE (DRAPEG_) ,
ALLOCATABLE :: XNUM_DRAPEG
112 TYPE (DRAPE_PLY_) ,
POINTER :: DRAPE_PLY
113 TYPE(MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
115 TYPE (GROUP_) ,
DIMENSION(NGRSH3N) :: IGRSH3N
116 TYPE () ,
DIMENSION(NSURF) :: IGRSURF
120 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ISTOR,INUM_DRAPE
122 INTEGER I, K, MLN, NG, ISSN, NPN, IFIO,NN,ICO,ID,
123 . mln0, issn0, ic, n, mid, mid0, pid, pid0, istr0,
124 . ihbe, ihbe0, j, midn, nsg, nel, ne1, ithk,
125 . ithk0, ipla, ipla0, ii1, jj1, ii2, jj2, ii, jj,
126 . l, igtyp, ii3, jj3,ngrou,neltg3,
127 . mskmln, msknpn, mskihb, mskisn, mode,icsen,ifail,nfail,
128 . mskist, mskipl, mskith, mskmid,mskpid,mskirp,msktyp,irep,
129 . ii0,jj0,ilev,prt,iadm,dir,mskirb,irb, ii4, jj4,
130 . irup,ixfem,iwarnhb,ipt,imatly,ipid,ish3n,
131 . inum_workc(3,numeltg),ii5,jj5,isubstack,iigeo,iadi,ippid,
132 . nb_law58,ipmat,ipert,stat,ialel, mt,ip,nslice,kk,npt_drp,
136 CHARACTER(LEN=NCHARTITLE)::TITR
138 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX2, INUM_PTSH3N
140 EXTERNAL MY_SHIFTL,MY_SHIFTR,MY_AND
141 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND
142 my_real,
DIMENSION(:,:),
ALLOCATABLE :: xnum_rnoise
145 DATA mskmln /o
'00777000000'/
146 DATA msktyp /o
'00000777000'/
147 DATA mskisn /o
'00000000700'/
148 DATA mskist /o
'00000000070'/
149 DATA mskipl /o
'00000000007'/
151 DATA mskith /o
'10000000000'/
152 DATA mskirp /o
'07000000000'/
153 DATA msknpn /o
'00777000000'/
154 DATA mskirb /o
'00000000007'/
156 DATA mskmid /o
'07777777777'/
158 DATA mskpid /o
'07777777777'/
166 ALLOCATE( istor(ksh3tree+1,numeltg) )
168 ALLOCATE( istor(0,0) )
170 IF (ndrape > 0 .AND. numeltg_drape > 0)
THEN
171 ALLOCATE(xnum_drape(numeltg))
172 ALLOCATE(xnum_drapeg%INDX(numeltg))
175 iel = drapeg%INDX(numelc + i)
177 npt_drp = drape(iel)%NPLY_DRAPE
178 npt = drape(iel)%NPLY
179 ALLOCATE(xnum_drape(i)%INDX_PLY(npt))
180 ALLOCATE(xnum_drape(i)%DRAPE_PLY(npt_drp))
181 xnum_drape(i)%INDX_PLY= 0
183 nslice = drape(iel)%DRAPE_PLY(j)%NSLICE
184 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE(nslice,2))
185 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE(nslice,2))
186 xnum_drape(i)%DRAPE_PLY(j)%RDRAPE = 0
187 xnum_drape(i)%DRAPE_PLY(j)%IDRAPE = 0
191 ALLOCATE( xnum_drape(0) )
193 IF(abs(isigi) == 3 .OR. abs(isigi) == 4 .OR. abs(isigi) == 5)
THEN
194 ALLOCATE(inum_ptsh3n(numeltg))
197 ALLOCATE(inum_ptsh3n(0))
204 IF (nperturb > 0)
THEN
205 ALLOCATE(xnum_rnoise(nperturb,numeltg),stat=stat)
206 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
211 CALL my_alloc(index2,numeltg)
213 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
230 inum_workc(1,i) = iworksh(1,numelc + i)
231 inum_workc(2,i) = iworksh(2,numelc + i)
232 inum_workc(3,i) = iworksh(3,numelc + i)
233 IF (nperturb > 0)
THEN
234 DO ipert = 1, nperturb
235 xnum_rnoise(ipert,i) = rnoise(ipert,i)
240 iel = drapeg%INDX(numelc + i)
241 xnum_drapeg%INDX(i) = iel
243 npt = drape(iel)%NPLY
244 xnum_drape(i)%NPLY = npt
245 xnum_drape(i)%INDX_PLY(1:npt) = drape(iel)%INDX_PLY(1:npt)
246 npt = drape(iel)%NPLY_DRAPE
247 xnum_drape(i)%NPLY_DRAPE = npt
248 xnum_drape(i)%THICK = drape(iel)%THICK
250 drape_ply => drape(iel)%DRAPE_PLY(jj)
251 nslice = drape_ply%NSLICE
252 xnum_drape(i)%DRAPE_PLY(jj)%NSLICE = nslice
253 xnum_drape(i)%DRAPE_PLY(jj)%IPID = drape_ply%IPID
255 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,1)=drape_ply%IDRAPE(kk,1)
256 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,2)=drape_ply%IDRAPE(kk,2)
257 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,1)=drape_ply%RDRAPE(kk,1)
258 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,2)=drape_ply%RDRAPE(kk,2)
260 DEALLOCATE(drape_ply%IDRAPE, drape_ply%RDRAPE)
262 DEALLOCATE(drape(iel)%DRAPE_PLY)
263 DEALLOCATE(drape(iel)%INDX_PLY)
282 inum_workc(1,i) = iworksh(1,numelc + i)
283 inum_workc(2,i) = iworksh(2,numelc + i)
284 inum_workc(3,i) = iworksh(3,numelc + i)
285 IF (nperturb > 0)
THEN
286 DO ipert = 1, nperturb
287 xnum_rnoise(ipert,i) = rnoise(ipert,i)
294 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
295 inum_ptsh3n(1:numeltg) = ptsh3n(1:numeltg)
300 istor(k,i)=sh3tree(k,i)
305 istor(ksh3tree+1,i)=sh3trim(i)
314 DO 100 i = 1, numeltg
329 IF(ilev<0)ilev=-ilev-1
336 mln = nint(pm(19,mid))
338 jthe = nint(pm(71,mid))
343 nfail = mat_param(mid)%NFAIL
346 IF (igtyp == 11)
THEN
348 imatly = igeo(100+ipt,pid)
349 nfail =
max(nfail, mat_param(imatly)%NFAIL)
351 IF (icrack3d > 0) ixfem = mat_param(mid)%IXFEM
352 ELSEIF (igtyp == 17)
THEN
353 npn = iworksh(1,numelc + ii)
354 isubstack =iworksh(3,numelc + ii)
357 ipid = stack%IGEO(ippid+ipt,isubstack)
358 imatly = igeo(101, ipid)
359 nfail =
max(nfail, mat_param(imatly)%NFAIL)
361 ELSEIF (igtyp == 51 )
THEN
366 npn = iworksh(1,numelc + ii)
367 isubstack =iworksh(3,numelc + ii)
370 ipid = stack%IGEO(ippid+ipt,isubstack)
371 imatly = igeo(101, ipid)
372 nfail =
max(nfail, mat_param(imatly)%NFAIL
374 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
377 IF (nb_law58 == npn)
THEN
379 ELSEIF (nb_law58 > 0)
THEN
382 ELSEIF ( igtyp == 52 )
THEN
387 npn = iworksh(1,numelc + ii)
388 isubstack =iworksh(3,numelc + ii)
392 ipid = stack%IGEO(ippid + ipt,isubstack)
393 imatly = stack%IGEO(ipmat + ipt,isubstack)
394 nfail =
max(nfail, mat_param(imatly)%NFAIL)
396 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
399 IF (nb_law58 == npn)
THEN
401 ELSEIF (nb_law58 > 0)
THEN
408 ixfem = mat_param(mid)%IXFEM
415 IF (nfail > 0) ifail = 1
418 iexpan = ipm(218, mid)
420 IF(ish3n>3.AND.ish3n<=29)
THEN
422 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
424 . msgtype=msgwarning,
425 . anmode=aninfo_blind_2,
433 ithk = nint(geo(35,pid))
434 ipla = nint(geo(39,pid))
437 IF (icsen > 0) icsen=1
439 IF(npn==0.AND.(mln==36.OR.mln==86))
THEN
442 ELSEIF(npn==0.AND.mln==2)
THEN
453 istrain = nint(geo(11,pid))
454 IF(mln==19.OR.mln>=25.OR.mln==15)istrain = 1
455 issn = nint(geo(3,pid))
466 IF(tagprt_sms(iparttg(ii))/=0)jsms=1
478 istrain= my_shiftl(istrain,3)
479 issn = my_shiftl(issn,6)
481 igtyp = my_shiftl(igtyp,9)
482 mln = my_shiftl(mln,18)
485 ico = my_shiftl(ico,29)
486 itri(3,i)=ipla+istrain+issn+igtyp+mln+ico
491 ifail = my_shiftl(ifail,4)
492 iexpan = my_shiftl(iexpan,5)
493 jthe = my_shiftl(jthe,6)
494 ish3n = my_shiftl(ish3n,11)
495 icsen = my_shiftl(icsen,16)
496 npn = my_shiftl(npn,17)
497 irep = my_shiftl(irep,26)
498 ithk = my_shiftl(ithk,30)
499 IF(ixfem > 0)ixfem = my_shiftl(ixfem,9)
501 itri(4,i)=ithk+irep+npn+icsen+ish3n+jthe+irb+ifail+ixfem
509 itri(7,i) = iworksh(2,numelc + i)
513 CALL my_orders( mode, work, itri, index, numeltg , 7)
516 iparttg(i)=inum(1,index(i))
518 itrioff(i)=inum(2,index(i))
519 icnod(i) = inum(9,index(i))
529 ixtg(k,i)=inum(k+2,index(i))
534 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
537 iworksh(1,numelc + i)= inum_workc(1,index(i))
538 iworksh(2,numelc + i)= inum_workc(2,index(i))
539 iworksh(3,numelc + i)= inum_workc(3,index(i))
540 IF (nperturb > 0)
THEN
541 DO ipert = 1, nperturb
542 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
545 sh3ang(i)=angle(index(i))
547 iel0 = xnum_drapeg%INDX(index(i))
548 drapeg%INDX(numelc + i)= 0
551 npt = xnum_drape(index(i))%NPLY
552 drape(iel)%NPLY = npt
553 drapeg%INDX(numelc + i)= iel
554 ALLOCATE(drape(iel)%INDX_PLY(npt))
555 drape(iel)%INDX_PLY(1:npt) = xnum_drape(index(i))%INDX_PLY(1:npt)
556 npt = xnum_drape(index(i))%NPLY_DRAPE
557 drape(iel)%NPLY_DRAPE= npt
558 drape(iel)%THICK = xnum_drape(index(i))%THICK
559 ALLOCATE(drape(iel)%DRAPE_PLY(npt))
561 drape_ply => drape(iel)%DRAPE_PLY(jj)
562 nslice = xnum_drape(index(i))%DRAPE_PLY(jj)%NSLICE
563 drape_ply%NSLICE = nslice
564 drape_ply%IPID = xnum_drape(index(i))%DRAPE_PLY(jj)%IPID
565 ALLOCATE(drape_ply%IDRAPE(nslice,2), drape_ply%RDRAPE(nslice,2))
567 drape_ply%RDRAPE = zero
569 drape_ply%IDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,1)
570 drape_ply%IDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,2)
571 drape_ply%RDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,1)
572 drape_ply%RDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,2)
578 iworksh(1,numelc + i)= inum_workc(1,index(i))
579 iworksh(2,numelc + i)= inum_workc(2,index(i))
580 iworksh(3,numelc + i)= inum_workc(3,index(i))
581 IF (nperturb > 0)
THEN
582 DO ipert = 1, nperturb
583 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
586 sh3ang(i)=angle(index(i))
589 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
591 ptsh3n(i) = inum_ptsh3n
597 sh3tree(k,i)=istor(k,index(i))
602 sh3trim(i)=istor(ksh3tree+1,index(i))
618 . sh3tree(1,i)=itr1(sh3tree(1,i))
620 . sh3tree(2,i)=itr1(sh3tree(2,i))
629 IF(igrsurf(i)%ELTYP(j) == 7)
630 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
637 nn=igrsh3n(i)%NENTITY
639 igrsh3n(i)%ENTITY(j) = itr1(igrsh3n(i)%ENTITY(j))
646 IF(nod2eltg(i) /= 0)nod2eltg(i)=itr1(nod2eltg(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))
679 eadd(nd+1) = numeltg+1
682 pid = ixtg(nixtg-1,i)
684 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
686 . msgtype=msgwarning,
694 IF (nperturb > 0)
THEN
695 IF (
ALLOCATED(xnum_rnoise))
DEALLOCATE(xnum_rnoise)
697 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
699 iel0 = xnum_drapeg%INDX(i)
701 npt_drp = xnum_drape(i)%NPLY_DRAPE
703 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE)
704 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE)
706 DEALLOCATE(xnum_drape(i)%DRAPE_PLY,xnum_drape(i)%INDX_PLY)
708 DEALLOCATE(xnum_drape,xnum_drapeg%INDX)
710 DEALLOCATE( xnum_drape)
715 IF(
ALLOCATED(inum_ptsh3n))
DEALLOCATE(inum_ptsh3n)