35 . NGL ,NEL ,NLAY ,NPTTOT ,
36 . THK_LY ,THKLY ,OFF ,STACK ,
37 . ISUBSTACK,IGTYP ,FAILWAVE ,FWAVE_EL ,
38 . NLAY_MAX ,LAYNPT_MAX,NUMGEO ,NUMSTACK ,
40 . IPART ,LIPART1 ,IPARTC ,NPART)
52#include "implicit_f.inc"
63 TYPE(elbuf_struct_),
INTENT(INOUT),
TARGET :: ELBUF_STR
64 my_real,
DIMENSION(NPROPG,NUMGEO),
INTENT(IN) :: GEO
65 INTEGER,
DIMENSION(NPROPGI,NUMGEO),
INTENT(IN) :: IGEO
66 INTEGER,
INTENT(IN) :: PID,NEL,NLAY,NPTTOT,IGTYP,ISUBSTACK,
67 . NLAY_MAX,LAYNPT_MAX,NUMGEO,NUMSTACK,LIPART1,
69 INTEGER,
DIMENSION(LIPART1,NPART),
INTENT(IN) :: IPART
70 INTEGER,
DIMENSION(NEL),
INTENT(IN) :: NGL,IPARTC
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
76 INTEGER,
DIMENSION(NEL),
INTENT(INOUT) :: FWAVE_EL
77 TYPE (MAT_ELEM_) ,
INTENT(INOUT) :: MAT_ELEM
78 LOGICAL,
DIMENSION(NEL),
INTENT(INOUT) :: PRINT_FAIL
83 INTEGER I,II,IEL,IPOS,IL,IFL,IPT,NPTT,
84 . nindxly,nfail,ipweight,ipthkly,imat,id_ply
86 . p_thickg,fail_exp,dfail
87 INTEGER,
DIMENSION(NEL) :: INDXLY
88 INTEGER,
DIMENSION(:),
POINTER :: FOFF,LAY_OFF
89 my_real,
DIMENSION(NLAY) :: weight,p_thkly
90 my_real,
DIMENSION(NLAY,100) :: pthkf
91 my_real,
DIMENSION(NEL) :: thfact,
norm,npfail
93 CHARACTER(LEN=NCHARTITLE),
DIMENSION(NEL) :: FAIL_NAME
104 p_thickg = geo(42,pid)
105 fail_exp = geo(43,pid)
106 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
108 ipweight = ipthkly + nlay
115 nfail = elbuf_str%BUFLY(il)%NFAIL
116 imat = elbuf_str%BUFLY(il)%IMAT
118 pthkf(il,ifl) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%PTHK
124 ! 1 layer properties - type1/type9
132 imat = elbuf_str%BUFLY(il)%IMAT
135 nfail = elbuf_str%BUFLY(il)%NFAIL
138 IF (pthkf(il,ifl) > zero)
THEN
139 pthkf(il,ifl) =
min(pthkf(il,ifl),abs(p_thickg))
140 pthkf(il,ifl) =
max(
min(pthkf(il,ifl),one-em06),em06)
142 ELSEIF (pthkf(il,ifl) < zero)
THEN
143 pthkf(il,ifl) =
max(pthkf(il,ifl),-abs(p_thickg))
144 pthkf(il,ifl) =
min(
max(pthkf(il,ifl),-one+em6),-em06)
147 pthkf(il,ifl) = p_thickg
155 nptt = elbuf_str%BUFLY(il)%NPTT
159 foff => elbuf_str%BUFLY(il)%FAIL(1,1,ipt)%FLOC(ifl)%OFF
161 IF (off(iel) == one)
THEN
162 IF (foff(iel) < one)
THEN
163 ipos = (ipt-1)*nel + iel
164 thfact(iel) = thfact(iel) + thkly(ipos)
165 npfail(iel) = npfail(iel) + one/nptt
172 IF (off(iel) == one)
THEN
173 IF (((thfact(iel) >= pthkf(il,ifl)).AND.(pthkf(il,ifl) > zero)).OR.
174 . ((npfail(iel) >= abs(pthkf(il,ifl))).AND.(pthkf(il,ifl) < zero)))
THEN
175 off(iel) = four_over_5
176 print_fail(iel) = .false.
177 fail_name(iel) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%KEYWORD
179 WRITE(iout, 1000) trim(fail_name(iel)),ngl(iel)
180 WRITE(istdo,1100) trim(fail_name(iel)),ngl(iel),tt
181#include "lockoff.inc"
182 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
191 ELSEIF (nlay == npttot)
THEN
199 nfail = elbuf_str%BUFLY(il)%NFAIL
200 lay_off => elbuf_str%BUFLY(il)%OFF
201 imat = elbuf_str%BUFLY(il)%IMAT
203 foff => elbuf_str%BUFLY(il)%FAIL(1,1,ipt)%FLOC(ifl)%OFF
205 IF (off(iel) == one .AND. lay_off(iel) == 1)
THEN
206 IF (foff(iel) < 1)
THEN
207 nindxly = nindxly + 1
208 indxly(nindxly) = iel
210 fail_name(iel) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%KEYWORD
216 IF (nindxly > 0)
THEN
218 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
219 IF (igtyp == 17 .OR. igtyp == 51)
THEN
220 id_ply = igeo(1,stack%IGEO(2+il,isubstack))
222 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack)-numstack)
226 WRITE(iout, 3000) trim(fail_name(indxly(i))),id_ply,ngl(indxly(i)),ipart(4,ipartc(indxly(i)))
227 WRITE(istdo,3100) trim(fail_name(indxly(i))),id_ply,ngl(indxly(i)),ipart(4,ipartc(indxly(i))),tt
228#include "lockoff.inc"
234 WRITE(iout, 2000) trim(fail_name(indxly(i))),il,ngl(indxly(i)),ipart(4,ipartc(indxly(i)))
235 WRITE(istdo,2100) trim(fail_name(indxly(i))),il,ngl(indxly(i)),ipart(4,ipartc(indxly(i))),tt
236#include "lockoff.inc"
248 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)
THEN
249 weight(il) = stack%GEO(ipweight+ il,isubstack)
251 weight(il) = geo(ipweight + il,pid)
253 lay_off => elbuf_str%BUFLY(il)%OFF
256 IF (off(iel) == one)
THEN
258 dfail = thkly(ipos)*weight(il)
260 IF (lay_off(iel) == 0)
THEN
261 thfact(iel) = thfact(iel) + thkly(ipos)*weight(il)
262 npfail(iel) = npfail(iel) + one/nlay
269 IF (off(iel) == one)
THEN
270 IF (((thfact(iel) >= p_thickg*
norm(iel)).AND.(p_thickg > zero)).OR.
271 . ((npfail(iel) >= abs(p_thickg)).AND.(p_thickg < zero)))
THEN
272 off(iel) = four_over_5
273 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
285 nfail = elbuf_str%BUFLY(il)%NFAIL
286 p_thkly(il) = stack%GEO(ipthkly + il,isubstack)
289 IF (pthkf(il,ifl) > zero)
THEN
290 pthkf(il,ifl) =
min(pthkf(il,ifl),abs(p_thkly(il)))
291 pthkf(il,ifl) =
max(
min(pthkf(il,ifl),one-em06),em06)
293 ELSEIF (pthkf(il,ifl) < zero)
THEN
294 pthkf(il,ifl) =
max(pthkf(il,ifl),-abs(p_thkly(il)))
295 pthkf(il,ifl) =
min(
max(pthkf(il,ifl),-one+em6),-em06)
298 pthkf(il,ifl) = p_thkly(il)
305 nptt = elbuf_str%BUFLY(il)%NPTT
307 nfail = elbuf_str%BUFLY(il)%NFAIL
308 lay_off => elbuf_str%BUFLY(il)%OFF
309 imat = elbuf_str%BUFLY(il)%IMAT
316 foff => elbuf_str%BUFLY(il)%FAIL(1,1,ipt)%FLOC(ifl)%OFF
318 IF (off(iel) == one)
THEN
319 IF (lay_off(iel) == 1)
THEN
320 IF (foff(iel) < one)
THEN
322 thfact(iel) = thfact(iel) + thkly(ipos)/thk_ly(iel,il)
323 npfail(iel) = npfail(iel) + one/nptt
331 IF (off(iel) == one)
THEN
332 IF (((thfact(iel) >= pthkf(il,ifl)).AND.(pthkf(il,ifl) > zero)).OR.
333 . ((npfail(iel) >= abs(pthkf(il,ifl))).AND.(pthkf(il,ifl) < zero)))
THEN
334 nindxly = nindxly + 1
335 indxly(nindxly) = iel
337 fail_name(iel) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%KEYWORD
339 foff => elbuf_str%BUFLY(il)%FAIL(1,1,ipt)%FLOC(ifl)%OFF
347 IF (nindxly > 0)
THEN
348 IF (igtyp == 51)
THEN
349 id_ply = igeo(1,stack%IGEO(2+il,isubstack))
351 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack)-numstack)
355 WRITE(iout, 3000) trim(fail_name(indxly(i))),id_ply,ngl(indxly(i)),ipart(4,ipartc(indxly(i)))
356 WRITE(istdo,3100) trim(fail_name(indxly(i))),id_ply,ngl(indxly(i)),ipart(4,ipartc(indxly(i))),tt
357#include "lockoff.inc"
368 weight(il) = stack%GEO(ipweight + il,isubstack)
369 lay_off => elbuf_str%BUFLY(il)%OFF
371 IF (off(iel) == one)
THEN
372 dfail = (thk_ly(iel,il)*weight(il))**fail_exp
374 IF (lay_off(iel) == 0)
THEN
375 thfact(iel) = thfact(iel) + dfail
376 npfail(iel) = npfail(iel) + one/nlay
383 IF (off(iel) == one)
THEN
384 thfact(iel) = thfact(iel)**(one/fail_exp)
385 norm(iel) =
norm(iel)**(one/fail_exp)
386 IF (((thfact(iel) >= p_thickg*
norm(iel)).AND.(p_thickg > zero)).OR.
387 . ((npfail(iel) >= abs(p_thickg)).AND.(p_thickg < zero)))
THEN
388 off(iel) = four_over_5
389 IF (failwave%WAVE_MOD > 0) fwave_el(iel) = -1
400 1000
FORMAT(1x,
'-- RUPTURE (',a,
') OF SHELL ELEMENT NUMBER ',i10)
401 1100
FORMAT(1x,
'-- RUPTURE (',a,
') OF SHELL ELEMENT :',i10,
' AT TIME :',g11.4)
402 2000
FORMAT(1x,
'-- FAILURE (',a,
') OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10,
403 . 1x,
' BELONGING TO PART ID :', i5)
404 2100
FORMAT(1x,
'-- FAILURE (',a,
') OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10,
405 . 1x,
' BELONGING TO PART ID :', i5,
' AT TIME :',g11.4)
406 3000
FORMAT(1x,
'-- FAILURE (',a,
') OF PLY ID ',i10,
' ,SHELL ELEMENT NUMBER ',i10,
407 . 1x,
' BELONGING TO PART ID :', i5)
408 3100
FORMAT(1x,
'-- FAILURE (',a,
') OF PLY ID ',i10,
' ,SHELL ELEMENT NUMBER ',i10,
409 . 1x,
' BELONGING TO PART ID :', i5,
' AT TIME :',g11.4)