35 . NEL ,IXTG ,ITAB ,CRKDIR ,DIR_A ,
36 . NROT ,XL2 ,XL3 ,YL2 ,YL3 )
41 use element_mod ,
only : nixtg
45#include "implicit_f.inc"
56 INTEGER ,
DIMENSION(NIXTG,NEL),
INTENT(IN) :: IXTG
57 INTEGER ,
DIMENSION(NUMNOD) ,
INTENT(IN) :: ITAB
58 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL,FWAVE_EL
60 my_real ,
DIMENSION(NEL,NROT) ,
INTENT(IN) :: dir_a
61 my_real ,
DIMENSION(NEL,2) ,
INTENT(IN) :: crkdir
62 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: xl2,xl3,yl2,yl3
63 TYPE (FAILWAVE_STR_) :: FAILWAVE
67 INTEGER I,II,K,N1,N2,N3,INTERSECTION,INT1,INT2,INT3,INT4,INT5,INT6,
70 INTEGER ,
DIMENSION(NEL) :: INDX1,INDX2
71 INTEGER ,
DIMENSION(3) :: IDF1,IDF2,NOD_ID,NOD_NN
73 my_real :: dx1,dx2,dy1,dy2,dir11,dir22,cosx,sinx,cosy,siny,
74 . lmax,xm,ym,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,xint,yint,
77 EXTERNAL SEG_INTERSECT
84 SELECT CASE (failwave%WAVE_MOD)
89 IF (fwave_el(i) < 0)
THEN
90 n1 = failwave%IDXI(ixtg(2,i))
91 n2 = failwave%IDXI(ixtg(3,i))
92 n3 = failwave%IDXI(ixtg(4,i))
93 failwave%FWAVE_NOD_STACK(1,n1,1) = 1
94 failwave%FWAVE_NOD_STACK(1,n2,1) = 1
95 failwave%FWAVE_NOD_STACK(1,n3,1) = 1
96 failwave%MAXLEV_STACK(n1) = 1
97 failwave%MAXLEV_STACK(n2) = 1
98 failwave%MAXLEV_STACK(n3) = 1
107 IF (fwave_el(i) == -1)
THEN
108 newcrk1 = newcrk1 + 1
110 ELSEIF (fwave_el(i) == -2)
THEN
111 newcrk2 = newcrk2 + 1
113 ELSEIF (fwave_el(i) == -3)
THEN
114 newcrk1 = newcrk1 + 1
115 newcrk2 = newcrk2 + 1
121 IF (newcrk1 + newcrk2 > 0)
THEN
123 rat1 = half * tan(pi/six)
133 nod_nn(1) = failwave%IDXI(n1)
134 nod_nn(2) = failwave%IDXI(n2)
135 nod_nn(3) = failwave%IDXI(n3)
153 dir11 = cosx*cosy - sinx*siny
154 dir22 = cosx*siny + sinx*cosy
157 xm = (xl2(i) + xl3(i)) * third
158 ym = (yl2(i) + yl3(i)) * third
159 lmax =
max(xl2(i)*2 + yl2(i)**2, xl3(i)**2 + yl3(i))
160 lmax = sqrt(lmax) * two
162 dx1 = xm - dir11 * lmax
163 dy1 = ym - dir22 * lmax
164 dx2 = xm + dir11 * lmax
165 dy2 = ym + dir22 * lmax
173 x3 = xl2(i) + rx * rat1
174 y3 = yl2(i) + ry * rat1
175 x4 = xl2(i) + rx * rat2
176 y4 = yl2(i) + ry * rat2
179 x5 = xl3(i) + rx * rat1
180 y5 = yl3(i) + ry * rat1
181 x6 = xl3(i) + rx * rat2
182 y6 = yl3(i) + ry * rat2
184 int1 = seg_intersect(x6,y6,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
185 int2 = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
186 int3 = seg_intersect(x4,y4,x5,y5,dx1,dy1,dx2,dy2,xint,yint,idebug)
187 int4 = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
188 int5 = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
189 int6 = seg_intersect(x5,y5,x6,y6,dx1,dy1,dx2,dy2,xint,yint,idebug)
198 ELSE IF (int2 == 1)
THEN
204 ELSE IF (int3 == 1)
THEN
210 ELSE IF (int4 == 1)
THEN
216 ELSE IF (int5 == 1)
THEN
222 ELSE IF (int6 == 1)
THEN
230 IF (intersection == 1)
THEN
235 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
236 maxlev = failwave%MAXLEV_STACK(ncurr)
239 IF (maxlev > failwave%SIZE)
THEN
241 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
243#include "lockoff.inc"
244 maxlev = failwave%SIZE
245 failwave%MAXLEV_STACK(ncurr) = maxlev
247 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
248 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) = idf2(k)
254 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 1st DIR ',ngl(i)
255#include "lockoff.inc"
267 nod_nn(1) = failwave%IDXI(n1)
268 nod_nn(2) = failwave%IDXI(n2)
269 nod_nn(3) = failwave%IDXI(n3)
284 dir11 = cosx*cosy - sinx*siny
285 dir22 = cosx*siny + sinx*cosy
288 xm = (xl2(i) + xl3(i)) * third
289 ym = (yl2(i) + yl3(i)) * third
290 lmax =
max(xl2(i)*2 + yl2(i)**2, xl3(i)**2 + yl3(i))
291 lmax = sqrt(lmax) * two
293 dx1 = xm - dir11 * lmax
294 dy1 = ym - dir22 * lmax
295 dx2 = xm + dir11 * lmax
296 dy2 = ym + dir22 * lmax
304 x3 = xl2(i) + rx * rat1
305 y3 = yl2(i) + ry * rat1
306 x4 = xl2(i) + rx * rat2
307 y4 = yl2(i) + ry * rat2
310 x5 = xl3(i) + rx * rat1
311 y5 = yl3(i) + ry * rat1
312 x6 = xl3(i) + rx * rat2
313 y6 = yl3(i) + ry * rat2
315 int1 = seg_intersect(x6,y6,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
316 int2 = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
317 int3 = seg_intersect(x4,y4,x5,y5,dx1,dy1,dx2,dy2,xint,yint,idebug)
318 int4 = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
319 int5 = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
320 int6 = seg_intersect(x5,y5,x6,y6,dx1,dy1,dx2,dy2,xint,yint,idebug)
329 ELSE IF (int2 == 1)
THEN
335 ELSE IF (int3 == 1)
THEN
341 ELSE IF (int4 == 1)
THEN
347 ELSE IF (int5 == 1)
THEN
353 ELSE IF (int6 == 1)
THEN
361 IF (intersection == 1)
THEN
366 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
367 maxlev = failwave%MAXLEV_STACK(ncurr)
370 IF (maxlev > failwave%SIZE)
THEN
372 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
374#include "lockoff.inc"
375 maxlev = failwave%SIZE
376 failwave%MAXLEV_STACK(ncurr) = maxlev
378 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
379 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) = idf2(k)
385 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 2nd DIR ',ngl(i)
386#include "lockoff.inc"