56
57
60
61
62
63#include "implicit_f.inc"
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115#include "param_c.inc"
116#include "com01_c.inc"
117#include "scr18_c.inc"
118
119
120
121 INTEGER, INTENT(IN) :: JTHE
122 INTEGER, INTENT(IN) :: IDT_THERM
123 INTEGER NEL, NUPARAM, NUVAR,NVARTMP, NPT0, IPT,IFLAG(*),
124 . NGL(NEL),MAT(NEL),IPM(NPROPMI,*),ITHK
125 my_real ,
intent(in) :: theaccfact
126 my_real time,timestep,uparam(*),
127 .
area(nel),rho0(nel),eint(nel,2),
128 . thkly(nel),pla(nel),
129 . epspxx(nel),epspyy(nel),
130 . epspxy(nel),epspyz(nel),epspzx(nel),
131 . depsxx(nel),depsyy(nel),
132 . depsxy(nel),depsyz(nel),depszx(nel),
133 . epsxx(nel) ,epsyy(nel) ,
134 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,
135 . sigoxx(nel),sigoyy(nel),
136 . sigoxy(nel),sigoyz(nel),sigozx(nel),
137 . pm(npropm,*),gs(*),vol(nel) ,temp(nel),
138 . die(nel),coef(nel), shf(nel) ,epsthtot(nel)
139
140
141
143 . signxx(nel),signyy(nel),
144 . signxy(nel),signyz(nel),signzx(nel),
145 . sigvxx(nel),sigvyy(nel),
146 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
147 . soundsp(nel),viscmax(nel),etse(nel)
148
149
150
152 . uvar(nel,nuvar),epsp(nel),
153 . off(nel),thk(nel),yld(nel)
154 INTEGER :: VARTMP(NEL,NVARTMP)
155
156 TYPE(TTABLE) TABLE(*)
157
158
159
160 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
162 EXTERNAL finter
163
164
165
166
167
168
169
170
171
172
173 INTEGER II,ITER,NITER,I,J,K,NRATE(NEL),J1,J2,N,NINDX,IADBUF,NINDXGLOB,NINDXLOC,
174 . NMAX,INDEX(NEL),K2,ITERK2,NPFG(2),ITABLE(5),
175 . EFUNC,IFUNC(5),ITERK,FLAG,NTAB,HEATFLAG,HEATOPTION,
176 . NIHEAT,NICOOL,FLAG_LOC ,LOCAL,FLAG_TR_STRAIN,FLAG_TR_KINETICS
177 INTEGER, DIMENSION(NEL) :: INDXLOC,INDXGLOB
178
180 . cun ,cdeux,ctrois,efac,
181 . alambda,blambda,ceps,peps,
182 . yscale(5),teta2,teta3,teta4,teta5,qr2,qr3,qr4,pp,
183 . alfa1,alfa2,t2,t3,t4,t5,t1,voli,xfac(5),rscale(5),
184 .
alpha,tref,ae1,ae3,bs,ms,gsize,nu,fcfer,fcper,fcbai
185 . rhnew,fgrain,kper,hfctn,kbain,xeq2,
186 . xeq4,lat1,lat2,hfp,hb,hm,vol0,tini,unitt,
187 . tgz(12), heatflag1,
188 . conv,huitcent,sspshell,sspsol,qptt,slope,
189 . tau1, tau3,dxrho,dydxr,nu_1_nu,dsvm,den,fac,
190 . gfac_f,phi_f,psi_f,cr_f,cf,gfac_p,phi_p,psi_p,cr_p,cp,
191 . gfac_b,phi_b,psi_b,cr_b,cb,phi_m,psi_m,n_m,fgfer,fgper,fgbai,
192 . normxx,normyy,normxy,normzz,ddlam,dfdsig_dsig,dpla_dlam,ddep
194 . e(nel),rbulk(nel),g2(nel),deth12(nel),
195 . lamda(nel),dydxgz(nel),dydxe(nel),
196 . frac1(nel),frac2(nel),frac3(nel) ,frac4(nel),
197 . frac5(nel),totfrac(nel),totfracold(nel) ,soxx(nel) ,
198 . gz(nel) ,treo(nel) ,sigom(nel),soyy(nel),sozz(nel),
199 . dydx1(nel),dydx2(nel) ,dydx3(nel),
200 . dydx4(nel),dydx5(nel) ,yield(nel),
201 . y1(nel) ,y2(nel),y3(nel),y4(nel),y5(nel),svm(nel),
202 . eoxx(nel),eoyy(nel),eozz(nel),
203 . eoxy(nel),eoyz(nel),eozx(nel),
204 . y1ini(nel),
205 . epsoxx(nel),epsoyy(nel),epsozz(nel),epsoxy(nel),
206 . depszz(nel),epszz(nel),
207 . dpla(nel) ,snorm(nel),seff(nel),sigozz(nel),
208 . signzz(nel),sigm(nel) ,sxx(nel),syy(nel),szz(nel),
209 . deplxx(nel),
210 . deplyy(nel),deplzz(nel),deplxy(nel),
211 . dpla1(nel),dpla2(nel),dpla3(nel),dpla4(nel),dpla5(nel),
212 . pla1(nel) ,pla2(nel) ,pla3(nel) ,pla4(nel) ,pla5(nel),
213 . depselzz(nel),depsplzz(nel),depsim1(nel),depsi(nel),
214 . depsip1(nel),sigzim1(nel),sigi(nel),
215 . volold(nel),rh(nel),de12(nel),yldold(nel),
216 . depselozz(nel),depsplozz(nel),
217 . svmi(nel),trdepsth(nel),svmim1(nel),svmtr(nel),trdeps,
218 . depsthxx(nel),depsthyy(nel),depsthzz(nel),depsth(nel),
219 . x1(nel),x2(nel),x3(nel),x4(nel),x5(nel),hard(nel),
220 . gold(nel),svmtest(nel),
221 . eplxx(nel),eplyy(nel),eplzz(nel) ,eplxy(nel),
222 . eeloxx(nel),eeloyy(nel),depstr(nel) ,
223 . eeloxy(nel),eelozz(nel),normdev(nel) ,
224 . xgama(nel),tempmin(nel),vr(nel),h(nel),tempo(nel),
225 . zeq(nel), tau(nel),
226 . rho_a(nel),rho_f(nel),rho_p(nel),rho_b(nel),rho_m(nel),rho_n(nel)
228 . psi2 ,psi3,psi4,psi5,phi2,phi3,phi4 ,phi5 ,faccs,tempel,
229 . lnf2,lnf3,lnf4,lnf5,a1, a2,g,p,fct,df,dpxx,dpyy,dpxy,dpzz,
230 . svmo,depsvol,dexx,deyy,dezz,hfct,a,b,c,dh,
231 . gsig,dgsig,esf,desf,r,pold,sxy,logz,logzm1
232
234 . DIMENSION(NEL,3) :: xx5,xx1,xx2,xx3,xx4
235
236 INTEGER,DIMENSION(NEL,3) :: IPOS1,IPOS2,IPOS3,IPOS4,IPOS5
237
238
239
240
241 ntab = ipm(226,mat(1))
242 niter = 3
243 DO i=1,ntab
244 itable(i) = ipm(226+i,mat(1))
245 xfac(i) = uparam(58+i)
246 ENDDO
247
248
249 DO i=1,nel
250 e(i) = uparam(1)
251 ENDDO
252 DO j=1,5
253 yscale(j)=uparam(9+j)
254 ENDDO
255
256 nu = uparam(2)
257 efac = uparam(4)
258 ceps = uparam(15)
259 peps = uparam(16)
260 teta2 = uparam(17)
261 teta3 = uparam(18)
262 teta4 = uparam(19)
263 teta5 = uparam(20)
264 qr2 = uparam(21)
265 qr3 = uparam(22)
266 qr4 = uparam(23)
268 tref = uparam(25)
269 ae1 = uparam(26)
270 ae3 = uparam(27)
271
272 bs = uparam(28)
273 ms = uparam(29)
274 gsize = uparam(30)
275 nu_1_nu= nu/(one-nu)
276
277 IF (idt_therm == 1) THEN
278 alfa1 = zero
279 alfa2 = zero
280 ELSE
281 alfa1 = uparam(31)
282 alfa2 = uparam(32)
283 ENDIF
284
285 fcfer = uparam(33)
286 fcper = uparam(34)
287 fcbai = uparam(35)
288 fgrain = uparam(36)
289 kper = uparam(37)
290 kbain = uparam(38)
291 xeq2 = uparam(39)
292 lat1 = uparam(40)
293 lat2 = uparam(41)
294 hfp = uparam(42)
295 hb = uparam(43)
296 hm = uparam(44)
297 tini = uparam(45)
298 unitt = uparam(46)
299
300 gfac_f = uparam(75)
301 phi_f = uparam(76)
302 psi_f = uparam(77)
303 cr_f = uparam(78)
304
305 gfac_p = uparam(79)
306 phi_p = uparam(80)
307 psi_p = uparam(81)
308 cr_p = uparam(82)
309
310 gfac_b = uparam(83)
311 phi_b = uparam(84)
312 psi_b = uparam(85)
313 cr_b = uparam(86)
314
315 phi_m = uparam(84)
316 psi_m = uparam(85)
317 n_m = uparam(86)
318
319 fgfer = uparam(87)
320 fgper = uparam(88)
321 fgbai = uparam(89)
322
323 cf = uparam(90)
324 cp = uparam(91)
325 cb = uparam(92)
326
327 DO j=46+1,58
328 tgz(j-58+12)=uparam(j)
329 ENDDO
330
331 heatoption = uparam(58 + ntab + 1)
332 tau1 = uparam(58 + ntab + 2)
333 tau3 = uparam(58 + ntab + 3)
334 flag_loc = uparam(58 + ntab + 4)
335
336 flag_tr_strain = uparam(58 + ntab + 5)
337 flag_tr_kinetics = uparam(58 + ntab + 6)
338 rscale(1) = uparam(58 + ntab + 7)
339 rscale(2) = uparam(58 + ntab + 8)
340 rscale(3) = uparam(58 + ntab + 9)
341 rscale(4) = uparam(58 + ntab +10)
342 rscale(5) = uparam(58 + ntab +11)
343
344 heatflag = heatoption
345 IF(heatoption == 2) THEN
346 heatflag1 = finter(kfunc(2),time,npf,tf,slope)
347 heatflag = int(heatflag1)
348 ENDIF
349
350
351 huitcent= eight*ep02
352 qptt=four+three*(em01+em02)
353 npfg(1)=1
354 npfg(2)=13
355 iterk =5
356 iterk2 =5
357 cun = third/(one-two*nu)
358
359 ctrois = nu/(one+nu)/(one-two*nu)
360
361 IF (isigi == 0) THEN
362 IF (time == zero)THEN
363 DO i=1,nel
364 uvar(i,35)=vol(i)
365 uvar(i,43)=rho0(i)
366 IF(heatflag == 1)THEN
367 uvar(i,2) = zero
368 uvar(i,3) = one
369 ELSE
370 uvar(i,2) = one
371 ENDIF
372 uvar(i,8) = uparam(45)
373 uvar(i,1) = uparam(45)
374 uvar(i,28) = one
375 IF(jthe==-1) uvar(i,8) =temp(i)
376
377 xx1(i,1)=zero
378 xx1(i,2)=uvar(i,8)
379 xx1(i,3)=zero
380 ipos1(i,1) = 0
381 ipos1(i,2) = 0
382 ipos1(i,3) = 0
383 ENDDO
384 CALL table_vinterp(table(itable(1)),nel,nel,ipos1,xx1,y1,dydx1)
385 DO i=1,nel
386 uvar(i,9)= y1(i)
387 ENDDO
388 ENDIF
389 ENDIF
390 IF(jthe /= 0 ) THEN
391 DO i=1,nel
392 tempel(i) = temp(i)
393 ENDDO
394 ELSE
395
396 DO i=1,nel
397 tempel(i) = tini
398 ENDDO
399 ENDIF
400
401 DO i=1,nel
402 tempo(i) = uvar(i,8)
403 tempmin(i) = uvar(i,1)
404 ENDDO
405
406 IF(kfunc(1) > zero)THEN
407 DO i=1,nel
408 e(i) = finter(kfunc(1),tempel(i),npf,tf,dydxe(i))
409 e(i)= e(i) * efac
410 ENDDO
411 ENDIF
412
413 DO i=1,nel
414 a1(i) = e(i)/(one-nu*nu)
415 a2(i) = nu*a1(i) ! plane stress elastic matrix non-diagonal component
416 g(i) = e(i)*half/(one+nu)
417 ENDDO
418
419 DO i=1,nel
420 x2(i)= uvar(i,23)
421 x3(i)= uvar(i,24)
422 x4(i)= uvar(i,25)
423 x5(i)= uvar(i,44)
424 frac1(i)= uvar(i,2)
425 frac2(i)= uvar(i,3)
426 frac3(i)= uvar(i,4)
427 frac4(i)= uvar(i,5)
428 frac5(i)= uvar(i,6)
429 totfracold(i) = frac2(i)+frac3(i)+frac4(i)+frac5(i)
430 pla1(i)= uvar(i,17)
431 pla2(i)= uvar(i,18)
432 pla3(i)= uvar(i,19)
433 pla4(i)= uvar(i,20)
434 pla5(i)= uvar(i,21)
435 gold(i)= uvar(i,36)
436 xgama(i)= uvar(i,10)
437 dpla(i) = zero
438 dpla1(i)= zero
439 dpla2(i)= zero
440 dpla3(i)= zero
441 dpla4(i)= zero
442 dpla5(i)= zero
443 phi2(i) = zero
444 psi2(i) = zero
445 phi3(i) = zero
446 psi3(i) = zero
447 phi4(i) = zero
448 psi4(i) = zero
449 phi5(i) = zero
450 psi5(i) = zero
451 ENDDO
452 IF (heatflag == 1) THEN
453 teta2 = zero
454 teta3 = zero
455 teta4 = zero
456 teta5 = zero
457 ENDIF
458
459
460
461 nicool = 0
462 IF(flag_loc == 2) THEN
463 IF (heatflag == 1) THEN
464 DO i=1,nel
465 IF(tempel(i)>= uvar(i,8).AND.frac2(i)>zero)THEN
466 zeq(i) = (tempel(i)-ae1)/(ae3-ae1)
467 tau(i) = tau1 + zeq(i) * ( tau3 - tau1)
468 zeq(i) =
min( one ,
max( zero, zeq(i)))
469 tau(i) =
max( tau3,
min( tau1, tau(i)))
470 frac1(i) = uvar(i,2) +
max(zero,(zeq(i) - uvar(i,2)) ) * timestep*theaccfact / tau(i)
471 frac2(i) = one - frac1(i) - frac3(i)- frac4(i)- frac5(i)
472 tempmin(i) = uvar(i,8)
473 ENDIF
474 ENDDO
475 ELSE
476 DO i=1,nel
477 nicool = nicool + 1
478 index(nicool)=i
479 IF (tempel(i)<= 1073.0 .AND. uvar(i,26)==zero)THEN
480 uvar(i,26)=time
481 uvar(i,27)=tempel(i)
482 ENDIF
483 IF (tempel(i)<= 773.0 .AND. uvar(i,16)==zero)THEN
484 uvar(i,16)=time
485 uvar(i,33)=tempel(i)
486 ENDIF
487 ENDDO
488 IF (flag_tr_kinetics == 2) THEN
489 CALL phasekinetic2(nel,time,tempel,tempo,tempmin,ae1,ae3,bs,ms,fcfer,fcper,
490 . fcbai,fgrain,frac1,frac2,frac3,frac4,frac5,x2,x3,x4,x5,
491 . gfac_f,phi_f,psi_f,cr_f,cf,gfac_p,phi_p,psi_p,cr_p,cp,
492 . gfac_b,phi_b,psi_b,cr_b,cb,phi_m,psi_m,n_m,fgfer,fgper,fgbai,
493 . qr2,qr3,qr4,kper,kbain,
alpha,xeq2,xeq4,xgama,totfracold,timestep,nicool,
494 . index,theaccfact)
495 ELSE
496 CALL kirkaldykinetics(nel,time,tempel,tempmin,ae1,ae3,bs,ms,fcfer,fcper,
497 . fcbai,fgrain,frac1,frac2,frac3,frac4,frac5,x2,x3,x4,x5,qr2,
498 . qr3,qr4,kper,kbain,
alpha,xeq2,xeq4,xgama,totfracold,timestep,nicool,
499 . index,theaccfact)
500 ENDIF
501 ENDIF
502 ELSE
503 DO i=1,nel
504 IF(tempel(i)>= uvar(i,8).AND.frac2(i)>zero)THEN
505 zeq(i) = (tempel(i)-ae1)/(ae3-ae1)
506 tau(i) = tau1 + zeq(i) * ( tau3 - tau1)
507 zeq(i) =
min( one ,
max( zero, zeq(i)))
508 tau(i) =
max( tau3,
min( tau1, tau(i)))
509 frac1(i) = uvar(i,2) +
max(zero,(zeq(i) - uvar(i,2)) ) * timestep*theaccfact / tau(i)
510 frac2(i) = one - frac1(i) - frac3(i)- frac4(i)- frac5(i)
511 tempmin(i) = uvar(i,8)
512 ELSE
513 nicool = nicool+1
514 index(nicool)=i
515 IF (tempel(i)<= 1073.0 .AND. uvar(i,26)==zero)then
516 uvar(i,26)=time
517 uvar(i,27)=tempel(i)
518 ENDIF
519 IF (tempel(i)<= 773.0 .AND. uvar(i,16)==zero)then
520 uvar(i,16)=time
521 uvar(i,33)=tempel(i)
522 ENDIF
523 ENDIF
524 ENDDO
525 IF (nicool > 0) THEN
526 IF (flag_tr_kinetics == 2) THEN
527 CALL phasekinetic2(nel,time,tempel,tempo,tempmin,ae1,ae3,bs,ms,fcfer,fcper,
528 . fcbai,fgrain,frac1,frac2,frac3,frac4,frac5,x2,x3,x4,x5,
529 . gfac_f,phi_f,psi_f,cr_f,cf,gfac_p,phi_p,psi_p,cr_p,cp,
530 . gfac_b,phi_b,psi_b,cr_b,cb,phi_m,psi_m,n_m,fgfer,fgper,fgbai,
531 . qr2,qr3,qr4,kper,kbain,
alpha,xeq2,xeq4,xgama,totfracold,timestep,nicool,
532 . index ,theaccfact)
533 ELSE
534 CALL kirkaldykinetics(nel,time,tempel,tempmin,ae1,ae3,bs,ms,fcfer,fcper,
535 . fcbai,fgrain,frac1,frac2,frac3,frac4,frac5,x2,x3,x4,x5,qr2,
536 . qr3,qr4,kper,kbain,
alpha,xeq2,xeq4,xgama,totfracold,timestep,nicool,
537 . index,theaccfact )
538 ENDIF
539 ENDIF
540 endif
541
542 DO i=1,nel
543 IF(tempo(i)<=tempmin(i))tempmin(i)=tempo(i)
544 uvar(i,1) = tempmin(i)
545 ENDDO
546
547
548
549 DO i=1,nel
550 ipos1(i,1) = vartmp(i,1)
551 ipos1(i,2) = vartmp(i,2)
552 ipos1(i,3) = vartmp(i,3)
553
554 ipos2(i,1) = vartmp(i,4)
555 ipos2(i,2) = vartmp(i,5)
556 ipos2(i,3) = vartmp(i,6)
557
558 ipos3(i,1) = vartmp(i,7)
559 ipos3(i,2) = vartmp(i,8)
560 ipos3(i,3) = vartmp(i,9)
561
562 ipos4(i,1) = vartmp(i,10)
563 ipos4(i,2) = vartmp(i,11)
564 ipos4(i,3) = vartmp(i,12)
565
566 ipos5(i,1) = vartmp(i,13)
567 ipos5(i,2) = vartmp(i,14)
568 ipos5(i,3) = vartmp(i,15)
569
570 xx1(i,1)=pla1(i)
571 xx1(i,2)=tempel(i)
572 xx1(i,3)=epsp(i)*xfac(1)
573
574 xx2(i,1)=pla2(i)
575 xx2(i,2)=tempel(i)
576 xx2(i,3)=epsp(i)*xfac(2)
577
578 xx3(i,1)=pla3(i)
579 xx3(i,2)=tempel(i)
580 xx3(i,3)=epsp(i)*xfac(3)
581
582 xx4(i,1)=pla4(i)
583 xx4(i,2)=tempel(i)
584 xx4(i,3)=epsp(i)*xfac(4)
585
586 xx5(i,1)=pla5(i)
587 xx5(i,2)=tempel(i)
588 xx5(i,3)=epsp(i)*xfac(5)
589 END DO
590
591 CALL table_vinterp(table(itable(1)),nel,nel,ipos1,xx1,y1,dydx1)
592 CALL table_vinterp(table(itable(2)),nel,nel,ipos2,xx2,y2,dydx2)
593 CALL table_vinterp(table(itable(3)),nel,nel,ipos3,xx3,y3,dydx3)
594 CALL table_vinterp(table(itable(4)),nel,nel,ipos4,xx4,y4,dydx4)
596 DO i=1,nel
597 y1(i)=y1(i)*yscale(1)
598 y2(i)=y2(i)*yscale(2)
599 y3(i)=y3(i)*yscale(3)
600 y4(i)=y4(i)*yscale(4)
601 y5(i)=y5(i)*yscale(5)
602
603 dydx1(i)=dydx1(i)*yscale(1)
604 dydx2(i)=dydx2(i)*yscale(2)
605 dydx3(i)=dydx3(i)*yscale(3)
606 dydx4(i)=dydx4(i)*yscale(4)
607 dydx5(i)=dydx5(i)*yscale(5)
608 yield(i)=uvar(i,9)
609 yld(i)=
max(em20,y1(i)*frac1(i)+y2(i)*frac2(i)+
610 . y3(i)*frac3(i)+y4(i)*frac4(i)+y5(i)*frac5(i))
611
612 y1ini(i) =
max(em20,y1(i))
613 vartmp(i,1) = ipos1(i,1)
614 vartmp(i,2) = ipos1(i,2)
615 vartmp(i,3) = ipos1(i,3)
616
617 vartmp(i,4) = ipos2(i,1)
618 vartmp(i,5) = ipos2(i,2)
619 vartmp(i,6) = ipos2(i,3)
620
621 vartmp(i,7) = ipos3(i,1)
622 vartmp(i,8) = ipos3(i,2)
623 vartmp(i,9) = ipos3(i,3)
624
625 vartmp(i,10) = ipos4(i,1)
626 vartmp(i,11) = ipos4(i,2)
627 vartmp(i,12) = ipos4(i,3)
628
629 vartmp(i,13) = ipos5(i,1)
630 vartmp(i,14) = ipos5(i,2)
631 vartmp(i,15) = ipos5(i,3)
632 ENDDO
633
634 faccs(1:nel) = one
635
636 IF(ceps/=zero.AND.peps/=zero)THEN
637 DO i=1,nel
638 IF(epsp(i)>ceps)THEN
639 faccs(i)=one+ (epsp(i)/ceps)**(one/peps)
640 yld(i)= yld(i)*faccs(i)
641 ENDIF
642 ENDDO
643 ENDIF
644
645
646
647
648
649 DO i=1,nel
650 totfrac(i) = frac2(i)+frac3(i)+frac4(i)+frac5(i)
651 depsth(i) = (frac1(i)*alfa1+totfrac(i)*alfa2)*(tempel(i)-uvar(i,8))
652 trdepsth(i) = three*depsth(i)
653 uvar(i,38) = uvar(i,38) + depsth(i)
654 ENDDO
655
656 IF(flag_tr_strain == 2) THEN
657
658
659
660 DO i=1,nel
661 rho_a(i) = finter(kfunc(3),tempel(i),npf,tf,dydxr)*rscale(1)
662 rho_f(i) = finter(kfunc(4),tempel(i),npf,tf,dydxr)*rscale(2)
663 rho_p(i) = finter(kfunc(5),tempel(i),npf,tf,dydxr)*rscale(3)
664 rho_b(i) = finter(kfunc(6),tempel(i),npf,tf,dydxr)*rscale(4)
665 rho_m(i) = finter(kfunc(7),tempel(i),npf,tf,dydxr)*rscale(5)
666 dxrho = (frac1(i) - uvar(i,2)) * rho_a(i) +
667 . (frac2(i) - uvar(i,3)) * rho_f(i) +
668 . (frac3(i) - uvar(i,4)) * rho_p(i) +
669 . (frac4(i) - uvar(i,5)) * rho_b(i) +
670 . (frac5(i) - uvar(i,6)) * rho_m(i)
671 rho_n(i) = frac1(i)*rho_a(i) + frac2(i)*rho_f(i) + frac3(i)*rho_p(i) + frac4(i)*rho_b(i) + frac5(i)*rho_m(i)
672 depstr(i) = zero
673 IF(totfrac(i) > zero.AND.totfrac(i)< one)
674 . depstr(i) = third*dxrho/(rho0(i) + rho_n(i)-uvar(i,43))
675 uvar(i,43)= rho_n(i)
676 ENDDO
677 ELSE
678 DO i=1,nel
679 deth12(i)=qptt*em03
680 IF (tempel(i)<ms ) deth12(i)=six*em03
681 depstr(i) = zero
682 IF(totfrac(i) > zero.AND.totfrac(i)< one)
683 . depstr(i) = deth12(i) * (totfrac(i)-totfracold(i))
684 ENDDO
685 ENDIF
686
687 DO i=1,nel
688 depsxx(i) = depsxx(i) - depsth(i) - depstr(i)
689 depsyy(i) = depsyy(i) - depsth(i) - depstr(i)
690 ENDDO
691 IF (timestep /=zero) THEN
692 DO i=1,nel
693 epspxx(i) = depsxx(i) /timestep
694 epspyy(i) = depsyy(i) /timestep
695 ENDDO
696 ENDIF
697 DO i=1,nel
698 gz(i) = finter(1, totfrac(i),npfg,tgz,dydxgz(i))
699 ENDDO
700
701 DO i=1,nel
702 IF (off(i)== one )THEN
703 lnf2(i) = zero
704 lnf3(i) = zero
705 lnf4(i) = zero
706 lnf5(i) = zero
707 IF(frac2(i)>uvar(i,3).AND. uvar(i,3) > zero) lnf2(i) = log(frac2(i)/uvar(i,3) )
708 IF(frac3(i)>uvar(i,4).AND. uvar(i,4) > zero) lnf3(i) = log(frac3(i)/uvar(i,4) )
709 IF(frac4(i)>uvar(i,5).AND. uvar(i,5) > zero) lnf4(i) = log(frac4(i)/uvar(i,5) )
710 IF(frac5(i)>uvar(i,6).AND. uvar(i,6) > zero) lnf5(i) = log(frac5(i)/uvar(i,6) )
711 ENDIF
712 ENDDO
713
714
715
716 DO i=1,nel
717
718 signxx(i) = sigoxx(i) + a1(i)*depsxx(i) + a2(i)*depsyy(i)
719 signyy(i) = sigoyy(i) + a1(i)*depsyy(i) + a2(i)*depsxx(i)
720 signxy(i) = sigoxy(i) + depsxy(i)*g(i)
721 signyz(i) = sigoyz(i) + depsyz(i)*gs(i)
722 signzx(i) = sigozx(i) + depszx(i)*gs(i)
723
724 p(i) = -(signxx(i) + signyy(i)) * third
725
726 sxx(i) = signxx(i) + p(i)
727 syy(i) = signyy(i) + p(i)
728 szz(i) = p(i)
729 dezz(i) = -nu_1_nu * (depsxx(i) + depsyy(i)) + depsth(i) + depstr(i)
730 svm(i) = sqrt(three_half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + three*signxy(i)**2)
731
732 normdev(i) = sqrt(sxx(i)* sxx(i)
733 . + syy(i)* syy(i)
734 . + szz(i)* szz(i))/e(i)
735 soundsp(i) = sqrt(a1(i)/rho0(i))
736 pold(i) = -(sigoxx(i)+sigoyy(i)) * third
737 soxx(i) = sigoxx(i)+pold(i)
738 soyy(i) = sigoyy(i)+pold(i)
739 sozz(i) = pold(i)
740 svmo(i) = sqrt(three_half*(soxx(i)**2 + soyy(i)**2 + sozz(i)**2) + three*sigoxy(i)**2)
741
742 ENDDO
743
744
745
746 nindxglob = 0
747 nindxloc = 0
748 DO i=1,nel
749 IF ( svm(i) < yld(i) .AND. off(i) == one
750 . .AND.totfrac(i)>totfracold(i).AND. normdev(i)> em10
751 . .AND.totfrac(i)< one .AND. svm(i)>svmo(i)) THEN
752
753
754 nindxloc = nindxloc + 1
755 indxloc(nindxloc) = i
756 ENDIF
757 ENDDO
758 DO i=1,nel
759 IF (svm(i) > yld(i) .AND. off(i) == one) THEN
760
761
762 nindxglob = nindxglob + 1
763 indxglob(nindxglob) = i
764 ENDIF
765 ENDDO
766
767
768 IF (nindxglob > 0) THEN
769 DO ii = 1,nindxglob
770 i = indxglob(ii)
771 IF (uvar(i,3)/=zero)THEN
772 psi2(i) =
max(zero,(lnf2(i)*(teta2*pla1(i)-pla2(i)))/(one+lnf2(i)) )
773 phi2(i) =(one+teta2*lnf2(i))/(one+lnf2(i))
774 ENDIF
775 IF (uvar(i,4)/=zero)THEN
776 psi3(i) =
max(zero,(lnf3(i)*(teta3*pla1(i)-pla3(i)))/(one+lnf3(i)) )
777 phi3(i) =(one+teta3*lnf3(i))/(one+lnf3(i))
778 ENDIF
779 IF (uvar(iTHEN
780 psi4(i) =
max(zero, (lnf4(i)*(teta4*pla1(i)-pla4(i)))/(one+lnf4(i)) )
781 phi4(i) =(one+teta4*lnf4(i))/(one+lnf4(i))
782 ENDIF
783 IF (uvar(i,6)/=zero)THEN
784 psi5(i) =
max(zero,(lnf5(i)*(teta5*pla1(i)-pla5(i)))/(one+lnf5(i)) )
785 phi5(i) = (one+teta5*lnf5(i))/(one+lnf5(i))
786 ENDIF
787 ENDDO
788 DO iter = 1,niter
789 DO ii = 1,nindxglob
790 i = indxglob(ii)
791 fct(i) = svm(i) - yld(i)
792
793 normxx = three_half * sxx(i) /svm(i)
794 normyy = three_half * syy(i) /svm(i)
795 normzz = three_half * szz(i) /svm(i)
796 normxy = two * three_half * signxy(i) /svm(i)
797
798 df(i) = normxx * (a1(i)*normxx + a2(i)*normyy)
799 . + normyy * (a1(i)*normyy + a2(i)*normxx)
800 . + normxy * normxy * g(i)
801 df(i) = sign(
max(abs(df(i)),em20) ,df(i))
802 ddlam = fct(i)/df(i)
803
804
805 dfdsig_dsig = signxx(i) * normxx
806 . + signyy(i) * normyy
807 . + signxy(i) * normxy
808 dpla_dlam = dfdsig_dsig / yld(i)
809
810
811
812 dpxx(i) = ddlam * normxx
813 dpyy(i) = ddlam * normyy
814 dpzz(i) = ddlam * normzz
815 dpxy(i) = ddlam * normxy
816 dezz(i)= dezz(i) + nu_1_nu*(dpxx(i) + dpyy(i)) + dpzz(i)
817
818 signxx(i) = signxx(i) - (a1(i)*dpxx(i) + a2(i)*dpyy(i))
819 signyy(i) = signyy(i) - (a1(i)*dpyy(i) + a2(i)*dpxx(i))
820
821 p(i) = -(signxx(i) + signyy(i)) * third
822
823 sxx(i) = signxx(i) + p(i)
824 syy(i) = signyy(i) + p(i)
825 szz(i) = p(i)
826 svm(i) = sqrt(three_half*(sxx(i)**2 + syy
827
828
829 ddep = ddlam*dpla_dlam
830 dpla(i) =
max(zero, dpla(i) + ddep )
831
832
833 dpla1(i)= dpla1(i) + ddep
834 IF (uvar(i,3)>zero)THEN
835 dpla2(i)= dpla1(i) *phi2(i) + psi2(i)
836 ENDIF
837 IF (uvar(i,4)>zero)THEN
838 dpla3(i)= dpla1(i) *phi3(i) + psi3(i)
839 ENDIF
840 IF (uvar(i,5)>zero)THEN
841 dpla4(i)= dpla1(i) *phi4(i) + psi4(i)
842 ENDIF
843 IF (uvar(i,6)>zero)THEN
844 dpla5(i)= dpla1(i) *phi5(i) + psi5(i)
845 ENDIF
846 pla1(i)= uvar(i,17) + dpla1(i)
847 pla2(i)= uvar(i,18) + dpla2(i)
848 pla3(i)= uvar(i,19) + dpla3(i)
849 pla4(i)= uvar(i,20) + dpla4(i)
850 pla5(i)= uvar(i,21) + dpla5(i)
851
852
853
854
855 ipos1(i,1) = vartmp(i,1)
856 ipos1(i,2) = vartmp(i,2)
857 ipos1(i,3) = vartmp(i,3)
858
859 ipos2(i,1) = vartmp(i,4)
860 ipos2(i,2) = vartmp(i,5)
861 ipos2(i,3) = vartmp(i,6)
862
863 ipos3(i,1) = vartmp(i,7)
864 ipos3(i,2) = vartmp(i,8)
865 ipos3(i,3) = vartmp(i,9)
866
867 ipos4(i,1) = vartmp(i,10)
868 ipos4(i,2) = vartmp(i,11)
869 ipos4(i,3) = vartmp(i,12)
870
871 ipos5(i,1) = vartmp(i,13)
872 ipos5(i,2) = vartmp(i,14)
873 ipos5(i,3) = vartmp(i,15)
874
875 xx1(i,1)=pla1(i)
876 xx2(i,1)=pla2(i)
877 xx3(i,1)=pla3(i)
878 xx4(i,1)=pla4(i)
879 xx5(i,1)=pla5(i)
880 END DO
881
882 CALL table_vinterp(table(itable(1)),nel,nel,ipos1,xx1,y1,dydx1)
883 CALL table_vinterp(table(itable(2)),nel,nel,ipos2,xx2,y2,dydx2)
884 CALL table_vinterp(table(itable(3)),nel,nel,ipos3,xx3,y3,dydx3)
886 CALL table_vinterp(table(itable(5)),nel,nel,ipos5,xx5,y5,dydx5)
887 DO ii = 1,nindxglob
888 i = indxglob(ii)
889 y1(i)=y1(i)*yscale(1)
890 y2(i)=y2(i)*yscale(2)
891 y3(i)=y3(i)*yscale(3)
892 y4(i)=y4(i)*yscale(4)
893 y5(i)=y5(i)*yscale(5)
894 dydx1(i)=dydx1(i)*yscale(1)
895 dydx2(i)=dydx2(i)*yscale(2)
896 dydx3(i)=dydx3(i)*yscale(3)
897 dydx4(i)=dydx4(i)*yscale(4)
898 dydx5(i)=dydx5(i)*yscale(5)
899
900
901 yld(i)=
max(em20, y1(i)*frac1(i)+
902 . y2(i)*frac2(i)+
903 . y3(i)*frac3(i)+
904 . y4(i)*frac4(i)+
905 . y5(i)*frac5(i))
906 yld(i)= yld(i)*faccs(i)
907
908 vartmp(i,1) = ipos1(i,1)
909 vartmp(i,2) = ipos1(i,2)
910 vartmp(i,3) = ipos1(i,3)
911
912 vartmp(i,4) = ipos2(i,1)
913 vartmp(i,5) = ipos2(i,2)
914 vartmp(i,6) = ipos2(i,3)
915
916 vartmp(i,7) = ipos3(i,1)
917 vartmp(i,8) = ipos3(i,2)
918 vartmp(i,9) = ipos3(i,3)
919
920 vartmp(i,10) = ipos4(i,1)
921 vartmp(i,11) = ipos4(i,2)
922 vartmp(i,12) = ipos4(i,3)
923
924 vartmp(i,13) = ipos5(i,1)
925 vartmp(i,14) = ipos5(i,2)
926 vartmp(i,15) = ipos5(i,3)
927 ENDDO
928 enddo
929 DO ii = 1,nindxglob
930 i = indxglob(ii)
931 pla(i) = pla(i)+
max(dpla1(i), zero)
932 ENDDO
933 ENDIF
934
935
936
937
938 IF (nindxloc > 0) THEN
939 DO ii = 1,nindxloc
940 i = indxloc(ii)
941 logz(i) = one
942 logzm1(i) = one
943 IF (uvar(i,3)/=zero)THEN
944 psi2(i) =
max(zero,(lnf2(i)*(teta2*pla1(i)))/(one+lnf2(i)) )
945 phi2(i) = teta2*lnf2(i)/(one+lnf2(i))
946 ENDIF
947 IF (uvar(i,4)/=zero)THEN
948 psi3(i) =
max(zero,(lnf3(i)*(teta3*pla1(i)))/(one+lnf3(i))
949 phi3(i) = teta3*lnf3(i)/(one+lnf3(i))
950 ENDIF
951 IF (uvar(i,5)/=zero)THEN
952 psi4(i) =
max(zero, (lnf4(i)*(teta4*pla1(i)))/(one+lnf4(i)) )
953 phi4(i) = teta4*lnf4(i)/(one+lnf4(i))
954 ENDIF
955 IF (uvar(i,6)/=zero)THEN
956 psi5(i) =
max(zero,(lnf5(i)*(teta5
957 phi5(i) = teta5*lnf5(i)/(one+lnf5(i))
958 ENDIF
959 IF (totfrac(i) > zero)THEN
960 logz(i) = log(totfrac(i))
961 ENDIF
962 IF ( totfracold(i)>zero)THEN
963 logzm1(i) = log( totfracold(i))
964 ENDIF
965
966 a(i) = (one - totfrac(i))* gz(i) / e(i)
967 b(i) = two * (alfa1 -alfa2)* (tempel(i)-tempo(i) ) *totfrac(i)*logz(i)
968 c(i) = two*deth12(i)*abs((totfrac(i)*(one-logz(i))- totfracold(i)*(one-logzm1(i))))
969
970 hfct(i) = one +
max(zero,seven_half*(svmo(i)/yld(i)-half) )
971 dpla(i) = a(i) * ( svm(i) - svmo(i) ) + b(i) + c(i) *hfct(i)
972 gsig(i) = one/( one + three * (g(i) / y1(i)) * dpla(i) )
973
974 normxx = three_half * soxx(i) /y1(i)
975 normyy = three_half * soyy(i) /y1(i)
976 normzz = three_half * sozz(i) /y1(i)
977 normxy = two * three_half * sigoxy(i) /y1(i)
978
979 dpxx(i) = dpla(i) * normxx
980 dpyy(i) = dpla(i) * normyy
981 dpzz(i) = dpla(i) * normzz
982 dpxy(i) = dpla(i) * normxy
983
984 signxx(i) = signxx(i) - (a1(i)*dpxx(i) + a2(i)*dpyy(i))
985 signyy(i) = signyy(i) - (a1(i)*dpyy(i) + a2
986 signxy(i) = signxy(i) - dpxy(i)*g(i)
987 p(i) = -(signxx(i) + signyy(i)) * third
988
989 sxx(i) = signxx(i) + p(i)
990 syy(i) = signyy(i) + p(i)
991 szz(i) = p(i)
992 svm(i) = sqrt(three_half*(sxx(i)**2 + syy(i)**2 + szz(i)**2) + three*signxy(i)**2)
993 dezz(i)= dezz(i
994 ENDDO
995
996 DO ii = 1,nindxloc
997 i = indxloc(ii)
998 dpla1(i)= dpla(i)/(one - totfrac(i))
999 IF (uvar(i,3)>zero)THEN
1000 dpla2(i)= dpla1(i) *phi2(i) + psi2(i)
1001 ENDIF
1002 IF (uvar(i,4)>zero)THEN
1003 dpla3(i)= dpla1(i) *phi3(i) + psi3(i)
1004 ENDIF
1005 IF (uvar(i,5)>zero)THEN
1006 dpla4(i)= dpla1(i) *phi4(i) + psi4(i)
1007 ENDIF
1008 IF (uvar(i,6)>zero)THEN
1009 dpla5(i)= dpla1(i) *phi5(i) + psi5(i)
1010 ENDIF
1011 pla1(i)= uvar(i,17) + dpla1(i)
1012 pla2(i)= uvar(i,18) + dpla2(i)
1013 pla3(i)= uvar(i,19) + dpla3(i)
1014 pla4(i)= uvar(i,20) + dpla4(i)
1015 pla5(i)= uvar(i,21) + dpla5(i)
1016
1017
1018
1019 xx1(i,1)=pla1(i)
1020 xx2(i,1)=pla2(i)
1021 xx3(i,1)=pla3(i)
1022 xx4(i,1)=pla4(i)
1023 xx5(i,1)=pla5(i)
1024 ipos1(i,1) = vartmp(i,1)
1025 ipos1(i,2) = vartmp(i,2)
1026 ipos1(i,3) = vartmp(i,3)
1027
1028 ipos2(i,1) = vartmp(i,4)
1029 ipos2(i,2) = vartmp(i,5)
1030 ipos2(i,3) = vartmp(i,6)
1031
1032 ipos3(i,1) = vartmp(i,7)
1033 ipos3(i,2) = vartmp(i,8)
1034 ipos3(i,3) = vartmp(i,9)
1035
1036 ipos4(i,1) = vartmp(i,10)
1037 ipos4(i,2) = vartmp(i,11)
1038 ipos4(i,3) = vartmp(i,12)
1039
1040 ipos5(i,1) = vartmp(i,13)
1041 ipos5(i,2) = vartmp(i,14)
1042 ipos5(i,3) = vartmp(i,15)
1043
1044 END DO
1045
1046 CALL table_vinterp(table(itable(1)),nel,nel,ipos1,xx1,y1,dydx1)
1047 CALL table_vinterp(table(itable(2)),nel,nel,ipos2,xx2,y2,dydx2)
1048 CALL table_vinterp(table(itable(3)),nel,nel,ipos3,xx3,y3,dydx3)
1049 CALL table_vinterp(table(itable(4)),nel,nel,ipos4,xx4,y4,dydx4)
1050 CALL table_vinterp(table(itable(5)),nel,nel,ipos5,xx5,y5,dydx5)
1051 DO ii = 1,nindxloc
1052 i = indxloc(ii)
1053 y1(i)=y1(i)*yscale(1)
1054 y2(i)=y2(i)*yscale(2)
1055 y3(i)=y3(i)*yscale(3)
1056 y4(i)=y4(i)*yscale(4)
1057 y5(i)=y5(i)*yscale(5)
1058 dydx1(i)=dydx1(i)*yscale(1)
1059 dydx2(i)=dydx2(i)*yscale(2)
1060 dydx3(i)=dydx3(i)*yscale(3)
1061 dydx4(i)=dydx4(i)*yscale(4)
1062 dydx5(i)=dydx5(i)*yscale(5)
1063
1064
1065 yld(i)=
max(em20, y1(i)*frac1(i)+
1066 . y2(i)*frac2(i)+
1067 . y3(i)*frac3(i)+
1068 . y4(i)*frac4(i)+
1069 . y5(i)*frac5(i))
1070 yld(i)= yld(i)*faccs(i)
1071 ENDDO
1072
1073 DO ii = 1,nindxloc
1074 i = indxloc(ii)
1075 vartmp(i,1) = ipos1(i,1)
1076 vartmp(i,2) = ipos1(i,2)
1077 vartmp(i,3) = ipos1(i,3)
1078
1079 vartmp(i,4) = ipos2(i,1)
1080 vartmp(i,5) = ipos2(i,2)
1081 vartmp(i,6) = ipos2(i,3)
1082
1083 vartmp(i,7) = ipos3(i,1)
1084 vartmp(i,8) = ipos3(i,2)
1085 vartmp(i,9) = ipos3(i,3)
1086
1087 vartmp(i,10) = ipos4(i,1)
1088 vartmp(i,11) = ipos4(i,2)
1089 vartmp(i,12) = ipos4(i,3)
1090
1091 vartmp(i,13) = ipos5(i,1)
1092 vartmp(i,14) = ipos5(i,2)
1093 vartmp(i,15) = ipos5(i,3)
1094
1095 ENDDO
1096 ENDIF
1097
1098
1099 DO i=1,nel
1100 IF (off(i) == one )THEN
1101 uvar(i,8) = tempel(i)
1102
1103 uvar(i,17)= uvar(i,17) +
max(dpla1(i), zero)
1104 uvar(i,18)= uvar(i,18) +
max(dpla2(i), zero)
1105 uvar(i,19)= uvar(i,19) +
max(dpla3(i), zero)
1106 uvar(i,20)= uvar(i,20) +
max(dpla4(i), zero)
1107 uvar(i,21)= uvar(i,21) +
max(dpla5(i), zero)
1108 IF(uvar(i,15)<svm(i)) uvar(i,15)=svm(i)
1109 IF(uvar(i,34)>tempel(i))uvar(i,34)=tempel(i)
1110
1111 uvar(i,23)= frac2(i)/xeq2
1112 uvar(i,24)= frac3(i)/(one-xeq2)
1113 uvar(i,25)= frac4(i)
1114 uvar(i,44)= frac5(i)/
max(em20,xgama(i))
1115
1116 uvar(i,2)= frac1(i)
1117 uvar(i,3)= frac2(i)
1118 uvar(i,4)= frac3(i)
1119 uvar(i,5)= frac4(i)
1120 uvar(i,6)= frac5(i)
1121 uvar(i,10)= xgama(i)
1122
1123 hard(i)= zero
1124 epsthtot(i) = uvar(i,38)
1125 ENDIF
1126 IF (dpla(i)>zero)THEN
1127 h(i)=(yld(i)-uvar(i,9))/dpla(i)
1129 etse(i)=h(i)/(h(i)+e(i))
1130 uvar(i,28)=etse(i)
1131 ELSE
1132 etse(i)=uvar(i,28)
1133 ENDIF
1134 uvar(i,9)=yld(i)
1135 thk(i) = thk(i) + dezz(i)*thkly(i)*off(i)
1136
1137 enddo
1138 IF (alfa1/= zero .OR. alfa2 /= zero) THEN
1139 DO i=1,nel
1140
1141
1142 ENDDO
1143 ENDIF
1144 IF(heatflag == 0) THEN
1145 DO i=1,nel
1146 IF (off(i) == one )THEN
1147 IF (tempel(i)<ms.AND.tempel(i)<= uvar(i,8) .AND. tempel(i)<=1073.0)THEN
1148 vr(i) = zero
1149 hard(i) = uvar(i,7)
1150 IF (uvar(i,16) >uvar(i,26))THEN
1151 vr(i) = (uvar(i,27)-uvar(i,33))*unitt/(uvar(i,16)-uvar(i,26))
1152 hard(i)= (frac2(i)+frac3(i))*hfp*log10(vr(i))+frac4(i)*hb+frac5(i)*hm
1153 uvar(i,7)= hard(i)
1154 ENDIF
1155 ENDIF
1156 voli = thkly(i)*
area(i)
1157 die(i) =die(i)+ (lat2*(frac5(i)-uvar(i,6)) +
1158 . lat1*(frac2(i)-uvar(i,3)
1159 . + frac3(i)-uvar(i,4)
1160 . + frac4(i)-uvar(i,5) ) ) *voli
1161
1162 ENDIF
1163 ENDDO
1164 ENDIF
1165
1166
1167
1168 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine kirkaldykinetics(nel0, time, tempel, tempmin, ae1, ae3, bs, ms, fcfer, fcper, fcbai, fgrain, frac1, frac2, frac3, frac4, frac5, x2, x3, x4, x5, qr2, qr3, qr4, kper, kbain, alpha, xeq2, xeq4, xgama, totfrac, timestep, nicool, index, theaccfact)
subroutine phasekinetic2(nel0, time, tempel, tempo, tempmin, ae1, ae3, bs, ms, fcfer, fcper, fcbai, fgrain, frac1, frac2, frac3, frac4, frac5, x2, x3, x4, x5, gfac_f, phi_f, psi_f, cr_f, cf, gfac_p, phi_p, psi_p, cr_p, cp, gfac_b, phi_b, psi_b, cr_b, cb, phi_m, psi_m, n_m, fgfer, fgper, fgbai, qr2, qr3, qr4, kper, kbain, alpha, xeq2, xeq4, xgama, totfrac, timestep, nicool, index, theaccfact)