46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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#include "implicit_f.inc"
106
107
108
109#include "mvsiz_p.inc"
110
111
112
113#include "parit_c.inc"
114#include "scr05_c.inc"
115#include "units_c.inc"
116
117
118
119
120 INTEGER NEL, NVARTMP
121 INTEGER IAD1(MVSIZ), ILEN1(MVSIZ),
122 . IPFLAG, PFUN, IPFUN, IPOSP(MVSIZ),
123 . IADP(MVSIZ), ILENP(MVSIZ), NRATE, NPF(*)
124 INTEGER :: VARTMP(NEL,NVARTMP)
125
126
128 . signxx(*), signyy(*), signzz(*),
129 . signxy(*), signyz(*), signzx(*),
130 . pla(*), g3(*), yld(*),
131 . dpla1(*), h(*),
132 . tf(*), y1(*), dydx1(*),
133 . yfac(mvsiz,*),
134 . pla0(mvsiz), plam(mvsiz),
135 . fisokin,
136 . pfac(mvsiz), pscale1(mvsiz), dfdp(mvsiz),
137 . fail(mvsiz)
139 . sigbxx(nel),sigbyy(nel),sigbzz(nel),sigbxy(nel),sigbyz(nel),sigbzx(nel)
140
141
142
143
144 INTEGER I, II, ITER, NITER, I_BILIN, IPOS
145
146
148 . xsi, dxsi, lhs, rhs, alpha_radial, vm, hep, r, dpla,
149 . yld_curr, yld_prev, yld_m, h_m, p_scal, y_scal,
150 . total_scal, yld_m_prev, h_m_prev,
151 . sxx, syy, szz, sxy, syz, szx
152
153
154
155
156
157
159 . finter2
160 EXTERNAL finter2
161
162
163
164
165
166
167
168 i_bilin = 0
169
170
171 niter = 20
172
173
174
175
176 DO i=1,nel
177 pfac(i) = one
178 ENDDO
179
180 IF (ipflag == nel.AND.(iparit == 0)) THEN
181 DO i=1,nel
182 iposp(i) = vartmp(i,2)
183 iadp(i) = npf(ipfun) / 2 + 1
184 ilenp(i) = npf(ipfun + 1) / 2 - iadp(i) - iposp(i)
185 ENDDO
186 IF (iresp == 1) THEN
187 CALL vinter2dp(tf,iadp,iposp,ilenp,nel,pscale1,dfdp,pfac)
188 ELSE
189 CALL vinter2(tf,iadp,iposp,ilenp,nel,pscale1,dfdp,pfac)
190 ENDIF
191 pfac(i) =
max(zero, pfac(i))
192 ELSEIF (ipflag > 0) THEN
193 IF (pfun > 0) THEN
194 DO i=1,nel
195 iposp(i) = vartmp(i,2)
196 iadp(i) = npf(ipfun) / 2 + 1
197 ilenp(i) = npf(ipfun + 1) / 2 - iadp(i) - iposp(i)
198 pfac(i) = finter2(tf ,iadp(i),iposp(i),ilenp(i),
199 . pscale1(i),dfdp(i))
200 pfac(i) =
max(zero, pfac(i))
201 ENDDO
202 ENDIF
203 ENDIF
204
205
206
207
208
209
210 DO i=1,nel
211 pla0(i) = pla(i)
212 plam(i) = (one - fisokin) * pla(i)
213 ENDDO
214
215
216
217 DO i=1,nel
218
219 ipos = 0
220 yld(i) = finter2( tf, iad1(i), ipos, ilen1(i),
221 $ plam(i),dydx1(i) )
222
223 yld(i) =
max(yld(i),em20)
224 ENDDO
225
226 DO 100 i = 1, nel
227
228
229 sxx = signxx(i)
230 syy = signyy(i)
231 szz = signzz(i)
232 sxy = signxy(i)
233 syz = signyz(i)
234 szx = signzx(i)
235
236 IF(i_bilin/=1 )THEN
237
238 xsi = zero
239
240
241 pla(i
242
243
244 vm =three*(half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
245 $ +signxy(i)**2+signyz(i)**2+signzx(i)**2)
246 vm =sqrt(vm)
247
248
249
250
251
252 IF( vm > yld(i) )then
253
254
255
256 y_scal = yfac(i,1)
257
258
259 p_scal = pfac(i) * fail(i)
260
261
262 total_scal = y_scal * p_scal
263
264
265
266
267
268
269
270
271 ipos = 0
272
273
274 yld_m_prev = finter2( tf, iad1(i), ipos, ilen1(i),
275 $ plam(i),dydx1(i) )
276
277
278 h_m_prev = dydx1(i)
279
280
281 yld_m_prev = yld_m_prev * total_scal
282 h_m_prev = h_m_prev * total_scal
283 yld_m_prev =
max(yld_m_prev,em20)
284
285 if( .not.( h_m_prev >= zero ).or.
286 $ .not.( yld_m_prev > zero ) )then
287 write(istdo,1000)plam(i),h_m_prev,yld_m_prev
288 write(iout,1000)plam(i),h_m_prev,yld_m_prev
290 endif
291
292
293
294
295
296 ipos = 0
297
298
299
300 yld_prev = finter2( tf, iad1(i), ipos,
301 $ pla0(i),dydx1(i) )
302
303
304 yld_prev = yld_prev * total_scal
305 yld_prev =
max(yld_prev,em20)
306
307
308 if( .not.( dydx1(i) >= zero ).or.
309 $ .not.( yld_prev > zero ) )then
310 write(istdo,1000)pla0(i),dydx1(i),yld_prev
311 write(iout,1000)pla0(i),dydx1(i),yld_prev
313 endif
314
315
316
317
318
319
320
321 DO 80 iter = 1,niter
322
323
324
325
326
327
328
329 ipos = 0
330
331
332
333 yld_curr = finter2( tf,iad1(i), ipos, ilen1(i),
334 $ pla(i),dydx1(i) )
335
336
337 h(i) = dydx1(i)
338
339
340 yld_curr = yld_curr * total_scal
341 h(i) = h(i) * total_scal
342 yld_curr =
max(yld_curr,em20)
343
344
345 if( .not.( h(i) >= zero ).or.
346 $ .not.( yld_curr > zero ) )then
347 write(istdo,1000)pla(i),h(i),yld_curr
348 write(iout,1000)pla(i),h(i),yld_curr
350 endif
351
352
353
354
355
356
357 IF(fisokin == zero)then
358 rhs = vm - g3(i) * xsi - yld_curr
359 lhs = g3(i) + h(i)
360 ELSEIF(fisokin == one)then
361 rhs = vm - g3(i)*xsi + yld_prev - yld_curr - yld_m_prev
362 lhs = g3(i) + h(i)
363 ELSE
364 rhs = vm - g3(i)*xsi + yld_prev - yld_curr - yld_m_prev
365 lhs = g3(i) + h(i)
366 ENDIF
367
368
369
370
371
372 dxsi = rhs/lhs
373
374 xsi = xsi + dxsi
375
376 pla(i) = pla(i) + dxsi
377 pla(i) =
max(zero,pla(i))
378
379
380
381 IF( abs(dxsi)<em10 ) GO TO 90
382
383 80 CONTINUE
384
385
386
387
388 90 CONTINUE
389
390
392
393
394
395
396
397
398
399 IF(fisokin == zero)then
400 alpha_radial = one - ( g3(i)/
max(vm,em20) )*dpla
401
402 signxx(i) = signxx(i) * alpha_radial
403 signyy(i) = signyy(i) * alpha_radial
404 signzz(i) = signzz(i) * alpha_radial
405 signxy(i) = signxy(i) * alpha_radial
406 signyz(i) = signyz(i) * alpha_radial
407 signzx(i) = signzx(i) * alpha_radial
408
409 ELSEIF(fisokin > zero.and.fisokin<=one)then
410
411
412 plam(i) = (one - fisokin)*pla(i)
413
414
415
416
417
418
419
420
421
422 ipos = 0
423
424
425 yld_m = finter2( tf, iad1(i), ipos, ilen1(i),
426 $ plam(i),dydx1(i) )
427
428
429 h_m = dydx1(i)
430
431 yld_m = yld_m * total_scal
432 h_m = h_m * total_scal
433 yld_m =
max(yld_m,em20)
434
435
436 if( .not.( h_m >= zero ).or.
437 $ .not.( yld_m > zero ) )then
438 write(istdo,1000)plam(i),h_m,yld_m
439 write(iout,1000)plam(i),h_m,yld_m
441 endif
442
443
444
445
446
447
448
449 alpha_radial = one - ( g3(i)/
max(vm,em20) )*dpla
450 $ - (yld_curr - yld_prev -yld_m + yld_m_prev )/
max(vm,em20)
451
452 signxx(i) = signxx(i) * alpha_radial
453 signyy(i) = signyy(i) * alpha_radial
454 signzz(i) = signzz(i) * alpha_radial
455 signxy(i) = signxy(i) * alpha_radial
456 signyz(i) = signyz(i) * alpha_radial
457 signzx(i) = signzx(i) * alpha_radial
458
459
460 hep = ( yld_curr - yld_prev
461 $ -yld_m + yld_m_prev )/
max(vm,em20)
462
463 sigbxx(i) = sigbxx(i) + sxx *hep
464 sigbyy(i) = sigbyy(i) + syy *hep
465 sigbzz(i) = sigbzz(i) + szz *hep
466 sigbxy(i) = sigbxy(i) + sxy *hep
467 sigbyz(i) = sigbyz(i) + syz *hep
468 sigbzx(i) = sigbzx(i) + szx *hep
469
470
471 signxx(i) = signxx(i) + sigbxx(i)
472 signyy(i) = signyy(i) + sigbyy(i)
473 signzz(i) = signzz(i) + sigbzz(i)
474 signxy(i) = signxy(i) + sigbxy(i)
475 signyz(i) = signyz(i) + sigbyz(i)
476 signzx(i) = signzx(i) + sigbzx(i)
477
478 ENDIF
479
480
481
482 IF(fisokin == zero)then
483 yld(i) = yld_curr
484 ELSEIF(fisokin == one)then
485
486 ELSE
487 yld(i) = yld_m
488 ENDIF
489
490 dpla1(i) = dpla
491
492
493
494
495
496 ELSE
497
498
499
500 IF(fisokin > zero)then
501 signxx(i) = signxx(i) + sigbxx(i)
502 signyy(i) = signyy(i) + sigbyy(i)
503 signzz(i) = signzz(i) + sigbzz(i)
504 signxy(i) = signxy(i) + sigbxy(i)
505 signyz(i) = signyz(i) + sigbyz(i)
506 signzx(i) = signzx(i) + sigbzx(i)
507 ENDIF
508
509 ENDIF
510
511
512 ELSE
513
514
515
516
517
518
519 vm =three*(half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
520 $ +signxy(i)**2+signyz(i)**2+signzx(i)**2)
521
522 IF(vm > yld(i)*yld(i))THEN
523 vm =sqrt(vm)
524 r = yld(i)/
max(vm,em20)
525
526 dpla=(one - r)*vm/
max(g3(i)+h(i),em20)
527
528
529 alpha_radial = one - g3(i)*( (one - r)/( g3(i) + h(i) ) )
530
531 signxx(i) = signxx(i) * alpha_radial
532 signyy(i) = signyy(i) * alpha_radial
533 signzz(i) = signzz(i) * alpha_radial
534 signxy(i) = signxy(i) * alpha_radial
535 signyz(i) = signyz(i) * alpha_radial
536 signzx(i) = signzx(i) * alpha_radial
537
538 IF(fisokin > zero)then
539
540
541 signxx(i) = signxx(i) + sigbxx(i)
542 signyy(i) = signyy(i) + sigbyy(i)
543 signzz(i) = signzz(i) + sigbzz(i)
544 signxy(i) = signxy(i) + sigbxy(i)
545 signyz(i) = signyz(i) + sigbyz(i)
546 signzx(i) = signzx(i) + sigbzx(i)
547
548
549 hep = fisokin*h(i)* dpla/vm
550
551 sigbxx(i) = sigbxx(i) + sxx *hep
552 sigbyy(i) = sigbyy(i) + syy *hep
553 sigbzz(i) = sigbzz(i) + szz *hep
554 sigbxy(i) = sigbxy(i) + sxy *hep
555 sigbyz(i) = sigbyz(i) + syz *hep
556 sigbzx(i) = sigbzx(i) + szx *hep
557
558 ENDIF
559
560
561 yld(i) =
max(yld(i)+(one - fisokin)*dpla*h(i),zero)
562
563
564 pla(i) = pla(i) + dpla
565
566 dpla1(i) = dpla
567
568 ELSE
569
570 IF(fisokin > zero)then
571
572 signxx(i) = signxx(i) + sigbxx(i)
573 signyy(i) = signyy(i) + sigbyy(i)
574 signzz(i) = signzz(i) + sigbzz(i)
575 signxy(i) = signxy(i) + sigbxy(i)
576 signyz(i) = signyz(i) + sigbyz(i)
577 signzx(i) = signzx(i) + sigbzx(i)
578 ENDIF
579
580 ENDIF
581
582
583 ENDIF
584
585 100 CONTINUE
586
587 1000 FORMAT(3x,'Hardening parameters in law36 is not positive'/,
588 $ 2x,'Eps_plast =',e11.4,2x,'H =',e11.4,
589 $ 2x,'Sy0 =',e11.4)
590
591 RETURN
subroutine imp_stop(istop)
subroutine vinter2(tf, iad, ipos, ilen, nel0, x, dydx, y)
subroutine vinter2dp(tf, iad, ipos, ilen, nel0, x, dydx, y)