34 . NEL ,IXC ,ITAB ,CRKDIR ,DIR_A ,
35 . NROT ,XL2 ,XL3 ,XL4 ,YL2 ,
44#include "implicit_f.inc"
55 INTEGER ,
DIMENSION(NIXC,NEL) ,
INTENT(IN) :: IXC
56 INTEGER ,
DIMENSION(NUMNOD) ,
INTENT(IN) :: ITAB
57 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL,FWAVE_EL
59 my_real ,
DIMENSION(NEL,NROT) ,
INTENT(IN) :: dir_a
60 my_real ,
DIMENSION(NEL,2) ,
INTENT(IN) :: crkdir
61 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: xl2,xl3,xl4,yl2,yl3,yl4
62 TYPE (FAILWAVE_STR_) :: FAILWAVE
66 INTEGER I,II,K,N1,N2,N3,N4,INTERSECTION,LEVEL,NEWCRK1,NEWCRK2,NCURR,
68 INTEGER ,
DIMENSION(NEL) :: INDX1,INDX2
69 INTEGER ,
DIMENSION(4) :: IDF1,IDF2,NOD_ID,
71 my_real :: dir11,dir22,cosx,sinx,cosy,siny,lmax,xm,ym,
72 . x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8,dx1,dy1,dx2,dy2,
73 . xint,yint,rat1,rat2,rx,ry
74 my_real ,
DIMENSION(2,NEL) :: p1,p2,p3,p4,p5,p6,p7,p8
76 EXTERNAL SEG_INTERSECT
83 SELECT CASE (failwave%WAVE_MOD)
88 IF (fwave_el(i) < 0)
THEN
89 n1 = failwave%IDXI(ixc(2,i))
90 n2 = failwave%IDXI(ixc(3,i))
91 n3 = failwave%IDXI(ixc(4,i))
92 n4 = failwave%IDXI(ixc(5,i))
93 failwave%FWAVE_NOD_STACK(1,n1,1) = 1
95 failwave%FWAVE_NOD_STACK(1,n3,1) = 1
96 failwave%FWAVE_NOD_STACK(1,n4,1) = 1
97 failwave%MAXLEV_STACK(n1) = 1
98 failwave%MAXLEV_STACK(n2) = 1
99 failwave%MAXLEV_STACK(n3) = 1
100 failwave%MAXLEV_STACK(n4) = 1
109 IF (fwave_el(i) == -1)
THEN
110 newcrk1 = newcrk1 + 1
112 ELSEIF (fwave_el(i) == -2)
THEN
113 newcrk2 = newcrk2 + 1
115 ELSEIF (fwave_el(i) == -3)
THEN
116 newcrk1 = newcrk1 + 1
117 newcrk2 = newcrk2 + 1
123 IF (newcrk1 + newcrk2 > 0)
THEN
134 nod_nn(1) = failwave%IDXI(n1)
135 nod_nn(2) = failwave%IDXI(n2)
136 nod_nn(3) = failwave%IDXI(n3)
137 nod_nn(4) = failwave%IDXI(n4)
153 dir11 = cosx*cosy - sinx*siny
154 dir22 = cosx*siny + sinx*cosy
156 xm = (xl2(i) + xl3(i) + xl4(i)) * fourth
157 ym = (yl2(i) + yl3(i) + yl4(i)) * fourth
160 dx1 = xm - dir11 * lmax
161 dy1 = ym - dir22 * lmax
162 dx2 = xm + dir11 * lmax
163 dy2 = ym + dir22 * lmax
175 intersection = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
176 IF (intersection == 1)
THEN
182 IF (intersection == 0)
THEN
184 intersection = seg_intersect(x2
185 IF (intersection == 1)
THEN
192 IF (intersection == 0)
THEN
194 intersection = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
195 IF (intersection == 1)
THEN
202 IF (intersection == 0)
THEN
204 intersection = seg_intersect(x4,y4,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
213 IF (intersection == 1)
THEN
216 maxlev = failwave%MAXLEV_STACK(ncurr)
219 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr
220 maxlev = failwave%MAXLEV_STACK(ncurr)
223 IF (maxlev > failwave%SIZE)
THEN
225 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
227#include "lockoff.inc"
228 maxlev = failwave%SIZE
229 failwave%MAXLEV_STACK(ncurr) = maxlev
231 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
238 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 1st DIR ',ngl(i)
239#include "lockoff.inc"
252 nod_nn(1) = failwave%IDXI(n1)
253 nod_nn(2) = failwave%IDXI(n2)
254 nod_nn(3) = failwave%IDXI(n3)
255 nod_nn(4) = failwave%IDXI(n4)
271 dir11 = cosx*cosy - sinx*siny
272 dir22 = cosx*siny + sinx*cosy
275 xm = (xl2(i) + xl3(i) + xl4(i)) * fourth
276 ym = (yl2(i) + yl3(i) + yl4(i)) * fourth
277 lmax = sqrt(xm**2 + ym**2)*five
279 dx1 = xm - dir11 * lmax
280 dy1 = ym - dir22 * lmax
281 dx2 = xm + dir11 * lmax
282 dy2 = ym + dir22 * lmax
294 intersection = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
295 IF (intersection == 1)
THEN
301 IF (intersection == 0)
THEN
303 intersection = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
304 IF (intersection == 1)
THEN
312 IF (intersection == 0)
THEN
313 intersection = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
314 IF (intersection ==
THEN
321 IF (intersection == 0)
THEN
323 intersection = seg_intersect(x4,y4,x1,y1
324 IF (intersection == 1)
THEN
332 IF (intersection == 1)
THEN
335 maxlev = failwave%MAXLEV_STACK(ncurr)
338 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
339 maxlev = failwave%MAXLEV_STACK(ncurr)
342 IF (maxlev > failwave%SIZE)
THEN
344 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
346#include "lockoff.inc"
347 maxlev = failwave%SIZE
348 failwave%MAXLEV_STACK(ncurr) = maxlev
350 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
357 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 2nd DIR ',ngl(i)
358#include "lockoff.inc"
371 IF (fwave_el(i) == -1)
THEN
372 newcrk1 = newcrk1 + 1
374 ELSEIF (fwave_el(i) == -2)
THEN
375 newcrk2 = newcrk2 + 1
377 ELSEIF (fwave_el(i) == -3)
THEN
378 newcrk1 = newcrk1 + 1
379 newcrk2 = newcrk2 + 1
385 IF (newcrk1 + newcrk2 > 0)
THEN
387 rat1 = half * tan(pi/eight)
399 nod_nn(1) = failwave%IDXI(n1)
400 nod_nn(2) = failwave%IDXI(n2)
401 nod_nn(3) = failwave%IDXI(n3)
402 nod_nn(4) = failwave%IDXI(n4)
419 dir11 = cosx*cosy - sinx*siny
420 dir22 = cosx*siny + sinx*cosy
423 xm = (xl2(i) + xl3(i) + xl4(i)) * fourth
425 lmax = sqrt(xm**2 + ym**2)*five
427 dx1 = xm - dir11 * lmax
428 dy1 = ym - dir22 * lmax
429 dx2 = xm + dir11 * lmax
430 dy2 = ym + dir22 * lmax
438 x3 = xl2(i) + rx * rat1
439 y3 = yl2(i) + ry * rat1
440 x4 = xl2(i) + rx * rat2
441 y4 = yl2(i) + ry * rat2
444 x5 = xl3(i) + rx * rat1
445 y5 = yl3(i) + ry * rat1
446 x6 = xl3(i) + rx * rat2
447 y6 = yl3(i) + ry * rat2
454 intersection = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
455 IF (intersection == 1)
THEN
462 IF (intersection == 0)
THEN
463 intersection = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
464 IF (intersection == 1)
THEN
472 IF (intersection == 0)
THEN
473 intersection = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
474 IF (intersection == 1)
THEN
482 IF (intersection == 0)
THEN
483 intersection = seg_intersect(x4,y4,x5,y5,dx1,dy1,dx2,dy2,xint,yint,idebug)
484 IF (intersection == 1)
THEN
492 IF (intersection == 0)
THEN
493 intersection = seg_intersect(x5,y5,x6,y6,dx1,dy1,dx2,dy2,xint,yint,idebug)
494 IF (intersection == 1)
THEN
502 IF (intersection == 0)
THEN
503 intersection = seg_intersect(x6,y6,x7,y7,dx1,dy1,dx2,dy2,xint,yint,idebug)
504 IF (intersection == 1)
THEN
512 IF (intersection == 0)
THEN
513 intersection = seg_intersect(x7,y7,x8,y8,dx1,dy1,dx2,dy2,xint,yint,idebug)
514 IF (intersection == 1)
THEN
522 IF (intersection == 0)
THEN
523 intersection = seg_intersect(x8,y8,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
524 IF (intersection == 1)
THEN
532 IF (intersection == 1)
THEN
537 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
538 maxlev = failwave%MAXLEV_STACK(ncurr)
541 IF (maxlev > failwave%SIZE)
THEN
543 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
545#include "lockoff.inc"
546 maxlev = failwave%SIZE
547 failwave%MAXLEV_STACK(ncurr) = maxlev
549 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
550 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) = idf2(k)
557 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 1st DIR ',ngl(i)
558#include "lockoff.inc"
572 nod_nn(1) = failwave%IDXI(n1)
573 nod_nn(2) = failwave%IDXI(n2)
574 nod_nn(3) = failwave%IDXI(n3)
575 nod_nn(4) = failwave%IDXI(n4)
591 dir11 = cosx*cosy - sinx*siny
592 dir22 = cosx*siny + sinx*cosy
595 xm = (xl2(i) + xl3(i) + xl4(i)) * fourth
596 ym = (yl2(i) + yl3(i) + yl4(i)) * fourth
597 lmax = sqrt(xm**2 + ym**2)*five
599 dx1 = xm - dir11 * lmax
600 dy1 = ym - dir22 * lmax
601 dx2 = xm + dir11 * lmax
602 dy2 = ym + dir22 * lmax
610 x3 = xl2(i) + rx * rat1
611 y3 = yl2(i) + ry * rat1
612 x4 = xl2(i) + rx * rat2
613 y4 = yl2(i) + ry * rat2
616 x5 = xl3(i) + rx * rat1
617 y5 = yl3(i) + ry * rat1
618 x6 = xl3(i) + rx * rat2
619 y6 = yl3(i) + ry * rat2
626 intersection = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
627 IF (intersection == 1)
THEN
634 IF (intersection == 0)
THEN
635 intersection = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
636 IF (intersection == 1)
THEN
644 IF (intersection == 0)
THEN
645 intersection = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
646 IF (intersection == 1)
THEN
654 IF (intersection == 0)
THEN
655 intersection = seg_intersect(x4,y4,x5,y5,dx1,dy1,dx2,dy2,xint,yint,idebug)
656 IF (intersection == 1)
THEN
664 IF (intersection == 0)
THEN
665 intersection = seg_intersect(x5,y5,x6,y6,dx1,dy1,dx2,dy2,xint,yint,idebug)
666 IF (intersection == 1)
THEN
674 IF (intersection == 0)
THEN
675 intersection = seg_intersect(x6,y6,x7,y7,dx1,dy1,dx2,dy2,xint,yint,idebug)
676 IF (intersection == 1)
THEN
684 IF (intersection == 0)
THEN
685 intersection = seg_intersect(x7,y7,x8,y8,dx1,dy1,dx2,dy2,xint,yint,idebug)
686 IF (intersection == 1)
THEN
694 IF (intersection == 0)
THEN
695 intersection = seg_intersect(x8,y8,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
696 IF (intersection == 1)
THEN
704 IF (intersection == 1)
THEN
709 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
710 maxlev = failwave%MAXLEV_STACK(ncurr)
713 IF (maxlev > failwave%SIZE)
THEN
715 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
717#include "lockoff.inc"
718 maxlev = failwave%SIZE
719 failwave%MAXLEV_STACK(ncurr) = maxlev
722 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) = idf2(k)
729 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 2nd DIR ',ngl(i)
730#include "lockoff.inc"