36
37
38
39 USE elbufdef_mod
40 USE multi_fvm_mod
42
43
44
45#include "implicit_f.inc"
46
47
48
49 INTEGER,INTENT(IN) :: N2D
50 INTEGER,INTENT(IN) :: NUMELS, NUMELTG, NUMELQ, NUMNOD, NGROUP
51 INTEGER,INTENT(IN) :: NBSUBMAT
52 INTEGER IXS(NIXS,NUMELS),IPART_(*),IPHASE(NBSUBMAT+1,*),IDP,NUPARAM
53 INTEGER ITAGNSOL(NUMNOD)
54 INTEGER :: NBIP(NBSUBMAT,NEL)
55 INTEGER :: NTRACE
56 INTEGER ISOLNOD,PART_FILL(*)
57 INTEGER,INTENT(IN) :: IXQ(NIXQ,NUMELQ)
58 INTEGER,INTENT(IN) :: IXTG(NIXTG,NUMELTG)
59 INTEGER, INTENT(IN) :: ITYP
62 INTEGER,INTENT(IN) :: MLW
63 INTEGER,INTENT(IN) :: NG
64 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP), INTENT(IN) :: ELBUF_TAB
65 TYPE (MULTI_FVM_STRUCT), INTENT(IN) :: MULTI_FVM
66 INTEGER, INTENT(IN) :: NEL
67
68
69
70 INTEGER :: I,K,J
71 INTEGER :: IMAT
72 INTEGER :: IX(4)
74 TYPE(G_BUFEL_) ,POINTER :: GBUF
75 TYPE(L_BUFEL_) ,POINTER :: LBUF
76
77
78
79
80 av(1:nbsubmat) = zero
81
82 IF(mlw==51)THEN
83
84 av(1) = uparam(4)
85 av(2) = uparam(5)
86 av(3) = uparam(6)
87 av(4) = uparam(46)
88 ELSE
89 gbuf => elbuf_tab(ng)%GBUF
90 DO i=1,multi_fvm%NBMAT
91 lbuf => elbuf_tab(ng)%BUFLY(i)%LBUF(1,1,1)
92 av(i) = lbuf%VOL(1) / gbuf%VOL(1)
93 ENDDO
94 ENDIF
95
96 DO i=1,nel
97 IF(ipart_(i) /= 0) THEN
98 IF (ipart_(i) /= idp .AND. part_fill(ipart_(i)) == 0) THEN
99 kvol(1:nbsubmat,i) = av(1:nbsubmat)
100 part_fill(ipart_(i)) = 1
101 ELSEIF (ipart_(i) == idp) THEN
102 imat=maxloc(av(1:nbsubmat),1)
103 iphase(1,i) = imat
104 iphase(nbsubmat+1,i) = 1
105 kvol(imat,i) = zero
106 IF (nbip(imat,i) == 0) THEN
107 nbip(imat,i) = ntrace
108 ENDIF
109 IF (isolnod == 8) THEN
110 DO k=2,9
111 j = ixs(k,i)
112 IF(itagnsol(j) == 0)itagnsol(j) = 1
113 END DO
114 ELSEIF (isolnod == 4) THEN
115 ix(1) =ixs(2,i)
116 ix(2) =ixs(4,i)
117 ix(3) =ixs(7,i)
118 ix(4) =ixs(6,i)
119 DO k=1,4
120 j = ix(k)
121 IF(itagnsol(j) == 0)itagnsol(j) = 1
122 END do
123 ELSEIF(ityp == 7 .AND. n2d > 0)THEN
124 IF(itagnsol(ixtg(2,i)) == 0)itagnsol(ixtg(2,i)) = 1
125 IF(itagnsol(ixtg(3,i)) == 0)itagnsol(ixtg(3,i)) = 1
126 IF(itagnsol(ixtg(4,i)) == 0)itagnsol(ixtg(4,i)) = 1
127 ELSEIF(ityp == 2)THEN
128 IF(itagnsol(ixq(2,i)) == 0)itagnsol(ixq(2,i)) = 1
129 IF(itagnsol(ixq(3,i)) == 0)itagnsol(ixq(3,i)) = 1
130 IF(itagnsol(ixq(4,i)) == 0)itagnsol(ixq(4,i)) = 1
131 IF(itagnsol(ixq(5,i)) == 0)itagnsol(ixq(5,i)) = 1
132 endif
133 part_fill(idp) = 1
135 ENDIF
136 END do
137
138 RETURN
if(complex_arithmetic) id