44
45
46
47 USE elbufdef_mod
48 use matparam_def_mod
49
50
51
52#include "implicit_f.inc"
53#include "comlock.inc"
54#include "parit_c.inc"
55
56
57
58#include "mvsiz_p.inc"
59
60
61
62#include "units_c.inc"
63#include "param_c.inc"
64#include "scr05_c.inc"
65#include "scr17_c.inc"
66#include "com08_c.inc"
67#include "impl1_c.inc"
68
69
70
71 INTEGER JFT,JLT,IOFC,KFTS,IR,IS,NEL
72 INTEGER NGL(MVSIZ),INDX(MVSIZ),
73 . IOFF_DUCT(*),MX
74 INTEGER, INTENT(IN) :: NUVAR
75 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
76
78 .
for(nel,5),mom(nel,3),eint(jlt,2),
79 . off(*),dt1c(*),nu(*),g(*),a1(*),a2(*),
80 . vol0(*),thk0(*),gs(*),epsp(*)
82 . depsxx(nel),depsyy(nel),depsxy(nel),
83 . depsyz(nel),depszx(nel),
84 . depbxx(nel),depbyy(nel),depbxy(nel),
85 . sigoxx(nel),sigoyy(nel),sigoxy(nel),
86 . sigoyz(nel),sigozx(nel),
87 . momoxx(nel),momoyy(nel),momoxy(nel),
88 . degmb(mvsiz),degfx(mvsiz),exz(*),eyz(*)
90 . thk(*),
91 . signxx(nel),signyy(nel),signxy(nel),
92 . momnxx(nel),momnyy(nel),momnxy(nel),
93 . signyz(nel),signzx(nel),
94 . etse(nel)
95 TYPE(ELBUF_STRUCT_), TARGET :: ELBUF_STR
96 type (matparam_struct_) ,intent(in) :: mat_param
97
98
99
100 INTEGER ICC,IPLA,IFORM,ISRATE,NINDX,INDEX(MVSIZ)
101 INTEGER I,J,N,VP,NMAX
103 . f1(mvsiz),f2(mvsiz),f3(mvsiz),f4(mvsiz),f5(mvsiz),z3,z4,
104 . m1(mvsiz),m2(mvsiz),m3(mvsiz),t(mvsiz),epmx,
105 . dwelm(mvsiz),dwelf(mvsiz),ca(mvsiz),cb(mvsiz),cn,
106 .
ymax(mvsiz),unsyeq(mvsiz),dwpla(mvsiz),
107 . hh(mvsiz),rr(mvsiz),c1,c2,c3,cc,cp,
108 . ym,epspdt(mvsiz),
109 . s1(mvsiz),s2(mvsiz),svm(mvsiz),nnu1(mvsiz),nu1(mvsiz),
110 . nu2(mvsiz),nu3(mvsiz),dpla_j(mvsiz),sm1(mvsiz),sm2(mvsiz),
111 . am(mvsiz),bm(mvsiz),anm(mvsiz),bnm(mvsiz),qtier(mvsiz),
112 . num1(mvsiz),num2(mvsiz),an(mvsiz),bn(mvsiz),
113 . gama(mvsiz),gama2(mvsiz),lfn(mvsiz),qfn(mvsiz),qfnm(mvsiz),
114 . degmb_loc(mvsiz),degsh_loc(mvsiz),degfx_loc(mvsiz),yld(mvsiz),
115 . logep(mvsiz),plap(mvsiz)
116 my_real :: dpla_i,dr,a,b,f,df,yld_i,cp1,cq1,cp2,cq2,sm3,fnm,
117 . da,db,a_i,b_i,qn,sn1,sn2,s,mm1,mm2,
118 . dfnp,dfnq,dfmp,dfmq,dfnmp,dfnmq,xp,xq,xpg,xqg,
119 . qnm1,qnm2,fnp,fnq,fmp,fmq,fnmp,fnmq,s3,aa,bb,plap1,
120 . thk12,ezz,aaa,bbb,ccc,asrate,epdr,
121 . ms,fs,d1,d2,mt,tmelt,tref,tstar,ca_1,cb_1,ymax_1
123 TYPE(L_BUFEL_) ,POINTER :: LBUF
124
125 DATA nmax/2/
126
127 lbuf => elbuf_str%BUFLY(1)%LBUF(ir,is,1)
128
129 iform = mat_param%iparam(1)
130 icc = mat_param%iparam(2)
131 vp = mat_param%iparam(3)
132 israte = mat_param%iparam(4)
133
134 ym = mat_param%young
135 c1 = one/ym
136 c2 =-c1*mat_param%nu
137 c3 = one/mat_param%shear
138
139 ca_1 = mat_param%uparam(1)
140 cb_1 = mat_param%uparam(2)
141 cn = mat_param%uparam(3)
142 epmx = mat_param%uparam(4)
143 ymax_1 = mat_param%uparam(5)
144 cc = mat_param%uparam(6)
145 epdr = mat_param%uparam(7)
146 z3 = mat_param%uparam(10)
147 z4 = mat_param%uparam(11)
148 asrate = mat_param%uparam(9)
149 asrate =
min(one,asrate*dt1c(i))
150
151 tref = mat_param%therm%tref
152 tmelt = mat_param%therm%tmelt
153 cp = mat_param%therm%rhocp
154 IF (cp > zero) cp = one / cp
155
156 DO i=jft,jlt
157 ca(i) = ca_1
158 cb(i) = cb_1
160 etse(i) = one
161 epspdt(i) = one
162 ENDDO
163 IF (vp == 1)THEN
164 epdr =
max(epdr, em20)
165 ELSE
166 epdr =
max(epdr*dt1, em20)
167 ENDIF
168
169
170
171
172 DO i=jft,jlt
173 degsh_loc(i) =
for(i,4)*eyz(i)+
for(i,5)*exz(i)
174 degmb_loc(i) = degmb(i) - degsh_loc(i)
175 degfx_loc(i) = degfx(i)
176
177 f1(i) = sigoxx(i)+ a1(i)*depsxx(i)+a2(i)*depsyy(i)
178 f2(i) = sigoyy(i)+ a1(i)*depsyy(i)+a2(i)*depsxx(i)
179 f3(i) = sigoxy(i)+ g(i) *depsxy(i)
180 f4(i) = sigoyz(i) + gs(i)*depsyz(i)
181 f5(i) = sigozx(i) + gs(i)*depszx(i)
182
183 thk12 = thk0(i)*one_over_12
184 m1(i) = momoxx(i) + (a1(i)*depbxx(i)+a2(i)*depbyy(i))*thk12
185 m2(i) = momoyy(i) + (a1(i)*depbyy(i)+a2(i)*depbxx(i))*thk12
186 m3(i) = momoxy(i) + g(i)*depbxy(i)*thk12
187
188 ms = m1(i)+m2(i)
189 fs = f1(i)+f2(i)
190 unsyeq(i) = one/
191 . sqrt(
max(sixteen*(ms*ms + three*(m3(i)*m3(i) - m1(i)*m2(i)))
192 . + fs*fs + three*(f3(i)*f3(i) - f1(i)*f2(i)),em20))
193 ENDDO
194
195
196
197 IF (cc /= zero) THEN
198
199
200
201 IF(vp==1)THEN
202 DO i=jft,jlt
203 plap(i) = uvar(i,i)
204 plap(i) =
max(plap(i),epdr)
205 logep(i) = log(plap(i)/epdr)
206 ENDDO
207 ELSE
208 IF (israte >= 1) THEN
209 DO i=jft,jlt
210 epspdt(i) = epsp(i)*dt1c(i)
211 epspdt(i) =
max(epspdt(i),em20)
212 logep(i) = log(epspdt(i)/epdr)
213 ENDDO
214 ELSE
215 DO i=jft,jlt
216 epspdt(i) = abs(degmb_loc(i)+degfx_loc(i)*thk0(i))*unsyeq(i)
217 epspdt(i) =
max(epspdt(i),em20)
218 logep(i) = log(epspdt(i)/epdr)
219 ENDDO
220 ENDIF
221 ENDIF
222 DO i=jft,jlt
223 epspdt(i) = logep(i)
224 t(i) = tref + cp*(eint(i,1)+eint(i,2))/vol0(i)
225 ENDDO
226
227 IF (iform == zero) THEN
228 DO i=jft,jlt
230 epspdt(i) =
max(zero,epspdt(i))
231 tstar = (t(i)-tref)/(tmelt-tref)
232 IF (tstar > zero) THEN
233 epspdt(i) = (one+cc * epspdt(i))*(one-tstar**mt)
234 ELSE
235 epspdt(i) = (one+cc * epspdt(i))
236 ENDIF
237 epspdt(i) =
max(em20,epspdt(i))
238 IF (icc == 1)
ymax(i) =
ymax(i)*epspdt(i)
239 ENDDO
240 ELSEIF (iform == 1) THEN
241 DO i=jft,jlt
242 epspdt(i) = cc*exp((-z3+z4 * epspdt(i))*t(i))
243 IF (icc == 1)
ymax(i) =
ymax(i) + epspdt(i)
244 ca(i) = ca(i) + epspdt(i)
245 epspdt(i) = one
246 ENDDO
247 ENDIF
248 ENDIF
249
250 IF (ipla == 0) THEN
251
252
253
254
255
256
257 DO i=jft,jlt
258 yld(i) = ca(i)+cb(i)*exp(cn * log(lbuf%PLA(i)+ em30))
259 yld(i) =
min(yld(i)*epspdt(i),
ymax(i))
260 rr(i) =
min(one,yld(i)*unsyeq(i))
261 ENDDO
262
263
264
265 DO i=jft,jlt
266 IF (rr(i) < one) THEN
267 IF (yld(i) >=
ymax(i))
THEN
268 hh(i) = zero
269 ELSE
270 hh(i) = cn*cb(i)*exp((cn-one)*log(lbuf%PLA(i)+em30))
271 ENDIF
272 etse(i) = hh(i)/(hh(i)+ym)
273 ENDIF
274 ENDDO
275
276
277
278 DO i=jft,jlt
279 f1(i) = f1(i)*rr(i)
280 f2(i) = f2(i)*rr(i)
281 f3(i) = f3(i)*rr(i)
282 d1 = f1(i)-sigoxx(i)
283 d2 = f2(i)-sigoyy(i)
284 dwelm(i) = (f1(i)+sigoxx(i))*(c1*d1+c2*d2)+
285 . (f2(i)+sigoyy(i))*(c2*d1+c1*d2)+
286 . (f3(i)+sigoxy(i))*(c3*(f3(i)-sigoxy(i)))
287 degmb_loc(i) = degmb_loc(i)+f1(i)*depsxx(i)+f2(i)*depsyy(i)
288 . +f3(i)*depsxy(i)
289
290 m1(i) = m1(i)*rr(i)
291 m2(i) = m2(i)*rr(i)
292 m3(i) = m3(i)*rr(i)
293 d1 = m1(i)-momoxx(i)
294 d2 = m2(i)-momoyy(i)
295 dwelf(i) = twelve*(
296 . (m1(i)+momoxx(i))*(c1*d1+c2*d2)
297 . +(m2(i)+momoyy(i))*(c2*d1+c1*d2)
298 . +(m3(i)+momoxy(i))*(c3*(m3(i)-momoxy(i))) )
299 degfx_loc(i) = degfx_loc(i)+ m1(i)*depbxx(i)+m2(i)*depbyy(i)
300 . +m3(i)*depbxy(i)
301 ENDDO
302
303 DO i=jft,jlt
304 dwpla(i) = degmb_loc(i)+degfx_loc(i)*thk0(i)-dwelm(i)-dwelf(i)
305 ENDDO
306
307
308
309 DO i=jft,jlt
310 dpla(i) = off(i)*
max(zero,half*epspdt(i)*dwpla(i)/yld(i))
311 lbuf%PLA(i) = lbuf%PLA(i) + dpla(i)
312 aaa = abs(dwelm(i)+dwelf(i))
313 bbb =
max(zero,dwpla(i))
314 ccc =
max(em20,aaa+bbb)
315 ezz = - (depsxx(i) + depsyy(i)) * (nu(i)*aaa/(one-nu(i)) + bbb)/ccc
316 thk(i) = thk(i) * (one + ezz*off(i))
317 ENDDO
318 IF (vp== 1) THEN
319 DO i=1,nel
320 plap1 = dpla(i)/
max(em20,dt1c(i))
321 plap(i) = asrate * plap1 + (one - asrate) * plap(i)
322 ENDDO
323 ENDIF
324
325 ELSE
326
327
328
329
330
331
332 DO i=jft,jlt
333 yld(i) = ca(i)+cb(i)*exp(cn * log(lbuf%PLA(i)+ em30))
334 ENDDO
335
336 DO i=jft,jlt
337 yld(i) =
min(yld(i)*epspdt(i),
ymax(i))
338 ENDDO
339
340 DO i=jft,jlt
341
342
343
344 ccc = exp(-twop6666666667*lbuf%PLA(i)*ym/yld(i))
345 gama(i) = two/(three-ccc)
346 gama2(i)= gama(i)*gama(i)
347 mm1 = thirty6*gama2(i)
348 mm2 = threep4641*gama(i)
349 qtier(i) = three*gama2(i)
350 nnu1(i) = nu(i)/(one-nu(i))
351 s1(i) = (f1(i)+f2(i))*half
352 s2(i) = (f1(i)-f2(i))*half
353 s3 = f3(i)
354 sm1(i) = (m1(i)+m2(i))*half
355 sm2(i) = (m1(i)-m2(i))*half
356 sm3 = m3(i)
357 an(i) = s1(i)*s1(i)
358 bn(i) = three*(s2(i)*s2(i)+s3*s3)
359 am(i) = sm1(i)*sm1(i)*mm1
360 bm(i) = three*(sm2(i)*sm2(i)+sm3*sm3)*mm1
361 anm(i) = s1(i)*sm1(i)*mm2
362 bnm(i) = three*(s2(i)*sm2(i)+s3*sm3)*mm2
363 svm(i) = sqrt(an(i)+bn(i)+am(i)+bm(i)+abs(anm(i)+bnm(i)))
364 ezz = -(depsxx(i)+depsyy(i))*nnu1(i)
365 thk(i) = thk(i) * (one + ezz*off(i))
366 ENDDO
367
368
369
370 nindx = 0
371
372 DO i=jft,jlt
373 IF (svm(i) > yld(i) .AND. off(i) == one) THEN
374 nindx = nindx+1
375 index(nindx) = i
376 ENDIF
377 ENDDO
378
379
380
381 DO j=1,nindx
382 i = index(j)
383 nu1(i) = half*(one + nu(i))
384 nu2(i) = three_half *(one - nu(i))
385 nu3(i) = one - nnu1(i)
386 num1(i) = one + qtier(i)
387 num2(i) = fivep5*gama2(i)
388 lfn(i) = num2(i)
389 qfn(i) = sixteenp5*gama2(i)*gama2(i)
390 qfnm(i) = -num2(i)
391 IF (yld(i) >=
ymax(i))
THEN
392 hh(i) = zero
393 ELSE
394 hh(i) = cn*cb(i)*exp((cn-one)*log(lbuf%PLA(i)+ em30))
395 ENDIF
396 etse(i) = hh(i)/(hh(i)+ym)
397 dpla_j(i) = (svm(i)-yld(i))/(three*g(i)*qtier(i)+hh(i))
398 ENDDO
399
400
401
402 DO n=1,nmax
403 DO j=1,nindx
404 i = index(j)
405 dpla_i = dpla_j(i)
406 yld_i = yld(i)+hh(i)*dpla_i
407 dr = a1(i)*dpla_i/yld_i
408 xp = dr*nu1(i)
409 xq = dr*nu2(i)
410 da = num1(i)+num2(i)*xp
411 db = num1(i)+num2(i)*xq
412 dfnp = lfn(i)+qfn(i)*xp
413 dfnq = lfn(i)+qfn(i)*xq
414 dfmp = onep8333*(xp+one)
415 dfmq = onep8333*(xq+one)
416 dfnmp = qfnm(i)*xp
417 dfnmq = qfnm(i)*xq
418 xp = half*xp
419 xq = half*xq
420 a = one+(da+num1(i))*xp
421 b = one+(db+num1(i))*xq
422 a_i = one/a
423 b_i = one/b
424 aa = a_i*a_i
425 bb = b_i*b_i
426 fnp = one+(dfnp+lfn(i))*xp
427 fnq = one+(dfnp+lfn(i))*xq
428 fmp = one+(dfmp+onep8333)*xp
429 fmq = one+(dfmq+onep8333)*xq
430 fnmp = one+dfnmp*xp
431 fnmq = one+dfnmq*xq
432 fnm = aa*fnmp*anm(i)+bb*fnmq*bnm(i)
433 IF (fnm < zero) THEN
434 s = -one
435 ELSE
436 s = one
437 ENDIF
438 cp1 = (fnp*an(i)+s*fnmp*anm(i)+fmp*am(i))*aa
439 cq1 = (fnq*bn(i)+s*fnmq*bnm(i)+fmq*bm(i))*bb
440 cp2 = (dfnp*an(i)+s*dfnmp*anm(i)+dfmp*am(i))*aa
441 cq2 = (dfnq*bn(i)+s*dfnmq*bnm(i)+dfmq*bm(i))*bb
442 xpg = two*nu1(i)*da*a_i
443 xqg = two*nu2(i)*db*b_i
444 f = cp1 +cq1-yld_i*yld_i
445 df =(cp2*nu1(i)+cq2*nu2(i)-cp1*xpg-cq1*xqg)*
446 . (a1(i)-dr*hh(i))/yld_i-two*hh(i)*yld_i
447 dpla_j(i) =
max(zero,dpla_i-f/df)
448 ENDDO
449 ENDDO
450
451
452
453 DO j=1,nindx
454 i = index(j)
455 lbuf%PLA(i) = lbuf%PLA(i) + dpla_j(i)
456 dpla_i = dpla_j(i)
457 yld_i = yld(i)+hh(i)*dpla_i
458 dr = a1(i)*dpla_i/yld_i
459 xp = dr*nu1(i)
460 xq = dr*nu2(i)
461 xpg = xp*xp
462 xqg = xq*xq
463 a = one+num1(i)*xp+num2(i)*xpg
464 b = one+num1(i)*xq+num2(i)*xqg
465 a_i = one/a
466 b_i = one/b
467 aa = a_i*a_i
468 bb = b_i*b_i
469 fnmp = one+qfnm(i)*xpg
470 fnmq = one+qfnm(i)*xqg
471 fnm = aa*fnmp*anm(i)+bb*fnmq*bnm(i)
472 IF (fnm < zero) THEN
473 s = -onep732*gama(i)
474 ELSE
475 s = onep732*gama(i)
476 ENDIF
477 qn = one+qtier(i)*xq
478 qnm1 = xq*s
479 qnm2 = qnm1*one_over_12
480 sn1 = (s1(i)*(one +qtier(i)*xp)-sm1(i)*s*xp)*a_i
481 sn2 = (s2(i)*qn-sm2(i)*qnm1)*b_i
482 s3 = (f3(i)*qn-m3(i)*qnm1)*b_i
483 mm1 = (sm1(i)*(one+xp)-s1(i)*s*xp*one_over_12)*a_i
484 mm2 = (sm2(i)*(one+xq)-s2(i)*qnm2)*b_i
485 m3(i) = (m3(i)*(one+xq)-f3(i)*qnm2)*b_i
486 f1(i) = sn1+sn2
487 f2(i) = sn1-sn2
488 f3(i) = s3
489 m1(i) = mm1+mm2
490 m2(i) = mm1-mm2
491 ezz = - nu3(i)*dr*sn1/ym
492 thk(i) = thk(i) * (one + ezz*off(i))
493 ENDDO
494
495 IF (vp== 1) THEN
496 DO i=1,nel
497 plap1 = dpla_j(i)/
max(em20,dt1c(i))
498 plap(i) = asrate * plap1 + (one - asrate) * plap(i)
499 ENDDO
500 ENDIF
501
502 ENDIF
503
504
505
506 DO i=jft,jlt
507 IF (off(i) < em01) off(i) = zero
508 IF (off(i) < one) off(i) = off(i)*four_over_5
509 ENDDO
510
511 nindx=0
512
513 DO i=jft,jlt
514 IF (off(i) < one) cycle
515 IF (lbuf%PLA(i) < epmx) cycle
516 off(i) = four_over_5
517 nindx = nindx+1
518 indx(nindx) = i
519 ioff_duct(i) = 1
520 ENDDO
521
522 IF (nindx > 0) THEN
523 IF (inconv == 1) THEN
524 DO j=1,nindx
525#include "lockon.inc"
526 WRITE(iout, 1000) ngl(indx(j))
527 WRITE(istdo,1100) ngl(indx(j)),tt
528#include "lockoff.inc"
529 ENDDO
530 ENDIF
531 ENDIF
532
533 iofc = nindx
534
535 DO i=jft,jlt
536 signxx(i) = f1(i)
537 signyy(i) = f2(i)
538 signxy(i) = f3(i)
539 signyz(i) = f4(i)
540 signzx(i) = f5(i)
541 momnxx(i) = m1(i)
542 momnyy(i) = m2(i)
543 momnxy(i) = m3(i)
544 ENDDO
545
546 1000 FORMAT(1x,'-- RUPTURE OF SHELL ELEMENT NUMBER ',i10)
547 1100 FORMAT(1x,'-- RUPTURE OF SHELL ELEMENT :',i10,' AT TIME :',g11.4)
548
549 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
for(i8=*sizetab-1;i8 >=0;i8--)