33
34
35
36#include "implicit_f.inc"
37
38
39
40 INTEGER NINDEX, INDEX(NEL),ICRIT_OUTP
41 my_real :: fc,rt,rc,rct1,rct2,aa,ac,bc,bt,tol
42 my_real,
DIMENSION(NEL) :: s1,s2,s3,s4,s5,s6,sm,vk0,rob,rok,fa,seq
43 my_real,
DIMENSION(NEL),
INTENT(OUT):: vk
44
45
46
47 INTEGER I, N, NEL, IBUG
48 my_real bb, df, rf, r2, aj3, cs3t
49
50#include "vectorize.inc"
51 DO n = 1,nindex
52 i = index(n)
53 IF (i > 0) THEN
54 IF (sm(i) >= rt-tol ) THEN
55 vk(i) = one
56 ELSEIF( sm(i) > rc ) THEN
57 vk(i) = one+(one-vk0(i))*(rct1-two*rc*sm(i)+sm(i)**2)/rct2
58 ELSEIF(sm(i) > rok(i))THEN
59 vk(i) = vk0(i)
60 ELSE
61 vk(i) = vk0(i)*(one - ((sm(i)-rok(i))/(rob(i)-rok(i)))**2)
62 ENDIF
63
64 IF (sm(i) > ac/aa) THEN
65 fa(i) = half*(sm(i)-ac/aa) /
min(bc,bt)/fc
66 ELSEIF (sm(i) <= rob(i)) THEN
68 df = sqrt(bb*bb-aa*rob(i)+ac)
69 rf = (-bb+df)/aa
70 fa(i) = two*rf*(sm(i)-rob(i))/(rob(i)-rok(i))/fc
71 ELSE
72 r2 = (s1(i)**2+s2(i)**2+s3(i)**2)+ two*s4(i)**2+two*s5(i)**2
73 . + two*s6(i)**2
74 IF (ibug == 0) THEN
75 aj3 = s1(i)*s2(i)*s3(i)-s1(i)*s5(i)*s5(i)-s2(i)*s6(i)*s6(i)
76 . - s3(i)*s4(i)*s4(i) + two*s4(i)*s5(i)*s6(i)
77 ELSE
78 aj3 = s1(i)*s2(i)*s3(i)-s1(i)*s5(i)*s5(i)-s2(i)*s6(i)*s6(i)
79 . - s3(i)*s4(i)*s4(i)
80 ENDIF
81
82 cs3t = half * aj3*(three/(half*
max(r2,em20)))**three_half
85 bb = half*((one -cs3t)*bc+(one +cs3t)*bt)
86 df = sqrt(
max(zero,bb*bb-aa*sm(i)+ac,zero))
87 rf = (-bb+df)/aa
88 fa(i)=(sqrt(r2)-vk(i)*rf)/fc
89
90
91
92
93
94 ENDIF
95
96 ENDIF
97 ENDDO
98
99 RETURN