44
45
46
47#include "implicit_f.inc"
48#include "comlock.inc"
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98#include "mvsiz_p.inc"
99
100#include "param_c.inc"
101#include "scr17_c.inc"
102#include "scr05_c.inc"
103#include "com08_c.inc"
104#include "units_c.inc"
105
106
107
108
109 INTEGER NEL, NUPARAM, NUVAR,,
110 . NGL(NEL),MAT(NEL),IPM(NPROPMI,*)
112 . time,timestep,uparam(*),
113 . rho(nel),rho0(nel),volume(nel),eint(nel),
114 . epspxx(nel),epspyy(nel),epspzz(nel),
115 . epspxy(nel,2),epspyz(nel,2),epspzx(nel,2),
116 . depsxx(nel),depsyy(nel),depszz(nel),
117 . depsxy(nel,2),depsyz(nel,2),depszx(nel,2),
118 . epsxx(nel) ,epsyy(nel) ,epszz(nel) ,
119 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,
120 . sigoxx(nel),sigoyy(nel),sigozz(nel),
121 . sigoxy(nel,2),sigoyz(nel,2),sigozx(nel,2),
122 . fr_wav(nel),amu(nel)
123
124
125
127 . signxx(nel),signyy(nel),signzz(nel),
128 . signxy(nel,2),signyz(nel,2),signzx(nel,
129 . sigvxx(nel),sigvyy(nel),sigvzz(nel),
130 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
131 . soundsp(nel),viscmax(nel)
132
133
134
136 . uvar(nel,nuvar), off(nel)
137
138
139
140 INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
142 . finter ,tf(*)
143 EXTERNAL finter
144
145
146
147
148
149
150
151
152
153
154 INTEGER I,J,IADBUF,IF1,IF2,AUX,IC,II,K,JJ,
155 . IAD1(MVSIZ),IPOS1(MVSIZ),ILEN1(MVSIZ),
156 . INDEX(MVSIZ), NINDX
158 . e11,e22,e33,g12,g23,g31,
159 . y11,y22,y33,y12,y23,y31,
160 . ep1,ep2,ep3,ep4,ep5,ep6,
161 . yc(mvsiz),
162 .
163 . emx11,emx22,emx33,emx12,emx23,emx31,amuv
165 . sxy(nel),syx(mvsiz),syz(mvsiz),
166 . szy(mvsiz),szx(mvsiz),sxz(mvsiz),
167 . dxy(mvsiz),dyx(mvsiz),dyz(mvsiz),
168 . dzy(mvsiz),dzx(mvsiz),dxz(mvsiz),fac(mvsiz,18)
169
170
171
172 IF(time==0.0)THEN
173 IF (nuvar>0) THEN
174 DO j=1,nuvar
175 DO i=1,nel
176 uvar(i,j)=zero
177 ENDDO
178 ENDDO
179 ENDIF
180 ENDIF
181
182#include "vectorize.inc"
183 DO i=1,nel
184
185 iadbuf = ipm(7,mat(i))
186 e11 = uparam(iadbuf)
187 e22 = uparam(iadbuf+1)
188 e33 = uparam(iadbuf+2)
189 g12 = uparam(iadbuf+3)
190 g23 = uparam(iadbuf+4)
191 g31 = uparam(iadbuf+5)
192
193 signxx(i) = sigoxx(i) + e11 * depsxx(i)
194 signyy(i) = sigoyy(i) + e22 * depsyy(i)
195 signzz(i) = sigozz(i) + e33 * depszz(i)
196 sxy(i) = sigoxy(i,1) + sigoxy(i,2)
197 syx(i) = sigoxy(i,1) - sigoxy(i,2)
198 syz(i) = sigoyz(i,1) + sigoyz(i,2)
199 szy(i) = sigoyz(i,1) - sigoyz(i,2)
200 szx(i) = sigozx(i,1) + sigozx(i,2)
201 sxz(i) = sigozx(i,1) - sigozx(i,2)
202
203 dxy(i) = depsxy(i,1) + depsxy(i,2)
204 dyx(i) = depsxy(i,1) - depsxy(i,2)
205 dyz(i) = depsyz(i,1) + depsyz(i,2)
206 dzy(i) = depsyz(i,1) - depsyz(i,2)
207 dzx(i) = depszx(i,1) + depszx(i,2)
208 dxz(i) = depszx(i,1) - depszx(i,2)
209
210 sxy(i) = sxy(i) + g12 * dxy(i)
211 syx(i) = syx(i) + g12 * dyx(i)
212 syz(i) = syz(i) + g23 * dyz(i)
213 szy(i) = szy(i) + g23 * dzy(i)
214 szx(i) = szx(i) + g31 * dzx(i)
215 sxz(i) = sxz(i) + g31 * dxz(i)
216
217 signxy(i,1) = half*(sxy(i) + syx(i))
218 signyz(i,1) = half*(syz(i) + szy(i))
219 signzx(i,1) = half*(szx(i) + sxz(i))
220 signxy(i,2) = half*(sxy(i) - syx(i))
221 signyz(i,2) = half*(syz(i) - szy(i))
222 signzx(i,2) = half*(szx(i) - sxz(i))
223
224 soundsp(i) = sqrt(
max(e11,e22,e33,g12,g23,g31)/rho0(i))
225 viscmax
226
227 ENDDO
228 nindx=0
229#include "vectorize.inc"
230 DO i=1,nel
231 iadbuf = ipm(7,mat(i)) - 1
232 emx11 = uparam(iadbuf+9)
233 emx22 = uparam(iadbuf+10)
234 emx33 = uparam(iadbuf+11)
235 emx12 = uparam(iadbuf+12)
236 emx23 = uparam(iadbuf+13)
237 emx31 = uparam(iadbuf+14)
238 fac(i,1 ) = uparam(iadbuf+21)
239 fac(i,2 ) = uparam(iadbuf+22)
240 fac(i,3 ) = uparam(iadbuf+23)
241 fac(i,4 ) = uparam(iadbuf+24)
242 fac(i,5 ) = uparam(iadbuf+25)
243 fac(i,6 ) = uparam(iadbuf+26)
244 fac(i,7 ) = uparam(iadbuf+27)
245 fac(i,8 ) = uparam(iadbuf+28)
246 fac(i,9 ) = uparam(iadbuf+29)
247 fac(i,10) = uparam(iadbuf+30)
248 fac(i,11) = uparam(iadbuf+31)
249 fac(i,12) = uparam(iadbuf+32)
250 fac(i,13) = uparam(iadbuf+33)
251 fac(i,14) = uparam(iadbuf+34)
252 fac(i,15) = uparam(iadbuf+35)
253 fac(i,16) = uparam(iadbuf+36)
254 fac(i,17) = uparam(iadbuf+37)
255 fac(i,18) = uparam(iadbuf+38)
256 IF((epsxx(i)>emx11.OR.
257 . epsyy(i)>emx22.OR.
258 . epszz(i)>emx33.OR.
259 . abs(epsxy(i)/two)>emx12.OR.
260 . abs(epsyz(i)/two)>emx23.OR.
261 . abs(epszx(i)/two)>emx31).AND.off(i)/=zero) THEN
262 off(i) = zero
263 nindx=nindx+1
264 index(nindx)=i
265 ENDIF
266 ENDDO
267 IF(nindx>0)THEN
268 DO j=1,nindx
269#include "lockon.inc"
270 WRITE(iout, 1000) ngl(index(j))
271 WRITE(istdo,1100) ngl(index(j)),tt
272#include "lockoff.inc"
273 ENDDO
274 ENDIF
275
276#include "vectorize.inc"
277 DO i=1,nel
278
279
280 ep(i,1) = amu(i)
281 ep(i,2) = amu(i)
282 ep(i,3) = amu(i)
283 ep(i,4) = amu(i)
284 ep(i,5) = amu(i)
285 ep(i,6) = amu(i)
286 IF(nuparam>=8)THEN
287 iadbuf = ipm(7,mat(i))
288 if1=nint(uparam(iadbuf+6))
289 if2=nint(uparam(iadbuf+7))
290 IF(if1==1)THEN
291 ep(i,1) = epsxx(i)
292 ep(i,2) = epsyy
293 ep(i,3) = epszz(i)
294 ELSEIF(if1==-1)THEN
295 ep(i,1) = -epsxx(i)
296 ep(i,2) = -epsyy(i)
297 ep(i,3) = -epszz(i)
298 ENDIF
299 IF(if2==1)THEN
300 ep(i,4) = epsxy(i)
301 ep(i,5) = epsyz(i)
302 ep(i,6) = epszx(i)
303 ep(i,7) = epsxy(i)
304 ep(i,8) = epsyz(i)
305 ep(i,9) = epszx(i)
306 ELSEIF(if2==-1)THEN
307 ep(i,4) = -epsxy(i)
308 ep(i,5) = -epsyz(i)
309 ep(i,6) = -epszx(i)
310 ep(i,7) = -epsxy(i)
311 ep(i,8) = -epsyz(i)
312 ep(i,9) = -epszx(i)
313 ENDIF
314 ENDIF
315 ENDDO
316
317 DO j = 1, 9
318 ic = 0
319#include "vectorize.inc"
320 DO i = 1, nel
321 jj=j
322 IF(fr_wav(i)==1.)jj=j+9
323 nfunc = ipm(10,mat(i))
324 IF (nfunc>=jj) THEN
325 aux=ipm(10+jj,mat(i))
326 IF (aux/=0) THEN
327 ic = ic + 1
328 index(ic) = i
329 ipos1(ic) = nint(uvar(i,jj))
330 iad1(ic) = npf(aux) / 2 + 1
331 ilen1(ic) = npf(aux+1) / 2 - iad1(ic) - ipos1(ic)
332 epc(ic) = ep(i,j)
333 ENDIF
334 ENDIF
335 ENDDO
336
337 IF (iresp==1) THEN
338 CALL vinter2dp(tf,iad1,ipos1,ilen1,ic,epc,dydxv,yc)
339 ELSE
340 CALL vinter2(tf,iad1,ipos1,ilen1,ic,epc,dydxv,yc)
341 ENDIF
342
343 IF (j==1) THEN
344#include "vectorize.inc"
345 DO ii = 1, ic
346 i = index(ii)
347 jj=j
348 IF(fr_wav(i)==1.)jj=j+9
349 uvar(i,jj) = ipos1(ii)
350 signxx(i) = sign(
min(abs(signxx(i)),
351 . fac(i,jj)*yc(ii)),signxx(i))
352 ENDDO
353 ELSEIF (j==2) THEN
354#include "vectorize.inc"
355 DO ii = 1, ic
356 i = index(ii)
357 jj=j
358 IF(fr_wav(i)==1.)jj=j+9
359 uvar(i,jj) = ipos1(ii)
360 signyy(i) = sign(
min(abs(signyy(i)),
361 . fac(i,jj)*yc(ii)),signyy(i))
362 ENDDO
363 ELSEIF (j==3) THEN
364#include "vectorize.inc"
365 DO ii = 1, ic
366 i = index(ii)
367 jj=j
368 IF(fr_wav(i)==1.)jj=j+9
369 uvar(i,jj) = ipos1(ii)
370 signzz(i) = sign(
min(abs(signzz(i)),
371 . fac(i,jj)*yc(ii)),signzz(i))
372 ENDDO
373 ELSEIF (j==4) THEN
374#include "vectorize.inc"
375 DO ii = 1, ic
376 i = index(ii)
377 jj=j
378 IF(fr_wav(i)==1.)jj=j+9
379 uvar(i,jj) = ipos1(ii)
380 sxy(i) = sign(
min(abs(sxy(i)),
381 . fac(i,jj)*yc(ii)),sxy(i))
382 ENDDO
383 ELSEIF (j==5) THEN
384#include "vectorize.inc"
385 DO ii = 1, ic
386 i = index(ii)
387 jj=j
388 IF(fr_wav(i)==1.)jj=j+9
389 uvar(i,jj) = ipos1(ii)
390 syz(i) = sign(
min(abs(syz(i)),
391 . fac(i,jj)*yc(ii)),syz(i))
392 ENDDO
393 ELSEIF (j==6) THEN
394#include "vectorize.inc"
395 DO ii = 1, ic
396 i = index(ii)
397 jj=j
398 IF(fr_wav(i)==1.)jj=j+9
399 uvar(i,jj) = ipos1(ii)
400 szx(i) = sign(
min(abs(szx(i)),
401 . fac(i,jj)*yc(ii)),szx(i))
402 ENDDO
403 ELSEIF (j==7) THEN
404#include "vectorize.inc"
405 DO ii = 1, ic
406 i = index(ii)
407 jj=j
408 IF(fr_wav(i)==1.)jj=j+9
409 uvar(i,jj) = ipos1(ii)
410 syx(i) = sign(
min(abs(syx(i)),
411 . fac(i,jj)*yc(ii)),syx(i))
412 ENDDO
413 ELSEIF (j==8) THEN
414#include "vectorize.inc"
415 DO ii = 1, ic
416 i = index(ii)
417 jj=j
418 IF(fr_wav(i)==1.)jj=j+9
419 uvar(i,jj) = ipos1(ii)
420 szy(i) = sign(
min(abs(szy(i)),
421 . fac(i,jj)*yc(ii)),szy(i))
422 ENDDO
423 ELSEIF (j==9) THEN
424#include "vectorize.inc"
425 DO ii = 1, ic
426 i = index(ii)
427 jj=j
428 IF(fr_wav(i)==1.)jj=j+9
429 uvar(i,jj) = ipos1(ii)
430 sxz(i) = sign(
min(abs(sxz(i)),
431 . fac(i,jj)*yc(ii)),sxz(i))
432 ENDDO
433 ENDIF
434
435 ENDDO
436
437 DO i=1,nel
438 signxy(i,1) = half*(sxy(i) + syx(i))
439 signyz(i,1) = half*(syz(i) + szy(i))
440 signzx(i,1) = half*(szx(i) + sxz(i))
441 signxy(i,2) = half*(sxy(i) - syx(i))
442 signyz(i,2) = half*(syz(i) - szy(i))
443 signzx(i,2) = half*(szx(i) - sxz(i))
444 ENDDO
445
446#include "vectorize.inc"
447 DO i=1,nel
448 iadbuf = ipm(7,mat(i)) - 1
449 emx11 = uparam(iadbuf+15)
450 emx22 = uparam(iadbuf+16)
451 emx33 = uparam(iadbuf+17)
452 emx12 = uparam(iadbuf+18)
453 emx23 = uparam(iadbuf+19)
454 emx31 = uparam(iadbuf+20)
455 IF(-epsxx(i)>emx11.OR.
456 . -epsyy(i)>emx22.OR.
457 . -epszz(i)>emx33.OR.
458 . abs(epsxy(i)/two)>emx12.OR.
459 . abs(epsyz(i)/two)>emx23.OR.
460 . abs(epszx(i)/two)>emx31) THEN
461 fr_wav(i) = one
462 ELSE
463 fr_wav(i) = zero
464 ENDIF
465 ENDDO
466
467 1000 FORMAT(1x,'RUPTURE OF SOLID ELEMENT NUMBER ',i10)
468 1100 FORMAT(1x,'RUPTURE OF SOLID ELEMENT NUMBER ',i10,
469 . ' AT TIME :',g11.4)
470
471 RETURN
subroutine vinter2(tf, iad, ipos, ilen, nel0, x, dydx, y)
subroutine vinter2dp(tf, iad, ipos, ilen, nel0, x, dydx, y)