35 . ELBUF_STR,MAT_ELEM ,GEO ,PID ,
37 . NLAY ,NPTTOT ,THK_LY ,THKLY ,
38 . OFF ,NPG ,STACK ,ISUBSTACK,
39 . IGTYP ,FAILWAVE ,FWAVE_EL ,NLAY_MAX ,
40 . LAYNPT_MAX,NUMGEO ,IPG ,NUMSTACK ,
53#include "implicit_f.inc"
64 TYPE(elbuf_struct_),
INTENT(INOUT),
TARGET :: ELBUF_STR
65 my_real,
DIMENSION(NPROPG,NUMGEO),
INTENT(IN) :: GEO
66 INTEGER,
DIMENSION(NPROPGI,NUMGEO),
INTENT(IN) :: IGEO
67 INTEGER,
INTENT(IN) :: PID,NEL,IR,IS,NLAY,NPTTOT,NPG,IGTYP,
68 . ISUBSTACK,NLAY_MAX,LAYNPT_MAX,NUMGEO,
70 INTEGER,
DIMENSION(NEL),
INTENT(IN) :: NGL
71 my_real,
DIMENSION(NEL,NLAY_MAX*LAYNPT_MAX),
INTENT(IN) :: thk_ly
72 my_real,
DIMENSION(NPTTOT*NEL),
INTENT(IN) :: thkly
73 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: off
74 TYPE (STACK_PLY),
INTENT(IN) :: STACK
75 TYPE (FAILWAVE_STR_),
INTENT(IN),
TARGET :: FAILWAVE
76 INTEGER,
DIMENSION(NEL),
INTENT(INOUT) :: FWAVE_EL
77 TYPE (MAT_ELEM_) ,
INTENT(INOUT) ::
78 LOGICAL,
DIMENSION(NEL),
INTENT(INOUT) :: PRINT_FAIL
82 INTEGER ,II,IEL,IPOS,IL,IFL,IP,IPT,IG,JPG,NPTR,,NPTT,
83 . countpg,nindxly,ipt_all,nfail,ipweight,ipthkly,
85 my_real :: p_thickg,fail_exp,thfact,
norm,dfail,npfail
86 my_real,
DIMENSION(NLAY,100) :: pthkf
87 INTEGER,
DIMENSION(NEL) :: INDXLY,FAIL_NUM
88 INTEGER,
DIMENSION(:),
POINTER :: FOFF,LAY_OFF,OFFPG
89 my_real,
DIMENSION(NLAY) :: weight,p_thkly
90 TYPE(l_bufel_) ,
POINTER :: LBUF
91 CHARACTER(LEN=NCHARTITLE) :: FAIL_NAME
105 p_thickg = geo(42,pid)
106 fail_exp = geo(43,pid)
107 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
109 ipweight = ipthkly + nlay
114 nptr = elbuf_str%NPTR
115 npts = elbuf_str%NPTS
119 nfail = elbuf_str%BUFLY(il)%NFAIL
120 imat = elbuf_str%BUFLY(il)%IMAT
122 pthkf(il,ifl) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%PTHK
133 ! material internal identifier number
134 imat = elbuf_str%BUFLY(il)%IMAT
137 nfail = elbuf_str%BUFLY(il)%NFAIL
140 IF (pthkf(il,ifl) > zero)
THEN
141 pthkf(il,ifl) =
min(pthkf(il,ifl),abs(p_thickg))
142 pthkf(il,ifl) =
max(
min(pthkf(il,ifl),one-em06),em06)
144 ELSEIF (pthkf(il,ifl) < zero)
THEN
145 pthkf(il,ifl) =
max(pthkf(il,ifl),-abs(p_thickg))
146 pthkf(il,ifl) =
min(
max(pthkf(il,ifl),-one+em6),-em06)
149 pthkf(il,ifl) = p_thickg
154 nptt = elbuf_str%BUFLY(il
155 offpg => elbuf_str%BUFLY(il)%OFFPG(jpg+1:jpg+nel)
157 IF (off(iel) == one)
THEN
162 foff => elbuf_str%BUFLY(il)%FAIL(ir,is,ipt)%FLOC(ifl)%OFF
165 IF (foff(iel) < 1)
THEN
166 ipos = (ipt-1)*nel + iel
167 thfact = thfact + thkly
171 IF (((thfact >= pthkf(il,ifl)).AND.(pthkf(il,ifl) > zero)).OR.
172 . ((npfail >= abs(pthkf(il,ifl))).AND.(pthkf(il,ifl) < zero)))
THEN
184 IF (off(iel) == one)
THEN
188 countpg = countpg + elbuf_str%BUFLY(il)%OFFPG(jpg+iel)
190 IF (countpg == 0)
THEN
191 off(iel) = four_over_5
193 fail_name = mat_elem%MAT_PARAM(imat)%FAIL(fail_num(iel))%KEYWORD
195 WRITE(iout, 1000) trim(fail_name),ngl(iel)
196 WRITE(istdo,1100) trim(fail_name),ngl(iel
197#include
"lockoff.inc"
198 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
204 !=================================================================
207 ELSEIF (nlay == npttot)
THEN
214 nfail = elbuf_str%BUFLY(il)%NFAIL
215 lay_off => elbuf_str%BUFLY(il)%OFF
216 offpg =>elbuf_str%BUFLY(il)%OFFPG(jpg+1:jpg+nel)
217 imat = elbuf_str%BUFLY(il)%IMAT
219 IF (off(iel) == one .AND. lay_off(iel) == 1)
THEN
221 foff => elbuf_str%BUFLY(il)%FAIL(ir,is,ipt)%FLOC(ifl)%OFF
222 IF (foff(iel) < 1)
THEN
232 lay_off => elbuf_str%BUFLY(il)%OFF
234 IF (off(iel) == one)
THEN
235 IF (lay_off(iel) == 1)
THEN
239 countpg = countpg + elbuf_str%BUFLY(il)%OFFPG(jpg+iel)
241 IF (countpg == 0)
THEN
242 nindxly = nindxly + 1
243 indxly(nindxly) = iel
250 IF (nindxly > 0)
THEN
252 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
253 IF (igtyp == 17 .OR. igtyp == 51)
THEN
254 id_ply = igeo(1,stack%IGEO(2+il,isubstack))
256 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack)-numstack)
259 fail_name = mat_elem%MAT_PARAM(imat)%FAIL(fail_num(indxly(i)))%KEYWORD
261 WRITE(iout, 3000) trim(fail_name),id_ply,ngl(indxly(i))
262 WRITE(istdo,3100) trim(fail_name),id_ply,ngl(indxly(i)),tt
263#include "lockoff.inc"
268 fail_name = mat_elem%MAT_PARAM(imat)%FAIL(fail_num(indxly(i)))%KEYWORD
270 WRITE(iout, 2000) trim(fail_name),il,ngl(indxly(i))
271 WRITE(istdo,2100) trim(fail_name),il,ngl(indxly(i
272#include "lockoff.inc"
281 IF (off(iel) == one)
THEN
286 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
287 weight(il) = stack%GEO(ipweight+ il,isubstack)
289 weight(il) = geo(ipweight + il,pid)
291 lay_off => elbuf_str%BUFLY(il)%OFF
292 ipos = (il-1)*nel + iel
293 dfail = thkly(ipos)*weight(il)
295 IF (off(iel) == one .AND. lay_off(iel) == 0)
THEN
296 thfact = thfact + thkly(ipos)*weight(il)
297 npfail = npfail + one/nlay
300 IF (((thfact >= p_thickg*
norm).AND.
301 . ((npfail >= abs(p_thickg)).AND.(p_thickg < zero)))
THEN
302 off(iel) = four_over_5
303 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
318 nfail = elbuf_str%BUFLY(il)%NFAIL
319 p_thkly(il) = stack%GEO(ipthkly + il,isubstack)
322 IF (pthkf(il,ifl) > zero)
THEN
323 pthkf(il,ifl) =
min(pthkf(il,ifl),abs(p_thkly(il)))
324 pthkf(il,ifl) =
max(
min(pthkf(il,ifl),one-em06),em06)
326 ELSEIF (pthkf(il,ifl) < zero)
THEN
327 pthkf(il,ifl) =
max(pthkf(il,ifl),-abs(p_thkly(il)))
328 pthkf(il,ifl) =
min(
max(pthkf(il,ifl),-one+em6),-em06)
331 pthkf(il,ifl) = p_thkly(il)
338 nptt = elbuf_str%BUFLY(il)%NPTT
339 nfail = elbuf_str%BUFLY(il)%NFAIL
340 lay_off => elbuf_str%BUFLY(il)%OFF
341 offpg =>elbuf_str%BUFLY(il)%OFFPG(jpg+1:jpg+nel)
342 weight(il) = stack%GEO(ipweight + il,isubstack)
343 imat = elbuf_str%BUFLY(il)%IMAT
345 IF (off(iel) == one .AND. lay_off(iel) == 1)
THEN
350 foff => elbuf_str%BUFLY(il)%FAIL(ir,is,ipt)%FLOC(ifl)%OFF
351 IF (foff(iel) < one)
THEN
353 ipos = (ip-1)*nel + iel
354 thfact = thfact + thkly(ipos)/thk_ly(iel,il)
355 npfail = npfail + one/nptt
357 IF (((thfact >= pthkf(il,ifl)).AND.(pthkf(il,ifl)>zero)).OR.
358 . ((thfact >= abs(pthkf(il,ifl))).AND.(pthkf(il,ifl)<zero)))
THEN
366 ipt_all = ipt_all + nptt
371 IF (off(iel) == one)
THEN
373 nfail = elbuf_str%BUFLY(il)%NFAIL
374 lay_off => elbuf_str%BUFLY(il)%OFF
376 IF (lay_off(iel) == 1)
THEN
380 countpg = countpg + elbuf_str%BUFLY(il)%OFFPG(jpg+iel)
382 IF (countpg == 0)
THEN
383 nindxly = nindxly + 1
384 indxly(nindxly) = iel
386 nptt = elbuf_str%BUFLY(il)%NPTT
391 foff => elbuf_str%BUFLY(il)%FAIL(ipr,ips,ipt)%FLOC(ifl)%OFF
400 IF (nindxly > 0)
THEN
401 IF (igtyp == 51)
THEN
402 id_ply = igeo(1,stack%IGEO(2+il,isubstack
404 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack)-numstack)
407 fail_name = mat_elem%MAT_PARAM(imat)%FAIL(fail_num(indxly(i)))%KEYWORD
409 WRITE(iout, 3000) trim(fail_name),id_ply,ngl(indxly(i))
410 WRITE(istdo,3100) trim(fail_name),id_ply,ngl(indxly(i)),tt
411#include "lockoff.inc"
420 IF (off(iel) == one)
THEN
425 weight(il) = stack%GEO(ipweight+ il,isubstack
426 lay_off => elbuf_str%BUFLY(il)%OFF
427 dfail = (thk_ly(iel,il)*weight(il))**fail_exp
429 IF (lay_off(iel) == 0)
THEN
430 thfact = thfact + dfail
431 npfail = npfail + one/nlay
434 thfact = thfact**(one/fail_exp)
436 IF (((thfact >= p_thickg*
norm).AND.(p_thickg > zero)).OR.
437 . ((thfact >= abs(p_thickg)).AND.(p_thickg < zero)))
THEN
438 off(iel) = four_over_5
439 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
450 !=======================================================================
451 1000
FORMAT(1x,
'-- RUPTURE (',a,
') OF SHELL ELEMENT NUMBER ',i10)
452 1100
FORMAT(1x,
'-- RUPTURE (',a,
') OF SHELL ELEMENT :',i10,
' AT TIME :',g11.4)
453 2000
FORMAT(1x,
'-- FAILURE (',a,
') OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10)
454 2100
FORMAT(1x,
'-- FAILURE (',a,
') OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10,
455 . 1x,
'AT TIME :',g11.4)
456 3000
FORMAT(1x,
'-- FAILURE (',a,
') OF PLY ID ',i10,
' ,SHELL ELEMENT NUMBER ',i10)
457 3100
FORMAT(1x,
'-- FAILURE (',a,
') OF PLY ID ',i10,
' ,SHELL ELEMENT NUMBER ',i10,
458 . 1x,
'AT TIME :',g11.4)