35
36
37
38#include "implicit_f.inc"
39
40
41
42 INTEGER NEL,NVARF,NUPARAM,NUVAR
45 my_real ,
DIMENSION(NEL) :: rho, rho0,
46 . depsxx, depsyy, depszz, depsxy, depsyz, depszx,
47 . sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx,
48 . ssp , dpdm , pnew, psh, pla
49
50
51
53 . signxx(nel), signyy(nel), signzz(nel),
54 . signxy(nel), signyz(nel), signzx(nel),
55 . soundsp(nel), et(nel)
56
57
58
60 . uvar(nel,nuvar), off(nel) ,mu(nel),mu2(nel)
61
62
63
66 my_real :: t1(nel),t2(nel),t3(nel),t4(nel),t5(nel),t6(nel)
67 my_real :: ptot,g0(nel),ratio(nel),yield2(nel)
68 my_real :: pstar,g,gg,scrt(nel),aj2(nel),dpla(nel)
69 my_real :: i3(nel),cos3t(nel),sqrt_j2,theta,c,phi,k
70 integer :: I,IFORM
71
72
73
74 c = uparam(1)
75 phi = uparam(2)
76 pstar = uparam(3)
77 a0 = uparam(4)
78 a1 = uparam(5)
79 a2 = uparam(6)
80 amax = uparam(7)
81 g = uparam(8)
82 gg = two*g
83 iform = nint(uparam(9))
84
85 ! state init.
86
87 DO i=1,nel
88 pold(i) = -(sigoxx(i)+sigoyy(i)+sigozz(i))*third
89 scrt(i) = (depsxx(i)+depsyy(i)+depszz(i))*third
90 mu(i) = rho(i)/rho0(i) - one
91 mu2(i) = mu(i) *
max(zero,mu(i))
92 ENDDO
93
94
95
96 DO i=1,nel
97 t1(i)=sigoxx(i)+pold(i)+gg*(depsxx(i)-scrt(i))
98 t2(i)=sigoyy(i)+pold(i)+gg*(depsyy(i)-scrt(i))
99 t3(i)=sigozz(i)+pold(i)+gg*(depszz(i)-scrt(i))
100 t4(i)=sigoxy(i) + g*depsxy(i)
101 t5(i)=sigoyz(i) + g*depsyz
102 t6(i)=sigozx(i) + g*depszx(i)
103 ENDDO
104
105
106
107 DO i=1,nel
108 dpdm(i) = dpdm(i) + onep333*g
109 ssp(i) = sqrt(abs(dpdm(i))/rho0(i))
110 ENDDO
111
112
113
114 DO i=1,nel
115 aj2(i)= half*(t1(i)**2+t2(i)**2+t3(i)**2)+t4(i)**2+t5
116 ENDDO
117
118 IF(iform==4)THEN
119 k = one/sqrt(three)
120 DO i=1,nel
121 i3(i) = t2(i)*t3(i)*t1(i)-t2(i)*t6(i)*t6(i)-t3(i)*t4(i)*t4(i)-t5(i)*t5(i)*t1(i)+2*t5(i)*t4(i)*t6(i)
122 sqrt_j2 = sqrt(aj2(i))
123 cos3t(i) = nine*i3(i)/two/sqrt(three)/sqrt_j2/sqrt_j2/sqrt_j2
124 theta = acos(
max(zero,
min(one,cos3t(i))))
125 ptot = pnew(i)+psh(i)
126 g0(i) = -ptot*sin(phi)+sqrt_j2*(cos(theta)-k*sin(theta)*sin(phi))-c*cos(phi)
127 g0(i) =
max(zero,g0(i))
128 yield2
129 ENDDO
130
131 ELSE
132 DO i=1,nel
133 ptot = pnew(i)+psh(i)
134 g0(i) = a0 +a1 *ptot+a2 *ptot*ptot
135 g0(i) =
min(amax,g0(i))
136 g0(i) =
max(zero,g0(i))
137 IF(ptot <= pstar)g0(i)=zero
138 yield2(i)=aj2(i)-g0(i)
139 ENDDO
140 ENDIF
141
142
143
144
145 DO i=1,nel
146 ratio(i)=zero
147 IF(yield2(i)<=zero .AND. g0(i)>zero)THEN
148 ratio(i)=one
149 ELSE
150 ratio(i)=sqrt(g0(i)/(aj2(i)+ em14))
151 ENDIF
152 ENDDO
153
154
155
156 DO i=1,nel
157 signxx(i)=ratio(i)*t1(i)*off(i) - pnew(i)
158 signyy(i)=ratio(i)*t2(i)*off(i) - pnew(i)
159 signzz(i)=ratio(i)*t3(i)*off(i) - pnew(i)
160 signxy(i)=ratio(i)*t4(i)*off(i)
161 signyz(i)=ratio(i)*t5(i)*off(i)
162 signzx(i)=ratio(i)*t6(i)*off(i)
163 dpla(i) =(one -ratio(i))*sqrt(aj2(i)) /
max(em20,three*g)
164 ENDDO
165 pla(1:nel) = pla(1:nel) + dpla(1:nel)
166
167 RETURN