35 . ELBUF_STR,MAT_ELEM ,GEO ,PID ,
37 . NLAY ,NPTTOT ,THK_LY ,THKLY ,
38 . OFF ,NPG ,STACK ,ISUBSTACK,
39 . IGTYP ,FAILWAVE ,FWAVE_EL ,DMG_FLAG ,
40 . TIME ,TRELAX ,TFAIL ,DMG_SCALE)
51#include "implicit_f.inc"
60 INTEGER :: NEL,NPTTOT,NLAY,PID,IR,,NPG,ISUBSTACK,IGTYP,DMG_FLAG
61 my_real :: TIME,TRELAX
62 INTEGER,
DIMENSION(NEL) :: NGL,FWAVE_EL
63 my_real,
DIMENSION(NPTTOT*NEL) :: THKLY
64 my_real,
DIMENSION(NPROPG,*) :: GEO
65 my_real,
DIMENSION(NEL ) :: OFF,TFAIL,DMG_SCALE
66 my_real,
DIMENSION(NEL,*) :: thk_ly
67 TYPE(elbuf_struct_) ,
TARGET :: ELBUF_STR
68 TYPE (FAILWAVE_STR_) ,
TARGET :: FAILWAVE
69 TYPE (MAT_ELEM_) ,
INTENT(INOUT) :: MAT_ELEM
73 INTEGER I,II,IEL,IPOS,IL,IFL,IP,IPT,IG,IPG,JPG,NPTR,NPTS,NPTT,IMAT,
74 . idmg,countpg,nindxpg,nindxly,ipt_all,nfail,ipweight,ipthkly
75 INTEGER,
DIMENSION(NEL) :: NPTF,INDXPG,INDXLY
76 INTEGER,
DIMENSION(10) :: ISTRESS
77 INTEGER,
DIMENSION(:),
POINTER :: OFFLY,OFFPG,FOFF
78 my_real,
DIMENSION(NLAY,100) :: PTHKF
79 my_real,
DIMENSION(NEL) :: uel1,dfmax,tdel,npttf,sigscale
80 my_real,
DIMENSION(:),
POINTER :: dmax
81 my_real,
DIMENSION(NLAY) :: weight,p_thkly
82 my_real :: thk_lay,p_thickg,fail_exp,thfact,
norm,dfail
83 TYPE(l_bufel_) ,
POINTER :: LBUF
96 p_thickg = geo(42,pid)
97 fail_exp = geo(43,pid)
100 npts = elbuf_str%NPTS
102 ipg = (is-1)*nptr + ir
106 nfail = elbuf_str%BUFLY(il)%NFAIL
107 imat = elbuf_str%BUFLY(il)%IMAT
109 pthkf(il,ifl) = mat_elem%MAT_PARAM(imat)%FAIL(ifl)%PTHK
116 nfail = elbuf_str%BUFLY(il)%NFAIL
117 nptt = elbuf_str%BUFLY(il)%NPTT
118 offpg => elbuf_str%BUFLY(il)%OFFPG(jpg+1:jpg+nel)
119 offly => elbuf_str%BUFLY(il)%OFF
121 IF (nfail == 1 .and. p_thickg > zero)
THEN
122 pthkf(il,1) =
max(p_thickg,em06)
123 pthkf(il,1) =
min(p_thickg,one-em06)
126 pthkf(il,ifl) =
max(pthkf(il,ifl),em06)
127 pthkf(il,ifl) =
min(pthkf(il,ifl),one-em06)
131 IF (failwave%WAVE_MOD > 0)
THEN
134 dmax => elbuf_str%BUFLY(il)%FAIL(ir,is,ipt)%FLOC(ifl)%DAMMX
136 IF (offly(iel) < 0 .and. dmax(iel) == one)
THEN
137 fwave_el(iel) = offly(iel)
146 IF (off(iel) == zero .or. offpg(iel) == 0) cycle
150 foff => elbuf_str%BUFLY(il)%FAIL(ir,is,ipt)%FLOC(ifl)%OFF
151 IF (foff(iel) < one)
THEN
152 ipos = (ipt-1)*nel + iel
153 thfact = thfact + thkly(ipos)
155 IF (thfact >= pthkf(il,ifl))
THEN
164 IF (offpg(iel) == 0)
THEN
165 nindxpg = nindxpg + 1
166 indxpg(nindxpg) = iel
171 IF (dmg_flag == 0)
THEN
173 IF (off(iel) == one)
THEN
177 countpg = countpg + elbuf_str%BUFLY(il)%OFFPG
179 IF (countpg == 0)
THEN ! all gauss pts have failed
180 off(iel) = four_over_5
186 IF (off(iel) == one)
THEN
190 countpg = countpg + elbuf_str%BUFLY
192 IF (countpg == 0)
THEN
199 IF (tfail(iel) > zero)
THEN
200 dmg_scale(iel) = exp(-(time - tfail(iel))/trelax)
208 2000
FORMAT(1x,
'-- FAILURE OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10)
209 2100
FORMAT(1x,
'-- FAILURE OF LAYER',i3,
' ,SHELL ELEMENT NUMBER ',i10,
210 . 1x,
'AT TIME :',g11.4)
subroutine fail_setoff_wind_frwave(elbuf_str, mat_elem, geo, pid, ngl, nel, ir, is, nlay, npttot, thk_ly, thkly, off, npg, stack, isubstack, igtyp, failwave, fwave_el, dmg_flag, time, trelax, tfail, dmg_scale)