46
47
48
49#include "implicit_f.inc"
50#include "comlock.inc"
51
52
53
54#include "mvsiz_p.inc"
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#include "param_c.inc"
93#include "scr17_c.inc"
94#include "com01_c.inc"
95#include "com04_c.inc"
96#include "com08_c.inc"
97#include "units_c.inc"
98#include "impl1_c.inc"
99
100 INTEGER, INTENT(IN) :: NEL, NUVAR,IPLA,NVARTMP,INLOC
101 INTEGER, INTENT(IN) :: IEOS
102 INTEGER ,DIMENSION(NEL), INTENT(IN) :: NGL,MAT
103 INTEGER ,DIMENSION(NPROPMI,NUMMAT), INTENT(IN) :: IPM
105 . time,timestep,uparam(*),
106 . rho0(nel),
107 . epsxx(nel),epsyy(nel),epszz(nel),
108 . epsxy(nel),epsyz(nel),epszx(nel),
109 . depsxx(nel),depsyy(nel),depszz(nel),
110 . depsxy(nel),depsyz(nel),depszx(nel),
111 . sigoxx(nel),sigoyy(nel),sigozz(nel),
112 . sigoxy(nel),sigoyz(nel),sigozx(nel),
113 . epsp(nel),etse(nel),amu(nel),facyldi(nel),
114 . dmg(nel),planl(nel)
115 my_real,
DIMENSION(MVSIZ) ,
INTENT(IN) :: dpdm
116
117
118
120 . signxx(nel),signyy(nel),signzz(nel),
121 . signxy(nel),signyz(nel),signzx(nel),
122 . soundsp(nel),viscmax(nel),dpla1(nel),
123 . al_imp(nel),signor(mvsiz,6)
124
125
126
128 . uvar(nel,nuvar), off(nel), yld(nel),
129 . pla(nel)
130 INTEGER, INTENT(INOUT) :: VARTMP(NEL,NVARTMP)
131 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: sigbxx,sigbyy,sigbzz,sigbxy,sigbyz,sigbzx
132
133
134
135 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
137 EXTERNAL finter
138
139
140
141
142
143
144
145
146
147
148
149 INTEGER I,J,K,J1,J2,NFUNC,VP,II,NITER,IFAIL,NRATE,PFUN,IPFUN,
150 . IPFLAG,ISMOOTH,YLDCHECK,OPTE,IFUNCE,NINDX
151 INTEGER ILEN1(MVSIZ),IAD2(MVSIZ),ILEN2(MVSIZ),INDEX(MVSIZ),
152 . IFUNC(100),IAD1(MVSIZ), IADP(MVSIZ),ILENP(MVSIZ),
153 . INDX(MVSIZ),JJ(MVSIZ), IADP2(MVSIZ),ILENP2(MVSIZ)
154 INTEGER, DIMENSION(MVSIZ) :: IPOS1,IPOS2,IPOSPE,IPOSP,IPOSP2
156 . e11,nu,dav,vm,r(mvsiz),fac,epst,p,epsp1,epsp2,
157 . e1,e2,e3,e4,e5,e6,c,cc,d,y,yp,e42,e52,e62,epst2,
158 . c11,g11,g21,g31,epsr1,dpla,epsf,hkin,fisokin,
159 . dsxx,dsyy,dszz,dsxy,dsyz,
160 . dszx,sigpxx,sigpyy,sigpxy,sigpyz,sigpzx,sigpzz,
alpha,
161 . epsr1dav,epsr1f,vm_1,g3h,norm_1,epsmax,ssp,
162 . einf,ce1,epsr2,svm,df,f
164 . bulk(mvsiz),g(mvsiz),g2(mvsiz),g3(mvsiz),
165 . y1(mvsiz),y2(mvsiz),h(mvsiz),dydx1(mvsiz),
166 . dydx2(mvsiz),fail(mvsiz),e(mvsiz),
167 . p0(mvsiz),pfac(mvsiz),pscale(mvsiz),rfac(mvsiz),
168 . pscale1(mvsiz),pla0(mvsiz), plam(mvsiz),
169 . dfdp(mvsiz),epstt(mvsiz),
170 . sigexx(mvsiz),sigeyy(mvsiz),sigezz(mvsiz),
171 . sigexy(mvsiz),sigeyz(mvsiz),sigezx(mvsiz),
172 . dydxe(mvsiz),plaold(mvsiz),
173 . yfac(mvsiz,2),
174 . coef(mvsiz),
175 . dfsr(mvsiz)
177 . plap(mvsiz),svm2(mvsiz),dpla_j(mvsiz),dpla_i(mvsiz),
178 . hi(mvsiz),escale12(mvsiz),
179 . svm_tab(mvsiz)
180 INTEGER :: NINDEX_PLA,NINDEX_VINTER
181 INTEGER, DIMENSION(MVSIZ) :: INDEX_PLA,INDEX_VINTER
182 my_real,
DIMENSION(MVSIZ) :: tab_loc,y1_loc,dydx1_loc, y2_loc,dydx2_loc
183
184
185
186 niter = 5
187 nindex_pla = 0
188 nfunc = ipm(10,mat(1))
189 DO j=1,nfunc
190 ifunc(j)= ipm(10+j,mat(1))
191 ENDDO
192 ipfun = ifunc(nfunc-1)
193
194 e11 = uparam(2)
195 g11 = uparam(5)
196 nu = uparam(6)
197 nrate = nint(uparam(1))
198 epsmax = uparam(6+2*nrate+1)
199 epsr1 = uparam(6+2*nrate+2)
200 epsr2 = uparam(6+2*nrate+3)
201 g21 = uparam(6+2*nrate+4)
202 g31 = uparam(6+2*nrate+5)
203 c11 = uparam(6+2*nrate+6)
204 ssp = uparam(6+2*nrate+7)
205 fisokin = uparam(6+2*nrate+8)
206 epsf = uparam(6+2*nrate+9)
207 pfun = nint(uparam(16+2*nrate))
208 opte = uparam(2*nrate+23)
209 einf = uparam(2*nrate+24)
210 ce1 = uparam(2*nrate+25)
211 vp
212 ifail = nint(uparam(2*nrate + 27))
213 yldcheck = nint(uparam(2*nrate + 28))
214 ismooth = nint(uparam(2*nrate + 29))
215
216#include "vectorize.inc"
217 DO i=1,nel
218 pfac(i) = one
219 pscale(i) = uparam(17+2*nrate)
220 e(i) = e11
221 g(i) = g11
222 g2(i) = g21
223 g3(i) = g31
224 bulk(i) = c11
225 soundsp(i) = ssp
226 ENDDO
227
228
229
230
231
232 IF (fisokin > zero) THEN
233
234
235#include "vectorize.inc"
236 DO i=1,nel
237 sigoxx(i) = sigoxx(i
238 sigoyy(i) = sigoyy(i) - sigbyy(i)
239 sigozz(i) = sigozz(i) - sigbzz(i)
240 sigoxy(i) = sigoxy(i) - sigbxy(i)
241 sigoyz(i) = sigoyz(i) - sigbyz(i)
242 sigozx(i) = sigozx(i) - sigbzx(i)
243 ENDDO
244 ENDIF
245
246
247
248 IF (opte == 1) THEN
249 ifunce = uparam( 2*nrate + 22)
250 DO i=1,nel
251 IF(pla(i) > zero)THEN
252 nindex_pla = nindex_pla + 1
253 index_pla(nindex_pla) = i
254 ipospe(nindex_pla) = vartmp(i,1)
255 iadp(nindex_pla) = npf(kfunc(ifunce)) / 2 + 1
256 ilenp(nindex_pla) = npf(kfunc(ifunce)+1) / 2 - iadp(nindex_pla) - ipospe(nindex_pla)
257 tab_loc(nindex_pla) = pla(i)
258 ENDIF
259 ENDDO
260 CALL vinter2(tf,iadp,ipospe,ilenp,nindex_pla,tab_loc,dydxe,escale12)
261 vartmp(index_pla(1:nindex_pla),1) = ipospe(1:nindex_pla)
262#include "vectorize.inc"
263 DO ii=1,nindex_pla
264 i = index_pla(ii)
265 e(i) = escale12(ii)* e(i)
266 g(i) = half*e(i)/(one+nu)
267 g2(i) = two*g(i)
268 g3(i) = three*g(i)
269 bulk(i) = e(i)/three/(one - two*nu)
270 soundsp(i) = sqrt((bulk(i) + four_over_3
271 ENDDO
272 ELSEIF ( ce1 /= zero) THEN
273#include "vectorize.inc"
274 DO i=1,nel
275 IF(pla(i) > zero)THEN
276 e(i) = e11-(e11-einf)*(one-exp(-ce1*pla(i)))
277 g(i) = half*e(i)/(one+nu)
278 g2(i) = two*g(i)
279 g3(i) = three*g(i)
280 bulk(i) = e(i)/three/(one - two*nu)
281 soundsp(i) = sqrt((bulk(i) + four_over_3*g(i))/rho0(i))
282 ENDIF
283 ENDDO
284 ENDIF
285
286
287
288 IF (pfun > 0) THEN
289 DO i=1,nel
290 iadp(i) = npf(ipfun) / 2 + 1
291 ilenp(i) = npf(ipfun + 1) / 2 - iadp(i) - vartmp(i,2)
292 ENDDO
293 CALL vinter2(tf,iadp,vartmp(1:nel,2),ilenp,nel,pscale,dfdp
294 pfac(1:nel) =
max(zero, pfac(1:nel))
295 ENDIF
296
297
298 IF (impl_s > 0) pscale1(1:nel)=pscale(1:nel) * ( bulk(1:nel) * amu(1:nel) )
299
300
301
302
303#include "vectorize.inc"
304 DO i=1,nel
305
306
307 dav = (depsxx(i)+depsyy(i)+depszz(i))*third
308
309 p0(i) = -(sigoxx(i)+sigoyy(i)+sigozz(i))*third
310
311
312 pscale(i) = pscale(i)*p0(i)
313
314
315 signxx(i)=sigoxx(i)+p0(i)+g2(i)*(depsxx(i)-dav)
316 signyy(i)=sigoyy(i)+p0(i)+g2(i)*(depsyy(i)-dav)
317 signzz(i)=sigozz(i)+p0(i)+g2(i)*(depszz(i)-dav)
318 ENDDO
319
320 signxy(1:nel)=sigoxy(1:nel)+g(1:nel) *depsxy(1:nel)
321 signyz(1:nel)=sigoyz(1:nel)+g(1:nel) *depsyz(1:nel)
322 signzx(1:nel)=sigozx(1:nel)+g(1:nel) *depszx(1:nel)
323 sigexx(1:nel) = signxx(1:nel)
324 sigeyy(1:nel) = signyy(1:nel)
325 sigezz(1:nel) = signzz(1:nel)
326 sigexy(1:nel) = signxy(1:nel)
327 sigeyz(1:nel) = signyz(1:nel)
328 sigezx(1:nel) = signzx(1:nel)
329 viscmax(1:nel) = zero
330 dpla1(1:nel) =zero
331 epstt(1:nel) = zero
332 fail(1:nel) = one
333
334
335
336 IF (ifail > 1) THEN
337 epsr1f =
min(epsr1,epsf)
338 DO i=1,nel
339
340 dav = (epsxx(i)+epsyy(i)+epszz(i)) * third
341 e1 = epsxx(i) - dav
342 e2 = epsyy(i) - dav
343 e3 = epszz(i) - dav
344 e4 = half*epsxy(i)
345 e5 = half*epsyz(i)
346 e6 = half*epszx(i)
347
348
349
350
351
352
353 e42 = e4*e4
354 e52 = e5*e5
355 e62 = e6*e6
356 c = - half *(e1*e1
357 epst = sqrt(-c*third)
358
359 epsr1dav = epsr1f - dav
360 IF(epst+epst < epsr1dav)cycle
361 d = - e1*e2*e3 + e1*e52 + e2*e62 + e3*e42
362 & - two*e4*e5*e6
363 epst2 = epst * epst
364 y = (epst2 + c)* epst + d
365 IF(abs(y) > em8)THEN
366 epst = onep75 * epst
367 epst2 = epst * epst
368 y = (epst2 + c)* epst + d
369 yp = three*epst2 + c
370 epst = epst - y/yp
371
372 IF(epst < epsr1dav)cycle
373 epst2 = epst * epst
374 y = (epst2 + c)* epst + d
375 yp = three*epst2 + c
376 epst = epst - y/yp
377 IF(epst < epsr1dav)cycle
378 epst2 = epst * epst
379 y = (epst2 + c)* epst + d
380 yp = three*epst2 + c
381 epst = epst - y/yp
382 IF(epst < epsr1dav)cycle
383 epst2 = epst * epst
384 y = (epst2 + c)* epst + d
385 yp = three*epst2 + c
386 epst = epst - y/yp
387 ENDIF
388 epst = epst + dav
389 epstt(i)= epst
390
391
392
393 fail(i) =
max(em20,
min(one, (epsr2-epst)/(epsr2-epsr1) ))
394 dmg(i) = one -
max(zero,
min(one,(epsr2-epst)/(epsr2-epsr1)))
395 ENDDO
396 ENDIF
397
398
399
400
401
402 IF (vp == 0) THEN
403
404 IF (nrate == 1) THEN
405 iad1(1:nel) = npf(ifunc(1)) / 2 + 1
406 ilen1(1:nel) = npf(ifunc(1)+1) / 2 - iad1(1:nel) - vartmp(1:nel,3)
407
408 CALL vinter(tf,iad1,vartmp(1:nel,3),ilen1,nel,pla,dydx1,y1)
409
410 yfac(1:nel,1) = uparam(6+nrate+1)*facyldi(1:nel)
411 fact(1:nel) = fail(1:nel) * pfac(1:nel) * yfac(1:nel,1)
412 h(1:nel) = dydx1(1:nel) * fact(1:nel)
413
414 IF (fisokin == zero) THEN
415 yld(1:nel) = y1(1:nel) * fact(1:nel)
416 ELSE IF (fisokin == one) THEN
417 yld(1:nel) = tf(npf(ifunc(1))+1) * fact(1:nel)
418 ELSE IF (fisokin > zero) THEN
419 yld(1:nel) = ((one-fisokin)*y1(1:nel) + fisokin *tf(npf(ifunc(1))+1))*fact(1:nel)
420 END IF
421
422 ELSE
423
424 jj(1:nel) = 1
425 DO j=2,nrate-1
426#include "vectorize.inc"
427 DO i=1,nel
428 IF (epsp(i) >= uparam(6+j)) jj(i) = j
429 ENDDO
430 ENDDO
431
432 IF (ismooth == 2) THEN
433#include "vectorize.inc"
434 DO i=1,nel
435 epsp1 =
max(uparam(6+jj(i)), em20)
436 epsp2 = uparam(7+jj(i))
437 rfac(i) = log(
max(epsp(i),em20)/epsp1) / log(epsp2/epsp1)
438 ENDDO
439 ELSE
440#include "vectorize.inc"
441 DO i=1,nel
442 epsp1 = uparam(6+jj(i))
443 epsp2 = uparam(7+jj(i))
444 rfac(i) = (epsp(i) - epsp1) / (epsp2 - epsp1)
445 ENDDO
446 END IF
447
448#include "vectorize.inc"
449 DO i=1,nel
450 j1 = jj(i)
451 j2 = j1+1
452 ipos1(i) = vartmp(i,j1+2)
453 ipos2(i) = vartmp(i,j2+2)
454 yfac(i,1)= uparam(6+nrate+j1) * facyldi(i)
455 yfac(i,2)= uparam(6+nrate+j2) * facyldi(i)
456 ENDDO
457 iad1(1:nel) = npf(ifunc(jj(1:nel))) / 2 + 1
458 ilen1(1:nel) = npf(ifunc(jj(1:nel))+1) / 2 - iad1(1:nel) - ipos1(1:nel)
459 iad2(1:nel) = npf(ifunc(jj(1:nel)+1)) / 2 + 1
460 ilen2(1:nel) = npf(ifunc(jj(1:nel)+1)+1) / 2 - iad2(1:nel) - ipos2(1:nel)
461
462 CALL vinter(tf,iad1,ipos1,ilen1,nel,pla,dydx1,y1)
463 CALL vinter(tf,iad2,ipos2,ilen2,nel,pla,dydx2,y2)
464
465 DO i=1,nel
466 j1 = jj(i)
467 j2 = j1+1
468 vartmp(i,j1+2) = ipos1(i)
469 vartmp(i,j2+2) = ipos2(i)
470 ENDDO
471
472 IF (fisokin == zero) THEN
473#include "vectorize.inc"
474 DO i=1,nel
475 j1 = jj(i)
476 j2 = j1+1
477 y1(i)= y1(i)*yfac(i,1)
478 y2(i)= y2(i)*yfac(i,2)
479 fac = rfac(i)
480 cc = fail(i)* pfac(i)
481 yld(i) = (y1(i) + fac*(y2(i)-y1(i))) * cc
482 dydx1(i)= dydx1(i)*yfac(i,1)
483 dydx2(i)= dydx2(i)*yfac(i,2)
484 h(i) = (dydx1(i) + fac*(dydx2(i)-dydx1(i))) * cc
485 ENDDO
486
487 ELSEIF (fisokin == one) THEN
488
489#include "vectorize.inc"
490 DO i=1,nel
491 j1 = jj(i)
492 j2 = j1+1
493 fac = rfac(i)
494 cc = fail(i) * pfac(i)
495 dydx1(i)=dydx1(i)*yfac(i,1)
496 dydx2(i)=dydx2(i)*yfac(i,2)
497 h(i) = cc*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
498 y1(i)= tf(npf(ifunc(j1))+1)
499 y2(i)= tf(npf(ifunc(j2))+1)
500 y1(i)= y1(i)*yfac(i,1)
501 y2(i)= y2(i)*yfac(i,2)
502 yld(i) = cc*(y1(i) + fac*(y2(i)-y1(i)))
503 ENDDO
504
505 ELSE
506
507#include "vectorize.inc"
508 DO i=1,nel
509 j1 = jj(i)
510 j2 = j1+1
511 y1(i) = y1(i)*yfac(i
512 y2(i) = y2(i)*yfac(i,2)
513 fac = rfac(i)
514 yld(i) = fail(i)*(y1(i) + fac*(y2(i)-y1(i)))
515 yld(i) =
max(yld(i),em20)
516 dydx1(i)= dydx1(i)*yfac(i,1)
517 dydx2(i)= dydx2(i)*yfac(i,2)
518 h(i
519 h(i) = h(i) * pfac(i)
520
521 y1(i)=tf(npf(ifunc(j1))+1)
522 y2(i)=tf(npf(ifunc(j2))+1)
523 y1(i)=y1(i)*yfac(i,1)
524 y2(i)=y2(i)*yfac(i,2)
525 yld(i) = (one - fisokin) * yld(i)
526 . + fisokin * (fail(i)*(y1(i) + fac*(y2(i)-y1(i))))
527 yld(i) = yld(i) * pfac(i)
528 ENDDO
529 ENDIF
530 END IF
531
532 IF (yldcheck == 1) THEN
533 DO i=1,nel
534 yld(i) =
max(yld(i), em20)
535 END DO
536 END IF
537
538
539
540 IF (ipla == 0) THEN
541 DO i=1,nel
542 vm =three*(half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
543 . + signxy(i)**2+signyz(i)**2+signzx(i)**2)
544 IF(vm > yld(i)*yld(i))THEN
545 vm = sqrt(vm)
546 r(i) = yld(i)/
max(vm,em20)
547 signxx(i)=signxx(i)*r(i)
548 signyy(i)=signyy(i)*r(i)
549 signzz(i)=signzz(i)*r(i)
550 signxy(i)=signxy(i)*r(i)
551 signyz(i)=signyz(i)*r(i)
552 signzx(i)=signzx(i)*r(i)
553 pla(i) = pla(i) + (one - r(i))*vm/
max(g3(i)+h(i),em20)
554 dpla1(i) = (one - r(i))*vm/
max(g3(i)+h(i),em20)
555 ENDIF
556 ENDDO
557
558 ELSEIF(ipla == 2)THEN
559
560 DO i=1,nel
561 vm = three*(half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
562 . + signxy(i)**2+signyz(i)**2+signzx(i)**2)
563 IF (vm > yld(i)*yld(i)) THEN
564 vm = sqrt(vm)
565 r(i) = yld(i)/
max(vm,em20)
566 signxx(i)=signxx(i)*r(i)
567 signyy(i)=signyy(i)*r(i)
568 signzz(i)=signzz(i)*r(i)
569 signxy(i)=signxy(i)*r(i)
570 signyz(i)=signyz(i)*r(i)
571 signzx(i)=signzx(i)*r(i)
572 pla(i)=pla(i) + (one-r(i))*vm/
max(g3(i),em20)
573 dpla1(i) = (one-r(i))*vm/
max(g3(i),em20)
574 ENDIF
575 ENDDO
576
577 ELSEIF(ipla == 1)THEN
578
579 IF (impl_s == 0) THEN
580 DO i=1,nel
581 vm = three*(half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
582 . + signxy(i)**2+signyz(i)**2+signzx(i)**2)
583 IF (vm > yld(i)*yld(i)) THEN
584 vm = sqrt(vm)
585 r(i) = yld(i)/
max(vm,em20)
586
587 dpla =(one - r(i)) * vm/
max(g3(i)+h(i),em20)
588
589 yld(i) =
max(yld(i)+(one - fisokin)*dpla*h(i),zero)
590 r(i) =
min(one,yld(i) /
max(vm,em20))
591
592
593
594 signxx(i)=signxx(i)*r(i)
595 signyy(i)=signyy(i)*r(i)
596 signzz(i)=signzz(i)*r(i)
597 signxy(i)=signxy(i)*r(i)
598 signyz(i)=signyz(i)*r(i)
599 signzx(i)=signzx(i)*r(i)
600 pla(i)=pla(i) + dpla
601 dpla1(i) = dpla
602 ENDIF
603 ENDDO
604
605 ELSE
606
607
608 ipflag = 0
609 jj(1:nel) = 1
610 IF (pfun > 0) ipflag = 1
611 DO i=1,nel
612
613 j1 = jj(i)
614 iad1(i) = npf(ifunc(j1)) / 2 + 1
615 ilen1(i) = npf(ifunc(j1)+1) / 2 - iad1(i)
616 ENDDO
618 . signxy, signyz, signzx,
619 . pla, yld, g3,
620 . yfac, dpla1, h,
621 . tf, iad1,
622 . ilen1, nel,
623 . fisokin, vartmp,pla0,
624 . plam,y1, dydx1,
625 . ipflag, pfun, ipfun, iposp,
626 . nrate, npf, iadp, ilenp,
627 . pfac, pscale1, dfdp, fail,
628 . nvartmp ,
629 . sigbxx,sigbyy,sigbzz,sigbxy,sigbyz,sigbzx)
630
631 ENDIF
632
633 ENDIF
634
635
636 ELSE
637
638
639 IF (isigi == 0) THEN
640 IF(time == zero)THEN
641 DO i=1,nel
642 yfac(i,1) = uparam(6+nrate+1)*facyldi(i)
643 yld(i) = yfac(i,1)*finter(ifunc(1) ,zero,npf,tf,dydx1(i))
644 h(i) = dydx1(i)
645 yld(i) = yld(i)*
max(zero,pfac(i))
646 h(i) = h(i) *
max(zero,pfac(i))
647 uvar(i,3) = yld(i)
648 ENDDO
649 ENDIF
650 ENDIF
651
652 DO i=1,nel
653 plaold(i) = pla(i)
654 plap(i) = uvar(i,2)
655 yld(i) = uvar(i,3)
656 jj(i) = 1
657 ENDDO
658
659
660
661 DO i=1,nel
662 svm2(i) = three*(half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)
663 . + signxy(i)**2+signyz(i)**2+signzx(i)**2)
664 ENDDO
665 nindx=0
666 DO i=1,nel
667 IF(svm2(i)>yld(i)*yld(i).AND.off(i)== one) THEN
668 nindx=nindx+1
669 index(nindx)=i
670 ENDIF
671 ENDDO
672
673
674
675 IF (nindx > 0 ) THEN
676
677 IF (fisokin == zero) THEN
678
679
680
681#include "vectorize.inc"
682 DO ii=1,nindx
683 i = index(ii)
684 svm_tab(i) = sqrt(svm2(i))
685 dpla_j(i) = uvar(i,1) + em09
686
687
688
689 jj(i) = 1
690
691 ENDDO
692 DO j=2,nrate-1
693 DO ii=1,nindx
694 i = index(ii)
695 IF (plap(i) >= uparam(6+j)) jj(i) = j
696 ENDDO
697 ENDDO
698 IF (ismooth == 2) THEN
699#include "vectorize.inc"
700 DO ii=1,nindx
701 i = index(ii)
702 epsp1 =
max(uparam(6+jj(i)), em20)
703 epsp2 = uparam(7+jj(i))
704 rfac(i) = log(
max(plap(i),em20)/epsp1) / log(epsp2/epsp1)
705 ENDDO
706 ELSE
707#include "vectorize.inc"
708 DO ii=1,nindx
709 i = index(ii)
710 epsp1 = uparam(6+jj(i))
711 epsp2 = uparam(7+jj(i))
712 rfac(i) = (plap(i) - epsp1) / (epsp2 - epsp1)
713 ENDDO
714 END IF
715
716 nindex_vinter = 0
717#include "vectorize.inc"
718 DO ii=1,nindx
719 i = index(ii)
720 nindex_vinter = nindex_vinter + 1
721 index_vinter(nindex_vinter) = i
722 j1=jj(i)
723 j2=jj(i)+1
724 iposp(nindex_vinter) = vartmp(i,j1+2)
725 iadp(nindex_vinter) = npf(ifunc(jj(i)) ) / 2 + 1
726 ilenp(nindex_vinter) = npf(ifunc(jj(i)) + 1) / 2 - iadp(nindex_vinter) - iposp(nindex_vinter)
727 iposp2(nindex_vinter) = vartmp(i,j2+2)
728 iadp2(nindex_vinter) = npf(ifunc(jj(i)+1)) / 2 + 1
729 ilenp2(nindex_vinter) = npf(ifunc(jj(i)+1) + 1) / 2 - iadp2(nindex_vinter) - iposp2(nindex_vinter)
730 tab_loc(nindex_vinter) = pla(i)
731 yfac(i,1) = uparam(6+nrate+j1) * facyldi(i)
732 yfac(i,2) = uparam(6+nrate+j2) * facyldi(i)
733 ENDDO
734
735 CALL vinter2(tf,iadp,iposp,ilenp,nindex_vinter,tab_loc,dydx1_loc,y1_loc)
736 CALL vinter2(tf,iadp2,iposp2,ilenp2,nindex_vinter,tab_loc,dydx2_loc,y2_loc)
737
738 DO ii=1,nindex_vinter
739 i = index_vinter(ii)
740 j1 = jj(i)
741 j2 = j1+1
742 vartmp(i,j1+2) = iposp(ii)
743 vartmp(i,j2+2) = iposp2(ii)
744 ENDDO
745#include "vectorize.inc"
746 DO ii=1,nindex_vinter
747 i = index_vinter(ii)
748 y1(i) = y1_loc(ii)
749 y2(i) = y2_loc(ii)
750 dydx1(i)=dydx1_loc(ii)
751 dydx2(i)=dydx2_loc(ii)
752 ENDDO
753
754#include "vectorize.inc"
755 DO ii=1,nindx
756 i = index(ii)
757 y1(i) = y1(i) * yfac(i,1)
758 y2(i) = y2(i) * yfac(i,2)
759 fac = rfac(i)
760 yld(i) = fail(i)*(y1(i) + fac*(y2(i)-y1(i)))
761 yld(i) =
max(yld(i),em20)
762 dydx1(i)=dydx1(i)*yfac(i,1)
763 dydx2(i)=dydx2(i)*yfac(i,2)
764 h(i) = fail(i)*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
765 yld(i) = yld(i)*
max(zero,pfac(i))
766 h(i) = h(i) *
max(zero,pfac(i))
767 dfsr(i) = h(i) +
max(zero,pfac(i))*fail(i)*(y2(i)-y1(i))/
768 . (uparam(7+jj(i))-uparam(6+jj(i))) /timestep
769 ENDDO
770
771 DO k=1,niter
772
773#include "vectorize.inc"
774 DO ii=1,nindx
775 i = index(ii)
776 dpla_i(i) = dpla_j(i)
777 pla(i) = plaold(i) + dpla_i(i)
778 plap(i) = dpla_i(i) / timestep
779 r(i) = yld(i)/(yld(i) +g3(i)*dpla_i(i))
780 svm = r(i)* svm_tab(i)
781
782 f = svm - yld(i) - g3(i) *dpla_i(i)
783 df = - g3(i) -dfsr(i)
784 df = sign(
max(abs(df),em20),df)
785 IF(dpla_i(i) > zero) THEN
786 dpla_j(i)=
max( em10 ,dpla_i(i)-f/df)
787 ELSE
788 dpla_j(i)=em10
789 ENDIF
790
791
792
793 pla(i) = plaold(i) + dpla_j(i)
794 plap(i) = dpla_j(i) / timestep
795 jj(i) = 1
796 ENDDO
797 DO j=2,nrate-1
798 DO ii=1,nindx
799 i = index(ii)
800 IF(plap(i) >= uparam(6+j)) jj(i) = j
801 ENDDO
802 ENDDO
803 IF (ismooth == 2) THEN
804#include "vectorize.inc"
805 DO i=1,nel
806 epsp1 =
max(uparam(6+jj(i)), em20)
807 epsp2 = uparam(7+jj(i))
808 rfac(i) = log(
max(plap(i),em20)/epsp1) / log(epsp2/epsp1)
809 ENDDO
810 ELSE
811#include "vectorize.inc"
812 DO ii=1,nindx
813 i = index(ii)
814 epsp1 = uparam(6+jj(i))
815 epsp2 = uparam(7+jj(i))
816 rfac(i) = (plap(i) - epsp1) / (epsp2 - epsp1)
817 ENDDO
818 END IF
819
820 nindex_vinter = 0
821#include "vectorize.inc"
822 DO ii=1,nindx
823 i = index(ii)
824 nindex_vinter = nindex_vinter + 1
825 index_vinter(nindex_vinter) = i
826 j1=jj(i)
827 j2=jj(i)+1
828 iposp(nindex_vinter) = vartmp(i,j1+2)
829 iadp(nindex_vinter) = npf(ifunc(jj(i)) ) / 2 + 1
830 ilenp(nindex_vinter) = npf(ifunc(jj(i)) + 1) / 2 - iadp(nindex_vinter) - iposp(nindex_vinter)
831 iposp2(nindex_vinter) = vartmp(i,j2+2)
832 iadp2(nindex_vinter) = npf(ifunc(jj(i)+1)) / 2 + 1
833 ilenp2(nindex_vinter) = npf(ifunc(jj(i)+1) + 1) / 2 - iadp2(nindex_vinter) - iposp2(nindex_vinter)
834 tab_loc(nindex_vinter) = pla(i)
835 yfac(i,1)=uparam(6+nrate+j1)*facyldi(i)
836 yfac(i,2)=uparam(6+nrate+j2)*facyldi(i)
837 ENDDO
838
839 CALL vinter2(tf,iadp,iposp,ilenp,nindex_vinter,tab_loc,dydx1_loc,y1_loc)
840 CALL vinter2(tf,iadp2,iposp2,ilenp2,nindex_vinter,tab_loc,dydx2_loc,y2_loc)
841
842 DO ii=1,nindex_vinter
843 i = index_vinter(ii)
844 j1 = jj(i)
845 j2 = j1+1
846 vartmp(i,j1+2) = iposp(ii)
847 vartmp(i,j2+2) = iposp2(ii)
848 ENDDO
849#include "vectorize.inc"
850 DO ii=1,nindex_vinter
851 i = index_vinter(ii)
852 y1(i) = y1_loc(ii)
853 y2(i) = y2_loc(ii)
854 dydx1(i)=dydx1_loc(ii)
855 dydx2(i)=dydx2_loc(ii)
856 ENDDO
857
858#include "vectorize.inc"
859 DO ii=1,nindx
860 i = index(ii)
861
862
863 y1(i) = yfac(i,1) * y1(i)
864 y2(i) = yfac(i,2) * y2(i)
865 fac = rfac(i)
866 yld(i)= fail(i)*(y1(i) + fac*(y2(i)-y1(i)))
867 yld(i) =
max(yld(i),em20)
868 yld(i) = yld(i)*
max(zero,pfac(i))
869 dydx1(i)=dydx1(i)*yfac(i,1)
870 dydx2(i)=dydx2(i)*yfac(i,2)
871 h(i) = fail(i)*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
872 h(i) = h(i) *
max(zero,pfac(i))
873 dfsr(i)= h(i)+
max(zero,pfac(i))*fail(i)*(y2(i)-y1(i))
874 . /(uparam(7+jj(i))-uparam(6+jj(i))) /timestep
875 ENDDO
876 ENDDO
877
878#include "vectorize.inc"
879 DO ii=1,nindx
880 i = index(ii)
881 pla(i) = plaold(i) + dpla_i(i)
882 plap(i) = dpla_i(i) / timestep
883 signxx(i) = signxx(i)*r(i)
884 signyy(i) = signyy(i)*r(i)
885 signzz(i) = signzz(i)*r(i)
886 signxy(i) = signxy(i)*r(i)
887 signyz(i) = signyz(i)*r(i)
888 signzx(i) = signzx(i)*r(i)
889 dpla1(i) = dpla_i(i)
890 uvar(i,1) = dpla_i(i)
891 uvar(i,2) = plap(i)
892 uvar(i,3) = yld(i)
893 ENDDO
894
895 ELSEIF (fisokin == one ) THEN
896
897
898
899#include "vectorize.inc"
900 DO ii=1,nindx
901 i = index(ii)
902 svm_tab(i) = sqrt(svm2(i))
903 dpla_j(i) = uvar(i,1) + em09
904
905
906
907 jj(i) = 1
908 ENDDO
909 DO j=2,nrate-1
910#include "vectorize.inc"
911 DO ii=1,nindx
912 i = index(ii)
913 IF (plap(i) >= uparam(6+j)) jj(i) = j
914 ENDDO
915 ENDDO
916
917 IF (ismooth == 2) THEN
918#include "vectorize.inc"
919 DO ii=1,nindx
920 i = index(ii)
921 epsp1 =
max(uparam(6+jj(i)), em20)
922 epsp2 = uparam(7+jj(i))
923 rfac(i) = log(
max(plap(i),em20)/epsp1) / log(epsp2/epsp1)
924 ENDDO
925 ELSE
926#include "vectorize.inc"
927 DO ii=1,nindx
928 i = index(ii)
929 epsp1 = uparam(6+jj(i))
930 epsp2 = uparam(7+jj(i))
931 rfac(i) = (plap(i) - epsp1) / (epsp2 - epsp1)
932 ENDDO
933 END IF
934
935 nindex_vinter = 0
936#include "vectorize.inc"
937 DO ii=1,nindx
938 i = index(ii)
939 nindex_vinter = nindex_vinter + 1
940 index_vinter(nindex_vinter) = i
941 j1=jj(i)
942 j2=jj(i)+1
943 iposp(nindex_vinter) = vartmp(i,j1+2)
944 iadp(nindex_vinter) = npf(ifunc(jj(i)) ) / 2 + 1
945 ilenp(nindex_vinter) = npf(ifunc(jj(i)) + 1) / 2 - iadp(nindex_vinter) - iposp(nindex_vinter)
946 iposp2(nindex_vinter) = vartmp(i,j2+2)
947 iadp2(nindex_vinter) = npf(ifunc(jj(i)+1)) / 2 + 1
948 ilenp2(nindex_vinter) = npf(ifunc(jj(i)+1) + 1) / 2 - iadp2(nindex_vinter) - iposp2(nindex_vinter)
949 tab_loc(nindex_vinter) = pla(i)
950 yfac(i,1)=uparam(6+nrate+j1)*facyldi(i)
951 yfac(i,2)=uparam(6+nrate+j2)*facyldi(i)
952 ENDDO
953
954 CALL vinter2(tf,iadp,iposp,ilenp,nindex_vinter,tab_loc,dydx1_loc,y1_loc)
955 CALL vinter2(tf,iadp2,iposp2,ilenp2,nindex_vinter,tab_loc,dydx2_loc,y2_loc)
956
957 DO ii=1,nindex_vinter
958 i = index_vinter(ii)
959 j1 = jj(i)
960 j2 = jj(i)+1
961 vartmp(i,j1+2) = iposp(ii)
962 vartmp(i,j2+2) = iposp2(ii)
963 ENDDO
964#include "vectorize.inc"
965 DO ii=1,nindex_vinter
966 i = index_vinter(ii)
967 y1(i) = y1_loc(ii)
968 y2(i) = y2_loc(ii)
969 dydx1(i)=dydx1_loc(ii)
970 dydx2(i)=dydx2_loc(ii)
971 ENDDO
972
973#include "vectorize.inc"
974 DO ii=1,nindx
975 i = index(ii)
976
977 j1 = jj(i)
978 j2 = jj(i)+1
979 y1(i) = yfac(i,1)*y1(i)
980 y2(i) = yfac(i,2)*y2(i)
981 fac = rfac(i)
982 yld(i)= fail(i)*(y1(i) + fac*(y2(i)-y1(i)))
983
984 dydx1(i)=dydx1(i)*yfac(i,1)
985 dydx2(i)=dydx2(i)*yfac(i,2)
986 h(i) = fail(i)*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
987 h(i) = h(i) *
max(zero,pfac(i))
988 hi(i) = h(i)*(one-fisokin)
989
990 coef(i) = (y2(i)-y1(i))/(uparam(6+j2)-uparam(6+j1)) /timestep
991 dfsr(i) = h(i)+ coef(i)
992 dfsr(i) = dfsr(i) * (one-fisokin)*
max(zero,pfac(i))
993
994 y1(i)=tf(npf(ifunc(j1))+1)
995 y2(i)=tf(npf(ifunc(j2))+1)
996 y1(i)= y1(i)*yfac(i,1)
997 y2(i)= y2(i)*yfac(i,2)
998 coef(i) =
max(zero,pfac(i))*fisokin * fail(i)*(y2(i)-y1(i))
999 . /(uparam(6+j2)-uparam(6+j1)) /timestep
1000 yld(i) = (one-fisokin) * yld(i) +
1001 . fisokin * (fail(i)*(y1(i) + fac*(y2(i)-y1(i))))
1002 yld(i) =
max(yld(i),em20)
1003 yld(i) = yld(i) *
max(zero,pfac(i))
1004 ENDDO
1005
1006
1007
1008 DO k=1,niter
1009#include "vectorize.inc"
1010 DO ii=1,nindx
1011 i = index(ii)
1012
1013 dpla_i(i) = dpla_j(i)
1014 pla(i) = plaold(i) + dpla_i(i)
1015 plap(i) = dpla_i(i) / timestep
1016 r(i) = yld(i)/(yld(i) +(g3(i)+fisokin*h(i))*dpla_i(i))
1017 svm = r(i)* svm_tab(i)
1018 f = svm - yld(i) - (g3(i)+fisokin*h(i)) *dpla_i(i)
1019 df =-(g3(i)+fisokin*h(i)) - (dfsr(i) + coef(i) )
1020 df = sign(
max(abs(df),em20),df)
1021 IF(dpla_i(i) > zero) THEN
1022 dpla_j(i)=
max( em10 ,dpla_i(i)-f/df)
1023 ELSE
1024 dpla_j(i)=em10
1025 ENDIF
1026
1027
1028
1029 pla(i) = plaold(i) + dpla_j(i)
1030 plap(i) = dpla_j(i) / timestep
1031 jj(i) = 1
1032 ENDDO
1033 DO j=2,nrate-1
1034#include "vectorize.inc"
1035 DO ii=1,nindx
1036 i = index(ii)
1037 IF(plap(i) >= uparam(6+j)) jj(i) = j
1038 ENDDO
1039 ENDDO
1040
1041 IF (ismooth == 2) THEN
1042#include "vectorize.inc"
1043 DO ii=1,nindx
1044 i = index(ii)
1045 epsp1 =
max(uparam(6+jj(i)), em20)
1046 epsp2 = uparam(7+jj(i))
1047 rfac(i) = log(
max(plap(i),em20)/epsp1) / log(epsp2/epsp1)
1048 ENDDO
1049 ELSE
1050#include "vectorize.inc"
1051 DO ii=1,nindx
1052 i = index(ii)
1053 epsp1 = uparam(6+jj(i))
1054 epsp2 = uparam(7+jj(i))
1055 rfac(i) = (plap(i) - epsp1) / (epsp2 - epsp1)
1056 ENDDO
1057 END IF
1058
1059 nindex_vinter = 0
1060#include "vectorize.inc"
1061 DO ii=1,nindx
1062 i = index(ii)
1063 nindex_vinter = nindex_vinter + 1
1064 index_vinter(nindex_vinter) = i
1065 j1=jj(i)
1066 j2=jj(i)+1
1067 iposp(nindex_vinter) = vartmp(i,j1+2)
1068 iadp(nindex_vinter) = npf(ifunc(jj(i)) ) / 2 + 1
1069
1070 iposp2(nindex_vinter)
1071 iadp2(nindex_vinter) = npf(ifunc(jj(i)+1)) / 2 + 1
1072 ilenp2(nindex_vinter) = npf(ifunc(jj(i)+1) + 1) / 2 - iadp2(nindex_vinter) - iposp2(nindex_vinter)
1073 tab_loc(nindex_vinter) = pla(i)
1074 yfac(i,1)=uparam(6+nrate+j1)*facyldi(i)
1075 yfac(i,2)=uparam(6+nrate+j2)*facyldi(i)
1076 ENDDO
1077
1078 CALL vinter2(tf,iadp,iposp,ilenp,nindex_vinter,tab_loc,dydx1_loc,y1_loc)
1079 CALL vinter2(tf,iadp2,iposp2,ilenp2,nindex_vinter,tab_loc,dydx2_loc,y2_loc)
1080
1081 DO ii=1,nindex_vinter
1082 i = index_vinter(ii)
1083 j1 = jj(i)
1084 j2 = j1+1
1085 vartmp(i,j1+2) = iposp(ii)
1086 vartmp(i,j2+2) = iposp2(ii)
1087 ENDDO
1088#include "vectorize.inc"
1089 DO ii=1,nindex_vinter
1090 i = index_vinter(ii)
1091 y1(i) = y1_loc(ii)
1092 y2(i) = y2_loc(ii)
1093 dydx1(i)=dydx1_loc(ii)
1094 dydx2(i)=dydx2_loc(ii)
1095 ENDDO
1096
1097#include "vectorize.inc"
1098 DO ii=1,nindx
1099 i = index(ii)
1100
1101 j1 = jj(i)
1102 j2 = jj(i)+1
1103 y1(i) = yfac(i,1) * y1(i)
1104 y2(i) = yfac(i,2) * y2(i)
1105 fac = rfac(i)
1106 yld(i)= fail(i)*(y1(i) + fac*(y2(i)-y1(i)))
1107 dydx1(i)=dydx1(i)*yfac(i,1)
1108 dydx2(i)=dydx2(i)*yfac(i,2)
1109 h(i) = fail(i)*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
1110 h(i) = h(i) *
max(zero,pfac(i))
1111 hi(i) = h(i)*(one-fisokin)
1112 dfsr(i) = hi(i)+
max(zero,pfac(i))* (one-fisokin)*(y2(i)-y1(i))
1113 . / (uparam(7+jj(i))-uparam(6+jj(i))) /timestep
1114 y1(i)=tf(npf(ifunc(j1))+1)
1115 y2(i)=tf(npf(ifunc(j2))+1)
1116 y1(i)=y1(i)*yfac(i,1)
1117 y2(i)=y2(i)*yfac(i,2)
1118 coef(i) =
max(zero,pfac(i))*fisokin * fail(i)*(y2(i)-y1(i))
1119 . / (uparam(6+j2)-uparam(6+j1)) /timestep
1120 yld(i) = (one-fisokin) * yld(i)
1121 . + fisokin * (fail(i)*(y1(i) + fac*(y2(i)-y1(i))))
1122 yld(i) =
max(yld(i),em20)
1123 yld(i) = yld(i) *
max(zero,pfac(i))
1124 ENDDO
1125 ENDDO
1126
1127#include "vectorize.inc"
1128 DO ii=1,nindx
1129 i = index(ii)
1130 pla(i) = plaold(i) + dpla_i(i)
1131 plap(i) = dpla_i(i) / timestep
1132 signxx(i) = signxx(i)*r(i)
1133 signyy(i) = signyy(i)*r(i)
1134 signzz(i) = signzz(i)*r(i)
1135 signxy(i) = signxy(i)*r(i)
1136 signyz(i) = signyz(i)*r(i)
1137 signzx(i) = signzx(i)*r(i)
1138 dpla1(i) = dpla_i(i)
1139 uvar(i,1) = dpla_i(i)
1140 uvar(i,2) = plap(i)
1141 uvar(i,3) = yld(i)
1142 ENDDO
1143
1144 ELSE
1145
1146#include "vectorize.inc"
1147 DO ii=1,nindx
1148 i = index(ii)
1149 svm_tab(i) = sqrt(svm2(i))
1150 dpla_j(i) = uvar(i,1) + em09
1151
1152
1153
1154
1155 jj(i) = 1
1156 ENDDO
1157 DO j=2,nrate-1
1158#include "vectorize.inc"
1159 DO ii=1,nindx
1160 i = index(ii)
1161 IF(plap(i) >= uparam(6+j)) jj(i) = j
1162 ENDDO
1163 ENDDO
1164
1165 IF (ismooth == 2) THEN
1166#include "vectorize.inc"
1167 DO ii=1,nindx
1168 i = index(ii)
1169 epsp1 =
max(uparam(6+jj(i)), em20)
1170 epsp2 = uparam(7+jj(i))
1171 rfac(i) = log(
max(plap(i),em20)/epsp1) / log(epsp2/epsp1)
1172 ENDDO
1173 ELSE
1174#include "vectorize.inc"
1175 DO ii=1,nindx
1176 i = index(ii)
1177 epsp1 = uparam(6+jj(i))
1178 epsp2 = uparam(7+jj(i))
1179 rfac(i) = (plap(i) - epsp1) / (epsp2 - epsp1)
1180 ENDDO
1181 END IF
1182
1183 nindex_vinter = 0
1184#include "vectorize.inc"
1185 DO ii=1,nindx
1186 i = index(ii)
1187 nindex_vinter = nindex_vinter + 1
1188 index_vinter(nindex_vinter) = i
1189 j1=jj(i)
1190 j2=jj(i)+1
1191 iposp(nindex_vinter) = vartmp(i,j1+2)
1192 iadp(nindex_vinter) = npf(ifunc(jj(i)) ) / 2 + 1
1193 ilenp(nindex_vinter) = npf(ifunc(jj(i)) + 1) / 2 - iadp(nindex_vinter) - iposp(nindex_vinter)
1194 iposp2(nindex_vinter) = vartmp(i,j2+2)
1195 iadp2(nindex_vinter) = npf(ifunc(jj(i)+1)) / 2 + 1
1196 ilenp2(nindex_vinter) = npf(ifunc(jj(i)+1) + 1) / 2 - iadp2(nindex_vinter) - iposp2(nindex_vinter)
1197 tab_loc(nindex_vinter) = pla(i)
1198 yfac(i,1)=uparam(6+nrate+j1)*facyldi(i)
1199 yfac(i,2)=uparam(6+nrate+j2)*facyldi(i)
1200 ENDDO
1201
1202 CALL vinter2(tf,iadp,iposp,ilenp,nindex_vinter,tab_loc,dydx1_loc,y1_loc)
1203 CALL vinter2(tf,iadp2,iposp2,ilenp2,nindex_vinter,tab_loc,dydx2_loc,y2_loc)
1204
1205 DO ii=1,nindex_vinter
1206 i = index_vinter(ii)
1207 j1 = jj(i)
1208 j2 = j1+1
1209 vartmp(i,j1+2) = iposp(ii)
1210 vartmp(i,j2+2) = iposp2(ii)
1211 ENDDO
1212#include "vectorize.inc"
1213 DO ii=1,nindex_vinter
1214 i = index_vinter(ii)
1215 y1(i) = y1_loc(ii)
1216 y2(i) = y2_loc(ii)
1217 dydx1(i)=dydx1_loc(ii)
1218 dydx2(i)=dydx2_loc(ii)
1219 ENDDO
1220
1221#include "vectorize.inc"
1222 DO ii=1,nindx
1223 i = index(ii)
1224
1225 j1 = jj(i)
1226 j2 = jj(i)+1
1227 y1(i) = yfac(i,1) * y1(i)
1228 y2(i) = yfac(i,2) * y2(i)
1229 fac = rfac(i)
1230 yld(i)= fail(i)*(y1(i) + fac
1231
1232 dydx1(i)=dydx1(i)*yfac(i,1)
1233 dydx2(i)=dydx2(i)*yfac(i,2)
1234 h(i) = fail(i)*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
1235 h(i) = h(i) *
max(zero,pfac(i))
1236 hi(i) = h(i)*(one-fisokin)
1237
1238 coef(i) = (y2(i)-y1(i))/(uparam(6+j2)-uparam(6+j1)) /timestep
1239 dfsr(i) = h(i)+ coef(i)
1240 dfsr(i) = dfsr(i) * (one-fisokin)*
max(zero,pfac(i))
1241
1242 y1(i)=tf(npf(ifunc(j1))+1)
1243 y2(i)=tf(npf(ifunc(j2))+1)
1244 y1(i)= y1(i)*yfac(i,1)
1245 y2(i)= y2(i)*yfac(i,2)
1246 coef(i) =
max(zero,pfac(i))*fisokin * fail(i)*(y2(i)-y1(i))
1247 . /(uparam(6+j2)-uparam(6+j1)) /timestep
1248 yld(i) = (one-fisokin) * yld(i) +
1249 . fisokin * (fail(i)*(y1(i) + fac*(y2(i)-y1(i))))
1250 yld(i) =
max(yld(i),em20)
1251 yld(i) = yld(i)*
max(zero,pfac(i))
1252 ENDDO
1253
1254
1255
1256 DO k=1,niter
1257#include "vectorize.inc"
1258 DO ii=1,nindx
1259 i = index(ii)
1260
1261 dpla_i(i) = dpla_j(i)
1262 pla(i) = plaold(i) + dpla_i(i)
1263 plap(i) = dpla_i(i) / timestep
1264 r(i) = yld(i)/(yld(i) +(g3(i)+fisokin*h(i))*dpla_i(i))
1265 svm = r(i)* svm_tab(i)
1266 f = svm - yld(i) - (g3(i)+fisokin*h(i)) *dpla_i(i)
1267 df =-(g3(i)+fisokin*h(i)) - (dfsr(i) + coef(i))
1268 df = sign(
max(abs(df),em20),df)
1269 IF(dpla_i(i) > zero) THEN
1270 dpla_j(i)=
max( em10 ,dpla_i(i)-f/df)
1271 ELSE
1272 dpla_j(i)=em10
1273 ENDIF
1274
1275
1276
1277 pla(i) = plaold(i) + dpla_j(i)
1278 plap(i) = dpla_j(i) / timestep
1279 jj(i) = 1
1280 ENDDO
1281 DO j=2,nrate-1
1282#include "vectorize.inc"
1283 DO ii=1,nindx
1284 i = index(ii)
1285 IF(plap(i) >= uparam(6+j)) jj(i) = j
1286 ENDDO
1287 ENDDO
1288
1289 IF (ismooth == 2) THEN
1290#include "vectorize.inc"
1291 DO ii=1,nindx
1292 i = index(ii)
1293 epsp1 =
max(uparam(6+jj(i)), em20)
1294 epsp2 = uparam(7+jj(i))
1295 rfac(i) = log(
max(plap(i),em20)/epsp1) / log(epsp2/epsp1)
1296 ENDDO
1297 ELSE
1298#include "vectorize.inc"
1299 DO ii=1,nindx
1300 i = index(ii)
1301 epsp1 = uparam(6+jj(i))
1302 epsp2 = uparam(7+jj(i))
1303 rfac(i) = (plap(i) - epsp1) / (epsp2 - epsp1)
1304 ENDDO
1305 END IF
1306
1307 nindex_vinter = 0
1308#include "vectorize.inc"
1309 DO ii=1,nindx
1310 i = index(ii)
1311 nindex_vinter = nindex_vinter + 1
1312 index_vinter(nindex_vinter) = i
1313 j1=jj(i)
1314 j2=jj(i)+1
1315 iposp(nindex_vinter) = vartmp(i,j1+2)
1316 iadp(nindex_vinter) = npf(ifunc(jj(i)) ) / 2 + 1
1317 ilenp(nindex_vinter) = npf(ifunc(jj(i)) + 1) / 2 - iadp(nindex_vinter) - iposp(nindex_vinter)
1318 iposp2(nindex_vinter) = vartmp(i,j2+2)
1319 iadp2(nindex_vinter) = npf(ifunc(jj(i)+1)) / 2 + 1
1320 ilenp2(nindex_vinter) = npf(ifunc(jj(i)+1) + 1) / 2 - iadp2(nindex_vinter) - iposp2(nindex_vinter)
1321 tab_loc(nindex_vinter) = pla(i)
1322 yfac(i,1)=uparam(6+nrate+j1)*facyldi(i)
1323 yfac(i,2)=uparam(6+nrate+j2)*facyldi(i)
1324 ENDDO
1325
1326 CALL vinter2(tf,iadp,iposp,ilenp,nindex_vinter,tab_loc,dydx1_loc,y1_loc)
1327 CALL vinter2(tf,iadp2,iposp2,ilenp2,nindex_vinter,tab_loc,dydx2_loc,y2_loc)
1328
1329 DO ii=1,nindex_vinter
1330 i = index_vinter(ii)
1331 j1 = jj(i)
1332 j2 = j1+1
1333 vartmp(i,j1+2) = iposp(ii)
1334 vartmp(i,j2+2) = iposp2(ii)
1335 ENDDO
1336#include "vectorize.inc"
1337 DO ii=1,nindex_vinter
1338 i = index_vinter(ii)
1339 y1(i) = y1_loc(ii)
1340 y2(i) = y2_loc(ii)
1341 dydx1(i)=dydx1_loc(ii)
1342 dydx2(i)=dydx2_loc(ii)
1343 ENDDO
1344
1345#include "vectorize.inc"
1346 DO ii=1,nindx
1347 i = index(ii)
1348
1349 j1 = jj(i)
1350 j2 = jj(i)+1
1351 y1(i) = yfac(i,1) * y1(i)
1352 y2(i) = yfac(i,2) * y2(i)
1353 fac = rfac(i)
1354 yld(i)= fail(i)*(y1(i) + fac*(y2(i)-y1(i)))
1355 dydx1(i)=dydx1(i)*yfac(i,1)
1356 dydx2(i)=dydx2(i)*yfac(i,2)
1357 h(i) = fail(i)*(dydx1(i) + fac*(dydx2(i)-dydx1(i)))
1358 h(i) = h(i) *
max(zero,pfac(i))
1359 hi(i)= h(i)*(one-fisokin)
1360 dfsr(i) = hi(i)+
max(zero,pfac(i))* (one-fisokin)*(y2(i)-y1(i))
1361 . /(uparam(7+jj(i))-uparam(6+jj(i))) /timestep
1362 y1(i)=tf(npf(ifunc(j1))+1)
1363 y2(i)=tf(npf(ifunc(j2))+1)
1364 y1(i)=y1(i)*yfac(i,1)
1365 y2(i)=y2(i)*yfac(i,2)
1366 coef(i) =
max(zero,pfac(i))*fisokin * fail(i)*(y2(i)-y1(i))
1367 . /(uparam(6+j2)-uparam(6+j1)) /timestep
1368 yld(i) = (one-fisokin) * yld(i) +
1369 . fisokin * (fail(i)*(y1(i) + fac*(y2(i)-y1(i))))
1370 yld(i) =
max(yld(i),em20)
1371 yld(i) = yld(i) *
max(zero,pfac(i))
1372 ENDDO
1373 ENDDO
1374#include "vectorize.inc"
1375 DO ii=1,nindx
1376 i = index(ii)
1377 pla(i) = plaold(i) + dpla_i(i)
1378 plap(i) = dpla_i(i) / timestep
1379 signxx(i) = signxx(i)*r(i)
1380 signyy(i) = signyy(i)*r(i)
1381 signzz(i) = signzz(i)*r(i)
1382 signxy(i) = signxy(i)*r(i)
1383 signyz(i) = signyz(i)*r(i)
1384 signzx(i) = signzx(i)*r(i)
1385 dpla1(i) = dpla_i(i)
1386 uvar(i,1) = dpla_i(i)
1387 uvar(i,2) = plap(i)
1388 uvar(i,3) = yld(i)
1389 ENDDO
1390 ENDIF
1391 ENDIF
1392
1393 ENDIF
1394
1395 IF (ipla /= 1 .OR. impl_s <= 0) THEN
1396
1397 IF (fisokin == one ) THEN
1398#include "vectorize.inc"
1399 DO i=1,nel
1400 dsxx = sigexx(i) - signxx(i)
1401 dsyy = sigeyy(i) - signyy(i)
1402 dszz = sigezz(i) - signzz(i)
1403 dsxy = sigexy(i) - signxy(i)
1404 dsyz = sigeyz(i) - signyz(i)
1405 dszx = sigezx(i
1406
1407 hkin = two_third*fisokin*h(i)
1408 alpha = hkin/(g2(i)+hkin)
1415
1416
1417 sigbxx(i) = sigbxx(i) + sigpxx
1418 sigbyy(i) = sigbyy(i) + sigpyy
1419 sigbzz(i) = sigbzz(i) + sigpzz
1420 sigbxy(i) = sigbxy(i) + sigpxy
1421 sigbyz(i) = sigbyz(i) + sigpyz
1422 sigbzx(i) = sigbzx(i) + sigpzx
1423
1424
1425 signxx(i) = signxx(i) + sigbxx(i)
1426 signyy(i) = signyy(i) + sigbyy(i)
1427 signzz(i) = signzz(i) + sigbzz(i)
1428 signxy(i) = signxy(i) + sigbxy(i)
1429 signyz(i) = signyz(i) + sigbyz(i)
1430 signzx(i) = signzx(i) + sigbzx(i)
1431 ENDDO
1432
1433 ELSEIF (fisokin > zero) THEN
1434#include "vectorize.inc"
1435 DO i=1,nel
1436 dsxx = sigexx(i) - signxx(i)
1437 dsyy = sigeyy(i) - signyy(i)
1438 dszz = sigezz(i) - signzz(i)
1439 dsxy = sigexy(i) - signxy(i)
1440 dsyz = sigeyz(i) - signyz(i)
1441 dszx = sigezx(i) - signzx(i)
1442
1443 hkin = two_third*fisokin*h(i)
1444 alpha = hkin/(g2(i)+hkin)
1451
1452
1453 sigbxx(i) = sigbxx(i) + sigpxx
1454 sigbyy(i) = sigbyy(i) + sigpyy
1455 sigbzz(i) = sigbzz(i) + sigpzz
1456 sigbxy(i) = sigbxy(i) + sigpxy
1457 sigbyz(i) = sigbyz(i) + sigpyz
1458 sigbzx(i) = sigbzx(i) + sigpzx
1459
1460
1461 signxx(i) = signxx(i) + sigbxx(i)
1462 signyy(i) = signyy(i) + sigbyy(i)
1463 signzz(i) = signzz(i) + sigbzz(i)
1464 signxy(i) = signxy(i) + sigbxy(i)
1465 signyz(i) = signyz(i) + sigbyz(i)
1466 signzx(i) = signzx(i) + sigbzx(i)
1467 ENDDO
1468 ENDIF
1469 END IF
1470
1471 IF (ieos == 0) THEN
1472 DO i=1,nel
1473
1474 p = bulk(i) * amu(i)
1475 signxx(i) = signxx(i) - p
1476 signyy(i) = signyy(i) - p
1477 signzz(i) = signzz(i) - p
1478 ENDDO
1479 ELSE
1480
1481
1482
1483 DO i = 1, nel
1484 soundsp(i) = sqrt((dpdm(i) + four*g(i)/three)/rho0(i))
1485 ENDDO
1486 END IF
1487
1488
1489 IF (impl_s > 0) THEN
1490
1491
1492
1493
1494 DO i=1,nel
1495 IF(dpla1(i) > 0) etse(i)= h(i)/g2(i
1496 ENDDO
1497 DO i = 1,nel
1498 IF (dpla1(i) > zero) THEN
1499
1500
1501
1502 vm =half*(sigexx(i)**2+sigeyy(i)**2+sigezz(i)**2)
1503 . +sigexy(i)**2+sigeyz(i)**2+sigezx(i)**2
1504 vm_1 =one/sqrt(three*vm)
1505 g3h = g3(i)+h(i)
1506 r(i) =
max(zero,one-g3h*dpla1(i)*vm_1)
1507
1508
1509
1510
1511 signor(i,1)=sigexx(i)*norm_1
1512 signor(i,2)=sigeyy
1513 signor(i,3)=sigezz(i)*norm_1
1514 signor(i,4)=sigexy(i)*norm_1
1515 signor(i,5)=sigeyz(i)*norm_1
1516 signor(i,6)=sigezx(i)*norm_1
1517
1518
1519 al_imp(i)= one - g3(i)*dpla1(i)*vm_1
1520 ELSE
1521 al_imp(i)=one
1522 ENDIF
1523 ENDDO
1524 ENDIF
1525
1526 DO i=1,nel
1527 IF (off(i) < em01) off(i) = zero
1528 IF (off(i) < one) off(i) = off(i)*four_over_5
1529 ENDDO
1530
1531 IF (ifail > 0) THEN
1532 nindx = 0
1533 IF (ifail == 2) THEN
1534 IF (inloc > 0) THEN
1535 DO i=1,nel
1536 IF (epsmax < ep20) dmg(i) =
max(dmg(i),planl(i)/epsmax)
1537 IF ((planl(i) > epsmax .OR. epstt(i) > epsf) .AND. off(i) == one) THEN
1538 off(i)= four_over_5
1539 nindx = nindx+1
1540 indx(nindx) = i
1541 ENDIF
1542 ENDDO
1543 ELSE
1544 DO i=1,nel
1545 IF (epsmax < ep20) dmg(i) =
max(dmg(i),pla(i)/epsmax)
1546 IF ((pla(i) > epsmax .OR. epstt(i) > epsf) .AND. off(i) == one) THEN
1547 off(i)= four_over_5
1548 nindx = nindx+1
1549 indx(nindx) = i
1550 ENDIF
1551 ENDDO
1552 ENDIF
1553 ELSE
1554 IF (inloc > 0) THEN
1555 DO i=1,nel
1556 IF (epsmax < ep20) dmg(i) = planl(i)/epsmax
1557 IF (planl(i) > epsmax .AND. off(i) == one) THEN
1558 off(i)= four_over_5
1559 nindx = nindx+1
1560 indx(nindx) = i
1561 ENDIF
1562 ENDDO
1563 ELSE
1564 DO i=1,nel
1565 IF (epsmax < ep20) dmg(i) = pla(i)/epsmax
1566 IF (pla(i) > epsmax .AND. off(i) == one) THEN
1567 off(i)= four_over_5
1568 nindx = nindx+1
1569 indx(nindx) = i
1570 ENDIF
1571 ENDDO
1572 ENDIF
1573 END IF
1574 IF (nindx > 0 .AND. imconv == 1) THEN
1575 DO j=1,nindx
1576#include "lockon.inc"
1577 WRITE(iout, 1000) ngl(indx(j))
1578 WRITE(istdo,1100) ngl(indx(j)),tt
1579#include "lockoff.inc"
1580 ENDDO
1581 ENDIF
1582 ENDIF
1583
1584 1000 FORMAT(1x,'RUPTURE OF SOLID ELEMENT NUMBER ',i10)
1585 1100 FORMAT(1x,'RUPTURE OF SOLID ELEMENT NUMBER ',i10, ' AT TIME :',g11.4)
1586
1587 RETURN
subroutine m36iter_imp(signxx, signyy, signzz, signxy, signyz, signzx, pla, yld, g3, yfac, dpla1, h, tf, iad1, ilen1, nel, fisokin, vartmp, pla0, plam, y1, dydx1, ipflag, pfun, ipfun, iposp, nrate, npf, iadp, ilenp, pfac, pscale1, dfdp, fail, nvartmp, sigbxx, sigbyy, sigbzz, sigbxy, sigbyz, sigbzx)
subroutine vinter2(tf, iad, ipos, ilen, nel0, x, dydx, y)
subroutine vinter(tf, iad, ipos, ilen, nel, x, dydx, y)