38
39
40
42 use element_mod , only : nixc
43
44
45
46#include "implicit_f.inc"
47
48
49
50#include "com04_c.inc"
51#include "units_c.inc"
52#include "comlock.inc"
53
54
55
56 INTEGER NEL,NROT
57 INTEGER ,DIMENSION(NIXC,NEL) ,INTENT(IN) :: IXC
58 INTEGER ,DIMENSION(NUMNOD) ,INTENT(IN) :: ITAB
59 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: NGL,FWAVE_EL
60
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,xl3,xl4,yl2,yl3,yl4
64 TYPE (FAILWAVE_STR_) :: FAILWAVE
65
66
67
68 INTEGER I, II, K, N1, N2, N3, N4, INTERSECTION, NEWCRK1, NEWCRK2, NCURR,
69 . MAXLEV,IDEBUG
70 INTEGER ,DIMENSION(NEL) :: INDX1,INDX2
71 INTEGER ,DIMENSION(4) :: IDF1,IDF2,NOD_ID,NOD_NN
72
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
76
77 INTEGER SEG_INTERSECT
79
80
81
82 idebug = 0
83
84
85 SELECT CASE (failwave%WAVE_MOD)
86
87 CASE (1)
88
89 DO i=1,nel
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
103 ENDIF
104 ENDDO
105
106 CASE (2)
107
108 newcrk1 = 0
109 newcrk2 = 0
110 DO i=1,nel
111 IF (fwave_el(i) == -1) THEN
112 newcrk1 = newcrk1 + 1
113 indx1(newcrk1) = i
114 ELSEIF (fwave_el(i) == -2) THEN
115 newcrk2 = newcrk2 + 1
116 indx2(newcrk2) = i
117 ELSEIF (fwave_el(i) == -3) THEN
118 newcrk1 = newcrk1 + 1
119 newcrk2 = newcrk2 + 1
120 indx1(newcrk1) = i
121 indx2(newcrk2) = i
122 ENDIF
123 ENDDO
124
125 IF (newcrk1 + newcrk2 > 0) THEN
126
127
128
129
130 DO ii=1,newcrk1
131 i = indx1(ii)
132 n1 = ixc(2,i)
133 n2 = ixc(3,i)
134 n3 = ixc(4,i)
135 n4 = ixc(5,i)
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)
140 nod_id(1) = itab(n1)
141 nod_id(2) = itab(n2)
142 nod_id(3) = itab(n3)
143 nod_id(4) = itab(n4)
144 idf1(:) = 0
145 idf2(:) = 0
146
147 IF (nrot == 0) THEN
148 dir11 = -crkdir(i,2)
149 dir22 = crkdir(i,1)
150 ELSE
151 cosx = dir_a(i,1)
152 sinx = dir_a(i,2)
153 cosy =-crkdir(i,2)
154 siny = crkdir(i,1)
155 dir11 = cosx*cosy - sinx*siny
156 dir22 = cosx*siny + sinx*cosy
157 ENDIF
158 xm = (xl2(i) + xl3(i) + xl4(i)) * fourth
159 ym = (yl2(i) + yl3(i) + yl4(i)) * fourth
160 lmax = sqrt(xm**2 + ym**2)*five
161
162 dx1 = xm - dir11 * lmax
163 dy1 = ym - dir22 * lmax
164 dx2 = xm + dir11 * lmax
165 dy2 = ym + dir22 * lmax
166
167 x1 = zero
168 y1 = zero
169 x2 = xl2(i)
170 y2 = yl2(i)
171 x3 = xl3(i)
172 y3 = yl3(i)
173 x4 = xl4(i)
174 y4 = yl4(i)
175
176
177 intersection =
seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
178 IF (intersection == 1) THEN
179 idf1(1) = nod_id(2)
180 idf1(2) = nod_id(1)
181 idf1(3) = nod_id(4)
182 idf1(4) = nod_id(3)
183 END IF
184 IF (intersection == 0) THEN
185
186 intersection =
seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
187 IF (intersection == 1) THEN
188 idf1(1) = nod_id(4)
189 idf1(2) = nod_id(3)
190 idf1(3) = nod_id(2)
191 idf1(4) = nod_id(1)
192 ENDIF
193 ENDIF
194 IF (intersection == 0) THEN
195
196 intersection =
seg_intersect(x3,y3,x4,y4,dx1,dy1,dx2,dy2,xint,yint,idebug)
197 IF (intersection == 1) THEN
198 idf1(1) = nod_id(2)
199 idf1(2) = nod_id(1)
200 idf1(3) = nod_id(4)
201 idf1(4) = nod_id(3)
202 END IF
203 END IF
204 IF (intersection == 0) THEN
205
206 intersection =
seg_intersect(x4,y4,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
207 IF (intersection == 1) THEN
208 idf1(1) = nod_id(4)
209 idf1(2) = nod_id(3)
210 idf1(3) = nod_id(2)
211 idf1(4) = nod_id(1)
212 ENDIF
213 ENDIF
214
215 IF (intersection == 1) THEN
216 DO k=1,4
217 ncurr = nod_nn(k)
218 maxlev = failwave%MAXLEV_STACK(ncurr)
219
220
221 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
222 maxlev = failwave%MAXLEV_STACK(ncurr)
223
224
225 IF (maxlev > failwave%SIZE) THEN
226#include "lockon.inc"
227 WRITE(iout,*) 'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
228 . 'LEVEL=',maxlev
229#include "lockoff.inc"
230 maxlev = failwave%SIZE
231 failwave%MAXLEV_STACK(ncurr) = maxlev
232 ENDIF
233 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
234
235 END DO
236
237 ELSE
238
239#include "lockon.inc"
240 WRITE(iout,*) 'ERROR ADVANCING CRACK IN ELEMENT, 1st DIR ',ngl(i)
241#include "lockoff.inc"
242 ENDIF
243
244 ENDDO
245
246
247
248 DO ii=1,newcrk2
249 i = indx2(ii)
250 n1 = ixc(2,i)
251 n2 = ixc(3,i)
252 n3 = ixc(4,i)
253 n4 = ixc(5,i)
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)
258 nod_id(1) = itab(n1)
259 nod_id(2) = itab(n2)
260 nod_id(3) = itab(n3)
261 nod_id(4) = itab(n4)
262 idf1(:) = 0
263 idf2(:) = 0
264
265 IF (nrot == 0) THEN
266 dir11 = crkdir(i,1)
267 dir22 = crkdir(i,2)
268 ELSE
269 cosx = dir_a(i,1)
270 sinx = dir_a(i,2)
271 cosy = crkdir(i,1)
272 siny = crkdir(i,2)
273 dir11 = cosx*cosy - sinx*siny
274 dir22 = cosx*siny + sinx*cosy
275 ENDIF
276
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
280
281 dx1 = xm - dir11 * lmax
282 dy1 = ym - dir22 * lmax
283 dx2 = xm + dir11 * lmax
284 dy2 = ym + dir22 * lmax
285
286 x1 = zero
287 y1 = zero
288 x2 = xl2(i)
289 y2 = yl2(i)
290 x3 = xl3(i)
291 y3 = yl3(i)
292 x4 = xl4(i)
293 y4 = yl4(i)
294
295
296 intersection =
seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
297 IF (intersection == 1) THEN
298 idf1(1) = nod_id(2)
299 idf1(2) = nod_id(1)
300 idf1(3) = nod_id(4)
301 idf1(4) = nod_id(3)
302 END IF
303 IF (intersection == 0) THEN
304
305 intersection =
seg_intersect(x2,y2,x3,y3,dx1,dy1,dx2,dy2,xint,yint,idebug)
306 IF (intersection == 1) THEN
307 idf1(1) = nod_id(4)
308 idf1(2) = nod_id(3)
309 idf1(3) = nod_id(2)
310 idf1(4) = nod_id(1)
311 ENDIF
312 ENDIF
313
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
317 idf1(1) = nod_id(2)
318 idf1(2) = nod_id(1)
319 idf1(3) = nod_id(4)
320 idf1(4) = nod_id(3)
321 END IF
322 END IF
323 IF (intersection == 0) THEN
324
325 intersection =
seg_intersect(x4,y4,x1,y1,dx1,dy1,dx2,dy2,xint,yint,idebug)
326 IF (intersection == 1) THEN
327 idf1(1) = nod_id(4)
328 idf1(2) = nod_id(3)
329 idf1(3) = nod_id(2)
330 idf1(4) = nod_id(1)
331 ENDIF
332 ENDIF
333
334 IF (intersection == 1) THEN
335 DO k=1,4
336 ncurr = nod_nn(k)
337 maxlev = failwave%MAXLEV_STACK(ncurr)
338
339
340 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
341 maxlev = failwave%MAXLEV_STACK(ncurr)
342
343
344 IF (maxlev > failwave%SIZE) THEN
345#include "lockon.inc"
346 WRITE(iout,*) 'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
347 . 'LEVEL=',maxlev
348#include "lockoff.inc"
349 maxlev = failwave%SIZE
350 failwave%MAXLEV_STACK(ncurr) = maxlev
351 ENDIF
352 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
353
354 END DO
355
356 ELSE
357
358#include "lockon.inc"
359 WRITE(iout,*) 'ERROR ADVANCING CRACK IN ELEMENT, 2nd DIR ',ngl(i)
360#include "lockoff.inc"
361 ENDIF
362
363 ENDDO
364 ENDIF
365
366
367 CASE (3)
368
369
370 newcrk1 = 0
371 newcrk2 = 0
372 DO i=1,nel
373 IF (fwave_el(i) == -1) THEN
374 newcrk1 = newcrk1 + 1
375 indx1(newcrk1) = i
376 ELSEIF (fwave_el(i) == -2) THEN
377 newcrk2 = newcrk2 + 1
378 indx2(newcrk2) = i
379 ELSEIF (fwave_el(i) == -3) THEN
380 newcrk1 = newcrk1 + 1
381 newcrk2 = newcrk2 + 1
382 indx1(newcrk1) = i
383 indx2(newcrk2) = i
384 ENDIF
385 ENDDO
386
387 IF (newcrk1 + newcrk2 > 0) THEN
388
389 rat1 = half * tan(pi/eight)
390 rat2 = one - rat1
391
392
393
394 DO ii=1,newcrk1
395 i = indx1(ii)
396 n1 = ixc(2,i)
397 n2 = ixc(3,i)
398 n3 = ixc(4,i)
399 n4 = ixc(5,i)
400
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)
405
406 nod_id(1) = itab(n1)
407 nod_id(2) = itab(n2)
408 nod_id(3) = itab(n3)
409 nod_id(4) = itab(n4)
410 idf1(:) = 0
411 idf2(:) = 0
412
413 IF (nrot == 0) THEN
414 dir11 = -crkdir(i,2)
415 dir22 = crkdir(i,1)
416 ELSE
417 cosx = dir_a(i,1)
418 sinx = dir_a(i,2)
419 cosy =-crkdir(i,2)
420 siny = crkdir(i,1)
421 dir11 = cosx*cosy - sinx*siny
422 dir22 = cosx*siny + sinx*cosy
423 ENDIF
424
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
428
429 dx1 = xm - dir11 * lmax
430 dy1 = ym - dir22 * lmax
431 dx2 = xm + dir11 * lmax
432 dy2 = ym + dir22 * lmax
433
434 x1 = xl2(i)*rat1
435 y1 = yl2(i)*rat1
436 x2 = xl2(i)*rat2
437 y2 = yl2(i)*rat2
438 rx = xl3(i) - xl2(i)
439 ry = yl3(i) - yl2(i)
440 x3 = xl2(i) + rx * rat1
441 y3 = yl2(i) + ry * rat1
442 x4 = xl2(i) + rx * rat2
443 y4 = yl2(i) + ry * rat2
444 rx = xl4(i) - xl3(i)
445 ry = yl4(i) - yl3(i)
446 x5 = xl3(i) + rx * rat1
447 y5 = yl3(i) + ry * rat1
448 x6 = xl3(i) + rx * rat2
449 y6 = yl3(i) + ry * rat2
450 x7 = xl4(i) * rat2
451 y7 = yl4(i) * rat2
452 x8 = xl4(i) * rat1
453 y8 = yl4(i) * rat1
454
455
456 intersection =
seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
457 IF (intersection == 1) THEN
458 idf1(1) = nod_id(2)
459 idf1(2) = nod_id(1)
460 idf1(3) = nod_id(4)
461 idf1(4) = nod_id(3)
462 ENDIF
463
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
467 idf1(2) = nod_id(1)
468 idf2(2) = nod_id(3)
469 idf1(4) = nod_id(3)
470 idf2(4) = nod_id(1)
471 ENDIF
472 ENDIF
473
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
477 idf1(1) = nod_id(4)
478 idf1(2) = nod_id(3)
479 idf1(3) = nod_id(2)
480 idf1(4) = nod_id(1)
481 ENDIF
482 ENDIF
483
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
487 idf1(1) = nod_id(4)
488 idf2(1) = nod_id(2)
489 idf1(3) = nod_id(2)
490 idf2(3) = nod_id(4)
491 ENDIF
492 ENDIF
493
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
497 idf1(1) = nod_id(2)
498 idf1(2) = nod_id(1)
499 idf1(3) = nod_id(4)
500 idf1(4) = nod_id(3)
501 ENDIF
502 ENDIF
503
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
507 idf1(2) = nod_id(1)
508 idf2(2) = nod_id(3)
509 idf1(4) = nod_id(3)
510 idf2(4) = nod_id(1)
511 ENDIF
512 ENDIF
513
514 IF (intersection == 0) THEN
515 intersection =
seg_intersect(x7,y7,x8,y8,dx1,dy1,dx2,dy2,xint,yint,idebug)
516 IF (intersection == 1) THEN
517 idf1(1) = nod_id(4)
518 idf1(2) = nod_id(3)
519 idf1(3) = nod_id(2)
520 idf1(4) = nod_id(1)
521 ENDIF
522 ENDIF
523
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
527 idf1(1) = nod_id(4)
528 idf2(1) = nod_id(2)
529 idf1(3) = nod_id(2)
530 idf2(3) = nod_id(4)
531 ENDIF
532 ENDIF
533
534 IF (intersection == 1) THEN
535 DO k=1,4
536 ncurr = nod_nn(k)
537
538
539 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
540 maxlev = failwave%MAXLEV_STACK(ncurr)
541
542
543 IF (maxlev > failwave%SIZE) THEN
544#include "lockon.inc"
545 WRITE(iout,*) 'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
546 . 'LEVEL=',maxlev
547#include "lockoff.inc"
548 maxlev = failwave%SIZE
549 failwave%MAXLEV_STACK(ncurr) = maxlev
550 ENDIF
551 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
552 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) = idf2(k)
553
554 END DO
555
556 ELSE
557
558#include "lockon.inc"
559 WRITE(iout,*) 'ERROR ADVANCING CRACK IN ELEMENT, 1st DIR ',ngl(i)
560#include "lockoff.inc"
561 ENDIF
562
563 ENDDO
564
565
566
567
568 DO ii=1,newcrk2
569 i = indx2(ii)
570 n1 = ixc(2,i)
571 n2 = ixc(3,i)
572 n3 = ixc(4,i)
573 n4 = ixc(5,i)
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)
578 nod_id(1) = itab(n1)
579 nod_id(2) = itab(n2)
580 nod_id(3) = itab(n3)
581 nod_id(4) = itab(n4)
582 idf1(:) = 0
583 idf2(:) = 0
584
585 IF (nrot == 0) THEN
586 dir11 = crkdir(i,1)
587 dir22 = crkdir(i,2)
588 ELSE
589 cosx = dir_a(i,1)
590 sinx = dir_a(i,2)
591 cosy = crkdir(i,1)
592 siny = crkdir(i,2)
593 dir11 = cosx*cosy - sinx*siny
594 dir22 = cosx*siny + sinx*cosy
595 ENDIF
596
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
600
601 dx1 = xm - dir11 * lmax
602 dy1 = ym - dir22 * lmax
603 dx2 = xm + dir11 * lmax
604 dy2 = ym + dir22 * lmax
605
606 x1 = xl2(i)*rat1
607 y1 = yl2(i)*rat1
608 x2 = xl2(i)*rat2
609 y2 = yl2(i)*rat2
610 rx = xl3(i) - xl2(i)
611 ry = yl3(i) - yl2(i)
612 x3 = xl2(i) + rx * rat1
613 y3 = yl2(i) + ry * rat1
614 x4 = xl2(i) + rx * rat2
615 y4 = yl2(i) + ry * rat2
616 rx = xl4(i) - xl3(i)
617 ry = yl4(i) - yl3(i)
618 x5 = xl3(i) + rx * rat1
619 y5 = yl3(i) + ry * rat1
620 x6 = xl3(i) + rx * rat2
621 y6 = yl3(i) + ry * rat2
622 x7 = xl4(i) * rat2
623 y7 = yl4(i) * rat2
624 x8 = xl4(i) * rat1
625 y8 = yl4(i) * rat1
626
627
628 intersection =
seg_intersect(x1,y1,x2,y2,dx1,dy1,dx2,dy2,xint,yint,idebug)
629 IF (intersection == 1) THEN
630 idf1(1) = nod_id(2)
631 idf1(2) = nod_id(1)
632 idf1(3) = nod_id(4)
633 idf1(4) = nod_id(3)
634 ENDIF
635
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
639 idf1(2) = nod_id(1)
640 idf2(2) = nod_id(3)
641 idf1(4) = nod_id(3)
642 idf2(4) = nod_id(1)
643 ENDIF
644 ENDIF
645
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
649 idf1(1) = nod_id(4)
650 idf1(2) = nod_id(3)
651 idf1(3) = nod_id(2)
652 idf1(4) = nod_id(1)
653 ENDIF
654 ENDIF
655
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
659 idf1(1) = nod_id(4)
660 idf2(1) = nod_id(2)
661 idf1(3) = nod_id(2)
662 idf2(3) = nod_id(4)
663 ENDIF
664 ENDIF
665
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
669 idf1(1) = nod_id(2)
670 idf1(2) = nod_id(1)
671 idf1(3) = nod_id(4)
672 idf1(4) = nod_id(3)
673 ENDIF
674 ENDIF
675
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
679 idf1(2) = nod_id(1)
680 idf2(2) = nod_id(3)
681 idf1(4) = nod_id(3)
682 idf2(4) = nod_id(1)
683 ENDIF
684 ENDIF
685
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
689 idf1(1) = nod_id(4)
690 idf1(2) = nod_id(3)
691 idf1(3) = nod_id(2)
692 idf1(4) = nod_id(1)
693 ENDIF
694 ENDIF
695
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
699 idf1(1) = nod_id(4)
700 idf2(1) = nod_id(2)
701 idf1(3) = nod_id(2)
702 idf2(3) = nod_id(4)
703 ENDIF
704 ENDIF
705
706 IF (intersection == 1) THEN
707 DO k=1,4
708 ncurr = nod_nn(k)
709
710
711 failwave%MAXLEV_STACK(ncurr) = failwave%MAXLEV_STACK(ncurr) + 1
712 maxlev = failwave%MAXLEV_STACK(ncurr)
713
714
715 IF (maxlev > failwave%SIZE) THEN
716#include "lockon.inc"
717 WRITE(iout,*) 'ERROR IN FAILWAVE PROPAGATION: ELEMENT =',ngl(i),
718 . 'LEVEL=',maxlev
719#include "lockoff.inc"
720 maxlev = failwave%SIZE
721 failwave%MAXLEV_STACK(ncurr) = maxlev
722 ENDIF
723 failwave%FWAVE_NOD_STACK(1,ncurr,maxlev) = idf1(k)
724 failwave%FWAVE_NOD_STACK(2,ncurr,maxlev) = idf2(k)
725
726 END DO
727
728 ELSE
729
730#include "lockon.inc"
731 WRITE(iout,*) 'ERROR ADVANCING CRACK IN ELEMENT, 2nd DIR ',ngl(i)
732#include "lockoff.inc"
733 ENDIF
734
735 ENDDO
736
737 ENDIF
738
739
740 END SELECT
741
742 RETURN
integer function seg_intersect(x1, y1, x2, y2, x3, y3, x4, y4, xint, yint, idebug)