35 SUBROUTINE w_fi(IPARI,PROC,LEN_IA,
36 1 INTERCEP ,INTBUF_TAB,ITAB,MULTI_FVM,TAG,
37 2 NINDX_TAG,INDX_TAG ,NODLOCAL,NUMNOD_L,LEN_CEP,CEP)
50#include "implicit_f.inc"
60 INTEGER,
DIMENSION(:),
POINTER :: P
61 END TYPE intermasurfep
65 INTEGER PROC, IPARI(NPARI,*), LEN_IA, ITAB(*)
66 INTEGER :: NINDX_TAG,NUMNOD_L
67 INTEGER,
DIMENSION(*),
INTENT(IN) :: NODLOCAL
68 INTEGER,
DIMENSION(*),
INTENT(INOUT) :: TAG,INDX_TAG
86 TYPE(
intersurfp),
INTENT(IN) :: INTERCEP(3,NINTER)
87 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
88 TYPE(multi_fvm_struct),
INTENT(IN) :: MULTI_FVM
89 INTEGER,
INTENT(in) :: LEN_CEP
90 INTEGER,
DIMENSION(LEN_CEP),
INTENT(in) :: CEP
99 INTEGER NI, P, K, L, ITYP, INACTI, NSN, NMN, NRTS, NRTM,
100 . N, N1, , N3, N4, NRTM_L,
101 . i_stok, nodfi, e, multimp, ideb, ifq
102 . nisub, nisubs, nisubm, intth,
nl, n1l
103 . nlins, nlinm, nsne, nmne, nln, nn,intfric,
104 . work(70000),kd(50),jd(50),i,j,iedge4,intnitsche,my_node,
105 . cpt1,cpt2,p1,p2,proc1,proc2,se1,ploc,nd,flagremn,lremnormax
107 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NSNFI
108 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NUMP
109 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NMNFI
110 INTEGER :: IEDGE,NEDGE,NEDGE_KEPT,ILEV
111 INTEGER,
PARAMETER :: = 13
114 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAGE, NSNLOCAL, NSNP, NSVFI,
115 . NRTSLOCAL, NRTSP, INDEX, PFI,
117 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: CLEF,IRTLMFI2,IRTLMFI
119 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PLIST
120 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAB1,TAB2
122 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TABZERO
123 INTEGER,
DIMENSION(:),
ALLOCATABLE :: LEDGE_FIE
124 INTEGER :: INTER_LAW151
125 LOGICAL :: INTER18_LAW151
127 CALL my_alloc(nsnfi,nspmd)
128 CALL my_alloc(nump,nspmd)
129 CALL my_alloc(nmnfi,nspmd)
135 inacti = ipari(22,ni)
136 inter_law151 = ipari(14,ni)
137 inter18_law151 = .false.
139 IF(ityp==7.AND.inacti==7.AND.inter_law151==151) inter18_law151 = .true.
141 IF(ityp==7.OR.ityp==10.OR.ityp==11.OR.
142 . (ityp==17.AND.ipari(33,ni)==0).OR.ityp==20.OR.
143 . ityp==22.OR.ityp==23.OR.ityp==24.OR.ityp==25)
THEN
149 len_ia = len_ia + nspmd
150 IF(((inacti/=5.AND.inacti/=6.AND.inacti/=7).OR.
151 . ityp==10).AND.ityp/=23.AND.inacti/=-1)
THEN
154 len_ia = len_ia + nspmd
160 multimp= ipari(23,ni)
162 intfric = ipari(72,ni)
163 flagremn =ipari(63,ni)
164 lremnormax =ipari(82,ni)
165 intnitsche = ipari(86,ni)
170 IF(ityp==7.OR.ityp==22.OR.ityp==23.OR.ityp==24.OR.
175 iedge4 = ipari(59,ni)
177 i_stok = intbuf_tab(ni)%I_STOK(1)
178!
IF (multi_fvm%IS_USED .AND. inacti == 7)
THEN
186 ALLOCATE(nsnlocal(nsn))
192 IF (ityp==24)
ALLOCATE(irtlmfi(2,nsn))
194 ALLOCATE(irtlmfi(4,nsn))
204 ALLOCATE(plist(nspmd))
207 n = intbuf_tab(ni)%NSV(k)
212 IF(inter18_law151)
THEN
213 IF(cep(n)==proc) ploc = 1
215 plist(1) = cep(n) + 1
220 IF(nodlocal(n)/=0.AND.nodlocal(n)<=numnod_l) ploc = 1
224 se1 = intbuf_tab(ni)%IS2SE(2*(n-numnod-1)+1)
225 plist(1)=intercep(2,ni)%P(se1)
227 IF(plist(1)==proc+1)ploc=1
236 nsnlocal(k) = nump(proc+1)
240 nsnlocal(k) = nump(p)
244 nindx_tag = nindx_tag + 1
245 indx_tag(nindx_tag) = n
255 IF(intercep(1,ni)%P(k)==proc+1)
THEN
267 e = intbuf_tab(ni)%CAND_E(k)
269 n = intbuf_tab(ni)%CAND_N(k)
271 inacti_case = .false.
272 nd = intbuf_tab(ni)%NSV(n)
273 IF (nd <= numnod)
THEN
274 my_node = intbuf_tab(ni)%NSV(n)
275 IF(nodlocal( my_node )==0.OR.nodlocal( my_node )>numnod_l ) inacti_case=.true.
278 IF (intercep(2,ni)%P(se1)/=(proc+1) ) inacti_case=.true.
282 IF(inacti_case .EQV. .true.)
THEN
287 nsnfi(p) = nsnfi(p) + 1
289 nsvfi(nodfi) = nsnlocal(n)
290 nd = intbuf_tab(ni)%NSV(n)
292 itafi(nodfi) = itab(nd)
294 itafi(nodfi) = intbuf_tab(ni)%IS2ID(nd-numnod)
297 irtlmfi(1,nodfi)=intbuf_tab(ni)%IRTLM(2*(n-1)+1)
298 irtlmfi(2,nodfi)=intbuf_tab(ni)%IRTLM(2*(n-1)+2)
301 irtlmfi(1,nodfi)=intbuf_tab(ni)%IRTLM(4*(n-1)+1)
302 irtlmfi(2,nodfi)=intbuf_tab(ni)%IRTLM(4*(n-1)+2)
303 irtlmfi(3,nodfi)=intbuf_tab(ni)%IRTLM(4*(n-1)+3)
304 irtlmfi(4,nodfi)=intbuf_tab(ni)%IRTLM(4*(n-1)+4)
314 ALLOCATE(index(2*nodfi))
315 ALLOCATE(clef(2,nodfi))
316 IF(ityp==24)
ALLOCATE(irtlmfi2(2,nodfi))
317 IF(ityp==25)
ALLOCATE(irtlmfi2(4,nodfi))
318 ALLOCATE(itafi2(nodfi))
324 irtlmfi2(1,k)= irtlmfi(1,k)
325 irtlmfi2(2,k)= irtlmfi(2,k)
328 irtlmfi2(1,k)= irtlmfi(1,k)
329 irtlmfi2(2,k)= irtlmfi(2,k)
330 irtlmfi2(3,k)= irtlmfi(3,k)
331 irtlmfi2(4,k)= irtlmfi(4,k)
334 CALL my_orders(0,work,clef,index,nodfi,2)
336 nsvfi(k) = clef(2,index(k))
337 itafi(k) = itafi2(index(k))
338 pfi(k) = clef(1,index(k))
340 irtlmfi(1,k)=irtlmfi2(1,index(k))
341 irtlmfi(2,k)=irtlmfi2(2,index(k))
344 irtlmfi(1,k)=irtlmfi2(1,index(k))
345 irtlmfi(2,k)=irtlmfi2(2,index(k))
346 irtlmfi(3,k)=irtlmfi2(3,index(k))
347 irtlmfi(4,k)=irtlmfi2(4,index(k))
353 IF(ityp==24.OR.ityp==25)
DEALLOCATE(irtlmfi2)
358 len_ia = len_ia + nspmd
360 len_ia = len_ia + nodfi
363 len_ia = len_ia + nodfi
366 len_ia = len_ia + nodfi
370 len_ia = len_ia + nodfi
375 len_ia = len_ia + nodfi
380 len_ia = len_ia + nodfi*2
383 len_ia = len_ia + nodfi
386 len_ia = len_ia + nodfi
394 len_ia = len_ia + 5*nodfi
398 len_ia = len_ia + nodfi
401 len_ia = len_ia + nodfi
404 len_ia = len_ia + nodfi
408 len_ia = len_ia + 2* nodfi
411 IF(intnitsche>0)
CALL write_i_c(nsvfi,3*nodfi)
417 len_ia = len_ia + nodfi
420 len_ia = len_ia + nodfi*4
423 len_ia = len_ia + nodfi
425 IF(flagremn == 2.AND.nodfi>0)
THEN
426 ALLOCATE(tabzero(nodfi+1))
427 tabzero(1:nodfi+1) = 0
429 len_ia = len_ia + nodfi + 1
441 IF (ityp==24.OR.ityp==25)
DEALLOCATE(irtlmfi)
446 i_stok = intbuf_tab(ni)%I_STOK(1)
447 ALLOCATE(nrtslocal(nrts))
448 ALLOCATE(nrtsp(nrts))
449 ALLOCATE(nsvfi(nrts))
456 ALLOCATE(tab1(nspmd),tab2(nspmd))
458 n1 = intbuf_tab(ni)%IRECTS(2*(k-1)+1)
459 n2 = intbuf_tab(ni)%IRECTS(2*(k-1)+2)
465 IF(cpt1>0.AND.cpt2>0)
THEN
470 IF((proc1==proc+1).AND.(proc2==proc+1))
THEN
471 nump(proc+1) = nump(proc+1) + 1
472 nrtslocal(k) = nump(proc+1)
474 ELSEIF((proc1==proc2).AND.(nrtslocal(k)==0))
THEN
475 nump(proc1) = nump(proc1) + 1
476 nrtslocal(k) = nump(proc1)
484 DEALLOCATE(tab1,tab2)
489 IF(intercep(1,ni)%P(k)==proc+1)
THEN
501 e = intbuf_tab(ni)%CAND_E(k)
503 l = intbuf_tab(ni)%CAND_N(k
504 n1 = intbuf_tab(ni)%IRECTS((l-1)*2+1)
505 n2 = intbuf_tab(ni)%IRECTS((l-1)*2+2)
506 IF((nodlocal( n1 )==0.OR.nodlocal( n1 )>numnod_l).AND.
507 + (nodlocal( n2 )==0.OR.nodlocal( n2 )>numnod_l) )
THEN
511 nsnfi(p) = nsnfi(p) + 1
513 nsvfi(nodfi) = nrtslocal(l)
521 ALLOCATE(index(2*nodfi))
522 ALLOCATE(clef(2,nodfi))
527 CALL my_orders(0,work,clef,index,nodfi,2)
529 nsvfi(k) = clef(2,index(k))
530 pfi(k) = clef(1,index(k))
546 len_ia = len_ia + nodfi
551 len_ia = len_ia + nodfi
554 DEALLOCATE(nrtslocal)
564 nisubs = ipari(37,ni)
565 nisubm = ipari(38,ni)
568 i_stok = intbuf_tab(ni)%I_STOK(1)
569 ALLOCATE(nsnlocal(nsn))
580 nl= intbuf_tab(ni)%NSV(k)
581 n = intbuf_tab(ni)%NLG(
nl)
585 IF(nodlocal( n )/=0.AND.nodlocal( n )<=numnod_l)
THEN
586 nump(proc+1) = nump(proc+1) + 1
587 nsnlocal(k) = nump(proc+1)
592 IF(p/=proc+1.AND.nlocal(n,p)==1)
THEN
593 nump(p) = nump(p) + 1
594 IF(nsnlocal(k)==0)
THEN
595 nsnlocal(k) = nump(p)
602 nindx_tag = nindx_tag + 1
603 indx_tag(nindx_tag) = n
610 IF(intercep(1,ni)%P(k)==proc
THEN
622 e = intbuf_tab(ni)%CAND_E(k)
624 n = intbuf_tab(ni)%CAND_N(k)
625 nl = intbuf_tab(ni)%NSV(n)
626 nn = intbuf_tab(ni)%NLG(
nl)
627 IF(nodlocal( nn )==0.OR.nodlocal( nn )>numnod_l)
THEN
632 nsnfi(p) = nsnfi(p) + 1
634 nsvfi(nodfi) = nsnlocal(n)
642 ALLOCATE(index(2*nodfi))
643 ALLOCATE(clef(2,nodfi))
648 CALL my_orders(0,work,clef,index,nodfi,2)
650 nsvfi(k) = clef(2,index(k))
651 pfi(k) = clef(1,index(k))
659 len_ia = len_ia + nspmd
661 len_ia = len_ia + nodfi
664 len_ia = len_ia + nodfi
667 len_ia = len_ia + nodfi
670 len_ia = len_ia + nodfi
674 len_ia = len_ia + nodfi
691 inacti = ipari(22,ni)
692 IF(inacti/=5.AND.inacti
THEN
700 multimp= ipari(23,ni)
704 nisubs = ipari(37,ni)
705 nisubm = ipari(38,ni)
714 i_stok = intbuf_tab(ni)%I_STOK_E(1)
715 ALLOCATE(nrtslocal(nlins))
716 ALLOCATE(nrtsp(nlins))
717 ALLOCATE(nsvfi(nlins))
719 ALLOCATE(tage(nlinm))
724 n1l = intbuf_tab(ni)%IXLINS(2*(k-1)+1)
725 n2l = intbuf_tab(ni)%IXLINS(2*(k-1)+2)
726 n1 = intbuf_tab(ni)%NLG(n1l)
727 n2 = intbuf_tab(ni)%NLG(n2l)
730 IF( (nodlocal( n1 )/=0.AND.nodlocal( n1 )<=numnod_l).AND.
731 + (nodlocal( n2 )/=0.AND.nodlocal( n2 )<=numnod_l) )
THEN
732 nump(proc+1) = nump(proc+1) + 1
733 nrtslocal(k) = nump(proc+1)
738 IF(p/=proc+1.AND.nlocal(n1,p)==1.AND.
739 . nlocal(n2,p)==1)
THEN
740 IF(nrtslocal(k)==0)
THEN
741 nump(p) = nump(p) + 1
742 nrtslocal(k) = nump(p)
754 IF(intercep(2,ni)%P(k)==proc+1)
THEN
766 e = intbuf_tab(ni)%LCAND_S(k)
768 l = intbuf_tab(ni)%IXLINS(k)
769 n1l = intbuf_tab(ni)%IXLINS((l-1)*2+1)
770 n2l = intbuf_tab(ni)%IXLINS((l-1)*2+2)
771 n1 = intbuf_tab(ni)%NLG(n1l)
772 n2 = intbuf_tab(ni)%NLG(n2l)
773 IF( (nodlocal( n1 )==0.OR.nodlocal( n1 )>numnod_l).AND.
774 + (nodlocal( n2 )==0.OR.nodlocal( n2 )>numnod_l) )
THEN
778 nsnfi(p) = nsnfi(p) + 1
780 nsvfi(nodfi) = nrtslocal
788 ALLOCATE(index(2*nodfi))
789 ALLOCATE(clef(2,nodfi))
794 CALL my_orders(0,work,clef,index,nodfi,2)
796 nsvfi(k) = clef(2,index(k))
797 pfi(k) = clef(1,index(k))
811 DEALLOCATE(nrtslocal)
821 IF( ityp == 25 .AND. iedge /= 0)
THEN
827 nedge_kept =
i25_fie(ni,proc+1)%NEDGE_TOT
828 nodfi = 2 * nedge_kept
829 ALLOCATE(ledge_fie(nodfi*e_ibuf_size))
830 ledge_fie(1:nodfi*e_ibuf_size) = 0
831 IF(nedge_kept > 0)
THEN
840 ledge_fie(e_ibuf_size*(k-1) + 1) = intbuf_tab(ni)%LEDGE(8 + (j-1)*nledge)
841 ledge_fie(e_ibuf_size*(k-1) + 2) = intbuf_tab(ni)%LEDGE(1 + (j-1)*nledge)
842 ledge_fie(e_ibuf_size*(k-1) + 3) = intbuf_tab(ni)%LEDGE(2 + (j-1)*nledge)
843 ledge_fie(e_ibuf_size*(k-1) + 4) = intbuf_tab(ni)%LEDGE(3+ (j-1)*nledge)
844 ledge_fie(e_ibuf_size*(k-1) + 5) = intbuf_tab(ni)%LEDGE(4+ (j-1)*nledge)
845 ledge_fie(e_ibuf_size*(k-1) + 6) = intbuf_tab(ni)%LEDGE(5+ (j-1)*nledge)
846 ledge_fie(e_ibuf_size*(k-1) + 7) = intbuf_tab(ni)%LEDGE(6+ (j-1)*nledge)
847 ledge_fie(e_ibuf_size*(k-1) + 8) = intbuf_tab(ni)%LEDGE(7+ (j-1)*nledge)
849 ledge_fie(e_ibuf_size*(k-1) + 9) = itab(ledge_fie(e_ibuf_size*(k-1) + 6))
851 ledge_fie(e_ibuf_size*(k-1) +10) = itab(ledge_fie(e_ibuf_size*(k-1) + 7))
853 ledge_fie(e_ibuf_size*(k-1) +11) = intbuf_tab(ni)%LEDGE(10 + (j-1)*nledge)
855 ledge_fie(e_ibuf_size*(k-1) +12) =
858 ledge_fie(e_ibuf_size*(k-1) +13) = intbuf_tab(ni)%EBINFLG(j)
860 ledge_fie(e_ibuf_size*(k-1) +13) = 0
863 nsne = e_ibuf_size*nedge_kept
870 DEALLOCATE(ledge_fie)
874 IF(ipari(36,ni)>0.AND.ityp/=17)
THEN
878 IF(ityp == 25 .AND. ipari(58,ni) > 0)
THEN
889 IF(intth==2.OR.ipari(95,ni) > 0)
THEN
895 len_ia = len_ia + nspmd
898 len_ia = len_ia + nspmd