OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
kirkaldykinetics.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23C
24!||====================================================================
25!|| kirkaldykinetics ../engine/source/materials/mat/mat080/kirkaldykinetics.F
26!||--- called by ------------------------------------------------------
27!|| sigeps80 ../engine/source/materials/mat/mat080/sigeps80.F
28!|| sigeps80c ../engine/source/materials/mat/mat080/sigeps80c.F
29!||====================================================================
30 SUBROUTINE kirkaldykinetics(NEL0,TIME,TEMPEL,TEMPMIN,AE1,AE3,BS,MS,FCFER,
31 . FCPER,FCBAI,FGRAIN,FRAC1,FRAC2,FRAC3,FRAC4,FRAC5,X2,X3,X4,X5,
32 . QR2,QR3,QR4,KPER,KBAIN,ALPHA,XEQ2,XEQ4,XGAMA,TOTFRAC,TIMESTEP,NICOOL,
33 . INDEX,THEACCFACT)
34
35#include "implicit_f.inc"
36C-----------------------------------------------
37C I N P U T A r g u m e n t s
38C-----------------------------------------------
39 INTEGER NEL0,NICOOL,INDEX(NICOOL)
40 my_real ,intent(in) :: THEACCFACT
41 my_real
42 . tempel(nel0),tempmin(nel0),timestep
43 my_real
44 . time,alpha,tref,ae1,ae3,bs,ms,gsize,nu,fcfer,fcper,fcbai,
45 . fgrain,qr2,qr3,qr4,kper,kbain,xeq2,xeq4,yx
46C-----------------------------------------------
47 my_real
48 . frac1(nel0),frac2(nel0),frac3(nel0),frac4(nel0),frac5(nel0)
49 my_real
50 . x2(nel0),x3(nel0),x4(nel0),x5(nel0),totfrac(nel0),xgama(nel0)
51 my_real
52 . ftemp,ux,vx,udot,vdot,f,const,fdot,x2old(nel0),
53 . x3old(nel0),x4old(nel0),gx,gdot,dti
54 INTEGER I,K,J
55
56 ! SUM OF FRAC1+FRAC2+FRAC3+FRAC4+FRAC5=1--------
57 dti= one/max(timestep*theaccfact,em10)
58 DO j=1,nicool ! NEL0
59
60 i=index(j)
61 ! CHECK TEMPERATURE FOR CORRESPONDING PHASE CHANGE
62 IF(totfrac(i)<one.AND.tempel(i)<tempmin(i))THEN
63 IF (tempel(i)<ae3)THEN
64 IF(tempel(i)>ae1)THEN
65 IF(x2(i)<0.999)THEN
66 ! FERRITE FORMATION X2
67 !X2OLD(I)= FRAC2(I)/XEQ2
68 x2old(i)=x2(i)
69 IF(x2(i)==zero)x2(i)=em10
70 ftemp=exp(-qr2/tempel(i))*abs(tempel(i)-ae3)**3
71 const=ftemp*fgrain*fcfer
72 DO k=1,3
73 yx= (one-x2(i))/max(em10,x2(i))
74 ux=x2(i)**(two_third*(one-x2(i)))
75 vx=(one-x2(i))**(two_third*x2(i))
76 f =(x2(i)-x2old(i))*dti-const*ux*vx
77 fdot=dti-const*two_third*ux*vx*(yx-one/yx+log(yx))
78 x2(i)=max(em20,x2(i)-f/fdot)
79 ENDDO
80 frac2(i)=x2(i)*xeq2
81 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
82 ENDIF
83c---------------------------------
84 ELSEIF(tempel(i)>bs)THEN
85 IF(x3(i)<0.999)THEN
86 ! PEARLITE X3
87 x3old(i)= x3(i) !FRAC3(I)/(ONE-XEQ2) !!
88 IF(x3(i)==zero)x3(i)=em10
89 ftemp=6.17*exp(-qr3/tempel(i))*abs(tempel(i)-ae1)**3
90 const=ftemp*fgrain*fcper !!! adjusted
91 DO k=1,3
92 yx= (one-x3(i))/max(em10,x3(i))
93 ux=x3(i)**(two_third*(one-x3(i)))
94 vx=(one-x3(i))**(two_third*x3(i))
95 f =(x3(i)-x3old(i))*dti-const*ux*vx
96 fdot=dti-const*two_third*ux*vx*(yx-one/yx+log(yx))
97 x3(i)=max(em20,x3(i)-f/fdot)
98 ENDDO
99 frac3(i)=x3(i)*(one-xeq2)
100 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
101 ENDIF
102c---------------------------------
103 ELSEIF(tempel(i)>ms)THEN
104 IF(x4(i)<0.999)THEN
105 ! BAINITE FORMATION
106 x4old(i) = x4(i) !FRAC4(I) = X4(I)
107 IF(x4(i) == zero) x4(i) = x3(i) !FRAC3(I)/(ONE-XEQ2)
108 ! INITIALISE AU TAUX DE PERLITE
109 ftemp=exp(-qr4/tempel(i)) *(tempel(i)-bs)**2
110 const=ftemp*fgrain*fcbai
111 DO k=1,4
112 yx= (one-x4(i))/max(em10,x4(i))
113 ux=x4(i)**(two_third*(one-x4(i)))
114 vx=(one-x4(i))**(two_third*x4(i))
115 gx=exp(kbain*x4(i)*x4(i))
116 IF (gx<zero)gx=one
117 f =(x4(i)-x4old(i))*dti-const*ux*vx/gx
118 udot=two_third*ux*((one-x4(i))/max(em10,x4(i))-
119 . log(max(em10,x4(i))))
120 vdot=two_third*vx*(log(one-x4(i))-x4(i)/(one-x4(i)))
121 gdot=two*kbain*x4(i)*gx
122 fdot=dti-const*((udot*vx+vdot*ux)*gx-ux*vx*gdot)/gx/gx
123 x4(i)=max(em20,x4(i)-f/fdot)
124 ENDDO
125 frac4(i)=x4(i)
126 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
127 ENDIF
128
129 ELSE
130 ! MARTENSITE FORMATION X5
131 IF (frac5(i)==zero)xgama(i)= frac1(i)
132 frac5(i)=xgama(i)*(one-exp(-alpha*(ms-tempel(i))))
133 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
134 ENDIF
135 ENDIF
136 ENDIF
137 ENDDO
138
139 RETURN
140 END
#define alpha
Definition eval.h:35
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)
#define max(a, b)
Definition macros.h:21