36
37
38
39#include "implicit_f.inc"
40
41
42
43#include "param_c.inc"
44#include "com01_c.inc"
45
46
47
48 INTEGER :: NEL
49 INTEGER :: NUPARAM
50 INTEGER :: NIPARAM
51 INTEGER :: NUVAR
52 INTEGER :: ISMSTR
53 INTEGER :: IPARAM(NIPARAM)
56 my_real ,
DIMENSION(NEL) :: thkn,thklyl,rho0,gs,
57 . depsxx,depsyy,depsxy,depsyz,depszx,epsxx,epsyy,epsxy
58 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: sigoyz,sigozx
59
60
61
62 my_real ,
DIMENSION(NEL) :: signxx,signyy,signxy,signyz,signzx,soundsp
63
64
65
66 my_real :: uvar(nel,nuvar), off(nel)
67
68
69
70 INTEGER :: I,J,II,NPRONY,NORDER,ITER,JNV
71 my_real :: sum,fac,fscal,tenscut,sumdwdl,sumddwddl,partp
72 my_real :: e11,e22,e12,emax,gmax,gvmax,nu,rbulk,a11,pui11,pui22,alma1,alma2,alma3
73 my_real ,
DIMENSION(3) :: ddwddl,dwdl
75 my_real ,
DIMENSION(100) :: gi,taux,h1,h2,h12,h10,h20,h120
76 my_real ,
DIMENSION(NEL,100) :: h30,h31
77 my_real ,
DIMENSION(NEL) :: rvt,c30,c31,dc3ev3,cd10,cd20,cd120
78 my_real ,
DIMENSION(NEL) :: cp1,cp2,cd1,cd2,cd12,ea,invrv,invv3,dezz,rv,trav,rootv
79 my_real ,
DIMENSION(NEL) :: s2,cs,kt3,epszz,rho
80 my_real ,
DIMENSION(NEL,10) :: evma1,evma2,evma3,c11,c22,c12
81 my_real ,
DIMENSION(NEL,3) :: t,sv,sigprv,evv,ev,evm
82 my_real ,
DIMENSION(NEL,3,2) :: eigv(nel,3,2)
83
84
85
86 norder = iparam(1)
87 nprony = iparam(2)
88
89 DO i=1,norder
90 mu(i) = uparam(i)
91 al(i) = uparam(i+10)
92 ENDDO
93 rbulk = uparam(21)
94 nu = uparam(22)
95 tenscut= uparam(23)
96 fscal = uparam(24)
97
98 gmax = zero
99 gvmax = zero
100 DO i=1,nprony
101 gi(i) = uparam(24 + i)
102 taux(i) = uparam(24 + nprony + i)
103 gvmax = gvmax + gi(i)
104 ENDDO
105 DO i=1,norder
106 gmax = gmax + mu(i)*al(i)
107 ENDDO
108 gmax = gmax + gvmax
109
110
111 IF (time == zero .AND. isigi == 0) THEN
112 DO i=1,nel
113 DO j=1,nuvar
114 uvar(i,j) = zero
115 ENDDO
116 uvar(i,3) = one
117 ENDDO
118 ELSEIF (time == zero ) THEN
119 DO i=1,nel
120 uvar(i,3) = one
121 ENDDO
122 ENDIF
123
124 DO i=1,nel
125 trav(i) = epsxx(i)+epsyy(i)
126 rootv(i) = sqrt((epsxx(i)-epsyy(i))*(epsxx(i)-epsyy(i
127 . + epsxy(i)*epsxy(i))
128 evv(i,1) = half*(trav(i)+rootv(i))
129 evv(i,2) = half*(trav(i)-rootv(i))
130 evv(i,3) = zero
131 ea(i) = zero
132 ENDDO
133
134 IF (ismstr == 10) THEN
135 DO i=1,nel
136 IF (
min(evv(i,1),evv(i,2)) <= -one)
THEN
137 evv(i,1) = zero
138 evv(i,2) = zero
139 off(i) = four_over_5
140 END IF
141 ENDDO
142 END IF
143
144 DO i=1,nel
145 IF (abs(evv(i,2)-evv(i,1)) < em10) THEN
146 eigv(i,1,1)=one
147 eigv(i,2,1)=one
148 eigv(i,3,1)=zero
149 eigv(i,1,2)=zero
150 eigv(i,2,2)=zero
151 eigv(i,3,2)=zero
152 ELSE
153 invrv(i) = one / rootv(i)
154 eigv(i,1,1) = (epsxx(i)-evv(i,2)) * invrv(i)
155 eigv(i,2,1) = (epsyy(i)-evv(i,2)) * invrv(i)
156 eigv(i,3,1) = (half*epsxy(i)) * invrv(i)
157 eigv(i,1,2) = (evv(i,1)-epsxx(i)) * invrv(i)
158 eigv(i,2,2) = (evv(i,1)-epsyy(i)) * invrv(i)
159 eigv(i,3,2) =-(half*epsxy(i)) * invrv(i)
160 ENDIF
161 ENDDO
162
163 IF (ismstr == 1 .OR. ismstr == 3 .OR. ismstr == 11) THEN
164 DO i=1,nel
165 ev(i,1)=evv(i,1)+ one
166 ev(i,2)=evv(i,2)+ one
167 ev(i,3)=one/ev(i,1)/ev(i,2)
168 ENDDO
169 ELSEIF(ismstr == 10) THEN
170 DO i=1,nel
171 ev(i,1)=sqrt(evv(i,1)+ one)
172 ev(i,2)=sqrt(evv(i,2)+ one)
173 ev(i,3)=one/ev(i,1)/ev(i,2)
174 ENDDO
175 ELSE
176 DO i=1,nel
177 ev(i,1)=exp(evv(i,1))
178 ev(i,2)=exp(evv(i,2))
179 ev(i,3)=one/ev(i,1)/ev(i,2)
180 ENDDO
181 ENDIF
182 IF (nprony > 0) ev(1:nel,3) = uvar(1:nel,3)
183 DO i=1,nel
184 IF (off(i)==zero.OR.off(i)==four_over_5) ev(i,1:3)=one
185 ENDDO
186
187
188
189 IF (nprony > 0) THEN
190
191
192
193 DO iter = 1,5
194
195 DO i=1,nel
196 rv(i) = ev(i,1)*ev(i,2)*ev(i,3)
197
198
199
200
201 IF (rv(i)/= zero) THEN
202 rvt(i) = exp( (-third)* log(rv(i)) )
203 invrv(i) = one / rv(i)
204 ELSE
205 rvt(i) = zero
206 invrv(i) = zero
207 ENDIF
208 evm(i,1) = ev(i,1)*rvt(i)
209 evm(i,2) = ev(i,2)*rvt(i)
210 evm(i,3) = ev(i,3)*rvt(i)
211 ENDDO
212
213
214 DO j = 1,norder
215 DO i=1,nel
216
217
218
219
220 IF(evm(i,1)==zero) THEN
221 evma1(i,j) = zero
222 ELSE
223 IF (al(j) == zero) THEN
224 evma1(i,j) = mu(j)
225 ELSE
226 evma1(i,j) = mu(j) * exp(al(j)* log(evm(i,1)) )
227 ENDIF
228 ENDIF
229
230 IF(evm(i,2)==zero) THEN
231 evma2(i,j) = zero
232 ELSE
233 IF (al(j) == zero) THEN
234 evma2(i,j) = mu(j)
235 ELSE
236 evma2(i,j) = mu(j) * exp(al(j)* log(evm(i,2)) )
237 ENDIF
238 ENDIF
239
240 IF(evm(i,3)==zero) THEN
241 evma3(i,j) = zero
242 ELSE
243 IF (al(j) == zero) THEN
244 evma3(i,j) = mu(j)
245 ELSE
246 evma3(i,j) = mu(j) * exp(al(j)* log(evm(i,3)) )
247 ENDIF
248 ENDIF
249 ENDDO
250 ENDDO
251
252 DO i=1,nel
253 dwdl(1) = zero
254 dwdl(2) = zero
255 dwdl(3) = zero
256 DO j=1,norder
257 dwdl(1) = dwdl(1) + evma1(i,j)
258 dwdl(2) = dwdl(2) + evma2(i,j)
259 dwdl(3) = dwdl(3) + evma3(i,j)
260 END DO
261 sumdwdl = (dwdl(1) + dwdl(2) + dwdl(3)) * third
262 partp = rbulk*(rv(i)- one)
263
264
265 IF (ev(i,3) == zero) THEN
266 invv3(i) = zero
267 ELSE
268 invv3(i) = one / ev(i,3)
269 ENDIF
270 t(i,1) = (dwdl(1) - sumdwdl) *invrv(i) + partp
271 t(i,2) = (dwdl(2) - sumdwdl) *invrv(i) + partp
272 t(i,3) = (dwdl(3) - sumdwdl) *invrv(i) + partp
273
274 kt3(i) = -third*(dwdl(1) + dwdl(2)) + two_third*(dwdl(
275 kt3(i) = -ev(i,1)*ev(i,2)*kt3(i)*invrv(i)*invrv
276
277 alma1 = zero
278 alma2 = zero
279 alma3 = zero
280 DO j=1,norder
281 alma1 = alma1 + al(j)*evma1(i,j)
282 alma2 = alma2 + al(j)*evma2(i,j)
283 alma3 = alma3 + al(j)*evma3(i,j)
284 END DO
285 kt3(i) = kt3(i) + (one_over_9*(alma1 + alma2 + four*(alma3))) *
286
287 c30(i) = uvar(i,5)
288
289 sum = third*(evm(i,1)**2 + evm(i,2)**2 + evm(i,3)**2)
290 c31(i) = evm(i,3)**2 - sum
291
292 dc3ev3(i) = four_over_3*rvt(i)*evm(i,3)-two_third*invv3(i)*
293 . (two_third*evm(i,3)**2 - third*evm(i,1)**2 - third*evm(i,2)**2)
294 ENDDO
295
296 jnv = 8
297 DO ii= 1,nprony
298 fac= -timestep/taux(ii)
299 h30(1:nel,ii) = uvar(1:nel,jnv + ii)
300 h31(1:nel,ii) = exp(fac)*h30(1:nel,ii)+ exp(half*fac)*(c31(1:nel) - c30(1:nel))
301 ENDDO
302
303
304
305 DO ii = 1,nprony
306 fac= -timestep/taux(ii)
307 t(1:nel,3) = t(1:nel,3) + gi(ii)*h31(1:nel,ii)*invrv(1:nel)
308 kt3(1:nel) = kt3(1:nel) - gi(ii)*h31(1:nel,ii)*invv3(1:nel)*invrv(1:nel)
309 . + dc3ev3(1:nel)*gi(ii)*exp(half*fac)*invrv(1:nel)
310 ENDDO
311 DO i=1,nel
312 IF (off(i)==zero.OR.off(i)==four_over_5) cycle
313 IF (abs(kt3(i))>em20) ev(i,3) = ev(i,3) - t(i,3)/kt3(i)
314 ENDDO
315 ENDDO
316
317
318 jnv = 8
319 DO ii= 1,nprony
320 uvar(1:nel,jnv + ii) = h31(1:nel,ii)
321 ENDDO
322 DO i=1,nel
323 uvar(i,5) = c31(i)
324
325 rv(i) = ev(i,1)*ev(i,2)*ev(i,3)
326
327
328
329
330 IF (rv(i) /= zero) THEN
331 rvt(i) = exp( (-third)* log(rv(i)) )
332 ELSE
333 rvt(i) = zero
334 ENDIF
335 evm(i,1) = ev(i,1)*rvt(i)
336 evm(i,2) = ev(i,2)*rvt(i)
337 evm(i,3) = ev(i,3)*rvt(i)
338
339 cd10(i) = uvar(i,6)
340 cd20(i) = uvar(i,7)
341 cd120(i) = uvar(i,8)
342
343 sum = third*(evm(i,1)**2 + evm(i,2)**2 + evm(i,3)**2)
344 cp1(i) = evm(i,1)**2 - sum
345 cp2(i) = evm(i,2)**2 - sum
346 cd1(i) = eigv(i,1,1)*cp1(i) + eigv(i,1,2)*cp2(i)
347 cd2(i) = eigv(i,2,1)*cp1(i) + eigv(i,2,2)*cp2(i)
348 cd12(i) = eigv(i,3,1)*cp1(i) + eigv(i,3,2)*cp2(i)
349 uvar(i,6) = cd1(i)
350 uvar(i,7) = cd2(i)
351 uvar(i,8) = cd12(i)
352 sv(i,1) = zero
353 sv(i,2) = zero
354 sv(i,3) = zero
355 ENDDO
356 jnv = 8 + nprony
357 DO ii= 1,nprony
358 DO i=1,nel
359 fac= -timestep/taux(ii)
360 h10(ii) = uvar(i,jnv + ii )
361 h20(ii) = uvar(i,jnv + nprony + ii )
362 h120(ii) = uvar(i,jnv + 2*nprony + ii )
363 h1(ii) = exp(fac)*h10(ii)+ exp(half*fac)*(cd1(i) - cd10(i))
364 h2(ii) = exp(fac)*h20(ii)+ exp(half*fac)*(cd2(i) - cd20(i))
365 h12(ii) = exp(fac)*h120(ii)+ exp(half*fac)*(cd12(i) - cd120(i))
366 uvar(i,jnv + ii )= h1(ii)
367 uvar(i,jnv + nprony + ii )= h2(ii)
368 uvar(i,jnv + 2*nprony + ii )= h12(ii)
369
370 sv(i,1) = sv(i,1) + gi(ii)*h1(ii)
371 sv(i,2) = sv(i,2) + gi(ii)*h2(ii)
372 sv(i,3) = sv(i,3) + gi(ii)*h12(ii)
373 ENDDO
374 ENDDO
375
376! -----------------------
377 ELSE
378
379 DO j = 1,norder
380
381
382
383
384
385
386
387
388
389 DO i=1,nel
390 IF(ev(i,1)==zero) THEN
391 evma1(i,j) = zero
392 ELSE
393 IF (al(j) == zero) THEN
394 evma1(i,j) = mu(j)
395 pui11 = one
396 ELSE
397 pui11 = exp(al(j)* log(ev(i,1)) )
398 evma1(i,j) = mu(j) * pui11
399 ENDIF
400 ENDIF
401
402 IF(ev(i,2)==zero) THEN
403 evma2(i,j) = zero
404 ELSE
405 IF (al(j) == zero) THEN
406 evma2(i,j) = mu(j)
407 pui22 = one
408 ELSE
409 pui22 = exp(al(j)* log(ev(i,2)) )
410 evma2(i,j) = mu(j) * pui22
411 ENDIF
412 ENDIF
413
414 IF((ev(i,1)*ev(i,2))==zero) THEN
415 evma3(i,j) = zero
416 ELSE
417 IF (al(j) == zero) THEN
418 evma3(i,j) = mu(j)
419 ELSE
420 evma3(i,j) = mu(j)/(pui11*pui22)
421 ENDIF
422 ENDIF
423 ENDDO
424 ENDDO
425
426 DO i=1,nel
427 dwdl(1) = zero
428 dwdl(2) = zero
429 dwdl(3) = zero
430 DO j=1,norder
431 dwdl(1) = dwdl(1) + evma1(i,j)
432 dwdl(2) = dwdl(2) + evma2(i,j)
433 dwdl(3) = dwdl(3) + evma3(i,j)
434 END DO
435
436
437 t(i,1) = dwdl(1) - dwdl(3)
438 t(i,2) = dwdl(2) - dwdl(3)
439 t(i,3) = zero
440 ENDDO
441
442
443 DO j = 1,norder
444
445
446
447
448
449
450
451
452
453 DO i=1,nel
454 IF (al(j) == four) THEN
455 c11(i,j) = half*mu(j)*(half*al(j)-one)
456 c22(i,j) = half*mu(j)*(half*al(j)-one)
457 c12(i,j) = half*mu(j)*(half*al(j) + one) / (ev(i,1)*ev(i,2))**(8)
458 ELSEIF (al(j) == zero) THEN
459 c11(i,j) = half*mu(j)*(half*al(j)-one) / ev(i,1)**(4)
460 c22(i,j) = half*mu(j)*(half*al(j)-one) / ev(i,2)**(4)
461 c12(i,j) = half*mu(j)*(half*al(j) + one) / (ev(i,1)*ev(i,2))**(4)
462 ELSE
463 IF(ev(i,1) /= zero) THEN
464 pui11 = exp((al(j) )* log(ev(i,1)) )
465 c11(i,j) = half*mu(j)*(half*al(j) - one)*pui11 / ev(i,1)**(4)
466 ELSE
467 c11(i,j) = zero
468 pui11 = one
469 ENDIF
470 IF(ev(i,2) /= zero) THEN
471 pui22 = exp((al(j))* log(ev(i,2)) )
472 c22(i,j) = half*mu(j)*(half*al(j) - one)*pui22 / ev(i,2)**(4)
473 ELSE
474 c22(i,j) = zero
475 pui22 = one
476 ENDIF
477 IF(ev(i,1)*ev(i,2) /= zero) THEN
478 c12(i,j) = half*mu(j)*(half*al(j) + one) /
479 . ( (pui11 * pui22)*(ev(i,1)**4 * ev(i,2)**4) )
480 ELSE
481 c12(i,j) = zero
482 ENDIF
483 ENDIF
484 ENDDO
485 ENDDO
486
487 DO i=1,nel
488 e11 = zero
489 e22 = zero
490 e12 = zero
491 DO j=1,norder
492 e11 = e11 + c11(i,j)
493 e22 = e22 + c22(i,j)
494 e12 = e12 + c12(i,j)
495 END DO
496 e11 = e11 + e12 * ev(i,2)**4
497 e22 = e22 + e12 * ev(i,1)**4
499 sv(i,1) = zero
500 sv(i,2) = zero
501 sv(i,3) = zero
502 ENDDO
503
504 ENDIF
505
506
507 DO i=1,nel
508 IF (off(i) /= zero .AND.
509 . (t(i,1) > abs(tenscut) .OR. t(i,2) > abs(tenscut))) THEN
510 t(i,1) = zero
511 t(i,2) = zero
512 t(i,3) = zero
513 off(i) = four_over_5
514 ENDIF
515 ENDDO
516
517
518
519 IF (ismstr == 1 .OR. ismstr == 3 .OR. ismstr == 11) THEN
520 DO i=1,nel
521 epszz(i) = ev(i,3) - one
522 uvar(i,3) = ev(i,3)
523 ENDDO
524 ELSEIF (ismstr == 10) THEN
525 DO i=1,nel
526 epszz(i) = ev(i,3) - one
527 uvar(i,3) = ev(i,3)
528 ENDDO
529 ELSE
530 DO i=1,nel
531 epszz(i) = log(ev(i,3))
532 uvar(i,3) = ev(i,3)
533 ENDDO
534 ENDIF
535
536 DO i=1,nel
537 rv(i) = ev(i,1)*ev(i,2)*ev(i,3)
538 IF (rv(i) /= zero) THEN
539 invrv(i) = one / rv(i)
540 ELSE
541 invrv(i) = zero
542 ENDIF
543
544 dezz(i) = -nu/(one-nu)*(depsxx(i)+depsyy(i))
545
546 signxx(i) = eigv(i,1,1)*t(i,1) + eigv(i,1,2)*t(i,2) + sv(i,1)*invrv(i)
547 signyy(i) = eigv(i,2,1)*t(i,1) + eigv(i,2,2)*t(i,2) + sv(i,2)*invrv(i)
548 signxy(i) = eigv(i,3,1)*t(i,1) + eigv(i,3,2)*t(i,2) + sv
549 signyz(i) = sigoyz(i)+gs(i)*depsyz(i)
550 signzx(i) = sigozx(i)+gs(i)*depszx(i)
551 rho(i) = rho0(i)*invrv(i)
552 thkn(i) = thkn(i) + dezz(i)*thklyl(i)*off(i)
553 uvar(i,4) = epszz(i)
554
555 emax = gmax*(one + nu)
556 emax =
max(emax,ea(i))
557 a11 = emax/(one - nu**2)
558 soundsp(i)= sqrt(a11/rho0(i))
559 ENDDO
560
561 RETURN