37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "com01_c.inc"
45
46
47
48 INTEGER NEL,NUPARAM,NUVAR,JTHE
49 INTEGER ,DIMENSION(NEL), INTENT(IN) :: NGL
51 . time,timestep
52 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
53 . uparam
54 my_real,
DIMENSION(NEL),
INTENT(IN) ::
55 . rho,tempel,
56 . depsxx,depsyy,depsxy,depsyz,depszx,
57 . sigoxx,sigoyy,sigoxy,sigoyz,sigozx,
58 . gs,thkly,pla_nl,plap_nl,dpla_nl
59
60 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
61 . soundsp,sigy,et,
62 . signxx,signyy,signxy,signyz,signzx
63
64 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
65 . pla,dpla,epsd,off,thk,temp,seq
66 my_real ,
DIMENSION(NEL,6),
INTENT(INOUT) ::
67 . dmg
68 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
69 . uvar
70
71
72
73 INTEGER I,II,IGURSON,ITER,NITER,NINDX,INDEX(NEL)
74
76 . young,bulk,lam,g,g2,nu,cdr,kdr,hard,yld0,qvoce,bvoce,jcc,
77 . epsp0,mtemp,tini,tref,eta,cp,dpis,dpad,asrate,afiltr,hkhi,
78 . q1,q2,ed,an,epn,kw,fr,fc,f0,a11,a12,nnu
80 . dti,h,ldav,sigvm,omega,
81 . dtemp,fcosh,fsinh,dpdt,dlam,ddep
83 . dsdrdj2,dsdrdj3,
84 . dj3dsxx,dj3dsyy,dj3dsxy,dj3dszz,
85 . dj2dsxx,dj2dsyy,dj2dsxy,normsig,
86 . dfdsxx,dfdsyy,dfdsxy,
87 . sdpla,dphi_dtrsig,dfdsig2,sdv_dfdsig,
88 . dphi_dsig,dphi_dyld,dphi_dfdr,df_dfs,dfs_dft,dphi_dft,
89 . dphi_dfs,dfn_dlam,dfsh_dlam,dfg_dlam,dft_dlam,
90 . dfn,dfsh,dfg,dft,dyld_dpla,dyld_dtemp,dtemp_dlam
91
93 . dsigxx,dsigyy,dsigxy,trsig,trdep,trdfds,
94 . sxx,syy,sxy,szz,sigm,j2,j3,sigdr,yld,weitemp,
95 . hardp,fhard,frate,ftherm,dtherm,fdr,phi0,triax,
96 . fdam,phi,ft,fs,fg,fn,fsh,dpla_dlam,dphi_dlam,dezz,etat,
97 . normxx,normyy,normxy,normzz,sig_dfdsig,
98 . dpxx,dpyy,dpxy,dpzz,sigdr2,yld2i,dlam_nl
99
100
101
102
103
104
105
106
107
108
109
110
111
112 young = uparam(1)
113 bulk = uparam(2)
114 g = uparam(3)
115 g2 = uparam(4)
116 lam = uparam(5)
117 nu = uparam(6)
118 nnu = uparam(7)
119 a11 = uparam(9)
120 a12 = uparam(10)
121
122 cdr = uparam(12)
123 kdr = uparam(13)
124 tini = uparam(14)
125 hard = uparam(15)
126 yld0 = uparam(16)
127 qvoce = uparam(17)
128 bvoce = uparam(18)
129
130 jcc = uparam(20)
131 epsp0 = uparam(21)
132
133 mtemp = uparam(22)
134 tref = uparam(23)
135 eta = uparam(24)
136 cp = uparam(25)
137 dpis = uparam(26)
138 dpad = uparam(27)
139
140 asrate = uparam(28)
141 afiltr = asrate*timestep/(asrate*timestep + one)
142 dti = one /
max(timestep, em20)
143
144
145 igurson = nint(uparam(30))
146
147
148
149
150 q1 = uparam(31)
151 q2 = uparam(32)
152 ed = uparam(34)
153 an = uparam(35)
154 kw = uparam(36)
155 fr = uparam(37)
156 fc = uparam(38)
157 f0 = uparam(39)
158 hkhi = uparam(40)
159
160
161 DO i=1,nel
162
163 IF (off(i) < em03) off(i) = zero
164 IF (off(i) < one) off(i) = off(i)*four_over_5
165
166 yld(i) = uvar(i,1)
167
168 fg(i) = dmg(i,2)
169 fn(i) = dmg(i,3)
170 fsh(i) = dmg(i,4)
171 ft(i) = dmg(i,5)
172 fs(i) = dmg(i,6)
173
174 dpla(i) = zero
175 et(i) = one
176 hardp(i) = zero
177 dezz(i) = zero
178 dlam_nl(i) = zero
179 sig_dfdsig(i) = zero
180 normxx(i) = zero
181 normyy(i) = zero
182 normzz(i) = zero
183 ENDDO
184
185
186 IF (time == zero) THEN
187 temp(1:nel) = tini
188 IF (isigi == 0) THEN
189 dmg(1:nel,5) = f0
190 ft(1:nel) = f0
191 dmg(1:nel,1) = f0/fr
192 IF (f0<fc) THEN
193 dmg(1:nel,6) = f0
194 ELSE
195 dmg(1:nel,6) = fc + (one/q1-fc)*(f0-fc)/(fr-fc)
196 ENDIF
197 fs(1:nel) = dmg(1:nel,6)
198 ENDIF
199 ENDIF
200 IF (cp > zero) THEN
201 IF (jthe == 0) THEN
202 DO i=1,nel
203
204 IF (plap_nl(i) < dpis) THEN
205 weitemp(i) = zero
206 ELSEIF (plap_nl(i) > dpad) THEN
207 weitemp(i) = one
208 ELSE
209 weitemp(i) = ((plap_nl(i)-dpis)**2 )
210 . * (three*dpad - two*plap_nl(i) - dpis)
211 . / ((dpad-dpis)**3)
212 ENDIF
213 ENDDO
214 ELSE
215 temp(1:nel) = tempel(1:nel)
216 ENDIF
217 ENDIF
218
219
220
221
222 DO i=1,nel
223
224
225 trsig(i) = sigoxx(i) + sigoyy(i)
226 sigm(i) = -trsig(i) * third
227 sxx(i) = sigoxx(i) + sigm(i)
228 syy(i) = sigoyy(i) + sigm(i)
229 szz(i) = sigm(i)
230 sxy(i) = sigoxy(i)
231 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) + sxy(i)**2
232 j3(i) = sxx(i) * syy(i) * szz(i) - szz(i) * sxy(i)**2
233 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
234 IF (fdr(i) > zero) THEN
235 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
236 ELSE
237 sigdr(i) = zero
238 ENDIF
239
240
241 IF (sigdr(i)>zero) THEN
242 triax(i) = (trsig(i)*third)/sigdr(i)
243 ELSE
244 triax(i) = zero
245 ENDIF
246 IF (trsig(i)<zero) THEN
247 etat(i) = zero
248 ELSE
249 etat(i) = one
250 ENDIF
251
252
253 IF (yld(i)>zero) THEN
254 yld2i(i) = one / yld(i)**2
255 dphi_dsig = two * sigdr(i) * yld2i(i)
256 fsinh = sinh(q2*etat(i)*trsig(i)/(yld(i)*two))
257 dphi_dtrsig = q1*q2*etat(i)*fs(i)*fsinh/yld(i)
258 ELSE
259 yld2i(i) = zero
260 dphi_dsig = zero
261 fsinh = zero
262 dphi_dtrsig = zero
263 ENDIF
264
265
266 normsig = sqrt(sigoxx(i)*sigoxx(i)
267 . + sigoyy(i)*sigoyy(i)
268 . + two*sigoxy(i)*sigoxy(i))
269 normsig =
max(normsig,one)
270
271
272 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
273 IF (fdr(i) > zero) THEN
274 dphi_dfdr = dphi_dsig*kdr*(one/six)*exp(-(five/six)*log(fdr(i)))
275 ELSE
276 dphi_dfdr = zero
277 ENDIF
278 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
279 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig**3))
280
281 dj3dsxx = two_third*(syy(i)*szz(i))/(normsig**2)
282 . - third*(sxx(i)*szz(i))/(normsig**2)
283 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
284 dj3dsyy = - third*(syy(i)*szz(i))/(normsig**2)
285 . + two_third*(sxx(i)*szz(i))/(normsig**2)
286 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
287 dj3dszz = - third*(syy(i)*szz(i))/(normsig**2)
288 . - third*(sxx(i)*szz(i))/(normsig**2)
289 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
290 dj3dsxy = two*(sxx(i)*sxy(i) + sxy(i)*syy(i))/(normsig**2)
291
292
293 normxx(i) = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx + dphi_dtrsig
294 normyy(i) = dsdrdj2*syy(i)/normsig + dsdrdj3*dj3dsyy + dphi_dtrsig
295 normzz(i) = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz + dphi_dtrsig
296 normxy(i) = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
297 trdfds(i) = normxx(i) + normyy(i) + normzz(i)
298 sig_dfdsig(i) = sigoxx(i)*normxx(i) + sigoyy(i)*normyy(i)
299 . + sigoxy(i)*normxy(i)
300
301
302 IF (sig_dfdsig(iTHEN
303 dlam_nl(i) = ((one - ft(i))*yld(i)*dpla_nl(i))/
max(sig_dfdsig(i),em20)
304 ELSE
305 dlam_nl(i) = zero
306 ENDIF
307
308
309 IF ((trdfds(i)>zero).AND.(ft(i)>zero).AND.(ft(i)<fr)) THEN
310 fg(i) = fg(i) + (one-ft(i))*dlam_nl(i)*trdfds(i)
311 ENDIF
312 fg(i) =
max(fg(i),zero)
313
314
315 IF ((pla_nl(i) >= ed).AND.(ft(i)<fr)) THEN
316
317 IF (triax(i)>=zero) THEN
318 fn(i) = fn(i) + an*dpla_nl(i)
319
320 ELSEIF ((triax(i)<zero).AND.(triax(i)>=-third)) THEN
321 fn(i) = fn(i) + an*
max(one + three*triax(i),zero)*dpla_nl(i)
322 ENDIF
323 ENDIF
324 fn(i) =
max(fn(i),zero)
325
326
327 IF ((sigdr(i) > zero).AND.(ft(i)>zero).AND.(ft(i)<fr)) THEN
328 sigvm = sqrt(
max(em20,three*(j2(i)/(normsig**2))))
329 omega = one - ((twenty7 *(j3(i)/(normsig**3)))/(two*(sigvm**3)))**2
330 omega =
max(omega,zero)
331 omega =
min(omega,one)
332 sdpla = (sxx(i)*normxx(i)+syy(i)*normyy(i)+ szz(i)*normzz(i)
333 . + sxy(i)*normxy(i))
334 . * dlam_nl(i)
335 fsh(i) = fsh(i) + kw*omega*ft(i)*(sdpla/sigdr(i))
336 ENDIF
337 fsh(i) =
max(fsh(i),zero)
338
339
340 ft(i) = f0 + fg(i) + fn(i) + fsh(i)
341 ft(i) =
min(ft(i), fr)
342 IF (ft(i) >= fr) THEN
343 IF (off(i)==one) off(i) = four_over_5
344 ENDIF
345
346
347 IF (ft(i) < fc)THEN
348 fs(i) = ft(i)
349 ELSE
350 fs(i) = fc + (one/q1 - fc) * (ft(i)-fc)/(fr-fc)
351 ENDIF
352 fs(i) =
min(fs(i),one/q1)
353
354
355 IF (cp > zero ) THEN
356 IF (jthe == 0) THEN
357 dtemp = weitemp(i)*(one-ft(i))*yld(i)*dpla_nl(i)*eta/(rho(i)*cp)
358 temp(i) = temp(i) + dtemp
359 ENDIF
360 ENDIF
361 ENDDO
362
363
364 DO i=1,nel
365
366 fhard(i) = yld0 + hard*pla(i) + qvoce*(one-exp(-bvoce*pla
367 ! b) - correction factor
for strain-rate dependence (johnson-cook)
368 frate(i) = one
369 IF (epsd(i) > epsp0) frate(i) = frate(i) + jcc*log(epsd(i)/epsp0)
370
371 ftherm(i) = one
372 IF (cp > zero) ftherm(i) = one - mtemp*(temp(i) - tref)
373
374 yld(i) = fhard(i)*frate(i)*ftherm(i)
375
376 yld(i) =
max(em10, yld(i))
377 ENDDO
378
379
380
381
382 DO i=1,nel
383
384
385 signxx(i) = sigoxx(i) + (a11*depsxx(i) + a12*depsyy(i))
386 signyy(i) = sigoyy(i) + (a11*depsyy(i) + a12*depsxx(i))
387 signxy(i) = sigoxy(i) + (depsxy(i)*g)
388 signyz(i) = sigoyz(i) + (depsyz(i)*gs(i))
389 signzx(i) = sigozx(i) + (depszx(i)*gs(i))
390
391 trsig(i) = signxx(i) + signyy(i)
392 sigm(i) = -trsig(i) * third
393
394 sxx(i) = signxx(i) + sigm(i)
395 syy(i) = signyy(i) + sigm(i)
396 szz(i) = sigm(i)
397 sxy(i) = signxy(i)
398
399 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) + sxy(i)**2
400
401 j3(i) = sxx(i)*syy(i)*szz(i) - szz(i)*sxy(i)**2
402
403 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
404
405 IF (fdr(i) > zero) THEN
406 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
407 ELSE
408 sigdr(i) = zero
409 ENDIF
410
411 IF (sigdr(i)>zero) THEN
412 triax(i) = (trsig(i)*third)/sigdr(i)
413 ELSE
414 triax(i) = zero
415 ENDIF
416 IF (trsig(i)<zero) THEN
417 etat(i) = zero
418 ELSE
419 etat(i) = one
420 ENDIF
421
422
423 IF (off(i) == one) THEN
424 dezz(i) = -nnu*depsxx(i)-nnu*depsyy(i)
425 IF (sig_dfdsig(i) > em01) THEN
426 dezz(i) = dezz(i) + nnu*(dlam_nl(i)*normxx(i))
427 . + nnu*(dlam_nl(i)*normyy(i))
428 . + dlam_nl(i)*normzz(i)
429 ENDIF
430 ENDIF
431 ENDDO
432
433
434
435
436 DO i=1,nel
437 fdam(i) = two*q1*fs(i)*cosh(q2*etat(i)*trsig(i)/yld(i)/two) - (q1*fs(i))**2
438 phi(i) = (sigdr(i) / yld(i))**2 - one + fdam(i)
439 ENDDO
440
441
442 nindx = 0
443 DO i=1,nel
444 IF ((phi(i) >= zero).AND.(off(i) == one).AND.(ft(i)<fr)) THEN
445 nindx=nindx+1
446 index(nindx)=i
447 ENDIF
448 ENDDO
449
450
451
452
453
454
455 niter = 3
456
457
458#include "vectorize.inc"
459 DO ii=1,nindx
460
461
462
463
464
465 sigdr2(i) = sigdr(i)**2
466 yld2i(i) = one / yld(i)**2
467 dpxx(i) = zero
468 dpyy(i) = zero
469 dpzz(i) = zero
470 dpxy(i) = zero
471 ENDDO
472
473
474 DO iter = 1, niter
475#include "vectorize.inc"
476 DO ii=1,nindx
477 i = index(ii)
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493 yld2i(i) = one/(yld(i)**2)
494 dphi_dsig = two*sigdr(i)*yld2i(i)
495 fsinh = sinh(q2*etat(i)*trsig(i)/(yld(i)*two))
496 dphi_dtrsig = q1*q2*etat(i)*fs(i)*fsinh/yld(i)
497
498
499 normsig = sqrt(signxx(i)*signxx(i)
500 . + signyy(i)*signyy(i)
501 . + two*signxy(i)*signxy(i))
502 normsig =
max(normsig,one)
503
504
505 fdr(i) = (j2(i)/(normsig**2))**3 - cdr*((j3(i)/(normsig**3))**2)
506 dphi_dfdr = dphi_dsig*kdr*(one/six)*exp(-(five/six)*log(fdr(i)))
507 dsdrdj2 = dphi_dfdr*three*(j2(i)/(normsig**2))**2
508 dsdrdj3 = -dphi_dfdr*two*cdr*(j3(i)/(normsig**3))
509
510 dj3dsxx = two_third*(syy(i)*szz(i))/(normsig**2)
511 . - third*(sxx(i)*szz(i))/(normsig**2)
512 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
513 dj3dsyy = - third*(syy(i)*szz(i))/(normsig**2)
514 . + two_third*(sxx(i)*szz(i))/(normsig**2)
515 . - third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
516 dj3dszz = - third*(syy(i)*szz(i))/(normsig**2)
517 . - third*(sxx(i)*szz(i))/(normsig**2)
518 . + two_third*(sxx(i)*syy(i)-sxy(i)**2)/(normsig**2)
519 dj3dsxy = two*(sxx(i)*sxy(i) + sxy(i)*syy(i))/(normsig**2)
520
521 normxx(i) = dsdrdj2*sxx(i)/normsig + dsdrdj3*dj3dsxx + dphi_dtrsig
522 normyy(i) = dsdrdj2*syy(i)/normsig + dsdrdj3*dj3dsyy + dphi_dtrsig
523 normzz(i) = dsdrdj2*szz(i)/normsig + dsdrdj3*dj3dszz + dphi_dtrsig
524 normxy(i) = two*dsdrdj2*sxy(i)/normsig + dsdrdj3*dj3dsxy
525
526
527 !---------------------------------------------------------
528
529
530
531 trdfds(i) = normxx(i) + normyy(i) + normzz(i)
532 dfdsig2 = normxx(i) * (a11*normxx(i) + a12*normyy(i))
533 . + normyy(i) * (a11*normyy(i) + a12*normxx(i))
534 . + normxy(i) * normxy(i) * g
535
536
537
538
539
540
541 hardp(i) = hard + qvoce*bvoce*exp(-bvoce*pla(i))
542 dyld_dpla = hardp(i)*frate(i)*ftherm(i)
543
544
545
546 sig_dfdsig(i) = signxx(i) * normxx(i)
547 . + signyy(i) * normyy(i)
548 . + signxy(i) * normxy(i)
549 dpla_dlam(i) = sig_dfdsig(i) / ((one - ft(i))*yld(i))
550
551
552
553 sigdr2(i) = sigdr(i)**2
554 dphi_dyld = -two*sigdr2(i)/yld(i)**3-dphi_dtrsig*trsig(i)/yld(i)
555
556
557 dphi_dlam(i) = - dfdsig2 + (dphi_dyld*dyld_dpla*dpla_dlam(i))
558 dphi_dlam(i) = sign(
max(abs(dphi_dlam(i)),em20) ,dphi_dlam(i))
559
560
561 dlam = -phi(i)/dphi_dlam(i)
562
563
564 dpxx(i) = dlam * normxx(i)
565 dpyy(i) = dlam * normyy(i)
566 dpzz(i) = dlam * normzz(i)
567 dpxy(i) = dlam * normxy(i)
568 trdep(i) = dpxx(i) + dpyy(i) + dpzz(i)
569
570
571 signxx(i) = signxx(i) - (a11*dpxx(i) + a12*dpyy(i))
572 signyy(i) = signyy(i) - (a11*dpyy(i) + a12*dpxx(i))
573 signxy(i) = signxy(i) - dpxy(i)*g
574 trsig(i) = signxx(i) + signyy(i)
575 sigm(i) = -trsig(i) * third
576 sxx(i) = signxx(i) + sigm(i)
577 syy(i) = signyy(i) + sigm(i)
578 szz(i) = sigm(i)
579 sxy(i) = signxy(i)
580
581
582 ddep = (dlam/((one - ft(i))*yld(i)))*sig_dfdsig(i)
583 dpla(i) =
max(zero, dpla(i)
584 pla(i) = pla(i) + ddep
585
586
587 j2(i) = half*(sxx(i)**2 + syy(i)**2 + szz(i)**2 ) + sxy(i)**2
588 j3(i) = sxx(i) * syy(i) * szz(i) - szz(i) * sxy(i)**2
589 fdr(i) = j2(i)**3 - cdr*(j3(i)**2)
590 sigdr(i) = kdr * exp((one/six)*log(fdr(i)))
591
592 triax(i) = (trsig(i)*third)/sigdr(i)
593 IF (trsig(i)<zero) THEN
594 etat(i) = zero
595 ELSE
596 etat(i) = one
597 ENDIF
598
599
600 fhard(i) = yld0 + hard * pla(i) + qvoce*(one-exp(-bvoce*pla(i)))
601
602
603 yld(i) = fhard(i) * frate(i) * ftherm(i)
604 yld(i) =
max(yld(i), em10)
605
606
607 sigdr2(i) = sigdr(i)**2
608 yld2i(i) = one / yld(i)**2
609 fcosh = cosh(q2*etat(i)*trsig(i)/(yld(i)*two))
610 fdam(i) = two*q1*fs(i)*fcosh - (q1*fs(i))**2
611 phi(i) = sigdr2(i) * yld2i(i) - one + fdam(i)
612
613 ENDDO
614 ENDDO
615
616
617
618
619
620
621 DO i=1,nel
622
623 uvar(i,1) = yld(i)
624
625 dmg(i,1) = ft(i)/fr
626 dmg(i,2) = fg(i)
627 dmg(i,3) = fn(i)
628 dmg(i,4) = fsh(i)
629 dmg(i,5) =
min(ft(i),fr)
630 dmg(i,6) =
min(fs(i),one/q1)
631 seq(i) = sigdr(i)
632
633 IF (ft(i) >= fr) THEN
634 dpla(i) = zero
635 signxx(i) = zero
636 signyy(i) = zero
637 signxy(i) = zero
638 signyz(i) = zero
639 signzx(i) = zero
640 seq(i) = zero
641 ENDIF
642
643 dpdt = dpla(i) /
max(em20,timestep)
644 epsd(i) = afiltr * dpdt + (one - afiltr) * epsd(i)
645
646 IF (dpla(i) > zero) THEN
647 et(i) = hardp(i)*frate(i) / (hardp(i)*frate(i) + young)
648 ELSE
649 et(i) = one
650 ENDIF
651
652 soundsp(i) = sqrt((a11)/rho(i))
653
654 sigy(i) = yld(i)
655
656 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)
657 ENDDO
658
for(i8=*sizetab-1;i8 >=0;i8--)