38 1 X ,IRECTS ,IRECTM ,NRTS ,NRTM ,
39 2 GEO ,IXS ,PM ,IXC ,IXTG ,
40 3 NINT ,NTY ,NOINT ,NSN ,NSV ,
41 4 IELES ,INTTH ,AREAS ,NMN ,MSR ,
42 5 KNOD2ELS ,KNOD2ELC ,KNOD2ELTG ,NOD2ELS ,NOD2ELC ,
43 6 NOD2ELTG ,IGRSURFS ,IGRSURFM ,IELEM21 ,
44 7 THK ,AS ,BS ,IXS10 ,IXS16 ,
45 8 IXS20 ,ID ,TITR ,IGEO ,SH4TREE ,
46 9 SH3TREE ,IPART ,IPARTC ,IPARTTG ,PM_STACK ,
47 A IWORKSH ,INTFRIC ,TAGPRT_FRIC,IPARTFRICS,IPARTFRICM,
48 B INTBUF_FRIC_TAB,IPARTS)
56 use element_mod ,
only :nixs,nixc,nixtg
60#include "implicit_f.inc"
67#include "remesh_c.inc"
71 INTEGER NRTS, NRTM, NINT, NTY, NOINT, NSN, NMN
72 INTEGER ,
INTENT(IN) :: INTFRIC
73 INTEGER IRECTS(4,*), IRECTM(4,*), IXS(NIXS,*), IXC(NIXC,*),
74 . NSV(*), IXTG(NIXTG,*),
75 . KNOD2ELS(*), KNOD2ELC(*), KNOD2ELTG(*), NOD2ELS(*), NOD2ELC(*),
77 . INTTH, IELES(*), MSR(*), IELEM21(*), IXS10(*),
78 . IXS16(*), IXS20(*),IGEO(*),SH3TREE(KSH3TREE,*), SH4TREE(KSH4TREE,*),
79 . IPART(LIPART1,*),IPARTC(*),IPARTTG(*),IWORKSH(*)
82 . x(3,*), pm(npropm,*), geo(npropg,*), areas(*),thk(*),
83 . as(*), bs(*),pm_stack(*)
85 CHARACTER(LEN=NCHARTITLE) :: TITR
86 TYPE (SURF_) :: IGRSURFS
87 TYPE (SURF_) :: IGRSURFM
88 TYPE(INTBUF_FRIC_STRUCT_),
INTENT(INOUT) :: INTBUF_FRIC_TAB(NINTERFRIC)
89 INTEGER,
INTENT(INOUT) :: IPARTFRICS(NSN),IPARTFRICM(NRTM)
90 INTEGER,
INTENT(IN) :: TAGPRT_FRIC(NPART)
91 INTEGER,
DIMENSION(NUMELS),
INTENT(IN) :: IPARTS
95 INTEGER I, J, INRT, NELS, NELC, NELTG, IE, II, MAT,N1,N2,N3,N4
96 INTEGER ITMP(NUMNOD),NLEV, MYLEV,IP,NELEM,STAT,IPG,IPL,IPFMAX,IPFLMAX
97 INTEGER,
DIMENSION(:),
ALLOCATABLE ::INRTIE
100 .
area,sx1,sy1,sz1,sx2,sy2,sz2,sx3,sy3,sz3
102 INTEGER :: NB_CONTRIB
103 INTEGER,
DIMENSION(:),
ALLOCATABLE :: CONTRIB_KEY, CONTRIB_VALUE
107 nelem = numelc+numeltg+numels+numelr
108 + + numelp+numelt+numelq+numelx+numelig3d
109 ALLOCATE(inrtie(nelem),stat=stat)
110 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
114 ALLOCATE(contrib_key(nelem),contrib_value(nelem))
123 CALL inelts(x ,irects,ixs ,nint,nels ,
124 . inrt ,
area ,noint,0 ,igrsurfs%ELTYP,
128 IF(intth > 0) inrtie(nels) = inrt
131 CALL ineltc(nelc ,neltg ,inrt ,igrsurfs%ELTYP, igrsurfs%ELEM)
133 ieles(i)=neltg+numels+numelc
143 CALL insol3(x,irects,ixs,nint,nels,inrt,
144 .
area,noint,knod2els ,nod2els ,0 ,ixs10,
146 IF(nels/=0) ieles(i)=nels
150 CALL incoq3(irects,ixc ,ixtg ,nint ,nelc ,
151 . neltg,inrt,geo ,pm ,knod2elc ,
152 . knod2eltg ,nod2elc ,nod2eltg,thk,nty,igeo ,
153 . pm_stack , iworksh )
160 IF(nels+nelc+neltg==0)
THEN
164 . anmode=aninfo_blind_2,
172 . anmode=aninfo_blind_2,
182 CALL inelts(x ,irectm,ixs ,nint,nels ,
183 . inrt ,
area ,noint,0 ,igrsurfm%ELTYP,
190 ipg = tagprt_fric(ip)
193 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
194 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
200 CALL ineltc(nelc ,neltg ,inrt ,igrsurfm%ELTYP, igrsurfm%ELEM)
202 ielem21(numels+numelq+numelc+numelt
203 . +numelp+numelr+neltg)=1
207 ipg = tagprt_fric(ip)
210 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
211 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
217 ielem21(numels+numelq+nelc)=1
221 ipg = tagprt_fric(ip)
224 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
225 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
235 CALL insol3(x,irectm,ixs,nint,nels,inrt,
236 .
area,noint,knod2els ,nod2els ,0 ,ixs10,
241 CALL incoq3(irectm,ixc ,ixtg ,nint ,nelc ,
242 . neltg,inrt,geo ,pm ,knod2elc ,
243 . knod2eltg ,nod2elc ,nod2eltg,thk,nty,igeo,
244 . pm_stack , iworksh )
246 IF(nels+nelc+neltg==0)
THEN
251 . anmode=aninfo_blind_2,
259 . anmode=aninfo_blind_2,
271 ipg = tagprt_fric(ip)
274 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
275 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
281 ielem21(numels+numelq+numelc+numelt
282 . +numelp+numelr+neltg)=1
286 ipg = tagprt_fric(ip)
289 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
290 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
296 ielem21(numels+numelq+nelc)=1
300 ipg = tagprt_fric(ip)
303 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
304 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
322 irectm(j,i)=itmp(irectm(j,i))
340 nb_contrib = nb_contrib + 1
342 contrib_key(nb_contrib) = ixc(nixc,ie)
343 contrib_value(nb_contrib) = ie
348 ie = contrib_value(j)
349 sx1 = x(1,ixc(4,ie)) - x(1,ixc(2,ie))
350 sy1 = x(2,ixc(4,ie)) - x(2,ixc(2,ie))
351 sz1 = x(3,ixc(4,ie)) - x(3,ixc(2,ie))
352 sx2 = x(1,ixc(5,ie)) - x(1,ixc(3,ie))
353 sy2 = x(2,ixc(5,ie)) - x(2,ixc(3,ie))
354 sz2 = x(3,ixc(5,ie)) - x(3,ixc(3,ie))
355 sx3 = sy1*sz2 - sz1*sy2
356 sy3 = sz1*sx2 - sx1*sz2
357 sz3 = sx1*sy2 - sy1*sx2
358 area = one_over_8*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
359 areas(i) = areas(i) +
area
362 as(i)= as(i)+pm(75,mat)*
area
363 bs(i)= bs(i)+pm(76,mat)*
area
369 DO j= knod2eltg(nsv(i))+1,knod2eltg(nsv(i)+1)
370 nb_contrib = nb_contrib + 1
372 contrib_key(nb_contrib) = ixtg(nixtg,ie)
373 contrib_value(nb_contrib) = ie
379 ie = contrib_value(j)
380 sx1 = x(1,ixtg(3,ie)) - x(1,ixtg(2,ie))
381 sy1 = x(2,ixtg(3,ie)) - x(2,ixtg(2,ie))
382 sz1 = x(3,ixtg(3,ie)) - x(3,ixtg(2,ie))
383 sx2 = x(1,ixtg(4,ie)) - x(1,ixtg(2,ie))
384 sy2 = x(2,ixtg(4,ie)) - x(2,ixtg(2,ie))
385 sz2 = x(3,ixtg(4,ie)) - x(3,ixtg(2,ie))
386 sx3 = sy1*sz2 - sz1*sy2
387 sy3 = sz1*sx2 - sx1*sz2
388 sz3 = sx1*sy2 - sy1*sx2
389 area = one_over_6*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
390 areas(i) = areas(i)+
area
393 as(i)= as(i)+pm(75,mat)*
area
394 bs(i)= bs(i)+pm(76,mat)*
area
396 as(i)=as(i)/
max(em20,areas(i))
397 bs(i)=bs(i)/
max(em20,areas(i))
406 DO j= knod2elc(nsv(i))+1,knod2elc(nsv(i)+1)
407 nb_contrib = nb_contrib + 1
409 contrib_key(nb_contrib) = ixc(nixc,ie)
410 contrib_value(nb_contrib) = ie
415 ie = contrib_value(j)
420 IF(mylev < 0) mylev=-(mylev+1)
423 sx1 = x(1,ixc(4,ie)) - x(1,ixc(2,ie))
424 sy1 = x(2,ixc(4,ie)) - x(2,ixc(2,ie))
425 sz1 = x(3,ixc(4,ie)) - x(3,ixc(2,ie))
426 sx2 = x(1,ixc(5,ie)) - x(1,ixc(3,ie))
427 sy2 = x(2,ixc(5,ie)) - x(2,ixc(3,ie))
428 sz2 = x(3,ixc(5,ie)) - x(3,ixc(3,ie))
429 sx3 = sy1*sz2 - sz1*sy2
430 sy3 = sz1*sx2 - sx1*sz2
431 sz3 = sx1*sy2 - sy1*sx2
432 area = one_over_8*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
433 areas(i) = areas(i) +
area
436 as(i)= as(i)+pm(75,mat)*
area
444 DO j= knod2eltg(nsv(i))+1,knod2eltg(nsv(i)+1)
445 nb_contrib = nb_contrib + 1
447 contrib_key(nb_contrib) = ixtg(nixtg,ie)
448 contrib_value(nb_contrib) = ie
452 ie = contrib_value(j)
456 IF(mylev < 0) mylev=-(mylev+1)
459 sx1 = x(1,ixtg(3,ie)) - x(1,ixtg(2,ie))
460 sy1 = x(2,ixtg(3,ie)) - x(2,ixtg(2,ie))
461 sz1 = x(3,ixtg(3,ie)) - x(3,ixtg(2,ie))
462 sx2 = x(1,ixtg(4,ie)) - x(1,ixtg(2,ie))
463 sy2 = x(2,ixtg(4,ie)) - x(2,ixtg(2,ie))
464 sz2 = x(3,ixtg(4,ie)) - x(3,ixtg(2,ie))
465 sx3 = sy1*sz2 - sz1*sy2
466 sy3 = sz1*sx2 - sx1*sz2
467 sz3 = sx1*sy2 - sy1*sx2
468 area = one_over_6*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
469 areas(i) = areas(i)+
area
472 as(i)= as(i)+pm(75,mat)*
area
473 bs(i)= bs(i)+pm(76,mat)*
area
477 as(i)=as(i)/
max(em20,areas(i))
478 bs(i)=bs(i)/
max(em20,areas(i))
489 DO j= knod2els(nsv(i))+1,knod2els(nsv(i)+1)
490 nb_contrib = nb_contrib + 1
492 contrib_key(nb_contrib) = ixs(nixs,ie)
493 contrib_value(nb_contrib) = ie
497 ie = contrib_value(j)
504 sx1 = x(1,n3) - x(1,n1)
505 sy1 = x(2,n3) - x(2,n1)
506 sz1 = x(3,n3) - x(3,n1)
507 sx2 = x(1,n4) - x(1,n2)
508 sy2 = x(2,n4) - x(2,n2)
509 sz2 = x(3,n4) - x(3,n2)
510 sx3 = sy1*sz2 - sz1*sy2
511 sy3 = sz1*sx2 - sx1*sz2
512 sz3 = sx1*sy2 - sy1*sx2
513 area = one_over_8*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
514 areas(i) = areas(i) +
area
517 as(i)= as(i)+pm(75,mat)*
area
518 bs(i)= bs(i)+pm(76,mat)*
area
521 as(i)=as(i)/
max(em20,areas(i))
522 bs(i)=bs(i)/
max(em20,areas(i))
528 DEALLOCATE(contrib_key,contrib_value)
537 DO j= knod2els(nsv(i))+1,knod2els(nsv(i)+1)
540 ipg = tagprt_fric(ip)
541 IF(ipg > 0 .AND. ip > ipfmax)
THEN
543 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
544 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
552 ipartfrics(i) = ipflmax
558 IF(numelc /= 0 .OR. numeltg /= 0)
THEN
562 DO j= knod2elc(nsv(i))+1,knod2elc(nsv(i)+1)
565 ipg = tagprt_fric(ip)
566 IF(ipg > 0 .AND. ip > ipfmax)
THEN
568 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
569 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
577 DO j= knod2eltg(nsv(i))+1,knod2eltg(nsv(i)+1)
580 ipg = tagprt_fric(ip)
581 IF(ipg > 0.AND.ip > ipfmax)
THEN
583 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
584 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
593 ipartfrics(i) = ipflmax