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 ,
42 . IPART ,LIPART1 ,IPARTC ,NPART)
54#include "implicit_f.inc"
65 TYPE(elbuf_struct_),
INTENT(INOUT),
TARGET :: ELBUF_STR
66 my_real,
DIMENSION(NPROPG,NUMGEO),
INTENT(IN) :: GEO
67 INTEGER,
DIMENSION(NPROPGI,NUMGEO),
INTENT(IN) :: IGEO
68 INTEGER,
INTENT(IN) :: PID,NEL,IR,IS,NLAY,NPTTOT,NPG,IGTYP,
69 . ISUBSTACK,NLAY_MAX,LAYNPT_MAX,NUMGEO,
70 . IPG,NUMSTACK,LIPART1,NPART
71 INTEGER,
DIMENSION(LIPART1,NPART),
INTENT(IN) :: IPART
72 INTEGER,
DIMENSION(NEL),
INTENT(IN) :: NGL,IPARTC
73 my_real,
DIMENSION(NEL,NLAY_MAX*LAYNPT_MAX),
INTENT(IN) :: thk_ly
74 my_real,
DIMENSION(NPTTOT*NEL),
INTENT(IN) :: thkly
75 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: off
76 TYPE (STACK_PLY),
INTENT(IN) :: STACK
77 TYPE (FAILWAVE_STR_),
INTENT(IN),
TARGET :: FAILWAVE
78 INTEGER,
DIMENSION(NEL),
INTENT(INOUT) :: FWAVE_EL
79 TYPE (MAT_ELEM_) ,
INTENT(INOUT) :: MAT_ELEM
80 LOGICAL,
DIMENSION(NEL),
INTENT(INOUT) :: PRINT_FAIL
84 INTEGER I, IEL, IPOS, IL, IFL, IP, IPT, IG, JPG, NPTR, NPTS, NPTT,
85 . countpg,nindxly,ipt_all,nfail,ipweight,ipthkly,
87 my_real :: p_thickg,fail_exp,thfact,
norm,dfail,npfail
88 my_real,
DIMENSION(NLAY,100) :: pthkf
89 INTEGER,
DIMENSION(NEL) :: INDXLY,FAIL_NUM
90 INTEGER,
DIMENSION(:)POINTER
91DIMENSION(NLAY) :: ,P_THKLY
93 CHARACTER(LEN=NCHARTITLE) :: FAIL_NAME
107 p_thickg = geo(42,pid)
108 fail_exp = geo(43,pid)
109 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
111 ipweight = ipthkly + nlay
116 nptr = elbuf_str%NPTR
117 npts = elbuf_str%NPTS
122 nfail = elbuf_str%BUFLY(il)%NFAIL
123 imat = elbuf_str%BUFLY(il)%IMAT
125 pthkf(il,ifl) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%PTHK
137 imat = elbuf_str%BUFLY(il)%IMAT
140 nfail = elbuf_str%BUFLY(il)%NFAIL
143 IF (pthkf(il,ifl) > zero)
THEN
144 pthkf(il,ifl) =
min(pthkf(il,ifl),abs(p_thickg))
145 pthkf(il,ifl) =
max(
min(pthkf(il,ifl),one-em06),em06)
147 ELSEIF (pthkf(il,ifl) < zero)
THEN
148 pthkf(il,ifl) =
max(pthkf(il,ifl),-abs(p_thickg))
149 pthkf(il,ifl) =
min(
max(pthkf(il,ifl),-one+em6),-em06)
152 pthkf(il,ifl) = p_thickg
157 nptt = elbuf_str%BUFLY(il)%NPTT
158 offpg => elbuf_str%BUFLY(il)%OFFPG(jpg+1:jpg+nel)
160 IF (off(iel) == one)
THEN
165 foff => elbuf_str%BUFLY(il)%FAIL(ir,is,ipt)%FLOC(ifl)%OFF
168 IF (foff(iel) < 1)
THEN
169 ipos = (ipt-1)*nel + iel
170 thfact = thfact + thkly(ipos)
171 npfail = npfail + one/nptt
174 IF (((thfact >= pthkf(il,ifl)).AND.(pthkf(il,ifl) > zero)).OR.
175 . ((npfail >= abs(pthkf(il,ifl))).AND.(pthkf(il,ifl) < zero)))
THEN
187 IF (off(iel) == one)
THEN
191 countpg = countpg + elbuf_str%BUFLY(il)%OFFPG(jpg+iel)
193 IF (countpg == 0)
THEN
194 off(iel) = four_over_5
195 print_fail(iel) = .false.
196 fail_name = mat_elem%MAT_PARAM(imat)%FAIL(fail_num(iel))%KEYWORD
198 WRITE(iout, 1000) trim(fail_name),ngl(iel)
199 WRITE(istdo,1100) trim(fail_name),ngl(iel),tt
200#include "lockoff.inc"
201 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
210 ELSEIF (nlay == npttot)
THEN
217 nfail = elbuf_str%BUFLY(il)%NFAIL
218 lay_off => elbuf_str%BUFLY(il)%OFF
219 offpg =>elbuf_str%BUFLY(il)%OFFPG(jpg+1:jpg+nel)
220 imat = elbuf_str%BUFLY(il)%IMAT
222 IF (off(iel) == one .AND. lay_off(iel) == 1)
THEN
224 foff => elbuf_str%BUFLY(il)%FAIL(ir,is,ipt)%FLOC(ifl)%OFF
225 IF (foff(iel) < 1)
THEN
235 lay_off => elbuf_str%BUFLY(il)%OFF
237 IF (off(iel) == one)
THEN
238 IF (lay_off(iel) == 1)
THEN
242 countpg = countpg + elbuf_str%BUFLY(il)%OFFPG(jpg+iel)
244 IF (countpg == 0)
THEN
245 nindxly = nindxly + 1
246 indxly(nindxly) = iel
253 IF (nindxly > 0)
THEN
255 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
256 IF (igtyp == 17 .OR. igtyp == 51)
THEN
257 id_ply = igeo(1,stack%IGEO(2+il,isubstack))
259 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack)-numstack
262 fail_name = mat_elem%MAT_PARAM(imat)%FAIL(fail_num(indxly(i)))%KEYWORD
264 WRITE(iout, 3000) trim(fail_name),id_ply,ngl(indxly(i)),ipart(4,ipartc(indxly(i)))
265 WRITE(istdo,3100) trim(fail_name),id_ply,ngl(indxly(i)),ipart(4,ipartc(indxly(i)))
266#include "lockoff.inc"
271 fail_name = mat_elem%MAT_PARAM(imat)%FAIL(fail_num(indxly(i
273 WRITE(iout, 2000) trim(fail_name),il,ngl(indxly(i)),ipart(4,ipartc(indxly(i)))
274 WRITE(istdo,2100) trim(fail_name),il,ngl(indxly(i)),ipart(4
275#include "lockoff.inc"
284 IF (off(iel) == one)
THEN
289 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
290 weight(il) = stack%GEO(ipweight+ il,isubstack)
292 weight(il) = geo(ipweight + il,pid)
294 lay_off => elbuf_str%BUFLY(il)%OFF
295 ipos = (il-1)*nel + iel
296 dfail = thkly(ipos)*weight(il)
298 IF (off(iel) == one .AND. lay_off(iel) == 0)
THEN
299 thfact = thfact + thkly(ipos)*weight(il)
300 npfail = npfail + one/nlay
303 IF (((thfact >= p_thickg*
norm).AND.(p_thickg > zero)).OR.
304 . ((npfail >= abs(p_thickg)).AND.(p_thickg < zero)))
THEN
305 off(iel) = four_over_5
306 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
321 nfail = elbuf_str%BUFLY(il)%NFAIL
322 p_thkly(il) = stack%GEO(ipthkly + il,isubstack)
326 pthkf(il,ifl) =
min(pthkf(il,ifl),abs(p_thkly(il)))
327 pthkf(il,ifl) =
max(
min(pthkf(il,ifl),one-em06),em06)
329 ELSEIF (pthkf(il,ifl) < zero)
THEN
330 pthkf(il,ifl) =
max(pthkf(il,ifl),-abs(p_thkly(il)))
331 pthkf(il,ifl) =
min(
max(pthkf(il,ifl),-one+em6),-em06)
334 pthkf(il,ifl) = p_thkly(il)
341 nptt = elbuf_str%BUFLY(il)%NPTT
342 nfail = elbuf_str%BUFLY(il)%NFAIL
343 lay_off => elbuf_str%BUFLY(il)%OFF
344 offpg =>elbuf_str%BUFLY(il)%OFFPG(jpg+1:jpg+nel)
345 weight(il) = stack%GEO(ipweight + il,isubstack)
346 imat = elbuf_str%BUFLY(il)%IMAT
348 IF (off(iel) == one .AND. lay_off(iel) == 1)
THEN
353 foff => elbuf_str%BUFLY(il)%FAIL(ir,is,ipt)%FLOC(ifl)%OFF
354 IF (foff(iel) < one)
THEN
356 ipos = (ip-1)*nel + iel
357 thfact = thfact + thkly(ipos)/thk_ly(iel,il)
358 npfail = npfail + one/nptt
360 IF (((thfact >= pthkf(il,ifl)).AND.(pthkf(il,ifl)>zero)).OR.
361 . ((thfact >= abs(pthkf(il,ifl))).AND.(pthkf(il,ifl)<zero)))
THEN
369 ipt_all = ipt_all + nptt
374 IF (off(iel) == one)
THEN
376 nfail = elbuf_str%BUFLY(il)%NFAIL
377 lay_off => elbuf_str%BUFLY(il)%OFF
379 IF (lay_off(iel) == 1)
THEN
383 countpg = countpg + elbuf_str%BUFLY(il)%OFFPG(jpg+iel)
385 IF (countpg == 0)
THEN
386 nindxly = nindxly + 1
387 indxly(nindxly) = iel
389 nptt = elbuf_str%BUFLY(il)%NPTT
394 foff => elbuf_str%BUFLY(il)%FAIL(ipr,ips,ipt)%FLOC(ifl)%OFF
403 IF (nindxly > 0)
THEN
404 IF (igtyp == 51)
THEN
405 id_ply = igeo(1,stack%IGEO(2+il,isubstack))
407 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack)-numstack)
412 WRITE(iout, 3000) trim(fail_name),id_ply,ngl(indxly(i)),ipart(4,ipartc(indxly(i)))
413 WRITE(istdo,3100) trim(fail_name),id_ply,ngl(indxly(i)),ipart(4,ipartc(indxly(i))),tt
414#include "lockoff.inc"
423 IF (off(iel) == one)
THEN
428 weight(il) = stack%GEO(ipweight+ il,isubstack)
429 lay_off => elbuf_str%BUFLY(il)%OFF
430 dfail = (thk_ly(iel,il)*weight(il))**fail_exp
432 IF (lay_off(iel) == 0)
THEN
433 thfact = thfact + dfail
434 npfail = npfail + one/nlay
437 thfact = thfact**(one/fail_exp)
439 IF (((thfact >= p_thickg*
norm).AND.(p_thickg > zero)).OR.
440 . ((thfact >= abs(p_thickg)).AND.(p_thickg < zero)))
THEN
441 off(iel) = four_over_5
442 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
454 1000
FORMAT(1x,
'-- RUPTURE (',a,
') OF SHELL ELEMENT NUMBER ',i10)
455 1100
FORMAT(1x,
'-- RUPTURE (',a,
') OF SHELL ELEMENT :',i10,
' AT TIME :',g11.4)
456 2000
FORMAT(1x,
'-- FAILURE (',a,
') OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10,
457 . 1x,
' BELONGING TO PART ID :', i5)
458 2100
FORMAT(1x,
'-- FAILURE (',a,
') OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10,
459 . 1x,
' BELONGING TO PART ID :', i5,
' AT TIME :',g11.4)
460 3000
FORMAT(1x,
'-- FAILURE (',a,
') OF PLY ID ',i10,
' ,SHELL ELEMENT NUMBER ',i10,
461 . 1x,
' BELONGING TO PART ID :', i5)
462 3100
FORMAT(1x,
'-- FAILURE (',a,
') OF PLY ID ',i10,
' ,SHELL ELEMENT NUMBER ',i10,
463 . 1x,
' BELONGING TO PART ID :', i5,
' AT TIME :',g11.4)