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,
58 use element_mod ,
only : nixtg
78#include "implicit_f.inc"
84#include "com_xfem1.inc"
86#include "vect01_c.inc"
87#include "remesh_c.inc"
95 . ixtg(nixtg,*),isel(*),inum(10,*),nd,icnod(*),ixtg1(4,*),
96 . eadd(*), itr1(*), index(*), itri(8,*),iparttg(*),
97 . cep(*), xep(*),itrioff(*),
98 . igeo(npropgi,*),ipm(npropmi,*), ipart(lipart1,*),
99 . sh3tree(ksh3tree,*), nod2eltg(*), sh3trim(*),
100 . tagprt_sms(*),iworksh(3,*)
101 INTEGER ,
DIMENSION(NUMELTG) ,
INTENT(INOUT):: PTSH3N
102 INTEGER ,
INTENT(IN) :: DAMP_RANGE_PART(NPART)
104 . pm(npropm,*), geo(npropg,*), xnum(*), thk(*), rnoise
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,XNUM_DRAPEG
111 TYPE (DRAPE_) ,
DIMENSION(:),
ALLOCATABLE :: XNUM_DRAPE
112 TYPE (DRAPE_PLY_) ,
POINTER :: DRAPE_PLY
114 TYPE (GROUP_) ,
DIMENSION(NGRSH3N) :: IGRSH3N
115 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
116 TYPE(matparam_struct_) ,
DIMENSION(NUMMAT),
INTENT(IN) :: MAT_PARAM
120 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ISTOR
122 INTEGER I, K, MLN, ISSN, NPN,NN,ICO,ID,
125 . ipla, ii1, jj1, ii2, jj2, ii, jj,
126 . igtyp, ii3, jj3,neltg3,
127 . mskmln, msknpn, mskisn, mode,icsen,ifail,nfail,
128 . mskist, mskipl, mskith, mskmid,mskpid,mskirp,msktyp,irep,
129 . ii0,jj0,ilev,prt,iadm,mskirb,irb, ii4, jj4,
130 . ixfem,iwarnhb,ipt,imatly,ipid,ish3n,
131 . ii5,jj5,ii6,jj6,isubstack,ippid,
132 . nb_law58,ipmat,ipert,stat,nslice,kk,npt_drp,ie,
135 CHARACTER(LEN=NCHARTITLE) :: TITR
137 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX2, INUM_PTSH3N
138 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: INUM_WORKSH
140 EXTERNAL MY_SHIFTL,MY_SHIFTR,MY_AND
141 INTEGER MY_SHIFTL,MY_SHIFTR,MY_AND
142 my_real,
DIMENSION(:,:),
ALLOCATABLE :: XNUM_RNOISE
143 my_real,
DIMENSION(:),
ALLOCATABLE :: ANGLE
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'/
161 ALLOCATE(angle(numeltg))
162 ALLOCATE(inum_worksh(3,numeltg))
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 ie = drapeg%INDX(numelc + i)
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
183 nslice = drape(ie)%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
211 CALL my_alloc(index2,numeltg)
212 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
229 inum_worksh(1,i) = iworksh(1,numelc + i)
230 inum_worksh(2,i) = iworksh(2,numelc + i)
231 inum_worksh(3,i) = iworksh(3,numelc + i)
232 IF (nperturb > 0)
THEN
233 DO ipert = 1, nperturb
234 xnum_rnoise(ipert,i) = rnoise(ipert,i)
239 ie = drapeg%INDX(numelc + i)
240 xnum_drapeg%INDX(i) = ie
243 xnum_drape(i)%NPLY = npt
244 xnum_drape(i)%INDX_PLY(1:npt) = drape(ie)%INDX_PLY(1:npt)
245 npt = drape(ie)%NPLY_DRAPE
246 xnum_drape(i)%NPLY_DRAPE = npt
247 xnum_drape(i)%THICK = drape(ie)%THICK
249 drape_ply => drape(ie)%DRAPE_PLY(jj)
250 nslice = drape_ply%NSLICE
251 xnum_drape(i)%DRAPE_PLY(jj)%NSLICE = nslice
252 xnum_drape(i)%DRAPE_PLY(jj)%IPID = drape_ply%IPID
254 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,1)=drape_ply%IDRAPE(kk,1)
255 xnum_drape(i)%DRAPE_PLY(jj)%IDRAPE(kk,2)=drape_ply%IDRAPE(kk,2)
256 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,1)=drape_ply%RDRAPE(kk,1)
257 xnum_drape(i)%DRAPE_PLY(jj)%RDRAPE(kk,2)=drape_ply%RDRAPE(kk,2)
259 DEALLOCATE(drape_ply%IDRAPE, drape_ply%RDRAPE)
261 DEALLOCATE(drape(ie)%DRAPE_PLY)
262 DEALLOCATE(drape(ie)%INDX_PLY)
281 inum_worksh(1,i) = iworksh(1,numelc + i)
282 inum_worksh(2,i) = iworksh(2,numelc + i)
283 inum_worksh(3,i) = iworksh(3,numelc + i)
284 IF (nperturb > 0)
THEN
285 DO ipert = 1, nperturb
286 xnum_rnoise(ipert,i) = rnoise(ipert,i)
292 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
293 inum_ptsh3n(1:numeltg) = ptsh3n(1:numeltg)
299 istor(k,i)=sh3tree(k,i)
304 istor(ksh3tree+1,i)=sh3trim(i)
313 DO 100 i = 1, numeltg
328 IF(ilev<0)ilev=-ilev-1
335 mln = nint(pm(19,mid))
336 IF(mln == 51)trimat=4
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)
353 ixfem = mat_param(mid)%IXFEM
355 ELSEIF (igtyp == 17)
THEN
356 npn = iworksh(1,numelc + ii)
357 isubstack =iworksh(3,numelc + ii)
363 ipid = stack%IGEO(ippid+ipt,isubstack)
364 imatly = igeo(101, ipid)
365 nfail =
max(nfail, mat_param(imatly)%NFAIL)
367 ELSEIF (igtyp == 51 )
THEN
372 npn = iworksh(1,numelc + ii)
373 isubstack =iworksh(3,numelc + ii)
376 ipid = stack%IGEO(ippid+ipt,isubstack)
377 imatly = igeo(101, ipid)
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
393 npn = iworksh(1,numelc + ii)
394 isubstack =iworksh(3,numelc + ii)
398 ipid = 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
414 ixfem = mat_param(mid)%IXFEM
421 IF (nfail > 0) ifail = 1
424 iexpan = ipm(218, mid)
426 IF(ish3n>3.AND.ish3n<=29)
THEN
428 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
430 . msgtype=msgwarning,
431 . anmode=aninfo_blind_2,
439 ithk = nint(geo(35,pid))
440 ipla = nint(geo(39,pid))
443 IF (icsen > 0) icsen=1
445 IF(npn==0.AND.(mln==36.OR.mln==86))
THEN
448 ELSEIF(npn==0.AND.mln==2)
THEN
461 istrain = nint(geo(11,pid))
462 IF(mln==19.OR.mln>=25.OR.mln==15)istrain = 1
463 issn = iabs(nint(geo(3,pid)))
474 IF(tagprt_sms(iparttg(ii))/=0)jsms=1
486 istrain= my_shiftl(istrain,3)
487 issn = my_shiftl(issn,6)
489 igtyp = my_shiftl(igtyp,9)
490 mln = my_shiftl(mln,18)
493 ico = my_shiftl(ico,29)
494 itri(3,i)=ipla+istrain+issn+igtyp+mln+ico
499 ifail = my_shiftl(ifail,4)
500 iexpan = my_shiftl(iexpan,5)
501 jthe = my_shiftl(jthe,6)
502 ish3n = my_shiftl(ish3n,11)
503 icsen = my_shiftl(icsen,16)
504 npn = my_shiftl(npn,17)
505 irep = my_shiftl(irep,26)
506 ithk = my_shiftl(ithk,30)
507 IF(ixfem > 0)ixfem = my_shiftl(ixfem,9)
509 itri(4,i)=ithk+irep+npn+icsen+ish3n+jthe+irb+ifail+ixfem
519 itri(8,i )= damp_range_part(iparttg(ii))
523 CALL my_orders( mode, work, itri, index, numeltg , 8)
526 iparttg(i)=inum(1,index(i))
527 thk(i) =xnum(index(i))
528 itrioff(i)=inum(2,index(i))
529 icnod(i) = inum(9,index(i))
539 ixtg(k,i)=inum(k+2,index(i))
544 neltg3 = numeltg-numeltg6
547 inum(1,ii)=ixtg1(1,i)
548 inum(2,ii)=ixtg1(2,i)
549 inum(3,ii)=ixtg1(3,i)
553 ixtg1(1,i)=inum(1,index(ii))
554 ixtg1(2,i)=inum(2,index(ii))
555 ixtg1(3,i)=inum(3,index(ii))
559 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
562 iworksh(1,numelc + i)= inum_worksh(1,index(i))
563 iworksh(2,numelc + i)= inum_worksh(2,index(i))
564 iworksh(3,numelc + i)= inum_worksh(3,index(i))
565 IF (nperturb > 0)
THEN
566 DO ipert = 1, nperturb
567 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
570 sh3ang(i)=angle(index(i))
572 ie0 = xnum_drapeg%INDX(index(i))
573 drapeg%INDX(numelc + i) = 0
576 npt = xnum_drape(index(i))%NPLY
578 drapeg%INDX(numelc + i)= ie
579 ALLOCATE(drape(ie)%INDX_PLY(npt))
580 drape(ie)%INDX_PLY(1:npt) = xnum_drape(index(i))%INDX_PLY(1:npt)
581 npt = xnum_drape(index(i))%NPLY_DRAPE
582 ALLOCATE(drape(ie)%DRAPE_PLY(npt))
583 drape(ie)%NPLY_DRAPE= npt
584 drape(ie)%THICK = xnum_drape(index(i))%THICK
586 drape_ply => drape(ie)%DRAPE_PLY(jj)
587 nslice = xnum_drape(index(i))%DRAPE_PLY(jj)%NSLICE
588 drape_ply%NSLICE = nslice
589 drape_ply%IPID = xnum_drape(index(i))%DRAPE_PLY(jj)%IPID
590 ALLOCATE(drape_ply%IDRAPE(nslice,2), drape_ply%RDRAPE(nslice,2))
592 drape_ply%RDRAPE = zero
594 drape_ply%IDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,1)
595 drape_ply%IDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%IDRAPE(kk,2)
596 drape_ply%RDRAPE(kk,1) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,1)
597 drape_ply%RDRAPE(kk,2) = xnum_drape(index(i))%DRAPE_PLY(jj)%RDRAPE(kk,2)
603 iworksh(1,numelc + i)= inum_worksh(1,index(i))
604 iworksh(2,numelc + i)= inum_worksh(2,index(i))
605 iworksh(3,numelc + i)= inum_worksh(3,index(i))
606 IF (nperturb > 0)
THEN
607 DO ipert = 1, nperturb
608 rnoise(ipert,i) = xnum_rnoise(ipert,index(i))
611 sh3ang(i)=angle(index(i))
615 IF(abs(isigi)==3.OR.abs(isigi)== 4.OR.abs(isigi)==5)
THEN
617 ptsh3n(i) = inum_ptsh3n(index(i))
623 sh3tree(k,i)=istor(k,index(i))
628 sh3trim(i)=istor(ksh3tree+1,index(i))
642 . sh3tree(1,i)=itr1(sh3tree(1,i))
644 . sh3tree(2,i)=itr1(sh3tree(2,i))
653 IF(igrsurf(i)%ELTYP(j) == 7)
654 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
661 nn=igrsh3n(i)%NENTITY
663 igrsh3n(i)%ENTITY(j) = itr1(igrsh3n(i)%ENTITY(j))
669 DO i=1,3*numeltg+3*numeltg6
670 IF(nod2eltg(i) /= 0)nod2eltg(i)=itr1(nod2eltg(i))
678 jj0=itri(1,index(i-1))
680 jj =itri(2,index(i-1))
682 jj1=itri(3,index(i-1))
684 jj2=itri(4,index(i-1))
686 jj3=itri(5,index(i-1))
688 jj4=itri(6,index(i-1))
691 jj5=itri(7,index(i-1))
694 jj6=itri(8,index(i-1))
707 eadd(nd+1) = numeltg+1
710 pid = ixtg(nixtg-1,i)
712 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
714 . msgtype=msgwarning,
722 IF (nperturb > 0)
THEN
723 IF (
ALLOCATED(xnum_rnoise))
DEALLOCATE(xnum_rnoise)
728 IF(ndrape > 0 .AND. numeltg_drape > 0)
THEN
730 ie = xnum_drapeg%INDX(i)
732 npt_drp = xnum_drape(i)%NPLY_DRAPE
734 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%RDRAPE)
735 DEALLOCATE(xnum_drape(i)%DRAPE_PLY(j)%IDRAPE)
737 DEALLOCATE(xnum_drape(i)%DRAPE_PLY,xnum_drape(i)%INDX_PLY)
739 DEALLOCATE( xnum_drape ,xnum_drapeg%INDX)
741 DEALLOCATE( xnum_drape )
743 IF(
ALLOCATED(inum_ptsh3n))
DEALLOCATE(inum_ptsh3n)
746 DEALLOCATE(inum_worksh, angle)