47
48
49
50 USE sensor_mod
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "mvsiz_p.inc"
59
60
61
62#include "param_c.inc"
63#include "vect01_c.inc"
64#include "inter22.inc"
65
66
67
68 my_real,
INTENT(IN) :: mom(nel,3)
70 . partsav(npsav,*), eint(nel), rho(nel), rk(nel), vol(nel),
71 . vx1(*), vx2(*), vx3(*), vx4(*), vx5(*), vx6(*), vx7(*), vx8(*),
72 . vy1(*), vy2(*), vy3(*), vy4(*), vy5(*), vy6(*), vy7(*), vy8(*),
73 . vz1(*), vz2(*), vz3(*), vz4(*), vz5(*), vz6(*), vz7(*), vz8(*),
74 . vnew(nel), gresav(*), off(nel), eintth(nel), fill(nel),
75 . x1(*), x2(*), x3(*), x4(*), x5(*), x6(*), x7(*), x8(*),
76 . y1(*), y2(*), y3(*), y4(*), y5(*), y6(*), y7(*), y8(*),
77 . z1(*), z2(*), z3(*), z4(*), z5(*), z6(*), z7(*), z8(*)
78 INTEGER, INTENT(IN) :: G_WPLA
79 my_real,
DIMENSION(NEL*G_WPLA),
INTENT(IN) :: wpla
80 INTEGER IEXPAN,ITASK,
81 . IPARTS(*),GRTH(*),IGRTH(*),IPARG(*),NEL
82 INTEGER,INTENT(IN) :: IFVM22
83 type (),INTENT(INOUT) :: SENSORS
84
85
86
87 INTEGER I, M, FLAG
88
90 . vxa(mvsiz), vya(mvsiz) , vza(mvsiz),
91 . va2(mvsiz), xmas(mvsiz),
92 . ei(mvsiz) , ek(mvsiz),
93 . xm(mvsiz) , ym(mvsiz) , zm(mvsiz),
94 . xx(mvsiz) , yy(mvsiz) , zz(mvsiz),
95 . xy(mvsiz) , yz(mvsiz) , zx(mvsiz),
96 . xx2(mvsiz), yy2(mvsiz), zz2(mvsiz),
97 . xcg(mvsiz), ycg(mvsiz), zcg(mvsiz),
98 . xxm(mvsiz), yym(mvsiz), zzm(mvsiz),
99 . ixx(mvsiz), iyy(mvsiz), izz(mvsiz),
100 . ixy(mvsiz), iyz(mvsiz), izx(mvsiz),
101 . rei(mvsiz), rek(mvsiz), off_l(mvsiz)
102 INTEGER IC, II, J, JST(MVSIZ+1)
103
104 flag = iparg(80)
105
106
107
108
109 IF(int22==0 .OR. ifvm22==0)THEN
110
111 DO i=1,nel
112 vxa(i)=vx1(i)+vx2(i)+vx3(i)+vx4(i)+vx5(i)+vx6(i)+vx7(i)+vx8(i)
113 vya(i)=vy1(i)+vy2(i)+vy3(i)+vy4(i)+vy5(i)+vy6(i)+vy7(i)+vy8(i)
114 vza(i)=vz1(i)+vz2(i)+vz3(i)+vz4(i)+vz5(i)+vz6(i)+vz7(i)+vz8(i)
115 va2(i)=vx1(i)**2+vx2(i)**2+vx3(i)**2+vx4(i)**2
116 1 +vx5(i)**2+vx6(i)**2+vx7(i)**2+vx8(i)**2
117 2 +vy1(i)**2+vy2(i)**2+vy3(i)**2+vy4(i)**2
118 3 +vy5(i)**2+vy6(i)**2+vy7(i)**2+vy8(i)**2
119 4 +vz1(i)**2+vz2(i)**2+vz3(i)**2+vz4(i)**2
120 5 +vz5(i)**2+vz6(i)**2+vz7(i)**2+vz8(i)**2
121 ENDDO
122 DO i=1,nel
123 vxa(i)=vxa(i)*one_over_8
124 vya(i)=vya(i)*one_over_8
125 vza(i)=vza(i)*one_over_8
126 va2(i)=va2(i)*one_over_8
127 ENDDO
128 ELSE
129
130 DO i=1,nel
131 vxa(i) = mom(i,1)/rho(i)/vol(i)
132 vya(i) = mom(i,2)/rho(i)/vol(i)
133 vza(i) = mom(i,3)/rho(i)/vol(i)
134 va2(i) = (vxa(i)**2 + vya(i)**2 + vza(i)**2)
135 ENDDO
136 ENDIF
137
138 DO i=1,nel
139 xmas(i)= fill(i)*rho(i)*vnew(i)
140 ei(i) = fill(i)*eint(i)*vol(i)
141 ek(i) = xmas(i)*va2(i)*half
142 xm(i) = xmas(i)*vxa(i)
143 ym(i) = xmas(i)*vya(i)
144 zm(i) = xmas(i)*vza(i)
145 ENDDO
146
147 m=iparts(1)
148 IF(ipartsph==0)THEN
149 DO i=1,nel
150 partsav(1,m)=partsav(1,m) + ei(i)
151 partsav(2,m)=partsav(2,m) + ek(i)
152 partsav(3,m)=partsav(3,m) + xm(i)
153 partsav(4,m)=partsav(4,m) + ym(i)
154 partsav(5,m)=partsav(5,m) + zm(i)
155 IF (off(i) >= one) partsav(6,m)=partsav(6,m) + xmas(i)
156 IF (g_wpla > 0) partsav(29,m)=partsav(29,m) + wpla(i)
157 ENDDO
158 ELSE
159 DO i=1,nel
160 IF(off(i) < one)cycle
161 partsav(1,m)=partsav(1,m) + ei(i)
162 partsav(2,m)=partsav(2,m) + ek(i)
163 partsav(3,m)=partsav(3,m) + xm(i)
164 partsav(4,m)=partsav(4,m) + ym(i)
165 partsav(5,m)=partsav(5,m) + zm(i)
166 partsav(6,m)=partsav(6,m) + xmas(i)
167 IF (g_wpla > 0) partsav(29,m)=partsav(29,m) + wpla(i)
168 ENDDO
169 END IF
170
171
172
173
174 IF(flag==1) THEN
175 IF(int22==0 .OR. ifvm22==0)THEN
176
177 DO i=1,nel
178 xx(i)=x1(i)+x2(i)+x3(i)+x4(i)+x5(i)+x6(i)+x7(i)+x8(i)
179 yy(i)=y1(i)+y2(i)+y3(i)+y4(i)+y5(i)+y6(i)+y7(i)+y8(i)
180 zz(i)=z1(i)+z2(i)+z3(i)+z4(i)+z5(i)+z6(i)+z7(i)+z8(i)
181 xx2(i)=x1(i)**2+x2(i)**2+x3(i)**2+x4(i)**2
182 . +x5(i)**2+x6(i)**2+x7(i)**2+x8(i)**2
183 yy2(i)=y1(i)**2+y2(i)**2+y3(i)**2+y4(i)**2
184 . +y5(i)**2+y6(i)**2+y7(i)**2+y8(i)**2
185 zz2(i)=z1(i)**2+z2(i)**2+z3
186 . +z5(i)**2+z6(i)**2+z7(i)**2+z8(i)**2
187 xy(i)=x1(i)*y1(i)+x2(i)*y2(i)+x3(i)*y3(i)+x4(i)*y4(i)
188 . +x5(i)*y5(i)+x6(i)*y6(i)+x7(i)*y7(i)+x8(i)*y8(i)
189 yz(i
190 . +y5(i)*z5(i)+y6(i)*z6(i)+y7(i)*z7(i)+y8(i)*z8(i)
191 zx(i)=z1(i)*x1(i)+z2(i)*x2(i)+z3(i)*x3(i)+z4(i)*x4(i)
192 . +z5(i)*x5(i)+z6(i)*x6(i)+z7(i)*x7(i)+z8(i)*x8(i)
193 ENDDO
194 DO i=1,nel
195 xx(i)=xx(i)*one_over_8
196 yy(i)=yy(i)*one_over_8
197 zz(i)=zz(i)*one_over_8
198 xy(i)=xy(i)*one_over_8
199 yz(i)=yz(i)*one_over_8
200 zx(i)=zx(i)*one_over_8
201 xx2(i)=xx2(i)*one_over_8
202 yy2(i)=yy2(i)*one_over_8
203 zz2(i)=zz2(i)*one_over_8
204 ENDDO
205 ELSE
206
207 DO i=1,nel
208 xx(i) = x1(i)+x2(i)+x3(i)+x4(i)+x5(i)+x6(i)+x7(i)+x8(i)
209 yy(i) = y1(i)+y2(i)+y3(i)+y4(i)+y5(i)+y6(i)+y7(i)+y8(i)
210 zz(i) = z1(i)+z2(i)+z3(i)+z4(i)+z5(i)+z6(i)+z7(i)+z8(i)
211 xx2(i)=x1(i)**2+x2(i)**2+x3(i)**2+x4(i)**2
212 . +x5(i)**2+x6(i)**2+x7(i)**2+x8(i)**2
213 yy2(i)=y1(i)**2+y2(i)**2+y3(i)**2+y4(i)**2
214 . +y5(i)**2+y6(i)**2+y7(i)**2+y8(i)**2
215 zz2(i)=z1(i)**2+z2(i)**2+z3(i)**2+z4(i)**2
216 . +z5(i)**2+z6(i)**2+z7(i)**2+z8(i)**2
217 xy(i)=x1(i)*y1(i)+x2(i)*y2(i)+x3(i)*y3(i)+x4(i)*y4(i)
218 . +x5(i)*y5(i)+x6(i)*y6(i)+x7(i)*y7(i)+x8(i)*y8(i)
219 yz(i)=y1(i)*z1(i)+y2(i)*z2(i)+y3(i)*z3(i)+y4(i)*z4(i)
220 . +y5(i)*z5(i)+y6(i)*z6(i)+y7(i)*z7(i)+y8(i)*z8(i)
221 zx(i)=z1(i)*x1(i)+z2(i)*x2(i)+z3(i)*x3(i)+z4(i)*x4(i)
222 . +z5(i)*x5(i)+z6(i)*x6(i)+z7(i)*x7(i)+z8(i)*x8(i)
223 ENDDO
224 DO i=1,nel
225 xx(i)=xx(i)*one_over_8
226 yy(i)=yy(i)*one_over_8
227 zz(i)=zz(i)*one_over_8
228 xy(i)=xy(i)*one_over_8
229 yz(i)=yz(i)*one_over_8
230 zx(i)=zx(i)*one_over_8
231 xx2(i)=xx2(i)*one_over_8
232 yy2(i)=yy2(i)*one_over_8
233 zz2(i)=zz2(i)*one_over_8
234 ENDDO
235 ENDIF
236
237 DO i=1,nel
238 xcg(i)= xmas(i)*xx(i)
239 ycg(i)= xmas(i)*yy(i)
240 zcg(i)= xmas(i)*zz(i)
241 ixy(i)= -xmas(i)*xy(i)
242 iyz(i)= -xmas(i)*yz(i)
243 izx(i)= -xmas(i)*zx(i)
244 ixx(i)= xmas(i)*(yy2(i) + zz2(i))
245 iyy(i)= xmas(i)*(zz2(i) + xx2(i))
246 izz(i)= xmas(i)*(xx2(i) + yy2(i))
247 xxm(i)= vza(i)*ycg(i)-vya(i)*zcg(i)
248 yym(i)= vxa(i)*zcg(i)-vza(i)*xcg(i)
249 zzm(i)= vya(i)*xcg(i)-vxa(i)*ycg(i)
250 rei(i)= zero
251 rek(i)= zero
252 ENDDO
253
254 m=iparts(1)
255 IF(ipartsph==0)THEN
256 DO i=1,nel
257 partsav(9,m) =partsav(9,m) + xcg(i)
258 partsav(10,m)=partsav(10,m) + ycg(i)
259 partsav(11,m)=partsav(11,m) + zcg(i)
260 partsav(12,m)=partsav(12,m) + xxm(i)
261 partsav(13,m)=partsav(13,m) + yym(i)
262 partsav(14,m)=partsav(14,m) + zzm(i)
263 partsav(15,m)=partsav(15,m) + ixx(i)
264 partsav(16,m)=partsav(16,m) + iyy(i)
265 partsav(17,m)=partsav(17,m) + izz(i)
266 partsav(18,m)=partsav(18,m) + ixy(i)
267 partsav(19,m)=partsav(19,m) + iyz(i)
268 partsav(20,m)=partsav(20,m) + izx(i)
269 partsav(21,m)=partsav(21,m) + rei(i)
270 partsav(22,m)=partsav(22,m) + rek(i)
271 ENDDO
272 ELSE
273 DO i=1,nel
274 IF(off(i) < one)cycle
275 partsav(9,m) =partsav(9,m) + xcg(i)
276 partsav(10,m)=partsav(10,m) + ycg(i)
277 partsav(11,m)=partsav(11,m) + zcg(i)
278 partsav(12,m)=partsav(12,m) + xxm(i)
279 partsav(13,m)=partsav(13,m) + yym(i)
280 partsav(14,m)=partsav(14,m) + zzm(i)
281 partsav(15,m)=partsav(15,m) + ixx(i)
282 partsav(16,m)=partsav(16,m) + iyy(i)
283 partsav(17,m)=partsav(17,m) + izz(i)
284 partsav(18,m)=partsav(18,m) + ixy(i)
285 partsav(19,m)=partsav(19,m) + iyz(i)
286 partsav(20,m)=partsav(20,m) + izx(i)
287 partsav(21,m)=partsav(21,m) + rei(i)
288 partsav(22,m)=partsav(22,m) + rek(i)
289 ENDDO
290 END IF
291 ENDIF
292
293
294 IF (igre /= 0) THEN
296 2 off ,ei ,ek ,xm ,ym ,
297 3 zm ,xmas ,xcg ,ycg ,zcg ,
298 4 xxm ,yym ,zzm ,ixx ,iyy ,
299 5 izz ,ixy ,iyz ,izx ,rei ,
300 6 rek ,flag )
301 ENDIF
302
303
304 IF (jtur /= 0) THEN
305 DO i=1,nel
306 m=iparts(i)
307 partsav(7,m)=partsav(7,m) + rk(i)*vol(i)
308 ENDDO
309 ENDIF
310
311 IF(iexpan/=0)THEN
312 DO i=1,nel
313 m=iparts(i)
314 partsav(27,m)=partsav(27,m) + eintth(i)*vol(i)
315 ENDDO
316 ENDIF
317 DO i=1,nel
318 IF(off(i) < one) THEN
319 off_l(i) = zero
320 ELSE
321 off_l(i) = one
322 ENDIF
323 ENDDO
324
325 DO i = 1,nel
326 m=iparts(i)
327 IF (off(i) < one) THEN
328 partsav(25,m) = partsav(25,m) + one
329 ENDIF
330 ENDDO
331
333
334
335 RETURN
subroutine grelem_sav(jft, jlt, gresav, igrth, grth, off, ei, ek, xm, ym, zm, xmas, xcg, ycg, zcg, xxm, yym, zzm, ixx, iyy, izz, ixy, iyz, izx, rei, rek, flag)
subroutine sensor_energy_bilan(jft, jlt, ei, ek, off, ipart, itask, sensors)