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