46
47
48
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "mvsiz_p.inc"
60#include "units_c.inc"
61#include "comlock.inc"
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 INTEGER ,INTENT(IN) :: NEL,,NUVAR,IPG,ILAY,IPT,INLOC,
96 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: NGL
97 INTEGER, DIMENSION(NTABLF) ,INTENT(IN) :: ITABLF
99 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: off,thk,aldt,dpla,epsp,
100 . temp,signxx,signyy,signxy
101 my_real,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
102
103
104
105 INTEGER ,INTENT(OUT) ::DMG_FLAG
106 INTEGER ,DIMENSION(NEL) ,INTENT(INOUT) :: FOFF
107 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: dfmax
108 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: tdel,dmg_scale
109 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
110
111
112
113 INTEGER NPF(*), , IFUNC(NFUNC)
115 EXTERNAL finter
116 TYPE(TTABLE) TABLE(*)
117
118
119
120
121
122
123
124
125
126
127 INTEGER :: I,J,NINDX,NINDXF,NINSTAB,IFAIL_SH,NDIM
128
129INTEGER, DIMENSION(MVSIZ) :: INDX,INDXF,INDSTAB,IPOSV,IADP,ILENP
130 INTEGER IPOST1(NEL,1),IPOST2(NEL,2),IPOST3(NEL,3)
131
133 my_real,
DIMENSION(MVSIZ) :: epsf,epsf_n,sigm,yyv,dxdyv,lambdav
135 my_real,
DIMENSION(NEL,1) :: xxv1
136 my_real,
DIMENSION(NEL,2) :: xxv2
137 my_real,
DIMENSION(NEL,3) :: xxv3
138 my_real :: p,svm,df,fac,lambda,
139 . y1scale,x1scale,y2scale,x2scale,p_thinn,
ecrit,fade_expo,
140 . dcrit,el_ref,sc_el,sc_temp,p_thick,dd,dn,yy_n
141 my_real,
DIMENSION(MVSIZ) :: dp
142 INTEGER :: NINDX_2
143 INTEGER, DIMENSION(MVSIZ) :: INDX_2
144
145
146
147
148
149
150
151
152
153
154
155 ifail_sh = int(uparam(2))
156 p_thick = uparam(3)
157 dcrit = uparam(4)
158 dd = uparam(5)
159 dn = uparam(6)
160 sc_temp = uparam(7)
161 sc_el = uparam(8)
162 el_ref = uparam(9)
163 y1scale = uparam(12)
164 x1scale = uparam(13)
165 y2scale = uparam(14)
166 x2scale = uparam(15)
167 p_thinn = uparam(16)
169 fade_expo = uparam(18)
170 dmg_flag = int(uparam(19))
171 inst_flag = int(uparam(20))
172 shrf = uparam(21)
173 biaxf = uparam(22)
174 IF (shrf == -one .and. biaxf == one) THEN
175 size_flag = 0
176 ELSE
177 size_flag = 1
178 END IF
179
180
181 itab_epsf = itablf(1)
182
183 itab_inst = itablf(2)
184
185 ifun_el = ifunc(1)
186 ifun_temp = ifunc(2)
187 ifun_dmg = ifunc(3)
188 ifun_fad = ifunc(4)
189
190 nindxf = 0
191 nindx = 0
192 ninstab = 0
193 DO i=1,nel
194 IF (inloc > 0) uvar(i,5) = aldt(i)
195 IF (off(i) == one .and. foff(i) == 1) THEN
196 nindx = nindx+1
197 indx(nindx) = i
198 ENDIF
199 ENDDO
200
201
202
203
204
205 ndim = table(itab_epsf)%NDIM
206#include "vectorize.inc"
207 DO j=1,nindx
208 i = indx(j)
209 p = third*(signxx(i) + signyy(i))
210 svm = sqrt(signxx(i)*signxx(i) + signyy(i)*signyy(i)
211 . - signxx(i)*signyy(i) + three*signxy(i)*signxy(i))
212 sigm(i) = p /
max(em20,svm)
213 ENDDO
214
215 IF (ndim == 3) THEN
216#include "vectorize.inc"
217 DO j=1,nindx
218 i = indx(j)
219 xxv3(j,1) = sigm(i)
220 xxv3(j,2) = epsp(i)*x1scale
221 xxv3(j,3) = zero
222 ipost3(j,1)= nint(uvar(i,6))
223 ipost3(j,2)= nint(uvar(i,7))
224 ipost3(j,3)= 0
225 ENDDO
226 ELSE IF (ndim == 2) THEN
227#include "vectorize.inc"
228 DO j=1,nindx
229 i = indx(j)
230 xxv2(j,1) = sigm(i)
231 xxv2(j,2) = epsp(i)*x1scale
232 ipost2(j,1)= nint(uvar(i,6))
233 ipost2(j,2)= nint(uvar(i,7))
234 ENDDO
235 ELSE IF (ndim == 1) THEN
236#include "vectorize.inc"
237 DO j=1,nindx
238 i = indx(j)
239 xxv1(j,1) = sigm(i)
240 ipost1(j,1) = nint(uvar(i,6))
241 ENDDO
242 END IF
243
244
245 IF (size_flag == 1) THEN
246#include "vectorize.inc"
247 DO j=1,nindx
248 i = indx(j)
249 IF (sigm(i) > shrf .and. sigm(i) < biaxf) THEN
250 ninstab = ninstab + 1
251 indstab(ninstab) = i
252 END IF
253 ENDDO
254 END IF
255
256 IF (ndim == 3) THEN
257
258 CALL table_vinterp (table(itab_epsf),nel,nindx,ipost3,xxv3,yyv,dxdyv)
259
260#include "vectorize.inc"
261 DO j=1,nindx
262 i = indx(j)
263 epsf(i) = yyv(j) * y1scale
264 uvar(i,6)= ipost3(j,1)
265 uvar(i,7)= ipost3(j,2)
266 ENDDO
267
268 ELSE IF (ndim == 2) THEN
269
270 CALL table_vinterp (table(itab_epsf),nel,nindx,ipost2,xxv2,yyv,dxdyv)
271
272#include "vectorize.inc"
273 DO j=1,nindx
274 i = indx(j)
275 epsf(i) = yyv(j) * y1scale
276 uvar(i,6)=ipost2(j,1)
277 uvar(i,7)=ipost2(j,2)
278 ENDDO
279
280 ELSE IF (ndim == 1) THEN
281
282 CALL table_vinterp (table(itab_epsf),nel,nindx,ipost1,xxv1,yyv,dxdyv)
283
284#include "vectorize.inc"
285 DO j=1,nindx
286 i = indx(j)
287 epsf(i) = yyv(j) * y1scale
288 uvar(i,6) = ipost1(j,1)
289 ENDDO
290
291 END IF
292
293 IF (ifun_el > 0 .AND. inst_flag /= 2) THEN
294 IF (size_flag == 0) THEN
295#include "vectorize.inc"
296 DO j=1,nindx
297 i = indx(j)
298
299 lambdav(j) = uvar(i,5) / el_ref
300 iposv(j) = nint(uvar(i,8))
301 iadp(j) = npf(ifun_el) / 2 + 1
302 ilenp(j) = npf(ifun_el + 1) / 2 -iadp(j) - iposv(j)
303 ENDDO
304
305 CALL vinter2(tf,iadp,iposv,ilenp,nindx,lambdav,dxdyv,yyv)
306
307#include "vectorize.inc"
308 DO j=1,nindx
309 i = indx(j)
310 fac = sc_el*yyv(j)
311 epsf(i) = epsf(i)* fac
312 uvar(i,8) = iposv(j)
313 ENDDO
314
315 ELSE
316#include "vectorize.inc"
317 DO j=1,ninstab
318 i = indstab(j)
319
320 lambdav(j) = uvar(i,5) / el_ref
321 iposv(j) = nint(uvar(i,8))
322 iadp(j) = npf(ifun_el) / 2 + 1
323 ilenp(j) = npf(ifun_el + 1) / 2 -iadp(j) - iposv(j)
324 ENDDO
325
326 CALL vinter2(tf,iadp,iposv,ilenp,ninstab,lambdav,dxdyv,yyv)
327
328#include "vectorize.inc"
329 DO j=1,ninstab
330 i = indstab(j)
331 fac = sc_el*yyv(j)
332 epsf(i) = epsf(i)* fac
333 uvar(i,8) = iposv(j)
334 ENDDO
335 END IF
336 ENDIF
337
338
339
340 IF (itab_inst > 0) THEN
341
342#include "vectorize.inc"
343 DO j=1,nindx
344 i = indx(j)
345 xx2(1) = sigm(i)
346 xx2(2) = epsp(i) *x2scale
348 epsf_n(i) = yy_n * y2scale
349 ENDDO
350
351 IF (ifun_el > 0 .AND. inst_flag /= 1) THEN
352 IF (size_flag == 0) THEN
353#include "vectorize.inc"
354 DO j=1,nindx
355 i = indx(j)
356 lambda = uvar(i,5) / el_ref
357 fac = sc_el*finter(ifun_el,lambda,npf,tf,df)
358 epsf_n(i) = epsf_n(i)* fac
359 ENDDO
360 ELSE
361#include "vectorize.inc"
362 DO j=1,ninstab
363 i = indstab(j)
364 lambda = uvar(i,5) / el_ref
365 fac = sc_el*finter(ifun_el,lambda,npf,tf,df)
366 epsf_n(i) = epsf_n(i)* fac
367 ENDDO
368 END IF
369 ENDIF
370
371 ELSEIF (
ecrit > zero)
THEN
372
373#include "vectorize.inc"
374 DO j=1,nindx
375 i = indx(j)
377 ENDDO
378 ELSE
379#include "vectorize.inc"
380 DO j=1,nindx
381 i = indx(j)
382 epsf_n(i) = zero
383 ENDDO
384 ENDIF
385
386 IF (ifun_temp > 0) THEN
387#include "vectorize.inc"
388 DO j=1,nindx
389 i = indx(j)
390 fac = sc_temp*finter(ifun_temp,temp(i),npf,tf,df)
391 epsf(i) = epsf(i)* fac
392 ENDDO
393 ENDIF
394
395
396 IF (fade_expo < zero) THEN
397
398 DO j=1,nindx
399 i = indx(j)
400 lambda = uvar(i,5) / el_ref
401 fade_expo = finter(ifun_fad,lambda,npf,tf,df)
402 ENDDO
403 ENDIF
404
405 nindx_2 = 0
406 IF (ifun_dmg > 0 ) THEN
407#include "vectorize.inc"
408 DO j=1,nindx
409 i = indx(j)
410 IF (uvar(i,1) < dcrit) THEN
411 nindx_2 = nindx_2 + 1
412 indx_2(nindx_2) = i
413 dp(i) = finter(ifun_dmg,uvar(i,1),npf,tf,df)
414 ENDIF
415 ENDDO
416 ELSE
417#include "vectorize.inc"
418 DO j=1,nindx
419 i = indx(j)
420 IF (uvar(i,1) < dcrit) THEN
421 nindx_2 = nindx_2 + 1
422 indx_2(nindx_2) = i
423 IF (uvar(i,1) == zero) THEN
424 dp(i) = one
425 ELSE
426 dp(i) = dn*uvar(i,1)**(one-one/dn)
427 ENDIF
428 ENDIF
429 ENDDO
430 ENDIF
431#include "vectorize.inc"
432 DO j=1,nindx_2
433 i = indx_2(j)
434 IF (epsf(i) > zero) uvar(i,1) = uvar(i,1)+dp(i)*dpla(i)/epsf(i)
435 IF ((p_thinn*uvar(i,2)) > thk(i)) THEN
436 uvar(i,1) = dcrit
437 foff(i) = 0
438 tdel(i) = time
439
440 ENDIF
441
442
443 IF (dmg_flag == 1 .AND. uvar(i,1) <= dcrit) THEN
444 IF (epsf_n(i) > zero .AND. sigm(i) >= zero ) THEN
445 uvar(i,3) = uvar(i,3) + dp(i)*dpla(i)/epsf_n(i)
446 ENDIF
447
448 IF (uvar(i,3) >= one) THEN
449 IF (fade_expo /= zero) THEN
450 uvar(i,4) = uvar(i,4) + dp(i)*dpla(i)/(epsf(i)-epsf_n(i))
451 IF (uvar(i,4) > dd) THEN
452 dmg_scale(i) = one - ((uvar(i,4)-dd)/(one-dd))**fade_expo
453 dmg_scale(i) =
max(dmg_scale(i),zero)
454 ENDIF
455 ENDIF
456 ENDIF
457
458
459 ENDIF
460
461 IF (uvar(i,1) >= dcrit) THEN
462 nindxf = nindxf+1
463 indxf(nindxf) = i
464 tdel(i)= time
465 IF (ifail_sh == 3) THEN
466 foff(i) = -1
467 ELSE
468 foff(i) = 0
469 ENDIF
470 ENDIF
471 ENDDO
472
473
474
475
476#include "vectorize.inc"
477 DO j=1,nindx
478 i = indx(j)
479 dfmax(i)=
min(one,
max(dfmax(i),uvar(i,1)/dcrit))
480 ENDDO
481
482
483
484 IF (nindxf > 0) THEN
485 DO j=1,nindxf
486 i = indxf(j)
487#include "lockon.inc"
488 WRITE(iout, 2000) ngl(i),ipg,ilay,ipt
489 WRITE(istdo,2100) ngl(i),ipg,ilay,ipt,time
490#include "lockoff.inc"
491 ENDDO
492 ENDIF
493
494 2000 FORMAT(1x,'FAILURE (FTAB) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
495 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3)
496 2100 FORMAT(1x,'FAILURE (FTAB) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
497 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3,1x,'AT TIME :',1pe12.4)
498
499 RETURN
subroutine ecrit(timers, partsav, ms, v, in, r, dmas, weight, enintot, ekintot, a, ar, fxbipm, fxbrpm, monvol, xmom_sms, sensors, qfricint, ipari, weight_md, wfexth, iflag, ms_2d, multi_fvm, mas_nd, kend, h3d_data, dynain_data, usreint, output)
subroutine vinter2(tf, iad, ipos, ilen, nel0, x, dydx, y)