52
53
54
55 USE sensor_mod
56
57
58
59#include "implicit_f.inc"
60
61
62
63#include "mvsiz_p.inc"
64
65
66
67#include "param_c.inc"
68#include "com_xfem1.inc"
69
70
71
72 INTEGER, INTENT(IN) :: IGRE
73 INTEGER IXC(NIXC,*),MAT(MVSIZ), JFT, JLT,,IEXPAN,
74 . IPARTC(*),NFT1,GRTH(*),IGRTH(*),IXFEM,ITASK
75 INTEGER, INTENT(IN) :: ACTIFXFEM
76
78 . pm(npropm,*), v(3,*), thk(*), eint(jlt,2),
79 . partsav(npsav,*),
area(*),x(3,*),vr(3,*) ,vol0(*),vol00(*),
80 . thk0(*), thk02(*),off(*),
81 . gresav(*),eintth(*)
83 . x1g(mvsiz), x2g(mvsiz), x3g(mvsiz), x4g(mvsiz),
84 . y1g(mvsiz), y2g(mvsiz), y3g(mvsiz), y4g(mvsiz),
85 . z1g(mvsiz), z2g(mvsiz), z3g(mvsiz), z4g(mvsiz),
86 . vl1(mvsiz,3),vl2(mvsiz,3),vl3(mvsiz,3),vl4(mvsiz,3),
87 . vrl1(mvsiz,3),vrl2(mvsiz,3),vrl3(mvsiz,3),vrl4(mvsiz,3)
88 my_real,
INTENT(IN) :: gvol(mvsiz)
89 type (sensors_),INTENT(INOUT) :: SENSORS
90 INTEGER,INTENT(IN) :: NEL,G_WPLA
91 my_real,
DIMENSION(NEL*G_WPLA),
INTENT(IN) :: wpla
92
93
94
95 INTEGER I, MX, II, J, IC, JST(MVSIZ+1),FLAG,
96 . IXCTMP2,IXCTMP3,IXCTMP4,IXCTMP5,IJK
97
99 . in25,xx,yy,zz,xy,yz,zx,va2, inel,
100 . vxa(mvsiz), vya(mvsiz), vza(mvsiz),
101 . xmas(mvsiz), rho, ei(mvsiz),rei(mvsiz),rek(mvsiz),
102 . ek(mvsiz), xm(mvsiz), ym(mvsiz), zm(mvsiz), xmas25(mvsiz),
103 . xxm(mvsiz), yym(mvsiz), zzm(mvsiz),
104 . xcg(mvsiz), ycg(mvsiz), zcg(mvsiz),
105 . ixx(mvsiz), iyy(mvsiz), izz(mvsiz),
106 . ixy(mvsiz), iyz(mvsiz), izx(mvsiz),
107 . rbidon(1)
108 INTEGER :: K,IPART,LOCAL_INDEX
109 my_real,
DIMENSION(MVSIZ,2) :: fstparit
110
111 flag = 0
112 rbidon = zero
113
114 mx = mat(jft)
115 rho=pm(1,mx)
116
117 IF(ifla>1)THEN
118 DO i=jft,jlt
119 ixctmp2=ixc(2,i)
120 ixctmp3=ixc(3,i)
121 ixctmp4=ixc(4,i)
122 ixctmp5=ixc(5,i)
123
124 x1g(i)=x(1,ixctmp2)
125 y1g(i)=x(2,ixctmp2)
126 z1g(i)=x(3,ixctmp2)
127 x2g(i)=x(1,ixctmp3)
128 y2g(i)=x(2,ixctmp3)
129 z2g(i)=x(3,ixctmp3)
130 x3g(i)=x(1,ixctmp4)
131 y3g(i)=x(2,ixctmp4)
132 z3g(i)=x(3,ixctmp4)
133 x4g(i)=x(1,ixctmp5)
134 y4g(i)=x(2,ixctmp5)
135 z4g(i)=x(3,ixctmp5)
136 vl1(i,1)=v(1,ixctmp2)
137 vl1(i,2)=v(2,ixctmp2)
138 vl1(i,3)=v(3,ixctmp2)
139 vl2(i,1)=v(1,ixctmp3)
140 vl2(i,2)=v(2,ixctmp3)
141 vl2(i,3)=v(3,ixctmp3)
142 vl3(i,1)=v(1,ixctmp4)
143 vl3(i,2)=v(2,ixctmp4)
144 vl3(i,3)=v(3,ixctmp4)
145 vl4(i,1)=v(1,ixctmp5)
146 vl4(i,2)=v(2,ixctmp5)
147 vl4(i,3)=v(3,ixctmp5)
148 vrl1(i,1)=vr(1,ixctmp2)
149 vrl1(i,2)=vr(2,ixctmp2)
150 vrl1(i,3)=vr(3,ixctmp2)
151 vrl2(i,1)=vr(1,ixctmp3)
152 vrl2(i,2)=vr(2,ixctmp3)
153 vrl2(i,3)=vr(3,ixctmp3)
154 vrl3(i,1)=vr(1,ixctmp4)
155 vrl3(i,2)=vr(2,ixctmp4)
156 vrl3(i,3)=vr(3,ixctmp4)
157 vrl4(i,1)=vr(1,ixctmp5)
158 vrl4(i,2)=vr(2,ixctmp5)
159 vrl4(i,3)=vr(3,ixctmp5)
160 END DO
161 END IF
162
163 DO i=jft,jlt
164 vxa(i)=vl1(i,1)+vl2(i,1)+vl3(i,1)+vl4(i,1)
165 vya(i)=vl1(i,2)+vl2(i,2)+vl3(i,2)+vl4(i,2)
166 vza(i)=vl1(i,3)+vl2(i,3)+vl3(i,3)+vl4(i,3)
167 ENDDO
168
169
170 DO i=jft,jlt
171 xmas(i)=rho*gvol(i)
172 ENDDO
173
174 DO i=jft,jlt
175 va2 = vl1(i,1)*vl1(i,1)+vl2(i,1)*vl2(i,1)
176 2 +vl3(i,1)*vl3(i,1)+vl4(i,1)*vl4(i,1)
177 3 +vl1(i,2)*vl1(i,2)+vl2(i,2)*vl2(i,2)
178 4 +vl3(i,2)*vl3(i,2)+vl4(i,2)*vl4(i,2)
179 5 +vl1(i,3)*vl1(i,3)+vl2(i,3)*vl2(i,3)
180 6 +vl3(i,3)*vl3(i,3)+vl4(i,3)*vl4(i,3)
181 ei(i)= eint(i,1) + eint(i,2)
182 ek(i)= xmas(i)*va2*one_over_8
183 xmas25(i)= xmas(i)*fourth
184 xm(i)= xmas25(i)*vxa(i)
185 ym(i)= xmas25(i)*vya(i)
186 zm(i)= xmas25(i)*vza(i)
187 ENDDO
188
189
190
191 IF(ifla/=0.AND.npsav>=21)THEN
192 DO i=jft,jlt
193 xx= x1g(i)+x2g(i)+x3g(i)+x4g(i)
194 yy= y1g(i)+y2g(i)+y3g(i)+y4g(i)
195 zz= z1g(i)+z2g(i)+z3g(i)+z4g(i)
196 xcg(i)= xmas25(i)*xx
197 ycg(i)= xmas25(i)*yy
198 zcg(i)= xmas25(i)*zz
199
200 in25 = xmas25(i)*(thk02(i)+
area(i))*one_over_12
201 inel = four*in25
202 xx = fourth*xx
203 yy = fourth*yy
204 zz = fourth*zz
205 ixy(i) = -xcg(i)*yy
206 iyz(i) = -ycg(i)*zz
207 izx(i) = -zcg(i)*xx
208 xx = xcg(i)*xx
209 yy = ycg(i)*yy
210 zz = zcg(i)*zz
211 ixx(i)= inel + yy + zz
212 iyy(i)= inel + zz + xx
213 izz(i)= inel + xx + yy
214 vxa(i)=fourth*vxa(i)
215 vya(i)=fourth*vya(i)
216 vza(i)=fourth*vza(i)
217 xxm(i)= vza(i)*ycg(i)-vya(i)*zcg(i)
218 . +in25*
219 . (vrl1(i,1)+vrl2(i,1)+vrl3(i,1)+vrl4(i,1))
220 yym(i)= vxa(i)*zcg(i)-vza(i)*xcg(i)
221 . +in25*
222 . (vrl1(i,2)+vrl2(i,2)+vrl3(i,2)+vrl4(i,2))
223 zzm(i)= vya(i)*xcg(i)-vxa(i)*ycg(i)
224 . + in25*
225 . (vrl1(i,3)+vrl2(i,3)+vrl3(i,3)+vrl4(i,3))
226 va2 = vrl1(i,1)*vrl1(i,1)+vrl2(i,1)*vrl2(i,1)
227 2 + vrl3(i,1)*vrl3(i,1)+vrl4(i,1)*vrl4(i,1)
228 3 + vrl1(i,2)*vrl1(i,2)+vrl2(i,2)*vrl2(i,2)
229 4 + vrl3(i,2)*vrl3(i,2)+vrl4(i,2)*vrl4(i,2)
230 5 + vrl1(i,3)*vrl1(i,3)+vrl2(i,3)*vrl2(i,3)
231 6 + vrl3(i,3)*vrl3(i,3)+vrl4(i,3)*vrl4(i,3)
232 rei(i)= eint(i,2)
233 rek(i)= in25*va2*half
234 ENDDO
235
236 IF (igre /= 0) THEN
237 flag = 1
238 CALL grelem_sav(jft ,jlt ,gresav,igrth ,grth ,
239 2 off ,ei ,ek ,xm ,ym ,
240 3 zm ,xmas ,xcg ,ycg ,zcg ,
241 4 xxm ,yym ,zzm ,ixx ,iyy ,
242 5 izz ,ixy ,iyz ,izx ,rei ,
243 6 rek ,flag)
244 ENDIF
245
246 ic=1
247 jst(ic)=jft
248 DO j=jft+1,jlt
249 IF (ipartc(j)/=ipartc(j-1)) THEN
250 ic=ic+1
251 jst(ic)=j
252 ENDIF
253 ENDDO
254 jst(ic+1)=jlt+1
255 IF (ic==1) THEN
256 mx = ipartc(jft)
257 DO i=jft,jlt
258 IF (icrack3d > 0 .AND. ixfem > 0 .AND. actifxfem > 0) THEN
259 IF(off(i)/=zero)THEN
260 partsav(1,mx)=partsav(1,mx) + ei(i)
261 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
262 partsav(2,mx)=partsav(2,mx) + ek(i)
263 partsav(3,mx)=partsav(3,mx) + xm(i)
264 partsav(4,mx)=partsav(4,mx) + ym(i)
265 partsav(5,mx)=partsav(5,mx) + zm(i)
266 ENDIF
267 ELSE
268 partsav(1,mx)=partsav(1,mx) + ei(i)
269 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
270 partsav(2,mx)=partsav(2,mx) + ek(i)
271 partsav(3,mx)=partsav(3,mx) + xm(i)
272 partsav(4,mx)=partsav(4,mx) + ym(i)
273 partsav(5,mx)=partsav(5,mx) + zm(i)
274 ENDIF
275 IF(off(i)/=zero)THEN
276 partsav(6,mx)=partsav(6,mx) + xmas(i)
277
278 ENDIF
279 partsav(9,mx) =partsav(9,mx) + xcg(i)
280 partsav(10,mx)=partsav(10,mx) + ycg(i)
281 partsav(11,mx)=partsav(11,mx) + zcg(i)
282 partsav(12,mx)=partsav(12,mx) + xxm(i)
283 partsav(13,mx)=partsav(13,mx) + yym(i)
284 partsav(14,mx)=partsav(14,mx) + zzm(i)
285 partsav(15,mx)=partsav(15,mx) + ixx(i)
286 partsav(16,mx)=partsav(16,mx) + iyy(i)
287 partsav(17,mx)=partsav(17,mx) + izz(i)
288 partsav(18,mx)=partsav(18,mx) + ixy(i)
289 partsav(19,mx)=partsav(19,mx) + iyz(i)
290 partsav(20,mx)=partsav(20,mx) + izx(i)
291 partsav(21,mx)=partsav(21,mx) + rei(i)
292 partsav(22,mx)=partsav(22,mx) + rek(i)
293 ENDDO
294 ELSE
295
296 DO ii=1,ic
297 mx=ipartc(jst(ii))
298 IF (jst(ii+1)-jst(ii)>15) THEN
299 DO i=jst(ii),jst(ii+1)-1
300 IF (icrack3d > 0 .AND. ixfem > 0 .AND. actifxfem > 0) THEN
301 IF(off(i)/=zero)THEN
302 partsav(1,mx)=partsav(1,mx) + ei(i)
303 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
304 partsav(2,mx)=partsav(2,mx) + ek(i)
305 partsav(3,mx)=partsav(3,mx) + xm(i)
306 partsav(4,mx)=partsav(4,mx) + ym(i)
307 partsav(5,mx)=partsav(5,mx) + zm(i)
308 ENDIF
309 ELSE
310 partsav(1,mx)=partsav(1,mx) + ei(i)
311 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
312 partsav(2,mx)=partsav(2,mx) + ek(i)
313 partsav(3,mx)=partsav(3,mx) + xm(i)
314 partsav(4,mx)=partsav(4,mx) + ym(i)
315 partsav(5,mx)=partsav(5,mx) + zm(i)
316 ENDIF
317 IF(off(i)/=zero)THEN
318 partsav(6,mx)=partsav(6,mx) + xmas(i)
319
320 ENDIF
321 partsav(9,mx) =partsav(9,mx) + xcg(i)
322 partsav(10,mx)=partsav(10,mx) + ycg(i)
323 partsav(11,mx)=partsav(11,mx) + zcg(i)
324 partsav(12,mx)=partsav(12,mx) + xxm(i)
325 partsav(13,mx)=partsav(13,mx) + yym(i)
326 partsav(14,mx)=partsav(14,mx) + zzm(i)
327 partsav(15,mx)=partsav(15,mx) + ixx(i)
328 partsav(16,mx)=partsav(16,mx) + iyy(i)
329 partsav(17,mx)=partsav(17,mx) + izz(i)
330 partsav(18,mx)=partsav(18,mx) + ixy(i)
331 partsav(19,mx)=partsav(19,mx) + iyz(i)
332 partsav(20,mx)=partsav(20,mx) + izx(i)
333 partsav(21,mx)=partsav(21,mx) + rei(i)
334 partsav(22,mx)=partsav(22,mx) + rek(i)
335 ENDDO
336 ELSE
337 DO i=jst(ii),jst(ii+1)-1
338 IF (icrack3d > 0 .AND. ixfem > 0 .AND. actifxfem > 0) THEN
339 IF (off(i)/=zero) THEN
340 partsav(1,mx)=partsav(1,mx) + ei(i)
341 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
342 partsav(2,mx)=partsav(2,mx) + ek(i)
343 partsav(3,mx)=partsav(3,mx) + xm(i)
344 partsav(4,mx)=partsav(4,mx) + ym(i)
345 partsav(5,mx)=partsav(5,mx) + zm(i)
346 ENDIF
347 ELSE
348 partsav(1,mx)=partsav(1,mx) + ei(i)
349 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
350 partsav(2,mx)=partsav(2,mx) + ek(i)
351 partsav(3,mx)=partsav(3,mx) + xm(i)
352 partsav(4,mx)=partsav(4,mx) + ym(i)
353 partsav(5,mx)=partsav(5,mx) + zm(i)
354 ENDIF
355 IF(off(i)/=zero)THEN
356 partsav(6,mx)=partsav(6,mx) + xmas(i)
357
358 ENDIF
359 partsav(9,mx) =partsav(9,mx) + xcg(i)
360 partsav(10,mx)=partsav(10,mx) + ycg(i)
361 partsav(11,mx)=partsav(11,mx) + zcg(i)
362 partsav(12,mx)=partsav(12,mx) + xxm(i)
363 partsav(13,mx)=partsav(13,mx) + yym(i)
364 partsav(14,mx)=partsav(14,mx) + zzm(i)
365 partsav(15,mx)=partsav(15,mx) + ixx(i)
366 partsav(16,mx)=partsav(16,mx) + iyy(i)
367 partsav(17,mx)=partsav(17,mx) + izz(i)
368 partsav(18,mx)=partsav(18,mx) + ixy(i)
369 partsav(19,mx)=partsav(19,mx) + iyz(i)
370 partsav(20,mx)=partsav(20,mx) + izx(i)
371 partsav(21,mx)=partsav(21,mx) + rei(i)
372 partsav(22,mx)=partsav(22,mx) + rek(i)
373 ENDDO
374 ENDIF
375 ENDDO
376 ENDIF
377 ELSE
378 IF (igre /= 0) THEN
379 flag = 0
380 CALL grelem_sav(jft ,jlt ,gresav,igrth ,grth ,
381 2 off ,ei ,ek ,xm ,ym ,
382 3 zm ,xmas ,rbidon,rbidon,rbidon,
383 4 rbidon,rbidon,rbidon,rbidon,rbidon,
384 5 rbidon,rbidon,rbidon,rbidon,rbidon,
385 6 rbidon,flag)
386 ENDIF
387 ic=1
388 jst(ic)=jft
389 DO j=jft+1,jlt
390 IF (ipartc(j)/=ipartc(j-1)) THEN
391 ic=ic+1
392 jst(ic)=j
393 ENDIF
394 ENDDO
395 jst(ic+1)=jlt+1
396 IF (ic==1) THEN
397 mx = ipartc(jft)
398 DO i=jft,jlt
399 IF (icrack3d > 0 .AND. ixfem > 0 .AND. actifxfem > 0) THEN
400 IF (off(i)/=zero)THEN
401 partsav(1,mx)=partsav(1,mx) + ei(i)
402 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
403 partsav(2,mx)=partsav(2,mx) + ek(i)
404 partsav(3,mx)=partsav(3,mx) + xm(i)
405 partsav(4,mx)=partsav(4,mx) + ym(i)
406 partsav(5,mx)=partsav(5,mx) + zm(i)
407 ENDIF
408 ELSE
409 partsav(1,mx)=partsav(1,mx) + ei(i)
410 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
411 partsav(2,mx)=partsav(2,mx) + ek(i)
412 partsav(3,mx)=partsav(3,mx) + xm(i)
413 partsav(4,mx)=partsav(4,mx) + ym(i)
414 partsav(5,mx)=partsav(5,mx) + zm(i)
415 ENDIF
416 IF(off(i)/=zero)THEN
417 partsav(6,mx)=partsav(6,mx) + xmas(i)
418
419 ENDIF
420 ENDDO
421 ELSE
422 DO ii=1,ic
423 mx=ipartc(jst(ii))
424 IF (jst(ii+1)-jst(ii)>15) THEN
425 DO i=jst(ii),jst(ii+1)-1
426 IF (icrack3d > 0 .AND. ixfem > 0 .AND. actifxfem > 0) THEN
427 IF(off(i)/=zero)THEN
428 partsav(1,mx)=partsav(1,mx) + ei(i)
429 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
430 partsav(2,mx)=partsav(2,mx) + ek(i)
431 partsav(3,mx)=partsav(3,mx) + xm(i)
432 partsav(4,mx)=partsav(4,mx) + ym(i)
433 partsav(5,mx)=partsav(5,mx) + zm(i)
434 ENDIF
435 ELSE
436 partsav(1,mx)=partsav(1,mx) + ei(i)
437 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
438 partsav(2,mx)=partsav(2,mx) + ek(i)
439 partsav(3,mx)=partsav(3,mx) + xm(i)
440 partsav(4,mx)=partsav(4,mx) + ym(i)
441 partsav(5,mx)=partsav(5,mx) + zm(i)
442 ENDIF
443 IF(off(i)/=zero)THEN
444 partsav(6,mx)=partsav(6,mx) + xmas(i)
445
446 ENDIF
447 ENDDO
448 ELSE
449 DO i=jst(ii),jst(ii+1)-1
450 IF (icrack3d > 0 .AND. ixfem > 0 .AND. actifxfem > 0) THEN
451 IF(off(i)/=zero)THEN
452 partsav(1,mx)=partsav(1,mx) + ei(i)
453 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
454 partsav(2,mx)=partsav(2,mx) + ek(i)
455 partsav(3,mx)=partsav(3,mx) + xm(i)
456 partsav(4,mx)=partsav(4,mx) + ym(i)
457 partsav(5,mx)=partsav(5,mx) + zm(i)
458 ENDIF
459 ELSE
460 partsav(1,mx)=partsav(1,mx) + ei(i)
461 IF (g_wpla > 0) partsav(29,mx)=partsav(29,mx) + wpla(i)
462 partsav(2,mx)=partsav(2,mx) + ek(i)
463 partsav(3,mx)=partsav(3,mx) + xm(i)
464 partsav(4,mx)=partsav(4,mx) + ym(i)
465 partsav(5,mx)=partsav(5,mx) + zm(i)
466 ENDIF
467 IF(off(i)/=zero)THEN
468 partsav(6,mx)=partsav(6,mx) + xmas(i)
469
470 ENDIF
471 ENDDO
472 ENDIF
473 ENDDO
474 ENDIF
475 ENDIF
476
477 IF(iexpan > 0) THEN
478 DO i=jft,jlt
479 mx = ipartc(i)
480 IF(off(i)/=zero)THEN
481 partsav(27,mx)=partsav(27,mx) + eintth(i)
482 ENDIF
483 ENDDO
484 ENDIF
485
486 DO i = jft,jlt
487 mx = ipartc(i)
488 IF (off(i)==zero) THEN
489 partsav(25,mx) = partsav(25,mx) + one
490 ENDIF
491 ENDDO
492
494
495 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 area(d1, x, x2, y, y2, eint, stif0)
subroutine sensor_energy_bilan(jft, jlt, ei, ek, off, ipart, itask, sensors)