35
36
37
38
39
40
41
42
43
44
45
46
47
48
50 USE elbufdef_mod
54
55
56
57#include "implicit_f.inc"
58
59
60
61#include "com01_c.inc"
62#include "com04_c.inc"
63#include "vect01_c.inc"
64#include "param_c.inc"
65#include "inter22.inc"
66
67
68
69 INTEGER,INTENT(IN) :: IFUNC, IPARG(NPARG,NGROUP),IX(NIX,NUMEL),ITAB(NUMNOD)
70 REAL,INTENT(INOUT) :: WA4(*)
71 TYPE (ELBUF_STRUCT_),INTENT(IN), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
72 INTEGER, INTENT(INOUT) :: IS_WRITTEN_NODE(NUMNOD)
73
74
75
76 INTEGER IADI, IADR, I, ITYP, NINOUT, NNO, NEL, NELv,II1, II2,
77 . IR1, IR2, J, JJ, NNO_L, NNI_L, , II4, JJJ, NNI,
78 . IALEL,NNOD,IPOS,IV,NGv,IDLOCv,J1,J2,IBV
79 INTEGER MLW, NG, KCVT, II(6), NBF, NBL, IB, ICELL, NIN, MCELL
80 TYPE(G_BUFEL_) ,POINTER :: GBUF,GBUFv
81 my_real,
ALLOCATABLE,
DIMENSION(:) :: sum_weight
83 INTEGER,DIMENSION(:,:), POINTER :: pAdjBRICK
84
85
86
87
88
89
90
91
92
93
94
95
96 ALLOCATE(sum_weight(numnod))
97 sum_weight = 0
98 nnod = nix-3
99
100 IF(int22==0)THEN
101
102
103
104 DO ng = 1, ngroup
105 nel =iparg(2,ng)
106 nft =iparg(3,ng)
107 ityp =iparg(5,ng)
108 IF(ityp/=1 .AND. ityp/=2)cycle
109 gbuf => elbuf_tab(ng)%GBUF
110 IF(gbuf%G_SIG > 0)THEN
111 DO i=1,nel
112 p = gbuf%SIG(nel*(1-1)+i)+gbuf%SIG(nel*(2-1)+i)+gbuf%SIG(nel*(3-
113 p = -p*third
114 weight = gbuf%VOL(i)
115 DO j=2,nnod+1
116 jj=ix(j,nft+i)
117 is_written_node(jj)=1
118 wa4(jj)=wa4(jj)+weight*p
119 sum_weight(jj) = sum_weight(jj) + weight
120 ENDDO
121 enddo
122 END IF
123 ENDDO
124
125
126 ELSEIF(int22>0)THEN
127
128
129
130
131
132
133
134
135
136
137
138
139 nbf = 1
141 nin = 1
142
143 DO ng = 1, ngroup
144 nel =iparg(2,ng)
145 nft =iparg(3,ng)
146 ityp =iparg(5,ng)
147 ialel =iparg(7,ng)+iparg(11,ng)
148 gbuf => elbuf_tab(ng)%GBUF
149 IF(ityp/=1 .AND. ityp/=2)cycle
150 IF(ialel==0)cycle
151 IF(gbuf%G_SIG==0)cycle
152 DO i=1,nel
153 ib = nint(gbuf%TAG22(i))
154
155
156
157 IF(ib>0)THEN
159 ENDIF
160 IF(ib==0)THEN
161 p = gbuf%SIG(nel*(1-1)+i)+gbuf%SIG(nel*(2-1)+i)+gbuf%SIG(nel*(3-1)+i)
162 p = -p*third
163 weight = gbuf%VOL(i)
164 DO j=2,nnod+1
165 jj=ix(j,nft+i)
166 is_written_node(jj)=1
167 wa4(jj)=wa4(jj)+ p*weight
168 sum_weight(jj) = sum_weight(jj) + weight
169 ENDDO
170
171
172
173 ELSE
174 nin = 1
175 ib = nint(gbuf%TAG22(i))
177 nel = iparg(2,ng)
178 DO j=2,nnod+1
179 jj=ix(j,nft+i)
180 is_written_node(jj)=1
182 IF(icell == mcell)THEN
183 p = gbuf%SIG(nel*(1-1)+i)+gbuf%SIG(nel*(2-1)+i)+gbuf%SIG(nel*(3-1)+i)
184 p = -p*third
185 weight = gbuf%VOL(i)
186 ELSE
187 padjbrick =>
brick_list(nin,ib)%Adjacent_Brick(1:6,1:5)
188 ipos =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
189 IF(ipos<=nv46)THEN
190 iv =
brick_list(nin,ib)%Adjacent_Brick(ipos,1)
192 idlocv =
brick_list(nin,ib)%Adjacent_Brick(ipos,3)
193 nelv = iparg(2,ngv)
194 ELSE
195 j1 = ipos/10
196 j2 = mod(ipos,10)
197 ibv =
brick_list(nin,ib )%Adjacent_Brick(j1,4)
199 ngv =
brick_list(nin,ibv)%Adjacent_Brick(j2,2)
200 idlocv =
brick_list(nin,ibv)%Adjacent_Brick(j2,3)
201 nelv = iparg(2,ngv)
202 ENDIF
203 gbufv => elbuf_tab(ngv)%GBUF
204 p = gbufv%SIG(nelv*(1-1)+idlocv)+gbufv%SIG(nelv*
205 p = -p*third
206 weight = gbufv%VOL(idlocv)
207 ENDIF
208 wa4(jj)=wa4(jj)+p*weight
209 sum_weight(jj) = sum_weight(jj) + weight
210 ENDDO
211 ENDIF
212 ENDDO
213 ENDDO
214 ENDIF
215
216
217
218 DO i=1,numnod
219 IF(sum_weight(i)/=zero)THEN
220 wa4(i)=wa4(i)/sum_weight(i)
221 ENDIF
222 ENDDO
223
224 DEALLOCATE(sum_weight)
225
226
227 RETURN
type(brick_entity), dimension(:,:), allocatable, target brick_list