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,
43 7 IWORKSH , STACK ,DRAPE ,RNOISE,
44 8 MULTI_FVM, SH3ANG,DRAPEG, PTSH3N ,MAT_PARAM,
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,*),
96 . cep(*), xep(*),itrioff(*),
97 . igeo(npropgi,*),ipm(npropmi,*), ipart(lipart1,*),
98 . sh3tree(ksh3tree,*), nod2eltg(*), sh3trim(*),
99 . tagprt_sms(*),iworksh(3,*)
100 INTEGER ,
DIMENSION(NUMELTG) ,
INTENT(INOUT):: PTSH3N
101 INTEGER ,
INTENT(IN) :: DAMP_RANGE_PART()
103 . pm(npropm,*), geo(npropg,*), xnum(*), thk(*), rnoise(nperturb,*),
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,XNUM_DRAPEG
110 TYPE (DRAPE_) ,
DIMENSION(:),
ALLOCATABLE :: XNUM_DRAPE
111 TYPE (DRAPE_PLY_) ,
POINTER :: DRAPE_PLY
113 TYPE (GROUP_) ,
DIMENSION(NGRSH3N) :: IGRSH3N
114 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
115 TYPE() ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
119 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ISTOR,INUM_DRAPE
121 INTEGER I, K, MLN, NG, ISSN, NPN, IFIO,NN,ICO,ID,
122 . mln0, issn0, ic, n, mid, mid0, pid, pid0, istr0,
123 . ihbe, ihbe0, j, midn, nsg, nel, ne1, ithk,
124 . ithk0, ipla, ipla0, ii1, jj1, ii2, jj2, ii, jj,
125 . l, igtyp, ii3, jj3,ngrou,neltg3,
126 . mskmln, msknpn, mskihb, mskisn, mode,icsen,ifail,nfail,
127 . mskist, mskipl, mskith, mskmid,mskpid,mskirp,msktyp,irep,
128 . ii0,jj0,ilev,prt,iadm,dir,mskirb,irb, ii4, jj4,
129 . irup,ixfem,iwarnhb,ipt,imatly,ipid,ish3n,
130 . ii5,jj5,ii6,jj6,isubstack,iigeo,iadi,ippid,
131 . nb_law58,ipmat,ipert,stat,ialel, mt,nslice,kk,npt_drp,ie,
134 CHARACTER(LEN=NCHARTITLE) :: TITR
136 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX2, INUM_PTSH3N
137 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: INUM_WORKSH
139 EXTERNAL MY_SHIFTL,MY_SHIFTR,MY_AND
140 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND
141 my_real,
DIMENSION(:,:),
ALLOCATABLE :: XNUM_RNOISE
142 my_real,
DIMENSION(:),
ALLOCATABLE :: ANGLE
144 DATA mskmln /o
'00777000000'/
145 DATA msktyp /o
'00000777000'/
146 DATA mskisn /o
'00000000700'/
147 DATA mskist /o
'00000000070'/
148 DATA mskipl /o
'00000000007'/
150 DATA mskith /o
'10000000000'/
151 DATA mskirp /o
'07000000000'/
152 DATA msknpn /o
'00777000000'/
153 DATA mskirb /o
'00000000007'/
155 DATA mskmid /o
'07777777777'/
157 DATA mskpid /o
'07777777777'/
160 ALLOCATE(angle(numeltg))
161 ALLOCATE(inum_worksh(3,numeltg))
165 ALLOCATE( istor(ksh3tree+1,numeltg) )
167 ALLOCATE( istor(0,0) )
169 IF (ndrape > 0 .AND. numeltg_drape > 0)
THEN
170 ALLOCATE(xnum_drape(numeltg))
171 ALLOCATE(xnum_drapeg%INDX(numeltg))
174 ie = drapeg%INDX(numelc + i)
176 npt_drp = drape(ie)%NPLY_DRAPE
178 ALLOCATE(xnum_drape(i)%INDX_PLY(npt))
179 ALLOCATE(xnum_drape(i)%DRAPE_PLY(npt_drp))
180 xnum_drape(i)%INDX_PLY= 0
182 nslice = drape(ie)%DRAPE_PLY(j)%NSLICE
183 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE(nslice,2))
184 ALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE(nslice,2))
185 xnum_drape(i)%DRAPE_PLY(j)%RDRAPE = 0
186 xnum_drape(i)%DRAPE_PLY(j)%IDRAPE = 0
190 ALLOCATE( xnum_drape(0) )
192 IF(abs(isigi) == 3 .OR. abs(isigi) == 4 .OR. abs(isigi) == 5)
THEN
193 ALLOCATE(inum_ptsh3n(numeltg))
196 ALLOCATE(inum_ptsh3n(0))
203 IF (nperturb > 0)
THEN
204 ALLOCATE(xnum_rnoise(nperturb,numeltg),stat
205 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
210 CALL my_alloc(index2,numeltg)
211 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
228 inum_worksh(1,i) = iworksh(
229 inum_worksh(2,i) = iworksh(2,numelc + i)
230 inum_worksh(3,i) = iworksh(3,numelc + i)
231 IF (nperturb > 0)
THEN
232 DO ipert = 1, nperturb
233 xnum_rnoise(ipert,i) = rnoise(ipert,i)
238 ie = drapeg%INDX(numelc + i)
239 xnum_drapeg%INDX(i) = ie
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
250 xnum_drape(i)%DRAPE_PLY(jj)%NSLICE = nslice
251 xnum_drape(i)%DRAPE_PLY(jj)%IPID = drape_ply%IPID
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
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)
280 inum_worksh(1,i) = iworksh(1,numelc + i)
281 inum_worksh(2,i) = iworksh(2,numelc + i)
282 inum_worksh(3,i) = iworksh(3,numelc + i
283 IF (nperturb > 0)
THEN
284 DO ipert = 1, nperturb
285 xnum_rnoise(ipert,i) = rnoise
291 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
292 inum_ptsh3n(1:numeltg) = ptsh3n(1:numeltg)
298 istor(k,i)=sh3tree(k,i)
303 istor(ksh3tree+1,i)=sh3trim(i)
312 DO 100 i = 1, numeltg
327 IF(ilev<0)ilev=-ilev-1
336 jthe = nint(pm(71,mid))
341 nfail = mat_param(mid)%NFAIL
344 IF (igtyp == 11)
THEN
346 imatly = igeo(100+ipt,pid)
347 nfail =
max(nfail, mat_param(imatly)%NFAIL)
351 ixfem = mat_param(mid)%IXFEM
353 ELSEIF (igtyp == 17)
THEN
354 npn = iworksh(1,numelc + ii)
355 isubstack =iworksh(3,numelc
361 ipid = stack%IGEO(ippid+ipt,isubstack)
362 imatly = igeo(101, ipid)
363 nfail =
max(nfail, mat_param(imatly)%NFAIL)
365 ELSEIF (igtyp == 51 )
THEN
370 npn = iworksh(1,numelc + ii)
371 isubstack =iworksh(3,numelc + ii)
374 ipid = stack%IGEO(ippid+ipt,isubstack)
375 imatly = igeo(101, ipid)
376 nfail =
max(nfail, mat_param(imatly)%NFAIL)
378 IF (nint(pm(19,imatly)) ==
381 IF (nb_law58 == npn)
THEN
383 ELSEIF (nb_law58 > 0)
THEN
386 ELSEIF ( igtyp == 52 )
THEN
392 isubstack =iworksh(3,numelc + ii)
396 ipid = stack%IGEO(ippid + ipt,isubstack)
397 imatly = stack%IGEO(ipmat + ipt,isubstack)
398 nfail =
max(nfail, mat_param(imatly)%NFAIL)
400 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
403 IF (nb_law58 == npn)
THEN
405 ELSEIF (nb_law58 > 0)
THEN
412 ixfem = mat_param(mid)%IXFEM
419 IF (nfail > 0) ifail = 1
422 iexpan = ipm(218, mid)
424 IF(ish3n>3.AND.ish3n<=29)
THEN
426 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
428 . msgtype=msgwarning,
429 . anmode=aninfo_blind_2,
437 ithk = nint(geo(35,pid))
438 ipla = nint(geo(39,pid))
441 IF (icsen > 0) icsen=1
443 IF(npn==0.AND.(mln==36.OR.mln==86))
THEN
446 ELSEIF(npn==0.AND.mln==2)
THEN
459 istrain = nint(geo(11,pid))
460 IF(mln==19.OR.mln>=25.OR.mln==15)istrain = 1
461 issn = iabs(nint(geo(3,pid)))
472 IF(tagprt_sms(iparttg(ii))/=0)jsms=1
484 istrain= my_shiftl(istrain,3)
485 issn = my_shiftl(issn,6)
487 igtyp = my_shiftl(igtyp,9)
488 mln = my_shiftl(mln,18)
491 ico = my_shiftl(ico,29)
492 itri(3,i)=ipla+istrain+issn+igtyp+mln+ico
497 ifail = my_shiftl(ifail,4)
499 jthe = my_shiftl(jthe,6)
500 ish3n = my_shiftl(ish3n,11)
501 icsen = my_shiftl(icsen,16)
502 npn = my_shiftl(npn,17)
503 irep = my_shiftl(irep,26)
504 ithk = my_shiftl(ithk,30)
505 IF(ixfem > 0)ixfem = my_shiftl(ixfem,9)
507 itri(4,i)=ithk+irep+npn+icsen+ish3n+jthe+irb+ifail+ixfem
515 itri(7,i) = iworksh(2,numelc + i)
517 itri(8,i )= damp_range_part(iparttg(ii))
521 CALL my_orders( mode, work, itri, index, numeltg , 8)
524 iparttg(i)=inum(1,index(i))
525 thk(i) =xnum(index(i))
526 itrioff(i)=inum(2,index(i))
527 icnod(i) = inum(9,index(i))
537 ixtg(k,i)=inum(k+2,index(i))
542 neltg3 = numeltg-numeltg6
545 inum(1,ii)=ixtg1(1,i)
546 inum(2,ii)=ixtg1(2,i)
547 inum(3,ii)=ixtg1(3,i)
551 ixtg1(1,i)=inum(1,index(ii))
552 ixtg1(2,i)=inum(2,index(ii))
553 ixtg1(3,i)=inum(3,index(ii))
557 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
560 iworksh(1,numelc + i)= inum_worksh(1,index(i))
561 iworksh(2,numelc + i)= inum_worksh
562 iworksh(3,numelc + i)= inum_worksh
563 IF (nperturb > 0)
THEN
564 DO ipert = 1, nperturb
565 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
568 sh3ang(i)=angle(index(i))
570 ie0 = xnum_drapeg%INDX(index(i))
571 drapeg%INDX(numelc + i) = 0
574 npt = xnum_drape(index(i))%NPLY
576 drapeg%INDX(numelc + i)= ie
577 ALLOCATE(drape(ie)%INDX_PLY(npt))
578 drape(ie)%INDX_PLY(1:npt) = xnum_drape(index(i))%INDX_PLY(1:npt)
579 npt = xnum_drape(index(i))%NPLY_DRAPE
580 ALLOCATE(drape(ie)%DRAPE_PLY(npt))
581 drape(ie)%NPLY_DRAPE= npt
582 drape(ie)%THICK = xnum_drape(index(i))%THICK
584 drape_ply => drape(ie)%DRAPE_PLY(jj)
585 nslice = xnum_drape(index(i))%DRAPE_PLY(jj)%NSLICE
586 drape_ply%NSLICE = nslice
587 drape_ply%IPID = xnum_drape(index(i))%DRAPE_PLY(jj)%IPID
588 ALLOCATE(drape_ply%IDRAPE(nslice,2), drape_ply%RDRAPE(nslice,2))
590 drape_ply%RDRAPE = zero
592 drape_ply%IDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,1)
593 drape_ply%IDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,2)
594 drape_ply%RDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,1)
595 drape_ply%RDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,2)
601 iworksh(1,numelc + i)= inum_worksh(1,index(i))
602 iworksh(2,numelc + i)= inum_worksh(2,index(i))
603 iworksh(3,numelc + i)= inum_worksh(3,index(i))
604 IF (nperturb > 0)
THEN
605 DO ipert = 1, nperturb
606 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
609 sh3ang(i)=angle(index(i))
613 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
615 ptsh3n(i) = inum_ptsh3n(index(i))
621 sh3tree(k,i)=istor(k,index(i))
626 sh3trim(i)=istor(ksh3tree+1,index(i))
640 . sh3tree(1,i)=itr1(sh3tree(1,i))
642 . sh3tree(2,i)=itr1(sh3tree(2,i))
651 IF(igrsurf(i)%ELTYP(j) == 7)
652 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
659 nn=igrsh3n(i)%NENTITY
661 igrsh3n(i)%ENTITY(j) = itr1(igrsh3n(i)%ENTITY(j))
667 DO i=1,3*numeltg+3*numeltg6
668 IF(nod2eltg(i) /= 0)nod2eltg(i)=itr1(nod2eltg(i))
676 jj0=itri(1,index(i-1))
678 jj =itri(2,index(i-1))
680 jj1=itri(3,index(i-1))
682 jj2=itri(4,index(i-1))
684 jj3=itri(5,index(i-1))
686 jj4=itri(6,index(i-1))
689 jj5=itri(7,index(i-1))
692 jj6=itri(8,index(i-1))
705 eadd(nd+1) = numeltg+1
708 pid = ixtg(nixtg-1,i)
710 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
712 . msgtype=msgwarning,
720 IF (nperturb > 0)
THEN
721 IF (
ALLOCATED(xnum_rnoise))
DEALLOCATE(xnum_rnoise)
726 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
728 ie = xnum_drapeg%INDX(i)
730 npt_drp = xnum_drape(i)%NPLY_DRAPE
732 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE)
733 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE)
735 DEALLOCATE(xnum_drape(i)%DRAPE_PLY,xnum_drape(i)%INDX_PLY)
737 DEALLOCATE( xnum_drape ,xnum_drapeg%INDX)
739 DEALLOCATE( xnum_drape )
741 IF(
ALLOCATED(inum_ptsh3n))
DEALLOCATE(inum_ptsh3n)
744 DEALLOCATE(inum_worksh, angle)