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,,JTHE,NUMTABL,ITABLE(NUMTABL),NVARTMP
59 INTEGER ,DIMENSION(NEL), INTENT(IN) :: NGL
61 . time,timestep
62 INTEGER, INTENT(INOUT) :: VARTMP(NEL,NVARTMP)
63 my_real,
DIMENSION(NUPARAM),
INTENT(IN) ::
64 . uparam
65 my_real,
DIMENSION(NEL),
INTENT(IN) ::
66 . rho,rho0,
67 . depsxx,depsyy,depszz,depsxy,depsyz,depszx,
68 . sigoxx,sigoyy,sigozz,sigoxy,sigoyz,sigozx
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,6),
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 ,K,II,NINDX,INDEX(NEL),NITER,ITER,ITAB,ISMOOTH,(NEL,2)
86
88 . young1,young2,young3,nu12,nu21,g12,a11,a12,a21,a22,c1,
89 . xi1,xi2,k1,k2,k3,k4,k5,k6,g1c,d1,d2,sigy1,
90 . cini1,s1,sigy2,cini2,s2,sigy1c,cini1c,s1c,
91 . sigy2c,cini2c,s2c,sigyt,cinit,st,g23,g31
93 . normsig,
94 . h,dpdt,dlam,ddep,depxx,depyy
96 . normxx,normyy,normxy,normzz,normyz,normzx,
97 . normpxx,normpyy,normpxy,normpzz,normpyz,normpzx,
98 . dphi_dlam,dphi,dfdsig2,dphi_dpla,dpxx,dpyy,dpxy,
99 . dphi_dr1,dphi_dr2,dphi_dr1c,dphi_dr2c,dphi_drt
101 . xscale1,yscale1,xscale1c,yscale1c,xscale2,yscale2,xscale2c,yscale2c,
102 . xscalet,yscalet,xvec(nel,2),asrate
103
105 . alpha1,
alpha2,alpha3,alpha4,alpha5,r1,r2,r1c,r2c,rt,
106 . dsigxx,dsigyy,dsigxy,dsigyz,dsigzx,hardp,phi,eta1,eta2,
107 . dr1_dp,dr2_dp,dr1c_dp,dr2c_dp,drt_dp,hardr,dpla2,dpla3,dpla4,
108 . dpla5,dpla6,beta1,beta2
109
110
111
112
113
114
115 young1 = uparam(1)
116 young2 = uparam(2)
117 young3 = uparam(3)
118 nu12 = uparam(4)
119 nu21 = uparam(5)
120 a11 = uparam(6)
121 a12 = uparam(7)
122 a21 = uparam(8)
123 a22 = uparam(9)
124 g12 = uparam(
125 g23 = uparam(11) ! shear modulus in 23
126 g31 = uparam(12)
127 itab = int(uparam(14))
128 xi1 = uparam(15)
129 xi2 = uparam(16)
130 k1 = uparam(17)
131 k2 = uparam(18)
132 k3 = uparam(19)
133 k4 = uparam(20)
134 k5 = uparam(21)
135 k6 = uparam(22)
136 g1c = uparam(23)
137 IF (itab == 0) THEN
138 d1 = uparam
139 d2 = uparam(25)
140 sigy1 = uparam(26)
141 cini1 = uparam(27)
142 s1 = uparam(28)
143 sigy2 = uparam(29)
144 cini2 = uparam(30)
145 s2 = uparam(31)
146 sigy1c = uparam(32)
147 cini1c = uparam(33)
148 s1c = uparam(34)
149 sigy2c = uparam(35)
150 cini2c = uparam(36)
151 s2c = uparam(37) ! yield stress slope in compression in direction 2 (cd)
152 sigyt = uparam(38)
153 cinit = uparam(39)
154 st = uparam(40)
155 ELSE
156 xscale1 = uparam(24)
157 yscale1 = uparam(25)
158 xscale2 = uparam(26)
159 yscale2 = uparam(27)
160 xscale1c= uparam(28)
161 yscale1c= uparam(29)
162 xscale2c= uparam(30)
163 yscale2c= uparam(31)
164 xscalet = uparam(32)
165 yscalet = uparam(33)
166 asrate = uparam(34)
167 asrate = (two*pi*asrate*timestep)/(two*pi*asrate*timestep + one)
168 ismooth = int(uparam(35))
169 ENDIF
170
171
172 DO i=1,nel
173
174 IF (off(i) < 0.1) off(i) = zero
175 IF (off(i) < one) off(i) = off(i)*four_over_5
176
177 dpla(i) = zero
178 dpla2(i) = zero
179 dpla3(i) = zero
180 dpla4(i) = zero
181 dpla5(i) = zero
182 dpla6(i) = zero
183 et(i) = one ! initialization of hourglass coefficient
184 hardp(i) = zero
185 ENDDO
186
187
188 IF (itab > 0) THEN
189
190 xvec(1:nel,1) = pla(1:nel,2)
191 xvec(1:nel,2) = epsd(1:nel,2) * xscale1
192 ipos(1:nel,1) = vartmp(1:nel,1)
193 ipos(1:nel,2) = 1
195 r1(1:nel) = r1(1:nel) * yscale1
196 dr1_dp(1:nel) = dr1_dp(1:nel) * yscale1
197 vartmp(1:nel,1) = ipos(1:nel,1)
198 ! -> compressive yield stress in direction 1 (md)
199 xvec(1:nel,1) = pla(1:nel,3
200 xvec(1:nel,2) = epsd(1:nel,3) * xscale2
201 ipos(1:nel,1) = vartmp(1:nel,2)
202 ipos(1:nel,2) = 1
204 r2(1:nel) = r2(1:nel) * yscale2
205 dr2_dp(1:nel) = dr2_dp(1:nel) * yscale2
206 vartmp(1:nel,2) = ipos(1:nel,1)
207
208 xvec(1:nel,1) = pla(1:nel,4)
209 xvec(1:nel,2) = epsd(1:nel,4) * xscale1c
210 ipos(1:nel,1) = vartmp(1:nel,3)
211 ipos(1:nel,2) = 1
213 r1c(1:nel) = r1c(1:nel) * yscale1c
214 dr1c_dp(1:nel)= dr1c_dp(1:nel) * yscale1c
215 vartmp(1:nel,3) = ipos(1:nel,1)
216
217 xvec(1:nel,1) = pla(1:nel,5)
218 xvec(1:nel,2) = epsd(1:nel,5) * xscale2c
219 ipos(1:nel,1) = vartmp(1:nel,4)
220 ipos(1:nel,2) = 1
222 r2c(1:nel) = r2c(1:nel) * yscale2c
223 dr2c_dp(1:nel)= dr2c_dp(1:nel) * yscale2c
224 vartmp(1:nel,4) = ipos(1:nel,1)
225
226 xvec(1:nel,1) = pla(1:nel,6)
227 xvec(1:nel,2) = epsd(1:nel,6) * xscalet
228 ipos(1:nel,1) = vartmp(1:nel,5)
229 ipos(1:nel,2) = 1
231 rt(1:nel) = rt(1:nel) * yscalet
232 drt_dp(1:nel) = drt_dp(1:nel) * yscalet
233 vartmp(1:nel,5) = ipos(1:nel,1)
234 ENDIF
235
236
237
238
239 DO i=1,nel
240
241
242 signxx(i) = sigoxx(i) + a11*depsxx(i) + a12*depsyy(i)
243 signyy(i) = sigoyy(i) + a21*depsxx(i) + a22*depsyy(i)
244 signzz(i) = sigozz(i) + young3*depszz(i)
245 signxy(i) = sigoxy(i) + depsxy(i)*g12
246 signyz(i) = sigoyz(i)
247 signzx(i) = sigozx(i) + depszx(i)*g31
248
249
250 alpha1(i) = zero
252 alpha3(i) = zero
253 alpha4(i) = zero
254 alpha5(i) = zero
255 IF ((signxx(i) - xi1*signyy(i)) > zero) alpha1(i) = one
256 IF ((signyy(i) - xi2*signxx(i)) > zero)
alpha2(i) = one
257 IF (-signxx(i) > zero) alpha3(i) = one
258 IF (-signyy(i) > zero) alpha4(i) = one
259 IF (abs(signxy(i)) > zero) alpha5(i) = one
260
261 IF (itab == 0) THEN
262
263
264
265 r1(i) = sigy1 + (one/(cini1 + s1*pla(i,2)))*pla(i,2)
266
267 r2(i) = sigy2 + (one/(cini2 + s2*pla(i,3)))*pla(i,3)
268
269
270 r1c(i) = sigy1c + (one/(cini1c + s1c*pla(i,4)))*pla(i,4)
271 r1c(i) = r1c(i)/sqrt(one - g1c)
272
273 r2c(i) = sigy2c + (one/(cini2c + s2c*pla(i,5)))*pla(i,5)
274
275 eta1(i) = one + alpha3(i)*alpha4(i)*d1
276 eta2(i) = one + alpha3(i)*alpha4(i)*d2
277 rt(i) = eta1(i)*sigyt + eta2(i)*(one/(cinit + st*pla(i,
278 ENDIF
279
280
281 normsig = sqrt(signxx(i)*signxx(i) + signyy(i)*signyy(i) + two*signxy
282 normsig =
max(normsig,em20)
283 beta1(i) = zero
284 beta2(i) = zero
285 IF ((signxx(i)/normsig > em01).OR.(signyy(i)/normsig > em01)) beta1(i) = one
286 IF ((signxx(i)/normsig
287 IF (((abs(signxx(i))/normsig)<em01).AND.((abs(signyy(iTHEN
288 beta1(i) = one
289 beta2(i) = one
290 ENDIF
291
292
293 phi(i) = alpha1(i)*((signxx(i) - xi1*signyy(i))/r1(i))**2 +
294 .
alpha2(i)*((signyy(i) - xi2*signxx(i))/r2(i))**2 +
295 . alpha3(i)*((- signxx(i))/r1c(i))**2 +
296 . alpha4(i)*((- signyy(i))/r2c(i))**2 +
297 . alpha5(i)*(abs(signxy(i))/rt(i))**2 - one
298 ENDDO
299
300
301
302
303
304
305 nindx = 0
306 DO i=1,nel
307 IF (phi(i) > zero .AND. off(i) == one) THEN
308 nindx=nindx+1
309 index(nindx)=i
310 ENDIF
311 ENDDO
312
313
314
315
316
317
318 niter = 3
319
320
321 DO iter = 1, niter
322#include "vectorize.inc"
323
324 DO ii=1,nindx
325 i = index(ii)
326
327
328
329
330
331
332
333
334
335
336
337
338
339 normxx = two*(alpha1(i)/(r1(i)**2))*(signxx(i)-xi1*signyy(i))
340 . - two*(
alpha2(i)*xi2/(r2(i)**2))*(signyy(i)-xi2*signxx(i))
341 . + two*(alpha3(i)/(r1c(i)**2))*signxx(i)
342 normyy = -two*(alpha1(i)*xi1/(r1(i)**2))*(signxx(i)-xi1*signyy(i))
343 . + two*(
alpha2(i)/(r2(i)**2))*(signyy(i)-xi2*signxx(i))
344 . + two*(alpha4(i)/(r2c(i)**2))*signyy(i)
345 normxy = (alpha5(i)/(rt(i)**2))*abs(signxy(i))*sign(one
346
347
348
349
350 normpxx = beta1(i)*(two*signxx(i
351 normpyy = beta1(i)*(two*k1*signyy(i) + k2*signxx(i)) + beta2(i)*(two*k3*signyy(i) + k4*signxx(i))
352 normpxy = (beta1(i)*k5 + beta2(i)*k6)*signxy(i)
353
354 normsig = sqrt(normpxx*normpxx + normpyy*normpyy + two*normpxy*normpxy)
355 normsig =
max(normsig
356
357 normpxx = normpxx/normsig
358 normpyy = normpyy/normsig
359 normpxy = normpxy/normsig
360
361
362
363
364
365
366 dfdsig2 = normxx * (a11*normpxx + a12*normpyy)
367 . + normyy * (a21*normpxx + a22*normpyy)
368 . + two*normxy * two*normpxy * g12
369
370
371
372
373
374 dphi_dr1 = -two*alpha1(i)*(((signxx(i)-xi1*signyy(i))**2)/(r1(i)**3))
375 dphi_dr2 = -two*
alpha2(i)*(((signyy(i)-xi2*signxx(i))**2)/(r2(i)**3))
376 dphi_dr1c = -two*alpha3(i)*(signxx(i)**2)/(r1c(i)**3)
377 dphi_dr2c = -two*alpha4(i)*(signyy(i)**2)/(r2c(i)**3)
378 dphi_drt = -two*alpha5(i)*(signxy(i)**2)/(rt(i)**3)
379
380 IF (itab == 0) THEN
381 dr1_dp(i) = (one/(cini1 + s1*pla(i,2))) * (one - (s1*pla(i,2) /(cini1 + s1*pla(i,2))))
382 dr2_dp(i) = (one/(cini2 + s2*pla(i,3))) * (one - (s2*pla(i,3) /(cini2 + s2*pla(i,3
383 dr1c_dp(i) = (one/(cini1c + s1c*pla(i,4))) * (one - (s1c*pla(i,4)/(cini1c + s1c*pla(i,4))))
384 dr1c_dp(i) = dr1c_dp(i)/sqrt(one - g1c)
385 dr2c_dp(i) = (one/(cini2c + s2c*pla(i,5))) * (one - (s2c*pla(i,5)/(cini2c + s2c*pla(i,5))))
386 drt_dp(i) = eta2(i)*(one/(cinit + st*pla(i,6))) * (one - (st*pla
387 ENDIF
388
389 hardp(i) = sqrt(alpha1(i)*dr1_dp(i)**2 +
alpha2(i)*dr2_dp(i)**2 + alpha3(i)*dr1c_dp(i)**2
390 . + alpha4(i)*dr2c_dp(i)**2 + two*alpha5(i)*drt_dp(i)**2)
391 dphi_dpla = dphi_dr1*dr1_dp(i)*alpha1(i) + dphi_dr2*dr2_dp
392 . dphi_dr1c*dr1c_dp(i)*alpha3(i) + dphi_dr2c*dr2c_dp(i)*alpha4(i) +
393 . dphi_drt*drt_dp(i)*alpha5(i)
394
395
396 dphi_dlam = -dfdsig2 + dphi_dpla
397 dphi_dlam = sign(
max(abs(dphi_dlam),em20) ,dphi_dlam)
398
399
400
401
402
403 dlam = -phi(i) / dphi_dlam
404
405
406 dpxx = dlam * normpxx
407 dpyy = dlam * normpyy
408 dpxy = two * dlam * normpxy
409
410
411 signxx(i) = signxx(i) - (a11*dpxx + a12*dpyy)
412 signyy(i) = signyy(i) - (a21*dpxx + a22*dpyy)
413 signxy(i) = signxy(i) - g12*dpxy
414
415
416 ddep = dlam
417 dpla(i) =
max(zero, dpla(i) + ddep)
418 dpla2(i) =
max(zero, dpla2(i) + alpha1(i)*ddep)
419 dpla3(i) =
max(zero, dpla3(i) +
alpha2(i)*ddep)
420 dpla4(i) =
max(zero, dpla4(i) + alpha3(i)*ddep)
421 dpla5(i) =
max(zero, dpla5(i) + alpha4(i)*ddep)
422 dpla6(i) =
max(zero, dpla6(i) + alpha5(i)*ddep)
423 pla(i,1) = pla(i,1) + ddep
424 pla(i,2) = pla(i,2) + alpha1(i)*ddep
425 pla(i,3) = pla(i,3) +
alpha2(i)*ddep
426 pla(i,4) = pla(i,4) + alpha3(i)*ddep
427 pla(i,5) = pla(i,5) + alpha4(i)*ddep
428 pla(i,6) = pla(i,6) + alpha5(i)*ddep
429
430
431 alpha1(i) = zero
433 alpha3(i) = zero
434 alpha4(i) = zero
435 alpha5(i) = zero
436 IF ((signxx(i) - xi1*signyy(i)) > zero) alpha1(i) = one
437 IF ((signyy(i) - xi2*signxx(i)) > zero)
alpha2(i) = one
438 IF (-signxx(i) > zero) alpha3(i) = one
439 IF (-signyy(i) > zero) alpha4(i) = one
440 IF (abs(signxy(i)) > zero) alpha5(i) = one
441
442
443 IF (itab == 0) THEN
444
445
446 r1(i) = sigy1 + (one/(cini1 + s1*pla(i,2)))*pla(i
447
448 r2(i) = sigy2 + (one/(cini2 + s2*pla(i,3)))*pla(i,3)
449
450
451 r1c(i) = sigy1c + (one/(cini1c + s1c*pla(i,4)))*pla(i,4)
452 r1c(i) = r1c(i)/sqrt(one - g1c)
453
454 r2c(i
455
456 eta1(i) = one + alpha3(i)*alpha4(i)*d1
457 eta2(i) = one + alpha3(i)*alpha4(i)*d2
458 rt(i) = eta1(i)*sigyt + eta2(i)*(one/(cinit + st*pla(i,6)))*pla(i,6)
459
460
461 phi(i) = alpha1(i)*((signxx(i) - xi1*signyy(i))/r1(i))**2 +
462 .
alpha2(i)*((signyy(i) - xi2*signxx(i))/r2(i))**2 +
463 . alpha3(i)*((- signxx(i))/r1c(i))**2 +
464 . alpha4(i)*((- signyy(i))/r2c(i))**2 +
465 . alpha5(i)*(abs(signxy(i))/rt(i))**2 - one
466 ENDIF
467
468 ENDDO
469
470
471
472 IF (itab > 0) THEN
473 IF (nindx > 0) THEN
474
475 xvec(1:nel,1) = pla(1:nel,2)
476 xvec(1:nel,2) = epsd(1:nel,2) * xscale1
477 ipos(1:nel,1) = vartmp(1:nel,1)
478 ipos(1:nel,2) = 1
480 r1(1:nel) = r1(1:nel) * yscale1
481 dr1_dp(1:nel) = dr1_dp(1:nel) * yscale1
482 vartmp(1:nel,1) = ipos(1:nel,1)
483
484 xvec(1:nel,1) = pla(1:nel,3)
485 xvec(1:nel,2) = epsd(1:nel,3) * xscale2
486 ipos(1:nel,1) = vartmp(1:nel,2)
487 ipos(1:nel,2) = 1
489 r2(1:nel) = r2(1:nel) * yscale2
490 dr2_dp(1:nel) = dr2_dp(1:nel) * yscale2
491 vartmp(1:nel,2) = ipos(1:nel,1)
492
493 xvec(1:nel,1) = pla(1:nel,4)
494 xvec(1:nel,2) = epsd(1:nel,4) * xscale1c
495 ipos(1:nel,1) = vartmp(1:nel,3)
496 ipos(1:nel,2) = 1
498 r1c(1:nel) = r1c(1:nel) * yscale1c
499 dr1c_dp(1:nel)= dr1c_dp(1:nel) * yscale1c
500 vartmp(1:nel,3) = ipos(1:nel,1)
501
502 xvec(1:nel,1) = pla(1:nel,5)
503 xvec(1:nel,2) = epsd(1:nel,5) * xscale2c
504 ipos(1:nel,1) = vartmp(1:nel,4)
505 ipos(1:nel,2) = 1
507 r2c(1:nel) = r2c(1:nel) * yscale2c
508 dr2c_dp(1:nel)= dr2c_dp(1:nel) * yscale2c
509 vartmp(1:nel,4) = ipos(1:nel,1)
510
511 xvec(1:nel,1) = pla(1:nel,6)
512 xvec(1:nel,2) = epsd(1:nel,6) * xscalet
513 ipos(1:nel,1) = vartmp(1:nel,5)
514 ipos(1:nel,2) = 1
516 rt(1:nel) = rt(1:nel) * yscalet
517 drt_dp(1:nel) = drt_dp(1:nel) * yscalet
518 vartmp(1:nel,5) = ipos(1:nel,1)
519
520 DO i = 1, nel
521 phi(i) = alpha1(i)*((signxx(i) - xi1*signyy(i))/r1(i))**2 +
522 .
alpha2(i)*((signyy(i) - xi2*signxx(i))/r2(i))**2 +
523 . alpha3(i)*((- signxx(i))/r1c(i))**2 +
524 . alpha4(i)*((- signyy
525 . alpha5(i)*(abs(signxy(i))/rt(i))**2 - one
526 ENDDO
527 ENDIF
528 ENDIF
529 ENDDO
530
531
532
533
534
535
536 DO i=1,nel
537
538 IF (itab == 0) THEN
539 epsd(i,1) = dpla(i) /
max(em20,timestep)
540 epsd(i,2) = dpla2(i) /
max(em20,timestep)
541 epsd(i,
542 epsd(i,4) = dpla4(i) /
max(em20,timestep)
543 epsd(i,5) = dpla5(i) /
max(em20,timestep)
544 epsd(i,6) = dpla6(i) /
max(em20,timestep)
545 ELSE
546 dpdt = dpla(i)/
max(em20,timestep)
547 epsd(i,1) = asrate * dpdt + (one - asrate) * epsd(i,1)
548 dpdt = dpla2(i)/
max(em20,timestep)
549 epsd(i,2) = asrate * dpdt + (one - asrate) * epsd(i,2)
550 dpdt = dpla3(i)/
max(em20,timestep)
551 epsd(i,3) = asrate * dpdt + (one - asrate) * epsd(i,3)
552 dpdt = dpla4(i)/
max(em20,timestep)
553 epsd(i,4) = asrate * dpdt + (one - asrate) * epsd(i,4)
554 dpdt = dpla5(i)/
max(em20,timestep)
555 epsd(i,5) = asrate * dpdt + (one - asrate) * epsd(i,5)
556 dpdt = dpla6(i)/
max(em20,timestep)
557 epsd(i,6) = asrate * dpdt + (one - asrate) * epsd(i,6)
558 ENDIF
559
560 et(i) = hardp(i) / (hardp(i) +
max(young1,young2))
561
562 soundsp(i) = sqrt(
max(a11,a12,a21,a22,young3,g12,g23,g31)/ rho(i))
563
564 sigy(i) = sqrt(r1(i)**2 + r2(i)**2 + r1c(i)**2 +
565 . r2c(i)**2 + two*rt(i)**2)
566 ENDDO
567