37
38
39
40
41
42
43
44
45
46
47#include "implicit_f.inc"
48
49
50
51 INTEGER NEL, NUPARAM, JTHE,NUVAR
53 . time , uparam(nuparam),
54 . rho(nel) , rho0(nel) , volume(nel), eint(nel),
55 . depsxx(nel), depsyy(nel), depszz(nel), depsxy(nel), depsyz(nel), depszx(nel),
56 . epsxx(nel), epsyy(nel), epszz(nel), epsxy(nel), epsyz(nel), epszx(nel),
57 . sigoxx(nel), sigoyy(nel), sigozz(nel), sigoxy(nel), sigoyz(nel), sigozx(nel),
58 . off(nel) , dpdm(nel) , epsd(nel)
59
60
61
63 . signxx(nel), signyy(nel), signzz(nel),
64 . signxy(nel), signyz(nel), signzx(nel),
65 . sigvxx(nel), sigvyy(nel), sigvzz(nel),
66 . sigvxy(nel), sigvyz(nel), sigvzx(nel),
67 . soundsp(nel)
68
69
70
71 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
72 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: pla
73 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: temp
74
75
76
77 INTEGER :: I
78 my_real :: davg(nel), pold(nel), theta(nel), hm(nel), eps(nel)
79 my_real :: yld(nel), yld_h(nel), yld_sr(nel), yld_t(nel), svm(nel)
80 my_real :: a0, eps0, time_fac, rhocp, tini, eta, t0k, ratio, dpla, g, g2, g3, j2
81 my_real :: m1, m2, m3, m4, m5, m7
82
83
84
85 a0 = uparam(1)
86 time_fac= uparam(2)
87 g = uparam(3)
88 m1 = uparam(4)
89 m2 = uparam(5)
90 m3 = uparam(6)
91 m4 = uparam(7)
92 m5 = uparam(8)
93 m7 = uparam(9)
94 rhocp = uparam(10)
95 tini = uparam(11)
96 eta = uparam(12)
97 t0k = uparam(13)
98 eps0 = uparam(14)
99 g2 = two*g
100 g3 = three*g
101
102 IF (time == zero) THEN
103 uvar(1:nel,1) = tini
104 ENDIF
105
106 DO i=1,nel
107 pold(i) = -(sigoxx(i)+sigoyy(i)+sigozz(i))*third
108 davg(i) = (depsxx(i)+depsyy(i)+depszz(i))*third
109 eps(i) = eps0 + pla(i)
110 ENDDO
111
112
113
114 DO i=1,nel
115 signxx(i)=sigoxx(i)+pold(i)+g2*(depsxx(i)-davg(i))
116 signyy(i)=sigoyy(i)+pold(i)+g2*(depsyy(i)-davg(i))
117 signzz(i)=sigozz(i)+pold(i)+g2*(depszz(i)-davg(i))
118 signxy(i)=sigoxy(i)+g*depsxy(i)
119 signyz(i)=sigoyz(i)+g*depsyz(i)
120 signzx(i)=sigozx(i)+g*depszx(i)
121 ENDDO
122
123
124
125 DO i=1,nel
126 dpdm(i) = dpdm(i) + four_over_3*g
127 soundsp(i) = sqrt(abs(dpdm(i))/rho0(i))
128 ENDDO
129
130
131
132 DO i=1,nel
133 j2 =half*(signxx(i)**2+signyy(i)**2+signzz(i)**2)+signxy(i)**2+signyz(i)**2+signzx(i)**2
134 svm(i) =sqrt(three*j2)
135 ENDDO
136
137
138
139 IF (jthe >= 0) THEN
140 theta(1:nel) = uvar(1:nel,1) - t0k
141 ELSE
142 theta(1:nel) = temp(1:nel) - t0k
143 ENDIF
144
145
146
147
148 DO i=1,nel
149 yld_h(i) = one
150 ENDDO
151 IF(m2 /= zero) THEN
152 DO i=1,nel
153 IF(eps(i) > zero) yld_h(i) = yld_h(i)*eps(i)**m2
154 ENDDO
155 ENDIF
156 IF(m4 /= zero) THEN
157 DO i=1,nel
158 IF(eps(i) > zero) yld_h(i) = yld_h(i) * exp(m4/eps(i))
159 ENDDO
160 ENDIF
161 IF(m7 /= zero) THEN
162 DO i=1,nel
163 IF(eps(i) > zero) yld_h(i) = yld_h(i) * exp(m7*eps(i))
164 ENDDO
165 ENDIF
166
167 IF(m3 /= zero) THEN
168 DO i=1,nel
169 yld_sr(i) = (epsd(i)*time_fac)**m3
170 ENDDO
171 ELSE
172 DO i=1,nel
173 yld_sr(i) = one
174 ENDDO
175 ENDIF
176
177 IF(m1 /= zero .AND. m5 /= zero) THEN
178 DO i=1,nel
179 yld_t(i) = exp(theta(i)*m1) * (one+eps(i))**(theta(i)*m5)
180 ENDDO
181 ELSEIF(m1 /= zero) THEN
182 DO i=1,nel
183 yld_t(i) = exp(theta(i)*m1)
184 ENDDO
185 ELSEIF(m5 /= zero) THEN
186 DO i=1,nel
187 yld_t(i) = (one+eps(i))**(theta(i)*m5)
188 ENDDO
189 ELSE
190 DO i=1,nel
191 yld_t(i) = one
192 ENDDO
193 ENDIF
194
195 DO i=1,nel
196 yld(i) = a0 * yld_h(i) * yld_sr(i) * yld_t(i)
197 ENDDO
198
199
200
201 DO i=1,nel
202 hm(i) = m7*yld(i)
203 ENDDO
204 DO i=1,nel
205 IF(eps(i) > zero) hm(i) = hm(i) + yld(i)*(m2-m4/eps(i))/eps(i)
206 ENDDO
207
208
209
210 DO i=1,nel
211 ratio =
min(one,yld(i)/
max(svm(i),em20))
212
213 dpla = (one-ratio)*svm(i)/
max(g3+hm(i),em20)
214
215 yld(i) =
max(yld(i)+dpla*hm(i),zero)
216 ratio =
min(one,yld(i)/
max(svm(i),em20))
217 signxx(i) = signxx(i)*ratio
218 signyy(i) = signyy(i)*ratio
219 signzz(i) = signzz(i)*ratio
220 signxy(i) = signxy(i)*ratio
221 signyz(i) = signyz(i)*ratio
222 signzx(i) = signzx(i)*ratio
223 pla(i) = pla(i) + dpla
224 theta(i) = uvar(i,1) + eta*yld(i)*dpla/rhocp
225 ENDDO
226
227 DO i=1,nel
228 uvar(i,1) = theta(i)
229 sigvxx(i) = zero
230 sigvyy(i) = zero
231 sigvzz(i) = zero
232 sigvxy(i) = zero
233 sigvyz(i) = zero
234 sigvzx(i) = zero
235 ENDDO
236 IF (jthe == 0) THEN
237 temp(1:nel) = theta(1:nel) + t0k
238 END IF
239
240 RETURN