46
47
48
49#include "implicit_f.inc"
50
51
52
53#include "mvsiz_p.inc"
54
55
56
57#include "scr05_c.inc"
58#include "scr17_c.inc"
59#include "impl1_c.inc"
60
61
62
63 INTEGER :: NEL,NUPARAM,NUVAR,ISMSTR,IHET,NUVARV,IEXPAN
65 . time , timestep , uparam(nuparam),
66 . rho(nel), rho0(nel), volume(nel),
67 . epspxx(nel), epspyy(nel), epspzz(nel),
68 . epspxy(nel), epspyz(nel), epspzx(nel),
69 . depsxx(nel), depsyy(nel), depszz(nel),
70 . depsxy(nel), depsyz(nel), depszx(nel),
71 . epsxx(nel), epsyy(nel), epszz(nel),
72 . epsxy(nel), epsyz(nel), epszx(nel),
73 . sigoxx(nel), sigoyy(nel), sigozz(nel),
74 . sigoxy(nel), sigoyz(nel), sigozx(nel),
75 . mfxx(nel) , mfxy(nel), mfxz(nel),
76 . mfyx(nel) , mfyy(nel), mfyz(nel),
77 . mfzx(nel) , mfzy(nel), mfzz(nel),
78 . wzzdt(nel),wyydt(nel),wxxdt(nel),offg(nel),
79 . epsth3(nel)
80
81
82
84 . signxx(nel), signyy(nel), signzz(nel),
85 . signxy(nel), signyz(nel), signzx(nel),
86 . sigvxx(nel), sigvyy(nel), sigvzz(nel),
87 . sigvxy(nel), sigvyz(nel), sigvzx(nel),
88 . soundsp(nel), viscmax(nel), et(nel)
89
90
91
93 . uvar(nel,nuvar), off(nel), uvarv(*)
94
95
96
97
98 INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
99 my_real finter,fintte,tf(*),fint2v
100 EXTERNAL finter,fintte
101
102
103
104 INTEGER I,J,K,KFP,NORDRE,II,NPRONY
106 . tenscut,gmax,fscale,rvt,sumdwdl,efac,dwdrv,rbulk,dpdmu,amax,eti(mvsiz),eth
108 . evv(mvsiz,3),ev(mvsiz,3),evm1(mvsiz),evm2(mvsiz),evm3(mvsiz),p(mvsiz),
109 . mu(5),al(5),dwdl(3),t(mvsiz,3),rv(mvsiz),av(mvsiz,6),dirprv(mvsiz,3,3)
111 . h0(100),h(100),c0(mvsiz,6),c1(mvsiz,6),aa,sv(mvsiz,6),
112 . cc,fac,invdt,fft(3),p_fac(nel),nu_1,amin,lam_al(3),gtmax(nel)
113 my_real,
DIMENSION(NEL,3) :: cii
114 DOUBLE PRECISION AMAX1
115
116
117 mu(1) = uparam(1)
118 mu(2) = uparam(2)
119 mu(3) = uparam(3)
120 mu(4) = uparam(4)
121 mu(5) = uparam(5)
122 al(1) = uparam(6)
123 al(2) = uparam(7)
124 al(3) = uparam(8)
125 al(4) = uparam(9)
126 al(5) = uparam(10)
127 rbulk = uparam(11)
128 tenscut= uparam(12)
129 fscale = uparam(15)
130 nordre = nint(uparam(18))
131
132 kfp = ifunc(1)
133
134 gmax = zero
135 DO i = 1,nordre
136 gmax = gmax + mu(i)*al(i)
137 ENDDO
138
139 DO i=1,nel
140 av(i,1)=epsxx(i)
141 av(i,2)=epsyy(i)
142 av(i,3)=epszz(i)
143 av(i,4)=epsxy(i) * half
144 av(i,5)=epsyz(i) * half
145 av(i,6)=epszx(i) * half
146 ENDDO
147
148
149 IF (iresp == 1) THEN
151 ELSE
153 ENDIF
154
155 IF (ismstr == 1 .OR. ismstr == 3 ) THEN
156 DO i=1,nel
157 ev(i,1)=evv(i,1)+ one
158 ev(i,2)=evv(i,2)+ one
159 ev(i,3)=evv
160 ENDDO
161 ELSEIF(ismstr==10.OR.ismstr==12) THEN
162 DO i =1,nel
163 IF(offg(i)<=one) THEN
164 ev(i,1)=sqrt(evv(i,1)+ one)
165 ev(i,2)=sqrt(evv(i,2)+ one)
166 ev(i,3)=sqrt(evv(i,3)+ one)
167 ELSE
168 ev(i,1)=evv(i,1)+ one
169 ev(i,2)=evv(i,2)+ one
170 ev(i,3)=evv(i,3)+ one
171 END IF
172 ENDDO
173 ELSE
174 DO i=1,nel
175 ev(i,1)=exp(evv(i,1))
176 ev(i,2)=exp(evv(i,2))
177 ev(i,3)=exp(evv(i,3))
178 ENDDO
179 ENDIF
180
181 IF (impl_s > 0 .OR. ihet > 1) THEN
182
183 DO j = 1,3
184 eti(1:nel) = zero
185 DO k=1,nordre
186 DO i = 1,nel
187 amax = ev(i,j)
188 IF(amax>zero) THEN
189 IF((al(k)-one)==zero) THEN
190 eti(i) = eti(i) + mu(k)*al(k)
191 ELSE
192 eti(i) = eti(i) + mu(k)*al(k)*exp((al(k)-one)*log(amax))
193 ENDIF
194 ENDIF
195 ENDDO
196 ENDDO
197 et(1:nel) =
max(eti(1:nel),et(1:nel))
198 ENDDO
199 DO i=1,nel
200 et(i) =
max(one,et(i)/gmax)
201 ENDDO
202 ENDIF
203
204 p_fac(1:nel) = one
205 IF (rbulk > 24*gmax) THEN
206 nu_1 = fourty*(half-(3*rbulk-gmax)/(6*rbulk+gmax))
207 DO i=1,nel
208 amin =
min(ev(i,1),ev(i,2),ev(i,3))
209 IF (amin<zep2) p_fac(i) =
max(one,nu_1/
max(em20,amin))
210 ENDDO
211 END IF
212
213 DO i=1,nel
214 rv(i) = ev(i,1)*ev(i,2)*ev(i,3)
215 ENDDO
216
217 IF(iexpan > 0.AND.(ismstr==10.OR.ismstr==11.OR.ismstr==12)) THEN
218 DO i=1,nel
219 rv(i)= rv(i)-epsth3(i)
220 ENDDO
221 ENDIF
222 DO i=1,nel
223
224
225
226 IF(rv(i)>zero) THEN
227 rvt = exp((-third)*log(rv(i)))
228 ELSE
229 rvt = zero
230 ENDIF
231 evm1(i) = ev(i,1)*rvt
232 evm2(i) = ev(i,2)*rvt
233 evm3(i) = ev(i,3)*rvt
234 IF (kfp > 0) THEN
235
236 p(i) = rbulk*fscale*finter(kfp,rv(i),npf,tf,dpdmu)
237 ELSE
238
239 p(i)=p_fac(i)*rbulk
240 ENDIF
241 ENDDO
242
243
244 gtmax(1:nel) = gmax
245 eti(1:nel) = zero
246 cii(1:nel,1:3) = zero
247 DO ii = 1,nordre
248 IF (mu(ii)*al(ii) /= zero) THEN
249 DO i=1,nel
250 lam_al(1) = exp(al(ii)*log(evm1(i)))
251 lam_al(2) = exp(al(ii)*log(evm2(i)))
252 lam_al(3) = exp(al(ii)*log(evm3(i)))
253 amax = third*(lam_al(1)+lam_al(2)+lam_al(3))
254 cii(i,1:3) = cii(i,1:3) + mu(ii)*al(ii)*(lam_al(1:3)+amax)
255 ENDDO
256 ENDIF
257 ENDDO
258
259 amax1 = 0.81*half/gmax
260 DO i = 1,nel
261 amax = amax1*
max(cii(i,1),cii(i,2),cii(i,3))
262 eti(i) =
max(one,amax)
263 gtmax(i) = gmax*eti(i)
264 et(i) = eti(i)
265 ENDDO
266 DO i=1,nel
267 dwdl(1) = zero
268 dwdl(2) = zero
269 dwdl(3) = zero
270 DO k = 1,nordre
271 IF(evm1(i)>zero) THEN
272 IF(al(k)/=zero) THEN
273 dwdl(1) = dwdl(1) + mu(k)*exp(al(k)*log(evm1(i)))
274 ELSE
275 dwdl(1) = dwdl(1) + mu(k)
276 ENDIF
277 ENDIF
278 IF(evm2(i)>zero) THEN
279 IF(al(k)/=zero) THEN
280 dwdl(2) = dwdl(2) + mu(k)*exp(al(k)*log(evm2(i)))
281 ELSE
282 dwdl(
283 ENDIF
284 ENDIF
285 IF(evm3(i)>zero) THEN
286 IF(al(k)/=zero) THEN
287 dwdl(3) = dwdl(3) + mu(k)*exp(al(k)*log(evm3(i)))
288 ELSE
289 dwdl(3) = dwdl(3) + mu(k)
290 ENDIF
291 ENDIF
292 ENDDO
293 dwdrv = p(i)*(rv(i)- one)
294 sumdwdl =(dwdl(1)+dwdl(2)+dwdl(3))* third
295
296
297 t(i,1) = (dwdl(1)-(sumdwdl))/rv(i) + dwdrv
298 t(i,2) = (dwdl(2)-(sumdwdl))/rv(i) + dwdrv
299 t(i,3) = (dwdl(3)-(sumdwdl))/rv(i) + dwdrv
300 ENDDO
301
302
303
304 DO i=1,nel
305 IF (off(i) /= zero .AND.
306 . (t(i,1) > abs(tenscut) .OR. t(i,2) > abs(tenscut))) THEN
307 t(i,1) = zero
308 t(i,2) = zero
309 t(i,3) = zero
310 off(i) = zero
311 ENDIF
312 ENDDO
313
314 DO i=1,nel
315 signxx(i) = dirprv(i,1,1)*dirprv(i,1,1)*t(i,1)
316 . + dirprv(i,1,2)*dirprv(i,1,2)*t(i,2)
317 . + dirprv(i,1,3)*dirprv(i,1,3)*t(i,3)
318 signyy(i) = dirprv(i,2,2)*dirprv(i,2,2)*t(i,2)
319 . + dirprv(i,2,3)*dirprv(i,2,3)*t(i,3)
320 . + dirprv(i,2,1)*dirprv(i,2,1)*t(i,1)
321 signzz(i) = dirprv(i,3,3)*dirprv(i,3,3)*t(i,3)
322 . + dirprv(i,3,1)*dirprv(i,3,1)*t(i,1)
323 . + dirprv(i,3,2)*dirprv(i,3,2)*t(i,2)
324 signxy(i) = dirprv(i,1,1)*dirprv(i,2,1)*t(i,1)
325 . + dirprv(i,1,2)*dirprv(i,2,2)*t(i,2)
326 . + dirprv(i,1,3)*dirprv(i,2,3)*t(i,3)
327 signyz(i) = dirprv(i,2,2)*dirprv(i,3,2)*t(i,2)
328 . + dirprv(i,2,3)*dirprv(i,3,3)*t(i,3)
329 . + dirprv(i,2,1)*dirprv(i,3,1)*t(i,1)
330 signzx(i) = dirprv(i,3,3)*dirprv(i,1,3)*t(i,3)
331 . + dirprv(i,3,1)*dirprv(i,1,1)*t(i,1)
332 . + dirprv(i,3,2)*dirprv(i,1,2)*t(i,2)
333 ENDDO
334
335
336 DO i=1,nel
337 soundsp(i) = sqrt((two_third*gtmax(i)+p(i))/rho(i))
338 viscmax(i) = zero
339 ENDDO
340
341 RETURN
subroutine valpvecdp_v(sig, val, vec, nel)
subroutine valpvec_v(sig, val, vec, nel)