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)
59#include "implicit_f.inc"
66#include "remesh_c.inc"
70 INTEGER NRTS, NRTM, NINT, NTY, NOINT, NSN, NMN
71 INTEGER ,
INTENT(IN) :: INTFRIC
72 INTEGER IRECTS(4,*), IRECTM(4,*), IXS(NIXS,*), IXC(NIXC,*),
73 . NSV(*), IXTG(NIXTG,*),
74 . KNOD2ELS(*), KNOD2ELC(*), KNOD2ELTG(*), NOD2ELS(*), NOD2ELC(*),
76 . INTTH, IELES(*), MSR(*), IELEM21(*), IXS10(*),
77 . IXS16(*), IXS20(*),IGEO(*),SH3TREE(KSH3TREE,*), SH4TREE(KSH4TREE
81 . x(3,*), pm(npropm,*), geo(npropg,*), areas(*),thk(*),
82 . as(*), bs(*),pm_stack(*)
84 CHARACTER(LEN=NCHARTITLE) :: TITR
85 TYPE (SURF_) :: IGRSURFS
87 TYPE(INTBUF_FRIC_STRUCT_),
INTENT(INOUT) :: INTBUF_FRIC_TAB(NINTERFRIC)
88 INTEGER,
INTENT(INOUT) :: IPARTFRICS(NSN),IPARTFRICM()
89 INTEGER,
INTENT(IN) :: TAGPRT_FRIC(NPART)
90 INTEGER,
DIMENSION(NUMELS),
INTENT(IN) :: IPARTS
94 INTEGER I, J, INRT, NELS, NELC, NELTG, , II, MAT,N,LLT,L,N1,N2,N3,N4
95 INTEGER ITMP(NUMNOD),NLEV, MYLEV,IP,NELEM,,IPG,IPL,IPFMAX,IPFLMAX
96 INTEGER,
DIMENSION(:),
ALLOCATABLE ::INRTIE
99 .
area,sx1,sy1,sz1,sx2,sy2,sz2,sx3,sy3,sz3
101 INTEGER :: NB_CONTRIB
102 INTEGER,
DIMENSION(:),
ALLOCATABLE :: CONTRIB_KEY, CONTRIB_VALUE
106 nelem = numelc+numeltg+numels+numelr
107 + + numelp+numelt+numelq+numelx+numelig3d
108 ALLOCATE(inrtie(nelem),stat=stat)
109 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
113 ALLOCATE(contrib_key(nelem),contrib_value(nelem))
122 CALL inelts(x ,irects,ixs ,nint,nels ,
123 . inrt ,
area ,noint,0 ,igrsurfs%ELTYP,
127 IF(intth > 0) inrtie(nels) = inrt
130 CALL ineltc(nelc ,neltg ,inrt ,igrsurfs%ELTYP
132 ieles(i)=neltg+numels+numelc
142 CALL insol3(x,irects,ixs,nint,nels,inrt,
143 .
area,noint,knod2els
145 IF(nels/=0) ieles(i)=nels
149 CALL incoq3(irects,ixc ,ixtg ,nint ,nelc ,
150 . neltg,inrt,geo ,pm ,knod2elc ,
151 . knod2eltg ,nod2elc ,nod2eltg,thk,nty,igeo ,
152 . pm_stack , iworksh )
159 IF(nels+nelc+neltg==0)
THEN
163 . anmode=aninfo_blind_2,
171 . anmode=aninfo_blind_2,
181 CALL inelts(x ,irectm,ixs ,nint,nels ,
182 . inrt ,
area ,noint,0 ,igrsurfm%ELTYP,
189 ipg = tagprt_fric(ip)
192 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
193 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
199 CALL ineltc(nelc ,neltg ,inrt ,igrsurfm%ELTYP, igrsurfm%ELEM)
201 ielem21(numels+numelq+numelc+numelt
202 . +numelp+numelr+neltg)=1
209 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
210 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
216 ielem21(numels+numelq+nelc)=1
220 ipg = tagprt_fric(ip)
223 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
224 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
234 CALL insol3(x,irectm,ixs,nint,nels,inrt,
235 .
area,noint,knod2els ,nod2els ,0 ,ixs10,
240 CALL incoq3(irectm,ixc ,ixtg ,nint ,nelc ,
241 . neltg,inrt,geo ,pm ,knod2elc ,
242 . knod2eltg ,nod2elc ,nod2eltg,thk,nty,igeo,
243 . pm_stack , iworksh )
245 IF(nels+nelc+neltg==0)
THEN
250 . anmode=aninfo_blind_2,
258 . anmode=aninfo_blind_2,
270 ipg = tagprt_fric(ip)
273 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
274 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
280 ielem21(numels+numelq+numelc+numelt
281 . +numelp+numelr+neltg)=1
285 ipg = tagprt_fric(ip)
288 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
289 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
295 ielem21(numels+numelq+nelc)=1
299 ipg = tagprt_fric(ip)
302 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
303 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
321 irectm(j,i)=itmp(irectm(j,i))
338 DO j= knod2elc(nsv(i))+1,knod2elc(nsv(i)+1)
339 nb_contrib = nb_contrib + 1
341 contrib_key(nb_contrib) = ixc(nixc,ie)
342 contrib_value(nb_contrib) = ie
347 ie = contrib_value(j)
348 sx1 = x(1,ixc(4,ie)) - x(1,ixc(2,ie))
349 sy1 = x(2,ixc(4,ie)) - x(2,ixc(2,ie))
350 sz1 = x(3,ixc(4,ie)) - x(3,ixc(2,ie))
351 sx2 = x(1,ixc(5,ie)) - x(1,ixc(3,ie))
352 sy2 = x(2,ixc(5,ie)) - x(2,ixc(3,ie))
353 sz2 = x(3,ixc(5,ie)) - x(3,ixc(3,ie))
354 sx3 = sy1*sz2 - sz1*sy2
355 sy3 = sz1*sx2 - sx1*sz2
356 sz3 = sx1*sy2 - sy1*sx2
357 area = one_over_8*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
358 areas(i) = areas(i) +
area
361 as(i)= as(i)+pm(75,mat)*
area
362 bs(i)= bs(i)+pm(76,mat)*
area
368 DO j= knod2eltg(nsv(i))+1,knod2eltg(nsv(i)+1)
369 nb_contrib = nb_contrib + 1
371 contrib_key(nb_contrib) = ixtg(nixtg,ie)
372 contrib_value(nb_contrib) = ie
378 ie = contrib_value(j)
379 sx1 = x(1,ixtg(3,ie)) - x(1,ixtg(2,ie))
380 sy1 = x(2,ixtg(3,ie)) - x(2,ixtg(2,ie))
381 sz1 = x(3,ixtg(3,ie)) - x(3,ixtg(2,ie))
382 sx2 = x(1,ixtg(4,ie)) - x(1,ixtg(2,ie))
383 sy2 = x(2,ixtg(4,ie)) - x(2,ixtg(2,ie))
384 sz2 = x(3,ixtg(4,ie)) - x(3,ixtg(2,ie))
385 sx3 = sy1*sz2 - sz1*sy2
386 sy3 = sz1*sx2 - sx1*sz2
387 sz3 = sx1*sy2 - sy1*sx2
388 area = one_over_6*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
389 areas(i) = areas(i)+
area
392 as(i)= as(i)+pm(75,mat)*
area
393 bs(i)= bs(i)+pm(76,mat)*
area
395 as(i)=as(i)/
max(em20,areas(i))
396 bs(i)=bs(i)/
max(em20,areas(i))
405 DO j= knod2elc(nsv(i))+1,knod2elc(nsv(i)+1)
406 nb_contrib = nb_contrib + 1
408 contrib_key(nb_contrib) = ixc(nixc,ie)
409 contrib_value(nb_contrib) = ie
414 ie = contrib_value(j)
419 IF(mylev < 0) mylev=-(mylev+1)
422 sx1 = x(1,ixc(4,ie)) - x(1,ixc(2,ie))
424 sz1 = x(3,ixc(4,ie)) - x(3,ixc(2,ie))
425 sx2 = x(1,ixc(5,ie)) - x(1,ixc(3,ie))
426 sy2 = x(2,ixc(5,ie)) - x(2,ixc(3,ie))
427 sz2 = x(3,ixc(5,ie)) - x(3,ixc(3,ie))
428 sx3 = sy1*sz2 - sz1*sy2
429 sy3 = sz1*sx2 - sx1*sz2
430 sz3 = sx1*sy2 - sy1*sx2
431 area = one_over_8*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
432 areas(i) = areas(i) +
area
435 as(i)= as(i)+pm(75,mat)*
area
436 bs(i)= bs(i)+pm(76,mat)*
area
443 DO j= knod2eltg(nsv(i))+1,knod2eltg(nsv(i)+1)
444 nb_contrib = nb_contrib + 1
446 contrib_key(nb_contrib) = ixtg(nixtg,ie)
447 contrib_value(nb_contrib) = ie
451 ie = contrib_value(j)
455 IF(mylev < 0) mylev=-(mylev+1)
458 sx1 = x(1,ixtg(3,ie)) - x(1,ixtg(2,ie))
459 sy1 = x(2,ixtg(3,ie)) - x(2,ixtg(2,ie))
460 sz1 = x(3,ixtg(3,ie)) - x(3,ixtg(2,ie))
461 sx2 = x(1,ixtg(4,ie)) - x(1,ixtg(2,ie))
462 sy2 = x(2,ixtg(4,ie)) - x(2,ixtg(2,ie))
463 sz2 = x(3,ixtg(4,ie)) - x(3,ixtg(2,ie))
464 sx3 = sy1*sz2 - sz1*sy2
465 sy3 = sz1*sx2 - sx1*sz2
466 sz3 = sx1*sy2 - sy1*sx2
467 area = one_over_6*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
468 areas(i) = areas(i)+
area
471 as(i)= as(i)+pm(75,mat)*
area
472 bs(i)= bs(i)+pm(76,mat)*
area
476 as(i)=as(i)/
max(em20,areas(i))
477 bs(i)=bs(i)/
max(em20,areas(i))
485 !
area being a cumulative sum,
the order needs to be same
488 DO j= knod2els(nsv(i))+1,knod2els(nsv(i)+1)
489 nb_contrib = nb_contrib + 1
491 contrib_key(nb_contrib) = ixs(nixs,ie)
492 contrib_value(nb_contrib) = ie
496 ie = contrib_value(j)
503 sx1 = x(1,n3) - x(1,n1)
504 sy1 = x(2,n3) - x(2,n1)
505 sz1 = x(3,n3) - x(3,n1)
506 sx2 = x(1,n4) - x(1,n2)
507 sy2 = x(2,n4) - x(2,n2)
508 sz2 = x(3,n4) - x(3,n2)
509 sx3 = sy1*sz2 - sz1*sy2
510 sy3 = sz1*sx2 - sx1*sz2
511 sz3 = sx1*sy2 - sy1*sx2
512 area = one_over_8*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
513 areas(i) = areas(i) +
area
516 as(i)= as(i)+pm(75,mat)*
area
517 bs(i)= bs(i)+pm(76,mat)*
area
520 as(i)=as(i)/
max(em20,areas(i))
521 bs(i)=bs(i)/
max(em20,areas(i))
527 DEALLOCATE(contrib_key,contrib_value)
536 DO j= knod2els(nsv(i))+1,knod2els(nsv(i)+1)
539 ipg = tagprt_fric(ip)
540 IF(ipg > 0 .AND. ip > ipfmax)
THEN
542 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
543 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
551 ipartfrics(i) = ipflmax
557 IF(numelc /= 0 .OR. numeltg /= 0)
THEN
561 DO j= knod2elc(nsv(i))+1,knod2elc(nsv(i)+1)
564 ipg = tagprt_fric(ip)
565 IF(ipg > 0 .AND. ip > ipfmax)
THEN
567 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
568 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
576 DO j= knod2eltg(nsv(i))+1,knod2eltg(nsv(i)+1)
579 ipg = tagprt_fric(ip)
580 IF(ipg > 0.AND.ip > ipfmax)
THEN
582 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
583 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
592 ipartfrics(i) = ipflmax