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,
78#include "implicit_f.inc"
82#include "vect01_c.inc"
84#include "com_xfem1.inc"
86#include "remesh_c.inc"
95 INTEGER IXC(NIXC,*),ISEL(*),INUM(9,*),IPARTC(*), ISHEOFF(*),
96 . EADD(*),ITR1(*),(*),ITRI(8,*),
98 . IGEO(NPROPGI,*),IPM(NPROPMI,*),IPART(LIPART1,*),
99 . SH4TREE(KSH4TREE,*), NOD2ELC(*), SH4TRIM(*),
100 . TAGPRT_SMS(*) ,LGAUGE(3,*),
102 INTEGER ,
DIMENSION(NUMELC) ,
INTENT(INOUT):: PTSHEL
103 INTEGER ,
INTENT(IN) :: DAMP_RANGE_PART(NPART)
106 . PM(NPROPM,*), GEO(NPROPG,*),XNUM(*),THK(*), RNOISE(NPERTURB,*),
109 TYPE (STACK_PLY) :: STACK
110 TYPE (DRAPE_) ,
TARGET :: DRAPE (NUMELC_DRAPE + NUMELTG_DRAPE)
112 TYPE (DRAPE_) ,
DIMENSION(:),
ALLOCATABLE :: XNUM_DRAPE
113 TYPE (DRAPEG_) :: XNUM_DRAPEG
114 TYPE (MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
116 TYPE (GROUP_) ,
DIMENSION(NGRSHEL) :: IGRSH4N
117 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
121 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ISTOR,INUM_DRAPE
123 INTEGER I, K, MLN, NG, ISSN, NPN, IFIO, NN,L,IGTYP,
124 . mln0, issn0, ic, n, mid, mid0, pid, pid0, istr0,
125 . ihbe, ihbe0, ii, j, midn, pidn, nsg, nel, ne1,
126 . ithk, ithk0, ipla, ipla0,ii1,jj1,ii2,jj2,jj,ii3,jj3,ngrou,
127 . mskmln,msknpn,mskihb,mskisn,mskirb,mode,icsen,irb,
128 . mskist,mskipl,mskith,mskmid,mskpid,mskirp,msktyp,irep,
129 . ipt,imatly,ii0,jj0,ilev,prt,iadm,dir,ii4,jj4,n1,
130 . nfail,ifail,ixfem,inum_r2r(1+r2r_siu*numelc),
132 . isubstack,iigeo,iadi ,ippid,nb_law58,ipmat,
133 . ipert,stat,ip,nslice,kk,npt_drp,ie,ie0
134 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: INUM_WORKC
135 my_real,
DIMENSION(:),
ALLOCATABLE :: ANGLE
136 EXTERNAL MY_SHIFTL,MY_SHIFTR,MY_AND
137 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND,IPIDL
138 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX2, INUM_PTSHEL
140 my_real,
DIMENSION(:,:),
ALLOCATABLE :: XNUM_RNOISE
142 TYPE (DRAPE_PLY_) ,
POINTER :: DRAPE_PLY
145 DATA mskmln /o
'07770000000'/
146 DATA msktyp /o
'00007770000'/
147 DATA mskihb /o
'00000007000'/
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'/
163 ALLOCATE(angle(numelc))
164 ALLOCATE(inum_workc(3,numelc))
166 ALLOCATE( istor(ksh4tree+1,numelc) )
168 ALLOCATE( istor(0,0) )
170 IF (ndrape > 0 .AND. numelc_drape > 0)
THEN
171 ALLOCATE(xnum_drape(numelc))
172 ALLOCATE(xnum_drapeg%INDX(numelc))
177 npt_drp = drape(ie)%NPLY_DRAPE
179 ALLOCATE(xnum_drape(i)%INDX_PLY(npt))
180 ALLOCATE(xnum_drape(i)%DRAPE_PLY(npt_drp))
181 xnum_drape(i)%INDX_PLY = 0
182 xnum_drape(i)%INDX_PLY = 0
184 nslice = drape(ie)%DRAPE_PLY(j)%NSLICE
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_ptshel(numelc))
198 ALLOCATE(inum_ptshel(0))
201 IF (nperturb > 0)
THEN
202 ALLOCATE(xnum_rnoise(nperturb,numelc),stat
203 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
208 CALL my_alloc(index2,numelc)
210 IF(ndrape > 0 .AND. numelc_drape > 0)
THEN
226 IF (nsubdom>0) inum_r2r(i) =
tag_elcf(i)
227 inum_workc(1,i) = iworksh(1,i)
228 inum_workc(2,i) = iworksh(2,i)
229 inum_workc(3,i) = iworksh(3,i)
231 DO ipert = 1, nperturb
232 xnum_rnoise(ipert,i) = rnoise(ipert,i
238 xnum_drapeg%INDX(i) = drapeg%INDX(i)
241 xnum_drape(i)% NPLY = npt
243 npt = drape(ie)%NPLY_DRAPE
244 xnum_drape(i)%NPLY_DRAPE = npt
245 xnum_drape(i)%THICK = drape(ie)%THICK
247 drape_ply => drape(ie)%DRAPE_PLY(jj)
248 nslice = drape_ply%NSLICE
249 xnum_drape(i)%DRAPE_PLY(jj)%NSLICE = nslice
250 xnum_drape(i)%DRAPE_PLY(jj)%IPID = drape_ply%IPID
252 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,1)=drape_ply%IDRAPE(kk,1)
253 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,2)=drape_ply%IDRAPE
254 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,1)=drape_ply%RDRAPE(kk,1)
255 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,2)=drape_ply%RDRAPE
257 DEALLOCATE(drape_ply%IDRAPE, drape_ply%RDRAPE)
259 DEALLOCATE(drape(ie)%DRAPE_PLY)
260 DEALLOCATE(drape(ie)%INDX_PLY)
278 IF (nsubdom>0) inum_r2r(i) =
tag_elcf(i)
279 inum_workc(1,i) = iworksh(1,i)
280 inum_workc(2,i) = iworksh(2,i)
281 inum_workc(3,i) = iworksh(3,i)
282 IF (nperturb > 0)
THEN
283 DO ipert = 1, nperturb
284 xnum_rnoise(ipert,i) = rnoise(ipert,i)
290 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
291 inum_ptshel(1:numelc) = ptshel(1:numelc)
297 istor(k,i)=sh4tree(k,i)
302 istor(ksh4tree+1,i)=sh4trim(i)
326 IF(ilev<0)ilev=-ilev-1
333 mln = nint(pm(19,mid))
335 jthe = nint(pm(71,mid))
337 ihbe = nint(geo(171,pid))
338 ithk = nint(geo(35,pid))
339 ipla = nint(geo(39,pid))
341 ishxfem_ply = igeo(19,pid)
345 IF (igtyp == 11)
THEN
347 imatly = igeo(100+ipt,pid)
348 nfail =
max(nfail,mat_param(imatly)%NFAIL)
352 ixfem = mat_param(mid)%IXFEM
354 ELSEIF(igtyp == 17)
THEN
356 isubstack =iworksh(3, ii)
363 ipidl = stack%IGEO(ippid + ipt ,isubstack)
364 imatly = igeo(101,ipidl)
365 nfail =
max(nfail,mat_param(imatly)%NFAIL)
367 ELSEIF(igtyp == 51 )
THEN
373 isubstack = iworksh(3, ii)
376 ipidl = stack%IGEO(ippid + ipt,isubstack)
377 imatly = igeo(101,ipidl)
378 nfail =
max(nfail,mat_param(imatly)%NFAIL)
380 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
383 IF (nb_law58 == npn)
THEN
385 ELSEIF (nb_law58 > 0)
THEN
388 ELSEIF(igtyp == 52)
THEN
394 isubstack = iworksh(3, ii)
398 ipidl = stack%IGEO(ippid + ipt,isubstack)
399 imatly = stack%IGEO(ipmat + ipt,isubstack)
400 nfail =
max(nfail,mat_param(imatly)%NFAIL)
402 IF (nint(pm(19,imatly)) == 58) nb_law58 = nb_law58 + 1
405 IF (nb_law58 == npn)
THEN
407 ELSEIF (nb_law58 > 0)
THEN
412 nfail = mat_param(mid)%NFAIL
415 ixfem = mat_param(mid)%IXFEM
422 IF (nfail > 0) ifail = 1
425 iexpan = ipm(218, mid)
427 IF (icsen > 0) icsen=1
428 IF(npn == 0.AND.(mln == 36.OR.mln == 86))
THEN
432 ELSEIF(npn == 0.AND.mln == 2)
THEN
440 ELSEIF(mln == 32)
THEN
445 istrain = nint(geo(11,pid))
446 IF(mln == 19.OR.mln>=25.OR.mln == 15)istrain = 1
447 issn = iabs(nint(geo(3,pid)))
458 IF(tagprt_sms(ipartc(ii))/=0)jsms=1
469 istrain= my_shiftl(istrain,3)
470 issn = my_shiftl(issn,6)
471 ihbe = my_shiftl(ihbe,9)
472 igtyp = my_shiftl(igtyp,12)
473 mln = my_shiftl(mln,21)
474 itri(3,i)=ipla+istrain+issn+ihbe+igtyp+mln
480 ishxfem_ply = my_shiftl(ishxfem_ply,10)
481 ifail = my_shiftl(ifail,11)
482 iexpan = my_shiftl(iexpan,14)
483 jthe = my_shiftl(jthe,15)
484 icsen= my_shiftl(icsen,16)
485 npn = my_shiftl(npn,17)
486 irep = my_shiftl(irep,26)
487 ithk = my_shiftl(ithk,30)
488 IF(ixfem > 0) ixfem = my_shiftl(ixfem,9)
490 itri(4,i)=ithk+irep+npn+icsen+jthe+iexpan+irb+ifail+ishxfem_ply
500 itri(7,i) = iworksh(2,i)
502 itri(8,i )= damp_range_part(ipartc(ii))
506 CALL my_orders( mode, work, itri, index, numelc , 8)
509 ipartc(i) =inum(1,index(i))
510 isheoff(i)=inum(2,index(i))
511 IF (nsubdom>0)
tag_elcf(i)=inum_r2r(index(i))
512 thk(i) =xnum(index(i))
525 IF(ndrape > 0 .AND. numelc_drape > 0 )
THEN
528 iworksh(1,i)= inum_workc(1,index(i))
529 iworksh(2,i)= inum_workc(2,index(i))
530 iworksh(3,i)= inum_workc(3,index(i))
531 IF (nperturb > 0)
THEN
532 DO ipert = 1, nperturb
533 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
536 sh4ang(i)=angle(index(i))
538 ie0 = xnum_drapeg%INDX(index(i))
542 npt = xnum_drape(index(i))% NPLY
545 ALLOCATE(drape(ie)%INDX_PLY(npt))
546 drape(ie)%INDX_PLY(1:npt) = xnum_drape(index(i))%INDX_PLY(1:npt)
547 npt = xnum_drape(index(i))%NPLY_DRAPE
548 ALLOCATE(drape(ie)%DRAPE_PLY(npt))
549 drape(ie)%NPLY_DRAPE= npt
550 drape(ie)%THICK = xnum_drape(index(i))%THICK
552 drape_ply => drape(ie)%DRAPE_PLY(jj)
553 nslice = xnum_drape(index(i))%DRAPE_PLY(jj)%NSLICE
554 drape_ply%NSLICE = nslice
555 drape_ply%IPID = xnum_drape(index(i))%DRAPE_PLY(jj)%IPID
556 ALLOCATE(drape_ply%IDRAPE(nslice,2), drape_ply%RDRAPE(nslice,2))
558 drape_ply%IDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,1)
559 drape_ply%IDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,2)
560 drape_ply%RDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,1)
561 drape_ply%RDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,2)
567 iworksh(1,i)= inum_workc(1,index(i))
568 iworksh(2,i)= inum_workc(2,index(i))
569 iworksh(3,i)= inum_workc(3,index(i))
570 IF (nperturb > 0)
THEN
571 DO ipert = 1, nperturb
575 sh4ang(i)=angle(index(i))
578 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
580 ptshel(i) = inum_ptshel(index(i))
587 sh4tree(k,i)=istor(k,index(i))
592 sh4trim(i)=istor(ksh4tree+1,index(i))
606 IF(sh4tree(1,i) /= 0)
607 . sh4tree(1,i)=itr1(sh4tree(1,i))
608 IF(sh4tree(2,i) /= 0)
609 . sh4tree(2,i)=itr1(sh4tree(2,i))
618 IF(igrsurf(i)%ELTYP(j) == 3)
619 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
628 IF(n1 > 0) lgauge(3,i)=-itr1(n1
635 nn=igrsh4n(i)%NENTITY
637 igrsh4n(i)%ENTITY(j) = itr1(igrsh4n(i)%ENTITY(j))
644 IF (nod2elc(i) /= 0) nod2elc(i)=itr1(nod2elc(i))
653 jj0=itri(1,index(i-1))
655 jj =itri(2,index(i-1))
657 jj1=itri(3,index(i-1))
659 jj2=itri(4,index(i-1))
661 jj3=itri(5,index(i-1))
663 jj4=itri(6,index(i-1))
666 jj5=itri(7,index(i-1))
669 jj6=itri(8,index(i-1))
673 * ii2/=jj2.OR.ii3 /= jj3.OR.ii4 /= jj4.OR.ii5 /= jj5 .or.
679 eadd(nd+1) = numelc+1
682 IF (nperturb > 0)
THEN
683 IF (
ALLOCATED(xnum_rnoise))
DEALLOCATE(xnum_rnoise)
688 IF(ndrape > 0 .AND. numelc_drape > 0)
THEN
690 ie = xnum_drapeg%INDX(i)
692 npt_drp = xnum_drape(i)%NPLY_DRAPE
694 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE)
695 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE)
697 DEALLOCATE(xnum_drape(i)%DRAPE_PLY,xnum_drape(i)%INDX_PLY)
699 DEALLOCATE( xnum_drape ,xnum_drapeg%INDX)
701 DEALLOCATE( xnum_drape )
703 IF(
ALLOCATED(inum_ptshel))
DEALLOCATE(inum_ptshel)
705 DEALLOCATE(angle,inum_workc)