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 )
57 use element_mod ,
only : nixtg
77#include "implicit_f.inc"
83#include "com_xfem1.inc"
85#include "vect01_c.inc"
86#include "remesh_c.inc"
94 . ixtg(nixtg,*),isel(*),inum(10,*),nd,icnod(*),ixtg1(4,*),
95 . eadd(*), itr1(*), index(*), itri(7,*),iparttg(*),
98 . igeo(npropgi,*),ipm(npropmi,*), ipart(lipart1,*),
99 . sh3tree(ksh3tree,*), nod2eltg(*), sh3trim(*),
100 . tagprt_sms(*),iworksh(3,*)
101 INTEGER ,
DIMENSION(NUMELTG) ,
INTENT(INOUT):: PTSH3N
104 . PM(NPROPM,*), GEO(NPROPG,*), XNUM(*), THK(*), RNOISE(NPERTURB,*),
107 TYPE (STACK_PLY) :: STACK
108 TYPE(MULTI_FVM_STRUCT) :: MULTI_FVM
109 TYPE (DRAPE_) ,
TARGET :: DRAPE(NUMELC_DRAPE + NUMELTG_DRAPE)
110 TYPE (DRAPEG_) :: DRAPEG
111 TYPE (DRAPE_) ,
DIMENSION(:) ,
ALLOCATABLE :: XNUM_DRAPE
112 TYPE (DRAPEG_) ,
ALLOCATABLE :: XNUM_DRAPEG
113 TYPE (DRAPE_PLY_) ,
POINTER :: DRAPE_PLY
114 TYPE(MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
116 TYPE (GROUP_) ,
DIMENSION(NGRSH3N) :: IGRSH3N
117 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
121 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ISTOR
123 INTEGER I, K, MLN, ISSN, NPN,NN,ICO,ID,
126 . ipla, ii1, jj1, ii2, jj2, ii, jj,
128 . mskmln, msknpn, mskisn, mode,icsen,ifail,nfail,
129 . mskist, mskipl, mskith, mskmid,mskpid,mskirp,msktyp,irep,
130 . ii0,jj0,ilev,prt,iadm,mskirb,irb, ii4, jj4,
131 . ixfem,iwarnhb,ipt,imatly,ipid,ish3n,
132 . inum_workc(3,numeltg),ii5,jj5,isubstack,ippid,
133 . nb_law58,ipmat,ipert,stat,nslice,kk,npt_drp,
137 CHARACTER(LEN=NCHARTITLE)::TITR
139 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX2, INUM_PTSH3N
141 EXTERNAL MY_SHIFTL,MY_SHIFTR,MY_AND
142 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND
143 my_real,
DIMENSION(:,:),
ALLOCATABLE :: xnum_rnoise
146 DATA mskmln /o
'00777000000'/
147 DATA msktyp /o
'00000777000'/
148 DATA mskisn /o
'00000000700'/
149 DATA mskist /o
'00000000070'/
150 DATA mskipl /o
'00000000007'/
152 DATA mskith /o
'10000000000'/
153 DATA mskirp /o
'07000000000'/
154 DATA msknpn /o
'00777000000'/
155 DATA mskirb /o
'00000000007'/
157 DATA mskmid /o
'07777777777'/
159 DATA mskpid /o
'07777777777'/
167 ALLOCATE( istor(ksh3tree+1,numeltg) )
169 ALLOCATE( istor(0,0) )
171 IF (ndrape > 0 .AND. numeltg_drape > 0)
THEN
172 ALLOCATE(xnum_drape(numeltg))
173 ALLOCATE(xnum_drapeg%INDX(numeltg))
176 iel = drapeg%INDX(numelc + i)
178 npt_drp = drape(iel)%NPLY_DRAPE
179 npt = drape(iel)%NPLY
180 ALLOCATE(xnum_drape(i)%INDX_PLY(npt))
181 ALLOCATE(xnum_drape(i)%DRAPE_PLY(npt_drp))
182 xnum_drape(i)%INDX_PLY= 0
184 nslice = drape(iel)%DRAPE_PLY(j)%NSLICE
185 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE(nslice,2))
186 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE(nslice,2))
187 xnum_drape(i)%DRAPE_PLY(j)%RDRAPE = 0
188 xnum_drape(i)%DRAPE_PLY(j)%IDRAPE = 0
192 ALLOCATE( xnum_drape(0) )
194 IF(abs(isigi) == 3 .OR. abs(isigi) == 4 .OR. abs(isigi) == 5)
THEN
195 ALLOCATE(inum_ptsh3n(numeltg))
198 ALLOCATE(inum_ptsh3n(0))
205 IF (nperturb > 0)
THEN
206 ALLOCATE(xnum_rnoise(nperturb,numeltg),stat=stat)
207 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
212 CALL my_alloc(index2,numeltg)
214 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
231 inum_workc(1,i) = iworksh(1,numelc + i)
232 inum_workc(2,i) = iworksh(2,numelc + i)
233 inum_workc(3,i) = iworksh(3,numelc + i)
234 IF (nperturb > 0)
THEN
235 DO ipert = 1, nperturb
236 xnum_rnoise(ipert,i) = rnoise(ipert,i)
241 iel = drapeg%INDX(numelc + i)
242 xnum_drapeg%INDX(i) = iel
244 npt = drape(iel)%NPLY
245 xnum_drape(i)%NPLY = npt
246 xnum_drape(i)%INDX_PLY(1:npt) = drape(iel)%INDX_PLY(1:npt)
247 npt = drape(iel)%NPLY_DRAPE
248 xnum_drape(i)%NPLY_DRAPE = npt
249 xnum_drape(i)%THICK = drape(iel)%THICK
251 drape_ply => drape(iel)%DRAPE_PLY(jj)
252 nslice = drape_ply%NSLICE
253 xnum_drape(i)%DRAPE_PLY(jj)%NSLICE = nslice
254 xnum_drape(i)%DRAPE_PLY(jj)%IPID = drape_ply%IPID
256 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,1)=drape_ply%IDRAPE(kk,1)
257 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,2)=drape_ply%IDRAPE(kk,2)
258 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,1)=drape_ply%RDRAPE(kk,1)
259 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,2)=drape_ply%RDRAPE(kk,2)
261 DEALLOCATE(drape_ply%IDRAPE, drape_ply%RDRAPE)
263 DEALLOCATE(drape(iel)%DRAPE_PLY)
264 DEALLOCATE(drape(iel)%INDX_PLY)
283 inum_workc(1,i) = iworksh(1,numelc + i)
284 inum_workc(2,i) = iworksh(2,numelc + i)
285 inum_workc(3,i) = iworksh(3,numelc + i)
286 IF (nperturb > 0)
THEN
287 DO ipert = 1, nperturb
288 xnum_rnoise(ipert,i) = rnoise(ipert,i)
295 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
296 inum_ptsh3n(1:numeltg) = ptsh3n(1:numeltg)
301 istor(k,i)=sh3tree(k,i)
306 istor(ksh3tree+1,i)=sh3trim(i)
315 DO 100 i = 1, numeltg
330 IF(ilev<0)ilev=-ilev-1
337 mln = nint(pm(19,mid))
339 jthe = nint(pm(71,mid))
344 nfail = mat_param(mid)%NFAIL
347 IF (igtyp == 11)
THEN
349 imatly = igeo(100+ipt,pid)
350 nfail =
max(nfail, mat_param(imatly)%NFAIL)
352 IF (icrack3d > 0) ixfem = mat_param(mid)%IXFEM
353 ELSEIF (igtyp == 17)
THEN
354 npn = iworksh(1,numelc + ii)
355 isubstack =iworksh(3,numelc + ii)
358 ipid = stack%IGEO(ippid+ipt,isubstack)
359 imatly = igeo(101, ipid)
360 nfail =
max(nfail, mat_param(imatly)%NFAIL)
362 ELSEIF (igtyp == 51 )
THEN
367 npn = iworksh(1,numelc + ii)
368 isubstack =iworksh(3,numelc + ii)
371 ipid = stack%IGEO(ippid+ipt,isubstack)
372 imatly = igeo(101, ipid)
373 nfail =
max(nfail, mat_param(imatly)%NFAIL)
375 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
378 IF (nb_law58 == npn)
THEN
380 ELSEIF (nb_law58 > 0)
THEN
383 ELSEIF ( igtyp == 52 )
THEN
388 npn = iworksh(1,numelc + ii)
389 isubstack =iworksh(3,numelc + ii)
393 ipid = stack%IGEO(ippid + ipt,isubstack)
394 imatly = stack%IGEO(ipmat + ipt,isubstack)
395 nfail =
max(nfail, mat_param(imatly)%NFAIL)
397 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
400 IF (nb_law58 == npn)
THEN
402 ELSEIF (nb_law58 > 0)
THEN
409 ixfem = mat_param(mid)%IXFEM
416 IF (nfail > 0) ifail = 1
419 iexpan = ipm(218, mid)
421 IF(ish3n>3.AND.ish3n<=29)
THEN
423 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
425 . msgtype=msgwarning,
426 . anmode=aninfo_blind_2,
434 ithk = nint(geo(35,pid))
435 ipla = nint(geo(39,pid))
438 IF (icsen > 0) icsen=1
440 IF(npn==0.AND.(mln==36.OR.mln==86))
THEN
443 ELSEIF(npn==0.AND.mln==2)
THEN
454 istrain = nint(geo(11,pid))
455 IF(mln==19.OR.mln>=25.OR.mln==15)istrain = 1
456 issn = nint(geo(3,pid))
467 IF(tagprt_sms(iparttg(ii))/=0)jsms=1
479 istrain= my_shiftl(istrain,3)
480 issn = my_shiftl(issn,6)
482 igtyp = my_shiftl(igtyp,9)
483 mln = my_shiftl(mln,18)
486 ico = my_shiftl(ico,29)
487 itri(3,i)=ipla+istrain+issn+igtyp+mln+ico
492 ifail = my_shiftl(ifail,4)
493 iexpan = my_shiftl(iexpan,5)
494 jthe = my_shiftl(jthe,6)
495 ish3n = my_shiftl(ish3n,11)
496 icsen = my_shiftl(icsen,16)
497 npn = my_shiftl(npn,17)
498 irep = my_shiftl(irep,26)
499 ithk = my_shiftl(ithk,30)
500 IF(ixfem > 0)ixfem = my_shiftl(ixfem,9)
502 itri(4,i)=ithk+irep+npn+icsen+ish3n+jthe+irb+ifail+ixfem
510 itri(7,i) = iworksh(2,numelc + i)
514 CALL my_orders( mode, work, itri, index, numeltg , 7)
517 iparttg(i)=inum(1,index(i))
518 thk(i) =xnum(index(i))
519 itrioff(i)=inum(2,index(i))
520 icnod(i) = inum(9,index(i))
530 ixtg(k,i)=inum(k+2,index(i))
535 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
538 iworksh(1,numelc + i)= inum_workc(1,index(i))
539 iworksh(2,numelc + i)= inum_workc(2,index(i))
540 iworksh(3,numelc + i)= inum_workc(3,index(i))
541 IF (nperturb > 0)
THEN
542 DO ipert = 1, nperturb
543 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
546 sh3ang(i)=angle(index(i))
548 iel0 = xnum_drapeg%INDX(index(i))
549 drapeg%INDX(numelc + i)= 0
552 npt = xnum_drape(index(i))%NPLY
553 drape(iel)%NPLY = npt
554 drapeg%INDX(numelc + i)= iel
555 ALLOCATE(drape(iel)%INDX_PLY(npt))
556 drape(iel)%INDX_PLY(1:npt) = xnum_drape(index(i))%INDX_PLY(1:npt)
557 npt = xnum_drape(index(i))%NPLY_DRAPE
558 drape(iel)%NPLY_DRAPE= npt
559 drape(iel)%THICK = xnum_drape(index(i))%THICK
560 ALLOCATE(drape(iel)%DRAPE_PLY(npt))
562 drape_ply => drape(iel)%DRAPE_PLY(jj)
563 nslice = xnum_drape(index(i))%DRAPE_PLY(jj)%NSLICE
564 drape_ply%NSLICE = nslice
565 drape_ply%IPID = xnum_drape(index(i))%DRAPE_PLY(jj)%IPID
566 ALLOCATE(drape_ply%IDRAPE(nslice,2), drape_ply%RDRAPE(nslice,2))
568 drape_ply%RDRAPE = zero
570 drape_ply%IDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,1)
571 drape_ply%IDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,2
572 drape_ply%RDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,1)
573 drape_ply%RDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,2)
579 iworksh(1,numelc + i)= inum_workc(1,index(i))
580 iworksh(2,numelc + i)= inum_workc(2,index(i))
581 iworksh(3,numelc + i)= inum_workc
582 IF (nperturb > 0)
THEN
583 DO ipert = 1, nperturb
584 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
587 sh3ang(i)=angle(index(i))
590 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
592 ptsh3n(i) = inum_ptsh3n(index(i))
598 sh3tree(k,i)=istor(k,index(i))
603 sh3trim(i)=istor(ksh3tree+1,index(i))
619 . sh3tree(1,i)=itr1(sh3tree(1,i))
621 . sh3tree(2,i)=itr1(sh3tree(2,i))
630 IF(igrsurf(i)%ELTYP(j) == 7)
631 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
638 nn=igrsh3n(i)%NENTITY
640 igrsh3n(i)%ENTITY(j) = itr1(igrsh3n(i)%ENTITY(j))
647 IF(nod2eltg(i) /= 0)nod2eltg(i)=itr1(nod2eltg(i))
655 jj0=itri(1,index(i-1))
657 jj =itri(2,index(i-1))
659 jj1=itri(3,index(i-1))
661 jj2=itri(4,index(i-1))
663 jj3=itri(5,index(i-1))
665 jj4=itri(6,index(i-1))
668 jj5=itri(7,index(i-1))
680 eadd(nd+1) = numeltg+1
683 pid = ixtg(nixtg-1,i)
685 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
687 . msgtype=msgwarning,
695 IF (nperturb > 0)
THEN
696 IF (
ALLOCATED(xnum_rnoise))
DEALLOCATE(xnum_rnoise)
698 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
700 iel0 = xnum_drapeg%INDX
702 npt_drp = xnum_drape(i)%NPLY_DRAPE
704 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE)
705 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE)
707 DEALLOCATE(xnum_drape(i)%DRAPE_PLY,xnum_drape(i)%INDX_PLY)
709 DEALLOCATE(xnum_drape,xnum_drapeg%INDX)
711 DEALLOCATE( xnum_drape)
716 IF(
ALLOCATED(inum_ptsh3n))
DEALLOCATE(inum_ptsh3n)