48
49
50
53 USE sensor_mod
54
55
56
57#include "implicit_f.inc"
58
59
60
61#include "mvsiz_p.inc"
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
106
107
108
109#include "param_c.inc"
110#include "com04_c.inc"
111#include "com01_c.inc"
112#include "com08_c.inc"
113
114
115
116 INTEGER ,INTENT(IN) :: NSENSOR
117 INTEGER ,INTENT(IN) :: NIPARAM
118 INTEGER ,INTENT(IN) :: NUPARAM
119 INTEGER :: NEL0, NUVAR,NPT0,IPT,ISMSTR
120 INTEGER :: NGL(NEL0),MAT(NEL0)
121 INTEGER ,DIMENSION(NIPARAM) ,INTENT(IN) :: IPARAM
122 my_real ,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
124 .
area(nel0),rho0(nel0),eint(nel0,2),
125 . thkly(nel0),pla(nel0),offgg(nel0),tan_phi(nel0),
126 . depsxx(nel0),depsyy(nel0),
127 . depsxy(nel0),depsyz(nel0),depszx(nel0),
128 . epsxx(nel0) ,epsyy(nel0) ,
129 . epsxy(nel0) ,epsyz(nel0) ,epszx(nel0) ,
130 . sigoxx(nel0),sigoyy(nel0),
131 . sigoxy(nel0),sigoyz(nel0),sigozx(nel0),
132 . pm(npropm,*),shf(*),aldt(nel0)
133
134
135
137 . signxx(nel0),signyy(nel0),
138 . signxy(nel0),signyz(nel0),signzx(nel0),
139 . sigvxx(nel0),sigvyy(nel0),
140 . sigvxy(nel0),sigvyz(nel0),sigvzx(nel0),
141 . soundsp(nel0),viscmax(nel0),etse(nel0)
142
143
144
145 my_real uvar(nel0,nuvar), off(nel0),thk(nel0),yld(nel0)
146 TYPE(TTABLE) TABLE(*)
148 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
149
150
151
152 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
154 EXTERNAL finter
155
156
157
158
159
160
161
162
163
164
165 INTEGER I,J,NC,NT,ISENS,ITER,NITER,NINDX,NUMOFF,UNLOAD,IERR,
166 . IFUNCC,IFUNCT,IDXCNT,IDX1,IDX2,IERRT,IERRC,INDEX(MVSIZ),
167 . INDXOFF(MVSIZ),TAGOLDC,TAGOLDT,TAGC(0:1),TAGT(0:1)
169 . kc,kt,kfc,kft,g0,gt,gb,tan_lock,visce,viscg,lc0,lt0,
170 . kbc,kbt,dc0,dt0,hc0,ht0,ec0,et0,dc,dt,trace,gfrot,gsh,
171 . ac,at,bc,bt,bc2,bt2,dcc,dtt,func,funt,deric,derit,dtinv,
172 . tfrot,sigg,y,ec2,et2,sigc,sigt,sig0,udc,udt,fc,ft,
173 . fpc,fpt,ccl,ttl,dec,det,hc,ht,kf,kg,kmax,hdc,hdt,
174 . sinn,tan2,damp,rfac,rfat,v1,v2,areamin,dareamin
175 . aa,vv,zerostress,dsig,lmin,tstart,yfac(6),yy,phi,gxy,
176 . flex1,flex2,facc,fact,kfc0,kft0,etc,ett,phin,phii,sxyi,
177 . ddec,ddet,coeful,coefrl,dcc1,dtt1,dcc0,dtt0,phii2,sxyi2,
178 . epsi1,sigi1,epsi2,sigi2,kkc,kkt,eminc,emaxc,sminc,smaxc,
179 . emint,emaxt,smint,smaxt,face_c,face_t,facs_c,facs_t,
180 . face,facf,fate,fatf,fcl,ftl,fclp,ftlp,test,dphi,phio,kc0,kt0,
181 . dyc,dyt,mass
183 . ec(mvsiz),et(mvsiz),lc(mvsiz),lt(mvsiz),fn(mvsiz),sigg0(mvsiz)
184 . dtang(mvsiz),tfold(mvsiz),yc(mvsiz),yt(mvsiz),
185 . eminrlc(mvsiz),emaxrlc(mvsiz),epsmaxc(mvsiz),
186 . eminrlt(mvsiz),emaxrlt(mvsiz),epsmaxt(mvsiz),
187 . epsnc(mvsiz),epsnt(mvsiz),epsns(mvsiz),
188 . epsnrlc(mvsiz),epsnrlt(mvsiz),smaxrlc(mvsiz),smaxrlt(mvsiz),
189 . sminrlc(mvsiz),sigmaxc(mvsiz),sminrlt(mvsiz),sigmaxt(mvsiz),
190 . phimin(mvsiz),phimax(mvsiz),phirlmax(mvsiz),sxymax(mvsiz),
191 . sxymin(mvsiz),sxymaxrl(mvsiz),cvisc(mvsiz),cvist(mvsiz)
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214 niter = 3
215
216 unload = iparam(1)
217 isens = iparam(2)
218 nc = iparam(3)
219 nt = iparam(4)
220
221 lc0 = uparam( 1)
222 lt0 = uparam( 2)
223 dc0 = uparam( 3)
224 dt0 = uparam( 4)
225 hc0 = uparam( 5)
226 ht0 = uparam( 6)
227 kc0 = uparam( 9)
228 kt0 = uparam(10)
229 kkc = uparam(40)
230 kkt = uparam(41)
231 kfc0 = uparam(11)
232 kft0 = uparam(12)
233 g0 = uparam(13)
234 gt = uparam(14)
235 gb = uparam(15)
236 tan_lock = uparam(16)
237 visce = uparam(17)
238 viscg = uparam(18)
239 kbc = uparam(19)
240 kbt = uparam(20)
241 gfrot = uparam(21)
242 areamin = uparam(22)
243 dareamin = uparam(23)
244 zerostress = uparam(24)
245 flex1 = uparam(26)
246 flex2 = uparam(27)
247 gsh = uparam(32)*shf(1)
248 IF (zerostress > zero .and. isens > 0) THEN
249 tstart = sensor_tab(isens)%TSTART
250 ELSE
251 tstart = zero
252 ENDIF
253
254 yfac(1) = uparam(27 + 1 )
255 yfac(2) = uparam(27 + 2 )
256 yfac(3) = uparam(27 + 3 )
257 yfac(4) = uparam(33)
258 yfac(5) = uparam(34)
259 yfac(6) = uparam(42)
260
261 kfc = kfc0
262 kft = kft0
263 kc = kc0
264 kt = kt0
265 nindx = 0
266 numoff = 0
267
268
269
270 IF (npt0 ==1) THEN
271 DO i=1,nel0
272 IF (uvar(i,40)==one) cycle
273 depsxx(i) = depsxx(i)*uvar(i,40)
274 depsyy(i) = depsyy(i)*uvar(i,40)
275 aa =uvar(i,10)/g0
276 depsxy(i) = aa*(one-uvar(i,40))+depsxy(i)*uvar(i,40)
277 ENDDO
278 ENDIF
279
280 IF (unload == 0) THEN
281
282
283
284 IF (kbc == zero) THEN
285 ccl = ep30
286 ELSE
287 ccl = kc / kbc
288 ENDIF
289
290 IF (kbt == zero) THEN
291 ttl = ep30
292 ELSE
293 ttl = kt / kbt
294 ENDIF
295 DO i=1,nel0
296 IF(offgg(i) > zero) THEN
297 nindx = nindx+1
298 index(nindx)=i
299 ELSE
300 numoff = numoff+1
301 indxoff(numoff)=i
302 ENDIF
303 ENDDO
304#include "vectorize.inc"
305 DO j=1,nindx
306 i=index(j)
307 yc(i) = uvar(i,7)
308 yt(i) = uvar(i,8)
309 tfold(i) = uvar(i,9)
310 mass = rho0(i)*
area(i)*thkly(i)*fourth
311 dtinv = timestep(i)/
max(timestep(i)*timestep(i),em20)
312 cvisc(i) = sqrt(mass*kfc0)*dtinv*third
313 cvist(i) = sqrt(mass*kft0)*dtinv*third
314 ENDDO
315
316
317#include "vectorize.inc"
318 DO j=1,nindx
319 i=index(j)
320 etc =uvar(i,4)+depsxx(i)
321 ett =uvar(i,5)+depsyy(i)
322 uvar(i,4) = etc
323 uvar(i,5) = ett
324 ec(i) = exp(etc) - one
325 et(i) = exp(ett) - one
326 ENDDO
327#include "vectorize.inc"
328 DO j=1,nindx
329 i=index(j)
330 lc(i) = lc0 * (one + ec(i))
331 lt(i) = lt0 * (one + et(i))
332 ENDDO
333
334
335 ac = kc*dc0
336 ac = ac*ac
337 at = kt*dt0
338 at = at*at
339#include "vectorize.inc"
340 DO j=1,nindx
341 i=index(j)
342 fn(i) = zero
343
344 dyc = zero
345 dyt = zero
346 DO iter = 1, niter
347 hc = hc0 + yc(i)
348 ht = ht0 + yt(i)
349 dc = sqrt(lc(i)*lc(i) + hc*hc)
350 dt = sqrt(lt(i)*lt(i) + ht*ht)
351 udc = one / dc
352 udt = one / dt
353 hdc = hc * udc
354 hdt = ht * udt
355 dcc = dc - dc0
356 dtt = dt - dt0
357 IF (kfunc(1) /= 0) THEN
358 fc = yfac(1)*finter(kfunc(1),dcc,npf,tf,fpc)
359 fpc = fpc *yfac(1)
360 kc = fpc
361 kfc = flex1*fpc*hc0/dc0
362 IF(kfc == zero)kfc=kfc0
363 fpc = fpc*hdc
364 ELSEIF (dcc >= ccl ) THEN
365 fc = half * kc*ccl
366 fpc = zero
367 ELSE
368 fc = (kc - half*kbc * dcc) * dcc
369 fpc = (kc - kbc*dcc) * hdc
370 ENDIF
371 IF (kfunc(2) /= 0) THEN
372 ft = yfac(2)*finter(kfunc(2),dtt,npf,tf,fpt)
373 fpt = fpt * yfac(2)
374 kt = fpt
375 kft = flex2*fpt*ht0/dt0
376 IF(kft == zero)kft=kft0
377 fpt = fpt*hdt
378 ELSEIF (dtt >= ttl ) THEN
379 ft = half * kt*ttl
380 fpt = zero
381 ELSE
382 ft = (kt - half*kbt * dtt) * dtt
383 fpt = (kt - kbt*dtt) * hdt
384 ENDIF
385 func = kfc*yc(i) + fc*hc/dc + cvisc(i)*dyc
386 funt = kft*yt(i) + ft*ht/dt + cvist(i)*dyt
387 deric= kfc + fpc*hdc + fc*udc*(one - hdc*hdc) + cvisc(i)
388 derit= kft + fpt*hdt + ft*udt*(one - hdt*hdt) + cvist(i)
389
390 yc(i) = yc(i) - func / deric
391 yt(i) = yt(i) - funt / derit
392 dyc = yc(i) - uvar(i,7)
393 dyt = yt(i) - uvar(i,8)
394 fn(i) = zero
395 ENDDO
396
397 dyc = zero
398 dyt = zero
399 IF ((yc(i) + yt(i)) < zero) THEN
400 y = half * (uvar(i,7) - uvar(i,8))
401 DO iter = 1, niter
402 hc = hc0 + y
403 ht = ht0 - y
404 dc = sqrt(lc(i)*lc(i) + hc*hc)
405 dt = sqrt(lt(i)*lt(i) + ht*ht)
406 dcc = dc - dc0
407 dtt = dt - dt0
408 udc= one / dc
409 udt= one / dt
410 hdc= hc * udc
411 hdt= ht * udt
412 IF (kfunc(1) /= 0) THEN
413 fc =yfac(1)* finter(kfunc(1),dcc,npf,tf,fpc)
414 fpc = fpc *yfac(1)
415 kc = fpc
416 kfc = flex1*fpc*hc0/dc0
417 IF(kfc == zero)kfc=kfc0
418 fpc = fpc*hdc
419 ELSEIF (dcc >= ccl ) THEN
420 fc = half * kc*ccl
421 fpc = zero
422 ELSE
423 fc = (kc - half*kbc * dcc) * dcc
424 fpc = (kc - kbc*dcc) * hdc
425 ENDIF
426 IF (kfunc(2) /= 0) THEN
427 ft = yfac(2)*finter(kfunc(2),dtt,npf,tf,fpt)
428 fpt = fpt * yfac(2)
429 kt = fpt
430 kft = flex2*fpt*ht0/dt0
431 IF(kft == zero)kft=kft0
432 fpt = fpt*hdt
433 ELSEIF (dtt >= ttl ) THEN
434 ft = half * kt*ttl
435 fpt = zero
436 ELSE
437 ft = (kt - half*kbt * dtt) * dtt
438 fpt = (kt - kbt*dtt) * hdt
439 ENDIF
440
441 kf = kfc + kft
442 func = kf*y + fc * hdc - ft * hdt
443 . + (cvisc(i) + cvist(i))*dyc
444 deric = kf + fpc*hdc + fc*udc*(one - hdc*hdc)
445 . + fpt*hdt + ft*udt*(one - hdt*hdt)
446 . + cvisc(i) + cvist(i)
447 y = y - func / deric
448 dyc = y - half * (uvar(i,7) - uvar(i,8))
449
450 IF (y > 0) THEN
452 ELSE
454 ENDIF
455 ENDDO
456
457 yc(i) = y
458 yt(i) =-y
459 fn(i) = fc*hc/dc + ft*ht/dt
460 ENDIF
461 hc = hc0 + yc(i)
462 ht = ht0 + yt(i)
463 dc = sqrt(lc(i)*lc(i) + hc*hc)
464 dt = sqrt(lt(i)*lt(i) + ht*ht)
465 ENDDO
466
467#include "vectorize.inc"
468 DO j=1,nindx
469 i=index(j)
470 hc = hc0 + yc(i)
471 ht = ht0 + yt(i)
472 dc = sqrt(lc(i)*lc(i) + hc*hc)
473 dt = sqrt(lt(i)*lt(i) + ht*ht)
474 dcc = dc - dc0
475 dtt = dt - dt0
476 IF (kfunc(1) /= 0) THEN
477 fc =yfac(1)* finter(kfunc(1),dcc,npf,tf,fpc)
478 fpc = fpc *yfac(1)
479 kc = fpc
480 ELSEIF (dcc >= ccl ) THEN
481 fc = half * kc*ccl
482 ELSE
483 fc = (kc - half*kbc * dcc) * dcc
484 ENDIF
485 IF(kfunc(2) /= 0)THEN
486 ft = yfac(2)*finter(kfunc(2),dtt,npf,tf,fpt)
487 fpt = fpt * yfac(2)
488 kt = fpt
489 ELSEIF (dtt >= ttl ) THEN
490 ft = half * kt*ttl
491 ELSE
492 ft = (kt - half*kbt * dtt) * dtt
493 ENDIF
494
495
496
497
498
499
500
501 trace = exp(epsxx(i) + epsyy(i))! =exp(tr)
502 ec2 =
max(trace / (ec(i) + one), em6)
503 et2 =
max(trace / (et(i) + one), em6)
504 rfac = nc / ec2
505 rfat = nt / et2
506
507 sigc = fc * lc(i) / dc
508 sigt = ft * lt(i) / dt
509 signxx(i) = sigc * rfac
510 signyy(i) = sigt * rfat
511
512 uvar(i,1) = sigc
513 uvar(i,2) = sigt
514 uvar(i,15) = dc
515 uvar(i,16) = dt
516
517
518
519
520
521
522
523
524 sig0 = uvar(i,10)
525 tan_phi(i)= depsxy(i)
526 tan2 = tan_phi(i)*tan_phi(i)
527 IF (kfunc(3) /= 0)THEN
528 phi = atan(tan_phi(i))*hundred80/pi
529 signxy(i) = yfac(3)* finter(kfunc(3),phi,npf,tf,gxy)
530 kg = gxy*yfac(3)*tan2
531 ELSEIF (tan_phi(i) > tan_lock) THEN
532 signxy(i) = gt*tan_phi(i) + gb - sig0
533 kg = gt*tan2
534 ELSEIF (tan_phi(i) < -tan_lock) THEN
535 signxy(i) = gt*tan_phi(i) - gb - sig0
536 kg = gt*tan2
537 ELSE
538 signxy(i) = g0*tan_phi(i) - sig0
539 kg = g0*tan2
540 ENDIF
541
542 dtinv = timestep(i)/
max(timestep(i)*timestep(i),em20)
543 damp = sqrt(rho0(i)*
area(i)*thkly(i)*half)
544 v1 = visce*damp*sqrt(nc*kc)
545 v2 = visce*damp*sqrt(nt*kt)
546 sigvxx(i) = dtinv*(depsxx(i))*v1
547 sigvyy(i) = dtinv*(depsyy(i))*v2
548
549 IF (fn(i) > zero) THEN
550 tfrot = two_third*viscg*fn(i)*(hc0+ht0)/(lc(i)+lt(i))
551 dtang(i) = depsxy(i) - tan_phi(i)
552 sigg = tfold(i) + gfrot*dtang(i)
553 IF (abs(sigg) > tfrot) THEN
554 sigvxy(i) = sign(tfrot,sigg)
555 ELSE
556 sigvxy(i) = sigg
557 ENDIF
558 ENDIF
559
560 sinn = tan_phi(i) / sqrt(one + tan2)
561 kmax =
max(kc0*rfac,kt0*rfat)*(one+sinn) + kg
562 lmin =
min(dc/dc0,dt/dt0)*uvar(i,14)
563
564 soundsp(i) = sqrt(kmax/(rho0(i)))*aldt(i)/lmin
565 viscmax(i) =
max(v1,v2)
566 etse(i) = one
567 ENDDO
568
569#include "vectorize.inc"
570 DO j=1,nindx
571 i=index(j)
572 uvar(i,3) = signxy(i) + sigvxy(i)
573 tan_phi(i)= depsxy(i)
574 uvar(i,6) = depsxy(i)
575 uvar(i,7) = yc(i)
576 uvar(i,8) = yt(i)
577 uvar(i,9) = sigvxy(i)
578
579 signyz(i) = sigoyz(i) + gsh *depsyz(i)
580 signzx(i) = sigozx(i) + gsh *depszx(i)
581 ENDDO
582
583
584 ELSE
585
586!=========================================================
587 niter = 5
588 epsi1 = uparam(36)
589 sigi1 = uparam(37)
590 epsi2 = uparam(38)
591 sigi2 = uparam(39)
592 phii = uparam(43)
593 sxyi = uparam(44)
594 phii2 = uparam(45)
595 sxyi2 = uparam(46)
596 IF (isigi == 0) THEN
597 IF (time == zero)THEN
598 DO i=1,nel0
599 uvar(i,15)= dc0
600 uvar(i,16)= dt0
601 ENDDO
602 ENDIF
603 ENDIF
604 DO i=1,nel0
605 IF(offgg(i) > zero) THEN
606 nindx = nindx+1
607 index(nindx)=i
608 ELSE
609 numoff = numoff+1
610 indxoff(numoff)=i
611 ENDIF
612 ENDDO
613#include "vectorize.inc"
614 DO j=1,nindx
615 i=index(j)
616 yc(i) = uvar(i,7)
617 yt(i) = uvar(i,8)
618 tfold(i) = uvar(i,9)
619 ENDDO
620
621#include "vectorize.inc"
622 DO j=1,nindx
623 i=index(j)
624 etc =uvar(i,4)+depsxx(i)
625 ett =uvar(i,5)+depsyy(i)
626 uvar(i,4) = etc
627 uvar(i,5) = ett
628 ec(i) = exp(etc) - one
629 et(i) = exp(ett) - one
630 ENDDO
631#include "vectorize.inc"
632 DO j=1,nindx
633 i=index(j)
634 lc(i) = one + ec(i)
635 lt(i) = one + et(i)
636 epsmaxc(i) = uvar(i,17)
637 eminrlc(i) = uvar(i,18)
638 emaxrlc(i) = uvar(i,19)
639 sigmaxc(i) = uvar(i,20)
640 sminrlc(i) = uvar(i,25)
641 smaxrlc(i) = uvar(i,27)
642 epsmaxt(i) = uvar(i,21)
643 eminrlt(i) = uvar(i,22)
644 emaxrlt(i) = uvar(i,23)
645 sigmaxt(i) = uvar(i,24)
646 sminrlt(i) = uvar(i,26)
647 smaxrlt(i) = uvar(i,28)
648 ENDDO
649#include "vectorize.inc"
650 DO j=1,nindx
651 i=index(j)
652 fn(i) = zero
653
654 hc = hc0 + yc(i)
655 ht = ht0 + yt(i)
656 dc = sqrt(lc(i)*lc(i) + hc*hc)
657 dt = sqrt(lt(i)*lt(i) + ht*ht)
658 dcc = uvar(i,15) - dc0
659 dtt = uvar(i,16) - dt0
660 ddec = dc - uvar(i,15)
661 ddet = dt - uvar(i,16)
662 IF (dcc >zero ) THEN
663 IF ((ddec >=zero .AND. dcc> = uvar(i,17)) .OR.
664 . (ddec >=zero .AND. uvar(i,17)==uvar(i,18)) ) THEN
665
666 DO iter = 1, niter
667 hc = hc0 + yc(i)
668 dc = sqrt(lc(i)*lc(i) + hc*hc)
669 dcc = dc - dc0
670 dcc =
max(uvar(i,18),dcc)
671 dc = dcc + dc0
672 udc = one / dc
673 hdc = hc * udc
674 IF (kfunc(1) == 0) THEN
675 fc = kc0 * dcc
676 fpc = kc0 * hdc
677 ELSE
678 fc = yfac(1) * finter(kfunc(1),dcc,npf,tf,fpc)
679 fpc = fpc * yfac(1)
680 kc = fpc
681 fpc = fpc * hdc
682 ENDIF
683 epsmaxc(i) = dcc
684 sigmaxc(i) = fc
685 smaxrlc(i) = sigmaxc(i)
686 emaxrlc(i) = epsmaxc(i)
687 func = kfc*yc(i) + fc*hc/dc
688 deric= kfc + fpc*hdc + fc*udc*(one - hdc*hdc)
689 yc(i) = yc(i) - func / deric
690 eminrlc(i) = dcc
691 sminrlc(i) = fc
692 ENDDO
693
694 ELSEIF(ddec >=zero ) THEN
695
696 DO iter = 1, niter
697 hc = hc0 + yc(i)
698 dc = sqrt(lc(i)*lc(i) + hc*hc) ! long fibre
699 dcc = dc - dc0
700 dcc =
max(uvar(i,18),dcc)
701 dc = dcc + dc0
702 udc = one / dc
703 hdc = hc * udc
704 epsnrlc(i) = uvar(i,17)*(dcc - uvar(i,18)) /(uvar(i,17)-uvar(i,18))
705 IF (kfunc(1) == 0) THEN
706 fc = kc0 * dcc
707 fpc = kc0 * hdc
708 ELSE
709 fc = yfac(1) * finter(kfunc(1),epsnrlc(i),npf,tf,fpc)
710 coefrl = (uvar(i,20) - uvar(i,25))/uvar(i,20)
711 fc = uvar(i,25) + coefrl * fc
712 fpc = fpc * yfac(1)
713 fpc = fpc * uvar(i,17)* (uvar(i,20) - uvar(i,25))
714 . /(uvar(i,17)-uvar(i,18))/uvar(i,20)
715 kc = fpc
716 fpc = fpc * hdc
717 ENDIF
718 emaxrlc(i)= dcc
719 smaxrlc(i) = fc
720 func = kfc*yc(i) + fc*hc/dc
721 deric= kfc + fpc*hdc + fc*udc*(one - hdc*hdc)
722 yc(i) = yc(i) - func / deric
723 ENDDO
724 IF(dcc>uvar(i,17))then
725 epsmaxc(i) = dcc
726 sigmaxc(i) = fc
727 ENDIF
728
729 ELSE
730
731 IF (uvar(i,19) > zero) THEN
732 DO iter = 1, niter
733 hc = hc0 + yc(i)
734 dc = sqrt(lc(i)*lc(i) + hc*hc)
735 dcc = dc - dc0
737 dc = dcc + dc0
738 udc = one / dc
739 hdc = hc * udc
740 epsnc(i) = dcc*epsi1/uvar(i,19)
741 IF (kfunc(1) == 0) THEN
742 fc = kc0 * dcc
743 fpc = kc0 * hdc
744 ELSE
745 fc = yfac(4) * finter(kfunc(4),epsnc(i),npf,tf,fpc)
746 fpc = fpc*yfac(4)
747 coeful = fc/sigi1
748 fc = coeful *uvar(i,27) !smaxrlc(i)
749 fpc = fpc*uvar(i,27)*epsi1/uvar(i,19)/sigi1
750 kc = fpc
751 fpc = fpc * hdc
752 ENDIF
753 eminrlc(i)= dcc
754 sminrlc(i) = fc
755 func = kfc*yc(i) + fc*hc/dc
756 deric= kfc + fpc*hdc + fc*udc*(one - hdc*hdc)
757 yc(i) = yc(i) - func / deric
758 ENDDO
759 else
760 DO iter = 1, niter
761 hc = hc0 + yc(i)
762 dc = sqrt(lc(i)*lc(i) + hc*hc)
763 udc = one / dc
764 hdc = hc * udc
765 dcc = dc - dc0
766 fc = kkc * dcc
767 fpc = kkc * hdc
768 kc = kkc
769 func = kfc*yc(i) + fc*hc/dc
770 deric= kfc + fpc*hdc + fc*udc*(one - hdc*hdc)
771 yc(i) = yc(i) - func / deric
772 fn(i) = zero
773 ENDDO
774 epsmaxc(i) = zero
775 sigmaxc(i) = zero
776 smaxrlc(i) = zero
777 emaxrlc(i)= zero
778 eminrlc(i) = zero
779 sminrlc(i) = zero
780 endif
781
782 ENDIF
783 ELSE
784 DO iter = 1, niter
785 hc = hc0 + yc(i)
786 dc = sqrt(lc(i)*lc(i) + hc*hc)
787 udc = one / dc
788 hdc = hc * udc
789 dcc = dc - dc0
790
791 fc = kkc * dcc
792 kc = kkc
793 fpc = kkc * hdc
794 func = kfc*yc(i) + fc*hc/dc
795 deric= kfc + fpc*hdc + fc*udc*(one - hdc*hdc)
796 yc(i) = yc(i) - func / deric
797 fn(i) = zero
798 ENDDO
799 epsmaxc(i) = zero
800 eminrlc(i) = zero
801 emaxrlc(i) = zero
802 sigmaxc(i) = zero
803 sminrlc(i) = zero
804 smaxrlc(i) = zero
805 ENDIF
806
807
808
809 IF(dtt >zero ) THEN
810 IF((ddet >=zero .AND.dtt>uvar(i,21))
811 . .OR.(ddet >=zero .AND.uvar(i,21)==uvar(i,22))) THEN
812
813 DO iter = 1, niter
814 ht = ht0 + yt(i)
815 dt = sqrt(lt(i)*lt(i) + ht*ht)
816 dtt = dt - dt0
817 dtt =
max(uvar(i,22),dtt)
818 dt = dtt + dt0
819 udt = one / dt
820 hdt = ht * udt
821 IF (kfunc(2) == 0) THEN
822 ft = kt0 * dtt
823 fpt = kt0 * hdt
824 ELSE
825 ft = yfac(2)*finter(kfunc(2),dtt,npf,tf,fpt)
826 fpt = fpt * yfac(2)
827 kt = fpt
828 fpt = fpt *hdt
829 ENDIF
830 epsmaxt(i) = dtt
831 sigmaxt(i) = ft
832 smaxrlt(i) = sigmaxt(i)
833 emaxrlt(i)= epsmaxt(i)
834 eminrlt(i)= zero
835 sminrlt(i) = zero
836 funt = kft*yt(i) + ft*ht/dt
837 derit= kft + fpt*hdt + ft*udt*(one - hdt*hdt)
838 yt(i) = yt(i) - funt / derit
839 eminrlt(i)= dtt
840 sminrlt(i) = ft
841 ENDDO
842
843 ELSEIF(ddet >=zero) THEN
844
845 DO iter = 1, niter
846 ht = ht0 + yt(i)
847 dt = sqrt(lt(i)*lt(i) + ht*ht)
848 dtt = dt - dt0
849 dtt =
max(uvar(i,22),dtt)
850 dt = dtt + dt0
851 udt = one / dt
852 hdt = ht * udt
853 epsnrlt(i) = uvar(i,21)*(dtt - uvar(i,22)) /(uvar(i,21)-uvar(i,22))
854 IF (kfunc(2) == 0) THEN
855 ft = kt0 * dtt
856
857 ELSE
858 ft = yfac(2)*finter(kfunc(2),epsnrlt(i),npf,tf,fpt)
859 coefrl = (uvar(i,24) - uvar(i,26))/ uvar(i,24)
860 ft = uvar(i,26) + coefrl * ft
861
862 fpt = fpt * yfac(2)
863 fpt = fpt * uvar(i,21) * (uvar(i,24) - uvar(i,26))
864 . /(uvar(i,21)-uvar(i,22))/uvar(i,24)
865 kt = fpt
866 fpt = fpt * hdt
867 ENDIF
868 funt = kft*yt(i) + ft*ht/dt
869 derit= kft + fpt*hdt + ft*udt*(one - hdt*hdt)
870 yt(i) = yt(i) - funt / derit
871 ENDDO
872 emaxrlt(i) = dtt
873 smaxrlt(i) = ft
874 IF(dtt>uvar(i,21))THEN
875 epsmaxt(i) = dtt
876 sigmaxt(i) = ft
877
878
879 ENDIF
880
881 ELSE
882
883 IF (uvar(i,23)>zero)THEN
884 DO iter = 1, niter
885 ht = ht0 + yt(i)
886 dt = sqrt(lt(i)*lt(i) + ht*ht)
887 dtt = dt - dt0
889 dt = dtt + dt0
890 udt = one / dt
891 hdt = ht * udt
892 epsnt(i) = epsi2*dtt/uvar(i,23)
893 IF (kfunc(2) == 0) THEN
894 ft = kt0 * dtt
895 fpt = kt0 * hdt
896 ELSE
897 ft = yfac(5)*finter(kfunc(5),epsnt(i),npf,tf,fpt)
898 fpt = fpt * yfac(5)
899 coeful = ft /sigi2
900 ft = coeful * uvar(i,28)
901 fpt = fpt * epsi2*uvar(i,28)/uvar(i,23)/sigi2
902 kt = fpt
903 fpt = fpt * hdt
904 ENDIF
905 eminrlt(i)= dtt
906 sminrlt(i) = ft
907 funt = kft*yt(i) + ft*ht/dt
908 derit= kft + fpt*hdt + ft*udt*(one - hdt*hdt)
909 yt(i) = yt(i) - funt / derit
910 ENDDO
911 ELSE
912 DO iter = 1, niter
913 ht = ht0 + yt(i)
914 dt = sqrt(lt(i)*lt(i) + ht*ht)
915 udt = one / dt
916 hdt = ht * udt
917 dtt = dt - dt0
918 ft = kkt * dtt
919 fpt = kkt * hdt
920 kt = kkt
921 funt = kft*yt(i) + ft*ht/dt
922 derit= kft + fpt*hdt + ft*udt*(one - hdt*hdt)
923 yt(i) = yt(i) - funt / derit
924 ENDDO
925 epsmaxt(i) = zero
926 sigmaxt(i) = zero
927 smaxrlt(i) = zero
928 emaxrlt(i)= zero
929 eminrlt(i)= zero
930 sminrlt(i) = zero
931 ENDIF
932
933 ENDIF
934 ELSE
935 DO iter = 1, niter
936 ht = ht0 + yt(i)
937 dt = sqrt(lt(i)*lt(i) + ht*ht)
938 udt = one / dt
939 hdt = ht * udt
940 dtt = dt - dt0
941 ft = kkt * dtt
942 fpt = kkt * hdt
943 kt = kkt
944 funt = kft*yt(i) + ft*ht/dt
945 derit= kft + fpt*hdt + ft*udt*(one - hdt*hdt)
946 yt(i) = yt(i) - funt / derit
947 ENDDO
948
949 epsmaxt(i) = zero
950 eminrlt(i) = zero
951 emaxrlt(i) = zero
952 sigmaxt(i) = zero
953 sminrlt(i) = zero
954 smaxrlt(i) = zero
955 ENDIF
956 fn(i) = zero
957
958
959
960
961 IF ((yc(i) + yt(i)) < zero) THEN
962 epsmaxc(i) = uvar(i,17)
963 eminrlc(i) = uvar(i,18)
964 emaxrlc(i) = uvar(i,19)
965 sigmaxc(i) = uvar(i,20)
966 sminrlc(i) = uvar(i,25)
967 smaxrlc(i) = uvar(i,27)
968 epsmaxt(i) = uvar(i,21)
969 eminrlt(i) = uvar(i,22)
970 emaxrlt(i) = uvar(i,23)
971 sigmaxt(i) = uvar(i,24)
972 sminrlt(i) = uvar(i,26)
973 smaxrlt(i) = uvar(i,28)
974 tagoldc = nint(uvar(i,30))
975 tagoldt = nint(uvar(i,31))
976 hc = hc0 + uvar(i,7)
977 ht = ht0 + uvar(i,8)
978 dc = sqrt(lc(i)*lc(i) + hc*hc)
979 dt = sqrt(lt(i)*lt(i) + ht*ht)
980 ddec = dc - uvar(i,15)
981 ddet = dt - uvar(i,16)
982
983 y = half * (uvar(i,7) - uvar(i,8))
984 hc = hc0 + y
985 ht = ht0 - y
986 dc = sqrt(lc(i)*lc(i) + hc*hc)
987 dt = sqrt(lt(i)*lt(i) + ht*ht)
988 dcc0 = dc - dc0
989 dtt0 = dt - dt0
990 dcc1 = uvar(i,15) - dc0
991 dtt1 = uvar(i,16) - dt0
992 kf = kfc + kft
993
994 idxcnt = 1
995 idx1 = mod(idxcnt,2)
996 idx2 = mod(idxcnt+1,2)
997
998 IF(dcc1 >=zero ) THEN
999
1000 IF((ddec >=zero .AND.dcc0>uvar(i,17))
1001 . .OR.(ddec >=zero .AND.uvar(i,17)==uvar(i,18)) ) THEN
1002 tagc(idx1) = 1
1003 tagc(idx2) = 1
1004 ifuncc = kfunc(1)
1005 facc = yfac(1)
1006 eminc = zero
1007 sminc = zero
1008 face = one
1009 facf = one
1010
1011 ELSEIF(ddec >=zero)THEN
1012 tagc(idx1) = 2
1013 tagc(idx2) = 2
1014 ifuncc= kfunc(1)
1015 facc = yfac(1)
1016 eminc = uvar(i,18)
1017 sminc = uvar(i,25)
1018 face = uvar(i,17)/(uvar(i,17)-uvar(i,18))
1019 facf = (uvar(i,20) - uvar(i,25))/uvar(i,20)
1020 IF (face <= zero) THEN
1021
1022
1023 face = abs(face)
1024 ENDIF
1025 IF (facf <= zero) THEN
1026
1027
1028 facf = abs(facf)
1029 ENDIF
1030 ELSE
1031
1032 IF(uvar(i,19) >zero)THEN
1033 tagc(idx1) = 3
1034 tagc(idx2) = 3
1035 ifuncc= kfunc(4)
1036 facc = yfac(4)
1037 eminc = zero
1038 sminc = zero
1039 face = epsi1 /uvar(i,19)
1040 facf = uvar(i,27)/sigi1
1041 else
1042 tagc(idx1) = 5
1043 tagc(idx2) = 5
1044 endif
1045 endif
1046 ELSE
1047 tagc(idx1) = 5
1048 tagc(idx2) = 5
1049 ENDIF
1050
1051 IF(dtt1 >=zero ) THEN
1052 IF((ddet >=zero .AND.dtt0>uvar(i,21))
1053 . .OR.(ddet >=zero .AND.uvar(i,21)==uvar(i,22)) ) THEN
1054
1055 tagt(idx1) = 1
1056 tagt(idx2) = 1
1057 ifunct = kfunc(2)
1058 fact = yfac(2)
1059 emint = zero
1060 smint = zero
1061 fate = one
1062 fatf = one
1063 ELSEIF(ddet >=zero)THEN
1064
1065 tagt(idx1) = 2
1066 tagt(idx2) = 2
1067 ifunct= kfunc(2)
1068 fact = yfac(2)
1069 emint = uvar(i,22)
1070 smint = uvar(i,26)
1071 fate = uvar(i,21) /(uvar(i,21)-uvar(i,22))
1072 fatf = (uvar(i,24) - uvar(i,26))/uvar(i,24)
1073 IF (fate <= zero) THEN
1074
1075
1076 fate = abs(fate)
1077 ENDIF
1078 IF (fatf <= zero) THEN
1079
1080
1081 fatf = abs(fatf)
1082 ENDIF
1083 ELSE
1084
1085 IF(uvar(i,23) >zero)THEN
1086 tagt(idx1) = 3
1087 tagt(idx2) = 3
1088 ifunct = kfunc(5)
1089 fact = yfac(5)
1090 emint = zero
1091 smint = zero
1092 fate = epsi2 /uvar(i,23)
1093 fatf = uvar(i,28)/sigi2
1094 ELSE
1095 tagt(idx1) = 5
1096 tagt(idx2) = 5
1097 ENDIF
1098 ENDIF
1099 ELSE
1100
1101 tagt(idx1) = 5
1102 tagt(idx2) = 5
1103 ENDIF
1104
1105 ierr = 1
1106 DO WHILE (ierr == 1)
1107
1108 DO iter = 1, niter
1109
1110 hc = hc0 + y
1111 ht = ht0 - y
1112 dc = sqrt(lc(i)*lc(i) + hc*hc)
1113 dt = sqrt(lt(i)*lt(i) + ht*ht)
1114 dcc = dc - dc0
1115 dtt = dt - dt0
1116
1117 SELECT CASE (tagc(idx1))
1118 CASE(1)
1119 dcc =
max(uvar(i,18),dcc)
1120 dc = dcc + dc0
1121 udc = one / dc
1122 hdc = hc * udc
1123 epsnrlc(i) = (dcc -eminc) *face
1124 IF (ifuncc == 0) THEN
1125 fc = kc0 * dcc
1126 fpc = kc0 * hdc
1127 ELSE
1128 fc = facc * finter(ifuncc,epsnrlc(i
1129 fc = sminc + fc *facf
1130 fpc = fpc * facc
1131 fpc = fpc *facf * face
1132 kc = fpc
1133 fpc = fpc * hdc
1134 ENDIF
1135 IF ( iter==niter) then
1136 epsmaxc(i) = dcc
1137 sigmaxc(i) = fc
1138 emaxrlc(i) = dcc
1139 smaxrlc(i) = fc
1140 eminrlc(i) = dcc
1141 sminrlc(i) = fc
1142 ENDIF
1143
1144
1145
1146
1147
1148
1149 CASE(2)
1150 dcc =
max(uvar(i,18),dcc)
1151 dc = dcc + dc0
1152 udc = one / dc
1153 hdc = hc * udc
1154 epsnrlc(i) = (dcc -eminc) *face
1155 IF (ifuncc == 0) THEN
1156 fc = kc0 * dcc
1157 fpc = kc0 * hdc
1158 ELSE
1159 fc = facc * finter(ifuncc,epsnrlc(i),npf,tf
1160 fc = sminc + fc *facf
1161 fpc = fpc * facc
1162 fpc = fpc *facf * face
1163 kc = fpc
1164 fpc = fpc * hdc
1165 ENDIF
1166 IF ( iter==niter) THEN
1167 emaxrlc(i) = dcc
1168 smaxrlc(i) = fc
1169 ENDIF
1170 IF (dcc > uvar(i,17) .AND. iter==niter) THEN
1171 epsmaxc(i) = dcc
1172 sigmaxc(i) = fc
1173
1174
1175 ENDIF
1176 CASE(3)
1178 dc = dcc + dc0
1179 udc = one / dc
1180 hdc = hc * udc
1181 epsnrlc(i) = (dcc -eminc) *face
1182 IF (ifuncc == 0) THEN
1183 fc = kc0 * dcc
1184 fpc = kc0 * hdc
1185 ELSE
1186 fc = facc * finter(ifuncc,epsnrlc(i),npf,tf,fpc)
1187 fc = sminc + fc *facf
1188 fpc = fpc * facc
1189 fpc = fpc *facf * face
1190 kc = fpc
1191 fpc = fpc * hdc
1192 ENDIF
1193 IF (dcc < uvar(i,18)) THEN
1194 eminrlc(i) = dcc
1195 sminrlc(i) = fc
1196 ENDIF
1197 CASE(5)
1198 udc= one / dc
1199 hdc= hc * udc
1200 fc = kkc * dcc
1201 fpc = kkc * hdc
1202 kc = kkc
1203 epsmaxc(i) = zero
1204 eminrlc(i) = zero
1205 emaxrlc(i) = zero
1206 sigmaxc(i) = zero
1207 sminrlc(i) = zero
1208 smaxrlc(i) = zero
1209 END SELECT
1210
1211
1212 SELECT CASE (tagt(idx1))
1213 CASE(1)
1214 dtt =
max(uvar(i,22),dtt)
1215 dt = dtt + dt0
1216 udt = one / dt
1217 hdt = ht * udt
1218 epsnrlt(i) = (dtt - emint)*fate
1219 IF (ifunct == 0) THEN
1220 ft = kt0 * dtt
1221 fpt = kt0 * hdt
1222 ELSE
1223 ft = fact*finter(ifunct,epsnrlt(i),npf,tf,fpt)
1224 ft = smint + ft * fatf
1225 fpt = fpt * fact
1226 fpt = fpt *fatf * fate
1227 kt = fpt
1228 fpt = fpt * hdt
1229 ENDIF
1230 IF (iter==niter) THEN
1231 emaxrlt(i) = dtt
1232 smaxrlt(i) = ft
1233 epsmaxt(i) = dtt
1234 sigmaxt(i) = ft
1235 eminrlt(i) = dtt
1236 sminrlt(i) = ft
1237 ENDIF
1238
1239
1240
1241
1242
1243
1244
1245 CASE(2)
1246 dtt =
max(uvar(i,22),dtt)
1247 dt = dtt + dt0
1248 udt = one / dt
1249 hdt = ht * udt
1250 epsnrlt(i) = (dtt - emint)*fate
1251 IF (ifunct == 0) THEN
1252 ft = kt0 * dtt
1253 fpt = kt0 * hdt
1254 ELSE
1255 ft = fact*finter(ifunct,epsnrlt(i),npf,tf,fpt)
1256 ft = smint + ft * fatf
1257 fpt = fpt * fact
1258 fpt = fpt *fatf * fate
1259 kt = fpt
1260 fpt = fpt * hdt
1261 ENDIF
1262 IF (iter==niter) THEN
1263 emaxrlt(i) = dtt
1264 smaxrlt(i) = ft
1265 ENDIF
1266 IF(dtt > uvar(i,21).AND.iter==niter)THEN
1267 epsmaxt(i) = dtt
1268 sigmaxt(i) = ft
1269
1270
1271 ENDIF
1272
1273 CASE(3)
1275 dt = dtt + dt0
1276 udt = one / dt
1277 hdt = ht * udt
1278 epsnrlt(i) = (dtt - emint)*fate
1279 IF (ifunct == 0) THEN
1280 ft = kt0 * dtt
1281 fpt = kt0 * hdt
1282 ELSE
1283 ft = fact*finter(ifunct,epsnrlt(i),npf,tf,fpt)
1284 ft = smint + ft * fatf
1285 fpt = fpt * fact
1286 fpt = fpt *fatf * fate
1287 kt = fpt
1288 fpt = fpt * hdt
1289 ENDIF
1290 IF (dtt < uvar(i,22)) THEN
1291 eminrlt(i) = dtt
1292 sminrlt(i) = ft
1293 ENDIF
1294 CASE(5)
1295 udt= one / dt
1296 hdt= ht * udt
1297 ft = kkt * dtt
1298 fpt = kkt * hdt
1299 kt = kkt
1300 epsmaxt(i) = zero
1301 eminrlt(i) = zero
1302 emaxrlt(i) = zero
1303 sigmaxt(i) = zero
1304 sminrlt(i) = zero
1305 smaxrlt(i) = zero
1306 END SELECT
1307
1308 func = kf*y + fc * hdc - ft * hdt
1309 deric = kf + fpc*hdc + fc*udc*(one - hdc*hdc)
1310 . + fpt*hdt + ft*udt*(one - hdt*hdt)
1311 y = y - func / deric
1312
1313 IF (y > 0) THEN
1315 ELSE
1317 ENDIF
1318
1319 ENDDO
1320 yc(i) = y
1321 yt(i) =-y
1322 fn(i) = fc*hc/dc + ft*ht/dt
1323
1324 hc = hc0 + yc(i)
1325 ht = ht0 + yt(i)
1326 dc = sqrt(lc(i)*lc(i) + hc*hc)
1327 dt = sqrt(lt(i)*lt(i) + ht*ht)
1328
1329
1330
1331 ierr = 0
1332 ierrt = 0
1333 ierrc = 0
1334 IF (tagc(idx1) == 3 .and. ((eminrlc(i) > uvar(i,18) .and. tagoldc == 3)
1335 . .OR. eminrlc(i) >uvar(i,17) .OR. eminrlc(i) >uvar(i,19))) THEN
1336 ierr = 1
1337 ierrc= 1
1338 eminrlc(i)= uvar(i,18)
1339 sminrlc(i) = uvar(i,25)
1340 dc = uvar(i,15)
1341 y = half * (uvar(i,7) - uvar(i,8))
1342 ifuncc = kfunc(1)
1343 facc = yfac(1)
1344 IF (uvar(i,18)==zero .OR. uvar(i,17)==uvar(i,18))THEN
1345 tagc(idx2) = 1
1346 eminc = zero
1347 sminc = zero
1348 face = one
1349 facf = one
1350 ELSE
1351 tagc(idx2) = 2
1352 eminc = uvar(i,18)
1353 sminc = uvar(i,25)
1354 face = uvar(i,17) /(uvar(i,17)-uvar(i,18))
1355 facf = (uvar(i,20) - uvar(i,25))/uvar(i,20)
1356 IF (face <= zero) THEN
1357
1358
1359 face = abs(face)
1360 ENDIF
1361 IF (facf <= zero) THEN
1362
1363
1364 facf = abs(facf)
1365 ENDIF
1366 ENDIF
1367 ELSEIF ((tagc(idx1) == 1.or.tagc(idx1) == 2) .and. (dcc < uvar(i,19).and. tagoldc /= 3 )) THEN
1368 ierr = 1
1369 ierrc= 1
1370 epsmaxc(i) = uvar(i,17)
1371 eminrlc(i) = uvar(i,18)
1372 emaxrlc(i) = uvar(i,19)
1373 sigmaxc(i) = uvar(i,20)
1374 sminrlc(i) = uvar(i,25)
1375 smaxrlc(i) = uvar(i,27)
1376 dc = uvar(i,15)
1377 y = half * (uvar(i,7) - uvar(i,8))
1378 tagc(idx2) = 3
1379 ifuncc= kfunc(4)
1380 facc = yfac(4)
1381 eminc = zero
1382 sminc = zero
1383 face = epsi1 /uvar(i,19)
1384 facf = uvar(i,27)/sigi1
1385 ENDIF
1386
1387 IF (tagt(idx1) == 3 .and. ((eminrlt(i) > uvar(i,22) .and.tagoldt == 3)
1388 . .OR. eminrlt(i) >uvar(i,21).OR. eminrlt(i) >uvar(i,23))) THEN
1389 ierr = 1
1390 ierrt= 1
1391 eminrlt(i)= uvar(i,22)
1392 sminrlt(i) = uvar(i,26)
1393 dt = uvar(i,16)
1394 y = half * (uvar(i,7) - uvar(i,8))
1395 ifunct = kfunc(2)
1396 fact = yfac(2)
1397 IF(uvar(i,22)==zero.OR.uvar(i,21)==uvar(i,22))THEN
1398 tagt(idx2) = 1
1399 emint = zero
1400 smint = zero
1401 fate = one
1402 fatf = one
1403 ELSE
1404 tagt(idx2) = 2
1405 emint = uvar(i,22)
1406 smint = uvar(i,26)
1407 fate = uvar(i,21)/(uvar(i,21)-uvar(i,22))
1408 fatf = (uvar(i,24) - uvar(i,26))/uvar(i,24)
1409 IF (fate <= zero) THEN
1410
1411
1412 fate = abs(fate)
1413 ENDIF
1414 IF (fatf <= zero) THEN
1415
1416
1417 fatf = abs(fatf)
1418 ENDIF
1419 ENDIF
1420
1421 ELSEIF ((tagt(idx1) == 1.or.tagt(idx1) == 2).and.(dttTHEN
1422 ierr = 1
1423 ierrt= 1
1424 epsmaxt(i) = uvar(i,21)
1425 eminrlt(i) = uvar(i,22)
1426 emaxrlt(i) = uvar(i,23)
1427 sigmaxt(i) = uvar(i,24)
1428 sminrlt(i) = uvar(i,26)
1429 smaxrlt(i) = uvar(i,28)
1430 dt = uvar(i,16)
1431 y = half * (uvar(i,7) - uvar(i,8))
1432 tagt(idx2) = 3
1433 ifunct= kfunc(5)
1434 fact = yfac(5)
1435 emint = zero
1436 smint = zero
1437 fate = epsi2 /uvar(i,23)
1438 fatf = uvar(i,28)/sigi2
1439 ENDIF
1440 idxcnt = idxcnt + 1
1441
1442 idx1 = mod(idxcnt,2)
1443
1444 idx2 = mod(idxcnt+1,2)
1445
1446 IF (idxcnt > 3) THEN
1447
1448 IF (ierrc == 1)THEN
1449 eminrlc(i) = uvar(i,18)
1450 sminrlc(i) = uvar(i,25)
1451 emaxrlc(i) = uvar(i,19)
1452 smaxrlc(i) = uvar(i,27)
1453 epsmaxc(i) = uvar(i,17)
1454 sigmaxc(i) = uvar(i,20)
1455 IF (dcc > uvar(i,19)) THEN
1456 emaxrlc(i) = dcc
1457 smaxrlc(i) = fc
1458 ENDIF
1459 IF (dcc > uvar(i,17)) THEN
1460 epsmaxc(i) = dcc
1461 sigmaxc(i) = fc
1462 eminrlc(i) = zero
1463 sminrlc(i) = zero
1464 ELSEIF (dcc < uvar(i,18)) THEN
1465 eminrlc(i) = dcc
1466 sminrlc(i) = fc
1467 ENDIF
1468 ENDIF
1469 IF (ierrt==1) THEN
1470 eminrlt(i) = uvar(i,22)
1471 sminrlt(i) = uvar(i,26)
1472 epsmaxt(i) = uvar(i,21)
1473 sigmaxt(i) = uvar
1474 epsmaxt(i) = uvar(i,21)
1475 emaxrlt(i) = dtt
1476 smaxrlt(i) = ft
1477 IF (dtt > uvar(i,23)) THEN
1478 emaxrlt(i) = dtt
1479 smaxrlt(i) = ft
1480 ENDIF
1481 IF (dtt > uvar(i,21)) THEN
1482 epsmaxt(i) = dtt
1483 sigmaxt(i) = ft
1484 eminrlt(i) = zero
1485 sminrlt(i) = zero
1486 ELSEIF (dtt < uvar(i,22)) THEN
1487 eminrlt(i) = dtt
1488 sminrlt(i) = ft
1489 ENDIF
1490 ENDIF
1491 EXIT
1492 ENDIF
1493
1494 ENDDO
1495 uvar(i,30) = tagc(idx2)
1496 uvar(i,31) = tagt(idx2)
1497
1498 ENDIF
1499
1500
1501
1502 trace = exp(epsxx(i) + epsyy(i))
1503 ec2 =
max(trace / (ec(i) + one), em6)
1504 et2 =
max(trace / (et(i) + one), em6)
1505
1506 rfac = one / ec2
1507 rfat = one / et2
1508
1509
1510 sigc = fc * lc(i) / dc
1511 sigt = ft * lt(i) / dt
1512 signxx(i) = sigc * rfac
1513 signyy(i) = sigt * rfat
1514
1515 uvar(i,1) = sigc
1516 uvar(i,2) = sigt
1517 uvar(i,15) = dc
1518 uvar(i,16) = dt
1519
1520
1521
1522 sig0 = uvar(i,10)
1523 tan_phi(i)= depsxy(i)
1524 uvar(i,6)= depsxy(i)
1525 tan2 = tan_phi(i)*tan_phi(i)
1526 phio = uvar(i,29)
1527 phi = atan(tan_phi(i))*hundred80/pi
1528 dphi = phi - phio
1529 uvar(i,29) = phi
1530
1531 phimin(i) = uvar(i,32)
1532 phimax(i) = uvar(i,33)
1533 phirlmax(i) = uvar(i,34)
1534 sxymax(i) = uvar(i,35)
1535 sxymin(i) = uvar(i,36)
1536 sxymaxrl(i) = uvar(i,37)
1537
1538 IF (kfunc(3) == 0) THEN
1539 IF (tan_phi(i) > tan_lock) THEN
1540 signxy(i) = gt*tan_phi(i) + gb - sig0
1541 kg = gt*tan2
1542 ELSEIF (tan_phi(i) < -tan_lock) THEN
1543 signxy(i) = gt*tan_phi(i) - gb - sig0
1544 kg = gt*tan2
1545 ELSE
1546 signxy(i) = g0*tan_phi(i) - sig0
1547 kg = g0*tan2
1548 ENDIF
1549
1550 ELSE
1551
1552 IF (phi >=zero)THEN
1553 IF ((dphi >=zero .AND. uvar(i,32) ==zero).OR.(dphi >=zero .AND.
1554 . phi >uvar(i,33)).OR.(dphi >=zero .AND. uvar(i,33)==uvar(i,32)) .OR.
1555 . (dphi >=zero .AND. uvar(i,35)==zero)) THEN
1556
1557 signxy(i) = yfac(3)*finter(kfunc(3),phi,npf,tf,gxy)
1558 kg = gxy*yfac(3)*tan2
1559 phimax(i) = phi
1560 phirlmax(i) = phi
1561 sxymax(i) = signxy(i)
1562 sxymaxrl(i) = signxy(i)
1563 ELSEIF(dphi>=zero)THEN
1564 !----------------------reload
1565 phin = uvar(i,33)*(phi - uvar(i,32))/(uvar(i,33) - uvar(i,32))
1566 signxy(i) = yfac(3)*finter(kfunc(3),phin,npf,tf,gxy)
1567 signxy(i) = uvar(i,36) + signxy(i) *(uvar(i,35) - uvar(i,36))/uvar(i,35)
1568 kg = gxy*yfac(3)*tan2
1569 phirlmax(i) = phi
1570 sxymaxrl(i) = signxy(i)
1571 IF (phi >uvar(i,33))THEN
1572 phimax(i) = phi
1573 sxymax(i) = signxy(i)
1574 ENDIF
1575 ELSE
1576
1577 phin = phi * phii/uvar(i,34)
1578 signxy(i) = yfac(6)*finter(kfunc(6),phin,npf,tf,gxy)
1579 signxy(i) = signxy(i)*uvar(i,37) / sxyi
1580 kg = gxy*yfac(6)*tan2
1581 phimin(i) = phi
1582 sxymin(i) = signxy(i)
1583 endif
1584 ELSE
1585 IF((dphi <=zero .AND. uvar(i,32) ==zero).OR.(dphi <=zero .AND. phi <uvar(i,33))
1586 . .OR.(dphi <=zero .AND. uvar(i,33)==uvar(i,32)) ) THEN
1587
1588 signxy(i) = yfac(3)*finter(kfunc(3),phi,npf,tf,gxy)
1589 kg = gxy*yfac(3)*tan2
1590 phimax(i) = phi
1591 phirlmax(i) = phi
1592 sxymax(i) = signxy(i)
1593 sxymaxrl(i) = signxy
1594 ELSEIF(dphi<=zero)THEN
1595
1596 phin = uvar(i,33)*(phi - uvar(i,32))/(uvar(i,33) - uvar(i,32))
1597 signxy(i) = yfac(3)*finter(kfunc(3),phin,npf,tf
1598 signxy(i) = uvar(i,36) + signxy(i) *(uvar(i,35) - uvar(i,36))/uvar(i,35)
1599 kg = gxy*yfac(3)*tan2
1600 phirlmax(i) = phi
1601 sxymaxrl(i) = signxy(i)
1602 IF (phi <uvar(i,33))THEN
1603 phimax(i) = phi
1604 sxymax(i) = signxy(i)
1605 ENDIF
1606 ELSE
1607
1608 phin = phi * phii2/uvar(i,34)
1609 signxy(i) = yfac(6)*finter(kfunc(6),phin,npf,tf,gxy)
1610 signxy(i) = signxy(i)*uvar(i,37) / sxyi2
1611 kg = gxy*yfac(6)*tan2
1612 phimin(i) = phi
1613 sxymin(i) = signxy(i)
1614 endif
1615 ENDIF
1616
1617 ENDIF
1618
1619
1620
1621 dtinv = timestep(i)/
max(timestep(i)*timestep(i),em20)
1622 damp = sqrt(rho0(i)*
area(i)*thkly(i)*half)
1623 IF (kc < zero) THEN
1624 kc = one
1625 ENDIF
1626 IF (kt < zero) THEN
1627 kt = one
1628 ENDIF
1629 v1 = visce*damp*sqrt
1630 v2 = visce*damp*sqrt(kt)
1631 sigvxx(i) = dtinv*(depsxx(i))*v1
1632 sigvyy(i) = dtinv*(depsyy(i))*v2
1633
1634 IF (fn(i) > zero) THEN
1635 tfrot = two_third*viscg*fn(i)*(hc0+ht0)/(lc(i)+lt(i))
1636 dtang(i) = depsxy(i) - tan_phi(i)
1637 sigg = tfold(i) + gfrot*dtang(i)
1638 IF (abs(sigg) > tfrot) THEN
1639 sigvxy(i) = sign(tfrot,sigg)
1640 ELSE
1641 sigvxy(i) = sigg
1642 ENDIF
1643 ENDIF
1644
1645 sinn = tan_phi(i) / sqrt(one + tan2)
1646 kmax =
max(kc0*rfac,kt0*rfat)*(one+sinn) + kg
1647 lmin =
min(dc/dc0,dt/dt0)*uvar(i,14)
1648 soundsp(i) = sqrt(kmax/(rho0(i)))*aldt(i)/lmin
1649 viscmax(i) =
max(v1,v2)
1650 etse(i) = one
1651 ENDDO
1652
1653#include "vectorize.inc"
1654 DO j=1,nindx
1655 i=index(j)
1656 uvar(i,3) = signxy(i) + sigvxy(i)
1657 tan_phi(i) = depsxy(i)
1658 uvar(i,6) = depsxy(i)
1659 uvar(i,7) = yc(i)
1660 uvar(i,8) = yt(i)
1661 uvar(i,9) = sigvxy(i)
1662
1663 uvar(i,17) = epsmaxc(i)
1664 uvar(i,18) = eminrlc(i)
1665 uvar(i,19) = emaxrlc(i)
1666 uvar(i,20) = sigmaxc(i)
1667 uvar(i,21) = epsmaxt(i)
1668 uvar(i,22) = eminrlt(i)
1669 uvar(i,23) = emaxrlt(i)
1670 uvar(i,24) = sigmaxt(i)
1671 uvar(i,25) = sminrlc(i)
1672 uvar(i,26) = sminrlt(i)
1673 uvar(i,27) = smaxrlc(i)
1674 uvar(i,28) = smaxrlt(i)
1675 uvar(i,32) = phimin(i)
1676 uvar(i,33) = phimax(i)
1677 uvar(i,34) = phirlmax(i)
1678 uvar(i,35) = sxymax(i)
1679 uvar(i,36) = sxymin(i)
1680 uvar(i,37) = sxymaxrl(i)
1681
1682 signyz(i) = sigoyz(i) + gsh *depsyz(i)
1683 signzx(i) = sigozx(i) + gsh *depszx(i)
1684 ENDDO
1685
1686 ENDIF
1687
1688
1689
1690 IF (zerostress /= zero)THEN
1691 IF (tt <= tstart) THEN
1692#include "vectorize.inc"
1693 DO j=1,nindx
1694 i=index(j)
1695 uvar(i,11) = signxx(i)
1696 uvar(i,12) = signyy(i)
1697 uvar(i,13) = signxy(i)
1698 signxx(i) = zero
1699 signyy(i) = zero
1700 signxy(i) = zero
1701 ENDDO
1702 ELSE
1703#include "vectorize.inc"
1704 DO j=1,nindx
1705 i=index(j)
1706 dsig = signxx(i) - sigoxx(i) - uvar(i,11)
1707 IF((uvar(i,11) > zero).AND.(dsig < zero))THEN
1708 uvar(i,11) =
max(zero,uvar(i,11)+zerostress*dsig)
1709 ELSEIF((uvar(i,11) < zero).AND.(dsig > zero))THEN
1710 uvar(i,11) =
min(zero,uvar(i,11)+zerostress*dsig)
1711 ENDIF
1712 dsig = signyy(i) - sigoyy(i) - uvar(i,12)
1713 IF((uvar(i,12) > zero).AND.(dsig < zero))THEN
1714 uvar(i,12) =
max(zero,uvar(i,12)+zerostress*dsig)
1715 ELSEIF((uvar(i,12) < zero).AND.(dsig > zero))THEN
1716 uvar(i,12) =
min(zero,uvar(i,12)+zerostress*dsig)
1717 ENDIF
1718 dsig = signxy(i) - sigoxy(i) - uvar(i,13)
1719 IF((uvar(i,13) > zero).AND.(dsig < zero))THEN
1720 uvar(i,13) =
max(zero,uvar(i,13)+zerostress*dsig)
1721 ELSEIF((uvar(i,13) < zero).AND.(dsig > zero))THEN
1722 uvar(i,13) =
min(zero,uvar(i,13)+zerostress*dsig)
1723 ENDIF
1724 signxx(i) = signxx(i) - uvar(i,11)
1725 signyy(i) = signyy(i) - uvar(i,12)
1726 signxy(i) = signxy(i) - uvar(i,13)
1727 ENDDO
1728 ENDIF
1729 ENDIF
1730
1731 DO j=1,numoff
1732 i = indxoff(j)
1733 kmax =
max(kc0,kt0)*two
1734 soundsp(i) = sqrt(kmax/(rho0(i)))
1735 ENDDO
1736
1737
1738
1739 IF (areamin > zero) THEN
1740#include "vectorize.inc"
1741 DO j=1,nindx
1742 i=index(j)
1743 aa = (one+ec(i)+et(i) - areamin) * dareamin
1744 aa =
min(
max(aa,zero),one)
1745 signxx(i) = signxx(i)*aa
1746 signyy(i) = signyy(i)*aa
1747 signxy(i) = signxy(i)*aa
1748 signyz(i) = signyz(i)*aa
1749 signzx(i) = signzx(i)*aa
1750 ENDDO
1751 ENDIF
1752
1753
1754
1755
1756 IF (npt0 ==1) THEN
1757#include "vectorize.inc"
1758 DO j=1,nindx
1759 i=index(j)
1760 IF (uvar(i,40)==one) cycle
1761 aa =uvar(i,40)
1762 signxx(i) = signxx(i)*aa
1763 signyy(i) = signyy(i)*aa
1764 signxy(i) = signxy(i)*aa
1765 IF (uvar(i,40)<em02) THEN
1766 kmax =
max(kc0,kt0)*two
1767 soundsp(i) = sqrt(kmax/(rho0(i)))
1768 END IF
1769 ENDDO
1770 ENDIF
1771
1772 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)