95 integer(4),
intent(in) :: N
96 integer(4) :: IS(N),JS(N)
99 real(8),
intent (in) :: A(N,N)
109 if(abs(b(i,j))>d)
then
110 d=abs(b(i,j)); is(k)=i; js(k)=j
116 t=b(k,j); b(k,j)=b(is(k),j); b(is(k),j)=t
120 t=b(i,k); b(i,k)=b(i,js(k)); b(i,js(k))=t
124 do j=1,n;
if(j.NE.k) b(k,j)=b(k,j)*b(k,k);
enddo
128 do j=1,n;
if(j.NE.k) b(i,j)=b(i,j)-b(i,k)*b(k,j);
enddo
132 do i=1,n;
if(i.NE.k) b(i,k)=-b(i,k)*b(k,k);
enddo
137 t=b(k,j); b(k,j)=b(js(k),j); b(js(k),j)=t
140 t=b(i,k); b(i,k)=b(i,is(k)); b(i,is(k))=t
149subroutine ksteel02(props,s,e,de,Et,statev,spd, yield, IDeath)
152 real*8 e0,sy0,eta,mu,gama,esoft,alpha,beta,a_k,omega
153 real*8 emax,emin,ert,srt,erc,src,ehc,eh1,dt,dc,eu
154 real*8 de,s,e,s0,et,e_unload,sign,sy,evs,eve,epeak,smax,max
155 real*8 sres,eres,x,e_slip,s_slip,e_close,s_close,srel,et1
156 real*8 smin,spd,strain_end
159 integer kon, yield, IDeath
161 real*8 props(10), statev(11)
179 kon = nint(statev(7))
188 if(omega<=0.) omega=0.5
190 if(eta<=0.) eta=1.d-6;
191 if(esoft>=0.) esoft=-1.d-6
201 else if ((kon.eq.1).and.(de.lt.0.0))
then
207 ehc = ehc + eh1 * (erc / eu ) ** 2.0
209 if (e.gt.emax) emax = e
210 else if ((kon.eq.2).and.(de.gt.0.0))
then
216 ehc = ehc + eh1 * (ert / eu ) ** 2.0
218 if (e.lt.emin) emin = e
226 if(s0>0.) e_unload=e0*(abs(emax/(sy0/e0)))**(-a_k)
227 if(s0<0.) e_unload=e0*(abs(emin/(sy0/e0)))**(-a_k)
228 if(e_unload<0.1*e0) e_unload=0.1*e0
234 s = s0 + e_unload * de
238 s0=1.d-6*sy0*sign(1.d0,s)
244 if ( de .ge. 0.0 .and. s0>=0.)
then
245 sy = (1.0 - dt) * sy0
249 evs = max( sy + ( e + de - sy/e0) * eta * e0, 0.)
258 epeak=sy/e0+(alpha-1.)*sy/e0/eta
259 if(e+0.5*de>epeak)
then
260 evs=max(sy*alpha+esoft*e0*(e+de-epeak),0.0*sy)
261 if(sy*alpha+esoft*e0*(e+de-epeak)<=0.) ideath=1
271 smax = max(sy, sy + (emax - sy/e0) * eta * e0)
273 smax=max(sy*alpha+esoft*e0*(emax-epeak),0.0*sy)
276 eres = ert - (srt - sres) / e_unload
279 e_slip=gama*emax+(1.-gama)*x
282 s_close=(e_close-eres)/(e_slip-eres) * (s_slip-sres) + sres
284 if (eres .le. emax - smax / e0)
then
285 if(e+0.5*de<e_close)
then
286 srel = (e+de-eres)/(e_slip-eres) * (s_slip-sres) + sres
287 et1=(s_slip-sres)/(e_slip-eres)
289 srel=(e+de-e_close)/(emax-e_close)*(smax-s_close)+s_close
290 et1 = (smax - s_close) / (emax - e_close)
292 if (s .gt. srel)
then
298 elseif ( de .lt. 0.0 .and. s0<0. )
then
299 sy = (1.0 - dc) * sy0 *beta
303 evs = min(-sy + ( e + de + sy/e0) * eta * e0,-0.0*sy)
312 epeak=-sy/e0-(alpha-1.)*sy/e0/eta
313 if(e+0.5*de<epeak)
then
314 evs=min(-sy*alpha+esoft*e0*(e+de-epeak),-0.*sy)
315 if(-sy*alpha+esoft*e0*(e+de-epeak)>=0.) ideath=1
325 smin = min(-sy, -sy + (emin + sy/e0) * eta * e0)
327 smin=min(-sy*alpha+esoft*e0*(emin-epeak),0.)
330 eres = erc - (src - sres) / e_unload
333 e_slip=gama*emin+(1.-gama)*x
336 s_close=(e_close-eres)/(e_slip-eres) * (s_slip-sres) + sres
338 if (eres .ge. emin - smin / e0)
then
339 if(e+0.5*de>e_close)
then
340 srel = (e+de-eres)/(e_slip-eres) * (s_slip-sres) + sres
341 et1=(s_slip-sres)/(e_slip-eres)
343 srel=(e+de-e_close)/(emin-e_close)*(smin-s_close)+s_close
344 et1 = (smin - s_close) / (emin - e_close)
346 if (s .lt. srel)
then
354 if (et.ne.e0 .and. et.ne. e_unload)
then
357 if ( s .ge. 0.0 )
then
358 dc = min(ehc /(3.0 * beta* sy0 * eu), 0.7)
360 dt = min(ehc /(3.0 * sy0 * eu), 0.7)
365 epeak=x/e0+(alpha-1.)*x/e0/eta
366 strain_end=epeak+abs(x/(esoft*e0))
367 x=max(abs(emax),abs(emin),abs(e+de))