39
40
41
42#include "implicit_f.inc"
43
44
45
46#include "mvsiz_p.inc"
47
48
49
50#include "impl1_c.inc"
51
52
53
54 INTEGER ,INTENT(IN) :: NEL
55 INTEGER ,INTENT(IN) :: IPLA
56 INTEGER ,INTENT(IN) :: IFORM
57 INTEGER ,INTENT(IN) :: ISRATE
58 INTEGER ,INTENT(IN) ::
59 INTEGER ,INTENT(IN) :: VP
74 my_real,
DIMENSION(NEL) ,
INTENT(IN) :: depsxx,depsyy,depsxy,depsyz,depszx
75 my_real,
DIMENSION(NEL) ,
INTENT(IN) :: sigoxx,sigoyy,sigoxy,sigoyz
76 my_real,
DIMENSION(NEL) ,
INTENT(IN) :: gs
77 my_real,
DIMENSION(NEL) ,
INTENT(IN) :: tstar
78 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: signxx,signyy,signxy,signyz,signzx
79 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: sigbakxx,sigbakyy,sigbakxy,hardm
80 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: ezz,off,pla,etse,epchk,yld,epsp
81 my_real,
DIMENSION(NEL) ,
INTENT(INOUT) :: temp,dpla,gama_imp
82 my_real,
DIMENSION(NEL,5),
INTENT(INOUT) :: signor
83
84
85
86 INTEGER :: I,J,N,NINDX,NMAX
87 INTEGER :: INDEX(MVSIZ)
88 my_real :: f,df,pla_i,p2,q2,r,s1,s2,s3,yld_i,small,beta,aa,aaa,hkin,
alpha
89 my_real :: a(mvsiz), b(mvsiz) ,dpla_i(mvsiz), dpla_j(mvsiz), dr(mvsiz),
90 . h(mvsiz), nu1(mvsiz), nu2(mvsiz) ,p(mvsiz) ,q(mvsiz),
91 . svm(mvsiz),ca(mvsiz), cb(mvsiz) ,
ymax(mvsiz) ,
92 . svm2(mvsiz),yld2(mvsiz),hi(mvsiz),hk(mvsiz),logep(mvsiz),
93 . nu11(mvsiz),nu21(mvsiz),anu1(mvsiz),bnu2(mvsiz),h2(mvsiz)
94 DATA nmax/3/
95
96 nindx = 0
97 small = em7
98 DO i = 1,nel
99 etse(i) = one
100 ca(i) = ca0
101 cb(i) = cb0
103 h(i) = zero
104
105 signxx(i)=sigoxx(i)
106 signyy(i)=sigoyy(i)
107 signxy(i)=sigoxy(i)
108 signyz(i)=sigoyz(i)
109 signzx(i)=sigozx(i)
110 ENDDO
111
112
113
114 IF (fisokin > zero) THEN
115 DO i = 1,nel
116 signxx(i)=signxx(i)-sigbakxx(i)
117 signyy(i)=signyy(i)-sigbakyy(i)
118 signxy(i)=signxy(i)-sigbakxy(i)
119 ENDDO
120 END IF
121
122
123
124 DO i = 1,nel
125 signxx(i)=signxx(i)+a1*depsxx(i)+a2*depsyy(i)
126 signyy(i)=signyy(i)+a2*depsxx(i)+a1*depsyy(i)
127 signxy(i)=signxy(i)+g*depsxy(i)
128 signyz(i)=signyz(i)+gs(i)*depsyz(i)
129 signzx(i)=signzx(i)+gs(i)*depszx(i)
130 ENDDO
131 DO i = 1,nel
132 logep(i) = zero
133 ENDDO
134
135
136
137 IF (cc /= zero) THEN
138 IF (iform == 0) THEN
139 DO i = 1,nel
140 IF (israte == 0.AND.vp == 2) epsp(i) =
141 .
max( abs(depsxx(i)), abs(depsyy(i)), half*abs(depsxy(i)))
142 epsp(i) =
max(epsp(i),epdr)
143 logep(i) = log(epsp(i)/epdr)
144 ENDDO
145#include "vectorize.inc"
146 DO i = 1,nel
147 IF (tstar(i) == zero) THEN
148 q(i) = (one + cc * logep(i))
149 ELSE
150 q(i) = (one + cc * logep(i))*(one-exp(m_exp*log(tstar(i))))
151 ENDIF
152 q(i) =
max(q(i),em20)
153 ca(i) = ca(i) * q(i)
154 cb(i) = cb(i) * q(i)
155 IF (icc == 1)
ymax(i) =
ymax(i) * q(i)
156 ENDDO
157 ELSEIF (iform == 1) THEN
158 DO i = 1,nel
159 IF (israte == 0 .AND. vp == 2) epsp(i) =
max( abs(depsxx(i)),
160 . abs(depsyy(i)), half*abs(depsxy(i)))
161 epsp(i) =
max(epsp(i),em20)
162 logep(i) = log(epsp(i)/epdr)
163 ENDDO
164 DO i = 1,nel
165 q(i) = logep(i)
166 q(i) = cc*exp((-c3 + c4*q(i))*temp(i))
167 IF (icc == 1)
ymax(i) =
ymax(i) + q(i)
168 ca(i) = ca(i) + q(i)
169 ENDDO
170 ENDIF
171 ELSE
172 IF (iform == 0) THEN
173 DO i = 1,nel
174 IF (tstar(i) /= zero) THEN
175 q(i) = one - exp(m_exp*log(tstar(i)))
176 q(i) =
max(q(i),em20)
177 ca(i) = ca(i) * q(i)
178 cb(i) = cb(i) * q(i)
179 END IF
180 ENDDO
181 ENDIF
182 ENDIF
183
184
185
186 DO i = 1,nel
187 dpla(i) = zero
188 IF (pla(i) == zero) THEN
189 yld(i)= ca(i)
190 ELSE
191 beta = cb(i)*(one-fisokin)
192 yld(i)= ca(i)+beta*exp(cn*log(pla(i)))
193 ENDIF
195 ENDDO
196
197
198
199 IF (ipla == 0) THEN
200
201
202
203 DO i = 1,nel
204 svm(i)=sqrt(signxx(i)*signxx(i)
205 . +signyy(i)*signyy(i)
206 . -signxx(i)*signyy(i)
207 . +three*signxy(i)*signxy(i))
208 ENDDO
209
210#include "vectorize.inc"
211 DO i = 1,nel
212 r =
min(one,yld(i)/(svm(i)+em15))
213 IF (r < one) THEN
214 signxx(i)=signxx(i)*r
215 signyy(i)=signyy(i)*r
216 signxy(i)=signxy(i)*r
217 dpla(i) = off(i) *
max(zero,(svm(i)-yld(i))/young)
218 s1=half*(signxx(i)+signyy(i))
219 ezz(i) = dpla(i) * s1 /yld(i)
220 pla(i) = pla(i) + dpla(i)
221 epchk(i) =
max(pla(i),epchk(i))
222 IF (yld(i) >=
ymax(i))
THEN
223 h(i)=zero
224 ELSE
225 h(i)=cn*cb(i)*exp((cn-one)*log(pla(i)+small))
226 ENDIF
227 etse(i)= h(i)/(h(i)+young)
228 ENDIF
229 ENDDO
230
231 ELSEIF (ipla == 1) THEN
232
233
234
235 DO i = 1,nel
236 s1=signxx(i)+signyy(i)
237 s2=signxx(i)-signyy(i)
238 s3=signxy(i)
239 a(i)=fourth*s1*s1
240 b(i)=three_over_4*s2*s2+three*s3*s3
241 svm(i)=sqrt(a(i)+b(i))
242 ENDDO
243
244
245
246 nindx=0
247 DO i = 1,nel
248 IF (svm(i) > yld(i) .AND. off(i) == one) THEN
249 nindx=nindx+1
250 index(nindx)=i
251 ENDIF
252 ENDDO
253 IF (nindx == 0) THEN
254 IF (fisokin > zero) THEN
255 DO i = 1,nel
256 signxx(i)=signxx(i) + sigbakxx(i)
257 signyy(i)=signyy(i) + sigbakyy(i)
258 signxy(i)=signxy(i) + sigbakxy(i)
259 ENDDO
260 END IF
261 IF (impl_s > 0.AND.ikt > 0) THEN
262 DO i = 1,nel
263 gama_imp(i) = zero
264 END DO
265 END IF
266 RETURN
267 END IF
268
269
270
271#include "vectorize.inc"
272 DO j=1,nindx
273 i=index(j)
274 nu1(i)=one/(one-nu)
275 nu2(i)=one/(one+nu)
276 IF (yld(i) >=
ymax(i))
THEN
277 h(i)=zero
278 ELSE
279 h(i)=cn*cb(i)*exp((cn-one)*log(pla(i)+small))
280 ENDIF
281 dpla_j(i)=(svm(i)-yld(i))/(three*g+h(i))
282 etse(i)= h(i)/(h(i)+young)
283 anu1(i) = a(i)*nu1(i)
284 bnu2(i) = three*b(i)*nu2(i)
285 h2(i)= two*h(i)
286 ENDDO
287
288 IF (fisokin == zero) THEN
289 DO n=1,nmax
290#include "vectorize.inc"
291 DO j=1,nindx
292 i=index(j)
293 dpla_i(i)=dpla_j(i)
294 pla_i =pla(i)+dpla_i(i)
295 dpla(i) = dpla_j(i)
296 IF (pla_i == zero) THEN
298 ELSE
299 yld_i =
min(
ymax(i),ca(i)+cb(i)*exp(cn*log(pla_i)))
300 ENDIF
301 dr(i) =half*young*dpla_i(i)/yld_i
302 p(i) =one/(one+dr(i)*nu1(i))
303 q(i) =one/(one+three*dr(i)*nu2(i))
304 p2 =p(i)*p(i)
305 q2 =q(i)*q(i)
306 f =a(i)*p2+b(i)*q2-yld_i*yld_i
307 df =-(anu1(i)*p2*p(i)+bnu2(i)*q2*q(i))
308 . *(young-dr(i)*h2(i))/yld_i
309 . -h2(i)*yld_i
310 IF (dpla_i(i) > zero) THEN
311 dpla_j(i)=
max(zero,dpla_i(i)-f/df)
312 ELSE
313 dpla_j(i)=zero
314 ENDIF
315 ENDDO
316 ENDDO
317
318 ELSE
319#include "vectorize.inc"
320 DO j=1,nindx
321 i=index(j)
322 beta = h(i)*fisokin
323 hi(i) = h(i)-beta
324 hk(i) = two_third*beta
325 aaa = three*hk(i)/young
326 nu11(i) = nu1(i) + aaa
327 nu21(i) = three*nu2(i) + aaa
328 anu1(i) = a(i)*nu11(i)
329 bnu2(i) = b(i)*nu21(i)
330 h2(i)= two*hi(i)
331 ENDDO
332
333 DO n=1,nmax
334#include "vectorize.inc"
335 DO j=1,nindx
336 i=index(j)
337 dpla_i(i)=dpla_j(i)
338 pla_i =pla(i)+dpla_i(i)
339 dpla(i) = dpla_j(i)
340 beta = one-fisokin
341 IF (pla_i == zero) THEN
343 ELSE
344 yld_i =
min(
ymax(i),ca(i)+beta*cb(i)*exp(cn*log(pla_i)))
345 ENDIF
346 dr(i) =half*young*dpla_i(i)/yld_i
347 p(i) =one/(one+dr(i)*nu11(i))
348 q(i) =one/(one+dr(i)*nu21(i))
349 p2 =p(i)*p(i)
350 q2 =q(i)*q(i)
351 f =a(i)*p2+b(i)*q2-yld_i*yld_i
352 df =-(anu1(i)*p2*p(i)+bnu2(i)*q2*q(i))
353 . *(young-dr(i)*h2(i))/yld_i
354 . -h2(i)*yld_i
355 IF (dpla_i(i) > zero) THEN
356 dpla_j(i)=
max(zero,dpla_i(i)-f/df)
357 ELSE
358 dpla_j(i)=zero
359 ENDIF
360 ENDDO
361 ENDDO
362 ENDIF
363
364
365
366#include "vectorize.inc"
367 DO j=1,nindx
368 i=index(j)
369 pla(i) = pla(i) + dpla_i(i)
370 epchk(i) =
max(pla(i),epchk(i))
371 s1=(signxx(i)+signyy(i))*p(i)
372 s2=(signxx(i)-signyy(i))*q(i)
373 signxx(i)=half*(s1+s2)
374 signyy(i)=half*(s1-s2)
375 signxy(i)=signxy(i)*q(i)
376 ezz(i) = dr(i)*s1/young
377 ENDDO
378
379 ELSEIF (ipla == 2) THEN
380
381
382
383 DO i = 1,nel
384 svm2(i)= signxx(i)*signxx(i)
385 . +signyy(i)*signyy(i)
386 . -signxx(i)*signyy(i)
387 . +three*signxy(i)*signxy(i)
388 svm(i)=sqrt(svm2(i))
389 END DO
390
391
392
393 nindx=0
394 DO i = 1,nel
395 yld2(i)=yld(i)*yld(i)
396 IF (svm2(i) > yld2(i) .AND. off(i) == one) THEN
397 nindx=nindx+1
398 index(nindx)=i
399 END IF
400 END DO
401
402 IF (nindx /= 0) THEN
403
404
405
406#include "vectorize.inc"
407 DO j=1,nindx
408 i=index(j)
409 IF (yld(i) >=
ymax(i))
THEN
410 h(i)=zero
411 ELSE
412 h(i)=cn*cb(i)*exp((cn-one)*log(pla(i)+small))
413 ENDIF
414 etse(i)= h(i)/(h(i)+young)
415
416 aa=(svm2(i)-yld2(i))
417 . /(five*svm2(i)+three*(-signxx(i)*signyy(i)+signxy(i)*signxy(i)))
418 s1=(one-two*aa)*signxx(i)+ aa*signyy(i)
419 s2=aa*signxx(i)+(one-two*aa)*signyy(i)
420 s3=(one-three*aa)*signxy(i)
421 signxx(i)=s1
422 signyy(i)=s2
423 signxy(i)=s3
424 dpla(i) = off(i)*(svm(i)-yld(i))/(three*g+h(i))
425 pla(i) = pla(i) + dpla(i)
426
427 yld(i) =yld(i)+h(i)*dpla(i)
428 END DO
429
430#include "vectorize.inc"
431 DO j=1,nindx
432 i=index(j)
433 svm(i)=sqrt( signxx(i)*signxx(i)
434 . +signyy(i)*signyy(i)
435 . -signxx(i)*signyy(i)
436 . +three*signxy(i)*signxy(i))
437 r =
min(one,yld(i)/
max(em20,svm(i)))
438 signxx(i)=signxx(i)*r
439 signyy(i)=signyy(i)*r
440 signxy(i)=signxy(i)*r
441 ezz(i) = dpla(i) * half*(signxx(i)+signyy(i)) / yld(i)
442 END DO
443 END IF
444 ENDIF
445
446
447
448 IF (impl_s > 0) THEN
449 IF (ikt > 0) THEN
450 DO i = 1,nel
451 IF (dpla(i) > zero) THEN
452
453 pla_i =pla(i)
454 beta = one-fisokin
455 yld(i) =
min(
ymax(i),ca(i)+beta*cb(i)*exp(cn*log(pla_i)))
456 gama_imp(i)= three_half*dpla(i)/yld(i)
457
458 signor(i,4)=fisokin*h(i)
459 signor(i,5)=(one-fisokin)*h(i)
460
461 signor(i,1)=third*(two*signxx(i)-signyy(i))
462 signor(i,2)=third*(two*signyy(i)-signxx(i))
463 signor(i,3)=two*signxy(i)
464 ELSE
465 gama_imp(i) = zero
466 END IF
467 END DO
468 END IF
469 END IF
470
471
472
473 IF (fisokin > zero) THEN
474 IF (ipla == 1 )THEN
475#include "vectorize.inc"
476 DO j=1,nindx
477 i=index(j)
478 pla_i =pla(i)
479 beta = one-fisokin
480
481 IF (pla_i == zero) THEN
482 yld(i) =ca(i)
483 ELSE
484 yld(i) =
min(
ymax(i),ca(i)+beta*cb(i)*exp(cn*log(pla_i)))
485 ENDIF
486 END DO
487 END IF
488 DO i = 1,nel
489 hkin = fisokin*h(i)
490 alpha = hkin*dpla(i)/yld(i)
491 sigbakxx(i) = sigbakxx(i) +
alpha*signxx(i)
492 sigbakyy(i) = sigbakyy(i) +
alpha*signyy(i)
493 sigbakxy(i) = sigbakxy(i) +
alpha*signxy(i)
494
495 signxx(i)=signxx(i) + sigbakxx(i)
496 signyy(i)=signyy(i) + sigbakyy(i)
497 signxy(i)=signxy(i) + sigbakxy(i)
498 ENDDO
499 END IF
500
501
502
503 hardm(1:nel) = h(1:nel)
504
505 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)