35 . NEL ,IXC ,ITAB ,CRKDIR ,DIR_A ,
36 . NROT ,XL2 ,XL3 ,XL4 ,YL2 ,
42 use element_mod ,
only : nixc
46#include "implicit_f.inc"
57 INTEGER ,
DIMENSION(NIXC,NEL) ,
INTENT(IN) :: IXC
58 INTEGER ,
DIMENSION(NUMNOD) ,
INTENT(IN) :: ITAB
59 INTEGER ,
DIMENSION(NEL) ,
INTENT(IN) :: NGL,FWAVE_EL
61 my_real ,
DIMENSION(NEL,NROT) ,
INTENT(IN) :: dir_a
62 my_real ,
DIMENSION(NEL,2) ,
INTENT(IN) :: crkdir
63 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: xl2
64 TYPE (FAILWAVE_STR_) :: FAILWAVE
68 INTEGER I, II, K, N1, N2, N3, N4, INTERSECTION, NEWCRK1, NEWCRK2
70INTEGER ,
DIMENSION(NEL) :: INDX1,INDX2
71 INTEGER ,
DIMENSION(4) :: IDF1,IDF2,NOD_ID,
73 my_real :: dir11,dir22,cosx,sinx,cosy,siny,lmax,xm,ym,
74 . x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8,dx1,dy1,dx2,dy2,
75 . xint,yint,rat1,rat2,rx,ry
78 EXTERNAL SEG_INTERSECT
85 SELECT CASE (failwave%WAVE_MOD)
90 IF (fwave_el(i) < 0)
THEN
91 n1 = failwave%IDXI(ixc(2,i))
92 n2 = failwave%IDXI(ixc(3,i))
93 n3 = failwave%IDXI(ixc(4,i))
94 n4 = failwave%IDXI(ixc(5,i))
95 failwave%FWAVE_NOD_STACK(1,n1,1) = 1
96 failwave%FWAVE_NOD_STACK(1,n2,1) = 1
97 failwave%FWAVE_NOD_STACK(1,n3,1) = 1
98 failwave%FWAVE_NOD_STACK(1,n4,1) = 1
99 failwave%MAXLEV_STACK(n1) = 1
100 failwave%MAXLEV_STACK(n2) = 1
101 failwave%MAXLEV_STACK(n3) = 1
102 failwave%MAXLEV_STACK(n4) = 1
111 IF (fwave_el(i) == -1)
THEN
112 newcrk1 = newcrk1 + 1
114 ELSEIF (fwave_el(i) == -2)
THEN
115 newcrk2 = newcrk2 + 1
117 ELSEIF (fwave_el(i) == -3)
THEN
118 newcrk1 = newcrk1 + 1
119 newcrk2 = newcrk2 + 1
125 IF (newcrk1 + newcrk2 > 0)
THEN
136 nod_nn(1) = failwave%IDXI(n1)
137 nod_nn(2) = failwave%IDXI(n2)
138 nod_nn(3) = failwave%IDXI(n3)
139 nod_nn(4) = failwave%IDXI(n4)
155 dir11 = cosx*cosy - sinx*siny
156 dir22 = cosx*siny + sinx*cosy
158 xm = (xl2(i) + xl3(i) + xl4(i)) * fourth
160 lmax = sqrt(xm**2 + ym**2)*five
162 dx1 = xm - dir11 * lmax
163 dy1 = ym - dir22 * lmax
164 dx2 = xm + dir11 * lmax
165 dy2 = ym + dir22 * lmax
177 intersection = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
178 IF (intersection == 1)
THEN
184 IF (intersection == 0)
THEN
186 intersection = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
187 IF (intersection == 1)
THEN
194 IF (intersection == 0)
THEN
196 intersection = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
197 IF (intersection == 1)
THEN
204 IF (intersection == 0)
THEN
206 intersection = seg_intersect(x4,y4,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
207 IF (intersection == 1)
THEN
215 IF (intersection == 1)
THEN
218 maxlev = failwave%MAXLEV_STACK(ncurr)
221 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
222 maxlev = failwave%MAXLEV_STACK(ncurr)
225 IF (maxlev > failwave%SIZE)
THEN
227 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
229#include "lockoff.inc"
230 maxlev = failwave%SIZE
231 failwave%MAXLEV_STACK(ncurr) = maxlev
233 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
240 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 1st DIR ',ngl(i)
241#include "lockoff.inc"
254 nod_nn(1) = failwave%IDXI(n1)
255 nod_nn(2) = failwave%IDXI(n2)
256 nod_nn(3) = failwave%IDXI(n3)
257 nod_nn(4) = failwave%IDXI(n4)
273 dir11 = cosx*cosy - sinx*siny
274 dir22 = cosx*siny + sinx*cosy
277 xm = (xl2(i) + xl3(i) + xl4(i)) * fourth
278 ym = (yl2(i) + yl3(i) + yl4(i)) * fourth
279 lmax = sqrt(xm**2 + ym**2)*five
281 dx1 = xm - dir11 * lmax
282 dy1 = ym - dir22 * lmax
283 dx2 = xm + dir11 * lmax
284 dy2 = ym + dir22 * lmax
296 intersection = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
297 IF (intersection == 1)
THEN
303 IF (intersection == 0)
THEN
305 intersection = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
306 IF (intersection == 1)
THEN
314 IF (intersection == 0)
THEN
315 intersection = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
316 IF (intersection == 1)
THEN
323 IF (intersection == 0)
THEN
325 intersection = seg_intersect(x4,y4,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
326 IF (intersection == 1)
THEN
334 IF (intersection == 1)
THEN
337 maxlev = failwave%MAXLEV_STACK(ncurr)
340 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
341 maxlev = failwave%MAXLEV_STACK(ncurr)
344 IF (maxlev > failwave%SIZE)
THEN
346 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
348#include "lockoff.inc"
349 maxlev = failwave%SIZE
350 failwave%MAXLEV_STACK(ncurr) = maxlev
352 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
359 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 2nd DIR ',ngl(i)
360#include "lockoff.inc"
373 IF (fwave_el(i) == -1)
THEN
374 newcrk1 = newcrk1 + 1
376 ELSEIF (fwave_el(i) == -2)
THEN
377 newcrk2 = newcrk2 + 1
379 ELSEIF (fwave_el(i) == -3)
THEN
380 newcrk1 = newcrk1 + 1
381 newcrk2 = newcrk2 + 1
387 IF (newcrk1 + newcrk2 > 0)
THEN
389 rat1 = half * tan(pi/eight)
401 nod_nn(1) = failwave%IDXI(n1)
402 nod_nn(2) = failwave%IDXI(n2)
403 nod_nn(3) = failwave%IDXI(n3)
404 nod_nn(4) = failwave%IDXI(n4)
421 dir11 = cosx*cosy - sinx*siny
422 dir22 = cosx*siny + sinx*cosy
425 xm = (xl2(i) + xl3(i) + xl4(i)) * fourth
426 ym = (yl2(i) + yl3(i) + yl4(i)) * fourth
427 lmax = sqrt(xm**2 + ym**2)*five
429 dx1 = xm - dir11 * lmax
430 dy1 = ym - dir22 * lmax
431 dx2 = xm + dir11 * lmax
432 dy2 = ym + dir22 * lmax
440 x3 = xl2(i) + rx * rat1
441 y3 = yl2(i) + ry * rat1
442 x4 = xl2(i) + rx * rat2
443 y4 = yl2(i) + ry * rat2
446 x5 = xl3(i) + rx * rat1
447 y5 = yl3(i) + ry * rat1
448 x6 = xl3(i) + rx * rat2
449 y6 = yl3(i) + ry * rat2
456 intersection = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
457 IF (intersection == 1)
THEN
464 IF (intersection == 0)
THEN
465 intersection = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
466 IF (intersection == 1)
THEN
474 IF (intersection == 0)
THEN
475 intersection = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
476 IF (intersection == 1)
THEN
484 IF (intersection == 0)
THEN
485 intersection = seg_intersect(x4,y4,x5,y5,dx1,dy1,dx2,dy2,xint,yint,idebug)
486 IF (intersection == 1)
THEN
494 IF (intersection == 0)
THEN
495 intersection = seg_intersect(x5,y5,x6,y6,dx1,dy1,dx2,dy2,xint,yint,idebug)
496 IF (intersection == 1)
THEN
504 IF (intersection == 0)
THEN
505 intersection = seg_intersect(x6,y6,x7,y7,dx1,dy1,dx2,dy2,xint,yint,idebug)
506 IF (intersection == 1)
THEN
514 IF (intersection == 0)
THEN
515 intersection = seg_intersect(x7,y7,x8,y8,dx1,dy1,dx2,dy2,xint,yint,idebug)
516 IF (intersection ==
THEN
524 IF (intersection == 0)
THEN
525 intersection = seg_intersect(x8,y8,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
526 IF (intersection == 1)
THEN
534 IF (intersection == 1)
THEN
539 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
540 maxlev = failwave%MAXLEV_STACK(ncurr)
543 IF (maxlev > failwave%SIZE)
THEN
545 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
547#include "lockoff.inc"
548 maxlev = failwave%SIZE
549 failwave%MAXLEV_STACK(ncurr) = maxlev
551 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
552 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) = idf2(k)
559 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 1st DIR ',ngl(i)
560#include "lockoff.inc"
574 nod_nn(1) = failwave%IDXI(n1)
575 nod_nn(2) = failwave%IDXI(n2)
576 nod_nn(3) = failwave%IDXI(n3)
577 nod_nn(4) = failwave%IDXI(n4)
593 dir11 = cosx*cosy - sinx*siny
594 dir22 = cosx*siny + sinx*cosy
597 xm = (xl2(i) + xl3(i) + xl4(i)) * fourth
598 ym = (yl2(i) + yl3(i) + yl4(i)) * fourth
599 lmax = sqrt(xm**2 + ym**2)*five
601 dx1 = xm - dir11 * lmax
602 dy1 = ym - dir22 * lmax
603 dx2 = xm + dir11 * lmax
604 dy2 = ym + dir22 * lmax
612 x3 = xl2(i) + rx * rat1
613 y3 = yl2(i) + ry * rat1
614 x4 = xl2(i) + rx * rat2
615 y4 = yl2(i) + ry * rat2
618 x5 = xl3(i) + rx * rat1
619 y5 = yl3(i) + ry * rat1
620 x6 = xl3(i) + rx * rat2
621 y6 = yl3(i) + ry * rat2
628 intersection = seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
629 IF (intersection == 1)
THEN
636 IF (intersection == 0)
THEN
637 intersection = seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
638 IF (intersection == 1)
THEN
646 IF (intersection == 0)
THEN
647 intersection = seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
648 IF (intersection == 1)
THEN
656 IF (intersection == 0)
THEN
657 intersection = seg_intersect(x4,y4,x5,y5,dx1,dy1,dx2,dy2,xint,yint,idebug)
658 IF (intersection == 1)
THEN
666 IF (intersection == 0)
THEN
667 intersection = seg_intersect(x5,y5,x6,y6,dx1,dy1,dx2,dy2,xint,yint,idebug)
668 IF (intersection == 1)
THEN
676 IF (intersection == 0)
THEN
677 intersection = seg_intersect(x6,y6,x7,y7,dx1,dy1,dx2,dy2,xint,yint,idebug)
678 IF (intersection == 1)
THEN
686 IF (intersection == 0)
THEN
687 intersection = seg_intersect(x7,y7,x8,y8,dx1,dy1,dx2,dy2,xint,yint,idebug)
688 IF (intersection == 1)
THEN
696 IF (intersection == 0)
THEN
697 intersection = seg_intersect(x8,y8,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
698 IF (intersection == 1)
THEN
706 IF (intersection == 1)
THEN
711 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
712 maxlev = failwave%MAXLEV_STACK(ncurr)
715 IF (maxlev > failwave%SIZE)
THEN
717 WRITE(iout,*)
'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
719#include "lockoff.inc"
720 maxlev = failwave%SIZE
721 failwave%MAXLEV_STACK(ncurr) = maxlev
723 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
724 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) = idf2(k)
731 WRITE(iout,*)
'ERROR ADVANCING CRACK IN ELEMENT, 2nd DIR ',ngl(i)
732#include "lockoff.inc"