333
334
335
337 USE format_mod , ONLY : fmw_4i
338
339
340
341#include "implicit_f.inc"
342
343
344
345#include "com04_c.inc"
346#include "units_c.inc"
347#include "scr03_c.inc"
348
349
350
351 INTEGER IALLO,NSEG0,NLIN0,NLIN,NACTIF,IEDGE,NSME,NB,ISU,LIN
352 INTEGER IXLINE(2,*),ITAB(*),MSVE(*),
353 . (*) ,TAGB(*),ISLINE(2,*),SURF_NODES(NSEG0,4),
354 . SLIN_NODES(NLIN0,2)
356
357
358
359 INTEGER I,J,K,L,NLMAX,STAT,,I1,I2,I3,I4,I5,I1M,I2M,NL,IS
360 INTEGER NEXTK(4),IWORK(70000),NLL
361 my_real nx,ny,nz,mx,my,mz,aaa,d1x,d1y,d1z,d2x,d2y,d2z
362 INTEGER, DIMENSION(:,:), ALLOCATABLE :: LINEIX,LINEIX2,IXWORK
363 INTEGER, DIMENSION(:), ALLOCATABLE :: INDEX,TAG
364 my_real,
DIMENSION(:,:),
ALLOCATABLE :: xlineix
365
366 INTEGER BITSET
368
369 DATA nextk/2,3,4,1/
370
371 nlmax = 0
372 IF(isu /= 0) nlmax = 4*nseg0
373
374 ALLOCATE (lineix(2,nlmax) ,stat=stat)
375 ALLOCATE (lineix2(2,nlmax) ,stat=stat)
376 ALLOCATE (xlineix(3,nlmax) ,stat=stat)
377 ALLOCATE (index(2*nlmax) ,stat=stat)
378 ALLOCATE (tag(numnod) ,stat=stat)
379 ALLOCATE (ixwork(5,nlmax) ,stat=stat)
380
381 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,
382 . msgtype=msgerror,
383 . c1='LINEIX')
384
385
386
387
388 IF(isu /= 0)THEN
389 is = 0
390 ll = 0
391 DO j=1,nseg0
392 is = is+1
393 i1=surf_nodes(j,1)
394 i2=surf_nodes(j,2)
395 i3=surf_nodes(j,3)
396 i4=surf_nodes(j,4)
397 d1x = x(1,i3) - x(1,i1)
398 d1y = x(2,i3) - x(2,i1)
399 d1z = x(3,i3) - x(3,i1)
400 d2x = x(1,i4) - x(1,i2)
401 d2y = x(2,i4) - x(2,i2)
402 d2z = x(3,i4) - x(3,i2)
403 nx = d1y * d2z - d1z * d2y
404 ny = d1z * d2x - d1x * d2z
405 nz = d1x * d2y - d1y * d2x
406 aaa = one/
max(sqrt(nx*nx+ny*ny+nz*nz),em20)
407 nx = nx * aaa
408 ny = ny * aaa
409 nz = nz * aaa
410 DO k=1,4
411 i1=surf_nodes(j,k)
412 i2=surf_nodes(j,nextk(k))
413 ll = ll+1
414 IF(i2 > i1)THEN
415 lineix(1,ll) = i1
416 lineix(2,ll) = i2
417 lineix2(1,ll) = j
418 lineix2(2,ll) = k
419 ELSE
420
421
422 lineix(1,ll) = i2
423 lineix(2,ll) = i1
424 lineix2(1,ll) = j
425 lineix2(2,ll) = -k
426 ENDIF
427 xlineix(1,ll) = nx
428 xlineix(2,ll) = ny
429 xlineix(3,ll) = nz
430 ENDDO
431 ENDDO
432
433 CALL my_orders(0,iwork,lineix,index,ll,2)
434
435
436
437
438
439 i1m = lineix(1,index(1))
440 i2m = lineix(2,index(1))
444 ixwork(3,
nl)=lineix2(1,index(1))
445 ixwork(4,
nl)=lineix2(2,index(1))
447 mx = xlineix(1,index(1))
448 my = xlineix(2,index(1))
449 mz = xlineix(3,index(1))
450 DO l=2,ll
451 i1 = lineix(1,index(l))
452 i2 = lineix(2,index(l))
453 nx = xlineix(1,index(l))
454 ny = xlineix(2,index(l))
455 nz = xlineix(3,index(l))
456 IF(i2 /= i2m .or. i1 /= i1m)THEN
460 ixwork(3,
nl)=lineix2(1,index(l))
461 ixwork(4,
nl)=lineix2(2,index(l))
463 ELSE
465 aaa = nx*mx + ny * my + nz * mz
466 IF (aaa < edg_cos) ixwork(5,
nl) = -1
467 ENDIF
468 i1m = i1
469 i2m = i2
470 mx = nx
471 my = ny
472 mz = nz
473 ENDDO
474
475
476
477
480 IF(iedge == 1)THEN
481
482 DO l=1,ll
483 IF(ixwork(5,l) == 1)THEN
490 ixwork(1,
nl)=ixwork(1,l)
491 ixwork(2,
nl)=ixwork(2,l)
492 ixwork(3,
nl)=ixwork(3,l)
493 ixwork(4,
nl)=ixwork(4,l)
495 ixwork(1,l)=i1
496 ixwork(2,l)=i2
497 ixwork(3,l)=i3
498 ixwork(4,l)=i4
499 ixwork(5,l)=i5
500 ENDIF
501 ENDDO
502 ELSEIF(iedge == 2)THEN
503
504 DO l=1,ll
506 ixwork(5,l)=1
507 ENDDO
508 ELSEIF(iedge == 3)THEN
509
510
511 DO l=1,ll
512 IF(iabs(ixwork(5,l)) == 1)THEN
518 i5=iabs(ixwork(5,
nl))
519 ixwork(1,
nl)=ixwork(1,l)
520 ixwork(2,
nl)=ixwork(2,l)
521 ixwork(3,
nl)=ixwork(3,l)
522 ixwork(4,
nl)=ixwork(4,l)
524 ixwork(1,l)=i1
525 ixwork(2,l)=i2
526 ixwork(3,l)=i3
527 ixwork(4,l)=i4
528 ixwork(5,l)=i5
529 ENDIF
530 ENDDO
531 ENDIF
532
533 ELSE
534
535 ll = 0
537 ENDIF
538
539
540
541 nll = ll
542 nlin = ll
544 IF(lin /= 0) THEN
545 nlin = nlin + nlin0
546 nactif = nactif + nlin0
547 ENDIF
548
549
550
551 nsme = 0
552 DO i=1,numnod
553 tag(i) = 0
554 ENDDO
555 DO ll=1,nll
556 tag(ixwork(1,ll)) = 1
557 tag(ixwork(2,ll)) = 1
558 ENDDO
559 IF(lin /= 0)THEN
560 DO j=1,nlin0
561 tag(slin_nodes(j,1)) = 1
562 tag(slin_nodes(j,2)) = 1
563 lntag(slin_nodes(j,1)) = 1
564 lntag(slin_nodes(j,2)) = 1
565 ENDDO
566 ENDIF
567 DO i=1,numnod
568 IF(tag(i) == 1) THEN
569 nsme = nsme + 1
570 tagb(i) =
bitset(tagb(i),nb)
571 ENDIF
572 ENDDO
573
574
575
576 IF(iallo == 2)THEN
577 l = 0
578 IF(lin /= 0)THEN
579 DO j=1,nlin0
580 l = l+1
581 ixline(1,l) = slin_nodes(j,1)
582 ixline(2,l) = slin_nodes(j,2)
583 isline(1,l) = 0
584 isline(2,l) = 0
585 ENDDO
586 ENDIF
587
588 DO ll=1,nll
589 IF(ixwork(5,ll) == 1)THEN
590 l = l+1
591 ixline(1,l) = ixwork(1,ll)
592 ixline(2,l) = ixwork(2,ll)
593 isline(1,l) = ixwork(3,ll)
594 isline(2,l) = ixwork(4,ll) ! cot de la surface
595 ENDIF
596 ENDDO
597
598
599 DO ll=1,nll
600 IF(ixwork(5,ll) /= 1)THEN
601 l = l+1
602 ixline(1,l) = ixwork(1,ll)
603 ixline(2,l) = ixwork(2,ll)
604 isline(1,l) = ixwork(3,ll)
605 isline(2,l) = ixwork(4,ll)
606 ENDIF
607 ENDDO
608
609 IF(ipri >= 1) THEN
610 WRITE(iout,'(/,A,/)')' ACTIV SEGMENTS USED FOR EDGE'
611 k=1
612 DO i=1,nactif
613 WRITE(iout,fmt=fmw_4i)(itab(ixline(k,i)),k=1,2)
614 ENDDO
615 ENDIF
616
617
618 l = 0
619 DO i=1,numnod
620 IF(tag(i) == 1)THEN
621 tag(i) = 0
622 l = l+1
623 msve(l) = i
624 ENDIF
625 ENDDO
626 ENDIF
627
628 DEALLOCATE (index)
629 DEALLOCATE (tag)
630 DEALLOCATE (ixwork)
631 DEALLOCATE (lineix)
632 DEALLOCATE (lineix2)
633 DEALLOCATE (xlineix)
634
635 RETURN
character *2 function nl()