48
49
50
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "mvsiz_p.inc"
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104#include "param_c.inc"
105 INTEGER NEL, , NUVAR,,IPLA
106 INTEGER NGL(NEL),MAT(NEL),IPM(NPROPMI,*)
108 . time,timestep,uparam(*),
109 . rho(nel),rho0(nel),volume(nel),eint(nel),
110 . epspxx(nel),epspyy(nel),epspzz(nel),
111 . epspxy(nel),epspyz(nel),epspzx(nel),
112 . depsxx(nel),depsyy(nel),depszz(nel),
113 . depsxy(nel),depsyz(nel),depszx(nel),
114 . epsxx(nel) ,epsyy(nel) ,epszz(nel) ,
115 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,
116 . sigoxx(nel),sigoyy(nel),sigozz(nel),
117 . sigoxy(nel),sigoyz(nel),sigozx(nel),
118 . epsp(nel),seq_output(nel)
119
120
121
123 . signxx(nel),signyy(nel),signzz(nel),
124 . signxy(nel),signyz(nel),signzx(nel),
125 . sigvxx(nel),sigvyy(nel),sigvzz(nel),
126 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
127 . soundsp(nel),viscmax(nel)
128
129
130
132 . uvar(nel,nuvar), off(nel)
133
134
135
136 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
138 . finter2, tf(*)
139 EXTERNAL finter2
140
141
142
143
144
145
146
147
148
149
150
151 INTEGER I,J,IADBUFV(),J1,J2,JJ(MVSIZ),NFUNC,
152 . NRATE(MVSIZ),IPOS1(MVSIZ),IPOS2(MVSIZ),IAD1(MVSIZ),
153 . ILEN1(MVSIZ),IAD2(MVSIZ),ILEN2(MVSIZ),
154 . IFUNC(MVSIZ,100),NFUNCV(MVSIZ),PFUN(MVSIZ),
155 . IPOSP(MVSIZ),IADP(MVSIZ),ILENP(MVSIZ),NFUNCM,NRATEM,
156 . IPFLAG,IPARAM,NPAR, IFLAG(MVSIZ)
158 . rate(mvsiz,2),yfac(mvsiz,2),
159 . y1(mvsiz),y2(mvsiz),h(mvsiz),dydx1(mvsiz),
160 . dydx2(mvsiz),pla(mvsiz),fail(mvsiz),epsr1(mvsiz),
161 . p0(mvsiz),pfac(mvsiz),
162 . dfdp(mvsiz),dpla,
163 . evl(mvsiz),
164 . e11(mvsiz), e22(mvsiz), g12(mvsiz),g23(mvsiz),
165 . f1(mvsiz), f2(mvsiz), f11(mvsiz), f22(mvsiz), f12(mvsiz),
166 . f44(mvsiz), f55(mvsiz), f23(mvsiz),f(mvsiz), s1c(mvsiz),
167 . s2c(mvsiz),s2t(mvsiz), s3c(mvsiz),s3t(mvsiz), s4t(mvsiz),
168 . s4c(mvsiz), s45c(mvsiz),s45t(mvsiz),scale,bb,aa,dd,cc,ss1,
169 . ss2,s1t(mvsiz), evol(mvsiz)
170
171
172
173
174
175 DO i=1,nel
176 iadbufv(i) = ipm(7,mat(i))-1
177 e11(i) = uparam(iadbufv(i)+1)
178 e22(i) = uparam(iadbufv(i)+2)
179 g12(i) = uparam(iadbufv(i)+3)
180 g23(i) = uparam(iadbufv(i)+4)
181 iflag(i) = nint(uparam(iadbufv(i)+5))
182
183 nfunc = ipm(10,mat(i))
184 DO j=1,nfunc
185 ifunc(i,j) = ipm(10+j,mat(i))
186 ENDDO
187 ENDDO
188
189 IF(time==zero)THEN
190 DO i=1,nel
191 uvar(i,1)=zero
192 DO j=1,nfunc
193 uvar(i,j+1)=zero
194 ENDDO
195 ENDDO
196 ENDIF
197
198
199 DO i=1,nel
200 pla(i) = uvar(i,1)
201 pla(i) = pla(i) + depsxx(i) + depsyy(i) + depszz(i)
202 signxx(i)=sigoxx(i)+ e11(i) * depsxx(i)
203 signyy(i)=sigoyy(i)+ e22(i) * depsyy(i)
204 signzz(i)=sigozz(i)+ e22(i) * depszz(i)
205 signxy(i)=sigoxy(i)+ g12(i) * depsxy(i)
206 signyz(i)=sigoyz(i)+ g23(i) * depsyz(i)
207 signzx(i)=sigozx(i)+ g12(i) * depszx(i)
208
209 soundsp(i) = sqrt(
max(e11(i),e22(i),g12(i),g23(i))/rho0(i))
210 evol(i) =one - exp(pla(i))
211 viscmax(i) = zero
212 uvar(i,1)= pla(i)
213 ENDDO
214
215
216
217 DO i=1,nel
218 jj(i) = 1
219 evl(i)=zero
220 ENDDO
221
222 DO j=1, nfunc
223 DO i=1,nel
224
225 ipos1(i) = nint(uvar(i,1+j))
226 iad1(i) = npf(ifunc(i,j)) / 2 + 1
227 ilen1(i) = npf(ifunc(i,j)+1) / 2 - iad1(i) - ipos1(i)
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244 ENDDO
245
246
247 CALL vinter(tf,iad1,ipos1,ilen1,nel,evol,dydx1,y1)
248 CALL vinter(tf,iad1,ipos1,ilen1,nel,evl,dydx1,y2)
249
250 IF(j==1) THEN
251 DO i=1, nel
252 IF(iflag(i)/=1)THEN
253 IF(evol(i)>zero)THEN
254 s1c(i)= y1(i)
255 s1t(i)= y2(i)
256 ELSE
257 s1c(i)= y2(i)
258 s1t(i)= y1(i)
259 ENDIF
260 ELSE
261 s1c(i)= y1(i)
262 s1t(i)= y1(i)
263 ENDIF
264 uvar(i,1+j)= ipos1(i)
265 ENDDO
266
267 ELSEIF(j==2)THEN
268
269
270
271 DO i=1, nel
272 IF(iflag(i)/=1)THEN
273 IF(evol(i)>zero)THEN
274 s2c(i)= y1(i)
275 s2t(i)= y2(i)
276 ELSE
277 s2c(i)= y2(i)
278 s2t(i)= y1(i)
279 ENDIF
280 ELSE
281 s2c(i)= y1(i)
282 s2t(i)= y1(i)
283 ENDIF
284 uvar(i,1+j)= ipos1(i)
285 ENDDO
286
287 ELSEIF(j==3)THEN
288
289
290
291 DO i=1, nel
292 IF(iflag(i)/=1)THEN
293 IF(evol(i)>zero)THEN
294 s3c(i)= y1(i)
295 s3t(i)= y2(i)
296 ELSE
297 s3c(i)= y2(i)
298 s3t(i)= y1(i)
299 ENDIF
300 ELSE
301 s3c(i)= y1(i)
302 s3t(i)= y1(i)
303 ENDIF
304 uvar(i,1+j)= ipos1(i)
305 ENDDO
306
307 ELSEIF(j==4)THEN
308
309
310
311 DO i=1, nel
312 IF(iflag(i)/=1)THEN
313 IF(evol(i)>zero)THEN
314 s4c(i)= y1(i)
315 s4t(i)= y2(i)
316 ELSE
317 s4c(i)= y2(i)
318 s4t(i)= y1(i)
319 ENDIF
320 ELSE
321 s4c(i)= y1(i)
322 s4t(i)= y1(i)
323 ENDIF
324 uvar(i,1+j)= ipos1(i)
325 ENDDO
326
327 ELSEIF(j==5)THEN
328
329
330
331 DO i=1, nel
332 IF(iflag(i)/=1)THEN
333 IF(evol(i)>zero)THEN
334 s45c(i)= y1(i)
335 s45t(i)= y2(i)
336 ELSE
337 s45c(i)= y2(i)
338 s45t(i)= y1(i)
339 ENDIF
340 ELSE
341 s45c(i)= y1(i)
342 s45t(i)= y1(i)
343 ENDIF
344 uvar(i,1+j)= ipos1(i)
345 ENDDO
346 ENDIF
347 ENDDO
348
349 DO i=1,nel
350 f1(i) = -one/s1c(i) + one/s1t(i)
351 f2(i) = -one/s2c(i) + one/s2t(i)
352 f11(i)= one/(s1c(i)*s1t(i))
353 f22(i)= one/(s2c(i)*s2t(i))
354 f44(i)= one/(s3c(i)*s3t(i))
355 f55(i)= one/(s4c(i)*s4t(i))
356 f12(i)=(-half)*sqrt(f11(i)*f22(i))
357 f23(i)=(-half)*f22(i)
358
359 IF(ifunc(i,5)>0)THEN
360 f12(i)= two/(s45c(i)*s45c(i)) -
361 . (half)*(f11(i)+ f22(i) + f44(i)) +
362 . (f1(i) + f2(i))/s45c(i)
363 ENDIF
364
365 f(i) = f1(i)*signxx(i) + f2(i)* signyy(i) + f2(i)*signzz(i)+
366 . f11(i)*signxx(i)**2 + f22(i)*signyy(i)**2 + f22(i)*signzz(i)**2
367 .+f44(i)*signxy(i)**2 + f55(i)*signyz(i)**2 + f44(i)*signzx(i)**2
368 .+two*f12(i)*signxx(i)*signyy(i) + two*f23(i)*signyy(i)*signzz(i)
369 .+two*f12(i)*signzz(i)*signxx(i)
370
371
372
373 IF(f(i)<=one) THEN
374 scale=one
375 ELSE
376 bb= f1(i)*signxx(i) + f2(i)*signyy(i)+ f2(i)*signzz(i)
377 cc = -one
378 aa =
379 . f11(i)*signxx(i)**2 + f22(i)*signyy(i)**2 + f22(i)*signzz(i)**2
380 .+f44(i)*signxy(i)**2 + f55(i)*signyz(i)**2 + f44(i)*signzx(i)**2
381 .+two*f12(i)*signxx(i)*signyy(i) + two*f23(i)*signyy(i)*signzz(i)
382 .+two*f12(i)*signzz(i)*signxx(i)
383
384 dd= bb**2 - four*aa*cc
385 IF(dd<zero) THEN
386 CALL ancmsg(msgid=136,anmode=aninfo)
388 ENDIF
389
390 ss1 = (-bb + sqrt(dd))/(two*aa)
391 ss2 = (-bb - sqrt(dd))/(two*aa)
392
393 IF(ss1<=zero) scale = ss2
394 IF(ss2<=zero) scale = ss1
395
396 IF(ss1>0.AND.ss2>0) THEN
397 WRITE(*,*)' TWO POSITIVE ROOTS IN STRANDFOAM'
398 IF(ss1<ss2) scale = ss1
399 IF(ss2<ss1) scale = ss2
400 ENDIF
401 ENDIF
402
403
404 signxx(i) = signxx(i) * scale
405 signyy(i) = signyy(i) * scale
406 signzz(i) = signzz(i) * scale
407 signxy(i) = signxy(i) * scale
408 signyz(i) = signyz(i) * scale
409 signzx(i) = signzx(i) * scale
410
411 ENDDO
412
413 RETURN
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
subroutine vinter(tf, iad, ipos, ilen, nel, x, dydx, y)