44
45
46
47
48
49
50
51
52
53
54
55
56
57
59 USE elbufdef_mod
65
66
67
68#include "implicit_f.inc"
69
70
71
72#include "com01_c.inc"
73#include "com04_c.inc"
74#include "vect01_c.inc"
75#include "param_c.inc"
76#include "inter22.inc"
77#include "tabsiz_c.inc"
78
79
80
81 INTEGER,INTENT(IN) :: NUMEL, IFUNC, NIX, NV46,ITAB(NUMNOD),ISPMD, SWA4, AIRBAGS_NODE_ID_SHIFT
82 INTEGER,INTENT(IN) :: IFLOW(*),IPARG(NPARG,NGROUP),IX(NIX,NUMEL)
84 INTEGER,INTENT(IN) :: AIRBAGS_TOTAL_FVM_IN_H3D
85 REAL,INTENT(INOUT) :: WA4(SWA4),WA4_FVM(AIRBAGS_TOTAL_FVM_IN_H3D)
86 TYPE (ELBUF_STRUCT_), INTENT(IN), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
87 INTEGER,INTENT(IN) :: MONVOL(SMONVOL)
88 my_real,
INTENT(IN) :: volmon(svolmon)
89 INTEGER,INTENT(INOUT) :: IS_WRITTEN_NODE_FVM(AIRBAGS_TOTAL_FVM_IN_H3D),IS_WRITTEN_NODE(NUMNOD)
90 TYPE(FVBAG_DATA), INTENT(IN) :: FVDATA_P(NFVBAG)
91
92
93
94
95 INTEGER IADI, IADR, I, ITYP, NINOUT, NNO, NEL, II1, II2,
96 . IR1, IR2, J, JJ, NNO_L, NNI_L, II3, II4, JJJ, NNI,
97 . IALEL,NNOD,IPOS,IV,NGv,IDLOCv,J1,J2,IBV
98 INTEGER MLW, NG, KCVT, II, NBF, NBL, IB, ICELL, NIN, MCELL
99 INTEGER G_VOL
100 TYPE() ,POINTER :: GBUF,GBUFv
101 my_real,
ALLOCATABLE,
DIMENSION(:) :: count_vol
103
104
105
106
107
108
109
110
111
112
113
114 nnod = nix-3
115
116
117
118
119
120 IF(int22==0)THEN
121 ALLOCATE(count_vol(numnod))
122 count_vol(:) = 0
123 DO ng = 1, ngroup
124 nel =iparg(2,ng)
125 nft =iparg(3,ng)
126 ityp =iparg(5,ng)
127
128 IF(ityp/=1 .AND. ityp/=2)cycle
129
130 gbuf => elbuf_tab(ng)%GBUF
131 g_vol = elbuf_tab(ng)%GBUF%G_VOL
132
133 DO i=1,nel
134 IF (g_vol > 0 )THEN
135 d = elbuf_tab(ng)%GBUF%RHO(i)
136 v = elbuf_tab(ng)%GBUF%VOL(i)
137 ELSE
138 d=zero
139 v=zero
140 ENDIF
141 DO j=2,nnod+1
142 jj=ix(j,nft+i)
143 wa4(jj)=wa4(jj)+v*d
144 count_vol(jj) = count_vol(jj) + v
145 is_written_node(jj)=1
146 ENDDO
147 ENDDO
148 ENDDO
149
150 DO i=1,numnod
151 IF(count_vol(i)/=zero)THEN
152 wa4(i)=wa4(i)/count_vol(i)
153 ENDIF
154 ENDDO
155 DEALLOCATE(count_vol)
156
157
158
159
160 ELSEIF(int22>0)THEN
161 ALLOCATE(count_vol(numnod))
162 count_vol = 0
163
164
165
166 nbf = 1
168 nin = 1
169
170 DO ng = 1, ngroup
171 nel =iparg(2,ng)
172 nft =iparg(3,ng)
173 ityp =iparg(5,ng)
174 ialel =iparg(7,ng)+iparg(11,ng)
175 IF(ityp/=1 .AND. ityp/=2)cycle
176 IF(ialel==0)cycle
177 gbuf => elbuf_tab(ng)%GBUF
178 DO i=1,nel
179
180 ib = nint(gbuf%TAG22(i))
181
182
183
184 IF(ib>0)THEN
186 ENDIF
187 IF(ib==0)THEN
188 d = gbuf%RHO(i)
189 v = gbuf%VOL(i)
190 DO j=2,nnod+1
191 jj=ix(j,nft+i)
192 wa4(jj)=wa4(jj)+ d*v
193 count_vol(jj) = count_vol(jj) + v
194 is_written_node(jj)=1
195
196
197
198
199
200
201
202 ENDDO
203
204
205
206 ELSE
207 nin = 1
208 ib = nint(gbuf%TAG22(i))
210 DO j=2,nnod+1
211 jj=ix(j,nft+i)
212 is_written_node(jj)=1
214 IF(icell == mcell)THEN
215 d = gbuf%RHO(i)
216 v = gbuf%VOL(i)
217 ELSE
218 ipos =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
219 IF(ipos<=nv46)THEN
220 iv =
brick_list(nin,ib)%Adjacent_Brick(ipos,1)
221 ngv =
brick_list(nin,ib)%Adjacent_Brick(ipos,2)
222 idlocv =
brick_list(nin,ib)%Adjacent_Brick(ipos,3)
223 ELSE
224 j1 = ipos/10
225 j2 = mod(ipos,10)
226 ibv =
brick_list(nin,ib )%Adjacent_Brick(j1,4)
228 ngv =
brick_list(nin,ibv)%Adjacent_Brick(j2,2)
229 idlocv =
brick_list(nin,ibv)%Adjacent_Brick(j2,3)
230 ENDIF
231 gbufv => elbuf_tab(ngv)%GBUF
232 d = gbufv%RHO(idlocv)
233 v = gbufv%VOL(idlocv)
234 ENDIF
235 wa4(jj)=wa4(jj)+d*v
236 count_vol(jj) = count_vol(jj) + v
237 ENDDO
238 ENDIF
239 ENDDO
240 ENDDO
241
242 DO i=1,numnod
243 IF(count_vol(i)/=zero)THEN
244 wa4(i)=wa4(i)/count_vol(i)
245 ENDIF
246 ENDDO
247 DEALLOCATE(count_vol)
248 ENDIF
249
250
251
252
253
254
257 .
258 . airbags_node_id_shift)
259 ENDIF
260
261 RETURN
subroutine anim_nodal_contour_fvmbags(key, wa4, monvol, volmon, fvdata_p, nfvbag, smonvol, svolmon, airbags_total_fvm, is_written_node_fvm, airbags_node_id_shift)
integer airbags_total_fvm_in_h3d
type(brick_entity), dimension(:,:), allocatable, target brick_list