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 (sensors_),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
103 flag = iparg(80)
104
105
106
107
108 IF(int22==0 .OR. ifvm22==0)THEN
109
110 DO i=1,nel
111 vxa(i)=vx1(i)+vx2(i)+vx3(i)+vx4(i)+vx5(i)+vx6(i)+vx7(i)+vx8(i)
112 vya(i)=vy1(i)+vy2(i)+vy3(i)+vy4(i)+vy5(i)+vy6(i)+vy7(i)+vy8(i)
113 vza(i)=vz1(i)+vz2(i)+vz3(i)+vz4(i)+vz5(i)+vz6(i)+vz7(i)+vz8(i)
114 va2(i)=vx1(i)**2+vx2(i)**2+vx3(i)**2+vx4(i)**2
115 1 +vx5(i)**2+vx6(i)**2+vx7(i)**2+vx8(i)**2
116 2 +vy1(i)**2+vy2(i)**2+vy3(i)**2+vy4(i)**2
117 3 +vy5(i)**2+vy6(i)**2+vy7(i)**2+vy8(i)**2
118 4 +vz1(i)**2+vz2(i)**2+vz3(i)**2+vz4(i)**2
119 5 +vz5(i)**2+vz6(i)**2+vz7(i)**2+vz8(i)**2
120 ENDDO
121 DO i=1,nel
122 vxa(i)=vxa(i)*one_over_8
123 vya(i)=vya(i)*one_over_8
124 vza(i)=vza(i)*one_over_8
125 va2(i)=va2(i)*one_over_8
126 ENDDO
127 ELSE
128
129 DO i=1,nel
130 vxa(i) = mom(i,1)/rho(i)/vol(i)
131 vya(i) = mom(i,2)/rho(i)/vol(i)
132 vza(i) = mom(i,3)/rho(i)/vol(i)
133 va2(i) = (vxa(i)**2 + vya(i)**2 + vza(i)**2)
134 ENDDO
135 ENDIF
136
137 DO i=1,nel
138 xmas(i)= fill(i)*rho(i)*vnew(i)
139 ei(i) = fill(i)*eint(i)*vol(i)
140 ek(i) = xmas(i)*va2(i)*half
141 xm(i) = xmas(i)*vxa(i)
142 ym(i) = xmas(i)*vya(i)
143 zm(i) = xmas(i)*vza(i)
144 ENDDO
145
146 m=iparts(1)
147 IF(ipartsph==0)THEN
148 DO i=1,nel
149 partsav(1,m)=partsav(1,m) + ei(i)
150 partsav(2,m)=partsav(2,m) + ek(i)
151 partsav(3,m)=partsav(3,m) + xm(i)
152 partsav(4,m)=partsav(4,m) + ym(i)
153 partsav(5,m)=partsav(5,m) + zm(i)
154 IF (off(i) >= one) partsav(6,m)=partsav(6,m) + xmas(i)
155 IF (g_wpla > 0) partsav(29,m)=partsav(29,m) + wpla(i)
156 ENDDO
157 ELSE
158 DO i=1,nel
159 IF(off(i) < one)cycle
160 partsav(1,m)=partsav(1,m) + ei(i)
161 partsav(2,m)=partsav(2,m) + ek(i)
162 partsav(3,m)=partsav(3,m) + xm(i)
163 partsav(4,m)=partsav(4,m) + ym(i)
164 partsav(5,m)=partsav(5,m) + zm(i)
165 partsav(6,m)=partsav(6,m) + xmas(i)
166 IF (g_wpla > 0) partsav(29,m)=partsav(29,m) + wpla(i)
167 ENDDO
168 END IF
169
170
171
172
173 IF(flag==1) THEN
174 IF(int22==0 .OR. ifvm22==0)THEN
175
176 DO i=1,nel
177 xx(i)=x1(i)+x2(i)+x3(i)+x4(i)+x5(i)+x6(i)+x7(i)+x8(i)
178 yy(i)=y1(i)+y2(i)+y3(i)+y4(i)+y5(i)+y6(i)+y7(i)+y8(i)
179 zz(i)=z1(i)+z2(i)+z3(i)+z4(i)+z5(i)+z6(i)+z7(i)+z8(i)
180 xx2(i)=x1(i)**2+x2(i)**2+x3(i)**2+x4(i)**2
181 . +x5(i)**2+x6(i)**2+x7(i)**2+x8(i)**2
182 yy2(i)=y1(i)**2+y2(i)**2+y3(i)**2+y4(i)**2
183 . +y5(i)**2+y6(i)**2+y7(i)**2+y8(i)**2
184 zz2(i)=z1(i)**2+z2(i)**2+z3(i)**2+z4(i)**2
185 . +z5(i)**2+z6(i)**2+z7(i)**2+z8(i)**2
186 xy(i)=x1(i)*y1(i)+x2(i)*y2(i)+x3(i)*y3(i)+x4(i)*y4(i)
187 . +x5(i)*y5(i)+x6(i)*y6(i)+x7(i)*y7(i)+x8(i)*y8(i)
188 yz(i)=y1(i)*z1(i)+y2(i)*z2(i)+y3(i)*z3(i)+y4(i)*z4(i)
189 . +y5(i)*z5(i)+y6(i)*z6(i)+y7(i)*z7(i)+y8(i)*z8(i)
190 zx(i)=z1(i)*x1(i)+z2(i)*x2(i)+z3(i)*x3(i)+z4(i)*x4(i)
191 . +z5(i)*x5(i)+z6(i)*x6(i)+z7(i)*x7(i)+z8(i)*x8(i)
192 ENDDO
193 DO i=1,nel
194 xx(i)=xx(i)*one_over_8
195 yy(i)=yy(i)*one_over_8
196 zz(i)=zz(i)*one_over_8
197 xy(i)=xy(i)*one_over_8
198 yz(i)=yz(i)*one_over_8
199 zx(i)=zx(i)*one_over_8
200 xx2(i)=xx2(i)*one_over_8
201 yy2(i)=yy2(i)*one_over_8
202 zz2(i)=zz2(i)*one_over_8
203 ENDDO
204 ELSE
205
206 DO i=1,nel
207 xx(i) = x1(i)+x2(i)+x3(i)+x4(i)+x5(i)+x6(i)+x7(i)+x8(i)
208 yy(i) = y1(i)+y2(i)+y3(i)+y4(i)+y5(i)+y6(i)+y7(i)+y8(i)
209 zz(i) = z1(i)+z2(i)+z3(i)+z4(i)+z5(i)+z6(i)+z7(i)+z8(i)
210 xx2(i)=x1(i)**2+x2(i)**2+x3(i)**2+x4(i)**2
211 . +x5(i)**2+x6(i)**2+x7(i)**2+x8(i)**2
212 yy2(i)=y1(i)**2+y2(i)**2+y3(i)**2+y4(i)**2
213 . +y5(i)**2+y6(i)**2+y7(i)**2+y8(i)**2
214 zz2(i)=z1(i)**2+z2(i)**2+z3(i)**2+z4(i)**2
215 . +z5(i)**2+z6(i)**2+z7(i)**2+z8(i)**2
216 xy(i)=x1(i)*y1(i)+x2(i)*y2(i)+x3(i)*y3(i)+x4(i)*y4(i)
217 . +x5(i)*y5(i)+x6(i)*y6(i)+x7(i)*y7(i)+x8(i)*y8(i)
218 yz(i)=y1(i)*z1(i)+y2(i)*z2(i)+y3(i)*z3(i)+y4(i)*z4(i)
219 . +y5(i)*z5(i)+y6(i)*z6(i)+y7(i)*z7(i)+y8(i)*z8(i)
220 zx(i)=z1(i)*x1(i)+z2(i)*x2(i)+z3(i)*x3(i)+z4(i)*x4(i)
221 . +z5(i)*x5(i)+z6(i)*x6(i)+z7(i)*x7(i)+z8(i)*x8(i)
222 ENDDO
223 DO i=1,nel
224 xx(i)=xx(i)*one_over_8
225 yy(i)=yy(i)*one_over_8
226 zz(i)=zz(i)*one_over_8
227 xy(i)=xy(i)*one_over_8
228 yz(i)=yz(i)*one_over_8
229 zx(i)=zx(i)*one_over_8
230 xx2(i)=xx2(i)*one_over_8
231 yy2(i)=yy2(i)*one_over_8
232 zz2(i)=zz2(i)*one_over_8
233 ENDDO
234 ENDIF
235
236 DO i=1,nel
237 xcg(i)= xmas(i)*xx(i)
238 ycg(i)= xmas(i)*yy(i)
239 zcg(i)= xmas(i)*zz(i)
240 ixy(i)= -xmas(i)*xy(i)
241 iyz(i)= -xmas(i)*yz(i)
242 izx(i)= -xmas(i)*zx(i)
243 ixx(i)= xmas(i)*(yy2(i) + zz2(i))
244 iyy(i)= xmas(i)*(zz2(i) + xx2(i))
245 izz(i)= xmas(i)*(xx2(i) + yy2(i))
246 xxm(i)= vza(i)*ycg(i)-vya(i)*zcg(i)
247 yym(i)= vxa(i)*zcg(i)-vza(i)*xcg(i)
248 zzm(i)= vya(i)*xcg(i)-vxa(i)*ycg(i)
249 rei(i)= zero
250 rek(i)= zero
251 ENDDO
252
253 m=iparts(1)
254 IF(ipartsph==0)THEN
255 DO i=1,nel
256 partsav(9,m) =partsav(9,m) + xcg(i)
257 partsav(10,m)=partsav(10,m) + ycg(i)
258 partsav(11,m)=partsav(11,m) + zcg(i)
259 partsav(12,m)=partsav(12,m) + xxm(i)
260 partsav(13,m)=partsav(13,m) + yym(i)
261 partsav(14,m)=partsav(14,m) + zzm(i)
262 partsav(15,m)=partsav(15,m) + ixx(i)
263 partsav(16,m)=partsav(16,m) + iyy(i)
264 partsav(17,m)=partsav(17,m) + izz(i)
265 partsav(18,m)=partsav(18,m) + ixy(i)
266 partsav(19,m)=partsav(19,m) + iyz(i)
267 partsav(20,m)=partsav(20,m) + izx(i)
268 partsav(21,m)=partsav(21,m) + rei(i)
269 partsav(22,m)=partsav(22,m) + rek(i)
270 ENDDO
271 ELSE
272 DO i=1,nel
273 IF(off(i) < one)cycle
274 partsav(9,m) =partsav(9,m) + xcg(i)
275 partsav(10,m)=partsav(10,m) + ycg(i)
276 partsav(11,m)=partsav(11,m) + zcg(i)
277 partsav(12,m)=partsav(12,m) + xxm(i)
278 partsav(13,m)=partsav(13,m) + yym(i)
279 partsav(14,m)=partsav(14,m) + zzm(i)
280 partsav(15,m)=partsav(15,m) + ixx(i)
281 partsav(16,m)=partsav(16,m) + iyy(i)
282 partsav(17,m)=partsav(17,m) + izz(i)
283 partsav(18,m)=partsav(18,m) + ixy(i)
284 partsav(19,m)=partsav(19,m) + iyz(i)
285 partsav(20,m)=partsav(20,m) + izx(i)
286 partsav(21,m)=partsav(21,m) + rei(i)
287 partsav(22,m)=partsav(22,m) + rek(i)
288 ENDDO
289 END IF
290 ENDIF
291
292
293 IF (igre /= 0) THEN
295 2 off ,ei ,ek ,xm ,ym ,
296 3 zm ,xmas ,xcg ,ycg ,zcg ,
297 4 xxm ,yym ,zzm ,ixx ,iyy ,
298 5 izz ,ixy ,iyz ,izx ,rei ,
299 6 rek ,flag )
300 ENDIF
301
302
303 IF (jtur /= 0) THEN
304 DO i=1,nel
305 m=iparts(i)
306 partsav(7,m)=partsav(7,m) + rk(i)*vol(i)
307 ENDDO
308 ENDIF
309
310 IF(iexpan/=0)THEN
311 DO i=1,nel
312 m=iparts(i)
313 partsav(27,m)=partsav(27,m) + eintth(i)*vol(i)
314 ENDDO
315 ENDIF
316 DO i=1,nel
317 IF(off(i) < one) THEN
318 off_l(i) = zero
319 ELSE
320 off_l(i) = one
321 ENDIF
322 ENDDO
323
324 DO i = 1,nel
325 m=iparts(i)
326 IF (off(i) < one) THEN
327 partsav(25,m) = partsav(25,m) + one
328 ENDIF
329 ENDDO
330
332
333
334 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)