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