35 . NGL ,NEL ,NLAY ,NPTTOT ,
36 . THK_LY ,THKLY ,OFF ,STACK ,
37 . ISUBSTACK,IGTYP ,FAILWAVE ,FWAVE_EL ,
38 . NLAY_MAX ,LAYNPT_MAX,NUMGEO ,NUMSTACK ,
51#include "implicit_f.inc"
62 TYPE(elbuf_struct_),
INTENT(INOUT),
TARGET :: ELBUF_STR
63 my_real,
DIMENSION(NPROPG,NUMGEO),
INTENT(IN) :: GEO
64 INTEGER,
DIMENSION(NPROPGI,NUMGEO),
INTENT(IN) :: IGEO
65 INTEGER,
INTENT(IN) :: PID,NEL,NLAY,NPTTOT,IGTYP,ISUBSTACK,
66 . NLAY_MAX,LAYNPT_MAX,NUMGEO,NUMSTACK
67 INTEGER,
DIMENSION(NEL),
INTENT(IN) :: NGL
68 my_real,
DIMENSION(NEL,NLAY_MAX*LAYNPT_MAX),
INTENT(IN) :: thk_ly
69 my_real,
DIMENSION(NPTTOT*NEL),
INTENT(IN) :: thkly
70 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: off
71 TYPE (STACK_PLY),
INTENT(IN) :: STACK
72 TYPE (FAILWAVE_STR_),
INTENT(IN),
TARGET :: FAILWAVE
73 INTEGER,
DIMENSION(NEL),
INTENT(INOUT) :: FWAVE_EL
74 TYPE (MAT_ELEM_) ,
INTENT(INOUT) :: MAT_ELEM
75 LOGICAL,
DIMENSION(NEL),
INTENT(INOUT) :: PRINT_FAIL
79 INTEGER I,II,IEL,IPOS,IL,IFL,IPT,NPTT,
80 . nindxly,nfail,ipweight,ipthkly,imat,id_ply
82 . p_thickg,fail_exp,dfail
83 INTEGER,
DIMENSION(NEL) :: INDXLY
84 INTEGER,
DIMENSION(:),
POINTER :: FOFF,LAY_OFF
85 my_real,
DIMENSION(NLAY) :: WEIGHT,P_THKLY
86 my_real,
DIMENSION(NLAY,100) :: pthkf
87 my_real,
DIMENSION(NEL) :: thfact,
norm,npfail
89CHARACTER(LEN=NCHARTITLE),
DIMENSION(NEL) :: FAIL_NAME
100 p_thickg = geo(42,pid)
101 fail_exp = geo(43,pid)
102 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
104 ipweight = ipthkly + nlay
111 nfail = elbuf_str%BUFLY(il)%NFAIL
112 imat = elbuf_str%BUFLY(il)%IMAT
114 pthkf(il,ifl) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%PTHK
126 imat = elbuf_str%BUFLY(il)%IMAT
129 nfail = elbuf_str%BUFLY(il)%NFAIL
133 pthkf(il,ifl) =
min(pthkf(il,ifl),abs(p_thickg))
134 pthkf(il,ifl) =
max(
min(pthkf(il,ifl),one-em06),em06)
136 ELSEIF (pthkf(il,ifl) < zero)
THEN
137 pthkf(il,ifl) =
max(pthkf(il,ifl),-abs(p_thickg))
138 pthkf(il,ifl) =
min(
max(pthkf(il,ifl),-one+em6),-em06)
141 pthkf(il,ifl) = p_thickg
149 nptt = elbuf_str%BUFLY(il)%NPTT
153 foff => elbuf_str%BUFLY(il)%FAIL(1,1,ipt)%FLOC(ifl)%OFF
155 IF (off(iel) == one)
THEN
156 IF (foff(iel) < one)
THEN
157 ipos = (ipt-1)*nel + iel
158 thfact(iel) = thfact(iel) + thkly(ipos)
159 npfail(iel) = npfail(iel) + one/nptt
166 IF (off(iel) == one)
THEN
167 IF (((thfact(iel) >= pthkf(il,ifl)).AND.(pthkf(il,ifl) > zero
168 . ((npfail(iel) >= abs(pthkf(il,ifl))).AND.(pthkf(il,ifl) < zero)))
THEN
169 off(iel) = four_over_5
170 print_fail(iel) = .false.
171 fail_name(iel) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%KEYWORD
173 WRITE(iout, 1000) trim(fail_name(iel)),ngl(iel)
174 WRITE(istdo,1100) trim(fail_name(iel)),ngl(iel),tt
175#include "lockoff.inc"
176 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
185 ELSEIF (nlay == npttot)
THEN
193 nfail = elbuf_str%BUFLY(il)%NFAIL
194 lay_off => elbuf_str%BUFLY(il)%OFF
195 imat = elbuf_str%BUFLY(il)%IMAT
197 foff => elbuf_str%BUFLY(il)%FAIL(1,1,ipt)%FLOC(ifl)%OFF
199 IF (off(iel) == one .AND. lay_off(iel) == 1)
THEN
200 IF (foff(iel) < 1)
THEN
201 nindxly = nindxly + 1
202 indxly(nindxly) = iel
204 fail_name(iel) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%KEYWORD
210 IF (nindxly > 0)
THEN
212 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
213 IF (igtyp == 17 .OR. igtyp == 51)
THEN
214 id_ply = igeo(1,stack%IGEO(2+il,isubstack))
216 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack)-numstack)
220 WRITE(iout, 3000) trim(fail_name(indxly(i))),id_ply,ngl(indxly(i))
221 WRITE(istdo,3100) trim(fail_name(indxly(i))),id_ply,ngl(indxly(i)),tt
222#include "lockoff.inc"
228 WRITE(iout, 2000) trim(fail_name(indxly(i))),il,ngl(indxly(i))
229 WRITE(istdo,2100) trim(fail_name(indxly(i))),il,ngl(indxly(i)),tt
230#include "lockoff.inc"
242 IF (igtyp == 17 .OR. igtyp
THEN
243 weight(il) = stack%GEO(ipweight+ il,isubstack)
245 weight(il) = geo(ipweight + il,pid)
247 lay_off => elbuf_str%BUFLY(il)%OFF
250 IF (off(iel) == one)
THEN
252 dfail = thkly(ipos)*weight(il)
254 IF (lay_off(iel) == 0)
THEN
255 thfact(iel) = thfact(iel) + thkly(ipos)*weight(il)
256 npfail(iel) = npfail(iel) + one/nlay
263 IF (off(iel) == one)
THEN
264 IF (((thfact(iel) >= p_thickg*
norm(iel)).AND.(p_thickg > zero)).OR.
265 . ((npfail(iel) >= abs(p_thickg)).AND.(p_thickg
THEN
266 off(iel) = four_over_5
267 IF (failwave%WAVE_MOD > 0) fwave_el(iel
279 nfail = elbuf_str%BUFLY(il)%NFAIL
280 p_thkly(il) = stack%GEO(ipthkly + il,isubstack)
283 IF (pthkf(il,ifl) > zero)
THEN
284 pthkf(il,ifl) =
min(pthkf(il,ifl),abs(p_thkly(il)))
285 pthkf(il,ifl) =
max(
min(pthkf(il,ifl),one-em06),em06)
287 ELSEIF (pthkf(il,ifl) < zero)
THEN
288 pthkf(il,ifl) =
max(pthkf(il,ifl),-abs(p_thkly(il)))
289 pthkf(il,ifl) =
min(
max(pthkf(il,ifl),-one+em6),-em06)
292 pthkf(il,ifl) = p_thkly(il)
299 nptt = elbuf_str%BUFLY(il)%NPTT
301 nfail = elbuf_str%BUFLY(il)%NFAIL
302 lay_off => elbuf_str%BUFLY(il)%OFF
303 imat = elbuf_str%BUFLY(il)%IMAT
310 foff => elbuf_str%BUFLY(il)%FAIL(1,1,ipt)%FLOC(ifl)%OFF
312 IF (off(iel) == one)
THEN
313 IF (lay_off(iel) == 1)
THEN
314 IF (foff(iel) < one)
THEN
316 thfact(iel) = thfact(iel) + thkly(ipos)/thk_ly(iel,il)
317 npfail(iel) = npfail(iel) + one/nptt
325 IF (off(iel) == one)
THEN
326 IF (((thfact(iel) >= pthkf(il,ifl)).AND.(pthkf(il,ifl) > zero)).OR.
327 . ((npfail(iel) >= abs(pthkf(il,ifl))).AND.(pthkf(il,ifl) < zero)))
THEN
328 nindxly = nindxly + 1
329 indxly(nindxly) = iel
331 fail_name(iel) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%KEYWORD
333 foff => elbuf_str%BUFLY(il)%FAIL(1,1,ipt)%FLOC(ifl)%OFF
340 ! printing out ply failure message
341 IF (nindxly > 0)
THEN
342 IF (igtyp == 51)
THEN
343 id_ply = igeo(1,stack%IGEO(2+il,isubstack))
345 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack)-numstack)
349 WRITE(iout, 3000) trim(fail_name(indxly(i))),id_ply
350 WRITE(istdo,3100) trim(fail_name(indxly(i))),id_ply,ngl(indxly(i)),tt
351#include "lockoff.inc"
362 weight(il) = stack%GEO(ipweight + il,isubstack)
363 lay_off => elbuf_str%BUFLY(il)%OFF
365 IF (off(iel) == one)
THEN
366 dfail = (thk_ly(iel,il)*weight(il))**fail_exp
368 IF (lay_off(iel) == 0)
THEN
369 thfact(iel) = thfact(iel) + dfail
370 npfail(iel) = npfail(iel) + one/nlay
377 IF (off(iel) == one)
THEN
378 thfact(iel) = thfact(iel)**(one/fail_exp)
379 norm(iel) =
norm(iel)**(one/fail_exp)
381 . ((npfail(iel) >= abs(p_thickg)).AND.(p_thickg < zero)))
THEN
382 off(iel) = four_over_5
383 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
394 1000
FORMAT(1x,
'-- RUPTURE ('') OF SHELL ELEMENT NUMBER ',i10)
395 1100
FORMAT(1x,
'-- RUPTURE (',a,
') OF SHELL ELEMENT :',i10,
' AT TIME :',g11.4)
396 2000
FORMAT(1x,
'-- FAILURE (',a,
') OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10)
397 2100
FORMAT(1x,
'-- FAILURE (',a,
') OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10,
398 . 1x,
'AT TIME :',g11.4)
399 3000
FORMAT(1x,
'-- FAILURE (',a,
') OF PLY ID ',i10,
' ,SHELL ELEMENT NUMBER ',i10)
400 3100
FORMAT(1x,
'-- FAILURE (',a,
') OF PLY ID ',i10,
' ,SHELL ELEMENT NUMBER ',i10,
401 . 1x,
'AT TIME :',g11.4)