53
54
55
56 use glob_therm_mod
57 USE prop_param_mod , only : n_var_igeo
58
59
60
61#include "implicit_f.inc"
62#include "comlock.inc"
63
64
65
66#include "mvsiz_p.inc"
67
68
69
70#include "com08_c.inc"
71#include "param_c.inc"
72#include "scr03_c.inc"
73#include "scr17_c.inc"
74#include "units_c.inc"
75
76
77
78 INTEGER, INTENT(IN) :: ISMSTR
79 INTEGER, INTENT(IN) :: JSMS
80 INTEGER, INTENT(IN) ::
81 INTEGER, INTENT(IN) :: JTUR
82 INTEGER, INTENT(IN) :: JTHE
83 INTEGER, INTENT(IN) :: NFT
84 INTEGER, INTENT(IN) :: JSPH,NPG
85 INTEGER,INTENT(IN) :: NUMGEO
86 INTEGER NELTST,ITYPTST ,PID(*), G_DT
87 INTEGER MAT(*),NGL(*),IPLA,NEL,IPM(NPROPMI,*)
89 . dt2t
91 . pdam
93 . pm(npropm,*), off(*), sig(nel,6), eint(*), rho(*), qold(*),
94 . epxe(*), epd(*), vol(*),stifn(*), offg(*),geo(npropg,*) ,
95 . mumax(*), sigy(*), defp(*), dpla(mvsiz),
96 . amu(*), vol_avg(*)
98 . vnew(*), vd2(*), deltax(*), ssp(*), aire(*), vis(*),
99 . psh(*), pnew(1), qnew(*) ,ssp_eq(*),
100 . d1(*), d2(*), d3(*), d4(*), d5(*), d6(*),
101 . sold1(mvsiz), sold2(mvsiz), sold3(mvsiz),
102 . sold4(mvsiz), sold5(mvsiz), sold6(mvsiz),
103 . mssa(*), dmels(*), conde(*),
dtel(*),
104 . rhoref(*) ,rhosp(*)
105 type (glob_therm_) ,intent(inout) :: glob_therm
106 integer,dimension(n_var_igeo,numgeo),intent(in) :: igeo
107
108
109
110 INTEGER ICC(MVSIZ), I, MX, II,ICC_1
112 . rho0(mvsiz),
113 . g(mvsiz),ak(mvsiz),
114 . qh(mvsiz), c1(mvsiz),
115 . p(mvsiz), epmx(mvsiz),
116 . ca(mvsiz), cb(mvsiz), cc(mvsiz), cn(mvsiz),
117 . epdr(mvsiz),
118 . dvol(mvsiz), sigmx(mvsiz),
119 . ce(mvsiz),epsl(mvsiz), ql(mvsiz), yldl(mvsiz), aj2(mvsiz),
120 . g0(mvsiz),
121 . e1, e2, e3, e4, e5, e6, g1, g2,
122 . epsp, hl, depsl, alpe, dav, scale, bid1, bid2,
123 . bid3, einc, dta,facq0,
124 . rho0_1,c1_1,ca_1,cb_1,cn_1,
125 . epmx_1,sigmx_1,cc_1,epdr_1,epsl_1,
126 . yldl_1,ql_1
127
128 facq0 = one
129 IF(ipla==0)THEN
130 mx = mat(1)
131 rho0_1 =pm( 1,mx)
132 c1_1 =pm(32,mx)
133 ca_1 =pm(38,mx)
134 cb_1 =pm(39,mx)
135 cn_1 =pm(40,mx)
136 epmx_1 =pm(41,mx)
137 sigmx_1=pm(42,mx)
138 cc_1 =pm(43,mx)
139 epdr_1 =pm(44,mx)
140 epsl_1 =pm(45,mx)
141 yldl_1 =pm(47,mx)
142 ql_1 =pm(48,mx)
143 icc_1 =nint(pm(49,mx))
144 DO 10 i=1,nel
145 rho0(i) =rho0_1
146 g0(i) =pm(22,mx)*off(i)
147 c1(i) =c1_1
148 ca(i) =ca_1
149 cb(i) =cb_1
150 cn(i) =cn_1
151 epmx(i) =epmx_1
152 sigmx(i)=sigmx_1
153 cc(i) =cc_1
154 epdr(i) =epdr_1
155 epsl(i) =epsl_1
156 yldl(i) =yldl_1
157 ql(i) =ql_1
158 icc(i) =icc_1
159 10 CONTINUE
160 ELSE
161
162 mx = mat(1)
163 rho0_1 =pm( 1,mx)
164 c1_1 =pm(32,mx)
165 ca_1 =pm(38,mx)
166 cb_1 =pm(39,mx)
167 cn_1 =pm(40,mx)
168 epmx_1 =pm(41,mx)
169 sigmx_1=pm(42,mx)
170 cc_1 =pm(43,mx)
171 epdr_1 =pm(44,mx)
172 epsl_1 =pm(45,mx)
173 ql_1 =pm(46,mx)
174 yldl_1 =pm(47,mx)
175 icc_1 =nint(pm(49,mx))
176 DO 11 i=1,nel
177 rho0(i) =rho0_1
178 g0(i) =pm(22,mx)*off(i)
179 c1(i) =c1_1
180 ca(i) =ca_1
181 cb(i) =cb_1
182 cn(i) =cn_1
183 epmx(i) =epmx_1
184 sigmx(i)=sigmx_1
185 cc(i) =cc_1
186 epdr(i) =epdr_1
187 epsl(i) =epsl_1
188 ql(i) =ql_1
189 yldl(i) =yldl_1
190 icc(i) =icc_1
191 11 CONTINUE
192 ENDIF
193
194 DO 15 i=1,nel
195 epd(i)=off(i) *
max( abs(d1(i)), abs(d2(i)), abs(d3(i)), half*abs(d4(i)),half*abs(d5
196 epsp =
max(epd(i),epdr(i))
197 ce(i) = one +cc(i) * log(epsp/epdr(i))
198 15 CONTINUE
199
200 IF(ipla/=2)THEN
201 DO 20 i=1,nel
202 IF(cn(i)==one) THEN
203 ak(i)= ca(i)+cb(i)*epxe(i)
204 qh(i)= cb(i)*ce(i)
205 ELSE
206 IF(epxe(i)>zero) THEN
207 ak(i)=ca(i)+cb(i)*epxe(i)**cn(i)
208 IF(cn(i)>one) THEN
209 qh(i)= (cb(i)*cn(i)*epxe(i)**(cn(i)-one))*ce(i)
210 ELSE
211 qh(i)= (cb(i)*cn(i)/epxe(i)**(one - cn(i)))*ce(i)
212 ENDIF
213 ELSE
214 ak(i)=ca(i)
215 qh(i)=zero
216 ENDIF
217 ENDIF
218 sigy(i) = ak(i)
219 IF(epxe(i)>epmx(i))ak(i)=zero
220 IF(epxe(i)>epsl(i))qh(i)=ql(i)
221 20 CONTINUE
222 ELSE
223 DO i=1,nel
224 IF(cn(i)==one) THEN
225 ak(i)= ca(i)+cb(i)*epxe(i)
226 ELSE
227 IF(epxe(i)>zero) THEN
228 ak(i)=ca(i)+cb(i)*epxe(i)**cn(i)
229 ELSE
230 ak(i)=ca(i)
231 ENDIF
232 ENDIF
233 sigy(i) = ak(i)
234 IF(epxe(i)>epmx(i))ak(i)=zero
235 ENDDO
236 ENDIF
237
238 IF(ipla==0)THEN
239 DO i=1,nel
240 ak(i) =
min(ak(i),sigmx(i))
241 hl = three*g0(i)*ql(i)/(three*g0(i)+ql(i))
242 depsl =
max(zero,epxe(i)-epsl(i))
243 ak(i) =
min(ak(i),yldl(i)+hl*depsl)
244 ak(i) =
max(ak(i),zero)
245 alpe =
min(one,ak(i)/
max(ak(i)+three*g0(i)*depsl,em15))
246 ak(i) = ak(i)*ce(i)
247 IF(icc(i)==2) ak(i) =
min(ak(i),sigmx(i))
248 g(i) = alpe*g0(i)
249 c1(i) = pdam*alpe*c1(i) + (1.-pdam)*c1(i)
250 p(i) =-third*(sig(i,1)+sig(i,2)+sig(i,3))
251 g1=dt1*g(i)
252 g2=two*g1
253 ssp(i)=sqrt((onep333*g(i)+c1(i))/rho0(i))
254
255
256
257 dav =-third*(d1(i)+d2(i)+d3(i))
258 sig(i,1)=sig(i,1)+p(i)+g2*(d1(i)+dav)
259 sig(i,2)=sig(i,2)+p(i)+g2*(d2(i)+dav)
260 sig(i,3)=sig(i,3)+p(i)+g2*(d3(i)+dav)
261 sig(i,4)=sig(i,4)+g1*d4(i)
262 sig(i,5)=sig(i,5)+g1*d5(i)
263 sig(i,6)=sig(i,6)+g1*d6(i)
264 aj2(i)=half*(sig(i,1)**2+sig(i,2)**2+sig(i,3)**2)
265 1 +sig(i,4)**2+sig(i,5)**2+sig(i,6)**2
266 aj2(i)=sqrt(three*aj2(i))
267 ENDDO
268 ELSEIF(ipla==2)THEN
269 DO i=1,nel
270 ak(i) =
min(ak(i),sigmx(i))
271 depsl =
max(zero,epxe(i)-epsl(i))
272 ak(i) =
min(ak(i),yldl(i)+ql(i)*depsl)
273 ak(i) =
max(ak(i),zero)
274 alpe =
min(one,ak(i)/
max(ak(i) + three*g0(i)*depsl,em15))
275 ak(i) = ak(i)*ce(i)
276 IF(icc(i)==2) ak(i) =
min(ak(i),sigmx(i))
277 g(i) = alpe*g0(i)
278 c1(i) = pdam*alpe*c1(i) + (one - pdam)*c1(i)
279 p(i) =-third*(sig(i,1)+sig(i,2)+sig(i,3))
280 g1=dt1*g(i)
281 g2=two*g1
282 ssp(i)=sqrt((onep333*g(i)+c1(i))/rho0(i))
283
284
285
286 IF(epxe(i)>epsl(i).AND.three*g(i)<em15)THEN
287 sig(i,1)=zero
288 sig(i,2)=zero
289 sig(i,3)=zero
290 sig(i,4)=zero
291 sig(i,5)=zero
292 sig(i,6)=zero
293 aj2(i) =zero
294 ELSE
295 dav =-third*(d1(i)+d2(i)+d3(i))
296 sig(i,1)=sig(i,1)+p(i)+g2*(d1(i)+dav)
297 sig(i,2)=sig(i,2)+p(i)+g2*(d2(i)+dav)
298 sig(i,3)=sig(i,3)+p(i)+g2*(d3(i)+dav)
299 sig(i,4)=sig(i,4)+g1*d4(i)
300 sig(i,5)=sig(i,5)+g1*d5(i)
301 sig(i,6)=sig(i,6)+g1*d6(i)
302 aj2(i)=half*(sig(i,1)**2+sig(i,2)**2+sig(i,3)**2)+
303 . sig(i,4)**2+sig(i,5)**2+sig(i,6)**2
304 aj2(i)=sqrt(three*aj2(i))
305 ENDIF
306 ENDDO
307 ELSE
308 DO i=1,nel
309 ak(i) =
min(ak(i),sigmx(i))
310 depsl =
max(zero,epxe(i)-epsl(i))
311 ak(i) =
min(ak(i),yldl(i)+ql(i)*depsl)
312 ak(i) =
max(ak(i),zero)
313 alpe =
min(one,ak(i)/
max(ak(i) + three*g0(i)*depsl,em15))
314 ak(i) = ak(i)*ce(i)
315 IF(icc(i)==2) ak(i) =
min(ak(i),sigmx(i))
316 g(i) = alpe*g0(i)
317 c1(i) = pdam*alpe*c1(i) + (one - pdam)*c1(i)
318 p(i) =-third*(sig(i,1)+sig(i,2)+sig(i,3))
319 g1=dt1*g(i)
320 g2=two*g1
321 ssp(i)=sqrt((onep333*g(i)+c1(i))/rho0(i))
322
323
324
325 IF(epxe(i)>epsl(i).AND.g(i)*(three*g0(i)+qh(i))<em15)THEN
326 sig(i,1)=zero
327 sig(i,2)=zero
328 sig(i,3)=zero
329 sig(i,4)=zero
330 sig(i,5)=zero
331 sig(i,6)=zero
332 aj2(i) =zero
333 ELSE
334 dav =-third*(d1(i)+d2(i)+d3(i))
335 sig(i,1)=sig(i,1)+p(i)+g2*(d1(i)+dav)
336 sig(i,2)=sig(i,2)+p(i)+g2*(d2(i)+dav)
337 sig(i,3)=sig(i,3)+p(i)+g2*(d3(i)+dav)
338 sig(i,4)=sig(i,4)+g1*d4(i)
339 sig(i,5)=sig(i,5)+g1*d5(i)
340 sig(i,6)=sig(i,6)+g1*d6(i)
341 aj2(i)=half*(sig(i,1)**2+sig(i,2)**2+sig(i,3)**2)+
342 . sig(i,4)**2+sig(i,5)**2+sig(i,6)**2
343 aj2(i)=sqrt(three*aj2(i))
344 ENDIF
345 ENDDO
346 ENDIF
347
348 IF(ipla==0)THEN
349 DO i=1,nel
350 scale=
min(one,ak(i) /
max(aj2(i),em15))
351 sig(i,1)=scale*sig(i,1)
352 sig(i,2)=scale*sig(i,2)
353 sig(i,3)=scale*sig(i,3)
354 sig(i,4)=scale*sig(i,4)
355 sig(i,5)=scale*sig(i,5)
356 sig(i,6)=scale*sig(i,6)
357 epxe(i)=epxe(i)+(one -scale)*aj2(i)/
max(three*g(i)+qh(i),em15)
358 dpla(i) = (one -scale)*aj2(i)/
max(three*g(i)+qh(i),em15)
359 ENDDO
360 ELSEIF(ipla==2)THEN
361 DO i=1,nel
362 scale=
min(one,ak(i) /
max(aj2(i),em15))
363 sig(i,1)=scale*sig(i,1)
364 sig(i,2)=scale*sig(i,2)
365 sig(i,3)=scale*sig(i,3)
366 sig(i,4)=scale*sig(i,4)
367 sig(i,5)=scale*sig(i,5)
368 sig(i,6)=scale*sig(i,6)
369 epxe(i)=epxe(i)+(one -scale)*aj2(i)/
max(three*g(i),em15)
370 dpla(i) = (one -scale)*aj2(i)/
max(three*g(i),em15)
371 ENDDO
372 ELSEIF(ipla==1)THEN
373 DO i=1,nel
374 scale=
min(one,ak(i) /
max(aj2(i),em15))
375 dpla(i)=(one -scale)*aj2(i)*g0(i)/
max(g(i)*(three*g0(i)+qh(i)),em15)
376 ak(i)=
max(zero,ak(i)+dpla(i)*qh(i))
377 scale=
min(one,ak(i)/
max(aj2(i),em15))
378 sig(i,1)=scale*sig(i,1)
379 sig(i,2)=scale*sig(i,2)
380 sig(i,3)=scale*sig(i,3)
381 sig(i,4)=scale*sig(i,4)
382 sig(i,5)=scale*sig(i,5)
383 sig(i,6)=scale*sig(i,6)
384 epxe(i)=epxe(i)+dpla(i)
385 ENDDO
386 ENDIF
387
388 IF (jsph==0)THEN
390 1 pm, off, rho, bid1,
391 2 bid2, ssp, bid3, stifn,
392 3 dt2t, neltst, ityptst, aire,
393 4 offg, geo, pid, vnew,
394 5 vd2, deltax, vis, d1,
395 6 d2, d3, pnew, psh,
396 7 mat, ngl, qnew, ssp_eq,
397 8 vol, mssa, dmels, igeo,
398 9 facq0, conde,
dtel, g_dt,
399 a ipm, rhoref, rhosp, nel,
400 b ity, ismstr, jtur, jthe,
401 c jsms, npg , glob_therm)
402 ELSE
404 1 pm, off, rho, bid1,
405 2 bid2, bid3, stifn, dt2t,
406 3 neltst, ityptst, offg, geo,
407 4 pid, mumax, ssp, vnew,
408 5 vd2, deltax, vis, d1,
409 6 d2, d3, pnew, psh,
410 7 mat, ngl, qnew, ssp_eq,
411 8 g_dt,
dtel, nel, ity,
412 9 jtur, jthe)
413 ENDIF
414
415 DO 120 i=1,nel
416 pnew(i)=c1(i)*amu(i)
417 120 CONTINUE
418
419
420
421
422 IF(pdam==one.AND.codvers>=42)THEN
423 DO i=1,nel
424 IF(off(i)<em01) off(i)=zero
425 IF(off(i)<one) off(i)=off(i)*four_over_5
426 ENDDO
427
428 DO i=1,nel
429 IF(epmx(i)/=zero.AND.off(i)>=one.AND. epxe(i)>epmx(i))THEN
430 off(i)=off(i)*four_over_5
431 ii=i+nft
432#include "lockon.inc"
433 WRITE(iout,1000) ngl(i)
434#include "lockoff.inc"
435 ENDIF
436 ENDDO
437 ENDIF
438
439 dta = half*dt1
440
441 DO i=1,nel
442 sig(i,1)=(sig(i,1)-pnew(i))*off(i)
443 sig(i,2)=(sig(i,2)-pnew(i))*off(i)
444 sig(i,3)=(sig(i,3)-pnew(i))*off(i)
445 sig(i,4)= sig(i,4)*off(i)
446 sig(i,5)= sig(i,5)*off(i)
447 sig(i,6)= sig(i,6)*off(i)
448 e1=d1(i)*(sold1(i)+sig(i,1))
449 e2=d2(i)*(sold2(i)+sig(i,2))
450 e3=d3(i)*(sold3(i)+sig(i,3))
451 e4=d4(i)*(sold4(i)+sig(i,4))
452 e5=d5(i)*(sold5(i)+sig(i,5))
453 e6=d6(i)*(sold6(i)+sig(i,6))
454 einc= vol_avg(i)*(e1+e2+e3+e4+e5+e6)*dta - half*dvol(i)*(qold(i)+qnew(i))
455 eint(i)=(eint(i)+einc*off(i)) /
max(em15,vol(i))
456 qold(i)=qnew(i)
457 ENDDO
458
459 DO i=1,nel
460 defp(i)=epxe(i)
461 sigy(i)=
max(sigy(i),ak(i))
462 ENDDO
463
464 1000 FORMAT(1x,'RUPTURE OF SOLID ELEMENT NUMBER ',i10)
465 RETURN
subroutine dtel(ssp, pm, geo, pid, mat, rho0, vis, deltax, aire, vol, dtx)
subroutine mdtsph(pm, off, rho, rk, t, re, sti, dt2t, neltst, ityptst, offg, geo, pid, mumax, ssp, vol, vd2, deltax, vis, d1, d2, d3, pnew, psh, mat, ngl, qvis, ssp_eq, g_dt, dtsph, nel, ity, jtur, jthe)
subroutine mqviscb(pm, off, rho, rk, temp, ssp, re, sti, dt2t, neltst, ityptst, aire, offg, geo, pid, vol, vd2, deltax, vis, d1, d2, d3, pnew, psh, mat, ngl, qvis, ssp_eq, vol0, mssa, dmels, igeo, facq0, conde, dtel, g_dt, ipm, rhoref, rhosp, nel, ity, ismstr, jtur, jthe, jsms, npg, glob_therm)