34 . NEL ,IXTG ,ITAB ,CRKDIR ,DIR_A ,
35 . NROT ,XL2 ,XL3 ,YL2 ,YL3 )
43#include "implicit_f.inc"
54 INTEGER ,
DIMENSION(NIXTG,NEL),
INTENT(IN)
55INTEGER ,
DIMENSION(NUMNOD) ,
INTENT(IN) :: ITAB
56 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL,FWAVE_EL
58 my_real ,
DIMENSION(NEL,NROT) ,
INTENT(IN) :: dir_a
59 my_real ,
DIMENSION(NEL,2) ,
INTENT(IN) :: crkdir
60 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: xl2,xl3,yl2
61 TYPE (FAILWAVE_STR_) :: FAILWAVE
65 INTEGER I,II,K,N1,N2,N3,INTERSECTION,INT1,INT2,INT3,INT4,INT5,INT6,
66 . LEVEL,NEWCRK1,NEWCRK2,
67 . ncurr,maxlev,found_existing,idebug
68 INTEGER ,
DIMENSION(NEL) :: INDX1,INDX2
69 INTEGER ,
DIMENSION(3) :: IDF1,IDF2,NOD_ID,NOD_NN
71 my_real :: dx1,dx2,dy1,dy2,dir11,dir22,cosx,sinx,cosy,siny,
72 . lmax,xm,ym,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,xint,yint,
75 EXTERNAL SEG_INTERSECT
82 SELECT CASE (failwave%WAVE_MOD)
87 IF (fwave_el(i) < 0)
THEN
88 n1 = failwave%IDXI(ixtg(2,i))
89 n2 = failwave%IDXI(ixtg(3,i))
90 n3 = failwave%IDXI(ixtg(4,i))
91 failwave%FWAVE_NOD_STACK(1,n1,1) = 1
92 failwave%FWAVE_NOD_STACK(1,n2,1) = 1
93 failwave%FWAVE_NOD_STACK(1,n3,1) = 1
94 failwave%MAXLEV_STACK(n1) = 1
95 failwave%MAXLEV_STACK(n2) = 1
96 failwave%MAXLEV_STACK(n3) = 1
105 IF (fwave_el(i) == -1)
THEN
106 newcrk1 = newcrk1 + 1
108 ELSEIF (fwave_el(i) == -2)
THEN
109 newcrk2 = newcrk2 + 1
111 ELSEIF (fwave_el(i) == -3)
THEN
112 newcrk1 = newcrk1 + 1
113 newcrk2 = newcrk2 + 1
119 IF (newcrk1 + newcrk2 > 0)
THEN
121 rat1 = half * tan(pi/six)
131 nod_nn(1) = failwave%IDXI(n1)
132 nod_nn(2) = failwave%IDXI(n2)
133 nod_nn(3) = failwave%IDXI(n3)
151 dir11 = cosx*cosy - sinx*siny
152 dir22 = cosx*siny + sinx*cosy
155 xm = (xl2(i) + xl3(i)) * third
156 ym = (yl2(i) + yl3(i)) * third
157 lmax =
max(xl2(i)*2 + yl2(i)**2, xl3(i)**2 + yl3(i))
158 lmax = sqrt(lmax) * two
160 dx1 = xm - dir11 * lmax
161 dy1 = ym - dir22 * lmax
162 dx2 = xm + dir11 * lmax
163 dy2 = ym + dir22 * lmax
171 x3 = xl2(i) + rx * rat1
172 y3 = yl2(i) + ry * rat1
173 x4 = xl2(i) + rx * rat2
174 y4 = yl2(i) + ry * rat2
177 x5 = xl3(i) + rx * rat1
178 y5 = yl3(i) + ry * rat1
179 x6 = xl3(i) + rx * rat2
180 y6 = yl3(i) + ry * rat2
182 int1 = seg_intersect(x6,y6
183 int2 = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint
184 int3 = seg_intersect(x4,y4,x5,y5,dx1,dy1,dx2,dy2,xint,yint,idebug)
185 int4 = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
186 int5 = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
187 int6 = seg_intersect(x5,y5,x6,y6,dx1,dy1,dx2,dy2,xint,yint,idebug
196 ELSE IF (int2 == 1)
THEN
202 ELSE IF (int3 == 1)
THEN
208 ELSE IF (int4 == 1)
THEN
214 ELSE IF (int5 == 1)
THEN
220 ELSE IF (int6 == 1)
THEN
228 IF (intersection == 1)
THEN
233 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
234 maxlev = failwave%MAXLEV_STACK(ncurr)
237 IF (maxlev > failwave%SIZE)
THEN
239 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
241#include "lockoff.inc"
242 maxlev = failwave%SIZE
243 failwave%MAXLEV_STACK(ncurr) = maxlev
245 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
246 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) = idf2(k)
252 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 1st DIR ',ngl(i)
253#include "lockoff.inc"
265 nod_nn(1) = failwave%IDXI(n1)
266 nod_nn(2) = failwave%IDXI(n2)
267 nod_nn(3) = failwave%IDXI(n3)
282 dir11 = cosx*cosy - sinx*siny
283 dir22 = cosx*siny + sinx*cosy
286 xm = (xl2(i) + xl3(i)) * third
287 ym = (yl2(i) + yl3(i)) * third
288 lmax =
max(xl2(i)*2 + yl2(i)**2, xl3(i)**2 + yl3(i))
289 lmax = sqrt(lmax) * two
291 dx1 = xm - dir11 * lmax
292 dy1 = ym - dir22 * lmax
293 dx2 = xm + dir11 * lmax
294 dy2 = ym + dir22 * lmax
302 x3 = xl2(i) + rx * rat1
303 y3 = yl2(i) + ry * rat1
304 x4 = xl2(i) + rx * rat2
305 y4 = yl2(i) + ry * rat2
308 x5 = xl3(i) + rx * rat1
309 y5 = yl3(i) + ry * rat1
310 x6 = xl3(i) + rx * rat2
311 y6 = yl3(i) + ry * rat2
313 int1 = seg_intersect(x6,y6,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
314 int2 = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
315 int3 = seg_intersect(x4,y4,x5,y5,dx1,dy1,dx2,dy2,xint,yint,idebug)
316 int4 = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
317 int5 = seg_intersect(x3,y3,x4,y4,dx1
318 int6 = seg_intersect(x5,y5,x6,y6,dx1,dy1,dx2,dy2,xint,yint,idebug)
327 ELSE IF (int2 == 1)
THEN
333 ELSE IF (int3 == 1)
THEN
339 ELSE IF (int4 == 1)
THEN
345 ELSE IF (int5 == 1)
THEN
351 ELSE IF (int6 == 1)
THEN
359 IF (intersection == 1)
THEN
364 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
365 maxlev = failwave%MAXLEV_STACK(ncurr)
368 IF (maxlev > failwave%SIZE)
THEN
370 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl
372#include "lockoff.inc"
373 maxlev = failwave%SIZE
374 failwave%MAXLEV_STACK(ncurr) = maxlev
376 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
377 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) =
383 WRITE(iout,*) 'error advancing crack in element, 2nd dir
',NGL(I)
384#include "lockoff.inc"
388 END IF ! NEWCRK1 + NEWCRK2 > 0