42
43
44
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "com04_c.inc"
55
56
57
58 INTEGER NEL,NUPARAM,NUVAR,JTHE,NUMTABL,ITABLE(NUMTABL),NVARTMP
59 INTEGER ,DIMENSION(NEL), INTENT(IN) :: NGL
61 . time,timestep
62 INTEGER :: VARTMP(NEL,NVARTMP)
63 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
64 . uparam
65 my_real,
DIMENSION(NEL),
INTENT(IN) ::
66 . rho,rho0,epszz,
67 . depsxx,depsyy,depszz,depsxy,depsyz
68 . sigoxx,sigoyy,sigozz,sigoxy,sigoyz
69
70 my_real ,
DIMENSION(NEL),
INTENT(OUT) ::
71 . soundsp,sigy,et,
72 . signxx,signyy,signzz,signxy,signyz,signzx
73
74 my_real ,
DIMENSION(NEL),
INTENT(INOUT) ::
75 . dpla,off
76 my_real ,
DIMENSION(NEL,4),
INTENT(INOUT) ::
77 . pla,epsd
78 my_real ,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) ::
79 . uvar
80
81 TYPE(TTABLE), DIMENSION(NTABLE) :: TABLE
82 !=======================================================================
83
84
85 INTEGER I,K,II,NINDX,INDEX(NEL),NINDX2,INDEX2(NEL),NINDX3,INDEX3(NEL),
86 . NITER,,ITAB,ISMOOTH,IPOS(,2)
87c
89 . young1,young2,young3,nu12,nu21,
90 . a11,a12,a21,a22,
91 . g12,g23,g31,deuxk,e3c,cc,c1,
92 . nu1p,nu2p,nu4p,nu5p,s01,a01,b01,c01,
93 . s02,a02,b02,c02,s03,a03,b03,c03,
94 . s04,a04,b04,c04,s05,a05,b05,c05,
95 . asig,bsig,csig,tau0,atau,btau
96 . bulk,nu13,nu31,nu23,nu32
98 . normsig,h,dpdt,dlam,ddep,depxx,depyy
100 . normxx,normyy,normxy,normpxx,normpyy,normpxy,
101 . dphi_dlam,dphi,dfdsig2,dphi_dpla,dpxx,dpyy,dpxy
102 . dphi_dsigy1,dphi_dsigy2,dphi_dsigy3,dphi_dsigy4,
103 . dphi_dsigy5
105 . normzz,dtheta_dlam,dtheta,dtheta_dpla
106 . dtheta_dsigyo
108 . normyz,normzx,dpsi_dlam,dpsi,dpsi_dpla,
109 . dpyz,dpzx,dpsi_dsigys
111 . xscale1,yscale1,xscale2,yscale2,xscale3,yscale3,xscale4,yscale4,
112 . xscale5,yscale5,xscalec,yscalec,xscales,yscales,xvec(nel,2),asrate
113
115 . n1,n2,n4,n5
116
118 . khi1,khi2,khi3,khi4,khi5,khi6,sigy1,sigy2,sigy3,sigy4,sigy5,dpla2,dpla3,
119 . dpla4,sigys,sigyo,dsigxx,dsigyy,dsigxy,dsigyz,dsigzx,hardp,phi,phi0,psi,psi0,
120 . theta,theta0,dsigzz,eezz,gam1,gam2,gam3,gam4,gam5,gam6,dsigy1_dp,dsigy2_dp,
121 . dsigy3_dp,dsigy4_dp,dsigy5_dp,dsigyo_dp,dsigys_dp,hardr
122
123
124
125
126
127
128 young1 = uparam(1)
129 young2 = uparam(2)
130 young3 = uparam(3) ! young modulus in direction 3 (out of plane)
131 nu12 = uparam(4)
132 nu21 = uparam(5)
133 a11 = uparam(6)
134 a12 = uparam(7)
135 a21 = uparam(8)
136 a22 = uparam(9)
137 g12 = uparam(10)
138 g23 = uparam(11)
139 g31
140 itab = int(uparam(14))
141 deuxk = uparam(15)
142 e3c = uparam(16)
143 cc = uparam(17)
144 nu1p = uparam(18)
145 nu2p = uparam(19)
146 nu4p = uparam(20)
147 nu5p = uparam(21)
148 IF (itab == 0) THEN
149 s01 = uparam(22)
150 a01 = uparam(23)
151 b01 = uparam(24)
152 c01 = uparam(25)
153 s02 = uparam(26)
154 a02 = uparam(27)
155 b02 = uparam(28)
156 c02 = uparam(29)
157 s03 = uparam(30)
158 a03 = uparam(31)
159 b03 = uparam(32)
160 c03 = uparam(33)
161 s04 = uparam(34)
162 a04 = uparam(35)
163 b04 = uparam(36)
164 c04 = uparam(37)
165 s05 = uparam(38)
166 a05 = uparam(39)
167 b05 = uparam(40)
168 c05 = uparam(41)
169 asig = uparam(42)
170
171 csig = uparam(44)
172 tau0 = uparam(45)
173 atau = uparam(46)
174 btau = uparam(47)
175 ELSE
176 xscale1 = uparam(22)
177 yscale1 = uparam(23)
178 xscale2 = uparam(24)
179 yscale2 = uparam(25)
180 xscale3 = uparam(26)
181 yscale3 = uparam(27)
182 xscale4 = uparam(28)
183 yscale4 = uparam(29)
184 xscale5 = uparam(30)
185 yscale5 = uparam(31)
186 xscalec = uparam(32)
187 yscalec = uparam(33)
188 xscales = uparam(34)
189 yscales = uparam(35)
190 asrate = uparam(36)
191 asrate = (two*pi*asrate*timestep)/(two*pi*asrate*timestep + one)
192 ismooth = int(uparam(37))
193 ENDIF
194
195
196 n1(1) = one/(sqrt(one+nu1p**2))
197 n1(2) = -nu1p/(sqrt(one+nu1p**2))
198 n2(1) = -nu2p/(sqrt(one+nu2p**2))
199 n2(2) = one/(sqrt(one+nu2p**2))
200 n3 = one
201 n4(1) = -one/(sqrt(one+nu4p**2))
202 n4(2) = nu4p/(sqrt
203 n5(1) = nu5p/(sqrt(one+nu5p**2))
204 n5(2) = -one/(sqrt(one+nu5p**2))
205 n6 = -one
206
207
208 DO i=1,nel
209
210 IF (off(i) < em01) off(i) = zero
211 IF (off(i) < one) off(i) = off(i)*four_over_5
212
213 eezz(i) = epszz(i) + pla(i,3)
214
215 dpla(i) = zero
216 dpla2(i) = zero
217 dpla3(i) = zero
218 dpla4(i) = zero
219 et(i) = one
220 hardp(i) = zero
221 ENDDO
222
223
224 IF (itab > 0) THEN
225
226 xvec(1:nel,1) = pla(1:nel,2)
227 xvec(1:nel,2) = epsd(1:nel,2) * xscale1
228
229 ipos(1:nel,1) = vartmp(1:nel,1)
230 ipos(1:nel,2) = 1
232 sigy1(1:nel) = sigy1(1:nel) * yscale1
233 dsigy1_dp(1:nel)= dsigy1_dp(1:nel) * yscale1
234 vartmp(1:nel,1) = ipos(1:nel,1)
235
236 xvec(1:nel,2) = epsd(1:nel,2) * xscale2
237 ipos(1:nel,1) = vartmp(1:nel,2)
238 ipos(1:nel,2) = 1
240 sigy2(1:nel) = sigy2(1:nel) * yscale2
241 dsigy2_dp(1:nel)= dsigy2_dp(1:nel) * yscale2
242 vartmp(1:nel,2) = ipos(1:nel,1)
243
244 xvec(1:nel,2) = epsd(1:nel,2) * xscale3
245 ipos(1:nel,1) = vartmp(1:nel,3)
246 ipos(1:nel,2) = 1
248 sigy3(1:nel) = sigy3(1:nel) * yscale3
249 dsigy3_dp(1:nel)= dsigy3_dp(1:nel) * yscale3
250 vartmp(1:nel,3) = ipos(1:nel,1)
251
252 xvec(1:nel,2) = epsd(1:nel,2) * xscale4
253 ipos(1:nel,1) = vartmp(1:nel,4)
254 ipos(1:nel,2) = 1
256 sigy4(1:nel) = sigy4(1:nel) * yscale4
257 dsigy4_dp(1:nel)= dsigy4_dp(1:nel) * yscale4
258 vartmp(1:nel,4) = ipos(1:nel,1)
259
260 xvec(1:nel,2) = epsd(1:nel,2) * xscale5
261 ipos(1:nel,1) = vartmp(1:nel,5)
262 ipos(1:nel,2) = 1
264 sigy5(1:nel) = sigy5(1:nel) * yscale5
265 dsigy5_dp(1:nel)= dsigy5_dp(1:nel) * yscale5
266 vartmp(1:nel,5) = ipos(1:nel,1)
267
268 xvec(1:nel,1) = pla(1:nel,3)
269 xvec(1:nel,2) = epsd(1:nel,3) * xscalec
270
271 ipos(1:nel,1) = vartmp(1:nel,6)
272 ipos(1:nel,2) = 1
274 sigyo(1:nel) = sigyo(1:nel) * yscalec
275 dsigyo_dp(1:nel)= dsigyo_dp(1:nel) * yscalec
276 vartmp(1:nel,6) = ipos(1:nel,1)
277
278 xvec(1:nel,1) = pla(1:nel,4)
279 xvec(1:nel,2) = epsd(1:nel,4) * xscales
280
281 ipos(1:nel,1) = vartmp(1:nel,7)
282 ipos(1:nel,2) = 1
284 sigys(1:nel) = sigys(1:nel) * yscales
285 dsigys_dp(1:nel)= dsigys_dp(1:nel) * yscales
286 vartmp(1:nel,7) = ipos(1:nel,1)
287 ELSE
288 DO i = 1,nel
289
290 sigy1(i) = s01 + a01*tanh(b01*pla(i,2)) + c01*pla(i,2)
291
292 sigy2(i) = s02 + a02*tanh(b02*pla(i,2)) + c02*pla(i,2)
293
294 sigy3(i) = s03 + a03*tanh(b03*pla(i,2)) + c03*pla(i,2)
295
296 sigy4(i) = s04 + a04*tanh(b04*pla(i
297
298 sigy5(i) = s05 + a05*tanh(b05*pla(i,2)) + c05*pla(i,2)
299
300 sigyo(i) = asig + bsig*exp(csig*pla(i,3))
301
302 sigys(i) = tau0 + (atau -
min(zero,sigozz
303 ENDDO
304 ENDIF
305
306
307
308
309 DO i=1,nel
310
311
312
313 signxx(i) = sigoxx(i) + a11*depsxx(i) + a12*depsyy(i)
314 signyy(i) = sigoyy(i) + a21*depsxx(i) + a22*depsyy(i)
315 signxy(i) = sigoxy(i) + depsxy(i)*g12
316
317 IF (eezz(i) >= zero) THEN
318 signzz(i) = sigozz(i) + young3*depszz(i)
319 ELSE
320 signzz(i) = sigozz(i) + e3c*cc*exp(-cc*eezz(i))*depszz(i)
321 ENDIF
322
323 signyz(i) = sigoyz(i) + depsyz(i)*g23
324 signzx(i) = sigozx(i) + depszx(i)*g31
325
326
327 khi1(i) = zero
328 khi2(i) = zero
329 khi3(i) = zero
330 khi4(i) = zero
331 khi5(i) = zero
332 khi6(i) = zero
333 IF ((n1(1)*signxx(i)+n1(2)*signyy(i)) > zero) khi1(i) = one
334 IF ((n2(1)*signxx(i)+n2(2)*signyy(i)) > zero) khi2(i) = one
335 IF (n3*signxy(i) > zero) khi3(i) = one
336 IF ((n4(1)*signxx(i)+n4(2)*signyy(i)) > zero) khi4(i) = one
337 IF ((n5(1)*signxx(i)+n5(2)*signyy(i)) > zero) khi5(i) = one
338 IF (n6*signxy(i) > zero) khi6(i) = one
339
340
341 gam1(i) = (n1(1)*signxx(i)+n1(2)*signyy(i))/sigy1(i)
342 gam2(i) = (n2(1)*signxx(i)+n2(2)*signyy(i))/sigy2(i)
343 gam3(i) = n3*signxy(i)/sigy3(i)
344 gam4(i) = (n4(1)*signxx(i)+n4(2)*signyy(i))/sigy4(i)
345 gam5(i) = (n5(1)*signxx(i)+n5(2)*signyy(i))/sigy5(i)
346 gam6(i) = n6*signxy(i)/sigy3(i)
347 phi(i) = khi1(i)*gam1(i)**deuxk + khi2(i)*gam2(i)**deuxk +
348 . khi3(i)*gam3(i)**deuxk + khi4(i)*gam4(i)**deuxk +
349 . khi5(i)*gam5(i)**deuxk + khi6(i)*gam6(i)**deuxk - one
350
351
352 theta(i) = - signzz(i) - sigyo(i)
353
354
355 psi(i) = (sqrt(signyz(i)**2 + signzx(i)**2)/(sigys(i))) - one
356
357 ENDDO
358
359
360
361
362
363
364 nindx = 0
365 nindx2 = 0
366 nindx3 = 0
367 DO i=1,nel
368
369 IF (phi(i) > zero .AND. off(i) == one) THEN
370 nindx=nindx+1
371 index(nindx)=i
372 ENDIF
373
374 IF (theta(i) > zero .AND. off(i) == one) THEN
375 nindx2=nindx2+1
376 index2(nindx2)=i
377 ENDIF
378
379 IF (psi(i) > zero .AND. off(i) == one) THEN
380 nindx3=nindx3+1
381 index3(nindx3)=i
382 ENDIF
383 ENDDO
384
385
386
387
388
389
390 niter = 3
391
392
393 DO iter = 1, niter
394#include "vectorize.inc"
395
396 DO ii=1,nindx
397 i = index(ii)
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412 normxx = deuxk*khi1(i)*(gam1(i)**(deuxk-1))*(n1(1)/sigy1(i)) +
413 . deuxk*khi2(i)*(gam2
414 . deuxk*khi4(i)*(gam4(i)**(deuxk-1))*(n4(1)/sigy4(i)) +
415 . deuxk*khi5(i)*(gam5
416 normyy = deuxk*khi1(i)*(gam1(i)**(deuxk-1))*
417 . deuxk*khi2(i)*(gam2(i)**(deuxk-1))*(n2(2)/sigy2(i)) +
418 . deuxk*khi4(i)*(gam4(i)**(deuxk-1))*(n4(2)/sigy4(i)) +
419 . deuxk*khi5(i)*(gam5(i)**(deuxk-1))*(n5(2)/sigy5(i))
420 normxy = deuxk/two*khi3
421 . deuxk/two*khi6
422
423
424
425 normsig = sqrt(normxx**2 + normyy**2 + two*normxy**2)
426 normsig =
max(normsig,em20)
427 normpxx = normxx/normsig
428 normpyy = normyy/normsig
429 normpxy = normxy/normsig
430
431
432
433
434
435
436 dfdsig2 = normxx * (a11*normpxx + a12*normpyy)
437 . + normyy * (a21*normpxx + a22*normpyy)
438 . + two*normxy * two*normpxy * g12
439
440
441
442
443
444 dphi_dsigy1 = deuxk*khi1(i)*(gam1(i)**(deuxk-1))*(-(n1(1)*signxx(i)+n1(2)*signyy(i))/(sigy1(i)**2))
445 dphi_dsigy2 = deuxk*khi2(i)*(gam2(i)**(deuxk-1))*(-(n2(1)*signxx(i)+n2(2)*signyy(i))/(sigy2(i)**2))
446 dphi_dsigy3 = deuxk*khi3(i)*(gam3(i)**(deuxk-1))*(-n3*signxy(i)/(sigy3(i)**2)) +
447 . deuxk*khi6(i)*(gam6(i)**(deuxk-1))*(-n6*signxy(i)/(sigy3(i)**2))
448 dphi_dsigy4 = deuxk*khi4(i)*(gam4(i)**(deuxk-1))*(-(n4(1)*signxx(i)+n4(2)*signyy(i))/(sigy4(i)**2))
449 dphi_dsigy5 = deuxk*khi5(i)*(gam5(i)**(deuxk-1))*(-(n5(1)*signxx
450
451 IF (itab == 0) THEN
452 dsigy1_dp(i) = a01*b01
453 dsigy2_dp(i) = a02*b02*(one-(tanh(b02*pla(i,2)))**2) + c02
454 dsigy3_dp(i) = a03*b03*(one-(tanh(b03*pla(i,2)))**2) + c03
455 dsigy4_dp(i) = a04*b04*(one-(tanh(b04*pla(i,2)))**2) + c04
456 dsigy5_dp(i) = a05*b05*(one-(tanh(b05*pla(i
457 ENDIF
458
459 hardp(i) = sqrt(khi1(i)*dsigy1_dp(i)**2 + khi2(i)*dsigy2_dp(i)**2 +
460 . khi3(i)*two*dsigy3_dp(i)**2 + khi4(i)*dsigy4_dp(i)**2 +
461 . khi5(i)*dsigy5_dp(i)**2)
462 dphi_dpla = dphi_dsigy1*dsigy1_dp(i) + dphi_dsigy2*dsigy2_dp(i) +
463 . dphi_dsigy3
464 . dphi_dsigy5*dsigy5_dp(i)
465
466
467 dphi_dlam = -dfdsig2 + dphi_dpla
468 dphi_dlam = sign(
max(abs(dphi_dlam),em20) ,dphi_dlam)
469
470
471
472
473
474 dlam = -phi(i) / dphi_dlam
475
476
477 dpxx = dlam * normpxx
478 dpyy = dlam * normpyy
479 dpxy = two * dlam * normpxy
480
481
482 signxx(i) = signxx(i) - (a11*dpxx + a12*dpyy)
483 signyy(i) = signyy(i) - (a21*dpxx + a22*dpyy)
484 signxy(i) = signxy(i) - g12*dpxy
485
486
487 ddep = dlam
488 dpla2(i) =
max(zero, dpla2(i) + ddep)
489 pla(i,2) = pla(i,2) + ddep
490
491
492 IF (itab == 0) THEN
493
494 sigy1(i) = s01 + a01*tanh(b01*pla(i,2)) + c01*pla(i,2)
495
496 sigy2(i) = s02 + a02*tanh(b02*pla(i,2)) + c02*pla(i,2)
497
498 sigy3(i) = s03 + a03*tanh(b03*pla(i,2)) + c03*pla(i,2)
499
500 sigy4(i) = s04 + a04*tanh(b04*pla(i,2)) + c04*pla(i,2)
501
502 sigy5(i) = s05 + a05*tanh(b05*pla(i,2)) + c05*pla(i,2)
503 ENDIF
504
505
506 khi1(i) = zero
507 khi2(i) = zero
508 khi3(i) = zero
509 khi4(i) = zero
510 khi5(i) = zero
511 khi6(i) = zero
512 IF ((n1(1)*signxx(i)+n1(2)*signyy
513 IF ((n2(1)*signxx(i)+n2(2)*signyy(i)) > zero) khi2(i) = one
514 IF (n3*signxy(i) > zero) khi3(i) = one
515 IF ((n4(1)*signxx(i)+n4(2)*signyy(i)) > zero) khi4(i) = one
516 IF ((n5(1)*signxx(i)+n5(2)*signyy(i)) > zero) khi5(i) = one
517 IF (n6*signxy(i) > zero) khi6(i) = one
518
519
520 IF (itab == 0) THEN
521 gam1(i) = (n1(1)*signxx(i)+n1(2)*signyy(i))/sigy1(i)
522 gam2(i) = (n2(1)*signxx(i)+n2(2)*signyy(i))/sigy2(i)
523 gam3(i) = n3*signxy(i)/sigy3(i)
524 gam4(i) = (n4(1)*signxx(i)+n4(2)*signyy(i))/sigy4(i)
525 gam5(i) = (n5(1)*signxx(i)+n5(2)*signyy(i))/sigy5(i)
526 gam6(i) = n6*signxy(i)/sigy3(i)
527 phi(i) = khi1(i)*gam1(i)**deuxk + khi2(i)*gam2(i)**deuxk +
528 . khi3(i)*gam3(i)**deuxk + khi4(i)*gam4(i)**deuxk +
529 . khi5(i)*gam5(i)**deuxk + khi6(i)*gam6(i)**deuxk - one
530 ENDIF
531
532 ENDDO
533
534
535
536 IF (itab > 0) THEN
537 IF (nindx > 0) THEN
538
539 xvec(1:nel,1) = pla(1:nel,2)
540 xvec(1:nel,2) = epsd(1:nel,2) * xscale1
541
542 ipos(1:nel,1) = vartmp(1:nel,1)
543 ipos(1:nel,2) = 1
545 sigy1(1:nel) = sigy1(1:nel) * yscale1
546 dsigy1_dp(1:nel)= dsigy1_dp(1:nel) * yscale1
547 vartmp(1:nel,1) = ipos(1:nel,1)
548
549 xvec(1:nel,2) = epsd(1:nel,2) * xscale2
550 ipos(1:nel,1) = vartmp(1:nel,2)
551 ipos(1:nel,2) = 1
553 sigy2(1:nel) = sigy2(1:nel) * yscale2
554 dsigy2_dp(1:nel)= dsigy2_dp(1:nel) * yscale2
555 vartmp(1:nel,2) = ipos(1:nel,1)
556
557 xvec(1:nel,2) = epsd(1:nel,2) * xscale3
558 ipos(1:nel,1) = vartmp(1:nel,3)
559 ipos(1:nel,2) = 1
561 sigy3(1:nel) = sigy3(1:nel) * yscale3
562 dsigy3_dp(1:nel)= dsigy3_dp(1:nel) * yscale3
563 vartmp(1:nel,3) = ipos(1:nel,1)
564
565 xvec(1:nel,2) = epsd(1:nel,2) * xscale4
566 ipos(1:nel,1) = vartmp(1:nel,4)
567 ipos(1:nel,2) = 1
569 sigy4(1:nel) = sigy4(1:nel) * yscale4
570 dsigy4_dp(1:nel)= dsigy4_dp(1:nel) * yscale4
571 vartmp(1:nel,4) = ipos(1:nel,1)
572
573 xvec(1:nel,2) = epsd(1:nel,2) * xscale5
574 ipos(1:nel,1) = vartmp(1:nel,5)
575 ipos(1:nel,2) = 1
577 sigy5(1:nel) = sigy5(1:nel) * yscale5
578 dsigy5_dp(1:nel)= dsigy5_dp(1:nel) * yscale5
579 vartmp(1:nel,5) = ipos(1:nel,1)
580
581#include "vectorize.inc"
582 DO ii=1,nindx
583 i = index(ii)
584 gam1(i) = (n1(1)*signxx(i)+n1(2)*signyy(i))/sigy1(i)
585 gam2(i) = (n2(1)*signxx(i)+n2(2)*signyy(i))/sigy2(i)
586 gam3(i) = n3*signxy(i)/sigy3(i)
587 gam4(i) = (n4(1)*signxx(i)+n4(2)*signyy(i))/sigy4(i)
588 gam5(i) = (n5(1)*signxx(i)+n5(2)*signyy(i))/sigy5(i)
589 gam6(i) = n6*signxy(i)/sigy3(i)
590 phi(i) = khi1(i)*gam1(i)**deuxk + khi2(i)*gam2(i)**deuxk +
591 . khi3(i)*gam3(i)**deuxk + khi4(i)*gam4(i)**deuxk +
592 . khi5(i)*gam5(i)**deuxk + khi6(i)
593 ENDDO
594 ENDIF
595 ENDIF
596 ENDDO
597
598
599
600
601
602
603
604
605
606
607 DO iter = 1, niter
608#include "vectorize.inc"
609
610 DO ii=1,nindx2
611 i = index2(ii)
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626 normzz = -one
627
628
629
630
631
632
633 IF (eezz(i) >= zero) THEN
634 dfdsig2 = normzz * young3 * normzz
635 ELSE
636 dfdsig2 = normzz * e3c*cc*exp(-cc*eezz(i)) * normzz
637 ENDIF
638
639
640
641
642
643 dtheta_dsigyo = -one
644
645 IF (itab == 0) dsigyo_dp(i) = csig*bsig*exp(csig*pla(i,3))
646
647 dtheta_dpla = dtheta_dsigyo*dsigyo_dp
648
649
650 dtheta_dlam = -dfdsig2 + dtheta_dpla
651 dtheta_dlam = sign(
max(abs(dtheta_dlam),em20) ,dtheta_dlam)
652
653
654
655
656
657 dlam = -theta(i) / dtheta_dlam
658
659
660 IF (eezz(i)>=zero) THEN
661 signzz(i) = signzz(i) - young3*dlam*normzz
662 ELSE
663 signzz(i) = signzz(i) - e3c*cc*exp(-cc*eezz(i))*dlam*normzz
664 ENDIF
665
666
667 ddep = dlam
668 dpla3(i) =
max(zero, dpla3(i) + ddep)
669 pla(i,3) = pla(i,3) + ddep
670 eezz(i) = epszz(i) + pla(i,3)
671
672
673 IF (itab == 0) THEN
674
675 sigyo(i) = asig + bsig*exp(csig*pla(i,3))
676
677 theta(i) = - signzz(i) - sigyo(i)
678 ENDIF
679
680 ENDDO
681
682
683
684 IF (itab > 0) THEN
685 IF (nindx2 > 0) THEN
686
687 xvec(1:nel,1) = pla(1:nel,3)
688 xvec(1:nel,2) = epsd(1:nel,3) * xscalec
689
690 ipos(1:nel,1) = vartmp(1:nel,6)
691 ipos(1:nel,2) = 1
693 sigyo(1:nel) = sigyo(1:nel) * yscalec
694 dsigyo_dp(1:nel)= dsigyo_dp(1:nel) * yscalec
695 vartmp(1:nel,6) = ipos(1:nel,1)
696
697#include "vectorize.inc"
698 DO ii=1,nindx2
699 i = index2(ii)
700 theta(i) = - signzz(i) - sigyo(i)
701 ENDDO
702 ENDIF
703 ENDIF
704 ENDDO
705
706
707
708
709
710
711
712
713
714
715 niter = 3
716
717
718 DO iter = 1, niter
719#include "vectorize.inc"
720
721 DO ii=1,nindx3
722 i = index3(ii)
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737 normyz = signyz(i)/
max((sqrt(signyz(i)**2 + signzx(i)**2)*sigys(i)),em20)
738 normzx = signzx(i)/
max((sqrt(signyz(i)**2 + signzx(i)**2)*sigys(i)),em20)
739
740
741
742
743
744
745 dfdsig2 = two*normyz * g23 * two*normyz +
746 . two*normzx * g31 * two*normzx
747
748
749
750
751
752 dpsi_dsigys = -sqrt(signyz(i)**2 + signzx(i)**2)/(sigys(i)**2)
753 ! ii) derivatives of yield stresses with respect to hardening parameters
754 IF (itab == 0) dsigys_dp(i) = atau -
min(zero,sigozz(i))*btau
755
756
757
758
759 dpsi_dlam = -dfdsig2 + dpsi_dpla
760 dpsi_dlam = sign(
max(abs(dpsi_dlam),em20),dpsi_dlam)
761
762
763
764
765
766 dlam = -psi(i) / dpsi_dlam
767
768
769 dpyz = two*dlam * normyz
770 dpzx = two*dlam * normzx
771
772
773 signyz(i) = signyz(i) - g23*dpyz
774 signzx(i) = signzx(i) - g31*dpzx
775
776
777 ddep = dlam
778 dpla4(i) =
max(zero, dpla4(i) + ddep)
779 pla(i,4) = pla(i,4) + ddep
780
781
782 IF (itab == 0) THEN
783
784 sigys(i) = tau0 + (atau -
min(zero,sigozz(i))*btau)*pla(i,4)
785
786 psi(i) = (sqrt(signyz(i)**2 + signzx(i)**2)/sigys
787 ENDIF
788
789 ENDDO
790
791
792
793 IF (itab > 0) THEN
794 IF (nindx3 > 0) THEN
795
796 xvec(1:nel,1) = pla(1:nel,4)
797 xvec(1:nel,2) = epsd(1:nel,4) * xscales
798
799 ipos(1:nel,1) = vartmp(1:nel,7)
800 ipos(1:nel,2) = 1
802 sigys(1:nel) = sigys(1:nel) * yscales
803 dsigys_dp(1:nel)= dsigys_dp(1:nel) * yscales
804 vartmp(1:nel,7) = ipos(1:nel,1)
805
806#include "vectorize.inc"
807 DO ii=1,nindx3
808 i = index3(ii)
809 psi(i) = (sqrt(signyz(i)**2 + signzx(i)**2)/sigys(i
810 ENDDO
811 ENDIF
812 ENDIF
813 ENDDO
814
815
816
817
818
819
820 DO i=1,nel
821
822 pla(i,1) = sqrt(pla(i,2)**2 + pla(i,3)**2 + pla(i,4)**2)
823 dpla(i) = (pla(i,2)/(
max(sqrt(pla(i,2)**2 + pla(i,3)**2 + pla(i,4)**2),em20)))*dpla2(i) +
824 . (pla(i,3)/(
max(sqrt(pla(i,2)**2 + pla(i,3)**2 + pla(i,4)**2),em20)))*dpla3(i) +
825 . (pla(i,4)/(
max(sqrt(pla(i,2)**2 + pla(i,3)**2 + pla(i,4)**2),em20)))*dpla4(i)
826
827 IF (itab == 0) THEN
828 epsd(i,1) = dpla(i) /
max(em20,timestep
829 epsd(i,2) = dpla2(i) /
max(em20,timestep)
830 epsd(i,3) = dpla3(i) /
max(em20,timestep)
831 epsd(i,4) = dpla4(i) /
max(em20,timestep)
832 ELSE
833 dpdt = dpla(i)/
max(em20,timestep)
834 epsd(i,1) = asrate * dpdt + (one - asrate) * epsd(i,1)
835 dpdt = dpla2(i)/
max(em20,timestep)
836 epsd(i,2) = asrate * dpdt + (one - asrate) * epsd(i,2)
837 dpdt = dpla3(i)/
max(em20,timestep)
838 epsd(i,3) = asrate * dpdt + (one - asrate) * epsd(i,3)
839 dpdt = dpla4(i)/
max(em20,timestep)
840 epsd(i,4) = asrate * dpdt + (one - asrate) * epsd(i,4)
841 ENDIF
842
843 IF (eezz(i) >= zero) THEN
844 IF (dpla(i) > zero) THEN
845 et(i) = hardp(i) / (hardp(i) +
max(young1,young2,young3))
846 ELSE
847 et(i) = one
848 ENDIF
849 soundsp(i) = sqrt(
max(a11,a12,a21,a22,young3,g12,g23,g31)/ rho(i))
850 ELSE
851 IF (dpla(i) > zero) THEN
852 et(i) = hardp(i) / (hardp(i) +
max(young1,young2,e3c*cc*exp(-cc*eezz(i))))
853 ELSE
854 et(i) = one
855 ENDIF
856 soundsp(i) = sqrt(
max(a11,a12,a21,a22,e3c*cc*exp(-cc*eezz(i)),g12,g23,g31)/ rho(i))
857 ENDIF
858
859 sigy(i) = sqrt(khi1(i)*sigy1(i)**2 + khi2(i)*sigy2(i)**2 + khi4(i)*sigy4(i)**2 +
860 . khi5(i)*sigy5(i)**2 + two*khi3(i)*sigy3(i)**2 + sigyo(i
861 . + two*sigys(i)**2)
862 ENDDO
863